&가 있는 라텍스 라벨

&가 있는 라텍스 라벨

'&'가 포함된 라벨을 작성해야 합니다. 이것은 이상한 요구 사항이지만 \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 파일의 문자열에서 &를 실행 가능한 문자로 고려하도록 라텍스에 어떻게 요청합니까?

조언을 부탁드립니다.

답변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}

About \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외부 프로그램은 제공된 데이터를 찾아 사용할 수 있습니다 .

관련 정보