Команда \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}

proudeces вывод: \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

пример

Связанный контент