\string 명령은 인수의 중괄호를 인쇄하지 않습니다.

\string 명령은 인수의 중괄호를 인쇄하지 않습니다.

기호 목록을 인쇄하는 동안 초안에서 정의 명령도 인쇄하고 싶습니다. 예를 들어 다음 명령을 고려해보세요.

\providecommand{\perm}{\ensuremath{\pi}}
\providecommand{\permel}[1]{\ensuremath{\perm(#1)}}

테이블 내의 기호를 인쇄하려면 다음 명령을 사용하세요.

\providecommand{\symbdef}[2]{\texttt{\color{blue}\string #1} & #1 & #2}

이제 코드는 다음과 같습니다.

\section{List of Symbols}
\begin{tabular}{lll}
\symbdef{\perm}{a permutaion} \\
\symbdef{\permel{i}}{the value of \perm for the argument $i$} \\
\end{tabular}

자랑스러운 출력: 첫 번째 열에 있습니다 \perm. 그러나 여기 대신 \permeli인쇄하고 싶은데 방법을 모르겠습니다.\permel{i}\permlei

도와주세요...

답변1

\string만 걸립니다하나토큰을 인쇄하고 이를 인쇄하므로 \permel.

노력하다

\providecommand{\symbdef}[2]{\texttt{\color{blue}\detokenize{#1}} & #1 & #2}

이렇게 하면 제어 시퀀스 뒤에 명시적인 공백이 삽입됩니다. 이는 의미상 잘못된 것은 아니지만 미적으로 보기 좋지 않을 수 있습니다. 이 경우 다음과 같이 공백을 필터링해 보세요.

\providecommand{\symbdef}[2]{\texttt{\color{blue}\expandafter\filterspaceaftercs\detokenize{#1\x}_} & #1 & #2}

\begingroup
\makeatletter
\catcode`\|=\z@
\catcode`\\=12
|gdef|filterspaceaftercs#1\#2 #3_%
{%
  #1%
  |ifx|empty#3|empty
    |expandafter|@gobble
   |else
    \#2|expandafter|filterspaceaftercs
  |fi
  #3_%
}
|endgroup

예

관련 정보