测试字符串内的脚注

测试字符串内的脚注

我想在测试父字符串的命令中创建一个脚注(使用xstring),例如:

\documentclass{article}

\usepackage{etex}
\usepackage{xstring}

\begin{document}

\newcommand{\lymessage}{This is my\footnote{footnote text} message.}

\IfEndWith{\lymessage}{message}{It might be true.}{It is definitely false.}

\end{document}

我知道脚注通常很脆弱,但我尝试过的所有变体都无法编译。如果我删除脚注,它就会变得非常好用。

我已在互联网上搜索答案,但没有在任何地方发现出现过这个确切的案例/问题,而且不幸的是,针对其他略微相关的案例的几种解决方法并不适用于此。

在此先感谢您的帮助!如果我自己找到解决方案,我会跟进。

答案1

标准设置xstring\fullexpandarg;根据你的使用需要,你可以

\documentclass{article}

\usepackage{xstring}
\noexpandarg % don't do full expansion in `purple' arguments

\begin{document}

\newcommand{\lymessage}{This is my\footnote{footnote text} message.}

\expandafter\IfEndWith\expandafter{\lymessage}{message}{It might be true.}{It is definitely false.}

\end{document}

文档(第 3.1.1 节)中以\noexpandarg紫色印刷的参数不进行扩展。为了扩展\lymessage(一次),我们需要\expandafter

否则,您可以继续\expandarg对每个“紫色”参数中的第一个标记执行单个扩展步骤。

\documentclass{article}

\usepackage{xstring}
\expandarg % expand just once the `purple' arguments

\begin{document}

\newcommand{\lymessage}{This is my\footnote{footnote text} message.}

\IfEndWith{\lymessage}{message}{It might be true.}{It is definitely false.}

\end{document}

或者,如果您在其他地方需要\fullexpandarg,您可以在本地禁用该功能:

\documentclass{article}

\usepackage{xstring}

\begin{document}

\newcommand{\lymessage}{This is my\footnote{footnote text} message.}

\saveexpandmode\expandarg
\IfEndWith{\lymessage}{message}{It might be true.}{It is definitely false.}
\restoreexpandmode

\end{document}

答案2

在此处输入图片描述

\documentclass{article}

\usepackage{etex}
\usepackage{xstring}

\begin{document}

\newcommand{\lymessage}{This is my\footnote{footnote text} message.}

\begingroup
\def\footnote#1{}%
\IfEndWith{\lymessage}{message}{It might be true.}{It is definitely false.}%
\endgroup

\lymessage

\end{document}

相关内容