Die Textschrift ist auf Times umgestellt, die Mathematik bleibt Computer Modern – auf dieses Problem stößt jeder zuerst, wenn er in LaTeX eine Mathematikschrift auswählt. Unangenehmer wird es danach. Lädt man mathptmx, hält das Dokument für durchgängig Times und schickt das PDF durch pdffonts, so zeigt sich: CMEX10 steckt noch immer darin. Summen- und Integralzeichen sind bis heute Knuths Schrift. Diese Seite vergleicht die Mathematik-Schriftpakete für pdfLaTeX (newtxmath, mathpazo, fourier, kpfonts und andere) mit unicode-math plus \setmathfont unter XeLaTeX und LuaLaTeX – und zählt jedes Mal nach, was tatsächlich im PDF gelandet ist. Die Alphabetbefehle (\mathbb, \bm und Verwandte) haben eine eigene Seite; hier geht es darum, wie man die Mathematikschrift für ein ganzes Dokument festlegt.
Eine neue Textschrift ändert die Mathematik nicht
In LaTeX werden Textschrift und Mathematikschrift in völlig getrennten Systemen verwaltet. Ersetzt man die Textschrift mit einer \usepackage{...}-Zeile, bleiben Variablen, Operatoren und Indizes Computer Modern, bis man etwas anderes bestimmt. Das ist Absicht, keine Nachlässigkeit. Eine Mathematikschrift muss Informationen mitbringen, die eine Textschrift schlicht nicht hat: Höhe der Zeichen und Lage der Achse, Verlängerungsstücke, mit denen Wurzeln und Klammern mitwachsen, Absenkung der Indizes, Dicke des Bruchstrichs – Dutzende von Maßen. Eine gewöhnliche Textschrift lässt sich dafür nicht zweckentfremden. Die Mathematikschrift zu wechseln heißt deshalb, eine eigens dafür gebaute Schrift zu holen.
Was wirklich eingebettet wird: mit pdffonts nachzählen
Ob ein Mathematik-Schriftpaket Computer Modern wirklich ersetzt hat, klärt sich sofort, indem man die im PDF eingebetteten Schriften zählt. Dazu übergibt man die Datei an pdffonts von Poppler (auf den meisten Systemen in poppler-utils enthalten). Ein und dasselbe kurze Dokument – eine Textzeile plus eine abgesetzte Formel mit Integral, Summe, kleinem und großem griechischem Buchstaben – mit pdfLaTeX unter TeX Live 2024 übersetzt, teilte das Feld sauber in drei Gruppen: die vollständig ersetzenden (newtx, newpx, fourier, kpfonts, mathdesign), die Computer Modern zurücklassenden (mathptmx, mathpazo, eulervm) und, wenn man nichts tut, durchgehend Computer Modern.
# the only honest way to check which math font you actually shipped
pdflatex paper.tex
pdffonts paper.pdf
# name type emb sub uni
# ------------------------------------ ----------------- --- --- ---
# QSPJFW+NimbusRomNo9L-Regu Type 1 yes yes yes
# CZKGAS+CMR10 Type 1 yes yes yes <- still Computer Modern
# UYVLXV+CMEX10 Type 1 yes yes yes <- the big operators| Was geladen wird | Von pdffonts gemeldete Mathematikschriften | Bleibt CM übrig? |
|---|---|---|
(none) | CMR10 CMMI10 CMSY7 CMEX10 CMMI7 CMR7 | Alles; die voreingestellte Computer-Modern-Mathematik |
mathptmx | NimbusRomNo9L StandardSymL CMR10 CMSY10 CMMI10 CMEX10 | Ja. + und = stammen aus CMR10, \sum und \int aus CMEX10 |
mathpazo | URWPalladioL PazoMath CMR10 CMSY10 CMEX10 | Ja; die großen Operatoren bleiben CMEX10 |
newtxmath | NewTXMI txsys txmiaX txexs NewTXMI7 | Nein. Auf der Textseite erscheint TeXGyreTermesX-Regular |
newpxmath | NewPXMI pxsys pxmiaX txexs | Nein; als Erweiterungsschrift dient dasselbe txexs wie bei newtx – eingebettet wird die identische Teilmenge |
fourier | Fourier-Math-Symbols / -Extension / -Letters | Nein; der Text ist Utopia. Ein echter Einzeiler |
kpfonts | Kp-Regular Kp-Italic Kp-Ex Kp-Sy | Nein; Text und Mathematik sind durchgehend Kp |
eulervm | EURM10 EUFM10 EUEX10 sowie CMR10 CMR7 | Ja; Buchstaben, Symbole und große Operatoren werden Euler, doch die Familie operators (Ziffern, aufrechte Antiqua) behält die Textschrift |
mathdesign | Ein vollständiger Satz MathDesign-CH-Regular | Nein; mit [charter] ist der Text CharterBT |
Der klassische Weg: Text und Mathematik unter pdfLaTeX paaren
Der Standardgriff unter pdfLaTeX besteht darin, ein Text- und ein Mathematikpaket als Paar zu laden. Am leichtesten zu empfehlen ist heute die newtx-Familie: \usepackage{newtxtext} neben \usepackage{newtxmath} ergibt Times-artigen Text mit passender Mathematik. Trotz des Namens bettet newtxtext allerdings nicht Times selbst ein, sondern ein erweitertes TeX Gyre Termes – pdffonts meldet TeXGyreTermesX-Regular. Für Palatino nimmt man mathpazo oder newpxtext mit newpxmath. Wer Charter möchte: Eine Datei xcharter-math.sty gibt es nicht. Unter pdfLaTeX ruft man es als Option auf, \usepackage[xcharter]{newtxmath}, und die OpenType-Variante XCharter-Math.otf erreicht man über das \setmathfont des nächsten Abschnitts. Dasselbe Muster passt zu vielen weiteren Textschriften – libertine, libertinus, cochineal, erewhon, stix2, noto –, und darin liegt die eigentliche Stärke von newtxmath.
Wer Text und Mathematik mit einer Zeile gemeinsam wechseln will, ist mit fourier (Utopia-Text plus Fourier-Mathematik) und kpfonts (der Kepler-Familie) auf der sicheren Seite; in den Messungen oben ließ keines von beiden auch nur eine Computer-Modern-Schrift zurück. Zu vermeiden ist der Irrtum, ein reines Textpaket für ein Mathematikpaket zu halten. Lädt man etwa libertinus unter pdfLaTeX, bleibt die Mathematik CM: Das PDF trägt CMMI10, CMR10 und CMEX10 neben LibertinusSerif-Regular. Diese Messung steht auf der Seite zu den westlichen Schriften. Der zweite klassische Unfall ist, eine Textschrift mit einer nicht dazugehörigen Mathematikschrift zu mischen. Kombiniert man newtxtext (Times-artig) mit newpxmath (Palatino-artig), funktionieren beide Schriften einwandfrei, doch die Seite wirkt schief: Dickten und Grauwert passen nicht zusammen.
% --- Times-like text and matching math (the easy recommendation) ---
\usepackage{newtxtext}
\usepackage{newtxmath}
% --- Palatino text and math, in one package ---
% \usepackage{mathpazo}
% --- one line for both, with no Computer Modern left behind ---
% \usepackage{fourier} % Utopia text + Fourier math
% \usepackage{kpfonts} % the Kepler family
% --- match math to another text face through newtxmath ---
% \usepackage{libertinus}
% \usepackage[libertinus]{newtxmath}Der moderne Weg: unicode-math und \setmathfont
Unter XeLaTeX oder LuaLaTeX genügt es, unicode-math zu laden und eine einzige \setmathfont{…}-Zeile zu schreiben, um die gesamte Mathematik aus einer einzigen OpenType-Mathematikschrift zu setzen – der Paketstapel entfällt. Die Engine-Beschränkung ist ernst gemeint: Schreibt man \usepackage{unicode-math} unter pdfLaTeX, bricht es ab mit ! Package unicode-math Error: Cannot be run with pdftex!, gefolgt von (unicode-math) Use XeLaTeX or LuaLaTeX instead. Möglich macht das die MATH-Tabelle von OpenType – ein genormter Block in der Schriftdatei mit sämtlichen Maßen, die TeX für den Mathematiksatz braucht: Dicke des Bruchstrichs, Absenkung der Indizes, Freiraum über dem Wurzelzeichen, Zusammenbau dehnbarer Klammern aus Einzelteilen. Weil das in der Schrift steckt, tauscht ein Schriftwechsel die Satzparameter gleich mit. Wird gar keine Schrift genannt, lädt Latin Modern Math als Voreinstellung.
In der Ladereihenfolge liegt eine Mine. Wird amssymb nach unicode-math geladen, erscheinen vier gleichartige Fehler, angeführt von ! LaTeX Error: Command \eth already defined. und fortgesetzt mit \smallsetminus, \digamma und \backepsilon (gemessen unter TeX Live 2024). unicode-math hat diese Zeichen bereits von der Unicode-Seite her definiert, und amssymb gerät beim Neudefinieren damit in Konflikt. Kehrt man die Reihenfolge um – amsmath, dann amssymb, dann unicode-math –, übersetzt dasselbe Dokument fehlerfrei. Merksatz: „unicode-math kommt immer nach den schriftbezogenen Paketen“ – damit vermeidet man die meisten Pannen.
| OpenType-Mathematikschrift | Charakter und passende Textschrift |
|---|---|
Latin Modern Math | In der Linie von Computer Modern; standardmäßig geladen. Passt zu Latin Modern Roman |
TeX Gyre Termes Math | Times-artig; passt zu TeX Gyre Termes. Es gibt auch Pagella-, Bonum-, Schola- und DejaVu-Fassungen |
STIX Two Math | Sehr breite Abdeckung, auf den Wissenschaftssatz zugeschnitten; passt zu STIX Two Text. macOS bringt sie mit |
Libertinus Math | Das Mathematik-Pendant zu Libertinus Serif – eine Paarung, die pdfLaTeX nicht bietet |
XCharter-Math | Die Charter-Linie. Ein xcharter-math.sty gibt es nicht; die OTF erreicht man über \setmathfont |
NewCMMath-Regular | Die Mathematikschrift von New Computer Modern; das CM-Aussehen mit weit größerer Unicode-Abdeckung |
Fira Math | Eine serifenlose Mathematikschrift; nützlich, wenn Folien oder Poster passende Mathematik brauchen |
Asana-Math | Eine an Palatino angelehnte Mathematikschrift; ein Veteran neben XITS, dem STIX-Ableger |
The font "Latin Modern Math" cannot be found: XeLaTeX gegen LuaLaTeX
Dasselbe \setmathfont{Latin Modern Math} gelingt unter LuaLaTeX und scheitert unter XeLaTeX mit ! Package fontspec Error: The font "Latin Modern Math" cannot be found. – gemessen auf macOS mit TeX Live 2024. Der Grund liegt darin, wie die Engines einen Schriftnamen auflösen. LuaTeX kann eine Schrift im Verzeichnisbaum von TeX (dem TDS) über den Namen finden, XeTeX dagegen fragt die Schriftdatenbank des Betriebssystems; eine Schrift, die zwar TeX Live beiliegt, aber im System nicht registriert ist, gilt dann schlicht als „nicht gefunden“. Im selben Test wurde nur STIX Two Math auch unter XeLaTeX aufgelöst – weil macOS diese Schrift systemweit mitbringt. Die Namensauflösung je Engine behandelt die fontspec-Seite ausführlich; hier nur die Abhilfen: den Dateinamen angeben (\setmathfont{latinmodern-math.otf}), [Path=…] ergänzen oder zu LuaLaTeX wechseln.
% compile with lualatex (or xelatex, but see the note on name lookup)
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb} % must come BEFORE unicode-math
\usepackage{unicode-math} % always after the font packages
\setmainfont{TeX Gyre Termes} % text, via fontspec
\setmathfont{TeX Gyre Termes Math} % the matching OpenType math font
% \setmathfont{latinmodern-math.otf} % by file name, if lookup by name fails
\begin{document}
\[ f(x) = \int_{-\infty}^{\infty} \hat f(\xi)\, e^{2\pi i x \xi}\, d\xi. \]
\end{document}Nur einen Teil aus einer anderen Schrift holen: range=
Fehlt der gewählten Mathematikschrift ein benötigtes Zeichen, füllt die Option range= von \setmathfont die Lücke aus einer anderen Schrift. range= nimmt einen Unicode-Bereich, ein einzelnes Symbol wie range=\int, einen Alphabetstil wie range=\symbb (auch als range=bb schreibbar) sowie Kombinationen aus Stil und Schriftsystem wie range=bfit/{greek,Greek}. Der Effekt ist messbar: Ergänzt man \setmathfont{STIX Two Math}[range=\symbb] zu einer Hauptschrift Latin Modern Math, meldet pdffonts beide – LatinModernMath-Regular und STIXTwoMath-Regular –, wobei letztere nur die wenigen Blackboard-Buchstaben trägt. Da nur die angeforderten Plätze geladen werden, bläht dieses Mischen das PDF nicht auf. Voraussetzung ist allein, dass zuvor eine Haupt-Mathematikschrift auf normalem Weg gesetzt wurde.
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math} % the main math font
\setmathfont{STIX Two Math}[range=\symbb] % blackboard bold only
\setmathfont{TeX Gyre Termes Math}[range=bfit/{greek,Greek}] % bold-italic Greek onlyWas also wählen? Mathematik und Text als Paar
Der Rat lässt sich auf eine Regel eindampfen: Textschrift und Mathematikschrift als Paar wählen. Gleich welche Engine – dieser Grundsatz bleibt. Tut man nichts, erhält man Computer Modern (pdfLaTeX) oder Latin Modern Math (die Voreinstellung von unicode-math), beides durchaus ansehnlich; solange kein Styleguide eine Schrift vorschreibt, gibt es keinen Grund zu wechseln. Wechselt man unter pdfLaTeX doch, nimmt man Dinge, die füreinander gemacht wurden – Times mit newtxtext plus newtxmath, Palatino mit mathpazo oder dem newpx-Paar, Utopia mit fourier, Kepler mit kpfonts. Unter XeLaTeX oder LuaLaTeX lädt man amsmath, amssymb, unicode-math in dieser Reihenfolge und übergibt \setmainfont und \setmathfont Namen derselben Familie. Und dann: mit pdffonts prüfen, bevor die Datei irgendwohin geht. Die Schrift, die man ausgeliefert zu haben glaubt, muss nicht die ausgelieferte sein – genau damit begann diese Seite.
- Wer nichts tut, erhält Computer Modern (pdfLaTeX) oder Latin Modern Math (Voreinstellung von
unicode-math). Ohne Vorgabe besteht kein Grund zu wechseln. - Wechsel unter pdfLaTeX: Pakete verwenden, die als Paar gedacht sind. Times ist
newtxtextplusnewtxmath, Palatino istmathpazo; für eine einzige Zeilefourieroderkpfonts. - Unter XeLaTeX oder LuaLaTeX:
amsmath,amssymb,unicode-mathin dieser Reihenfolge laden und\setmainfontsowie\setmathfontin derselben Familie halten. - Nicht eine Textschrift mit einer nicht dazugehörigen Mathematikschrift mischen (Times-Text, Palatino-Mathematik). Es gibt keinen Fehler; die Seite zeigt es.
- Zum Abschluss immer die Einbettung mit
pdffontsprüfen.mathptmxundmathpazolassenCMEX10zurück.