描述列表的键中的 \protect 与 \texorpdfstring

描述列表的键中的 \protect 与 \texorpdfstring

我指的是描述列表中的章节和部分。我希望链接包含章节或者部分部分也是如此。

我找到了实现此目的的两个选项:使用\protect或使用\texorpdfstring。两者似乎都有效并且做同样的事情。

这两者之间有什么区别?我应该选择其中一个吗?

梅威瑟:

\documentclass{report}
\usepackage{hyperref}
\begin{document}

Both options work:

\begin{description}
  \item [Section~\ref{sec:label}] foo 1

  % This fails, need braces for protected contents:
  %\item [\protect\hyperref[sec:label]{Section~\ref*{sec:label}}{}] foo 2

  \item [\protect{\hyperref[sec:label]{Section~\ref*{sec:label}}{}}] foo 2

  \item [\texorpdfstring{\hyperref[sec:label]{Section~\ref*{sec:label}}{}}{}] foo 3
\end{description}

\section{First Section is Here}
\label{sec:label}
\end{document}

在此处输入图片描述

答案1

您不需要任何一个,因为问题的原因是可选参数内的可选参数:

\item[\hyperref[sec:label]

现在,的可选参数已正式关闭,但由于语法不完整,\item右括号属于\hyperref因此将会失败。\hyperref

修复:只需添加一对括号:

\item[{\hyperref[sec:label]{Section~\ref*{sec:label}}}] foo 2

然后,TeX 宏参数解析器不会破坏参数组,并且 的可选参数\item将成为完整的\hyperref[sec:label]{...}。最外层的参数括号会被自动删除。

相关内容