Как написать жирный курсив в математическом режиме в Python (Matplotlib)? - PullRequest
1 голос
/ 19 октября 2019

Я пытался:

import matplotlib.pyplot as plt
from latex import bm
plt.text(1, 1, "$\bm{q}$")

ошибка:

ImportError: cannot import name 'bm'

Когда я использую его без from latex import bm, он ничего не дает, а цвета в файле странные (b черный)

enter image description here

1 Ответ

2 голосов
/ 19 октября 2019

Здесь есть две проблемы, одну из которых проще исправить, чем другую: первая проблема заключается в том, что "\b" в вашем строковом литерале будет интерпретироваться как escape-строка на уровне Python: "\b" является ASCIIсимвол возврата, так же, как "\t" является символом табуляции. Вам нужно либо избежать обратной косой черты, чтобы она передавалась в LaTeX, либо использовать необработанную строку. Поэтому вам нужно заменить "$\bm{q}$" на r"$\bm{q}$" или "$\\bm{q}$".

Вторая проблема заключается в том, что по умолчанию математический рендеринг matplotlib использует библиотеку mathtext, которая нене включает поддержку управляющей последовательности "\bm". Если вы хотите использовать пакеты LaTeX, не включенные в mathtext, вы можете указать matplotlib использовать вашу локальную установку LaTeX для рендеринга математики вместо использования mathtext. Это делается, например, с помощью:

from matplotlib import pyplot as plt
plt.rcParams['text.usetex'] = True

Затем необходимо убедиться, что используется пакет bm. Для этого вам нужно изменить преамбулу LaTeX, которую использует matplotlib:

plt.rcParams['text.latex.preamble'] = [r'\usepackage{bm}']

Это, конечно, означает, что вам нужно иметь работающую установку LaTeX на вашем компьютере и ключевые исполняемые файлы (например, latex, dvipng и kpsewhich) должны быть на вашем PATH, чтобы matplotlib мог их найти.

После того, как вы все это сделали, рендеринг должен работать.

Вотполный автономный пример:

from matplotlib import pyplot as plt
plt.rcParams['text.usetex'] = True
plt.rcParams['text.latex.preamble'] = [r'\usepackage{bm}']
plt.plot([0, 1, 2])
plt.text(1.5, 1, r"$\bm{testing}$")
plt.show()

И вот изображение, которое я вижу, когда запускаю приведенный выше код в моей системе (которая оснащена стандартной TeX Live установкой):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...