2015-02-16 6 views
1

Я хочу получить выход латекса из выражения sympy без вычисления выражения. Например, если я делаю латекс ((2 + 3)/7), выход будет 5/7 (с латексом), но для меня это просто для вывода (2 + 3)/7 с латексом. Как это: \ гидроразрыва {2 + 3} {7}Использование функции latex() sympy без вычисления ввода

ответ

0

Вы можете вручную настроить long_frac_ratio

long_frac_ratio: Разрешенное отношение ширины числителя к ширине знаменателя, прежде чем мы начнем разрывая длинные дроби. Значение по умолчанию 2.

>>> latex(e,long_frac_ratio=3) 
'\\frac{2 + 3}{7}' 
+0

Ничего особенного! Странно, что он по умолчанию установлен так низко. – Zelnoth

3

Вы можете попробовать sympify выражение с ключевым словом evaluate=False:

>>> latex(S('(2+3)/7',evaluate=False)) 
'\\frac{1}{7} \\left(2 + 3\\right)' 
+0

я вроде нашел это, но проблема в том, что иногда это делает некоторые странные вещи. например, (2 + 3)/7 становится (1/7) (2 + 3), что не является оптимальным для того, что мне нужно делать. (\ frac {1} {7} \ left (2 + 3 \ right)) Я могу просто найти другую библиотеку для разбора латекса или написать собственный парсер. – Zelnoth

+0

Не забудьте про опции режима: – smichr

+0

@smichr "Опции режима:" ?? Также возникла проблема с парсером Latex, игнорируя значение 'evaluation = False'. Есть ли варианты режима, чтобы избежать этого? – JeromeJ

0

(лучше добавленным в качестве еще одного ответа)

Не стоит забывать о вариантах режима:

>>> e = S('(2+3)/7', evaluate=False) 
>>> latex(e,mode='inline') 
'$\\left(2 + 3\\right)/7$' 
>>> latex(e,mode='plain') 
'\\frac{1}{7} \\left(2 + 3\\right)' 
>>> latex(e,mode='equation') 
'\\begin{equation}\\frac{1}{7} \\left(2 + 3\\right)\\end{equation}' 
>>> latex(e,mode='equation*') 
'\\begin{equation*}\\frac{1}{7} \\left(2 + 3\\right)\\end{equation*}' 
+0

ценят помощь, но добавление режима (как вы можете видеть на выходе из латекса) по-прежнему выводится неправильно. (он добавляет (2 + 3) справа от 1/7 вместо вывода (2 + 3)/7. Кроме того, установка оценки на false все еще вычисляет умножение, которое также я не хочу делать. обходной путь, который не использует sympy, но меня все еще интересует, если это возможно даже в sympy. – Zelnoth

0

Возможно, опция fold_short_frac - это то, что вы ищете?

>>> latex(S('(2+3)/7',evaluate=False), fold_short_frac=True) 
'\\left(2 + 3\\right)/7' 

Кроме того, не уверен, что вы имеете в виду относительно оценки = False, не работающей для Mul. Возможно, вы можете привести пример.

>>> S('2*3',evaluate=False) 
2*3 
>>> S('2*3/7',evaluate=False) 
2*3/7 
+0

Нашел, почему я думал, что это умножается. Я проверял вещи в жизненном пространстве, которые, похоже, делают вычисления при выводе ответов. поэтому S ('2 * 3/7', значение = False) возвращает 6/7, но если я его печатаю, он показывает 2 * 3/7. Также fold_short_frac определенно не то, что я ищу, так как я хочу, чтобы frac В частности, ответ на мой вопрос будет заключаться в том, чтобы получить функцию latex() для вывода этого: \ frac {2 + 3} {7} – Zelnoth

Смежные вопросы