我想有条件地使用命令以纯文本生成两种类型的输出。我想显示分数样式的导数,其中一个强制选项用于提供独立变量,第二个可选参数用于提供幂,以显示第二、第三、...、第 n 个导数。
我目前所拥有的是以下内容。
\def\dv#1{{d \over d #1}}
\def\dv#1#2{{d^{#2} \over d #1^{#2}}}
我想创建一个宏,根据给定的参数数量同时执行这两项操作。如何访问宏传递给 tex 的参数数量并实现组合宏?
答案1
答案2
使用 LaTeX 样式的可选参数,但为了简单起见,我们不会尝试跳过开括号前的空格(如果您想容忍那里的空格,只需复制 LaTeX 的\@ifnextchar
):
\catcode`\@=11
\def\dv{\futurelet\next\@dv}
\def\@dv{%
\ifx\next [%
\expandafter\@dvWithOptArg
\else
\expandafter\@dvWithoutOptArg
\fi
}
\def\@dvWithOptArg[#1]#2{%
{d^{#1} \over d #2^{#1}}%
}
\def\@dvWithoutOptArg#1{%
{d \over d #1}%
}
\catcode`\@=12
$\dv{x} x^3 = 3x^2$\qquad $\dv[2]{x} x^3 = 6x$\qquad $\dv[3]{x} x^3 = 6$\qquad
$\dv[4]{x} x^3 = 0$
\bye
美学考虑
您可能需要在后面添加一些空格分母& 朋友们:
\def\@dvWithOptArg[#1]#2{%
{d^{#1} \over d #2^{#1}} \,
}
\def\@dvWithoutOptArg#1{%
{d \over d #1} \,
}
前面的内容添加了一个\thinmuskip
,即3mu
在纯 TeX 中。下面添加了一个略小的空格 ( 2mu
):
\def\@dvWithOptArg[#1]#2{%
{d^{#1} \over d #2^{#1}} \mskip 2mu\relax
}
\def\@dvWithoutOptArg#1{%
{d \over d #1} \mskip 2mu\relax
}