如何在 \title{} \chapter{} 等中正确使用 \IfEndWith (或任何替代方法)?

如何在 \title{} \chapter{} 等中正确使用 \IfEndWith (或任何替代方法)?

作为一个乳胶新手,我对如何正确使用等感到困惑\IfEndWith\title{} \chapter{}这是我的代码:

\newcommand{\hero}{John}
\newcommand{\heroap}{\IfEndWith{\hero}{s}{\hero'}{\hero's}}

这些命令是在序言中设置的,我可以\heroap在文档的任何位置使用而不会出现任何问题,除非我尝试在\title{}\chapter{}(以及大概类似的内置构造)中使用它。

知道我做错了什么吗?我也很高兴收到替代方案的建议\IfEndWith,它似乎正好适合我的用例。

答案1

以“安全”的方式定义命令\heroap,即使用\NewDocumentCommand。否则,当使用“老式”方式时,您必须\heroap在非安全环境中添加前缀\protect

当代方法:

\documentclass{article}
\usepackage{xstring}
\newcommand{\hero}{John}
\NewDocumentCommand\heroap{}{\IfEndWith{\hero}{s}{\hero'}{\hero's}}
\begin{document}
\title{\heroap}
\author{\heroap}
\maketitle
\section{\heroap}
\end{document}

老式方法:

\documentclass{article}
\usepackage{xstring}
\newcommand{\hero}{John}
\newcommand\heroap{\IfEndWith{\hero}{s}{\hero'}{\hero's}}
\begin{document}
\title{\heroap}
\author{\heroap}
\maketitle
\section{\protect\heroap}
\end{document}

两种方法都会产生相同的输出:

在此处输入图片描述

相关内容