Fußnote innerhalb einer getesteten Zeichenfolge

Fußnote innerhalb einer getesteten Zeichenfolge

Ich möchte innerhalb eines Befehls eine Fußnote erstellen, die die übergeordnete Zeichenfolge testet (mit xstring), etwa:

\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}

Ich weiß, dass Fußnoten im Allgemeinen fragil sind, aber jede Variante, die ich ausprobiert habe, konnte nicht kompiliert werden. Wenn ich die Fußnote herausnehme, funktioniert es wie am Schnürchen.

Ich habe im Internet nach Antworten gesucht, konnte diesen genauen Fall/dieses genaue Problem aber nirgends finden und die paar Workarounds für andere, leicht verwandte Fälle waren leider hierauf nicht anwendbar.

Vielen Dank im Voraus für jede Hilfe! Ich werde mich melden, wenn ich selbst eine Lösung finde.

Antwort1

Die Standardeinstellung von xstringist \fullexpandarg; je nachdem, wie Sie es verwenden möchten, können Sie

\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}

Die \noexpandargArgumente, die in der Dokumentation (Abschnitt 3.1.1) in violetter Farbe gedruckt sind, unterliegen nicht der Erweiterung. Um \lymessage(einmal) zu erweitern, benötigen wir \expandafter.

Andernfalls können Sie damit fortfahren, \expandargdass ein einzelner Erweiterungsschritt für das erste Token in jedem „lila“ Argument ausgeführt wird.

\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}

Wenn Sie es woanders benötigen \fullexpandarg, können Sie die Funktion auch lokal deaktivieren:

\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}

Antwort2

Bildbeschreibung hier eingeben

\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}

verwandte Informationen