在以下示例中,
\documentclass{article}
\usepackage{xstring}
\newcommand\foo[1]{\StrSubstitute{#1}{love}{hate}}
\begin{document}
\section*{\foo{I love Mondays}}
\end{document}
*
如果我从\section*
代码中删除,则编译停止。
- 有什么诀窍可以使
\section*
工作顺利\StrSubstitute
但不行\section
? - 是否有解决方法将命令也包含
\foo
在\section
标题中?
答案1
请记住,章节标题也用于目录,因此会扩展并写入 .toc 文件。使用\protect
可防止过早扩展\foo
:
\section{\protect\foo{I love Mondays}}
或者使用可选参数来修复它:
\section[]{\foo{I love Mondays}}
看一下脆弱和强大的命令以供解释。
您可以将命令定义为健壮的,从一开始就避免此类问题:
\DeclareRobustCommand\foo[1]{\StrSubstitute{#1}{love}{hate}}
答案2
这是一个令人感动的论点:
\section{\protect\foo{I love Mondays}}