首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSL-FO页面-母版-有时会耗尽替代品

XSL-FO页面-母版-有时会耗尽替代品
EN

Stack Overflow用户
提问于 2016-04-19 09:15:12
回答 1查看 1.5K关注 0票数 1

对于书籍,我有一些健壮的样式表。目前,我不知道哪里可能是问题所在。我的样式表有时起作用,有时不起作用,这取决于TOC的长度,我可以根据希望包含在其中的级别的数量动态地更改它。

我的样式表是这样工作的(我的意图是):

让印记部分从标题开始-页面,以偶数页结尾,如果TOC的最后一页是奇怪的,在它后面放置一个空白页:

代码语言:javascript
复制
        <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>

让主体部分内容页开始于TOC之后的第一个奇数页(或之后的空白页),让每个章节开始于前一章之后的奇数页(最后一页或空白),以偶数页结束。如果最后一页应该是奇怪的,则强制使用一个空白页(我认为这可能是问题所在,因为我处理了整个部分以及特定章节):

代码语言:javascript
复制
        <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"之间有什么区别。我检查了一些文档,但我仍然不清楚):

代码语言:javascript
复制
    <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页面上成为可能。这样,章节有时会从奇数页面开始,但是有页码(他们不应该这么做)。真让人费解。

甚至补充说:

代码语言:javascript
复制
<fo:conditional-page-master-reference master-reference="PageMaster.Page-Right.First" odd-or-even="odd" page-position="rest"/>

…帮不上忙。

我使用最后一个Saxon HE和ApacheFOP1.1。

更新

根据@Tony_Graham,进展如下:

代码语言:javascript
复制
        <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>

其余的:

代码语言:javascript
复制
<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">
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-19 11:58:13

force-page-count="end-on-even"放在fo:page-sequence 上,然后放在要在奇怪的页面上开始的 fo:page-sequence之前。或者,在initial-page-number="auto-odd"上设置fo:page-sequence。请参阅https://www.w3.org/TR/xsl11/#initial-page-number

force-page-count="even"的意思是,如果页面序列从偶数页开始,它将以奇数页结束,从而使它成为偶数页,反之亦然,如果它开始于奇数页。不管页面序列是从奇数页还是偶数页开始,force-page-count="end-on-even"都会在奇数页上完成。(啊格式化程序有扩展以“双-偶数”结束,而且还有更多的扩展,并强制整个文档的页数以偶数页结束,请参见https://www.antennahouse.com/product/ahf63/ahf-ext.html#axf.force-page-count)但是,initial-page-number很可能会满足您的需要。

另外:

  1. 您不需要使用两个不同的fo:conditional-page-master-reference重复使用odd-or-even来选择相同的主页面。这与一个没有fo:conditional-page-master-referenceodd-or-even相同,因为默认值是any。见https://www.w3.org/TR/xsl11/#odd-or-even
  2. 您可以删除显式page-position="any",因为这是默认的。
  3. “印记”有两个‘奇数或偶数=’偶数‘页面位置=’rest‘,所以第二个永远不会被使用。
  4. 为奇数/偶数和rest/last选择相同的"PageMaster.TOC“可以简化为page-position="any"

更新

您可以将当前的fo:page-sequence-master更改为:

代码语言:javascript
复制
    <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"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Title-Page" 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: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.Blank" blank-or-not-blank="blank"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Page-Right.First" page-position="first"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Page-Left" odd-or-even="even"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Page-Right" odd-or-even="odd"/>
        </fo:repeatable-page-master-alternatives>

fo:repeatable-page-master-alternatives中,“从子序列开始就对条件进行了测试”,因此您希望将最不可能的替代方案放在首位。(参见repeatable-page-master-alternatives)你也希望在最后有一个完全可选的选择,但你已经有了这个问题。

然而,我不明白为什么“印记”包括“PageMaster.CopyRightPage”和"PageMaster.TOC“,而版权页面和ToC都是在单独的页面序列中引用特定的页面主。你可能更想要这样的东西:

代码语言:javascript
复制
    <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"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Title-Page"/>
        </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>
    <fo:page-sequence-master master-name="TOC">
        <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference master-reference="PageMaster.Blank" blank-or-not-blank="blank"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.TOC"/>
        </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>
    <fo:page-sequence-master master-name="CopyRight-Page">
        <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference master-reference="PageMaster.Blank" blank-or-not-blank="blank"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.CopyRight-Page"/>
        </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.Blank" blank-or-not-blank="blank"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Page-Right.First" page-position="first"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Page-Left" odd-or-even="even"/>
            <fo:conditional-page-master-reference master-reference="PageMaster.Page-Right" odd-or-even="odd"/>
        </fo:repeatable-page-master-alternatives>
...
<fo:page-sequence master-reference="Imprints">
...
<fo:page-sequence master-reference="CopyRight-Page" initial-page-number="auto-odd">
...
<fo:page-sequence master-reference="PageMaster.TOC" initial-page-master="auto-odd">
...
<xsl:for-each select="//tei:div[@n='1']">
    <fo:page-sequence master-reference="Content-Pages" initial-page-number="auto-odd">
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36713917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档