我按照https://tex.stackexchange.com/questions/36109/making-tikz-nodes-hyperlinkable处的配方创建节点,这些节点是指向文档中其他位置的可点击链接。当使用lualatex构建时,节点链接工作,但在使用xelatex构建时似乎不起作用 - 尽管它们确实按预期呈现到屏幕上(节点上的绿色覆盖层用于演示{{1 被调用,当我没有调试时它就会消失。
我的MWE:
hyperlink node
使用xelatex构建,单击绿色节点不会将我带到第三页,但是单击文本链接(下面的绿色文本,"这是一个链接")。当我使用lualatex构建PDF时,这两个超链接都有效。
为什么这在lualatex中有效,但在xelatex中无效,我该怎么办呢?我不喜欢我从xelatex得到的输出(布局和字体渲染有点不同),但链接很重要。使用xelatex进行构建时,如何使超链接节点正常工作?
使用
简单调用:
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[colorlinks,linkcolor=green!50!black]{hyperref}
\tikzset{
hyperlink node/.style={
alias=sourcenode,
append after command={
let \p1 = (sourcenode.north west),
\p2=(sourcenode.south east),
\n1={\x2-\x1},
\n2={\y1-\y2} in
node [draw=green!50!black,rounded corners,opacity=0.5,fill=green,inner sep=0pt,outer sep=0pt,anchor=north west,at=(\p1)] {\hyperlink{#1}{\phantom{\rule{\n1}{\n2}}}}
}
},
mynode/.style={rectangle, rounded corners, fill=white,draw=black},
edge/.style={>=Stealth},
}
\begin{document}
\begin{tikzpicture}
\node [mynode] (a) {Not a link};
\node [mynode,hyperlink node=LinkHere] (b) [right=30mm] {This is a link};
\path (a) -> (b);
\end{tikzpicture}
In text, though:
Not a link.
\hyperlink{LinkHere}{This is a link} also
\clearpage
This page deliberately left blank.
\clearpage
\hypertarget{LinkHere}{}
Link lands here.
\end{document}
我刚刚确定,在使用$ xelatex mwe.tex; mv mwe.pdf mwe-xelatex.pdf
$ lualatex mwe.tex; mv mwe.pdf mwe-lualatex.pdf
和navigator.sty
代替hyperref.sty
时,使用\jumplink
包而不是\anchor
表现出相同的行为差异, \hyperlink
。
答案 0 :(得分:1)
啊哈。
TL; DR :将
\hyperlink{#1}{\phantom{\rule{\n1}{\n2}}}}
替换为\hyperlink{#1}{\XeTeXLinkBox{\phantom{\rule{\n1}{\n2}}}}}
我在工作(文本)链接下面添加了:
\hyperlink{LinkHere}{\rule{1in}{1in}}
这几乎就是我在超链接节点中所拥有的。规则以绿色呈现,因为它是\hyperlink
,但是当使用xelatex编译PDF时,单击它不会执行任何操作。 xelatex和TikZ的问题并非如此,但使用xelatex和hyperref.sty
。如果找到 text ,则只有https://tex.stackexchange.com/questions/56802/hyperlinking-a-drawing xelatex链接。
\XeTeXLinkBox
已添加到hyperref.sty
专门用于解决此问题。您仍然需要使用\phantom{}
隐藏规则。
稍微超过MWE,它做了我想做的事情,并演示了使用\XeTeXLinkBox
而不使用它的区别。
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[colorlinks,linkcolor=green!50!black]{hyperref}
\setlength{\XeTeXLinkMargin}{0pt}
\tikzset{
hyperlink node/.style={
alias=sourcenode,
append after command={
let \p1 = (sourcenode.north west),
\p2=(sourcenode.south east),
\n1={\x2-\x1},
\n2={\y1-\y2} in
node [draw=green!50!black,rounded corners,opacity=0.5,fill=green,inner sep=0pt,outer sep=0pt,anchor=north west,at=(\p1)] {\hyperlink{#1}{\XeTeXLinkBox{\phantom{\rule{\n1}{\n2}}}}}
}
},
mynode/.style={rectangle, rounded corners, fill=white,draw=black},
edge/.style={>=Stealth},
}
\begin{document}
\begin{tikzpicture}
\node [mynode] (a) {Not a link};
\node [mynode,hyperlink node=LinkHere] (b) [right=30mm] {This is a link};
\path (a) -> (b);
\end{tikzpicture}
In text, though:
Not a link.
\hyperlink{LinkHere}{This is a link} also
---
\hyperlink{LinkHere}{test\ldots \rule{1in}{1in}\ldots big green box doesn't work, text does}
---
\hyperlink{LinkHere}{test\ldots \XeTeXLinkBox{\rule{1in}{1in}}\ldots big green box now \emph{does} work, and so does text}
---
\clearpage
This page deliberately left blank.
\clearpage
\hypertarget{LinkHere}{}
Link lands here.
\end{document}