有一次,我突然想到,在 LaTeX 之上可能存在另一个抽象层次。例如,为什么我应该输入
\left( \frac{\frac{a}{b + c} \frac{w + \lambda}{z}}{x\left[ \frac{c_n}{d}\right]} \right)\left \{\frac{x_0}{y_0} : x_0 > 0 \right \}
当我可以用更简洁的方式表达同样的事情时
({{a}/{b + c} {w + \lambda}/{z}}/{x[{c_n}/{d}]} ){{x_0}/{y_0} : x_0 > 0}
甚至
({a/{b + c} {w + \lambda}/z}/{x[c_n/d]} ){x_0/y_0 : x_0 > 0}
当然,从后者到前者的转换可能并不适用于所有用例,但对于大多数用例来说应该没问题。由于字数较少,因此阅读/调试起来也更容易一些。
我想尝试\textmath{...}
在 LuaTeX 中实现这样一个命令(这{}
应该不是问题,因为括号应该是匹配的),它可以精确地完成这种转换。但在尝试之前,我的问题是:是否已经有一个包可以做类似的事情?
毕竟,我不想重新发明轮子,而且我怀疑其他人可能也在考虑这个问题。
谢谢你!
注意:这个问题与许多 TeX 编辑器所具有的宏无关,尽管它们可能很方便。虽然它们可能允许您自动执行最顶层的扩展,但从长远来看,这无助于提高可读性 :(
答案1
ConTeXt 提供了一个calcmath
模块(计算器数学的缩写),可以部分实现您想要的功能。
\usemodule[calcmath]
% Needed because there is a typo in the code what prevents auto scaling of
% delimiters
\startluacode
function moduledata.calcmath.tex(str,mode)
context(moduledata.calcmath.totex(str,mode))
end
\stopluacode
\starttext
\displaycalcmath{cos(a/(b + c) log(w+λ)/z)}
\stoptext
给出
该模块旨在实现计算器数学中的功能,因此它仅支持单一样式的括号,不支持下标或上标,尽管添加它们应该很容易。
lua 代码位于x-calcmath.lua
上下文分布的文件中。此代码来自 luatex 的早期(大约 2006 年),如果现在重写它,它将使用 lpeg 而不是正则表达式编写。该x-calmath.lua
文件有一个被注释掉的部分 lpeg 实现。