LaTeX 在 \section 中嵌套 \verb

LaTeX 在 \section 中嵌套 \verb

为什么是

\section{\verb|mySec|}

无效的 LaTeX 代码。

答案1

这是因为逐字内容总会给您带来麻烦。

\section命令接受一个参数,在第一种情况下是,\textit{mySec}在第二种情况下是\verb|mySec|

到目前为止,TeX 已读取所有内容并使用相应的类别代码对其进行标记。在第一种情况下,您有一个控制序列\textit,一个带有 1 的左括号\catcode,带有 11 的 5 个字符\catcode,以及一个带有\catcode2 的右括号。到目前为止一切顺利。

第二种情况也是如此,但这次你有一个控制序列\verb和 7(!) 个字符,其中\catcode11 个(|\catcode12,但在这里没什么作用)。

这里的问题是,|已经被 TeX 标记化,因此它们的 catcode 无法更改。但是,它\verb所做的第一件事是使 处于活动\catcode状态|,但它现在无法再处于活动状态,因此您会收到错误。

基本上,逐字内容不能作为宏的参数出现,除非该宏经过精心构建以允许这样做。


但是,如果您对解决方法感兴趣,可以使用 Bruno Le Floch 的cprotect

\documentclass{article}
\usepackage{cprotect}
\begin{document}
\section{\textit{mySec}}
\cprotect\section{\verb|mySec|}
\end{document}

相关内容