为什么是
\section{\verb|mySec|}
无效的 LaTeX 代码。
答案1
这是因为逐字内容总会给您带来麻烦。
该\section
命令接受一个参数,在第一种情况下是,\textit{mySec}
在第二种情况下是\verb|mySec|
。
到目前为止,TeX 已读取所有内容并使用相应的类别代码对其进行标记。在第一种情况下,您有一个控制序列\textit
,一个带有 1 的左括号\catcode
,带有 11 的 5 个字符\catcode
,以及一个带有\catcode
2 的右括号。到目前为止一切顺利。
第二种情况也是如此,但这次你有一个控制序列\verb
和 7(!) 个字符,其中\catcode
11 个(|
是\catcode
12,但在这里没什么作用)。
这里的问题是,|
已经被 TeX 标记化,因此它们的 catcode 无法更改。但是,它\verb
所做的第一件事是使 处于活动\catcode
状态|
,但它现在无法再处于活动状态,因此您会收到错误。
基本上,逐字内容不能作为宏的参数出现,除非该宏经过精心构建以允许这样做。
但是,如果您对解决方法感兴趣,可以使用 Bruno Le Floch 的cprotect
:
\documentclass{article}
\usepackage{cprotect}
\begin{document}
\section{\textit{mySec}}
\cprotect\section{\verb|mySec|}
\end{document}