TeX 如何确定 `-` 应该排版为一元的还是二元的?

TeX 如何确定 `-` 应该排版为一元的还是二元的?

在您的帮助下,我已经弄清楚了如何用自定义宏替换+或数学模式:-我怎样才能让每个出现的“+”和“-”都被宏替换,但仅限于数学模式?

-现在,我需要通过仅替换二进制(例如x-yx - y)而不是一元-(例如x + -x或)来扩展它-z。因此,在某种意义上,我需要测试 a-是一元的还是二进制的,这正是 TeX 在计算 周围的间距时所做的-

那么 TeX 是如何做到的呢?

答案1

有六种基本原子类型:Ord、Op、Bin、Rel、Open、Close 和 Punct。还有其他原子类型,但就间距而言,它们被视为 Ord 原子类型(Inner 是一个有点特殊的情况)。

如果 Bin 类型的原子没有被包围,则它将变成 Ord两个都两侧原子与其性质相容。下表显示了当 Bin 右侧的原子(此处+)为 Ord 时会发生什么情况;有 36 种可能的组合,您可以尝试其他 30 种。例如,“Ord Bin Open”是“Close Bin Ord”的对应项,其中 Bin 保持不变,就像在“Close Bin Open”中一样。

\baselineskip=1.2\baselineskip

\halign{#\unskip\hfil &\qquad #\unskip\hfil\cr
  $x+a$    & Ord Bin Ord   \cr
  $\sum+a$ & Op Bin Ord    \cr
  $++a$    & Bin Bin Ord   \cr
  $=+a$    & Rel Bin Ord   \cr
  $(+a$    & Open Bin Ord  \cr
  $)+a$    & Close Bin Ord \cr
  $,+a$    & Punct Bin Ord \cr
}

\bye

用 编译pdftex

在此处输入图片描述

从图中可以看出,只有在第 1、3 和 6 行中间+表现得像一个二元运算符,在其他行中它变成了 Ord。

还要注意,尾随的 Bin 将始终被视为 Ord (例如,当您输入时\lim_{x\to0-},因为它具有没有什么在它之后,类似于前导,就像在 中一样$-1$

这是不是在宏观层面上可用,并在 TeX 解释数学列表以便稍后将其转换为水平列表的深层阶段决定。

答案2

我知道这没有回答问题,但是我的评论太长了。

要使+-判断它是二进制还是一元的,它必须从它之前的内容中获取信息。1-31^{-3}或甚至进行比较。你如何在宏级别实现这一点?如果和是宏1\times-3,这是不可能的。基本上,你需要一个整个数学表达式的解析器。首先,数学模式可能以或或或 或或等结尾......因此你必须寻找类似输入的东西,或者深入研究。当然,像 l3fp 这样的数学引擎知道如何区分一元减号和二进制减号,但你必须为此编写一个完整的解析器,并且它们处理的数学表达式与数学 TeX 可以排版的并不完全相同。因此在宏观层面上,这非常困难,而且不可能仅将和转换为宏。+-$\)\]$$\end{equation}\end{align}<start of math>\PARSE{....}<end of math>$+-

TeX 操作的数学列表原子在宏观层面上是不可访问的(我不认为 e-TeX\lastnodetype有太大帮助)。

然而根据@HenriMenke评论您可以使用 LuaTeX 的回调。

相关内容