列表标题中的脚注标记导致问题

列表标题中的脚注标记导致问题

我有以下清单:

   \begin{lstlisting}[float=h,caption={Description\footnotemark.}, label={listing2},
        keywordstyle=\color{blue}\bfseries, ndkeywordstyle=\color{black}\bfseries, commentstyle=\color{red}\ttfamily,
        stringstyle=\color{green}\ttfamily, identifierstyle=\color{black},backgroundcolor=`\color{white},frame=single, frameround=ffff,captionpos=b,basicstyle=\scriptsize]`

text
text

\end{lstlisting}

\footnotetext{text}

当我编译时,出现一个致命错误:latex Text Capacity exceeded, sorry [input stack size=5000]

问题出在\footnotemark,我该如何解决这个问题?

答案1

该命令很脆弱,因此在用作“移动参数”时\footnotemark需要进行保护:\protect

\begin{lstlisting}[float=h,caption={Description\protect\footnotemark.}, label={listing2}, ...]

text
text

\end{lstlisting}

本质上,“移动参数”是传递给其他宏的宏,这些宏最终将它们写入外部文件(如目录或列表)。这通常涉及完全扩展其内容。基本上\protect会推迟此扩展,直到 LaTeX 读回内容。

整个主题非常 LaTeXnical:何时以及是否\protect需要不仅取决于作为参数传递的宏的实现(\footnotemark在本例中),还取决于在其参数中处理它的宏(\lst@MakeCaption在本例中)。因此,对于某些特定的类似标题的命令,很可能不需要它。经验法则是:如果它出现奇怪的错误消息,请尝试\protect

脆弱和强大的命令的荣耀细节在脆弱命令和坚固命令之间有什么区别?,保护机制本身最小 \protected@edef 示例

相关内容