以前可以按照 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 安装!据我所知,\pdfstartlink
和pdfendlink
命令任何一个默默忽略或者被视为逐字模式的某种切换。我猜想 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
要删除链接的样式,您必须使用命令更改style
和color
值\setupinteraction
。