コマンド\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かかるのは1つトークンを作成してそれを印刷するので、 だけが表示されます\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

例

関連情報