XSL:FO 如何 'flow' 信息从正文中分离到 xsl-region-start 和 xsl-region-end
XSL:FO how to 'flow' info separate from body into xsl-region-start and xsl-region-end
我有一份用 XML 编码的中世纪手稿(使用 TEI 模式)。手稿有一个 'body' 已经映射到 XSL:FO 到 xsl-region-body
并完美输出。手稿的左右页边空白处也有一些 'glosses'(注释)。这些在 XML 文档中使用 <add type="margin_gloss" place="left">Some foo note</add>
标记
我已保留 xsl-region-start
和 xsl-region-end
接收这些相对于它们在原稿中的位置的页边注解。但是,我无法将 'flow' 的标记文本放入这些区域。
注意:我可以将硬编码数据放入这些区域,例如 <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 告诉我我不能 'flow' 两次。
您无法将 region-start 中的内容与 region-body 中的内容同步。
但是,您可以将内容放在区域主体中并操纵其位置,使其与区域起点重叠。 XSL-FO provides the 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 有 limited support fo:float。商业 FO 处理器(我使用 Antennahouse Formatter)提供全面支持。
我有一份用 XML 编码的中世纪手稿(使用 TEI 模式)。手稿有一个 'body' 已经映射到 XSL:FO 到 xsl-region-body
并完美输出。手稿的左右页边空白处也有一些 'glosses'(注释)。这些在 XML 文档中使用 <add type="margin_gloss" place="left">Some foo note</add>
我已保留 xsl-region-start
和 xsl-region-end
接收这些相对于它们在原稿中的位置的页边注解。但是,我无法将 'flow' 的标记文本放入这些区域。
注意:我可以将硬编码数据放入这些区域,例如 <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 告诉我我不能 'flow' 两次。
您无法将 region-start 中的内容与 region-body 中的内容同步。
但是,您可以将内容放在区域主体中并操纵其位置,使其与区域起点重叠。 XSL-FO provides the 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 有 limited support fo:float。商业 FO 处理器(我使用 Antennahouse Formatter)提供全面支持。