Prüfungen und Abschlussarbeiten

Wer Prüfungen in LaTeX schreibt, kommt meist aus einem Grund dorthin: Führt man Angabe und Lösungsschlüssel in zwei Dateien, driften sie früher oder später auseinander. Man korrigiert eine Aufgabe und vergisst die Lösung; man ändert die Punkte und vergisst die Summe. Die Klasse exam löst das strukturell. Die Lösung steht unmittelbar neben der Aufgabe, und ob ein einziges \printanswers vorhanden ist oder nicht, entscheidet darüber, ob aus derselben Quelle das Aufgabenblatt oder der Lösungsschlüssel entsteht. An einem echten Dokument gemessen: zwei Seiten mit Lösungen, drei ohne. Dieselbe Datei, zwei verschiedene Dokumente. Diese Seite behandelt die Klasse exam und das zweite streng gebaute Genre, die Abschlussarbeit: worin sich report, book und memoir unterscheiden, in welchen Klassen \frontmatter gar nicht definiert ist, und den nützlichsten Rat überhaupt – sich nicht mit der Vorlage der eigenen Hochschule anzulegen.

Das Gerüst der Klasse exam: \question, parts, Punkte

Die Struktur der Klasse exam ist eine dreistufige Verschachtelung: \question innerhalb einer questions-Umgebung, darunter \part in parts und noch darunter \subpart in subparts. Punkte stehen in eckigen Klammern – \question[10] –, und die Klassenoption addpoints lässt sie automatisch summieren. Die Zählwerte stehen im Text als \numquestions, \numpoints und \numpages bereit, sodass der Satz „4 Aufgaben, 30 Punkte, 3 Seiten“ nie von Hand nachgeführt werden muss. Für Multiple Choice gibt es vier Umgebungen: choices untereinander, oneparchoices in einer Zeile, dazu checkboxes / oneparcheckboxes mit Ankreuzkästchen. Die richtige Option schreibt man nicht mit \choice, sondern mit \CorrectChoice – daran hängt der weiter unten beschriebene Lösungsschlüssel.

Wo die Punkte stehen, lässt sich fein einstellen. Standardmäßig folgen sie der Aufgabennummer, doch \pointsinmargin und \pointsinrightmargin schieben sie in den Rand, und \pointsdroppedatright macht aus dem rechten Rand eine Spalte für Punktabzüge. Das Wort „points“ durch ein anderes zu ersetzen, ist eine einzeilige Neudefinition von \pointname. Kopf- und Fußzeilen schreibt man nach \pagestyle{headandfoot} dreiteilig – \header{links}{Mitte}{rechts} und \footer{links}{Mitte}{rechts} –, und mit \firstpageheader / \runningheader unterscheidet sich die erste Seite von den übrigen. „Seite 2 von 3“ zu drucken gehört hier zur Grundausstattung – schon damit erkennt man die Arbeit, der ein Blatt fehlt.

latex
\documentclass[addpoints,12pt]{exam}
\pagestyle{headandfoot}
\header{Calculus I --- Midterm}{}{Page \thepage\ of \numpages}
\begin{document}
\begin{center}\gradetable[v][questions]\end{center}

\begin{questions}
  \question[10] Differentiate $f(x)=x^3$.

  \question[5] Pick the correct answer.
  \begin{oneparchoices}
    \choice wrong \CorrectChoice right \choice wrong
  \end{oneparchoices}

  \question Answer both parts.
  \begin{parts}
    \part[3] State the definition.
    \part[7] Prove the claim.
  \end{parts}
\end{questions}
\end{document}

Was \printanswers ändert: eine Quelle, Angabe und Lösung

\printanswers ist der Schalter dafür, ob Lösungen erscheinen; interessant ist aber, was an ihre Stelle tritt, wenn sie verborgen sind. Eine solution-Umgebung druckt schlicht oder druckt nicht. Schreibt man stattdessen solutionorlines[2.5in], erscheint bei eingeschalteten Antworten die Lösung und bei ausgeschalteten 2,5 Zoll Linierung. Nach demselben Prinzip gibt es solutionorbox (Rahmen), solutionordottedlines (punktierte Linien) und solutionorgrid (Karopapier). Ein Dokument mit sechs Aufgaben, jede in solutionorlines[2.5in] gefasst, beidseitig übersetzt, ergibt zwei Seiten mit \printanswers und drei mit \noprintanswers. Der Lösungstext taucht im ersten Fall sechsmal auf, im zweiten kein einziges Mal. Die zusätzliche Seite ist genau der Schreibraum, durch den die verborgenen Lösungen ersetzt wurden.

latex
% One source, two documents.
%   \printanswers   -> the key   (measured: 2 pages, 6 solutions printed)
%   \noprintanswers -> the paper (measured: 3 pages, 0 solutions printed)
\documentclass[addpoints,12pt]{exam}
\printanswers          % comment this line out to get the blank paper
\begin{document}
\begin{questions}
  \question[10] State the definition and prove the claim.
  \begin{solutionorlines}[2.5in]
    $f'(x)=3x^2$ by the power rule.
  \end{solutionorlines}
\end{questions}
\end{document}

In der Praxis ist es nützlich zu wissen, dass es zwei Wege gibt, den Schalter umzulegen: \printanswers in der Quelle oder die Klassenoption [answers]. Die Ausgabe ist identisch – am selben Dokument geprüft, ergeben beide zwei Seiten mit sechs Lösungen. Der Weg über die Option lässt den Text unangetastet, sodass eine latexmk-Regel oder ein Makefile beide PDFs über \PassOptionsToClass erzeugen kann, ohne etwas zu ändern. Daneben gibt es cancelspace: Es druckt weder die Lösungen noch den dafür reservierten Platz, ignoriert also das Klammerargument der solutionor…-Umgebungen vollständig und liefert nur die Aufgaben – genau das Richtige, wenn eine alte Klausur als Übungsblatt ausgeteilt wird. cancelspace hat übrigens keinerlei Wirkung, solange Lösungen gedruckt werden.

Befehl / Umgebungmit printanswersmit noprintanswers
solutiondruckt die Lösungdruckt nichts
solutionorlinesdruckt die LösungLinierung in der angegebenen Höhe
solutionorboxdruckt die Lösungein leerer Rahmen der angegebenen Höhe
solutionorgriddruckt die LösungKaropapier der angegebenen Höhe
\fillwithlinesdruckt Linierung unabhängig vom Schalterebenso
cancelspacekeine Wirkungignoriert das Klammerargument, lässt keinen Platz

Eine Bewertungstabelle drucken: \gradetable und \pointsonpage

Eine Zeile, \gradetable[v][questions], setzt auf das Deckblatt eine Bewertungstabelle mit Aufgabennummern, Punkten und leeren Feldern für die Wertung. Das erste Argument ist die Ausrichtung (v senkrecht, h waagerecht), das zweite die Achse: questions ergibt eine Zeile je Aufgabe, pages eine je Seite. Die seitenweise Tabelle zahlt sich aus, wenn mehrere gemeinsam korrigieren, denn sie bildet genau ab, wer welche Seite übernimmt. Auch die Rechnerei steht bereit: \pointsofquestion{3} liefert die Punkte der dritten Aufgabe, \pointsonpage{2} die Summe auf Seite 2. Zusammen mit der Option addpoints heißt das: Ändert man einen Punktwert, ziehen Tabelle und Summen sofort nach. Nicht von Hand zu addieren ist der ganze Wert dieser Funktion. Für Zusatzaufgaben gibt es \bonuspoints und eigene Bonus-Tabellen.

Wie ernsthaft die Klasse exam gebaut ist, zeigt der Umfang ihres Handbuchs. Die examdoc.pdf in TeX Live 2024 umfasst 135 Seiten – ein 135-seitiges Benutzerhandbuch für eine Klasse, deren einziger Zweck das Setzen von Prüfungen ist. Verfasst hat es Philip Hirschhorn vom Department of Mathematics des Wellesley College, ein Topologe, bekannt durch Model Categories and Their Localizations. Die Copyright-Zeile des Handbuchs nennt die Überarbeitungsjahre 1994, 1997, 2000, 2004, 2008, 2011, 2015, 2017, 2021, 2023: eine Klasse, die ein einzelner Mathematiker seit fast dreißig Jahren für die eigene Lehre pflegt. Die in TeX Live 2024 enthaltene Fassung ist v2.704 vom 9. Juli 2023.

Vorlagen für Abschlussarbeiten: nicht gegen die der Hochschule kämpfen

Das Ergebnis vorweg: Wenn die Hochschule eine Klasse oder Vorlage bereitstellt, verwenden Sie sie – und ändern Sie so wenig wie möglich daran. Der Grund ist nicht typografisch, sondern verfahrenstechnisch. Ränder, Durchschuss, der Wortlaut des Titelblatts, die Nummerierung von Abbildungen und Tabellen stehen an den meisten Einrichtungen ausdrücklich in den Abgabevorschriften, und eine Arbeit, die davon abweicht, geht unabhängig vom Inhalt zurück – meist am Tag der Frist. Allein TeX Live 2024 enthält 64 Verzeichnisse, deren Namen thesis oder diss enthalten und die eine .cls mitbringen: mitthesis, ucbthesis, uiucthesis, thuthesis, njuthesis, ut-thesis, york-thesis und so fort. Die lokalen Vorlagen, die nie auf CTAN gelangen, sind noch weit zahlreicher, und die meisten kursieren als „die .cls, die ich vom Jahrgang vor mir bekommen habe“.

Was ist eine solche Vorlage nun im Inneren? Fast immer eine Klasse, die einem book oder report ein vorgeschriebenes Titelblatt und eine vorgeschriebene Seitengeometrie überstülpt. Deshalb verhalten sich \chapter und \tableofcontents darin ganz normal – und umgekehrt liegt der Fehler, wenn eine Vorlage kaputt wirkt, meist im Unterbau. Gibt es keine Vorgabe und wählt man selbst, verlangt eine Arbeit mit Kapiteln nach report oder book; für feinere Kontrolle über die Gestaltung bieten sich memoir (in TeX Live 2024 v3.8.2 vom 26. Januar 2024, laut Selbstbeschreibung eine „configurable book, report, article document class“) oder KOMA-Scripts scrbook / scrreprt an. Der nächste Abschnitt betrachtet die Unterschiede daran, was tatsächlich definiert ist.

Der Unterschied zwischen report und book: Seitigkeit und Kapitelanfang

Der Unterschied steht in den Voreinstellungen. book.cls enthält \ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright}; in report.cls steht dieselbe Zeile mit oneside und openany. book ist also auf zweiseitigen Druck eingestellt, und jedes Kapitel beginnt auf einer ungeraden (rechten) Seite, wofür mitunter eine Leerseite eingeschoben wird. report ist einseitig, und ein Kapitel beginnt schlicht auf der nächsten Seite. Für eine gebundene Arbeit ist das Verhalten von book das richtige; für eine PDF-Abgabe, die niemand doppelseitig druckt, ist report naheliegender. article kennt gar kein \chapter – ob man \chapter braucht, ist die erste Weggabelung bei der Klassenwahl.

KlasseStandard-SeitigkeitKapitelbeginnfrontmatter
articleonesidekein \chapter vorhandennicht definiert
reportonesideopenany (nächste Seite)nicht definiert
booktwosideopenright (ungerade Seite)definiert
memoirwie book (konfigurierbar)openright (konfigurierbar)definiert
scrbooktwosideopenrightdefiniert
scrreprtonesideopenanynicht definiert

Warum \frontmatter ein ! Undefined control sequence ergibt – und was die drei wirklich tun

\frontmatter, \mainmatter und \backmatter existieren nur in den von book abgeleiteten Klassen. Schreibt man \frontmatter unter \documentclass{report}, erscheint ! Undefined control sequence. mit der Zeile l.3 \frontmatter. Die Suche in den Klassendateien bestätigt es: Die Zeichenfolge frontmatter steht in book.cls, memoir.cls und scrbook.cls, nicht aber in article.cls, report.cls oder scrreprt.cls. Die meisten Meldungen „\frontmatter funktioniert in meiner Hochschulvorlage nicht“ laufen darauf hinaus: Die Vorlage baut auf report auf. Braucht man das Verhalten der Kapitelnummerierung nicht, liefern ein von Hand gesetztes \pagenumbering{roman} und \pagenumbering{arabic} dasselbe Ergebnis – denn mehr enthalten die drei Befehle kaum.

Was steht genau darin? In book.cls: \frontmatter führt ein \cleardoublepage aus, setzt \@mainmatterfalse und \pagenumbering{roman}. \mainmatter führt ein \cleardoublepage aus, setzt \@mainmattertrue und \pagenumbering{arabic}. Und \backmatter beendet die Seite und setzt \@mainmatterfalse – die Seitennummerierung rührt es überhaupt nicht an. Das wird häufig falsch wiedergegeben; jede Darstellung, nach der der Nachspann die Nummerierung umstellt, ist falsch. Was ein falsches \@mainmatter tatsächlich ändert, ist das Verhalten von \@chapter: Der Kapitelzähler wird nicht erhöht, in der Überschrift erscheint keine Nummer, und der Eintrag im Inhaltsverzeichnis entsteht ohne \numberline. In Vor- und Nachspann erscheinen Kapitel also ohne Nummer, stehen aber weiterhin im Inhaltsverzeichnis – Danksagung und Literaturverzeichnis tragen keine Nummer und bleiben doch über das Verzeichnis erreichbar. Diese ganze Konvention wissenschaftlichen Schreibens hängt an diesem einen Schalter.

latex
% Measured page labels from this exact file (book, 12pt):
%   front matter -> i, ii, iii, iv   (roman, chapters unnumbered but in the ToC)
%   main matter  -> 1, 2, 3, 4       (arabic, "Chapter 1", "Chapter 2")
%   back matter  -> 5                (still arabic; chapter unnumbered)
\documentclass[12pt]{book}   % or your university's class
\begin{document}
\frontmatter
\chapter{Acknowledgements}
Thanks.
\tableofcontents

\mainmatter
\include{chapters/intro}
\include{chapters/method}

\backmatter
\chapter{Bibliography}
Refs.
\end{document}

In der Praxis: Kapitel auf Dateien verteilen und in der letzten Nacht nichts zerstören

Das Erste bei einer langen Arbeit ist, sie in eine Datei je Kapitel aufzuteilen und mit \include einzubinden. \include beginnt vor und nach jeder Datei eine neue Seite, was zu Kapitelgrenzen passt, und mit \includeonly{chapters/method} lässt sich anschließend ein einzelnes Kapitel ohne die übrigen setzen, während Seitenzahlen und Querverweise korrekt bleiben. Bei einer 300-seitigen Arbeit, in der nur Kapitel 7 zu korrigieren ist, ändert das die Wartezeit um eine Größenordnung. Projektaufteilung und der Umgang mit großen Dokumenten haben je eine eigene Seite; die related-Verweise führen dorthin. Eine weitere Gewohnheit, die kurz vor der Frist trägt: erst einen Branch anlegen, dann am Layout schrauben. Der Wunsch, den Rand um einen Millimeter zu kürzen, kommt fast ausnahmslos in der letzten Nacht.

  • Der Abstract gehört in eine abstract-Umgebung – doch viele vorgeschriebene Vorlagen verlangen in book-abgeleiteten Klassen \chapter*{Abstract}; zuerst also die ausgegebene Formatvorgabe prüfen.
  • Für ein unnummeriertes Kapitel, das dennoch im Inhaltsverzeichnis stehen soll, folgt auf \chapter*{...} ein \addcontentsline{toc}{chapter}{...}. Innerhalb von \frontmatter erledigt das schlichte \chapter dies bereits.
  • Per \include eingebundene Dateien dürfen weder \documentclass noch \begin{document} enthalten; sonst erscheint ! LaTeX Error: Can be used only in preamble.
  • Vor der Abgabe stets einen sauberen Durchlauf machen. Eine übrig gebliebene .aux hält einen längst gelöschten Querverweis am Leben, und der Lauf gelingt trotzdem.
  • Wurde die Hochschulklasse doch verändert, einen Kommentar über die Änderung hinterlassen. Sowohl das eigene Ich in drei Monaten als auch der nächste Jahrgang wird ihn lesen.

Zum Schluss ein Zug, den beide Gattungen teilen. Prüfung wie Abschlussarbeit sind Dokumente, deren Inhalt und Form von verschiedenen Personen verantwortet werden – hier Aufgabensteller und Korrektor, dort Verfasserin und Prüfungsamt. LaTeX ist hier nicht deshalb stark, weil der Satz schön ist, sondern weil sich diese Trennung unmittelbar in der Struktur der Quelle ausdrücken lässt. Ein \printanswers trennt Angabe und Lösung, ein \frontmatter trennt nummerierte von unnummerierten Kapiteln. Ob sich eine Verzweigung auf einen einzigen Schalter zusammenfalten lässt, merkt man in der Nacht vor der Frist.