In einer eigenen Dokumentenklasse möchte ich einen Befehl zur vereinfachten Verwendung einer bestimmten Schriftart definieren (hier: TeX Gyre Chorus, bekannt als Zapf Chancery).

Bei Verwendung von pdflatex funktioniert das folgendermaßen:

Öffne in Overleaf
\begin{filecontents*}{meineklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meineklasse}
\ProcessOptions\relax
\newcommand*{\zapf}[1]{{\fontfamily{qzc}\selectfont #1}}
\LoadClass{scrartcl}
\end{filecontents*}

\documentclass{meineklasse}

\begin{document}
normaler Text

\zapf{Text in TeX Gyre Chorus}
\end{document}

Dieses Dokument lässt sich zwar auch mit xelatex compilieren, dann erscheint die zweite Zeile aber nicht in der gewünschten, sondern in der Standard-Schriftart.

Das zur Schriftauswahl mit xelatex vorgesehene Paket fontspec bietet einen gleichnamigen Befehl zur Schriftauswahl an. Das Folgende funktioniert jedoch nicht:

Öffne in Overleaf
\begin{filecontents*}{meinexeklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meinexeklasse}
\ProcessOptions\relax
\RequirePackage{fontspec}
\newcommand*{\zapf}[1]{{\fontspec{texgyrechorus-mediumitalic.otf} #1}}
\LoadClass{scrartcl}
\end{filecontents*}

\documentclass{meinexeklasse}

\begin{document}
normaler Text

\zapf{Text in TeX Gyre Chorus}
\end{document}

Die ausgegebenene Fehlermeldung ist „The font size command \normalsize is not defined: there is probably something wrong with the class file.

Was muss ich ändern?

gefragt 07 Mär '17, 23:54

Cletus's gravatar image

Cletus
1.6k75866
Akzeptiert-Rate: 75%

bearbeitet 07 Mär '17, 23:55


Das Problem ist relativ trivial: Pakete sind normalerweise dafür ausgelegt nach der Klasse geladen zu werden. So erwartet auch fontspec, dass die Klasse bereits Basiseinstellungen und -definitionen wie die von \normalsize vorgenommen hat. Du lädst das Paket fontspec aber bereits vor der Klasse scrartcl, die diese Einstellungen für deine Wrapper-Klasse vornehmen soll. Also musst du schlicht das Laden der Klasse vorziehen.

Ich empfehle allerdings dringend, vor der Verwendung von fontspec innerhalb einer Klasse zu prüfen, ob auch wirklich XeTeX oder LuaTeX verwendet wird:

Öffne in Overleaf
\begin{filecontents*}{meinexeklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meinexeklasse}
\ProcessOptions\relax
\LoadClass{scrartcl}
\RequirePackage{ifxetex,ifluatex}
\ifnum 0=\ifxetex 1\else\ifluatex 1\else 0\fi\fi\relax
  \newcommand*{\zapf}[1]{{\fontfamily{qzc}\selectfont #1}}
\else
  \RequirePackage{fontspec}
  \newcommand*{\zapf}[1]{{\fontspec{texgyrechorus-mediumitalic.otf} #1}}
\fi
\end{filecontents*}

\documentclass{meinexeklasse}
\begin{document}
normaler Text

\zapf{Text in TeX Gyre Chorus}
\end{document}

Nebenbei bemerkt würde ich den Font – zumindest bei Verwendung von LuaLaTeX statt XeLaTeX oder bei XeLaTeX wenn der Font als Systemfont verfügbar ist – eher über den Namen als über den Dateinamen laden und mit \newfontfamily eine eigene Familie für den Font definieren. Zu den Vorteilen sei auf die fontspec-Anleitung verwiesen.

Permanenter link

beantwortet 08 Mär '17, 08:18

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 09 Mär '17, 12:24

Das ist alles nachvollziehbar, aber das Laden einer Schrift der TeX-Distribution über den Fontnamen statt den Dateinamen ist mit XeLaTeX meines Wissens nicht möglich.

(09 Mär '17, 11:39) Cletus

@Cletus: Das stimmt nicht generell. Bei mir sind alle OTF-Fonts der TeX-Distribution gleichzeitig Systemfonts. Aber das wäre eigentlich eine andere Frage. Ist ja auch nur eine Nebenbemerkung.

(09 Mär '17, 12:12) saputello
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×14
×13
×10
×4

gestellte Frage: 07 Mär '17, 23:54

Frage wurde gesehen: 7,354 Mal

zuletzt geändert: 09 Mär '17, 12:41