
「&」を含むラベルを記述する必要があります。これは奇妙なニーズですが、\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}}
aux ファイルの文字列で & を有効な文字として扱うように LaTeX に指示するにはどうすればよいでしょうか?
アドバイスをいただければ幸いです。
答え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
外部プログラムは提供されたデータを検索して使用できるようになります。