
Ich muss ein Label schreiben, das ein '&' enthält. Das ist eine seltsame Notwendigkeit, aber es ist für die Verwendung in einem \keyword
Makro gedacht, das auch eine Zeichenfolge zur AUX-Datei hinzufügt, die ich später analysieren kann (z. B. mit einem externen Programm). Namen im Englischen können anscheinend ein & enthalten, wie in S&P~500.
\documentclass{article}
\NewDocumentCommand{\keyword}{ m }{%
\label{KW:\thesection:\thepage:#1}%
\textbf{#1}
}
\begin{document}
\keyword{abc}
\keyword{def}
\label{i\&j}
\keyword{s\&p500}
\end{document}
Fehler ist natürlich
! Missing \endcsname inserted.
<to be read again>
\&
l.4 \newlabel{i\&j}{{}{1}}
Wie kann ich Latex bitten, nur das „&“ als gültiges Zeichen in einer Zeichenfolge für die AUX-Datei zu betrachten?
Ratschläge sind willkommen.
Antwort1
Sie missbrauchen es, \label
nur um etwas in die .aux
Datei zu schreiben: Keine solche erstellte Datei \label
kann in einem verwendet werden \ref
, weil Sie nicht wissen, wo sie letztendlich gesetzt wird.
Ich würde keinen \newlabel
in der .aux
Datei verwenden, sondern einen anderen Marker.
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\fakelabel}{m}{} % for the .aux file
\NewDocumentCommand{\keyword}{ m }
{
\group_begin:
\cs_set:Npx \& { \token_to_str:N \& }
\iow_shipout:cx { @auxout }
{
\token_to_str:N \fakelabel { KW : \thesection : \thepage : #1 }
}
\group_end:
\textbf{#1}
}
\ExplSyntaxOff
\begin{document}
\keyword{abc}
\keyword{def}
\keyword{s\&p500}
\end{document}
Vermeiden \label{i\&j}
Sie es einfach oder verwenden Sie, \label{i&j}
was funktioniert.
Der Inhalt der AUX-Datei wird
\relax
\fakelabel{KW:0:1:abc}
\fakelabel{KW:0:1:def}
\fakelabel{KW:0:1:s\&p500}
\gdef \@abspage@last{1}
Ihr externes Programm kann \fakelabel
die bereitgestellten Daten suchen und verwenden.