XSL:FO, как «передавать» информацию отдельно от тела в xsl-region-start и xsl-region-end

У меня есть средневековая рукопись, закодированная в XML (с использованием схемы TEI). У рукописи есть «тело», которое было преобразовано в XSL:FO в xsl-region-body и отлично выводится. Рукопись также содержит некоторые «глоссы» (примечания) на левом и правом полях. Они размечены в XML-документе с использованием, например, <add type="margin_gloss" place="left">Some foo note</add>

Я зарезервировал xsl-region-start и xsl-region-end для получения этих пояснений на полях относительно их положения в оригинальной рукописи. Однако у меня возникли проблемы с тем, чтобы размеченный текст «перетекал» в эти области.

Примечание. У меня нет проблем с размещением жестко заданных данных в этих регионах, например, с <fo:static-content flow-name="xsl-region-after">.

Проблема в том, что с приведенным ниже кодом Apache FOP говорит мне: For "fo:page-sequence", only one "fo:flow" may be declared.

        <fo:page-sequence master-reference="odd">
            <fo:static-content flow-name="xsl-region-after"
                font-family="Times"
                font-size="8pt">
                <fo:block text-align="center">-<fo:page-number/>-
                </fo:block>
            </fo:static-content>
            <fo:flow flow-name="xsl-region-end"
                font-family="Times"
                font-size="6pt">
                <xsl:call-template name="marginalia-right"/>
            </fo:flow>
            <fo:flow flow-name="xsl-region-body" 
                font-family="Times"
                font-size="8pt"
                space-before="8pt"
                space-after="8pt">
                <xsl:apply-templates/>
            </fo:flow>
        </fo:page-sequence>

Я извлекаю заметки с помощью шаблона XSL:

 <xsl:template match="//tei:add[@type='margin_gloss' and @place='right']" name="marginalia-right">
      <fo:block>
          <xsl:value-of select="text()"/>
      </fo:block>
  </xsl:template>

Подводя итог проблеме: я хотел бы, чтобы блеск полей, размеченный в XML с помощью <add>, отображался в xsl-region-start, а xsl-region-end располагался относительно строки текста в xsl-region-body. FPO говорит мне, что я не могу "течь" дважды.


person jbrehr    schedule 20.12.2017    source источник
comment
Возможно, мне нужно использовать альтернативную структуру, например xsl-fo tables с 3 столбцами? Основное содержимое (тело) естественным образом разбивается на абзацы, которые визуально работают внутри «ячеек» таблицы. То есть... я открыт для переосмысления подхода в xsl-fo.   -  person jbrehr    schedule 21.12.2017
comment
Почему float-left и float-right не работают? Как маргиналии... см. этот пример renderx.com/usecasestest.html и маргиналии   -  person Kevin Brown    schedule 21.12.2017


Ответы (1)


Вы не можете синхронизировать содержимое в region-start с содержимым в region-body.

Однако вы можете поместить содержимое в область-тело и управлять его положением так, чтобы оно перекрывало начало области. XSL-FO предоставляет < механизм href="http://www.datypic.com/sc/fo11/e-fo_float.html" rel="nofollow noreferrer">fo:float для этого.

<fo:block --extra wide and a negative left margin to overlap the region-start>
    <fo:float> this contains the margin note</fo:float>
    <fo:block>this contains the body text linked to the note</fo:block>
</fo:block>

FOP имеет ограниченную поддержку для fo:float. Коммерческие оптоволоконные процессоры (я использую Antennahouse Formatter) предлагают полную поддержку.

person Hobbes    schedule 21.12.2017
comment
@kevin-brown спасибо обоим. Сейчас я пытаюсь разобраться с fo:float. Возможно, мне придется сделать новый пост об этом. В принципе, я должен использовать такой шаблон, чтобы вставить поплавок? <xsl:template match="//tei:add[@type='margin_gloss' and @place='right']"> <fo:float float="right"><fo:block><xsl:value-of select="text()"/></fo:block></fo:float> </xsl:template> - person jbrehr; 21.12.2017
comment
Да что-то подобное. - person Hobbes; 21.12.2017
comment
Я работал над этим какое-то время безуспешно, разместил здесь новый вопрос: document" title="xslfo float для отображения примечаний на полях разрывает документ"> stackoverflow.com/questions/47934126/ - person jbrehr; 22.12.2017