在输出中生成宏列表

在输出中生成宏列表

我的文档中定义了几个宏。

\newcommand{\pa}[1]{\left(#1\right)} % enclose with parentheses
\newcommand{\bra}[1]{\left[#1\right]} % enclose with square brackets
\newcommand{\pfrac}[2]{\pa{\frac{#1}{#2}}} % enclosed in parentheses
\newcommand{\bfrac}[2]{\bra{\frac{#1}{#2}}} % enclosed in square brackets

由于有很多宏,我想在输出 pdf 中创建一个宏及其渲染的列表。

在此处输入图片描述

目前,我使用以下宏来生成列表。

\newcommand{\printpa}{\backslash pa\{arg1\}=\pa{arg1}}
\newcommand{\printbra}{\backslash bra\{arg1\}=\bra{arg1}}
\newcommand{\printpfrac}{\backslash pfrac\{arg1\}\{arg2\}=\pfrac{arg1}{arg2}}
\newcommand{\printbfrac}{\backslash bfrac\{arg1\}\{arg2\}=\bfrac{arg1}{arg2}}

这里,我必须为每个宏实现一个打印宏。

请建议我一种更简单的方法来创建这样的列表。例如,一个带有宏名和参数数量的打印宏就很好。

\newcommand{\printmacro}[2] = ??? %takes "macro name" and "number of arguments" as arguments.
\printmacro{pa}{1}
\printmacro{bra}{1}
\printmacro{pfrac}{2}
\printmacro{bfrac}{2}

答案1

这是一个解决方案。理想情况下,只需\printmacro{foo}理解参数并使用必要的参数,但我想不出一个聪明的方法来做到这一点(只需通过查看然后\meaning用替换#n来进行强制{argn}执行,但如果宏很强大,那么它就做得不好,所以……)。也许有人会来展示一个聪明的定义。

\documentclass{scrartcl}
\usepackage{mathtools}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand \printmacro { m m } { \dips_printmacro:cn { #1 } { #2 } }
\cs_new_protected:Npn \dips_printmacro:Nn #1 #2
 {
  \ensuremath
   {
    \texttt { \token_to_str:N #1 \dips_printmacro_args:n { #2 } }
    =
    \dips_printmacro_meaning:Nn #1 #2
   }
 }
\cs_new_protected:Npn \dips_printmacro_args:n #1
 {
  \int_step_inline:nnnn { 1 } { 1 } { #1 }
   { \c_left_brace_str \textit{arg##1} \c_right_brace_str }
 }
\cs_new_protected:Npn \dips_printmacro_meaning:Nn #1 #2
 {
  \tl_clear:N \l_tmpa_tl
  \int_step_inline:nnnn { 1 } { 1 } { #2 }
   { \tl_put_right:Nx \l_tmpa_tl { {\noexpand\textit{arg##1}} } }
  \exp_last_unbraced:NV #1 \l_tmpa_tl
 }
\cs_generate_variant:Nn \dips_printmacro:Nn { c }
\ExplSyntaxOff

\newcommand{\pa}[1]{\left(#1\right)} % enclose with parentheses
\newcommand{\bra}[1]{\left[#1\right]} % enclose with square brackets
\newcommand{\pfrac}[2]{\pa{\frac{#1}{#2}}} % enclosed in parentheses
\newcommand{\bfrac}[2]{\bra{\frac{#1}{#2}}} % enclosed in square brackets

\begin{document}
\printmacro{pa}{1}\par
\printmacro{bra}{1}\par
\printmacro{pfrac}{2}\par
\printmacro{bfrac}{2}\par
\end{document}

在此处输入图片描述

请注意,这可能仅适用于您定义的简单命令。如果使用健壮命令或 xparse 定义的命令等,这可能不会像您预期的那样工作。

相关内容