> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/de/ausfuhrliche-artikel/23-how-does-latex-typeset-headers-and-footers.md).

# Wie setzt LaTeX Kopf- und Fußzeilen?

## Wie setzt LaTeX Kopf- und Fußzeilen?

### Einführung

Wenn Sie nach einer Anleitung zum Ändern von Kopf- und Fußzeilen suchen, bitte [besuchen Sie unsere Hilfeseite](/latex/de/formatierung/02-headers-and-footers.md) da sich dieser Artikel darauf konzentriert, die von TeX-Engines und LaTeX verwendeten Mechanismen niedriger Ebene zur Erzeugung von Kopf- und Fußzeilen zu erklären.

* **Hinweis (Aktualisierung)**: Dieser Artikel untersucht den zentralen LaTeX-Markierungsmechanismus, der vor Juni 2022 verwendet wurde; zu diesem Zeitpunkt wurde eine neue und vielseitigere Implementierung der LaTeX-Markverarbeitung eingeführt. Siehe [Überblick über LaTeXs neuen Markierungsmechanismus](https://www.latex-project.org/help/documentation/ltmarks-doc.pdf) für weitere Details. Aus Gründen der Rückwärtskompatibilität unterstützt LaTeX weiterhin seinen alten Markierungsmechanismus. Der Artikelinhalt, der das Verhalten von TeX-Engines behandelt, ist von diesen Änderungen an LaTeX nicht betroffen.
* **Hinweis**: Die Begriffe „LaTeX“, „TeX“ und „TeX-Engine“ werden in diesen Erörterungen durchgehend verwendet, daher ist es hilfreich, ihre Bedeutung zu verstehen — siehe den Overleaf-Artikel [Was steckt in einem Namen: Ein Leitfaden zu den vielen Varianten von TeX](/latex/de/ausfuhrliche-artikel/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) für weitere Informationen.

Um nützlichen Hintergrund/Kontext zu bieten, beginnen wir mit einem Überblick über einige relevante Bereiche der TeX-basierten Satztechnik niedriger Ebene — einschließlich vorübergehender (interner) Inhaltspeicherung, Seitenumbruch und Seitenaufbau. Die Erörterungen wurden gestrafft/vereinfacht, indem wir eine gesetzte Seite betrachten, die einen „Hauptteil“ aus Text sowie einige Kopf- und Fußzeilen enthält. Seitenelemente wie Abbildungen (Floats) und Fußnoten werden nicht behandelt, da sie einen komplexen TeX-Mechanismus namens *Einfügungen*, der weit außerhalb des Rahmens dieses Artikels liegt.

Wir beginnen mit dem grundlegenden Begriff von *Knoten*: die grundlegenden Bausteine, die von TeX-Engines für die vorübergehende (interne) Speicherung von Inhalten verwendet werden.

### Einige Anmerkungen zur Speicherung von Inhalten: TeX-Knoten

Während die zugrunde liegende TeX-Engine Ihren LaTeX-Code verarbeitet, um gesetztes Material zu erzeugen — etwa Absätze, Tabellen und Mathematik — muss sie diesen Inhalt vorübergehend im Speicher der jeweils verwendeten TeX-Engine ablegen, die Ihren LaTeX-Code verarbeitet. Um gesetzten Inhalt zu speichern, verwenden TeX-Engines eine Folge sogenannter *Knoten*, die man sich als unterschiedlich große „Stücke“ des Computer-(Geräte-)Speichers vorstellen kann, die miteinander verknüpft sind, um eine Liste zu bilden (siehe diesen [Wikipedia-Artikel über verkettete Datenstrukturen](https://en.wikipedia.org/wiki/Linked_data_structure)).

![Schematische Darstellung, wie TeX-Engines Inhalte mithilfe verketteter Knoten speichern](/files/21ee0aed17ab1937d9a6cc758af3bd7879b25e14)

Um die grundlegenden Elemente des TeX-basierten Satzes darzustellen — wie Zeichen, Glue, Boxen, Strafen, Kerne und [*Marken*](#why-were-here-understanding-mark-nodes) (um nur einige zu nennen) — verwenden TeX-Engines verschiedene *Typen* Knotentypen. Einige Knoten, etwa die für Boxen, müssen im Vergleich zu einfacheren Knotentypen wie Zeichenknoten mehr Daten speichern; folglich sind einige Knoten größer als andere — sie benötigen mehr Bytes, um sie im Speicher abzulegen. Beim Lesen über TeX können Ihnen Begriffe begegnen wie *Zeichenknoten*, *Glue-Knoten*, [*Markenknoten*](#why-were-here-understanding-mark-nodes) und so weiter: Sie wissen nun, dass dies lediglich Bezeichnungen für Speicherblöcke sind, die zur Speicherung von Daten reserviert wurden, welche ein Element von TeXs Satz darstellen.

#### Warum wir hier sind: Markenknoten verstehen

Von den vielen Knotentypen ist derjenige, den wir besprechen müssen, ein *Markenknoten* der erstellt wird durch den `\mark` Befehl:

```latex
\mark{stuff to store}
```

Die `\mark` Befehl erzeugt nicht direkt gesetzten Inhalt: Sein Argument `*stuff to store*` wird für die spätere Verwendung im Speicher abgelegt und ein *Markenknoten* wird erstellt, um den Speicherort von *stuff to store*. Wie wir sehen werden, wurde der `\mark` Befehl geschaffen *speziell* um bei der Erzeugung von Kopf- und Fußzeilen zu helfen.

Markenknoten, die erstellt werden durch `\mark` Befehle werden in den Seiteninhalt „eingebettet“ und sind während der letzten Phasen der Seitengestaltung bereit zur Verwendung, wenn die TeX-Engine bereit ist, Kopf- und Fußzeilen zum gesetzten Seitenkörper (Hauptteil) hinzuzufügen. Typischerweise `*stuff to store*` enthält es Material wie Seitenzahlen und Kapitel- oder Abschnittstitel/-nummern — die Bausteine von Kopf- und Fußzeilen.

#### ε-TeX fügt den Befehl \marks hinzu

[Version 2 von ε-TeX](https://texdoc.org/serve/e-TeX/0), eine Erweiterung von Knuths ursprünglichem TeX, wurde 1998 veröffentlicht und bietet neue Möglichkeiten sowie Verbesserungen bestehender Funktionen. Heute sind die meisten Verbesserungen von ε-TeX in die gängigen TeX-Engines integriert: pdfTeX, LuaTeX und XeTeX — siehe die [**`-etex`** Kommandozeilenoption von TeX-Engines](/latex/de/weitere-themen/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md) die die Verwendung von ε-TeX-Erweiterungen ermöglicht.

Knuths ursprüngliche TeX-Software bietet den Befehl \mark, der nur 1 „Klasse“ oder „Typ“ von Markenknoten erzeugt. Ihr Dokument könnte viele \mark-Befehle enthalten, aber sie erzeugen alle Markenknoten desselben „Typs“ oder derselben „Klasse“ — es gibt keinen eingebauten Mechanismus, um sie zu gruppieren oder zu klassifizieren. Diese Einschränkung wurde durch eine ε-TeX-Verbesserung aufgehoben: den Befehl \marks, der von pdfTeX, LuaTeX und XeTeX unterstützt wird:

```latex
\marks n {stuff to store}
```

wobei `n` ist eine ganze Zahl (`0` <= `n` < `32768`), die den Markenknoten *Klasse*.

Hinweise:

* das Schreiben von `\marks 0` (d. h. `n`=`0`) ist gleichbedeutend mit der Verwendung von TeXs ursprünglichem `\mark` Befehl
* ε-TeX führte außerdem Markierungsvariablen ein ([siehe später](#pre-output-checks-looking-for-mark-nodes)) für jede Klasse (`n`) von Markierungen: `\firstmarks n`, `\topmarks n` und `\botmarks n`. Ausgewählte Klassen von Markierungsvariablen konnten verwendet werden, um Markendaten für bestimmte Satzaufgaben bereitzustellen.
* LuaTeX erhöhte den Maximalwert von `n` zu `65535`, wodurch $$2^{16}$$ Markenklassen

### Gründe für TeXs Verwendung von Marken

Um *warum* (und wie) TeX-Engines den `\mark` (oder `\marks`)-Befehl zur Erzeugung von Kopf- und Fußzeilen verwenden, müssen wir einige „Eigenheiten“ der Mechanismen von TeX-Engines zur Seitenerzeugung verstehen — das Finden von Seitenumbrüchen und das Ausgeben fertiger Seiten in eine PDF-Datei. In Wirklichkeit sind diese Prozesse des Seitenaufbaus komplex, aber die Kernprinzipien/-konzepte lassen sich vereinfachen, um ausreichend Hintergrund zu liefern und unser Verständnis von Marken zu fördern.

Wenn eine TeX-Engine einzelne Inhaltselemente wie Absätze, Tabellen oder Mathematik fertig setzt, ruft sie eine interne Routine auf (eine Funktion namens `build_page(...)`), die versucht, diese neu gesetzten Elemente der gerade im Speicher aufgebauten Seite hinzuzufügen. Wenn dieses neue Material der zu erstellenden Seite hinzugefügt wird, prüft TeX außerdem, ob der neu hinzugefügte Inhalt die aktuelle Seite „ausreichend voll“ gemacht hat. Wenn die Seite voll ist, kann TeX einen *Seitenumbruch*— und den Inhalt dieser Seite zur abschließenden Verarbeitung („Verpackung“) und anschließenden Ausgabe in die PDF-Datei senden.

Ein zentrales Merkmal der letzten Phase des Seitenpackens (Zusammensetzung) ist etwas namens *Ausgaberoutine* , die im Grunde eine benutzerdefinierte Befehlsfolge ist, die verwendet wird, um die Inhaltsseite für den Versand in die PDF-Datei vorzubereiten. Eine Beispielaktivität des „Verpackens“ ist das Hinzufügen von Kopf- und Fußzeilen, aber es gibt zahlreiche Möglichkeiten, Ausgaberoutinen zu verwenden — siehe zum Beispiel [diesen Artikel in TUGboat](https://tug.org/TUGboat/tb11-1/tb27salomon.pdf). Ausgaberoutinen sind ein recht komplexer Bereich von TeX, daher gehen wir hier nicht ins Detail: Für unsere Zwecke merken Sie sich einfach, dass die letzte Phase der Seitengestaltung die Verwendung einer benutzerdefinierten Befehlsfolge umfasst (insgesamt als eine *Ausgaberoutine*).

Aber betrachten wir, was passieren könnte, wenn TeX einen längeren Absatz Text fertig setzt und ihn in eine Folge einzelner gesetzter Zeilen bricht. TeX möchte diesen neu gesetzten Absatz — Zeile für Zeile — der gerade aufgebauten Seite hinzufügen, aber vielleicht passen nur *einiger* von diesen Zeilen auf die aktuelle Seite. Beachten Sie, dass wir mit „Seite“ den Haupttextbereich (Seitenkörper) meinen, der *nicht* andere Seitenelemente wie Kopf- und Fußzeilen nicht einschließt, die später hinzugefügt werden (von der Ausgaberoutine).

Nachdem mehrere Absatzzeilen zur aktuellen Seite hinzugefügt wurden, könnte sie „ausreichend voll“ sein, und es wäre Zeit für TeX, einen Seitenumbruch zu erstellen. Allerdings bleibt etwas „Restmaterial“ übrig, da nur *part* des Absatzes auf der aktuellen Seite gelandet ist: Der „überschüssige Absatzinhalt“ wird für später gespeichert, bereit für die Erstellung der *nächsten* Seite. Die folgende Grafik veranschaulicht diese Idee: Ein Teil des Absatzes steht auf der *aktuellen* Seite, und ein Teil wird für die *nächsten* Seite zurückgehalten.

![Schematische Darstellung eines Absatzes, der einen Seitenumbruch überbrückt](/files/916fcc86124152c497a878e8a49edacca7e14d16)

Dieses Absatzbeispiel zeigt, dass eine TeX-Engine oft Inhaltsteile verarbeitet (setzt), die *in ihrer Gesamtheit*, nicht auf die aktuelle Seite passen — weil dieser Inhalt über den Punkt hinausreicht, an dem ein Seitenumbruch notwendig wird. Denken Sie daran, dass TeX-Engines Zeilenumbrüche finden, indem sie *ganze Absätze* eingeben und dann setzen; anders als manche Anwendungen verwenden sie keinen zeilenweisen Ansatz beim Setzen von Absätzen. Mit anderen Worten: TeX setzt den *gesamten* Absatz, unabhängig davon, ob er auf die aktuelle Seite passt oder nicht (das wird später ermittelt). Übrigens gilt das Prinzip „zuerst vollständig setzen, dann zur aktuellen Seite hinzufügen“ auch für andere Arten von TeX-Inhalten, einschließlich Tabellen, die vollständig aus der .tex-Datei eingelesen und in ihrer Gesamtheit gesetzt werden, bevor überhaupt versucht wird, sie der aktuellen Seite hinzuzufügen.

Für unser Absatzbeispiel wurde der vollständige Text dieses Absatzes, *einschließlich aller Befehle innerhalb dieses Textes*, vollständig verarbeitet — das heißt, TeXs Satz hat eine bestimmte Stelle in Ihrer `.tex` Datei erreicht. Der „aktuelle interne Zustand“ der TeX-Engine, etwa der Wert von Variablen oder gespeicherten Parametereinstellungen, spiegelt das bis zur aktuellen Stelle verarbeitete Material einschließlich aller Befehle wider — also das Ende des Absatzes.

Obwohl der vollständige Absatz gesetzt wurde, kann ein Teil davon von der aktuellen Seite nicht aufgenommen werden, sodass „überschüssiger Absatzinhalt“ für die *nächsten* Seite gespeichert wird. Innerhalb des LaTeX-Codes (Text plus Befehle), der den „überschüssigen Absatzinhalt“ erzeugte, hat die TeX-Engine *könnte* beliebig viele Befehle und Makros aufgerufen haben, die Werte und Variablen änderten, die intern von der TeX-Engine gespeichert sind — also Änderungen am „aktuellen Zustand“ von TeX vorgenommen.

Das folgende Diagramm veranschaulicht eine äußerst wichtige TeX-„Eigenheit“, die mehrere Aspekte des TeX-basierten Satzes beeinflusst. Wenn Sie auf die rechte Seite des Diagramms schauen, sehen Sie eine Darstellung von Knoten, die den gesamten derzeit im Speicher abgelegten Inhalt umfassen: Der hellgraue Bereich enthält Knoten, die die *aktuellen* Seite bilden, und der dunkelgraue Bereich ist gesetzter Inhalt, der für die *nächsten* Seite bestimmt ist. Dieses Szenario spiegelt unser Absatzbeispiel wider: Der dunkelgraue Bereich stellt den „überschüssigen Absatzinhalt“ dar: Textzeilen, die zurückgehalten werden, weil sie nicht auf die aktuelle Seite passen.

![Schematische Darstellung der Knotenposition, an der TeX einen Seitenumbruch findet, einschließlich des für die nächste Seite zurückgehaltenen Inhalts](/files/2dbf10d4ebe570a1ece1449306ef583767e451cf)

Denken Sie daran, dass TeX, sobald es eine „ausreichend volle“ Seite (den Seitenkörper) hat, diesen Inhalt an etwas namens *Ausgaberoutine* , die eine benutzerdefinierte Befehlsfolge ist, übergibt. Unter anderem fügt die Ausgaberoutine dem Seitenkörper Kopf- und Fußzeilen hinzu und schließt die Seite ab, damit sie zur Ausgabe in die PDF-Datei bereit ist.

Unsere Grafik (oben) stellt den Fall dar, dass TeX sich entschieden hat, an einem bestimmten Knoten einen Seitenumbruch zu machen, etwa bei `\baselineskip` Glue zwischen gesetzten Zeilen, und bereit ist, mit der Verpackung der aktuellen Seite mithilfe der Ausgaberoutine zu beginnen — einer Folge eingebauter Befehle und benutzerdefinierter Makros. *Allerdings*, hat TeX zusätzlich zu dem Inhalt der aktuellen Seite (im Speicher abgelegt) bereits verarbeitet und im Speicher abgelegt *zusätzliches Material*, aus Ihrer `.tex` Datei. Dieses zusätzliche Material reicht *über den Seitenumbruch hinaus* und *könnte* können Befehle enthalten haben, die wichtige seitenbezogene Werte oder Variablen geändert haben und damit TeXs „aktuellen internen Zustand“ beeinflusst haben — der Werte interner Parameter oder von Makros gespeicherter Daten umfasst.

Wenn TeX mit der Verpackung der aktuellen Seite beginnt, wird sein „aktueller interner Zustand“ *nicht* durch alles definiert, was bis zur Stelle des Seitenumbruchs gesetzt wurde, weil TeX bereits *an dieser Stelle vorbeigegangen ist* in Ihrer Datei und hat zusätzliches Material verarbeitet. Wenn Sie die Stelle in Ihrer Datei betrachten, an der der Seitenumbruch stattfindet, und die Stelle, die TeX tatsächlich in Ihrer `.tex` Datei erreicht hat, könnten die beiden entsprechenden internen Zustände von TeX, einschließlich gespeicherter Daten und der Werte von Variablen, sehr unterschiedlich sein. Der aktuelle Stand von TeXs Satz ist normalerweise weiter fortgeschritten als der Ort, an dem der Seitenumbruch erfolgt; d. h. TeXs Satzaktivitäten *sind nicht synchronisiert* mit dem Prozess der Ausgabe gesetzter Seiten über die Ausgaberoutine.

#### Hypothetisches Beispiel: Wie man die falschen Kopfzeilen erhält

Das folgende Diagramm veranschaulicht hypothetische Befehle `\myheader` und `\myfooter` zur Speicherung des gewünschten Textes von Kopf- und Fußzeilen; zum Beispiel mit grundlegenden Definitionen wie

```latex
\newtoks\headertoks% eine neue Token-Listen-Variable für den Kopfzeilentext
\newtoks\footertoks% eine neue Token-Listen-Variable für den Fußzeilentext
% Verwenden Sie \global, um sicherzustellen, dass gespeicherte Kopf- oder Fußzeilendaten
% überall zugänglich sind, einschließlich Befehlen in der
% Ausgaberoutine
\newcommand{\myheader}[1]{\global\headertoks={#1}}
\newcommand{\myfooter}[1]{\global\footertoks={#1}}
```

in der `\headertoks` und `\footertoks` Token-Listen sind, die zum Speichern des Textes von Kopf- und Fußzeilen verwendet werden.

Außerdem verfügt unser hypothetisches Beispiel auch über eine Ausgaberoutine, die den Kopf- und Fußzeilentext aus den aktuellen Werten von `\myheader` und `\myfooter`. Wie im Diagramm gezeigt, setzen innerhalb des Inhalts, der für die aktuelle Seite bestimmt ist, `\myheader` und `\myfooter` die passenden (richtigen) Werte. Allerdings wäre es möglich, dass `\myheader` und/oder `\myfooter` innerhalb eines Absatzes aufgerufen werden, der einen Seitenumbruch überbrückt. Da TeX den gesamten Absatz verarbeiten muss, `\myheader` und `\myfooter` würden erneut aufgerufen, um den im „internen Zustand von TeX“ gespeicherten Kopf-/Fußzeilentext zurückzusetzen, wodurch Werte entstehen, die für die aktuelle Seite nicht korrekt sind. Wenn die Ausgaberoutine Kopf- und Fußzeile erzeugt, enthalten sie Text, der für die nächste Seite bestimmt ist.

![Grafik, die falsche Kopf- und Fußzeilen zeigt, wenn die Ausgaberoutine TeX-Makros nur zum Abrufen von Kopf- und Fußzeilentext verwendet](/files/2972ef2149aa165243242bc7b964e71814867f4b)

#### TeXs asynchrones Verhalten: \mark-Befehl als Rettung

TeXs Satz- (Inhaltsaufbau-) Aktivitäten sind *nicht synchronisiert* mit dem abschließenden Prozess der Ausgabe einer gesetzten Seite über die in der Ausgaberoutine enthaltenen Befehle. Wenn es Zeit ist, eine Seite auszugeben, liegt der tatsächliche interne Zustand von TeX vor jedem Zustand, den es an der Stelle des Seitenumbruchs gehabt haben könnte — dort, wo es das letzte Inhaltsteil auf der aktuell ausgegebenen Seite gesetzt hat.

In [The TeXbook](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489), beschreibt Donald Knuth, der Schöpfer von TeX, diese Situation als

> ... TeXs Ausgaberoutine hinkt seinen Seitenaufbauaktivitäten hinterher

Aufgrund dieser unsynchronisierten Beziehung sind „besondere Hilfsmittel“ in Form des *Markierungsmechanismus*, angewendet über den `\mark` (oder `\marks n`)-Befehl, erforderlich, um sicherzustellen, dass Kopf- und Fußzeilen Material enthalten, das für die tatsächlich ausgegebene Seite relevant ist. Der `\mark` Befehl bettet Markenknoten in den Seiteninhalt ein und speichert den Speicherort des Inhalts, der für Kopf- und Fußzeile der betreffenden Seite verwendet werden kann.

Der Autor des bekannten und angesehenen Buches [TeX by Topic](https://www.eijkhout.net/tex/tex-by-topic.html) beschreibt den `\mark` Mechanismus als

> ... den Hauptmechanismus, über den die Ausgaberoutine Informationen über den Inhalt der gerade abgebrochenen Seite erhalten kann, insbesondere über ihren oberen und unteren Bereich.

Die `\mark` Befehl ist ein Mechanismus, der dazu entworfen wurde, die asynchrone Natur von TeXs Algorithmus für Seitenumbrüche und Ausgaberoutinen zu umgehen.

![Schematische Darstellung von Markendaten (Knoten), die in den Inhalt des Seitenkörpers eingebettet sind](/files/e500118e1e0d29f6589ee3464bab47e610e4f158)

### Prüfungen vor der Ausgabe: Suche nach Markenknoten

Nachdem die TeX-Engine die Stelle eines Seitenumbruchs bestimmt hat, ruft sie eine interne Routine auf (genannt `fire_up()`), die vor dem Abschluss der Seitengestaltung durch die Ausgaberoutine und dem Schreiben der fertigen Seite in die PDF-Datei viele Vorverarbeitungsschritte durchführt. Ein wichtiger Teil dieser Vorverarbeitungsschritte ist, den Wert von drei *globalen Markierungsvariablen*: `\botmark`, `\topmark` und `\firstmark` festzulegen, die zur Bereitstellung von Daten für die Erstellung von Kopf- und Fußzeilen verwendet werden. Natürlich kann eine Seite mehrere Markenknoten enthalten, aber diese werden gefiltert, um die drei Markierungsvariablen zu erzeugen, die wie folgt funktionieren:

* **`\botmark`** ist die Markierung, die am aktuellen Seitenumbruch gilt; d. h. die letzte Markierung, die auf der *aktuellen* page
* **`\topmark`** ist der Wert von `\botmark` aus dem *vorherigen* page
* **`\firstmark`** ist die erste Markierung auf der *aktuellen* Seite — die erste Markierung zwischen `\topmark` und `\botmark`

Die folgende schematische Darstellung zeigt die grundlegenden Prinzipien der Vorverarbeitung des gesetzten Seiteninhalts, um Werte für die drei globalen Markierungsvariablen zu bestimmen `\botmark`, `\topmark` und `\firstmark`:

![Schematische Darstellung der grundlegenden Prinzipien zur Bestimmung der Werte der drei globalen Markierungsvariablen \botmark, \topmark und \firstmark](/files/6e2964bd95825bd86b7678baf69dcfd5ac7db6a8)

Der nächste Abschnitt verwendet einige der oben gegebenen Erläuterungen, um zu skizzieren, wie LaTeX Kopf- und Fußzeilen setzt.

### LaTeX-Klassen: Seitenstile und Kopf-/Fußzeilen

Wenn Sie schreiben `\documentclass{*class*}` wobei `*class*` könnte `article`, `book`, `report` oder `Buchstaben`, lädt LaTeX eine Datei mit dem Namen `*class*.cls`; zum Beispiel `book.cls`, `article.cls` und so weiter. Diese `.cls` Dateien enthalten LaTeX-Code, um klassenspezifische Varianten verschiedener Befehle und Funktionen zu implementieren, die in allen Dokumentklassen vorhanden sein und von allen bereitgestellt werden sollen — also die von allen Dokumentklassen gemeinsam genutzten Verhaltensweisen. Beispiele könnten klassenspezifische Seitenränder sowie klassenspezifische Versionen von Befehlen umfassen, wie etwa `\section`, `\subsection` und so weiter.

Ein weiteres wichtiges Element von `.cls` Dateien ist die klassenspezifische Implementierung standardmäßiger Seitenstile, die die Kopf- und Fußzeilen von Dokumenten definieren, die mit einer bestimmten Klasse und einem bestimmten Seitenstil erstellt werden. Zum Beispiel:

* **`book.cls`** und **`article.cls`** enthalten jeweils Implementierungen der Seitenstile `headings` und `myheadings`
* **`letter.cls`** enthält Definitionen für die Seitenstile `headings`, `empty`, `plain` und einen namens `firstpage`
* **`report.cls`** enthält Definitionen für die Seitenstile `headings` und `myheadings`

Implementierungen von Seitenstilen hängen oft von der `twoside` Option von `\documentclass`— ob das Dokument ein- oder zweiseitig ist — ab, damit Kopf- und Fußzeilen für linksseitige (gerade) und rechtsseitige (ungerade) Seiten entsprechend definiert werden.

Dokumentklassen können sich auf Standarddefinitionen der `plain` oder `empty` Seitenstile verlassen, die andernorts in LaTeX bereitgestellt werden — außerhalb der `.cls` verwendeten Datei.

#### Mehr zu Seitenstilen

Wenn Sie den Stil einer Seite ändern mit `\pagestyle{*somestyle*}` oder `\thispagestyle{*somestyle*}` erwartet LaTeX einen internen Befehl namens `ps@*somestyle*`— normalerweise bereitgestellt von der Dokumentklassen- `.cls` Datei oder vielleicht einem Paket wie `fancyhdr`. Übrigens meinen wir mit „internem Befehl“ einen Befehl, der Teil des LaTeX-Quellcodes ist und dessen Name ein `@` Symbol enthält, was seine beiläufige Verwendung normalerweise verhindert (aufgrund seiner [Kategoriencode](/latex/de/weitere-themen/43-table-of-tex-category-codes.md)).

Die Definition von `\ps@*somestyle*` ist dafür verantwortlich, die Merkmale/Verhaltensweisen dieses Seitenstils umzusetzen, was auch die Bereitstellung von Definitionen für folgende Elemente umfasst:

* Befehle, die während der letzten Phasen der Seitengestaltung verwendet werden (um Kopf- und Fußzeilen hinzuzufügen, siehe [später im Artikel](#commands-for-the-output-routine)):
  * `\@oddhead`
  * `\@oddfoot`
  * `\@evenhead`
  * `\@evenfoot`
* Befehle zum Einfügen abschnittsbezogener Markendaten zur Verwendung bei der Erzeugung von Dokumentkopf- und -fußzeilen, die Abschnittstitel, Nummern und Ähnliches enthalten. Zum Beispiel definiert der `headings` Seitenstil (innerhalb von `book.cls`) die folgenden markenerzeugenden Befehle:
  * `\chaptermark`
  * `\sectionmark`

Wir werden [markenerzeugende Befehle weiter untersuchen](#mark-commands-and-mark-data), wie zum Beispiel `\chaptermark`, aber nur als Beispiel: Wenn Sie schreiben `\chapter{chapter title}` Der Stil `\chaptermark` wird auch der Befehl ausgeführt, um kapitelbezogene Markendaten für die spätere Erzeugung von Seitenkopfzeilen einzufügen.

#### Eine Anatomie von Kopf- und Fußzeilenbefehlen auf Basis von Seitenstilen

Dieser Abschnitt untersucht einige der zentralen LaTeX-Befehle/-Prozesse, die zur Erstellung von Kopf- und Fußzeilen verwendet werden — basierend auf Erläuterungen oder Konzepten, die zuvor in diesem Artikel vorgestellt wurden.

**LaTeXs „Modell“ von Kopf- und Fußzeilen**

Der Inhalt der (standardmäßigen) Kopf- und Fußzeilen von LaTeX basiert auf einer zweistufigen Hierarchie von Dokumentabschnitten: ein Abschnitt „höherer Ebene“ enthält mehrere Abschnitte „niedrigerer Ebene“. Für die Klassen book und article ergibt sich daraus:

* `**book**` **Klasse**: Abschnitte „höherer Ebene“ werden erzeugt durch `\chapter` Befehle und Abschnitte „niedriger Ebene“ über `\section`, was Kapiteln mit vielen Abschnitten entspricht.
* `**article**` **Klasse** (bei Annahme zweiseitiger Dokumente): Abschnitte „höherer Ebene“ werden mit `\section` Befehlen erzeugt und die „niedrigeren“ über `\subsection`, was mehrere Unterabschnitte innerhalb desselben Abschnitts widerspiegelt.

LaTeX wendet sein „Modell“ von Kopf- und Fußzeilen über seine Gliederungsbefehle an, die Markenknoten „einspeisen“ (über den `\mark` Befehl), um Daten zu speichern, die für den gerade erstellten Dokumentabschnitt relevant sind. Jedes Mal, wenn Sie zum Beispiel schreiben `\section{*some section title*}` wird ein Markenknoten erstellt, der Daten enthält, die `*some section title*` und die Abschnittsnummer widerspiegeln.

LaTeX verwendet ein Markensystem, das Daten der Form `{left}{right}`, letztlich erzeugt über `\mark` Befehle

```latex
\mark{{left}{right}}
```

umfasst, das von Makroschichten umgeben ist, die die Benutzer vor den Details niedrigerer Ebene schützen sollen — diese werden in den folgenden Abschnitten dieses Artikels erläutert.

#### Die book-Klasse erkunden

Wenn die `book.cls` Datei geladen wird, besteht eine ihrer letzten Aktionen darin, `\pagestyle{headings}` auszuführen, womit der Standard-Seitenstil auf `headings`gesetzt wird, daher schauen wir uns diesen Seitenstil genauer an.

Wie [oben erwähnt](#more-on-page-styles), werden die Merkmale/Eigenschaften des `headings` Seitenstils, wie sie von der `book` Klasse implementiert werden, durch den (internen) Befehl definiert `\ps@headings` der in der Datei enthalten ist `book.cls`. Die genaue Definition von `\ps@headings` hängt davon ab, ob das Dokument ein- oder zweiseitig ist (Standard für die `book` Klasse).

**„Markenbefehle“ und „Markendaten“**

Für zweiseitige Dokumente, die mit der `book` Klasse erstellt werden, definiert `\ps@headings` erstellt (definiert) zwei „Markenbefehle“: `\chaptermark` und `\sectionmark` die „Markendaten“ der Form erzeugen `{left}{right}`, zur Verwendung in Kopf- und Fußzeilen. Diese Markenbefehle spiegeln LaTeXs Modell von Kopf- und Fußzeilen wider — basierend auf der Hierarchie der Dokumentabschnitte:

* der Abschnittsbefehl „höherer Ebene“ (hier `\chapter`) wird verwendet, um „Markendaten“ für linksseitige (gerade nummerierte) Seitenkopfzeilen bereitzustellen. Wenn Sie ein neues Kapitel beginnen, indem Sie schreiben `\chapter{*chapter title*}`, `\chaptermark` wird aufgerufen, um „Markendaten“ zu erzeugen, die dieses neue Kapitel widerspiegeln — sie enthalten dessen `*chapter title*` und seine Nummer.
* der Abschnittsbefehl „untere Ebene“ (hier, `\section`) wird verwendet, um „Markendaten“ für rechtsseitige (ungeradzahlige) Seiten bereitzustellen. Wenn Sie `\section{*section title*}` Der Stil `\sectionmark` Befehl aufgerufen, um „Markendaten“ zu erstellen, die den neuen Abschnitt widerspiegeln — einschließlich seiner `*section title*` und Nummer. Alle vom vorherigen bereitgestellten Markendaten `\chapter` wird durch nachfolgende \section-Befehle nicht beeinflusst.

**\markboth und \markright**

LaTeX-spezifische Markierungsbefehle für Abschnitte, wie `\chaptermark` und `\sectionmark`, verwenden zwei weitere Befehle namens `\markboth` und `\markright` die die eigentlichen Markendaten für Kopf- und Fußzeilen bereitstellen. `\markboth` und/oder `\markright` können Befehle enthalten, um Kopf- oder Fußzeilentext zu formatieren, z. B. ihn in Großbuchstaben zu setzen.

Für Dokumente, die mit `book` Klassenvorgaben (zweiseitig, `headings` Seitenstil) erstellt werden, funktionieren die markenerzeugenden Befehle wie folgt:

* `\chaptermark` erzeugt Markendaten unter Verwendung von `\markboth`
* `\sectionmark` erzeugt Markendaten `\markright`

`\markboth` und `\markright` sind Makros, die letztlich den primitiven (eingebauten, niedrigstufigen) `\mark` Befehl verwenden, um tatsächlich aus Abschnittsbefehlen erzeugte Marken einzufügen.

`\markboth` hat die Form

* **`\markboth{left}{right}`**: fügt eine Marke (einen Knoten) unter Verwendung von `\mark{{left}{right}}` ein, wodurch ein Markenknoten entsteht, der ein Paar von in geschweifte Klammern gesetzten Werten enthält `{left}{right}`.

`\markright` hat die Form

* **`\markright{newright}`**: fügt eine Marke (einen Knoten) unter Verwendung von `\mark{{currentleft}{newright}}`; d. h. es ändert den aktuellen Wert von `right` zu `newright` aber der aktuelle Wert von `left` (d. h. `currentleft`) bleibt unverändert, wodurch ein Markenknoten entsteht, der ein Paar von in geschweifte Klammern gesetzten Werten enthält `{currentleft}{newright}`.

Das Verhalten von `\markboth` und `\markright` unterstützen die zweistufige Abschnittshierarchie, wie z. B. ein Dokument mit mehreren Abschnitten innerhalb jedes Kapitels.

Als Beispiele für die (zweiseitige) `book` Dokumentenklasse (unter Verwendung des Seitenstils „headings“):

* `\chaptermark` verwendet `\markboth` um Folgendes festzulegen:
  * a `{left}` Feld, das CHAPTER . in Großbuchstaben setzt.
  * ein {right}-Feld, das leer ist (`{}`)
* `\sectionmark` verwendet `\markright` um das `{right}` Markenfeld festzulegen, ebenfalls in Großbuchstaben.

Um zu verstehen, warum `\sectionmark` verwendet `\markright` können wir beobachten, dass jeder neue `\section` Befehl sollte:

* eine neue Marke einfügen, die Daten für diesen `\section` (z. B. seinen Titel und seine Nummer).
* aber *nicht* die Markendatenwerte für den aktuellen `\chapter` beeinflussen, in dem dieser bestimmte `\section` Befehl erscheint

Aus diesen Gründen, `\section` Befehl ruft `\sectionmark` auf, der `\markright` verwendet, um eine `\section`-bezogene Marke zu erzeugen: Es aktualisiert das `{right}` Markendatenfeld, beeinflusst aber nicht den aktuellen `{left}` Markendatenfeldwert, der durch den aktuellen `\chapter`.

Hinweis: Der LaTeX-Quellcode enthält den Hinweis:

> Die Markierungsbefehle funktionieren für rechte Marken, die „innerhalb von“ linken Marken nummeriert sind, ziemlich gut — z. B. wird die linke Marke durch einen \chapter-Befehl und die rechte Marke durch einen \section-Befehl geändert. Es führt jedoch zu etwas anomalen Ergebnissen, wenn 2 \markboth-Befehle auf derselben Seite vorkommen.

**Befehle für die Ausgaberoutine**

Die `\ps@headings` Befehl implementiert Definitionen der folgenden Befehle

* `\@oddhead`
* `\@oddfoot`
* `\@evenhead`
* `\@evenfoot`

die von der Ausgaberoutine verwendet werden, um während der letzten Phase des Seitenaufbaus Kopf- und Fußzeilen hinzuzufügen. Zum Beispiel, `book.cls` setzt `\@oddfoot` und `\@evenfoot` auf den Wert `\@empty`definiert ist als `\def\@empty{}`, dadurch `\ps@headings` werden leere Fußzeilen auf links- und rechtsseitigen Seiten erzeugt:

```latex
\let\@oddfoot\@empty
\let\@evenfoot\@empty
```

Die Kopfzeilen werden definiert als:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
```

wobei

* `\leftmark` extrahiert den `{left}` Wert aus einem `{left}{right}` Markenpaar
* `\rightmark` extrahiert den `{right}` Wert aus einem `{left}{right}` Markenpaar
* \thepage gibt die aktuelle Seitenzahl aus

Im Wesentlichen erzeugen diese Implementierungen von `\@evenhead` und `\@oddhead` die folgenden Ergebnisse:

* `\@evenhead`: die Seitenzahl erscheint links in der Kopfzeile und der Inhalt von `\leftmark`, formatiert mit dem Fontbefehl `\slshape`, wird rechts in der Kopfzeile ausgegeben — der dazwischenliegende Leerraum wird von der sehr flexiblen `\hfil` Abstand.
* `\@oddhead`: der Inhalt von `\rightmark`, formatiert mit dem Fontbefehl `\slshape`, erscheint links in der Kopfzeile und die aktuelle Seitenzahl wird rechts in der Kopfzeile ausgegeben — wiederum wird der dazwischenliegende Leerraum durch `\hfil` Abstand.

Es bleibt jedoch eine entscheidende Frage: *welches* `{left}{right}` Markenpaar, das von `\leftmark` und `\rightmark`verwendet wird: Mit anderen Worten, woher erhalten sie ihre Markendatenwerte?

Wie [oben erwähnt](#filtering) aber [weiter unten erläutert](#explainfiltering), werden während der letzten Seitenaufbaustufen alle in den Dokumentseiten enthaltenen Marken „gefiltert“ und verwendet, um den Wert von drei globalen Markierungsvariablen festzulegen: `\botmark`, `\topmark` und `\firstmark`. Aufgrund der [Struktur von LaTeX-Markierungen](#latexs-model-of-headers-and-footers), wird jede dieser 3 Markierungsvariablen schließlich einen Wert von `{left}{right}` für ein bestimmtes Wertepaar enthalten `{left}` und `{right}` und genau diese liefern das eigentliche `{left}{right}` Markenpaar (Felder) für `\leftmark` und `\rightmark`:

* `\leftmark` extrahiert den `left` Wert aus dem `{left}{right}` Markenpaar (Feldern), das von `\botmark`
* `\rightmark` extrahiert den `right` Wert aus dem `{left}{right}` bereitgestellten Markenpaar `\firstmark`

Hinweis `\markboth` und `\markright` können Befehle enthalten, um den Kopf- und Fußzeilentext zu formatieren — etwa durch Umwandlung in Großbuchstaben.

### Beispiele unter Verwendung von LaTeX-Befehlen niedrigerer Ebene

Die folgenden Beispiele zeigen, wie Änderungen an Seitenstilen oder Kopf- und Fußzeilen vorgenommen werden können, indem einige der in diesem Artikel besprochenen LaTeX-Befehle niedrigerer Ebene (interne Befehle) neu definiert werden (also solche, die das @-Symbol enthalten). Wir empfehlen diese Methode nicht zum Ändern von Kopf- und Fußzeilen, aber sie steht denjenigen zur Verfügung, die sie benötigen (z. B. Paketautoren). Die bevorzugte Lösung zum Ändern von Kopf- und Fußzeilen ist die Verwendung des [`fancyhdr` Paket](https://ctan.org/pkg/fancyhdr?lang=en), die in einem [Overleaf-Hilfsartikel](/latex/de/formatierung/02-headers-and-footers.md).

#### Definieren eines minimalen Seitenstils

Das folgende Beispiel definiert einen neuen, extrem minimalistischen Seitenstil namens `demostyle` der statischen Text verwendet, um die Kopf- und Fußzeilen zu definieren, und sich nicht auf Abschnittsbefehle (`\chapter`, `\section` usw.) stützt, um den Inhalt von Kopf- und Fußzeilen festzulegen.

Das Beispiel beginnt damit, den Kategoriencode des `@` -Zeichens auf 11 zu ändern, damit es innerhalb von Makronamen verwendet werden kann. Der `\ps@demostyle` Befehl implementiert unseren minimalen Seitenstil, indem er die Befehle neu definiert, die (in der Ausgaberoutine) verwendet werden, um die Kopf- und Fußzeilen zu erzeugen: `\@oddhead`, `\@oddfoot`, `\@evenhead` und `\@evenfoot`. Beachten Sie die `twoside` Option in unserer `\documentclass` Deklaration — die die `article` Klasse verwendet.

```latex
\documentclass[twoside]{article}
\catcode`@=11
\newcommand{\ps@demostyle}{%
\renewcommand\@oddfoot{\hfil Die Fußzeile der ungeraden Seite\hfil}%
\renewcommand\@evenfoot{\hfil Die Fußzeile der geraden Seite\hfil}%
\renewcommand\@evenhead{\thepage\hfil Die Kopfzeile der geraden Seite}%
\renewcommand\@oddhead{Die Kopfzeile der ungeraden Seite\hfil\thepage}}
\catcode`@=12
\title{Demonstration eines Seitenstils}
\author{Overleaf}
\date{August 2022}
\begin{document}
\pagestyle{demostyle}
\maketitle
\newpage
\section{Einleitung}
\newpage
\section{Mehr Material}
\end{document}
```

[Öffnen Sie dieses Beispiel in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Creating+a+new+page+style\&snip=%5Cdocumentclass%5Btwoside%5D%7Barticle%7D%0A%5Ccatcode%60%40%3D11%0A%5Cnewcommand%7B%5Cps%40demostyle%7D%7B%25%0A%5Crenewcommand%5C%40oddfoot%7B%5Chfil+The+odd-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenfoot%7B%5Chfil+The+even-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenhead%7B%5Cthepage%5Chfil+The+even-page+header%7D%25%0A%5Crenewcommand%5C%40oddhead%7BThe+odd-page+header%5Chfil%5Cthepage%7D%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+a+page+style%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bdemostyle%7D%0A%5Cmaketitle%0A%5Cnewpage%0A%5Csection%7BIntroduction%7D%0A%5Cnewpage%0A%5Csection%7BMore+material%7D%0A%5Cend%7Bdocument%7D)

#### Kopfzeilen für die Buchklasse ändern

Das folgende Beispiel ändert die Kopfzeilen für die Buchklasse, indem `\@oddhead` und `\@evenhead` neu definiert wird, sodass Kopfzeilen auf linken und rechten Seiten die aktuelle Seitenzahl und den Kapiteltitel enthalten. Beachten Sie, wie der zweite `\chapter` Befehl den optionalen Kurzkapitel-Titel verwendet `[Der kurze Titel]` der nun den Kopfzeilentext liefert, statt des langen Titels.

`\section` Befehle haben keinen Einfluss auf den Inhalt der Kopfzeilen, weil unsere Neudefinitionen der Kopfzeilen nur `\leftmark` verwenden, womit Details des aktuellen Kapitels abgerufen werden. Um auf Details des aktuellen Abschnitts zuzugreifen, müssten wir `\rightmark` in der Definition von `\@oddhead` und/oder `\evenhead`.

```latex
\documentclass{book}
% HINWEIS: Kategoriencode von '@' vorübergehend auf 11 geändert
% um seine Verwendung in Befehlsnamen zu ermöglichen
\catcode `@=11
% Mache \@oddfoot und \evenfoot äquivalent zu \@empty
% um sie leer (blank) zu machen
\let\@oddfoot\empty\let\evenfoot\empty
% Definiere \@oddhead und \@evenhead neu
\renewcommand{\@oddhead}{\leftmark\hfil\thepage}
\renewcommand{\@evenhead}{\thepage\hfil\leftmark}
\catcode `@=12
% Verwende eine angenehm kleine Seitengröße
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memoiren eines \TeX{}-Benutzers}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Dies ist der Vorspann, der römische Ziffern verwendet.
\mainmatter
\chapter{Wo soll ich anfangen?}
Kapitel 1: Ein kurzes Kapitel.
\newpage
\section{Am Anfang...}
Ein Abschnitt.
\chapter[Der kurze Titel]{Ein Kapitel mit einem sehr langen Titel, der es für Kopfzeilen ungeeignet macht}
\newpage
\section{Ein weiterer Abschnitt}
Mit wenig Inhalt.
\newpage
\section{Was, noch ein Abschnitt?}
Ebenfalls mit wenig Inhalt.
\end{document}
```

[Öffnen Sie dieses Beispiel in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Changing+headers+for+the+book+class\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%25+Let+%5C%40oddfoot+and+%5Cevenfoot+be+equivalent+to+%5C%40empty%0A%25+to+make+them+blank+%28empty%29%0A%5Clet%5C%40oddfoot%5Cempty%5Clet%5Cevenfoot%5Cempty%0A%25+Redefine+%5C%40oddhead+and+%5C%40evenhead%0A%5Crenewcommand%7B%5C%40oddhead%7D%7B%5Cleftmark%5Chfil%5Cthepage%7D%0A%5Crenewcommand%7B%5C%40evenhead%7D%7B%5Cthepage%5Chfil%5Cleftmark%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cchapter%5BThe+short+title%5D%7BA+chapter+with+a+very+long+title%2C+making+it+unsuitable+for+headers%7D%0A%5Cnewpage%0A%5Csection%7BAnother+section%7D%0AWith+little+content.%0A%5Cnewpage%0A%5Csection%7BWhat%2C+another+section%3F%7D%0AAlso+with+little+content.%0A%5Cend%7Bdocument%7D)

#### Verwendung der erweiterten Markierungsbefehle von ε-TeX

Die `book` Klasse verwendet die folgenden Definitionen von `\@evenhead` und `\@oddhead` um Kopfzeilen zu erzeugen:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}
```

wobei die Befehle `\leftmark` und `\rightmark` wie folgt definiert sind

```latex
\def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty}
\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty}
```

Mit den erweiterten Befehlen von ε-TeX und der Äquivalenz zwischen ε-TeX-Markierungsklasse 0 und den ursprünglichen TeX-Befehlen können wir:

* umschreiben `\leftmark` verwenden, um `\botmark` mit ε-TeXs `\botmarks0` äquivalent, und
* umschreiben `\rightmark` verwenden, um `\firstmark` mit ε-TeXs `\firstmarks0` äquivalent

Diese Neudefinitionen erzeugen

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
```

Beachten Sie die Verwendung von `\\relax` um TeXs Suche nach weiteren Ziffern zu beenden — Sie können auch `\\relax` durch ein Leerzeichen ersetzen, um als Abschlusszeichen zu dienen.

Das folgende Beispiel erzeugt eine Ausgabe, die mit den ursprünglichen Definitionen von `\leftmark` und `\rightmark`.

```latex
\documentclass{book}
% Definiere \leftmark und \rightmark neu, um
% \botmarks0 bzw. \firstmarks0 zu verwenden
% HINWEIS: Kategoriencode von '@' vorübergehend auf 11 geändert
% um seine Verwendung in Befehlsnamen zu ermöglichen
\catcode `@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
\catcode `@=12
% Verwende eine angenehm kleine Seitengröße
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memoiren eines \TeX{}-Benutzers}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Dies ist der Vorspann, der römische Ziffern verwendet.
\mainmatter
\chapter{Wo soll ich anfangen?}
Kapitel 1: Ein kurzes Kapitel.
\newpage
\section{Am Anfang...}
Ein Abschnitt.
\newpage
Ein weiterer Abschnitt.
\end{document}
```

[Öffnen Sie dieses Beispiel in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+%CE%B5-TeX%E2%80%99s+extended+marks+command\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks0+and+%5Cfirstmarks0+respectively%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cnewpage%0AAnother+section.%0A%5Cend%7Bdocument%7D)

**Hinweise zu ε-TeX**

Wie [wir oben angemerkt haben](#etex), führt ε-TeX die `\marks` Befehl:

```latex
\marks n {stuff to store}
```

ein, die das ursprüngliche `\mark` Merkmal von Knuths TeX-Engine erweitert und in allen drei gängigen TeX-Engines verfügbar ist: pdfTeX, LuaTeX und XeTeX.

Die Implementierung von ε-TeX führt außerdem neue globale Markierungsvariablen ein `\firstmarks n`, `\botmarks n` und `\topmarks n`: eine für jede Klasse `n`. Diese klassenbasierten Markierungsvariablen werden [mithilfe der oben beschriebenen Mechanismen bestimmt](#pre-output-checks-looking-for-mark-nodes)und können alle bei der Erzeugung von Kopf- und Fußzeilen verwendet werden.

Sie können eine beliebige der $$2^{15}$$ = 32768 Markierungsklassen, von 0 bis 32767, innerhalb von Neudefinitionen von `\leftmark` oder `\rightmark`. Das setzt voraus, dass Sie geeignete Markendaten für Ihre gewählte Markierungsklasse bereitgestellt (eingefügt) haben, `n`, über `\marks n{{left}{right}}`.

Beachten Sie, dass LuaTeX $$2^{16}$$ = 65536 Markierungsklassen bereitstellt, mit `n` von 0 bis 65535.

**Beispiel unter Verwendung der Markierungsklasse 10**

Dieses Beispiel demonstriert die Verwendung der Markierungsklasse 10 (zufällig gewählt), um Dokumentkopfzeilen zu erzeugen. Das Beispieldokument setzt 6 Seiten, die die Folge von Markierungen enthalten, die in dem [durchgerechneten Beispiel am Ende dieses Artikels](#a-worked-example-to-show-how-tex-engines-determine-values-for-botmark-topmark-and-firstmark)vorgestellt werden. Eine Untersuchung dieses Beispiels zeigt, warum die TeX-Engine eine bestimmte Marke ausgewählt hat, $$\alpha$$, $$\beta$$, $$\gamma$$ und $$\delta$$, für die Verwendung in jeder der Kopfzeilen.

Wir beginnen mit der Definition eines praktischen Makros, `\domark`, das `\marks 10` verwendet, um Markendaten einzufügen, die der LaTeX- `{left}{right}` Konvention folgen:

```latex
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
```

Marken der Klasse 10 werden der Kopf- und Fußzeilenmechanik von LaTeX zugänglich gemacht, indem `\leftmark` und `\rightmark`neu definiert wird — mit ein wenig zusätzlicher Info:

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (über \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (über \texttt{\string\firstmarks10})}
```

Nachdem eine Reihe von (Marken der Klasse 10) eingefügt wurde, erstellt die TeX-Engine (hier pdfTeX) pflichtbewusst globale Markierungsvariablen für Klasse 10 —`\botmarks10`, `\topmarks10` und `\firstsmarks10` welches `\leftmark` und `\rightmark` verwendet, um die Kopfzeilen zu erzeugen.

```latex
\documentclass{book}
% Ein kurzer Befehl, um Marken der Klasse 10 zu verwenden
% und gemäß LaTeXs Markierungsstruktur {left}{right}
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
% Definiere \leftmark und \rightmark neu, um
% bzw. \botmarks10 und \firstmarks10
\catcode`@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (über \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (über \texttt{\string\firstmarks10})}
\catcode`@=12
\title{Demonstration der erweiterten Markierungen von \(\varepsilon\)-\TeX}
\author{Overleaf}
\date{August 2022}
\begin{document}

Seite 1: Es wurden keine Markierungen hinzugefügt, daher bleiben alle Markierungsvariablen in ihrem initialisierten Zustand: leer (NULL).

\newpage
Seite 2: $\alpha$-Markierung wurde dieser Seite hinzugefügt über

\verb|\domark{$\alpha$-left}{$\alpha$-right}|\domark{$\alpha$-left}{$\alpha$-right}

\newpage
Seite 3: Auf dieser Seite wurden keine neuen Markierungen hinzugefügt.

\newpage
Seite 4: $\beta$-Markierung gefolgt von $\gamma$-Markierung wurde dieser Seite hinzugefügt über

\verb|\domark{$\beta$-left}{$\beta$-right}|

\verb|\domark{$\gamma$-left}{$\gamma$-right}|.
\domark{$\beta$-left}{$\beta$-right}
\domark{$\gamma$-left}{$\gamma$-right}

\newpage
Seite 5: $\delta$-Markierung wurde dieser Seite hinzugefügt über

\verb|\domark{$\delta$-left}{$\delta$-right}|
\domark{$\delta$-left}{$\delta$-right}

\newpage
Seite 6: Auf dieser Seite wurden keine Markierungen hinzugefügt.
\end{document}
```

[Öffnen Sie dieses Beispiel in Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+e-TeX+global+marks+variables\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+A+short+command+to+use+marks+with+class+10%0A%25+and+following+LaTeX%27s+mark+structure+%7Bleft%7D%7Bright%7D%0A%5Cnewcommand%7B%5Cdomark%7D%5B2%5D%7B%5Cmarks+10%7B%7B%231%7D%7B%232%7D%7D%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks10+and+%5Cfirstmarks10+respectively%0A%5Ccatcode%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cbotmarks10%7D%29%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cfirstmarks10%7D%29%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+%5C%28%5Cvarepsilon%5C%29-%5CTeX%E2%80%99s+enhanced+marks%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%0APage+1%3A+No+marks+added+so+all+mark+variables+remain+in+their+initialized+state%3A+empty+%28NULL%29.%0A%0A%5Cnewpage%0APage+2%3A+%24%5Calpha%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%0A%0A%5Cnewpage%0APage+3%3A+No+new+marks+added+to+this+page.%0A%0A%5Cnewpage%0APage+4%3A+%24%5Cbeta%24-mark+followed+by+%24%5Cgamma%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%7C%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%7C.%0A%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%0A%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%0A%0A%5Cnewpage%0APage+5%3A+%24%5Cdelta%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%7C%0A%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%0A%0A%5Cnewpage%0APage+6%3A+No+marks+added+to+this+page.%0A%5Cend%7Bdocument%7D)

Die folgende Grafik zeigt die von diesem Beispiel erzeugten Kopfzeilen:

![Grafik, die die Ausgabe aus LaTeX-Code zeigt, der die erweiterten Markierungsbefehle von ε-TeX verwendet](/files/572939b56e9efccb30c22ded5f800e7d87deff15)

* **Hinweis**: Die Kopfzeile auf Seite 1 wird zu einem Zeitpunkt erstellt, an dem alle drei Markierungsvariablen für Klasse 10 —`\botmarks10`, `\topmarks10` und `\firstsmarks10`— leer sind. Das Endergebnis ist, dass `\rightmark` (für Seite 1) nur das letzte Kopfzeilenfragment eingefügt wird: `(über \texttt{\string\firstmarks10})`, wie in der obigen Grafik gezeigt.

## Ein durchgerechnetes Beispiel, das zeigt, wie TeX-Engines Werte für \botmark, \topmark und \firstmark bestimmen

![Db.gif](/files/0ecd0e66d1d06793edf40e0a0e02cc5f6f55d56d)![Db.gif](/files/0ecd0e66d1d06793edf40e0a0e02cc5f6f55d56d) Es erscheint angemessen, Knuths Verwendung von doppelten Warnschildern mit umgeknickter Ecke nachzuahmen (Bild mit freundlicher Genehmigung von [dieser Website](http://www.truetex.com/db.htm)), weil das Material etwas niedrigstufig ist und „unter die Haube blickt“ — obwohl wir hoffen, dass es für furchtlose Leser von Interesse sein könnte, die ein paar weitere Details verstehen möchten.

Die folgende Diskussion basiert eng auf dem letzten Beispiel auf Seite 258 des [The TeXbook](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489). Hier haben wir dieses Beispiel für diejenigen ohne Zugriff auf The TeXbook bearbeitet und neu gesetzt:

![Eine bearbeitete und neu gesetzte Version eines Beispiels von Seite 258 des TeXbook](/files/bcc8db23faec5b74453de467ae23742e13f65146)

Die in dieser Grafik dargestellte Tabelle wurde aus einer von Knuth bereitgestellten Tabelle reproduziert, aber wie beim Original gibt es keine Erklärung, wie sie abgeleitet wurde. Hier werden wir das ansprechen, um zusätzliche Details bereitzustellen, die zeigen, wie diese Werte von `\botmark`, `\topmark` und `\firstmark` bestimmt wurden — um diese Details zu erhalten, musste der Quellcode einer TeX-Engine untersucht werden!

Der Prozess der Festlegung von Werten für `\botmark`, `\topmark` und `\firstmark` kann in 3 kurzen Pseudocode-Fragmenten zusammengefasst werden, wie im folgenden Diagramm und in den anschließenden Erläuterungen gezeigt:

1. Prüfung vor dem Inhalt
2. Inhaltsschleife
3. Prüfung nach dem Inhalt

Hinweis:

* Die Tests in Schritt 1 „Prüfung vor dem Inhalt“ und Schritt 3 „Prüfung nach dem Inhalt“ werden einmal pro Seite durchgeführt.
* Schritt 2 „Inhaltsschleife“ umfasst das Durchsuchen des Seiteninhalts durch TeX nach Markenknoten und deren Verwendung, um die Werte der Markierungsvariablen wie gezeigt festzulegen.

![Bild, das Pseudocode-Versionen des Codes zeigt, der verwendet wird, um Werte für die drei globalen Markierungsvariablen festzulegen, die von TeX-Engines verwendet werden](/files/ce403afa9740003f4a554bbf4b207988d2d377d5)

Jedes Mal, wenn TeX einen geeigneten Seitenumbruch findet, sendet es den Inhalt dieser Seite zur abschließenden Verarbeitung und führt für jede Seite in Ihrem Dokument diese (drei) Markierungsverarbeitungsschritte aus. Die Verarbeitungsschritte mit den Bezeichnungen 1, 2 und 3 werden im abschließenden Diagramm innerhalb dieses Abschnitts referenziert.

Beachten Sie, dass:

* bevor die erste Seite verarbeitet wurde, wurden alle drei globalen Markierungsvariablen `\botmark`, `\topmark` und `\firstmark` auf leer (NULL) initialisiert worden.
* die Endwerte von `\botmark`, `\topmark` und `\firstmark` am Ende der *vorherigen* Seite bestimmt werden, werden zu den (Eingabe-)Werten für die Verarbeitung der *aktuellen* Seite — der gerade verarbeiteten.

Die folgenden Codefragmente sind ***Pseudocode*** aus dem Quellcode tatsächlicher TeX-Engines abgeleitet (zusammengefasst). Ziel ist es, eine knappe Codezusammenfassung bereitzustellen, die hilft, die wesentlichen beteiligten Prinzipien zu demonstrieren.

**Schritt 1: Prüfung vor dem Inhalt** Bevor TeX den tatsächlichen Inhalt der aktuellen Seite durchsieht, prüft es, ob der aktuelle `\botmark` Wert — d. h. das Ergebnis der *vorherigen* Seite — leer (NULL) ist:

```latex
if(\botmark != NULL)
{
   \topmark = \botmark;
   \firstmark= NULL;
}
```

Bei diesem Test gilt, wenn `\botmark` (von der *vorherigen* Seite) *nicht* leer ist:

* `\topmark` für die *aktuellen* Seite wird auf den *vorherigen* Seiten- `\botmark` Wert
* `\firstmark`, für die *aktuellen* Seite (die gerade verarbeitet wird), auf leer (NULL) gesetzt: Gehen Sie für diese Seite davon aus, dass es keine `\mark` Knoten gibt.

Beachten Sie, dass dieser Test durchgeführt wird *einmal* für jede verarbeitete Seite.

**Schritt 2: Inhaltsdurchlauf** Als Nächstes durchläuft TeX den Seiteninhalt; zu diesem Durchlauf gehört unter anderem das Suchen nach `\mark` Knoten:

```latex
if(type(node)==mark_node)
{
   if(\firstmark==NULL)
   {
      \firstmark=node(text);
   }
   \botmark= node(text);
}
```

Dieser Test wird auf jeden Markierungsknoten angewendet, der sich innerhalb der aktuellen Seite befindet. Der vorherige Test (Schritt 1 oben) könnte `\firstmark` auf leer gesetzt haben, sodass die erste in der aktuellen Seite gefundene Markierung zum Wert von `\firstmark` und `\botmark`. Jeder *nachfolgende* `\mark` während der Ausführung dieser Schleife erkannte Knoten den Wert von `\firstmark`, weil es nicht mehr leer (NULL) ist, sondern `\botmark` wird aktualisiert — denn genau dafür ist `\botmark`: um das zuletzt gesehene `\mark` Knoten dieser Seite zu speichern.

**Schritt 3: Prüfung nach dem Seiteninhalt** Nachdem TeX den Seiteninhalt durchlaufen hat, wendet es den folgenden, abschließenden Test an, der ebenfalls einmal pro Seite durchgeführt wird:

```latex
if((\topmark != NULL)&&(\firstmark==NULL))
{
	\firstmark= \topmark;
}
```

* Wenn `\topmark` nicht leer (NULL) ist, wissen wir aus Schritt 1, dass `\botmark` für die vorherige Seite nicht leer (NULL) war.
* Wenn `\firstmark` immer noch leer ist, dann haben wir keine `\mark` Knoten gesehen, weil der Test in Schritt 2 nicht ausgelöst wurde; folglich, `\firstmark` wird auf den Wert von `\topmark` gesetzt, was auch der Wert von `\botmark` von der vorherigen Seite ist.

Nach der sequenziellen Anwendung dieser drei Schritte für alle 6 Seiten unseres Beispiels werden die Werte von `\botmark`, `\topmark` und `\firstmark` anhand der im folgenden Diagramm gezeigten Übergänge abgeleitet, wobei:

* hellblaue abgerundete Rechtecke die endgültigen Werte der Markierungsvariablen für jede Seite sind
* hellgraue abgerundete Quadrate Zwischenwerte darstellen, die während der Verarbeitung entstehen
* beschriftete Pfeile Änderungen der Werte der Markierungsvariablen gemäß den Schritten 1, 2 oder 3 im obigen Diagramm darstellen — oder dass ein Wert durch keinen der Schritte geändert wurde; beschriftet mit „keine Änderung“.

Das folgende Diagramm zeigt, wie die drei Fragmente des Pseudocodes die endgültigen Werte von `\botmark`, `\topmark` und `\firstmark` erzeugen, die in der Tabelle auf Seite 258 des TeXbook aufgeführt sind.

![Ein Übergangsdiagramm als Ergänzung zum Beispiel von Seite 258 des TeXbook, das interne Übergänge zeigt, während den globalen Markierungsvariablen ihre Werte zugewiesen werden](/files/0009af45197f0c107ee504dd20f592df89aa17b8)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/de/ausfuhrliche-artikel/23-how-does-latex-typeset-headers-and-footers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
