如何要求 sympy 不要将 bm 翻译成 boldsymbol?
How to ask sympy to don't translate bm to boldsymbol?
我处在终端用户可以自己定义变量名的情况下。
例如:一个名为"tbm_al"的变量是正确的。
为了将变量打印为乳胶,我正在使用 sympy.latex 并期望有类似 "tbm" 和 "al" 作为索引的东西,但 bm 被翻译成粗体符号。
有没有办法让 "tbm" 和索引 "al" 都没有 t(粗体)和索引 al 也没有 tbm_al 作为字符串?
喜欢:
\begin{方程式*}\begin{方程式}{tbm}_{al}\end{方程式}\end{方程式*}
bm
的自动翻译由 Sympy latex printer (sympy.printing.latex
) 执行,具体来说 bm
是变量修饰符字典 modifier_dict
中的一个条目在 sympy.printing.latex
中声明。我在源代码中看不到在调用 latex(expr, **settings)
时禁用修饰符 dict 的方法;据我所知,在与 modifier_dict
字典相同的上下文中,没有任何地方使用设置。
看看例如源代码中的函数 translate(s)
:
def translate(s):
Check for a modifier ending the string. If present, convert the
modifier to latex and translate the rest recursively.
...
从这个函数的源代码来看,很明显修饰符字典 将 检查(递归地)参数表达式中的所有条目。
剩下的选择是手动修改您自己自定义的 sympy.printing.latex
源副本(或者,在原始副本中)中的名称修饰符 (modifier_dict
),方法是简单地删除关键字 bm
的字典条目。当然,除非您想在其他地方使用 bm
。
另请参阅:
感谢@dfri。我决定在乳胶翻译过程中清除 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")
\begin{方程}tbm_{al}\end{方程}
与"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")
\begin{方程}tbm_{\bar{a}}\end{方程}
我处在终端用户可以自己定义变量名的情况下。
例如:一个名为"tbm_al"的变量是正确的。
为了将变量打印为乳胶,我正在使用 sympy.latex 并期望有类似 "tbm" 和 "al" 作为索引的东西,但 bm 被翻译成粗体符号。
有没有办法让 "tbm" 和索引 "al" 都没有 t(粗体)和索引 al 也没有 tbm_al 作为字符串?
喜欢:
\begin{方程式*}\begin{方程式}{tbm}_{al}\end{方程式}\end{方程式*}
bm
的自动翻译由 Sympy latex printer (sympy.printing.latex
) 执行,具体来说 bm
是变量修饰符字典 modifier_dict
中的一个条目在 sympy.printing.latex
中声明。我在源代码中看不到在调用 latex(expr, **settings)
时禁用修饰符 dict 的方法;据我所知,在与 modifier_dict
字典相同的上下文中,没有任何地方使用设置。
看看例如源代码中的函数 translate(s)
:
def translate(s):
Check for a modifier ending the string. If present, convert the modifier to latex and translate the rest recursively.
...
从这个函数的源代码来看,很明显修饰符字典 将 检查(递归地)参数表达式中的所有条目。
剩下的选择是手动修改您自己自定义的 sympy.printing.latex
源副本(或者,在原始副本中)中的名称修饰符 (modifier_dict
),方法是简单地删除关键字 bm
的字典条目。当然,除非您想在其他地方使用 bm
。
另请参阅:
感谢@dfri。我决定在乳胶翻译过程中清除 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")
\begin{方程}tbm_{al}\end{方程}
与"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")
\begin{方程}tbm_{\bar{a}}\end{方程}