私は大きな中世の原稿をXMLに転記しました(TEIスキーマを使用しています)。私はxsl:foとApache FOPを使ってPDFを処理しています。ファイルは、以下に示すようにネストした<body>
,<p>
,<seg>
を使用して構成されています。場合によっては、余白には<add>
が使用されます。XSL:余白を表示するためのFOフロート - 文書を破る
<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ファイルは巨大であり、従って完全な原稿を構成するために、これらの文書の数百を持って<xi:include>
Sを使用して一つのマスターxmlファイルがあります。
私は成功し、次の基本的な手順で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>
:
を私は右をインデントしましたマージンノートのためのスペースを確保するためにサイド(端)に配置します。たとえば、最初の<p>
の4番目の<seg>
には、「Fabri +」という余白があります。
<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>
そして、私は(赤いテキスト/矢印が問題に私のガイドです)この災害を得る:それは私が「フロート」に余裕の光沢を以下のテンプレートを追加し<add type=margin_gloss>Fabri +</add>
を符号化されています。フロート付きのテンプレートは、私が推測することができない3つのことを行っています。 floatは4番目のセグメントの横に表示されるはずですが、その代わりに、次の<p>
とマージされます。第4の<seg>
は姿を消した。次の<p>
のインデントが減少します。
フロートは、右に置くのが適切ではないはずです。 –
@KevinBrown私はそれを試しました、それはインデントにのみ2 cmの違いを作った - それは行方不明のセグメントを返していないか、余白に向かってmarginaliaを浮かべていません。 – idjet
テンプレートに./s/text()があり、要素がありません。 –