""" ==================== Usetex Baseline Test ==================== A test for :rc:`text.latex.preview`, a deprecated feature which relied on the preview.sty LaTeX package to properly align TeX baselines. This feature has been deprecated as Matplotlib's dvi parser now computes baselines just as well as preview.sty; this example will be removed together with :rc:`text.latex.preview` after the deprecation elapses. """ import matplotlib.pyplot as plt import matplotlib.axes as maxes plt.rcParams.update({"mathtext.fontset": "cm", "mathtext.rm": "serif"}) @maxes.subplot_class_factory class LatexPreviewSubplot(maxes.Axes): """ A hackish way to simultaneously draw texts with text.latex.preview=True and text.latex.preview=False in the same figure. It does not work with the ps backend. """ def __init__(self, *args, preview=False, **kwargs): self.preview = preview super().__init__(*args, **kwargs) def draw(self, renderer): with plt.rc_context({"text.latex.preview": self.preview}): super().draw(renderer) def test_window_extent(ax, usetex, preview): ax.xaxis.set_visible(False) ax.yaxis.set_visible(False) test_strings = ["lg", r"$\frac{1}{2}\pi$", r"$p^{3^A}$", r"$p_{3_2}$"] ax.axvline(0, color="r") for i, s in enumerate(test_strings): ax.axhline(i, color="r") ax.text(0., 3 - i, s, usetex=usetex, verticalalignment="baseline", size=50, bbox=dict(pad=0, ec="k", fc="none")) ax.set_xlim(-0.1, 1.1) ax.set_ylim(-.8, 3.9) title = f"usetex={usetex}\n" if usetex: title += f"preview={preview}" ax.set_title(title) fig = plt.figure(figsize=(2 * 3, 6.5)) for i, usetex, preview in [[0, False, False], [1, True, False], [2, True, True]]: ax = LatexPreviewSubplot(fig, 1, 3, i + 1, preview=preview) fig.add_subplot(ax) fig.subplots_adjust(top=0.85) test_window_extent(ax, usetex=usetex, preview=preview) plt.show()