如何禁用指向不存在的标签的超链接

如何禁用指向不存在的标签的超链接

我正在进行一个演示beamer,我想使用该包建立(带有\hyperlink)到某些部分(带有)的链接。\labelhyperref

出于实际原因,我将演示文稿拆分为几个文本文件,分别命名为\input。当我构建pdf没有特定部分的文件时,指向该部分中缺少的标签的链接指向演示文稿的第一页(这是不正确的)。

是否可以禁用 LaTeX 文档中的断开的链接(不指向任何内容)?

是否有命令可以测试\label文档中是否存在?


这是一个基本的例子:

\documentclass[xcolor=dvipsnames,utf8]{beamer}

\begin{document}
\begin{frame}
\frametitle{Frame 1}
\end{frame}

\begin{frame}
\frametitle{Frame 2}
\label{label1}
\end{frame}

\begin{frame}
\frametitle{Frame 3}
\hyperlink{label1}{link to label1}\par         % This link is OK.
\hyperlink{label2}{link to missing label2}\par % This link should be disabled
\ref{label1}\par                               % This ref is OK
\ref{label2}                                   % This ref should be disabled
\end{frame}
\end{document}

答案1

可以\IfRefUndefinedExpandablerefcount包中进行利用(通过hyperrefloaded 加载,因此不需要额外加载)。

请参阅包装器命令\hyperrefcheck\checkref相关内容。

警告:您还会错过其他不存在的参考资料。

\documentclass[xcolor=dvipsnames,utf8]{beamer}





\newcommand{\hyperlinkcheck}[2]{%
  \IfRefUndefinedExpandable{#1}{%
    % Do nothing
  }{%
    \hyperlink{#1}{#2}%
  }%
}

\newcommand{\checkref}[1]{%
  \IfRefUndefinedExpandable{#1}{%
    % Do Nothing
  }{%
    \ref{#1}%
  }%
}



\begin{document}

\begin{frame}
\frametitle{Frame 1}
\end{frame}



\begin{frame}
\frametitle{Frame 2}
\label{label1}
\end{frame}

\begin{frame}
  \frametitle{Frame 3}
  \hyperlinkcheck{label1}{link to label1}
         % This link is OK.
  \hyperlinkcheck{label2}{link to missing label2} % This link should be disabled

  \checkref{label1}                               % This ref is OK

  \checkref{label2}                               % This ref should be disabled
\end{frame}
\end{document}

相关内容