Standardklassen

Die Standardklassen von LaTeX – article, report, book, letter und das betagte slides – sind nicht fünf unabhängig geschriebene Programme. Die ersten drei sind drei Ausgaben einer einzigen Quelldatei, classes.dtx, mit unterschiedlichen Optionen erzeugt. In TeX Live 2024 umfassen report.cls und book.cls jeweils knapp 750 Zeilen, und ein Diff zwischen beiden berührt nur 67 davon. 67 Zeilen sind der gesamte Abstand zwischen einem Bericht und einem Buch. Diese Seite liest sie: welche Klasse Kapitel hat, welche ein- oder zweiseitig setzt, was \frontmatter tatsächlich umschaltet und wo die Standardoptionen auseinandergehen – jede Behauptung an echter Ausgabe geprüft statt aus dem Gedächtnis wiederholt.

article, report und book stammen aus einer Quelldatei

Die drei Klassen sind nach einem Bauplan gedruckt. Im Kopf von article.cls steht „classes.dtx (with options: article)“; report.cls und book.cls tragen dieselbe Zeile mit anderem Optionsnamen. Wer die Unterschiede kennen will, ist mit diff schneller als mit einem Handbuch. Zwischen article.cls und report.cls liegen 232 Zeilen, zwischen report.cls und book.cls 67. Diese beiden Zahlen sind die Distanzen selbst: Der Sprung von article zu report fügt eine ganze Hierarchieebene hinzu, der Schritt von report zu book ist eine weit kleinere Korrektur. Die folgenden Abschnitte behandeln nur, was in diesen Diffs tatsächlich vorkommt.

shell
# the header that gives the game away, and the two distances
head -8 "$(kpsewhich book.cls)" | grep classes.dtx
#   %% classes.dtx  (with options: `book')

diff "$(kpsewhich article.cls)" "$(kpsewhich report.cls)" | grep -c '^[<>]'   # 232
diff "$(kpsewhich report.cls)"  "$(kpsewhich book.cls)"   | grep -c '^[<>]'   # 67

Welche Klassen \chapter haben und was die Antwort sonst noch ändert

Nur report und book besitzen \chapter, article nicht. Schreibt man \chapter{...} in einem article, sagt die Fehlermeldung nicht „diese Klasse hat keine Kapitel“, sondern nur ! Undefined control sequence. – für LaTeX sind ein fehlender Befehl und ein Tippfehler dasselbe Ereignis. Wichtiger ist aber, dass dieser eine Unterschied die Nummerierung an vier Stellen zugleich verändert. report.cls und book.cls deklarieren \newcounter{section}[chapter], sodass Abschnittsnummern in jedem Kapitel zurückgesetzt werden und die Form 2.1 annehmen. Auch Abbildungen, Tabellen, Gleichungen und Fußnoten werden kapitelweise zurückgesetzt (\@addtoreset{equation}{chapter} und Verwandte). Und die Voreinstellung von secnumdepth ist in article 3, in report und book dagegen 2.

Setzt man denselben Text in beiden Klassen, wird der secnumdepth-Unterschied sofort sichtbar. Je ein \section, ein \subsection und ein \subsubsection: article druckt „1 / 1.1 / 1.1.1“ und nummeriert alle drei, report druckt „0.1 / 0.1.1 / (ohne Nummer)“. In report und book bleibt \subsubsection standardmäßig unnummeriert – das ist fast immer die Ursache für „meine Unterunterabschnitte haben keine Nummer“, und \setcounter{secnumdepth}{3} in der Präambel behebt es. Auch die „0.1“ verdient Aufmerksamkeit: Beginnt ein report oder book mit \section ohne vorangehendes \chapter, steht der Kapitelzähler auf null, und die Abschnitte erscheinen als 0.1, 0.2. Wenn ein Dokument keine Kapitel hat, sagt die Klasse damit, dass es ein article hätte sein sollen.

latex
% same body, two classes: article numbers three levels, report only two
\documentclass{article}   % -> 1 Sec / 1.1 Sub / 1.1.1 Subsub
%\documentclass{report}   % -> 0.1 Sec / 0.1.1 Sub / Subsub (unnumbered)
\begin{document}
\section{Sec}\subsection{Sub}\subsubsection{Subsub}
\end{document}

% in report/book, restore the third level with:
%   \setcounter{secnumdepth}{3}

Bei dieser Gelegenheit sei eine weit verbreitete Behauptung widerlegt: \part setzt den Kapitelzähler nicht zurück. Sowohl report.cls als auch book.cls schreiben nur \newcounter{chapter}, ohne optionales Argument, das ihn an part bindet. Stehen zwei Kapitel in Teil I und beginnt Teil II, trägt das nächste Kapitel die Nummer 3 und nicht 1 – in beiden Klassen gleichermaßen. Soll die Nummerierung je Teil neu beginnen, muss man das selbst deklarieren, etwa mit \counterwithin{chapter}{part} in der Präambel. Das Aussehen von \part unterscheidet sich dagegen sehr wohl: In article ist es eine Überschrift im laufenden Text, in report und book erzwingt es einen Seitenumbruch und wird zu einer eigenen, zentriert und groß gesetzten Seite.

report gegen book: dieselbe Quelle, 5 oder 9 Seiten

Die Weggabelung zwischen beiden Klassen ist eine einzige Zeile Voreinstellungen. report.cls schreibt \ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final,openany}, book.cls schreibt ...,twoside,onecolumn,final,openright}. Alles Weitere folgt daraus. openright lässt Kapitel auf einer rechten (ungeraden) Seite beginnen und schiebt bei Bedarf eine leere Rückseite ein. Setzt man dieselbe Quelle – zwei Teile, drei Kapitel – in beiden, ergibt report 5 Seiten und book 9. Mehrere der vier zusätzlichen Seiten sind vollständig leer. Für ein gedrucktes und gebundenes Werk ist das richtig, für ein am Bildschirm gelesenes PDF nur störend. Daher die Kombination, die in der Praxis tatsächlich verwendet wird: book wählen und oneside ausdrücklich dazuschreiben.

Im Diff steckt außerdem ein überraschenderer Posten. book hat keine abstract-Umgebung. article und report definieren eine, book.cls lässt den gesamten Block weg und definiert auch \abstractname nicht. Ein Manuskript, das als report durchlief, bleibt nach dem Wechsel zu book mit ! LaTeX Error: Environment abstract undefined. stehen – eine redaktionelle Entscheidung (Bücher tragen keine Zusammenfassung) ist hier in die Klassendatei eingefroren. Auch der voreingestellte Seitenstil unterscheidet sich: report nutzt plain (nur eine zentrierte Seitenzahl im Fuß), book nutzt headings (Kolumnentitel mit Kapitel- und Abschnittsnamen). Und book lädt eine eigene Satzspiegeldatei, bk10.clo. Gegenüber dem von article und report genutzten size10.clo schrumpft die Satzbreite von 345pt auf 4.5in (rund 325pt), die Höhe sinkt von 43 auf 41 Zeilen, und die Ränder werden asymmetrisch: 0.5in am Bund, 1.5in am Außensteg. Der Wechsel von report zu book verändert nicht nur den Ausschießbogen, sondern den Kasten selbst, in dem der Text steht.

Klasse\chapterVoreinstellungenVoreingestellter SeitenstilSatzspiegeldatei
articleKeins; oberste Ebene ist \sectiononeside, notitlepage, secnumdepth=3plainsize10.clo
reportJaoneside, openany, titlepage, secnumdepth=2plainsize10.clo
bookJa; innerhalb \frontmatter ohne Nummertwoside, openright, titlepage, secnumdepth=2headingsbk10.clo (eigener Satzspiegel)
letterKeins; Einheit ist die letter-Umgebungoneside, letterpaper, 10ptfirstpage / plainsize10.clo
slidesKeins; Einheit ist die slide-Umgebungletterpaper, finalEigenersfonts.def / slides.def

Was \frontmatter, \mainmatter und \backmatter tatsächlich umschalten

Diese drei gehören allein zu book, und jeder tut zwei Dinge auf einmal. \frontmatter stellt die Seitenzahlen auf römische Ziffern (i, ii, …) um und setzt zugleich \if@mainmatter auf falsch, wodurch Kapitel nicht mehr nummeriert werden. \mainmatter kehrt zu arabischen Ziffern ab 1 zurück und holt die Kapitelnummern wieder. \backmatter lässt die Seitenzählung unberührt und schaltet nur die Kapitelnummern erneut ab. Der zweite Effekt ist der lohnende: Unnummerierte Kapitel des Vorspanns erscheinen weiterhin im Inhaltsverzeichnis, sodass der geläufige Behelf aus \chapter* plus handgeschriebenem \addcontentsline in book entfällt. Nach dem Übersetzen zeigt die .toc-Datei \contentsline {chapter}{Preface}{i} ohne Nummer, neben den mit \numberline {1} versehenen Einträgen des Hauptteils.

latex
\documentclass[11pt,a4paper]{book}
\begin{document}
\frontmatter                 % roman page numbers, chapters unnumbered
\chapter{Preface}            % -> toc: \contentsline {chapter}{Preface}{i}
\tableofcontents

\mainmatter                  % arabic, restarts at 1, chapters numbered again
\chapter{Beginning}          % -> toc: ... {\numberline {1}Beginning}{1}
\section{Apparatus}          % numbered 1.1

\backmatter                  % page numbers continue, chapters unnumbered
\chapter{Index}
\end{document}

Die \documentclass-Optionen und welche Voreinstellungen sich je Klasse unterscheiden

Alle Standardklassen außer slides akzeptieren in den Klammern von \documentclass[...]{...} einen gemeinsamen Optionssatz. Die meisten sind dokumentweite Schalter, entscheidend ist jedoch, dass derselbe Optionsname in verschiedenen Klassen andere Voreinstellungen hat. Genau das hält die Spalte „Voreinstellungen“ der Tabelle fest; jeder Wert steht wörtlich in der Zeile \ExecuteOptions{...} der Klassendatei.

  • 10pt / 11pt / 12pt — Grundschriftgröße des Textkörpers. Alle drei Klassen verwenden 10pt.
  • Papierformatletterpaper (Voreinstellung), a4paper, a5paper, b5paper, legalpaper, executivepaper. Da US Letter voreingestellt ist, schreibt man im A4-Raum jedes Mal a4paper.
  • twoside / oneside — zwei- oder einseitiges Layout. Nur book verwendet standardmäßig twoside.
  • openright / openany — ob Kapitel auf einer rechten Seite oder auf beliebiger Seite beginnen. book nutzt openright, report openany. article deklariert keine der beiden – ein Fehler ist das nicht; die Option versinkt lediglich als LaTeX Warning: Unused global option(s): im Log (der Grund für diese Asymmetrie steht unter „Class options & authoring“).
  • titlepage / notitlepage — ob der Titel eine eigene Seite erhält. report und book nutzen titlepage, article notitlepage.
  • twocolumn / onecolumn — Textkörper zwei- oder einspaltig setzen. Alle drei verwenden onecolumn.
  • fleqn — abgesetzte Formeln linksbündig setzen (voreingestellt zentriert). leqno — Gleichungsnummern links setzen (voreingestellt rechts). Beide werden durch Laden einer .clo-Datei umgesetzt.
  • landscape — Querformat. draft — overfull boxes mit einer schwarzen Linie markieren (voreingestellt final). openbib — die Bibliografie in einem „offenen“ Format setzen.

Die Klasse letter: ein völlig anderes Befehlssystem

letter ist mit den anderen dreien nicht verwandt. Die Klasse stammt aus einer eigenen Quelle statt aus classes.dtx und besitzt anstelle von \section, \maketitle und Titelseite ein Vokabular für Korrespondenz. Absenderdaten – \address{...} (die eigene Anschrift), \signature{...}, \name{...}, \location{...}, \telephone{...} – stehen in der Präambel und gelten für alle Briefe der Datei. Ein Brief ist eine letter-Umgebung, deren Argument die Empfängeradresse ist. Der Text beginnt mit \opening{...} und endet mit \closing{...}, wahlweise gefolgt von \cc{...} für Kopien, \encl{...} für Anlagen und \ps für ein Postskriptum. Zeilenumbrüche innerhalb einer Adresse sind \\.

latex
\documentclass{letter}
\address{1 Computing Way \\ London}   % sender, shared by every letter
\signature{Ada Lovelace}
\makelabels                          % appends a sheet of mailing labels

\begin{document}
\begin{letter}{Charles Babbage \\ 2 Engine Road}  % recipient = argument
\opening{Dear Mr.\ Babbage,}
Thank you for the notes on the Analytical Engine.
\closing{Yours sincerely,}
\cc{The Royal Society}
\encl{Two diagrams}
\end{letter}

\begin{letter}{Mary Somerville \\ 3 Science Lane}
\opening{Dear Mrs.\ Somerville,}
A second letter, same sender, same file.
\closing{Yours sincerely,}
\end{letter}
\end{document}

Eine einzige Zeile verrät, für welche Epoche diese Klasse entworfen wurde. Steht \makelabels in der Präambel, erhält das PDF eine abschließende Seite mit Adressetiketten. Übersetzt man das obige Beispiel, ergeben sich zwei Briefseiten und danach ein Etikettenbogen mit beiden Empfängeranschriften – zusammen drei Seiten. Auf Etikettenpapier drucken, abziehen, auf die Umschläge kleben: einst tägliche Arbeit. Umgekehrt ist letter bei einem Serienbrief von einem Absender an viele Empfänger wirklich stark – man reiht einfach so viele letter-Umgebungen aneinander, wie es Adressaten gibt. Werden die Formvorgaben konkret, etwa DIN 5008 im deutschsprachigen Raum, sollte man auf eine spezialisierte Klasse wie scrlttr2 aus KOMA-Script wechseln.

Was die Klasse slides war: Präsentationen vor beamer

Die fünfte Standardklasse, slides, steckt weiterhin in TeX Live (v2.4b in der Ausgabe 2024, zuletzt 2022 überarbeitet). Sie ist jedoch kein altes beamer. Die mitgelieferte manifest.txt von LaTeX beschreibt slides.dtx als „Slides class, etc based on SLiTeX“, und genau das ist sie: der Nachfahre von SLiTeX, dem einst eigenständigen Programm zur Herstellung von Overhead-Folien mit TeX. Daher das andere Vokabular. Eine slide-Umgebung ist ein Blatt, eine note-Umgebung die Notiz für den Vortragenden, und eine overlay-Umgebung war buchstäblich eine zweite Folie, die man auf die erste legte. Nach dem Übersetzen sagt es die Nummerierung: Die Folie heißt „1“, das darübergelegte Overlay „1-a“, die zugehörige Notiz „1-1“. Mit \onlyslides{...} und \onlynotes{...} lassen sich aus einer Quelle wahlweise nur die Folien oder nur die Notizen drucken.

Das praktische Urteil ist einfach: Für neue Folien beamer verwenden, nicht slides. Die alte Klasse kennt keine Themes, keine schrittweisen Overlays im heutigen Sinn und keine PDF-Navigation; entworfen wurde sie mit dem Druck als Ausgabe, nicht mit einem Projektor. Lesenswert ist slides nur, wenn man ein altes Manuskript erbt oder sehen möchte, woher beamers Auffassung eines frame als „ein logischer Bildschirm“ stammt.

Wie man wählt: von der Anforderung rückwärts

Die Wahl der Klasse ist keine Geschmacksfrage, sondern ergibt sich rückwärts aus der Abgabe. Keine Kapitel nötig: article. Ein technischer Bericht mit Kapiteln: report. Ein gebundenes Manuskript, das als Doppelseite funktionieren muss: book. Korrespondenz: letter. Wird eine Vorlage vorgegeben, hat deren Klasse Struktur, Ränder und Titelbehandlung bereits festgelegt – sie darf nicht auf eine Standardklasse zurückgestellt werden.

  • Nur am Bildschirm gelesenes PDFoneside ausdrücklich angeben. Auch bei book entfernt \documentclass[oneside]{book} die Leerseiten.
  • Gedruckt und gebundentwoside und openright bewusst wählen und den Bundsteg für die Bindung prüfen.
  • Echte Kontrolle über die Seite gewünscht — die Standardklassen bieten wenige Ansatzpunkte; besser zu KOMA-Script (scrartcl / scrreprt / scrbook) oder memoir wechseln.
  • Überwiegend japanischer Text — die Standardklassen sind nicht für japanischen Satz entworfen. Unter pLaTeX / upLaTeX mit jsclasses (jsarticle / jsbook) beginnen, unter LuaLaTeX mit ltjsclasses, als neuere Option jlreq.
  • Folien — beamer, nicht slides.

Was nach einem Klassenwechsel mitten im Dokument zu prüfen ist

Ein einziges Wort in \documentclass zu ändern ist kein kosmetischer, sondern ein struktureller Eingriff. Wie gezeigt, verschieben sich zugleich die Verfügbarkeit von Kapiteln, die Nummerierungstiefe, die Existenz von abstract, die Maße des Satzspiegels und das Einfügen von Leerseiten. Nach dem Wechsel gilt ein fehlerfreier Lauf nicht als Beweis – die folgenden fünf Punkte gehören mit den Augen geprüft.

PrüfenWas passiertKorrektur
\chapterDer Wechsel zu article bricht mit ! Undefined control sequence. abKapitel zu \section herabstufen oder bei report / book bleiben
abstractDer Wechsel zu book liefert ! LaTeX Error: Environment abstract undefined.Zusammenfassung weglassen oder durch \chapter*{Abstract} ersetzen
secnumdepthVon article kommend verschwinden die \subsubsection-Nummern\setcounter{secnumdepth}{3} ergänzen
openrightBei book erscheinen Leerseiten vor Kapiteln, die Seitenzahl wächstFür den Bildschirm oneside, für den Druck belassen
titlepage\maketitle erhält oder verliert eine eigene Seitetitlepage oder notitlepage ausdrücklich setzen