我处于最终用户可以自己定义变量名的情况。
例如:一个名为“tbm_al”的变量是正确的。
为了将变量打印为乳胶,我正在使用 sympy.latex 并希望将“tbm”之类的内容与“al”作为索引,但 bm 被翻译为粗体符号。
有没有办法让 "tbm" 和索引 "al" 和 t (bold) 和索引 al 和 tbm_al 作为字符串?
喜欢:
\begin{方程*}\begin{方程} {tbm}_{al} \end{方程}\end{方程*}
的这种自动翻译bm
由Sympy 乳胶打印机( sympy.printing.latex
) 执行,特别是在 中声明bm
的变量修饰符字典中的条目。我在源代码中看不到在调用时禁用修饰符 dict 的方法;据我所知,不是设置在与字典相同的上下文中的任何地方都没有使用。modifier_dict
sympy.printing.latex
latex(expr, **settings)
modifier_dict
看看translate(s)
源代码中的函数:
def translate(s):
检查结束字符串的修饰符。如果存在,将修饰符转换为乳胶并递归翻译其余部分。
...
从这个函数的源代码中可以清楚地看出,修饰符字典将(递归地)检查参数表达式中的所有条目。
剩下的选择是手动修改modifier_dict
您自己的自定义源副本sympy.printing.latex
(或者,在原始副本中)中的名称修饰符 (),只需删除 key 的字典条目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{方程}