etiqueta de látex con &

etiqueta de látex con &

Necesito escribir una etiqueta que contenga un '&'. Esta es una necesidad extraña, pero es para usar en una \keywordmacro, que también agrega una cadena al archivo auxiliar, que luego puedo analizar (por ejemplo, con un programa externo). Los nombres en inglés aparentemente pueden contener un &, como en 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}

El error es por supuesto

! Missing \endcsname inserted.
<to be read again> 
\&
l.4 \newlabel{i\&j}{{}{1}}

¿Cómo le pediría a Latex que considere & un carácter viable en una cadena para el archivo auxiliar?

Se agradece el consejo.

Respuesta1

Estás abusando \labelde simplemente escribir algo en el .auxarchivo: ningún tipo de archivo creado \labelse puede usar en un archivo \ref, porque no sabes dónde se compondrá eventualmente.

No usaría \newlabelen el .auxarchivo, sino un marcador diferente.

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

Acerca de \label{i\&j}, simplemente evítelo o use \label{i&j}el que funcione.

El contenido del archivo auxiliar será

\relax
\fakelabel{KW:0:1:abc}
\fakelabel{KW:0:1:def}
\fakelabel{KW:0:1:s\&p500}
\gdef \@abspage@last{1}

Su programa externo podrá buscar \fakelabely utilizar los datos proporcionados.

información relacionada