跟随相关问题,我在提供 see macro (from makeidx) 数学输入时遇到了问题。MWE:
\documentclass[a4paper,12pt]{article}
\usepackage{makeidx}
\makeindex
\begin{document}
Test
\index{\string{$\mu$-recursive}}\index{recursive|see \string{$mu$-recursive}}
\printindex
\end{document}
第 3 行和第 7 行中的错误消息:
类似于“Extra } 或缺少 \endgroup”。
问题出在哪里?如源代码所示,我已经稍后使用 \string 对数学内容进行了评估。
答案1
答案2
\string
不像带参数的命令:\string{
你实际上是将左括号转换为普通字符,从而使其}
不平衡。另一方面,对于写入文件的目的,在这个特定的上下文中你\string
根本不需要,因为你想要写入的所有标记,包括 \mu
,恰好是不可扩展的:
\documentclass[a4paper,12pt]{article}
\usepackage{makeidx}
\makeindex
\begin{document}
Test: \texttt{\meaning\mu}%
\index{$\mu$-recursive}\index{recursive|see{$\mu$-recursive}}
\printindex
\end{document}
但是,一般来说,您不应该使用\string
,而应该使用\protect
:事实上,后者可以安全地应用于不可扩展的标记,同时抑制可扩展标记的过早扩展。换句话说,与 不同\string
,\protect
不需要您知道要将其应用到的控制序列的类型(可扩展与不可扩展)。
\documentclass[a4paper,12pt]{article}
\usepackage{makeidx}
\makeindex
\begin{document}
Test: \texttt{\meaning\mu}%
\index{$\protect\mu$-recursive}\index{recursive|see{$\protect\mu$-recursive}}
\printindex
\end{document}