Latexetikett mit &

Latexetikett mit &

Ich muss ein Label schreiben, das ein '&' enthält. Das ist eine seltsame Notwendigkeit, aber es ist für die Verwendung in einem \keywordMakro 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, \labelnur um etwas in die .auxDatei zu schreiben: Keine solche erstellte Datei \labelkann in einem verwendet werden \ref, weil Sie nicht wissen, wo sie letztendlich gesetzt wird.

Ich würde keinen \newlabelin der .auxDatei 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 \fakelabeldie bereitgestellten Daten suchen und verwenden.

verwandte Informationen