如何问同意不要将bm翻译成boldsymbol?

时间:2016-01-07 09:36:40

标签: python latex sympy pprint

我处于最终用户可以自己定义变量名的情况。

例如:名为“tbm_al”的变量是正确的。

为了将变量作为乳胶打印,我使用sympy.latex并期望像“tbm”这样的“al”作为indice,但是bm是用boldsymbol翻译的。

enter image description here

是否有办法让“tbm”与indice“al”同时使用t(粗体)和indice al以及tbm_al作为字符串?

像:

\开始{方程*} \ {开始方程}的 {TBM} _ {人} \ {端方程} \ {端方程*}

2 个答案:

答案 0 :(得分:4)

bm的{​​{1}}自动翻译由Sympy latex printersympy.printing.latex)执行,特别是bm是变量修饰词典modifier_dict中的一个条目sympy.printing.latex。我认为在源代码中没有办法在调用latex(expr, **settings)时禁用修饰符dict;从我所看到的情况来看,在modifier_dict词典的相同上下文中,任何设置都不会被使用。

看看例如源中的函数translate(s)

  

def translate(s):

     

检查结束字符串的修饰符。如果存在,转换       乳胶的修饰符并递归地翻译其余部分。

     

...

从这个函数的来源,很清楚,对于参数表达式中的所有条目,将(递归地)检查修饰符字典

然后,剩下的选项是手动修改自己的modifier_dict自定义源副本中的名称修饰符(sympy.printing.latex)(或者,在原始文件中),只需删除字典条目即可对于密钥bm。当然,这是除非你想在其他地方使用bm

另见:

答案 1 :(得分:1)

Thx到@dfri。我决定在latex translation期间清除modifier_dict。

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_ {人} \ {端方程}

使用“keep_translate_keys”。 (由@dfri建议)

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

\开始{方程} TBM _ {\酒吧{A}} \ {端方程}