Python 如何让sympy向don';是否将bm转换为粗体符号?

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的自动翻译

在这种情况下,最终用户可以自己定义变量名

例如:一个名为“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
的自动翻译由(
Symphy.printing.latex
)执行,具体地说,
bm
是变量修饰符字典
修饰符目录
中的一个条目,在
sympy.printing.latex
中声明。我在源代码中看不到任何方法可以禁用调用时修改器dict的使用
latex(expr,**设置)
;据我所见,not设置与
修饰符\u dict
字典不在同一上下文中使用

查看例如源代码中的函数
translate

def翻译:

检查字符串结尾的修饰符。如果存在,则转换 修改为latex,并递归地转换其余部分

从这个函数的源代码可以很清楚地看到,将(递归地)检查修饰符字典中参数表达式中的所有条目


剩下的选项是手动修改您自己的
sympy.printing.latex
(或者,在原件中)自定义源副本中的名称修饰符(
modifier\u dict
),只需删除键
bm
的字典条目即可。当然,除非您想在其他地方使用
bm

另见:


Thx至@dfri。我决定在翻译过程中清除修饰符

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")