Der Befehl \string druckt keine geschweiften Klammern seines Arguments

Der Befehl \string druckt keine geschweiften Klammern seines Arguments

Beim Drucken der Symbolliste möchte ich in einem Entwurf auch die Definitionsbefehle drucken. Betrachten Sie beispielsweise die folgenden Befehle:

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

und dem folgenden Befehl zum Drucken von Symbolen innerhalb einer Tabelle:

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

Nun der Code:

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

proudeces Ausgabe: \permund \permeliin der ersten Spalte. Ich möchte jedoch \permel{i}statt \permleihier drucken und weiß nicht wie.

Bitte helfen Sie …

Antwort1

\stringdauert nureinsToken und druckt das, sodass es immer nur sieht \permel.

Versuchen

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

Dadurch werden nach Steuersequenzen explizite Leerzeichen eingefügt, was semantisch nicht falsch ist, aber möglicherweise nicht ästhetisch ansprechend ist. Versuchen Sie in diesem Fall, die Leerzeichen wie folgt herauszufiltern:

\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

Beispiel

verwandte Informationen