将文本数学转换为 TeX 数学(例如自动填充 \left(, \right)、\frac 等)

将文本数学转换为 TeX 数学(例如自动填充 \left(, \right)、\frac 等)

有一次,我突然想到,在 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 实现。

相关内容