我指的是描述列表中的章节和部分。我希望链接包含章节或者部分部分也是如此。
我找到了实现此目的的两个选项:使用\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]{...}
。最外层的参数括号会被自动删除。