我有一张带有表格的备忘单,如下所示
\begin{tabular}{l|l}
$k > 0$ & \verb+k > 0+ \\
$k \geq 0$ & \verb+k \geq 0+ \\
$\sum_l$ & \verb+\sum_l+ \\
%etc
\end{tabular}
这里有很多冗余,因为参数verb
与表的第一个条目相同。我尝试制作一个宏来删除重复项
\newcommand\code[1]{$#1$& \verb+#1+\\}
但会出现错误。我还尝试使用 detokenize
\newcommand\code[1]{$#1$&\texttt{\detokenize{#1}}\\}
但这样会引入多余的空格。如何定义一个既能生成公式又能生成其逐字代码的宏?
答案1
您需要逐字阅读该论点,才能看到空格:
\documentclass{article}
\makeatletter
\def\code#1{%
\let\do\@makeother \dospecials
\verbatim@font\@noligs
\@vobeyspaces \frenchspacing
\catcode`#1\active
\lccode`\~`#1%
\lowercase{\long\def\tmp##1~}{\$##1\$&$\scantokens{##1}$\\}%
\tmp
}
\makeatother
\begin{document}
\begin{tabular}{l|l}
\code|k > 0|
\code|k \geq 0|
\code|\sum_l|
\end{tabular}
\end{document}
或者交换列有点困难:-)
\makeatletter
\def\code#1{%
\bgroup
\let\do\@makeother \dospecials
\@vobeyspaces
\catcode`#1\active
\lccode`\~`#1%
\lowercase{\long\def\tmp##1~}{\egroup$\scantokens{##1}$&%
\verbatim@font\@noligs
\@vobeyspaces\frenchspacing
\$##1\$\\}%
\tmp
}
\makeatother