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