指令 \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}

輸出:\perm\permeli在第一列。但是我想打印\permel{i}而不是在\permlei這裡打印,但不知道如何打印。

請幫忙...

答案1

\string只需要token 並印出來,所以它只能看到\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

例子

相關內容