Math 使用sympy';s latex()函数,而不计算输入

Math 使用sympy';s latex()函数,而不计算输入,math,python-3.x,latex,sympy,Math,Python 3.x,Latex,Sympy,我想从Symphy表达式中获得latex输出,而不计算表达式。例如,如果我使用latex((2+3)/7),输出将是5/7(使用latex),但我想要的是它只使用latex输出(2+3)/7。如下所示:\frac{2+3}{7}您可以尝试用关键字evaluate=False来表示表达式: >>> latex(S('(2+3)/7',evaluate=False)) '\\frac{1}{7} \\left(2 + 3\\right)' (最好作为另一个答案添加) 不要忘记模式

我想从Symphy表达式中获得latex输出,而不计算表达式。例如,如果我使用latex((2+3)/7),输出将是5/7(使用latex),但我想要的是它只使用latex输出(2+3)/7。如下所示:\frac{2+3}{7}

您可以尝试用关键字
evaluate=False来表示表达式:

>>> latex(S('(2+3)/7',evaluate=False))
'\\frac{1}{7} \\left(2 + 3\\right)'
(最好作为另一个答案添加)


不要忘记模式选项:

>>> 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*}'

也许你正在寻找的是折叠式压裂方案

>>> latex(S('(2+3)/7',evaluate=False), fold_short_frac=True)
'\\left(2 + 3\\right) / 7'
另外,不确定evaluate=False不适用于Mul的意思。也许你可以举个例子

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

您可以手动调整长压裂比

long_frac_ratio:分子宽度与长度的允许比率 在我们开始分解长分数之前分母的宽度。 默认值为2


我发现了这一点,但问题是有时候它会做一些奇怪的事情。例如,(2+3)/7变为(1/7)(2+3),这对于我需要做的事情来说不是最优的。(\frac{1}{7}\left(2+3\right))我可能会找到另一个库来解析latex或编写我自己的解析器。不要忘记模式选项:@smichr“the mode options:?”??Latex解析器也存在忽略
evaluate=False
的问题。有模式选项可以避免这种情况吗?感谢您的帮助,但是添加模式(如您在latex输出中看到的)仍然会错误地输出。(它在1/7的右侧添加(2+3),而不是输出(2+3)/7.同时,将evaluate设置为false仍然会计算乘法,这也是我不想做的。我已经做了一个不使用Symphy的解决方案,但我仍然对Symphy中是否可能实现这一点感兴趣。找出我认为它是乘法的原因。我正在检查liveshell中似乎可以进行计算的东西w输出答案时,S('2*3/7',evaluate=False)返回6/7,但如果我打印它,它会显示2*3/7。另外,fold_short_frac肯定不是我想要的,因为我希望使用frac。具体地说,我问题的答案是让latex()函数输出这个:\frac{2+3}{7}
>>> latex(e,long_frac_ratio=3)
'\\frac{2 + 3}{7}'