El comando \string no imprime las llaves de su argumento

El comando \string no imprime las llaves de su argumento

Mientras imprimo la Lista de símbolos, me gustaría, en un borrador, imprimir también los comandos de definición. Por ejemplo, considere los siguientes comandos:

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

y el siguiente comando para imprimir símbolos dentro de una tabla:

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

Ahora, el código:

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

Salida de orgullo: \permy \permelien la primera columna. Sin embargo me gustaría imprimir \permel{i}en lugar de \permleiaquí y no sé cómo.

Por favor ayuda...

Respuesta1

\stringsolo tomaunotoken y lo imprime, por lo que solo ve \permel.

Intentar

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

Esto insertará espacios explícitos después de las secuencias de control, lo que no es semánticamente incorrecto, pero puede que no sea estéticamente agradable. En ese caso, intente filtrar los espacios de esta manera:

\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

ejemplo

información relacionada