如何使某一层仅显示在 ConTeXt 的信件模块的最后一页?

如何使某一层仅显示在 ConTeXt 的信件模块的最后一页?

抱歉解释得这么长,但这里是这样的:假设你有一个> = 3页的文档,你需要添加一个层仅在最后一页。是的,您的 ConTeXt 安装已是最新的。

在 wiki 上似乎说这可以通过state选项实现. 内容如下:

图层“状态”的可用选项有:

  • start:图层仅出现在当前页面上
  • stop:图层不显示
  • repeat:在所有页面上分层打印
  • next:图层出现在以下页面上
  • continue:图层出现在除第一页之外的所有页面上

就像state=start默认选项一样,我们可以想象state=stop在开始处和state=start最后一页的某个地方设置就可以达到目的。因此,第一种方法可能是:

\definelayer[mybg][width=\pagewidth,height=\pageheight,x=0mm,y=0mm,state=stop]
\setlayer[mybg][]{\framed{\red Layer}}
\setupbackgrounds[page][background=mybg]
\starttext
\input ward
\page[yes]
\input tufte
\page[yes]
\setuplayer[mybg][state=start]
\input knuth
\stoptext

但事实证明,这行不通。该图层没有出现在任何地方!您甚至可以尝试state=stop在开头以及state=next倒数第二页的某个位置再次设置:

\starttext
\input ward
\page[yes]
\setuplayer[mybg][state=next]
\input tufte
\page[yes]
\input knuth
\stoptext

但同样,该层没有出现在任何地方。为了不至于太乱,并且不让设置出现在文本中,最后的办法是将所有背景设置放在\startsetups-\stopsetups环境中,并在最后一页调用它:

\startsetups background
\definelayer[mybg][width=\pagewidth,height=\pageheight,x=0mm,y=0mm,state=start]
\setlayer[mybg][]{\framed{\red Layer}}
\setupbackgrounds[page][background=mybg]
\stopsetups
\starttext
\input ward
\page[yes]
\input tufte
\page[yes]
\setups{background}
\input knuth
\stoptext

这招奏效了。哎呀!现在,我尝试使用letter带有自定义字母层的 - 执行相同操作。当然,您可以考虑使用letter的模块专用命令:

\usemodule[letter]
\setupletter[address={ABC.DEF}]
\startsetups backaddresslayer
\defineletterelement[layer][backaddress][backaddressinfo]{\framed{\correspondenceparameter{address}}}
\setupletterlayer[backaddress][state=start,alternative=backaddressinfo,x=0pt,y=0pt]
\stopsetups
\starttext
\startletter
\input ward
\page[yes]
\input tufte
\page[yes]
\setups{backaddresslayer}
\input knuth
\stopletter
\stoptext

但是,与预期相反,backaddress图层不会出现在任何地方......

我不知道这是否聚碳酸二丁酯错误、漏洞或其他问题。如果您能指出来,我会非常高兴。

干杯!:)

答案1

我还没有看过字母模块(我不使用它,所以我需要一些时间来了解它在底层的作用),但这里有一个针对你描述的第一个问题的建议。

困难在于您尝试将图层的状态从 切换stopstart。在我看来,将图层的状态永久设置为 更容易start,然后在适当的页面上简单地设置图层的内容。

现在,要自动将页面内容设置在最后一页,您需要知道最后一页的页码(\lastcountervalue[userpage]),并且需要能够在任意页面上排版内容(\startpostponing)。结合这些,我们得到:

\definelayer[mybg][width=\pagewidth,height=\pageheight,x=0mm,y=0mm,state=start]
\setupbackgrounds[page][background=mybg]

\startpostponing[{\lastcountervalue[userpage]}]
  \setlayer[mybg]{\framed[foregroundcolor=red]{Layer}}
\stoppostponing

\starttext
\dorecurse{3}{\input knuth \page}
\stoptext

Layer正如所料,这会在第三页的左上角显示该单词。

相关内容