ConTeXt 超链接

ConTeXt 超链接

以前可以按照 LaTeX hyperref 包的样式向 ConTeXt 文档添加超链接。最小以前-工作示例:

\def\href{\dodoubleempty\dohref}
\def\dohref[#1][#2]{\leavevmode
    \pdfstartlink
    attr{/C [1 0 0] /Border [0 0 1]}
    user{/Subtype /Link /A << /Type /Action /S /URI /URI
    (#1) >>}\ifsecondargument #2\else #1\fi\pdfendlink}

\starttext
Here is a \href [http://tex.stackexchange.com] [link] to
my favourite web site.
\stoptext

\停止文本

但它不适用于最近的 ConTeXt 安装!据我所知,\pdfstartlinkpdfendlink命令任何一个默默忽略或者被视为逐字模式的某种切换。我猜想 luaTeX 中发生了一些变化。

我可以对旧的 ConTeXt 源文件进行哪些更改,使其与当前的 ConTeXt 兼容?我确实知道维基百科但这不是我要问的。

答案1

Metafox 的解决方案解释了如何在链接周围添加边框。我会解释为什么你的旧宏不再起作用。

发生了变化luatex 后端。pdfTeX 引入的许多\pdf...命令系列现在都可用作\pdfextension。为了向后兼容,宏包应该定义:

\protected\def\pdfstartlink             {\pdfextension startlink }
\protected\def\pdfendlink               {\pdfextension endlink\relax}

ConTeXt 在 中这样做了syst-ini.mkiv。但是,然后\relax在 中将这些重新定义为back-ini.mkiv。解释如下:

%D Because we do a lot in \LUA\ and don't want interferences, we nil most of the
%D \PDFTEX\ primitives. Of course one can always use the \type {\pdfvariable},
%D \type {\pdfextension} and \type {\pdffeedback} primitives but it will probably
%D have bad side effects.

%D These are no-ops and don't even intercept what comes next. Maybe some day
%D I'll write a parser that maps onto \CONTEXT.

这就是你的宏不起作用的原因。因此,你要么必须添加

\unexpanded\def\pdfstartlink             {\pdfextension startlink }
\unexpanded\def\pdfendlink               {\pdfextension endlink\relax}

\pdfextension startlink attr {....} ... \pdfextension endink\relax或在您的定义中使用。

答案2

您可以使用指令为引用添加边框references.border,框架的默认颜色为黑色,但您可以将其更改为其他颜色。

\setupinteraction
  [state=start,
   color=,
   contrastcolor=,
   style=]

%\enabledirectives[references.border]
\enabledirectives[references.border=green]

\starttext
Here is a \goto{link}[url(http://tex.stackexchange.com)] to my favourite web site.
\stoptext

要删除链接的样式,您必须使用命令更改stylecolor\setupinteraction

使用 ConTeXt 框架的超链接

相关内容