Почему пакет siunitx LaTeX добавляет вертикальное смещение к некоторым текстовым элементам на рисунках matplotlib?

#python #matplotlib #latex

Вопрос:

Я использую LaTeX для визуализации текста в моих рисунках matplotlib. Когда я добавляю пакет siunitx в преамбулу LaTeX, некоторые текстовые элементы больше не выровнены правильно по вертикали.

Я только недавно столкнулся с этой проблемой: фигуры, которые ранее были отрисованы правильно, теперь разбиты. Это влияет на несколько сред python, поэтому я полагаю, что это может быть связано с последней версией siunitx?

Вот мой минимальный рабочий пример:

 import numpy as np
import matplotlib.pyplot as plt

# Test data
x = np.linspace(0, 2*np.pi, 64)
y = np.sin(x)

# Use latex for text
plt.rcdefaults()
plt.rcParams['text.usetex'] = True

# Correctly behaving text
fig0, ax0 = plt.subplots()
ax0.plot(x, y, label='some string')
ax0.legend()
fig0.tight_layout()
fig0.savefig('without_siunitx.png')
plt.show()

# Use siunitx
plt.rcParams['text.latex.preamble'] = 'n'.join([
    r'usepackage{siunitx}',
])

# Now some text has incorrect y position
fig1, ax1 = plt.subplots()
ax1.plot(x, y, label='some string')
ax1.legend()
fig1.tight_layout()
fig1.savefig('with_siunitx.png')
plt.show()
 

Для минимального рабочего примера я использую python 3.8.12, matplotlib 3.3.2 и siunitx 3.0.32 (установлен через MiKTeX) в Windows 10.

Два сгенерированных изображения png связаны ниже:

Правильно выровненная фигура без siunitx

Неправильно выровненная фигура с siunitx

Вы можете видеть, что текст легенды и метки по оси y смещены после использования siunitx.

Я буду очень благодарен всем, кто может помочь мне решить эту проблему, так как это влияет на большинство цифр для моей диссертации. Большое спасибо!

Комментарии:

1. Можете ли вы попробовать с usepackage{siunitx}[=v2]

2. @samcarter_is_at_topanswers.xyz, который исправил это, большое спасибо! Могу я спросить, что здесь делают квадратные скобки? Это мой первый вопрос о stackoverflow, могу ли я каким-то образом отметить ваш комментарий как правильный ответ?

3. Это синтаксис latex для отката к предыдущей версии, см. latex-project.org/publications/… подробнее

4. Если вы можете найти файлы LaTeX, которые не работают/создают проблему, вы, возможно, сможете помочь, разместив их (и эту проблему здесь) на tex.stackexchange.com — автор siunitx очень активен там.

5. Что произойдет, если вы загрузитесь usepackage{color} вместо siunitx. Это тоже смещает текст?

Ответ №1:

Если это работало правильно раньше, вы можете откатиться к версии 2 siunitx со следующим синтаксисом:

 usepackage{siunitx}[=v2]