сноска внутри проверенной строки

сноска внутри проверенной строки

Я хотел бы создать сноску внутри команды, которая проверяет родительскую строку (используя 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}

С \noexpandargаргументами, которые в документации (п. 3.1.1) напечатаны фиолетовым цветом, расширению не подлежат. Для того, чтобы расширить \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}

Связанный контент