O comando \string não imprime chaves de seu argumento

O comando \string não imprime chaves de seu argumento

Ao imprimir a Lista de Símbolos, gostaria, em um rascunho, de imprimir também os comandos de definição. Por exemplo, considere os seguintes comandos:

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

e o seguinte comando para imprimir símbolos dentro de uma tabela:

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

Agora, o 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}

Saída de orgulho: \perme \permelina primeira coluna. Porém gostaria de imprimir \permel{i}em vez \permleidaqui e não sei como.

Por favor ajude...

Responder1

\stringsó levaumtoken e imprime isso, então ele só vê \permel.

Tentar

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

Isto irá inserir espaços explícitos após as sequências de controle, o que não é semanticamente errado, mas pode não ser esteticamente agradável. Nesse caso, tente filtrar os espaços assim:

\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

exemplo

informação relacionada