Python 如何让sympy向don';是否将bm转换为粗体符号?
在这种情况下,最终用户可以自己定义变量名 例如:一个名为“tbm_al”的变量是正确的 为了将变量打印为latex,我使用了sympy.latex,并希望有类似“tbm”的东西,以“al”作为标记,但bm被翻译为粗体符号 是否有一种方法可以同时使用带有标记“al”的“tbm”和带有标记“al”的t(粗体)或tbm_al作为字符串 比如:Python 如何让sympy向don';是否将bm转换为粗体符号?,python,latex,sympy,pprint,Python,Latex,Sympy,Pprint,在这种情况下,最终用户可以自己定义变量名 例如:一个名为“tbm_al”的变量是正确的 为了将变量打印为latex,我使用了sympy.latex,并希望有类似“tbm”的东西,以“al”作为标记,但bm被翻译为粗体符号 是否有一种方法可以同时使用带有标记“al”的“tbm”和带有标记“al”的t(粗体)或tbm_al作为字符串 比如: \begin{equation*}\begin{equation}{tbm}{al}\end{equation}\end{equation*}此bm的自动翻译
\begin{equation*}\begin{equation}{tbm}{al}\end{equation}\end{equation*}此
bm
的自动翻译由(Symphy.printing.latex
)执行,具体地说,bm
是变量修饰符字典修饰符目录
中的一个条目,在sympy.printing.latex
中声明。我在源代码中看不到任何方法可以禁用调用时修改器dict的使用latex(expr,**设置)
;据我所见,not设置与修饰符\u dict
字典不在同一上下文中使用
查看例如源代码中的函数translate
:
def翻译:
检查字符串结尾的修饰符。如果存在,则转换
修改为latex,并递归地转换其余部分
从这个函数的源代码可以很清楚地看到,将(递归地)检查修饰符字典中参数表达式中的所有条目
剩下的选项是手动修改您自己的
sympy.printing.latex
(或者,在原件中)自定义源副本中的名称修饰符(modifier\u dict
),只需删除键bm
的字典条目即可。当然,除非您想在其他地方使用bm
另见:
from sympy.printing.latex import modifier_dict
from sympy import latex
def cancel_sympy_translate(f):
def wrapper(*args, **kwargs):
saved_dict = dict(modifier_dict)
modifier_dict.clear()
result = f(*args, **kwargs)
modifier_dict.update(saved_dict)
return result
return wrapper
latex = cancel_sympy_translate(latex)
t = Symbol("tbm_al")
print latex(t, mode="equation")
\开始{等式}tbm{al}\结束{等式}
用“保持翻译键”。(由@dfri建议)
\begin{equation}tbm{\bar{a}}\end{equation}我用了一个装饰器来装饰latex函数。@user2652620这似乎是一个有效的解决方法,干得好。值得注意的是:“不那么麻烦”的方法是只修改字典的一部分,而不是全部删除。
def cancel_sympy_translate(f, keep_translate_keys=None):
keep_translate_keys = keep_translate_keys or []
def remove_unwanted_keys(modif_dict):
for k in modif_dict.keys():
if k in keep_translate_keys:
continue
del modif_dict[k]
def wrapper(*args, **kwargs):
saved_dict = dict(modifier_dict)
remove_unwanted_keys(modifier_dict)
result = f(*args, **kwargs)
modifier_dict.update(saved_dict)
return result
return wrapper
latex = cancel_sympy_translate(latex, keep_translate_keys=["bar"])
t = Symbol("tbm_abar")
print latex(t, mode="equation")