Выровненные уравнения LaTeX SymPy - PullRequest
0 голосов
/ 04 июля 2018

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 сделать это для меня?

1 Ответ

0 голосов
/ 04 июля 2018

Для этого нет встроенной опции, но вы можете создать подкласс 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 repo .

...