4

私は、エンドユーザーが自分で変数名を定義できる状況にいます。

たとえば、「tbm_al」という変数は正しいです。

変数をラテックスとして pprint するために、私は sympy.latex を使用しており、インデックスとして「al」を持つ「tbm」のようなものを期待していますが、bm は太字記号で変換されます。

ここに画像の説明を入力

インデックス "al" を持つ "tbm" と、インデックス al または tbm_al を持つ t (太字) の両方を文字列として持つ方法はありますか?

お気に入り:

\begin{equation*}\begin{equation} {tbm}_{al} \end{equation}\end{equation*}

4

2 に答える 2

4

このの自動翻訳は、 Sympy latex printer ( )bmによって実行されます。具体的には、 で宣言された変数修飾子辞書のエントリと同様です。呼び出し時に修飾子 dict の使用を無効にする方法がソースにありません。私が見る限り、設定は辞書と同じコンテキストのどこにも使用されていません。sympy.printing.latexbmmodifier_dictsympy.printing.latexlatex(expr, **settings)modifier_dict

translate(s)たとえば、ソースの関数を見てください。

def translate(s):

文字列を終了する修飾子を確認します。存在する場合は、修飾子をラテックスに変換し、残りを再帰的に変換します。

...

この関数のソースから、引数式のすべてのエントリについて修飾子辞書(再帰的に) チェックされることは明らかです。


modifier_dict残りのオプションは、 key の辞書エントリを削除するだけで、独自のカスタム ソース コピーsympy.printing.latex(または、オリジナル)の名前修飾子 ( ) を手動で変更することbmです。もちろん、これは他の場所で利用したい場合を除きますbm

以下も参照してください。

于 2016-01-08T02:04:39.617 に答える
1

@dfriへのThx。ラテックス変換中に 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{equation}tbm_{al}\end{equation}

「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{equation}tbm_{\bar{a}}\end{equation}

于 2016-01-12T13:45:45.073 に答える