我有一份大型中世纪手稿,已转录为 XML(使用 TEI 模式)。我正在使用 xsl:fo 和 Apache FOP 处理 PDF。该文件是使用嵌套构造的<body>
, <p>
, <seg>
如下所示。偶尔<add>
用于页边注释。
<body>
<p>
<title>title here</title>
<seg>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Quisque a orci non mauris convallis imperdiet consequat nec
purus. Cras mollis lacus vel lectus facilisis, non
hendrerit velit tempor. Phasellus tempor urna vel accumsan
dignissim.</seg>
<seg>Aliquam porta eu nunc sed laoreet.
Sed<add type='margin_gloss'>Some margin note here</add>
non nulla consectetur, lobortis tortor ac,
placerat nunc. Nulla viverra finibus est nec efficitur. Donec
nisi nisl, tincidunt dapibus purus pretium, rhoncus volutpat
tortor. Cras fringilla tellus tortor, at
ultricies mi cursus at. Nulla facilisi.</seg>
<seg>Quisque id mi nisl. In in mauris id leo malesuada hendrerit.
Orci varius natoque
penatibus et magnis dis parturient montes, nascetur ridiculus
mus. Nulla sit amet
commodo mauris.</seg>
</p>
</body>
xml 文件很大,因此有一个主 xml 文件使用<xi:include>
我们需要携带数百份此类文件才能撰写完整的手稿。
我已按照以下基本说明成功地将其处理为 PDF:
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master
master-name="page-recto"
page-height="29.7cm" page-width="21cm"
margin-top="2cm" margin-bottom="2cm"
margin-left="2cm" margin-right="1cm">
<fo:region-body
region-name="xsl-region-body"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="page-recto">
<fo:flow flow-name="xsl-region-body"
font-family="Times" font-weight="normal"
font-size="8pt" space-before="8pt" space-after="8pt"
text-align="justify" end-indent="120pt">
<xsl:apply-templates/>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="body/p">
<fo:block
page-break-inside="avoid"
font-size="9pt" font-weight="bold"
padding-bottom="1cm" end-indent="120pt">
<xsl:value-of select="tei:title"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="seg">
<fo:block id="@xml:id"
font-family="Times" font-weight="normal"
font-size="8pt" space-before="8pt"
space-after="8pt" text-align="justify"
end-indent="120pt">
<xsl:apply-templates/>
</fo:block>
</xsl:template>
这给了我一个成功的结果,如下页所示:
我缩进了右侧(末端)以便为页边注释腾出空间。例如,在第 4<seg>
第一个的<p>
,有一个边注“Fabri +”。它被编码了<add type=margin_gloss>Fabri +</add>
我添加以下模板来“浮动”边距光泽:
<xsl:template match="body/p//add[@type='margin_gloss']">
<fo:float float="end">
<fo:block-container>
<fo:block>
<xsl:value-of select="./s/text()"/>
</fo:block>
</fo:block-container>
</fo:float>
</xsl:template>
我遇到了这场灾难(红色文本/箭头是我解决问题的指南)。带浮动的模板做了三件我无法理解的事情。浮动“应该”出现在第四段旁边,但位于下方,与下一个段合并<p>
;第四个<seg>
已经消失了;以及以下内容<p>
的缩进减少了。