是否可以将绘制的线条超链接到文档中的特定页面?我使用以下命令绘制线条:\line(1,0){20}
非常感谢!这是 MWE:
\documentclass[a4paper]{article}
\usepackage{hyperref}
\usepackage{polyglossia}
\usepackage{geometry}
\geometry{hmargin={0.2in,0.2in},vmargin={0in,0in},
paperwidth=3.56in, paperheight=5.95in}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\pagenumbering{gobble}
\begin{document}
\phantomsection \label{PP1}
First page \newpage
\phantomsection \label{PP2}
Second page \newpage
\centering
\line(1,0){20}
\end{document}
答案1
Vairis 在他的回答中指出,如果链接不包含字符字形,XeTeX 会出现一些问题。LaTeX环境对、和picture
使用了特殊字体的字形。这也是限制的原因(只有某些角度,尺寸受到限制,……)。水平线和垂直线是例外,因为它们是按规则绘制的。\line
\vector
\circle
由 XeTeX 检测:字符字形。
XeTeX 无法检测到:规则、图像、没有字形的框……
作为解决方案,我现在已\XeTeXLinkBox
在hyperref
2012/08/18 v6.83b 中实施,来自
README
:
\XeTeXLinkBox
当 XeTeX 生成链接注释时,它不会查看框(与其他驱动程序一样),而只会查看字符字形。如果没有字形(图像、规则等),则不会生成链接注释。宏
\XeTeXLinkBox
将其参数放在框中,并在左下角和右上角添加空格。可以通过将其设置为 dimen 寄存器来指定额外的边距\XeTeXLinkMargin
。默认值为2pt
。例子:
% xelatex \documentclass{article} \usepackage{hyperref} \setlength{\XeTeXLinkMargin}{1pt} \begin{document} \section{Hello World} \newpage \label{sec:hello} \hyperref[sec:hello]{% \XeTeXLinkBox{\rule{10mm}{10mm}}% } \end{document}
修改自 Vairis 的示例:
\documentclass[a4paper]{article}
\usepackage{hyperref}
\usepackage{pifont}
\makeatletter
\@ifpackagelater{hyperref}{2012/08/18}{%
}{%
\newdimen\XeTeXLinkMargin
\newsavebox\XeTeXLink@box
% Space is taken from Zapf Dingbats with zero height and depth
\font\XeTeXLink@font=pzdr at 1sp\relax
\newcommand*{\XeTeXLink@space}{%
\begingroup\XeTeXLink@font\@xxxii\endgroup
}
\newcommand{\XeTeXLinkBox}[1]{%
\begingroup
\leavevmode
\sbox0{#1}%
\begingroup
\dimen0=\dp0 %
\advance\dimen0 by \XeTeXLinkMargin
\setbox2=\llap{%
\hbox to \XeTeXLinkMargin{%
\lower\dimen0\hbox{\XeTeXLink@space}%
\hss
}%
}%
\dp2=\dp0 %
\ht2=\ht0 %
\copy2 %
\endgroup
\copy0 %
\dimen0=\ht0 %
\advance\dimen0 by \XeTeXLinkMargin
\setbox2=\rlap{%
\hbox to \XeTeXLinkMargin{%
\hss
\raise\dimen0\hbox{\XeTeXLink@space}%
}%
}%
\dp2=\dp0 %
\ht2=\ht0 %
\copy2 %
\endgroup
}%
}
\makeatother
\setlength{\XeTeXLinkMargin}{2pt}
\begin{document}
\phantomsection \label{PP1}
First page \newpage
\phantomsection \label{PP2}
Second page \newpage
\centering
\hyperref[PP1]{\line(1,1){10}}
\qquad
\hyperref[PP1]{\vector(1,0){10}}
\qquad
\hyperref[PP2]{%
\XeTeXLinkBox{%
\begin{picture}(10,10)%
\put(5,10){\line(0,-1){10}}%
\end{picture}%
}%
}
\qquad
\hyperref[PP2]{%
\begin{picture}(10,10)%
\put(5,10){\XeTeXLinkBox{\line(0,-1){10}}}%
\end{picture}%
}
\qquad
\hyperref[PP1]{\XeTeXLinkBox{\line(1,0){10}}}
\end{document}
结果:
使用 Zapf Dingbats 空间的原因是:
- 有一个空格符号。
- 包
pifont
已经加载,因此字体很可能已安装。 - 空间字形的高度和深度为零。
- 通过以 大小加载字体,可以最小化宽度
1sp
。
答案2
尝试以不同的方式建立链接:
\documentclass[a4paper]{article}
\usepackage{polyglossia}
\usepackage{geometry}
\geometry{hmargin={0.2in,0.2in},vmargin={0in,0in},
paperwidth=3.56in, paperheight=5.95in}
\usepackage{url}
\usepackage{hyperref}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\pagenumbering{gobble}
\begin{document}
\phantomsection \label{PP1}
First page \newpage
\phantomsection \label{PP2}
Second page \newpage
\centering
\hyperref[PP1]{\line(1,1){10}} %works
\hyperref[PP1]{\vector(1,0){10}} %works
\hyperref[PP1]{\dotfill} %works
\hyperref[PP2]{\begin{picture}(10,10)\put(0,-1){\line(0,-1){10}} \end{picture}} %not working
\hyperlink{PP1}{\hbox{\line(1,0){10}}} %not working
\end{document}
得到以下输出:
使用 XeLaTeX 时,前三个链接有效,但后两个无效。(pdfLaTeX 没有此问题)
我从中得出的结论是,XeLaTeX 不想将普通的水平/垂直线作为链接。可能是因为完全水平/垂直的线的绘制方式不同。如果您使用任何真实的图形对象(例如成角度的线或矢量),那么它可以轻松地用作链接。希望这能帮助您找到某种解决方法。