
Necesito escribir una etiqueta que contenga un '&'. Esta es una necesidad extraña, pero es para usar en una \keyword
macro, 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 \label
de simplemente escribir algo en el .aux
archivo: ningún tipo de archivo creado \label
se puede usar en un archivo \ref
, porque no sabes dónde se compondrá eventualmente.
No usaría \newlabel
en el .aux
archivo, 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 \fakelabel
y utilizar los datos proporcionados.