使用运算符间距指示优先级

使用运算符间距指示优先级

我经常需要排版方程式,因为它们本身就很复杂,所以很难阅读。为了解决这个问题,我养成了用水平间距强调运算符优先级的习惯。

举一个简单的例子,因为在数学中\times结合力比强+,并且+结合力比强=,所以我会这样做:

\[  a \times b \; + \; c \times d \;\; = \;\; (e + f) \times g  \]

我发现这可以让我们一眼就更容易理解一个等式。

从那时起我就想出了一个办法小的比这更好的是,使用包定义一系列自定义的“数学连字符” semantic

\[  a `*` b ``+`` c `*` d ```=``` (e + f) `*` g  \]

增加反引号的数量会成倍增加额外的空间,我通过实验得出了最令人赏心悦目的长度。实现归结为以下内容(尽管我省略了一些极端情况和特性,例如编码\times`*`):

\RequirePackage [ligature] {semantic}

\mathlig{`````}{\mspace{38mu}}
\mathlig{````}{\mspace{23mu}}
\mathlig{```}{\mspace{12mu}}
\mathlig{``}{\mspace{5mu}}

其他人是否已经尝试过类似的事情?有没有更好/更轻松/更自动化的方法?


从哲学角度来说(我希望这不会违背 stackexchange 的精神;版主,如果我应该删除这个,请告诉我),我不知何故认为这是一种有争议的方法。毕竟,许多顽固的 TeX 用户竭尽全力保留 TeX 生成的漂亮间距。我真的很想听听你的意见。你如何解决公式可读性问题?

答案1

如果您的范围仅限于主要的算术,即加、减、乘和等于,那么您可以执行相同的操作而无需任何标记。

只需定义字符+-*即可=数学活跃

这是一个纯 TeX 文档,LaTeX 也一样(如果您加载amsmath声明\mathcode`+="8000,类似的声明应该在参数中\AtBeginDocument)。

\mathchardef\plus=\mathcode`+
\mathchardef\minus=\mathcode`-
\mathchardef\equals=\mathcode`=

\begingroup\lccode`~=`+
\lowercase{\endgroup\def~}{\mkern12mu\plus\mkern12mu}
\begingroup\lccode`~=`-
\lowercase{\endgroup\def~}{\mkern12mu\minus\mkern12mu}
\begingroup\lccode`~=`*
\lowercase{\endgroup\def~}{\mkern5mu\times\mkern5mu}
\begingroup\lccode`~=`=
\lowercase{\endgroup\def~}{\mkern23mu\equals\mkern23mu}

\mathcode`+="8000
\mathcode`-="8000
\mathcode`*="8000
\mathcode`=="8000

$$
a * b + c * d = (e * f) - g
$$
\bye

当然在 LaTeX 中应该使用\[...\]而不是$$...$$

在此处输入图片描述

您还可以“按需”激活此功能:

\mathchardef\plus=\mathcode`+
\mathchardef\minus=\mathcode`-
\mathchardef\equals=\mathcode`=

\def\spacedmath{%
  \begingroup\lccode`~=`+
  \lowercase{\endgroup\def~}{\mkern12mu\plus\mkern12mu}
  \begingroup\lccode`~=`-
  \lowercase{\endgroup\def~}{\mkern12mu\minus\mkern12mu}
  \begingroup\lccode`~=`*
  \lowercase{\endgroup\def~}{\mkern5mu\times\mkern5mu}
  \begingroup\lccode`~=`=
  \lowercase{\endgroup\def~}{\mkern23mu\equals\mkern23mu}
  \mathcode`+="8000
  \mathcode`-="8000
  \mathcode`*="8000
  \mathcode`=="8000
}

$$\spacedmath
a * b + c * d = (e * f) - g
$$
$$
a * b + c * d = (e * f) - g
$$
\bye

在此处输入图片描述

从教学角度来看,此举的实用性值得怀疑。

相关内容