节/段落标题中的 xstring 函数

节/段落标题中的 xstring 函数

在以下示例中,

\documentclass{article}
\usepackage{xstring}
\newcommand\foo[1]{\StrSubstitute{#1}{love}{hate}}

\begin{document}
 \section*{\foo{I love Mondays}}
\end{document}

*如果我从\section*代码中删除,则编译停止。

  1. 有什么诀窍可以使\section*工作顺利\StrSubstitute但不行\section
  2. 是否有解决方法将命令也包含\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}}

相关内容