テストされた文字列内の脚注

テストされた文字列内の脚注

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(1 回)、 が必要です\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}

関連情報