![ConTeXt LMTX:数学对齐无法正常工作](https://linux22.com/image/454286/ConTeXt%20LMTX%EF%BC%9A%E6%95%B0%E5%AD%A6%E5%AF%B9%E9%BD%90%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
下面这段代码
\starttext
\startformula
\startmathalignment[n=9, align={middle,middle,middle,middle,middle,middle,middle,middle,middle}]
\NC x^{2}y^{2}-xy^{2}-x^{2}y+xy \NC = \NC 0^{2}y^{2} \NC - \NC 0y^{2} \NC - \NC 0^{2}y \NC + \NC 0y \NR
\NC \NC = \NC 0 \NC - \NC 0 \NC - \NC 0 \NC + \NC 0 \NR
\NC \NC = \NC 0 \NR
\stopmathalignment
\stopformula
\stoptext
产生此结果
使用 ConTeXt MKIV (texlive 2022) 和结果
与 ConTeXt LMTX (2022.08.25 19:21)。
这是一个错误还是发生了一些改变?
答案1
是的,有变化(数学目前正在积极开发中)。让我试着解释一下并建议该怎么做。
首先,如果你想要所有列居中对齐,你应该替换
align={middle,middle,...,middle}
经过
align={all:middle}
如果你想让第一个左对齐,第二个右对齐,你可以这样做
align={1:left,2:right}
接下来,LMTX 中间距如此紧密的原因是,您拥有如此多的对齐点,并且对于每个单元,您都会进入和退出数学模式。系统会尝试记住不同单元之间的数学类别,并使用它来插入适当的原子间间距。但这并不总是那么简单。让我们看看第一行右侧的第一部分:
\NC 0^{2}y^{2} \NC - \NC 0y^{2} \NC
这里,y^{2}
第一个单元格末尾的 是一个普通原子(带有上标,但这并不重要)。-
下一个单元格中的 通常是二进制减号。但是,如果我们在公式中有一个普通二进制结尾(是的,我们在留下带有减号的单元格时再次离开数学)组合,则二进制将转换为普通,并且我们得到的是普通-普通间距,这意味着它变得紧密。(将二进制转换为普通是一件好事,因为人们倾向于写$a-$
为例如在 处的左极限a
,然后预计 和 之间没有额外的空格a
。-
如果减号恰好在前面,则相同,也许更清楚:$-a$
应该给出一元减号(符号相同但没有空格)。)
解决此问题的一种方法是简单地在对齐中使用较少的单元格,并且可能以不同的方式对齐。这样,系统将不会看到普通二进制结束,而是看到普通二进制普通,然后就会有“正确”的间距。例如,您可以尝试以下操作:
\startformula
\startmathalignment[n=5, align={all:left}]
\NC x^{2}y^{2}-xy^{2}-x^{2}y+xy \NC = 0^{2}y^{2} \NC - 0y^{2} \NC - 0^{2}y \NC + 0y \NR
\NC \NC = 0 \NC - 0 \NC - 0 \NC + 0 \NR
\NC \NC = 0 \NC \NC \NC \NR
\stopmathalignment
\stopformula
结果是:
就我个人而言,我会完全跳过中间一行并将最后一行上移:
\startformula
x^{2}y^{2}-xy^{2}-x^{2}y+xy = 0^{2}y^{2} - 0y^{2} - 0^{2}y + 0y = 0
\stopformula
如果您确实想在等号上断开并对齐,我建议您采用较新的不使用对齐的方法:
\startformula
x^{2}y^{2}-xy^{2}-x^{2}y+xy \alignhere = 0^{2}y^{2} - 0y^{2} - 0^{2}y + 0y \breakhere = 0
\stopformula