对齐的LaTeX方程SymPy



SymPy将在dict中打印表达式,如下所示:

>>> latex(dict(a=1, b=2))
'\left \{ a : 1, \quad b : 2\right \}'

相反,我想使用align环境跨行拆分表达式,输出如下:

begin{align}
a & = 1 \
b & = 2 \
end{align}

SymPy可以为我做到这一点吗?

没有内置选项,但您可以子类化 LatexPrinter 并覆盖其方法_print_dict做任何您想做的事情,如下所示:

from sympy.printing.latex import LatexPrinter
class MyPrinter(LatexPrinter):
def _print_dict(self, d):
keys = sorted(d.keys(), key=default_sort_key)
items = []
for key in keys:
val = d[key]
items.append("%s & = %s" % (self._print(key), self._print(val)))
return r"begin{align} %s end{align}" % r", \ ".join(items)

使用示例:

mydict = {'a': 1, 'b': 2}
print(MyPrinter().doprint(mydict))   #  begin{align} a & = 1, \ b & = 2 end{align}

latex函数只是LatexPrinter(settings).doprint(expr)的快捷方式,可以相应地重新定义:

latex = lambda expr, **settings: MyPrinter(settings).doprint(expr)

这样latex就有了新的行为。

说到设置,也可以为此引入一个设置,以便两种打印方法都可用;但在那个阶段,最好将问题和 PR 添加到 SymPy 存储库中。

最新更新