
Мне нужно написать метку, содержащую '&'. Это странная потребность, но она для использования в \keyword
макросе, который также добавляет строку в aux-файл, который я могу позже проанализировать (например, с помощью внешней программы). Имена на английском языке, по-видимому, могут содержать &, как в 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}
Ошибка, конечно
! Missing \endcsname inserted.
<to be read again>
\&
l.4 \newlabel{i\&j}{{}{1}}
Как бы я попросил latex просто считать & допустимым символом в строке для aux-файла?
ценю советы.
решение1
Вы злоупотребляете, \label
просто записывая что-то в .aux
файл: ничто подобное не \label
может быть использовано в \ref
, потому что вы не знаете, где это в конечном итоге будет набрано.
Я бы не использовал \newlabel
файл .aux
, а другой маркер.
\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}
О \label{i\&j}
, просто избегайте этого или используйте \label{i&j}
то, что работает.
Содержимое aux-файла будет
\relax
\fakelabel{KW:0:1:abc}
\fakelabel{KW:0:1:def}
\fakelabel{KW:0:1:s\&p500}
\gdef \@abspage@last{1}
Ваша внешняя программа сможет искать \fakelabel
и использовать предоставленные данные.