Ipython notebook 如何在IPython笔记本中打印名称为sympy的变量?

Ipython notebook 如何在IPython笔记本中打印名称为sympy的变量?,ipython-notebook,jupyter-notebook,sympy,Ipython Notebook,Jupyter Notebook,Sympy,考虑在IPython(Jupyter)笔记本中使用Symphy定义的两个变量: R_g =Symbol(r'R_{g}') L_g =Symbol(r'L_{g}') 假设我做了一些数学运算,然后得到了一个复杂的表达式,其特征可以通过下面的简单示例来说明: a=R_g*L_g print a 这张照片是: L_{g}*R_{g} 我要打印出来 R_g*L_g 而不是 $R_g L_g$ 原因是我想将这个表达式复制粘贴到fortran代码中。这是一个挑战,因为我正在使用

考虑在IPython(Jupyter)笔记本中使用Symphy定义的两个变量:

R_g     =Symbol(r'R_{g}')
L_g     =Symbol(r'L_{g}')
假设我做了一些数学运算,然后得到了一个复杂的表达式,其特征可以通过下面的简单示例来说明:

 a=R_g*L_g
 print a
这张照片是:

L_{g}*R_{g}
我要打印出来

R_g*L_g
而不是

$R_g L_g$

原因是我想将这个表达式复制粘贴到fortran代码中。这是一个挑战,因为我正在使用Latex格式化变量。所以我必须格式化包含变量的术语,比如

 IL_np1  =Symbol(r'I_{L}^{n+1}')

只需恰当地命名符号:

R_g = Symbol(r'R_g')
L_g = Symbol(r'L_g')
a = R_g * L_g

print(a)
输出:

R_g*L_g
或手动清理:

>>> s = Symbol(r'I_{L}^{n+1}')
>>> s
I_{L}^{n+1}

def make_clean_name(symbol, toremove='{}', replace=None): 
    replace = {'^': '**'}  if replace is None else {}
    return ''.join(replace.get(x, x) for x in symbol.name if x not in toremove)

>>> make_clean_name(s)
'I_L**n+1'

您可以使用一个自定义符号子类,该子类以一种方式使用
latex()
打印,另一种方式使用
fcode()
打印

它就像

In [114]: latex(CustomSymbol('x_2', 'x_{2}'))
Out[114]: 'x_{2}'

In [115]: fcode(CustomSymbol('x_2', 'x_{2}'))
Out[115]: '      x_2'

我已将默认名称设置为fcode名称。如果您希望使用另一种方式,可以定义
\u fcode
而不是
\u latex

我正在尝试使用Latex display来格式化术语,所以我有了类似于
IL_np1=Symbol(r'I_{L}^{n+1}')
的变量,这看起来很有趣。我们将努力获得令人鼓舞的初步结果。您或任何人能解释一下这是如何工作的吗?@wander95 Symphy中的每台打印机都允许您通过定义一种特殊方法来定义其在自定义Symphy对象上的行为。在这种情况下,LaTeX和Fortran打印机的方法分别是
\u LaTeX
\u fcode
。有关更多详细信息,请参阅。
In [114]: latex(CustomSymbol('x_2', 'x_{2}'))
Out[114]: 'x_{2}'

In [115]: fcode(CustomSymbol('x_2', 'x_{2}'))
Out[115]: '      x_2'