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 存储库中。