考虑下面的例子:
from sympy import *
x = Symbol('x')
f = sqrt(3*x + 2)
现在我想替换一个数字,比如说5
代表x
并获得一个LaTeX代表,在这种情况下它应该返回
\\sqrt(3\\cdot 5 + 2)
我该怎么做?
我尝试了latex(f.subs(x,2,evaluate=False))
,但这只会导致\\sqrt(17)
。
答案 0 :(得分:1)
使用UnevaluatedExpr(5)代替5:
>>> latex(f.subs(x, UnevaluatedExpr(5)))
'\\sqrt{2 + 3 \\cdot 5}'
这个包装器可以防止它内部的表达式(" 5")与外部术语交互。参考:Prevent expression evaluation
替换后加数的顺序不同,因为打印机会对3*x + 2
和3*5 + 2
进行不同的排序。为了避免这种情况,可以使用order='none'
来保持参数所具有的内部顺序,而不是试图将它们置于人性化的安排中。
>>> latex(f, order='none')
'\\sqrt{2 + 3 x}'
>>> latex(f.subs(x, UnevaluatedExpr(5)), order='none')
'\\sqrt{2 + 3 \\cdot 5}'