是否可以创建一个打印时看起来不同的单个文档?
不是每个输入 TeX 排版多个文档的单独模式,而是打印方式与电子版不同的单个文档?
我知道有各种适用于 LaTeX 的 OCG 包。有适用于 ConTeXt 的包吗?
我的目标是在打印时将第一个链接转换为第二个链接:
\definefallbackfamily [mainface] [serif] [Symbola] [range={miscellaneoussymbolsandpictographs}]
\definefontfamily [mainface] [serif] [DejaVu Serif]
\definefontfamily [mainface] [sans] [DejaVu Sans]
\definefontfamily [mainface] [mono] [DejaVu Sans Mono]
\setupbodyfont[mainface]
\definesymbol[link][\utfchar{"1F517}]
\def\raisedlink{%
\tfxx%
\setbox\scratchbox\hbox{\symbol[link]}%
\raise0.5\dp\scratchbox\box\scratchbox%
}
\setupinteraction
[state=start,
style=,
color=,
]
\useURL
[web:contextElectronic]
[https://github.com/contextgarden/context-mirror]
[]
[{github.com/contextgarden\raisedlink}]
\useURL
[web:contextPrint]
[https://github.com/contextgarden/context-mirror]
[]
[{github.com/contextgarden}]
\showallmakeup
\starttext
[\from[web:contextElectronic]]
[\from[web:contextPrint]]
\stoptext
* 在打印版本中,请注意链接和结束括号之间缺少空格。
答案1
您可以使用该机制创建仅在文档的屏幕或打印版本中显示的图层viewerlayer
。命令的内容是否出现在打印输出中由键控制printable
。
您应该知道,许多 PDF 查看器会忽略设置并在屏幕上显示命令的参数,并且只有 Adobe Reader 具有可靠的输出。
\usesymbols [fontawesome]
\defineviewerlayer [print] [state=stop,printable=yes]
\setupinteraction [state=start]
\useURL
[context-github]
[https://github.com/contextgarden/context-mirror]
[]
[{github.com/contextgarden\viewerlayer[print]{\symbol[fontawesome][external-link]}}]
\starttext
\from[context-github]
\stoptext
答案2
尽管viewerlayer
图层是独立查看的,但它们是一起排版的。内容的定位好像所有图层都是可见的,并且周围的文本不会根据图层的可见性而移动。
\defineviewerlayer [print] [state=stop,printable=yes]
\starttext
\rightaligned{First flush-right sentence\viewerlayer[print]{... or is it}}
\rightaligned{Second flush-right sentence}
\stoptext
打印时,两个句子看起来彼此对齐,并且右边缘对齐。查看时,第一个句子与第二个句子对齐,因为其位置由后续查看器层内容决定,即使该层被隐藏。要解决这个问题,您需要对所有受影响的内容进行两次排版,将每个内容分配给两个独有层之一(即仅打印与仅查看),然后重叠这些层:
\defineviewerlayer [print] [state=stop,printable=yes]
\defineviewerlayer [view] [state=start,printable=no]
\starttext
\rightaligned{\viewerlayer[view]{First flush-right sentence}\llap{\viewerlayer[print]{First flush-right sentence... or is it}}}
\rightaligned{Second flush-right sentence}
\stoptext
然而,这正是你开始遇到错误的地方。以下示例演示了 ConTeXt 的问题2018.12.18在排版具有多个查看器层的文档时会出现此问题。主要是这些层似乎没有正确关闭,因此该层会包含所有后续内容。文档在 Adobe Reader 11 中进行了测试。
当\showallmakeup
启用时,之后的所有内容都\viewerlayer[print]
属于该层:
\defineviewerlayer[print][state=stop,printable=yes,]
\showallmakeup
\starttext
\viewerlayer[print]{One} more.
\samplefile{knuth}
\stoptext
与上面相同的问题,用\start...stopviewerlayer
而不是 来演示\viewerlayer
:
\defineviewerlayer[print][state=stop,printable=yes,]
\showallmakeup
\starttext
\startviewerlayer[print]
And then:
\stopviewerlayer
\samplefile{knuth}
\stoptext
打印层(以及其他内容)属于视图层,而不是两个独立的层。因此隐藏视图层会隐藏全部本文档内容:
- [看法]
- 第一的
\samplefile{knuth}
- [打印]
- 第二
\defineviewerlayer[print][state=stop,printable=yes,]
\defineviewerlayer[view][state=start,printable=no,]
\starttext
\startviewerlayer[view]{first}
\samplefile{knuth}
\startviewerlayer[print]{second}
\stoptext
没关系,我忘了用 关闭块了\stopviewerlayer
。
此外,ConTeXt 创建的 PDF 的打印图层会被 ghostscript 和 poppler 引擎忽略,尽管这些引擎支持此类功能。请参阅对已接受答案的评论。
如果你不需要如此复杂的排版,你最好使用链接注释。请参阅对问题的评论:
请记住,链接注释不是标记注释,因此不会显示“内容”条目。因此,它们只能通过覆盖 Border、BS、BE、AP 和 AS 条目指定的附加内容来补充标准页面内容(即 URI,它将始终显示,无论是打印还是屏幕)... [以及链接操作]。
以下是 ConTeXt 支持的(可见)链接注释功能,lpdf-ano.lua
。有关更多信息,请参阅第 8.4 节“注释”。Adobe PDF 1.7 规范,评论中也提到了。
/Border
{0,0,0}
ConTeXt 仅支持 PDF 1.0 字段。若未references.border
使用则设置为;否则{0,0,0.5}
设置为。用户无法配置。horizontal corner radius (PDF 1.0) vertical corder radius (PDF 1.0) border width (PDF 1.0) dash array (PDF 1.1)
/C
(颜色)这是 设置的字段
references.border
。ConTeXt 仅支持三项版本DeviceRGB
。由于 ConTeXt 特定的转换,您可以使用“绿色”之类的颜色名称。/H
(突出显示;特定于链接注释)设置为
N
,则不突出显示,如果actions.highlight
是False
。这是您通常看到的。否则,ConTeXt 将此字段留空,并且根据 PDF 规范,它默认为I
,反转 - 反转注释矩形的内容。我不确定如何设置actions.highlight
。
ConTeXt 不支持或设置较新的“边框样式”(BS
,PDF 1.2)、“边框效果”(BE
,PDF 1.5)、外观(AP
,PDF 1.2)或外观状态(AS
,PDF 1.2)字段。
该/F
条目是一个表示各种标志的位字段。对于链接注释 ConTeXt似乎设置/F
为 4或 0b100。这仅启用字段Print
,并且应强制在打印页面时打印链接注释边框以实现 PDF/A 兼容性。这不会发生 - 打印时链接注释边框被隐藏 - 我不知道为什么。