\documentclass{article}
\usepackage{listings}
\usepackage{hyperref}
\begin{document}
\lstlistoflistings
\section{Section}\label{section}
\begin{lstlisting}[caption={Sample from \hyperref[section]{this Section}}]
a = b;
\end{lstlisting}
\end{document}
当我编译上述 mwe(两次)时,出现以下错误。
! Argument of \Hy@babelnormalise has an extra }.
<inserted text>
\par
l.1 ...ple from \hyperref [section}{1}{lstlisting.1}
I've run across a `}' that doesn't seem to match anything.
For example, `\def\a#1{...}' and `\a}' would produce
this error. If you simply proceed now, the `\par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your `}' was spurious, just type `2' and it will go away.
我认为这是由命令的方括号引起的\hyperref
。这些可能被解释为短标题的开头。如何在标题中使用带有此类参数的命令?
在\unexpanded
\hyperref
建议这个问题不起作用。
答案1
您可以使用
\texorpdfstring{\hyperref[section]{this Section}}{this Section}
来自hyperref
包,它定义了 TeX 和 PDF 书签使用的单独字符串。就您而言,您没有标记列表标题书签,因此没有视觉差异。要查看差异,请尝试在宏中使用上述内容\section{}
,并查看书签如何使用传递给宏的第二个参数\texorpdfstring
。
笔记:
- 我使用该
[colorlinks=true]
选项是hyperref
为了更容易地看到链接确实已经建立。
代码:
\documentclass{article}
\usepackage{listings}
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\lstlistoflistings
\section{Section}\label{section}
\begin{lstlisting}[caption={Sample from \texorpdfstring{\hyperref[section]{this Section}}{xxxx}}]
a = b;
\end{lstlisting}
\end{document}