我正在排版包含所含 PDF 附录的 ConTeXt 文档(使用\copypages
)。我已使用 为附录中每个所含 PDF 的第一页添加了标签\reference
。我想在文档正文中添加附录的链接。如果我要引用某个 PDF 的第一页(例如add:pdf1
,标记为),我只需使用类似命令\at
(例如,\at{Add.}[add:pdf1]
生成链接引用“Add. 12”)。如果我想引用所含 PDF 的第二页(或第三页或第四页),该怎么办?
我能够使用以下命令让 ConTeXt 打印引用 PDF 的第二页:\the\numexpr\ref[page][add:pdf1]+1\relax
。我怎样才能使其成为可点击的链接?
以下是 MWE:
\setupinteraction[state=start]
\starttext
Please see page 1 of the PDF in the addendum. \at{Add.}[add:pdf1].
Please see page 2 of the PDF in the addendum. Add.\ \the\numexpr\ref[page][add:pdf1]+1\relax.
\page[yes]
\reference[add:pdf1]{Pdf1}
This is page 1 of the PDF Pdf1.
\page[yes]
This is page 2 of the PDF Pdf1.
\page[yes]
This is page 3 of the PDF Pdf1.
\stoptext
在输出(如下所示)中,我希望将两个“Add. #”引用链接到相应的页面。使用我在 MWE 中使用的方法,仅链接第一个引用。
答案1
也许最简单的事情就是自己循环。在下面的例子中,230825-1
是一份长达三页的文档,需要将其包含在内230825-2
。
230825-1
:
\setuppagenumbering
[state=stop]
\starttext
\chapter[title=Knuth]
\setupbackgrounds[page][background=color,backgroundcolor=red]
\samplefile{knuth}
\chapter[title=Ward]
\setupbackgrounds[page][background=color,backgroundcolor=green]
\samplefile{ward}
\chapter[title=Tufte]
\setupbackgrounds[page][background=color,backgroundcolor=yellow]
\samplefile{tufte}
\stoptext
230825-2
:
\setupinteraction
[state=start]
\starttext
\at[foo:1], \at[foo:2], \at[foo:3].
\dostepwiserecurse{1}{3}{1}{
\startTEXpage[pagestate=start]
\reference
[foo:#1]{}%
\externalfigure
[230825-1]
[page=#1,
offset=overlay]
\stopTEXpage
}
% % Or alternatively:
%
% \setupfittingpage[pagestate=start]
%
% \dostepwiserecurse{1}{3}{1}{
% \startpagefigure[230825-1][page=#1]
% \reference[foo:#1]{}\blank[-line]%
% \stoppagefigure
% }
This goes on its own page.
\stoptext
230825-2.pdf
看起来像这样:
请注意,在第一页上,我们有指向三个不同页面的链接,后面的文本转到下一页(即第 5 页)。如果您在更多地方需要它,您可以将其转换为宏。
更新(评论中的问题之后)
如果你想计算页数,可以这样做:
\setupinteraction
[state=start]
\starttext
\at[foo:1], \at[foo:2], \at[foo:3].
\getfiguredimensions[230825-1.pdf]
\dostepwiserecurse{1}{\noffigurepages}{1}{
\startTEXpage[pagestate=start]
\reference
[foo:#1]{}%
\externalfigure
[230825-1]
[page=#1,
offset=overlay]
\stopTEXpage
}
This goes on its own page.
\stoptext
输出相同。
答案2
如果你设置了crossreference=yes
,那么 ConTeXt 将自动使用(难以捉摸的)名称进行引用:cross:b:ex:page number
\setupinteraction[state=start]
\setupexternalfigures[
location=global,
directory={/opt/context/tex/texmf-context/doc/context/documents/general/manuals/},
]
\setupheader[state=empty]
\starttext
See page~15 of the \LuaMetaTeX\ manual (\at{page}[cross:b:ex:15]).\page
\dorecurse{9}{filler page\page}
\copypages[luametatex.pdf][n=30][crossreference=yes]
\dorecurse{10}{filler page\page}
\stoptext