美学考虑

美学考虑

我想有条件地使用命令以纯文本生成两种类型的输出。我想显示分数样式的导数,其中一个强制选项用于提供独立变量,第二个可选参数用于提供幂,以显示第二、第三、...、第 n 个导数。

我目前所拥有的是以下内容。

\def\dv#1{{d \over d #1}}
\def\dv#1#2{{d^{#2} \over d #1^{#2}}}

我想创建一个宏,根据给定的参数数量同时执行这两项操作。如何访问宏传递给 tex 的参数数量并实现组合宏?

答案1

欢迎!如果您愿意稍微改变语法,这很容易。

\def\dv#1#2;{{d^{#2} \over d #1^{#2}}}
$\dv{a};$ $\dv{a}2;$ $\dv a;$ $\dv a2;$

\bye

在此处输入图片描述

答案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
}

在此处输入图片描述

答案3

您可以使用更“普通的 TeX”样式,如 `\root...\of```

\def\dv#1\v#2{%
  \if\relax#1\relax
    \let\next\relax
  \else
    \def\next{^{#1}}
  \fi
  {d\next\over d#2\next}%
}

$$
\dv\v x x^3=3x^2\qquad \dv2\v x x^3=6x\qquad \dv3\v x x^3=6
$$

\bye

检查第一个参数是否为空非常很重要,因为x^{}增加了\scriptspace

在此处输入图片描述

相关内容