【发布时间】:2016-04-19 09:15:12
【问题描述】:
我有一些强大的书籍样式表。目前,我无法弄清楚问题可能出在哪里。我的样式表有时有效,有时无效,具体取决于 TOC 的长度,我可以根据我想要包含在其中的级别数动态更改它。
我的样式表是这样工作的(我的意图是):
Imprints 部分从 Title-Page 开始,到偶数页结束,如果 TOC 的最后一页是奇数,则在后面放一个空白页它:
<fo:page-sequence-master master-name="Imprints">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="PageMaster.Blank" blank-or-not-blank="blank" page-position="any"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Title-Page" odd-or-even="odd" page-position="first"/>
<fo:conditional-page-master-reference master-reference="PageMaster.CopyRight-Page" odd-or-even="even" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.TOC" odd-or-even="odd" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.TOC" odd-or-even="even" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.TOC" odd-or-even="odd" page-position="last"/>
<fo:conditional-page-master-reference master-reference="PageMaster.TOC" odd-or-even="even" page-position="last"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
让主体部分,Content-Pages,从 TOC 之后的第一个奇数页(或它之后的空白页)开始,让每一章都从上一章之后的奇数页开始(最后一页或空白)并在偶数页结束。如果最后一页很奇怪,请强制空白页(我想这可能是问题,因为我使用整个部分以及特定章节):
<fo:page-sequence-master master-name="Content-Pages">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right.First" odd-or-even="odd" page-position="first"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Blank" blank-or-not-blank="blank" page-position="any"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Left" odd-or-even="even" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right" odd-or-even="odd" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Left" odd-or-even="even" page-position="last"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right" odd-or-even="odd" page-position="last"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
我这样称呼它们(我不确定force-page-count="even" 和force-page-count="end-on-even" 之间有什么区别。我检查了一些文档,但我仍然不清楚):
<fo:page-sequence master-reference="Imprints" force-page-count="even">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<xsl:apply-templates select="//tei:TEI/tei:teiHeader" mode="draft"/>
</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="PageMaster.CopyRight-Page">
<fo:flow flow-name="xsl-region-body">
<fo:block xsl:use-attribute-sets="p">
© Copyright!
</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="PageMaster.TOC">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<xsl:apply-templates select="//tei:TEI/tei:text" mode="toc"/>
</fo:block>
</fo:flow>
</fo:page-sequence>
<xsl:for-each select="//tei:div[@n='1']">
<fo:page-sequence master-reference="Content-Pages" force-page-count="end-on-even">
<fo:static-content flow-name="Region-Before-Left">
<fo:block xsl:use-attribute-sets="running-header-left">
<fo:inline xsl:use-attribute-sets="running-header-pageno-left">
<fo:page-number/>
</fo:inline>
</fo:block>
</fo:static-content><!-- Running header right -->
<fo:static-content flow-name="Region-Before-Right">
<fo:block xsl:use-attribute-sets="running-header-right">
<fo:inline xsl:use-attribute-sets="running-header-pageno-right">
<fo:page-number/>
</fo:inline>
</fo:block>
</fo:static-content>
<fo:static-content flow-name="xsl-footnote-separator">
<fo:block>
<fo:leader xsl:use-attribute-sets="footnote-separator"/>
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="."/>
</fo:flow>
</fo:page-sequence>
</xsl:for-each>
当它失败并抛出Subsequences exhausted in page-sequence-master "Content-Pages", cannot recover. (No context info available) 时,它有助于更改force-page-count 或添加另一个对PageMaster.Page-Right.First 的引用并使其在even 页面上成为可能。有了这些章节,有时会从 奇数 页开始,但有页码(他们不应该这样做)。真的很混乱。
甚至添加:
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right.First" odd-or-even="odd" page-position="rest"/>
……没有帮助。
我使用最新的 Saxon HE 和 Apache FOP 1.1。
更新
根据@Tony_Graham 的进展:
<fo:page-sequence-master master-name="Imprints">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="PageMaster.Title-Page" odd-or-even="odd" page-position="first"/>
<fo:conditional-page-master-reference master-reference="PageMaster.CopyRight-Page" odd-or-even="even" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.TOC"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Blank" blank-or-not-blank="blank"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
<fo:page-sequence-master master-name="Content-Pages">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right.First" odd-or-even="odd" page-position="first"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Left" odd-or-even="even" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right" odd-or-even="odd" page-position="rest"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Left" odd-or-even="even" page-position="last"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right" odd-or-even="odd" page-position="last"/>
<fo:conditional-page-master-reference master-reference="PageMaster.Blank" blank-or-not-blank="blank"/>
</fo:repeatable-page-master-alternatives>
其余的:
<fo:page-sequence master-reference="Imprints" force-page-count="end-on-even">
...
<fo:page-sequence master-reference="PageMaster.CopyRight-Page" initial-page-number="auto-odd">
...
【问题讨论】:
标签: xsl-fo