超链接绘图

超链接绘图

是否可以将绘制的线条超链接到文档中的特定页面?我使用以下命令绘制线条:\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 无法检测到:规则、图像、没有字形的框……

作为解决方案,我现在已\XeTeXLinkBoxhyperref2012/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}

结果:

XeTeX 中带有图片对象的链接

使用 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 不想将普通的水平/垂直线作为链接。可能是因为完全水平/垂直的线的绘制方式不同。如果您使用任何真实的图形对象(例如成角度的线或矢量),那么它可以轻松地用作链接。希望这能帮助您找到某种解决方法。

相关内容