如何创建指向特定标签后任意页数的页面的链接引用?

如何创建指向特定标签后任意页数的页面的链接引用?

我正在排版包含所含 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 中使用的方法,仅链接第一个引用。

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

在此处输入图片描述

相关内容