> 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# Eine neue Artikelreihe: TeX-Tokens und verwandte Konzepte – aber warum (und wie)?

Dieser einleitende Artikel soll erklären, warum diese Serie geschrieben wurde, was ich zu erreichen hoffe, und Hintergrundinformationen zu den Techniken liefern, die verwendet werden, um TeX-Tokens durch Beobachtung des Innenlebens einer TeX-Engine zu erkunden. Diese Artikelseite ist außerdem dafür gedacht, die Links zu allen Artikeln der Serie zu enthalten, und wird aktualisiert, um diese Links bereitzustellen, sobald jeder neue Artikel veröffentlicht wird.

### Links zu den Artikeln

Jeder Artikel wird eine Reihe von Links zu anderen Artikeln in dieser Serie enthalten.

* [Was ist ein „TeX-Token“?](/latex/de/ausfuhrliche-artikel/53-what-is-a-tex-token.md)
* [Was ist eine „TeX-Tokenliste“?](/latex/de/ausfuhrliche-artikel/54-what-is-a-tex-token-list.md)

## Hintergrund zu dieser Artikelserie

Die Motivation, diese Reihe von Artikeln zu schreiben, entstand durch das Lesen von Material über TeX, das viele von TeXs Aktivitäten mithilfe des Konzepts der „Tokens“ zusammen mit TeXs „Tokenisierungsprozess“, „Tokenlisten“ und verwandten Konzepten wie „Makroexpansion“ und „expandierbaren Befehlen“ erklärte. Wann immer ich auf TeX-bezogene Erklärungen in Form von „TeX-Tokens“ stieß, kam mir dieselbe Frage in den Sinn: Was genau, *ist* ist ein TeX-Token? Das musste ich herausfinden.

Der Umfang und Inhalt des ersten Artikels, [Was ist ein „TeX-Token“?](/latex/de/ausfuhrliche-artikel/53-what-is-a-tex-token.md), ist seiner Natur nach ziemlich „nah an der Hardware“, wie Programmierer sagen würden, und es besteht kein Zweifel, dass „TeX-Tokens“ als ein recht esoterisches Thema gelten könnten, über das man schreibt: also wozu die Mühe? Letztlich vertritt man die Auffassung — oder macht vielleicht einen Vertrauensvorschuss —, dass sich auch andere Menschen mit demselben Thema den Kopf zerbrochen haben und dass Raum für einen oder zwei Artikel besteht, um einige Lücken zu füllen. Mein Ziel ist es, einige nützliche Hintergrunderklärungen zu liefern, die anderes Material ergänzen können, das Sie vielleicht lesen, und die hoffentlich dazu beitragen, einige wichtige Konzepte besser zu verstehen, die beim Erlernen von TeX sowie beim Erkunden von Makros und Programmierung auftauchen.

Offensichtlich können wir im Rahmen von Blogartikeln nur an der Oberfläche kratzen — es ist schlicht nicht praktikabel, zu versuchen, alle wesentlichen Themen zu erklären oder in die trübsten Gewässer vorzudringen. Notgedrungen werde ich beträchtliche Details auslassen und auf dem schmalen Grat zwischen Übervereinfachung und dem Treiben von Analogien bis zum Zerreißpunkt balancieren.

„Schreibe Artikel, die du selbst gern gelesen hättest“ ist ein nützlicher Leitfaden, und ich habe mich beim Schreiben dieser Serie nach Kräften bemüht, ihn anzuwenden.

## Nachdem die Frage gestellt ist, wie geht es jetzt weiter?

Die unmittelbare Herausforderung war klar: Wie findet man etwas über TeX-Tokens heraus, da solche Details (Tokens, Tokenisierung usw.) tief im Softwarecode von TeX-Engines verborgen sind — man soll sich eigentlich nicht darum kümmern, es sei denn, natürlich, man interessiert sich tatsächlich für diese Details.

Ein Weg, diese Fragen zu untersuchen, besteht darin, zu versuchen, TeXs ursprünglichen Quellcode in [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—durch das Ausführen von [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) zu lesen, um die TeX-Dokumentation zu extrahieren — oder indem man ein Exemplar des Buches kauft [Computers & Typesetting, Band B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Ich habe mir ein Exemplar des gedruckten Buches gekauft! Es ist natürlich äußerst hilfreich, TeXs Quellcode in Buchform veröffentlicht zu haben, und es gibt darin selbstverständlich viele nützliche Erklärungen. Allerdings ist Knuths TeX in Pascal geschrieben, und natürlich wird der Pascal-Quellcode mithilfe von Knuths Methode des Literate Programming dokumentiert — der Code wird in kleine, mundgerechte Abschnitte präsentiert. Es ist leicht zu erkennen, wie Knuths Ansatz zur Dokumentation bei einer so komplexen Software wie TeX wirklich hilft, aber das Lesen des Buches erfordert doch recht viel Querverweise und Hin-und-her-Blättern.

Obwohl hilfreich, reichte das Buch allein für mich nicht ganz aus, um besser zu verstehen, was passiert, wenn TeX „Tokens“ erzeugt — das Thema, an dem ich besonders interessiert war. Es gibt nur einen Weg, es wirklich herauszufinden: das TeX-Programm bauen, es auf eine kleine TeX-Datei ausführen und buchstäblich dabei zusehen, wie der Code ausgeführt wird, während TeX die Eingabe scannt und liest. Die Details, TeX aus dem Quellcode zu bauen, sind etwas esoterisch — Pascal nach C zu konvertieren —, aber im nächsten Abschnitt gibt es eine kurze Beschreibung zusammen mit einem Link zu einem persönlichen Blogbeitrag, der näher darauf eingeht.

Im Gegensatz zu XeTeX und LuaTeX — die Text im UTF-8-Format verarbeiten und Unicode-Textkodierung unterstützen können — ist Knuths TeX eine 8-Bit-Engine, was bedeutet, dass sie davon ausgeht, dass Eingabezeichen im Bereich von 0 bis 255 liegen. Obwohl dies ein wichtiger Unterschied ist, hat es keinen *wesentlichen* Einfluss auf unsere Diskussion über TeX-Tokens, da wir Themen und Grundsätze behandeln, die allen TeX-Engines gemeinsam sind: Sie stehen im Zentrum der Software.

## Wie kann man TeX-Tokens untersuchen?

Den Weg vom Eingabetext zu TeX-Tokens auseinanderzunehmen, war für mich eine ziemliche Reise — ich gestehe, dass unterschiedlich starke Verwirrung auf dem Weg ein semi-permanenter Begleiter war: TeX ist eine so komplexe Software.

Seit einigen Jahren (etwa seit 2009) kompiliere ich routinemäßig die neueste Version von LuaTeX aus ihrem Quellcode — ein Vorgang, der dank der absolut hervorragenden Art und Weise, wie der Quellcode von LuaTeX verteilt wird, recht unkompliziert ist. Aufgrund dieser Erfahrung wurde ich daran interessiert, besser zu verstehen, wie man Knuths ursprüngliches TeX aus seinem Quellcode baut — ein *sehr* anderes Unterfangen, weil TeX mithilfe von Knuths Methode des Literate Programming geschrieben ist. Dieser persönliche Build von TeX unter Windows, aber unter Verwendung von Open-Source-Compilern und -Werkzeugsätzen, wurde außerhalb der TeX-Live-Distribution vorgenommen und ist ein eigenständiges Projekt. Er erforderte außerdem den Aufbau der Toolchain, die benötigt wird, um `tex.web` in ein C-Programm umzuwandeln, das dann kompiliert und anschließend in einem Debugger ausgeführt werden kann, um zu sehen, was TeX tatsächlich tut, während es die Zeichen der Eingabe verarbeitet.

Knuths ursprüngliches TeX wurde anstelle von pdfTeX, XeTeX oder LuaTeX verwendet, weil ich eine TeX-Version benötigte, die dem gedruckten Quellcode im Buch TeX: The Program am nächsten kommt. Dieses Buch wurde erstmals 1986 veröffentlicht, und obwohl TeX seitdem einige Aktualisierungen erfahren hat, ist die neueste Version von TeX (3.14159265, veröffentlicht im Januar 2014) dem im Buch enthaltenen Quellcode sicherlich ausreichend ähnlich.

Im Einklang mit Knuths Methode des Literate Programming wird TeXs Quellcode in einem Textformat namens WEB verteilt: eine Mischung aus TeX-Dokumentation und Pascal-Quellcode. Die Grundidee ist, dass man zwei Dienstprogramme namens TANGLE und WEAVE verwendet, die WEB-Dateien verarbeiten, um entweder die TeX-Dokumentation oder den Pascal-Quellcode zu extrahieren:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) extrahiert den Pascal-Quellcode aus einer WEB-Datei
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) extrahiert die TeX-Dokumentation aus der WEB-Datei

Bevor Sie jedoch den Pascal-Quellcode extrahieren, müssen Sie Knuths `tex.web` Datei vorverarbeiten, um eine Reihe von Änderungen anzuwenden, die die Umwandlung von TeXs Pascal-Code in C-Code mithilfe eines Prozesses namens Web2C ermöglichen. Dieser Vorverarbeitungsschritt wird als *Anwenden von Änderungsdateien*.

Knuths ursprüngliche Code-Datei (tex.web) darf in keiner Weise direkt verändert werden; stattdessen wenden Sie Änderungen mithilfe sogenannter Änderungsdateien (Erweiterung `.ch`) an, die die gewünschten Änderungen für die Haupt- `.web` Datei enthalten — wie zum Beispiel `tex.web`. Änderungsdateien werden mit Knuths ursprünglichem Quellcode — unter Verwendung eines weiteren Hilfsprogramms namens TIE — zusammengeführt, um eine Datei zu erzeugen, die etwa `mytex.web` heißt, welche Sie mit TANGLE verarbeiten, um den Pascal-Code in `mytex.pas`. Sobald Sie eine geeignete Pascal-Quelldatei haben, können Sie die abschließenden Schritte im Web2C-Prozess anwenden, um sie in eine C-Quelldatei umzuwandeln, die Sie zu einem ausführbaren TeX-Programm kompilieren können. Wenn Sie über den recht verschlungenen Web2C-Konvertierungsprozess lesen möchten, gibt es weitere Details auf der [persönlichen Blogseite des Autors](http://www.readytext.co.uk/?p=2529).

Das Endergebnis ist ein TeX-Programm, das mit der kostenlosen und hervorragenden [Eclipse-IDE für C/C++](http://www.eclipse.org/home/index.php) ausgeführt werden kann, um TeXs Quellcode (in C) schrittweise durchzugehen und zu beobachten, was passiert, während er Ihre Eingabe Zeichen für Zeichen scannt. Es ist gewiss nicht die unterhaltsamste Beschäftigung, da der C-Code maschinell erzeugt ist und an manchen Stellen äußerst schwer zu verfolgen ist (TeXs Quellcode verwendet sehr großzügig GOTO-Anweisungen und globale Variablen). Das Buch TeX: The Program ist nach wie vor von unschätzbarem Wert, um sich im C-Quellcode zurechtzufinden, auch wenn das Buch TeXs Quellcode in wunderschön gesetztem Pascal-Code enthält.

Zum Abschluss der Diskussion hier ein Beispiel-Screenshot, der zeigt, wie TeX über die Eclipse-IDE ausgeführt wird, wobei die Ausführung an der Funktion `getnext()`angehalten ist — die im Zentrum von TeXs Token-Erzeugungsprozessen steht.

![Screenshot, der zeigt, wie TeX über die Eclipse-IDE ausgeführt wird](/files/9572499a566ff79b76be0d449e8b1e7af0813fb9)

Schrittweises Durchgehen von TeXs C-Quellcode mit der Open-Source-Eclipse-IDE für C/C++.

## Fazit und ein Dankeschön

Das Schreiben des ersten Artikels und das Ausarbeiten von Ideen für künftige Blogbeiträge in der Serie war sicherlich recht zeitaufwendig. Ich bin John Hammersley und Mary Anne Baynes bei Overleaf außerordentlich dankbar für ihre Unterstützung dieser Serienidee und dafür, dass sie mir die für zusätzliche Hintergrundrecherchen erforderliche Zeit eingeräumt haben. Ich hoffe, dass diese Artikelserie Themen von allgemeinem Interesse erfolgreich identifiziert und behandelt und sich für diejenigen, die sie lesen, als wertvoll erweist.


---

# 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.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.
