pnkraemer / tueplots

Figure sizes, font sizes, fonts, and more configurations at minimal overhead. Fix your journal papers, conference proceedings, and other scientific publications.
https://tueplots.readthedocs.io
MIT License
663 stars 25 forks source link

mathit in beamer_moml is too fat #94

Closed philipphennig closed 2 years ago

philipphennig commented 2 years ago

beamer_moml uses Roboto Condensed, which matches our style for beamer. But math variables (i.e. the \mathit font) is set in regular roboto.

MWE:

import numpy as np
from matplotlib import pyplot as plt
from tueplots import bundles

plt.rcParams.update({"figure.dpi": 150})
plt.rcParams.update(bundles.beamer_moml())

def f_b(x):
    return 2 ** (x / 2 - 2)

fig, ax = plt.subplots()

x = np.linspace(0, 12, num=120)
ax.plot(x, f_b(x), "-k")

ax.set_xlabel("$x$ (note that text is fine, mathit is not)")
ax.set_ylabel("$\log f(x)=6$")

I have no clue how to fix this. Anyone?

pnkraemer commented 2 years ago

Thanks for raising this!

I dont have a final solution, but maybe a starting point: the following code


import numpy as np
from matplotlib import pyplot as plt
from tueplots import bundles

preamble=r"""
\usepackage[sfdefault,condensed]{roboto}
\renewcommand{\familydefault}{\sfdefault} \usepackage{sansmath} \sansmath
"""

plt.rcParams.update({"figure.dpi": 150})
plt.rcParams.update(bundles.beamer_moml())
plt.rcParams.update({"text.usetex": True, "font.family": "sans-serif", "text.latex.preamble": preamble,

})

def f_b(x):
    return 2 ** (x / 2 - 2)

fig, ax = plt.subplots()

x = np.linspace(0, 12, num=120)
ax.plot(x, f_b(x), "-k")

ax.set_xlabel("$x$ (note that text is fine, mathit is not)")
ax.set_ylabel("$\log f(x)=6$")
plt.show()

produces the following figure: a.pdf. At least everything is consistent.

What essentially happens is that a latex backend (using the roboto package) replaces the non-latex Roboto font. What is left is to make everything into Roboto light. This seems to be possible with some more digging.

What do you think?

pnkraemer commented 2 years ago

The following seems to work for me, using your snippet above:

def beamer_moml():
    """Fonts that are compatible with the beamer template of the method-of-machine-learning group in Tübingen."""
    return {
        "text.usetex": False,
        "mathtext.fontset": "custom",
        "mathtext.it": "sans:italic",
        "font.sans-serif": ["Roboto Condensed"],
        "font.weight": "light",
        "axes.labelweight": "light",
        "axes.titleweight": "light",
    }

Does that do the trick for your use case?