在列表标题中使用带括号参数的命令时出错

在列表标题中使用带括号参数的命令时出错
\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}

相关内容