对齐的LaTeX方程式SymPy

3
SymPy将像这样在字典中漂亮地打印表达式:

{x: y + 2}

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

我希望使用align环境将我的表达式分成多行,输出结果如下:

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

SymPy可以帮我完成这个吗?
1个回答

1

对于此项操作,没有内置选项,但您可以子类化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}
< p > latex 函数只是 LatexPrinter(settings).doprint(expr) 的快捷方式,您可以相应地重新定义它:

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

这样latex就有了新的行为。

说到设置,可以引入一个设置,以便两种打印方法都可用;但在那个阶段最好是向SymPy repo添加问题和PR。


你应该使用aligned而不是align,否则打印dict(a=1, b=dict(c=2))将会失败。 - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接