LaTeX-Satz als Programmiersprache
LaTeX ist ein System für den Schriftsatz von Dokumenten, das die Vorstellung von „Was-du-siehst-ist-was-du-bekommst“ durch Standardideen aus herkömmlichen Programmiersprachen ersetzt. Mark Harman demonstriert die Leistungsfähigkeit dieser Vererbung.
Jeder, der schon einmal einen What-You-See-Is-What-You-Get (WYSIWYG)-Editor, ein Textverarbeitungsprogramm oder ein DTP-Paket benutzt hat, wird wahrscheinlich zwei Frustrationen erlebt haben:-
WYSIWYG scheint immer eine Lüge zu sein: Was man sieht, ist dem, was man bekommt, ziemlich ähnlich, oder was man sieht, ist fast immer das, was man bekommt, oder was man sieht, wäre das, was man bekäme, wenn der Drucker die richtigen Schriftarten hätte, aber was man sieht, ist selten genau das, was man bekommt.
WYSIWYG ist einschränkend Angenommen, Sie können nicht sehen, was Sie wollen? Was du siehst, ist das, was du bekommst, hat die zusätzliche und stillschweigende Implikation, dass du das, was du nicht sehen kannst, auch nicht bekommen kannst. Wie oft wollten Sie schon, dass etwas etwas anders aussieht (oder vielleicht ganz anders), aber Ihr Editor lässt es nicht zu?
LaTeX (ausgesprochen Lateck) ist ein Schriftsatzsystem, das nicht dem WYSIWYG-Ansatz folgt. Stattdessen ist es von Programmiersprachen inspiriert. Es erbt alle Vorteile der Programmiersprachen und einige ihrer Nachteile. Anstatt ein Dokument am Bildschirm zu erstellen (der WYSIWYG-Ansatz), ist ein LaTeX-Dokument ein Programm, das dem LaTeX-System mitteilt, wie es das Dokument erstellen soll. Das Programm wird mit Hilfe eines LaTeX-Compilers kompiliert, um ein Dokument zu erzeugen, das gedruckt oder betrachtet werden kann.
Das mag für jemanden, der mit dem WYSIWYG-Ansatz vertraut ist, etwas seltsam klingen, aber jeder, der die Leistungsfähigkeit und Flexibilität einer höheren Programmiersprache genießt (oder schätzt), wird bald feststellen, dass LaTeX einfach eine bessere Art ist, Dokumente zu gestalten.
In diesem Artikel werde ich ein wenig die LaTeX-Sprache erklären, genug, um Ihnen zu ermöglichen, ein kostenloses LaTeX-System herunterzuladen und einige normale Dokumente zu schreiben. Ich werde nicht die Zeit haben, alle Funktionen von LaTeX zu behandeln (das würde ein ganzes Buch in Anspruch nehmen), aber ich hoffe, dass ich Ihnen ein Gefühl dafür vermitteln kann, dass das Schreiben eines Dokuments mit LaTeX eine ähnliche Tätigkeit sein kann wie das Schreiben eines Programms.
Eine einfache LaTeX-Quelldatei
Abbildung 1 enthält eine einfache LaTeX-Quelldatei. Die erste Zeile ist ein vordefinierter LaTeX-Befehl. Alle Befehle beginnen mit einem Backslash-Zeichen. Der Befehl in der ersten Zeile legt die globalen Eigenschaften des zu setzenden Dokuments fest. Der Dokumentstil article ist der Stil, der für einen kurzen Artikel verwendet wird. Andere Stile sind book, report, thesis und so weiter. Jede Dokumentvorlage ändert globale Parameter, die das Layout Ihres Dokuments beschreiben. In der Buchumgebung werden beispielsweise laufende Kopfzeilen erzeugt, die den Kapiteltitel und den Autor auf abwechselnden Seiten angeben.
Wie alle guten Programmiersprachen ist all dies natürlich vollständig konfigurierbar. Doch wie bei den meisten Programmiersprachen gilt auch hier: Je mehr Flexibilität Sie wünschen, desto mehr müssen Sie über die zugrunde liegende Programmiersprache wissen. Glücklicherweise führen die Standardeinstellungen für alle LaTeX-Umgebungen zu sehr ansprechenden Ergebnissen, so dass es möglich ist, weit zu kommen, ohne allzu viel über die zugrunde liegende Sprache wissen zu müssen. Was Sie erhalten, ist wahrscheinlich das, was Sie wollen, und wenn nicht, dann können Sie es zumindest ändern.
Der Text des Dokuments selbst ist in den Befehlen \begin{document} … \end{document}, \begin{} und \end{} sind Befehle, die eine Umgebung öffnen und schließen. Alle Dokumente (und Fragmente von Dokumenten) werden innerhalb einer Umgebung gesetzt. Wir können auch Umgebungen verschachteln, wie wir später sehen werden.
Leerzeichen sind für LaTeX unwichtig; ein Leerzeichen ist so gut wie hundert. Neue Zeilen können auch an beliebiger Stelle eingefügt werden, aber zwei oder mehr neue Zeilen werden verwendet, um den Punkt zu kennzeichnen, an dem ein Absatz endet und ein anderer beginnt. Wenn Sie das endgültige Dokument ausdrucken, richtet LaTeX den Text links- und rechtsbündig aus (und fügt Bindestriche ein, wo ein reiner Blocksatz zu einer unschönen Ausgabe führen würde).
Ein umfangreiches Dokument besteht in der Regel aus einer Reihe von Abschnitten, die wiederum Unterabschnitte enthalten können. Ein neuer Abschnitt wird in LaTeX mit dem Befehl \section und ein neuer Unterabschnitt mit dem Befehl \subsection eingefügt. Der LaTeX-Quellcode in Abbildung 2 beschreibt ein Dokument mit zwei Abschnitten, deren Titel Einleitung und Begründung lauten. Beachten Sie, dass wir im Quellcode den Abschnitten keine Abschnittsnummer geben müssen. LaTeX wird dies für uns tun, wenn es das Dokument kompiliert. Die Einleitung ist also Abschnitt Nummer 1 und die Begründung ist Abschnitt Nummer 2. Wenn wir die Reihenfolge, in der die beiden Abschnitte vorkommen, vertauschen (durch Ausschneiden und Einfügen des Quellcodes), dann wird die Begründung zu Abschnitt 1, während die Einleitung automatisch zu Abschnitt 2 wird.
Eine wichtige Frage stellt sich nun: Wie kann ich einen Querverweis von einem Abschnitt zum anderen herstellen? Nehmen wir zum Beispiel an, ich möchte im Abschnitt „Begründung“ auf den Abschnitt „Einleitung“ verweisen. Die Art und Weise, wie dies erreicht wird, veranschaulicht den ersten Vorteil, den wir aus der Arbeitsweise von LaTeX ziehen.
Symbolische Referenzen
Da eine LaTeX-Quelldatei ein Programm ist, können Sie symbolische Namen verwenden, um auf Teile des Dokuments zu verweisen. Dies macht Querverweise zu einem Vergnügen, da der Querverweis eine logische Einheit ist, die sich auf einen benannten Teil des Dokuments bezieht. Wenn dieser benannte Teil des Dokuments verschoben werden soll, müssen wir ihn nur neu kompilieren.
Um einen symbolischen Verweis einzuführen, verwenden wir den Befehl \label{}, und um auf ihn zu verweisen, verwenden wir den Befehl \ref{}. Abbildung 3 veranschaulicht dies. \label{intro} führt einen symbolischen Namen, label, ein, dessen Wert vom Kontext abhängt, in dem der Befehl \label erscheint. In diesem Fall, da der Befehl \label im ersten Abschnitt des Dokuments verwendet wird, ist der Wert, der intro zugewiesen wird, 1. Der Befehl \ref{} erzeugt einfach den Wert des Labels. Wenn ich nun die Einleitung an eine neue Stelle verschiebe, zum Beispiel nach dem Abschnitt Rationale, ändert sich der Wert von intro auf 2, und der Querverweis in Rationale verweist somit auf die neue Stelle der Abschnittseinleitung.
Dieser Schreibstil zwingt uns, das Dokument auf einer logischen Ebene zu betrachten und nicht auf der physischen Ebene. Es wäre töricht, so zu schreiben, wie wir es vorhin in Abschnitt \ref{intro} gesehen haben, denn wir könnten das Etikett intro an eine Stelle nach dem Verweis verschieben. Anstatt unser Dokument als einen Monolithen von Text in einer bestimmten Reihenfolge zu betrachten, sehen wir es auf einer höheren Abstraktionsebene als eine Sammlung von Abschnitten, die wir frei verschieben können. Wir können sogar Abschnitte aus einem Dokument in einem anderen wiederverwenden, und solange unsere symbolischen Namen eindeutig sind, werden wir feststellen, dass alle Querverweise korrekt funktionieren.
Einige weitere Umgebungen
LaTeX hat viele nützliche vordefinierte Umgebungen. Nehmen wir an, wir wollen eine Folge von Punkten mit Aufzählungszeichen erzeugen. Der Quellcode in Abbildung 4 erzeugt ein Dokument, in dem die drei Hauptzustände der Materie aufgelistet sind, einer pro Zeile und jeweils mit einem Aufzählungszeichen versehen. In vielerlei Hinsicht ähnelt die LaTeX-Methode zur Gestaltung eines Dokuments der HTML-Methode. Zum Beispiel ist die itemize-Umgebung ähnlich wie die unsortierte Listenumgebung in HTML.
Manchmal wollen wir Elemente in eine sortierte, nummerierte Liste setzen. Dies wird mit der enumerate-Umgebung erreicht. Abbildung 5 zeigt eine verschachtelte Folge von Aufzählungselementen, die die vier geologischen Zeitalter und die darin enthaltenen Perioden beschreiben. LaTeX verwendet für jede Verschachtelungsebene ein anderes Nummerierungssystem (arabische Ziffern für die erste Ebene, alphabetische Zeichen für die zweite Ebene und römische Ziffern für die dritte Ebene). Dies kann, wie alles andere auch, auf Wunsch geändert werden.
Um einen Textteil hervorzuheben, wird er in die em-Umgebung (Hervorhebung) eingeschlossen, so dass wir einfach schreiben: \begin{em} help! \end{em} she cried. um das Wort help (und das darauf folgende Ausrufezeichen) zu betonen.
Prozeduren
In einer konventionellen Programmiersprache gibt die Möglichkeit, Prozeduren zu definieren, dem Programmierer erhebliche Flexibilität. Auch in LaTeX können wir Prozeduren für das Layout von Text definieren. Die einfachste Form einer Prozedur ist eine parameterlose Prozedur. Sie ermöglicht es uns, einen Teil des Quellcodes zu benennen und ihn dann aufzurufen. Nehmen wir an, ich schreibe ein Dokument, in dem ich auf eine Frucht verweisen möchte, aber ich habe mich noch nicht entschieden, ob es ein Apfel, eine Orange oder eine Birne sein soll. Ich könnte eine Prozedur namens fruit einführen und einen beliebigen Obstnamen in den Textkörper einfügen. Wenn ich mich dann endlich entschieden habe, auf welche Frucht ich mich beziehen will, muss ich nur noch den Körper der Prozedur ändern; alle Stellen, an denen die Prozedur aufgerufen wird, berücksichtigen dann automatisch die Änderung ihres Körpers.
In LaTeX wird eine Prozedur als Befehl bezeichnet, und eine neue wird mit dem Befehl \newcommand erzeugt. Befehle werden oft auch als Makros bezeichnet, da LaTeX die Aufrufe zu diesen Prozeduren expandiert, wenn es sie im Textkörper des Dokuments findet. Abbildung 6 veranschaulicht die Verwendung eines einfachen Makros ohne Parameter. Der LaTeX-Quelltext in dieser Abbildung erzeugt beim Kompilieren den Text Der erste Apfel, der erscheint, wird der erste Apfel sein, den ich essen werde.
Ganz ehrlich, dies könnte man vielleicht einfacher mit einem WYSIWYG-Textverarbeitungsprogramm erreichen, indem man einfach eine Suche und Ersetzung durchführt. (Das hätte natürlich nicht funktioniert, wenn der Satz als erstes \Fruit is the apple of my eye erschienen wäre!) Dies ist jedoch nur ein einfaches Beispiel dafür, was wir mit LaTeX-Makros machen können. Sie kommen erst richtig zur Geltung, wenn wir sie mit Parametern ausstatten.
Parameter
Angenommen, ich schreibe ein Dokument über die Handhabung von Arrays. Ich möchte vielleicht einen Algorithmus beschreiben, um das größte Element eines Arrays zu finden. Um das Dokument allgemeiner zu gestalten und das Abtippen großer Teile zu ersparen, könnte ich zwei Versionen erstellen, die jeweils für eine bestimmte Programmiersprache spezifisch sind, z.B. Basic und C. Durch die Verwendung von Befehlen kann ich die besondere Syntax von Arrays vermeiden oder zumindest die syntaktischen Unterschiede in einem einzigen Befehl erfassen, was die Anpassung meines Dokuments an verschiedene Programmiersprachen wesentlich erleichtert.
Abbildung 7 veranschaulicht dies. In der Befehlsdefinition für \lookup wird dem LaTeX-Compiler mitgeteilt, dass der Befehl zwei Parameter benötigt, wobei der erste als #1 und der zweite als #2 bezeichnet wird. Bei einem Befehlsaufruf werden die Parameter nacheinander in geschweiften Klammern angegeben. So ergibt der Aufruf \lookup{S}{2} den Text S(2). Dies ist die Basic-Version des Befehls \lookup. Ersetzen wir ihn durch die Version in Abbildung 8, so erhalten wir dasselbe Dokument, allerdings mit Array-Referenzen in eckigen Klammern. Dies ist die C-Version des Dokuments. Beachten Sie, dass der Unterschied zwischen den beiden LaTeX-Quelldokumenten genau zwei Zeichen beträgt, nämlich die zwei Zeichen, die den Unterschied zwischen der Array-Referenzierung in Basic und C ausmachen.
Wie bei Prozeduren in Programmiersprachen ist es möglich, eine Prozedur aus dem Rumpf einer anderen aufzurufen und das Ergebnis eines Prozeduraufrufs als aktuellen Parameter für eine andere zu verwenden. So können wir zum Beispiel \lookup{A}{\lookup{B}{1}} schreiben, was entweder den Text A(B(1)) oder A] ergibt, je nachdem, ob wir die Basic- oder die C-Version des \lookup-Befehls verwenden.
Variablen
LaTeX verfügt über eigene Variablen, mit denen wir einfache arithmetische Berechnungen durchführen können (fortgeschrittenere Formen der Arithmetik sind möglich, aber für den Schriftsatz ist normalerweise nur die Addition erforderlich). Ich werde zwei einfache Beispiele für die Verwendung von Variablen betrachten, die Programmierern vertraut sein werden: die Zählervariable und die Flaggenvariable.
Angenommen, wir wollen eine Folge von nummerierten Punkten in ein Dokument einfügen. Wir können eine Zählervariable verwenden, um jeden Punkt zu nummerieren, und ein paar einfache Befehle schreiben, um die Nummerierung zu steuern. Abbildung 9 veranschaulicht dies. Der Zähler wird mit dem Befehl \newcounter deklariert. Mit dem Befehl \setcounter wird er auf einen bestimmten Wert gesetzt. Der Befehl \point wird verwendet, um die aktuelle Punktnummer auszudrucken und den Zähler zu schrittweise zu erhöhen (um einen Punkt zu seinem Wert hinzuzufügen). Der Befehl \the<name>, für einen Zähler <name>, bewirkt, dass der Wert der Variablen ausgedruckt wird. Dieser Befehl kann für jede Variable verwendet werden, nicht nur für solche, die der Benutzer eingeführt hat, so dass zum Beispiel \thesection den aktuellen Wert der Variable section ausgibt. In Abbildung 9 verwenden wir den Befehl \point, um drei Punkte auszudrucken. Eine nette Eigenschaft dieses Ansatzes ist, dass wir die Reihenfolge, in der die Punkte auftreten, variieren können und die Nummerierung sich entsprechend ändert.
Nun wollen wir sehen, wie wir Variablen als Flaggen verwenden können, um auszuwählen, welcher Text in einem Dokument erzeugt wird. Wie wir sehen werden, ermöglicht die Kombination von Flags und Makros das Schreiben sehr allgemeiner Dokumente, die einfach durch die Wahl eines geeigneten Wertes für das Flag instanziiert werden können. Betrachten wir noch einmal das Problem, ein Dokument über Arrays zu schreiben, in dem wir zwei Formen des Befehls \lookup benötigen, eine für Basic und eine für C. Es wäre besser, wenn wir in unserem LaTeX-Quelltext ein Flag verwenden könnten, um anzugeben, ob die Sprache C oder Basic sein soll. Wir müssten dann nur vor dem Kompilieren des Dokuments dem Flag den richtigen Wert zuweisen. Abbildung 10 veranschaulicht dies.
Zunächst muss die Option ifthen in die documentstyle-Deklaration aufgenommen werden. Dadurch können wir später den Befehl \ifthenelse verwenden. Als nächstes deklarieren wir eine Zählervariable, language, die auf 1 gesetzt wird, wenn die Sprache Basic sein soll, und auf 0, wenn es C sein soll. Das %-Symbol wird von LaTeX für Kommentare verwendet; jeder Text, der nach einem %-Symbol (und vor dem Ende der Zeile) erscheint, wird vom LaTeX-Compiler ignoriert. Als Nächstes setzen wir den Zähler mit dem Befehl \setcounter{language}{1} auf 1, so dass der Text, den wir produzieren werden, in diesem Fall für Basic spezialisiert ist. Diese Spezialisierung wird mit der geänderten Version des Befehls \lookup erreicht. Die neue Version von \lookup verwendet den eingebauten Befehl \ifthenesle, um den Wert der Sprachvariablen zu prüfen. Das Format eines \ifthenelse-Befehls ist \ifthenelse{<test>}{<then_branch>}{<else_branch>}. Sie verhält sich genau wie eine if-Anweisung in einer herkömmlichen Programmiersprache. Wenn <test> als wahr ausgewertet wird, wird der Text im <dann_Zweig> erzeugt, wenn falsch, wird der Text im <else_Zweig> erzeugt.
Mit diesem Flag könnten wir viele Befehle schreiben, von denen jeder den Text für eine bestimmte Art von Anweisung erzeugt, wobei die Sprache vom Wert der Flag-Zählervariable abhängt. Auf diese Weise könnten wir ein allgemeines Dokument über Programmierung schreiben und einfach das Kennzeichen entsprechend setzen, um die gewünschte spezielle Version des Dokuments zu erzeugen.
Abbildung 10 zeigt, wie wir dies tun könnten. Wir definieren Befehle, die Basic- oder C-Syntax für Array-Lookup (unter Verwendung des Makros \lookup, wie oben beschrieben), Array-Aktualisierung und, etwas aufwändiger, einen Befehl, der die entsprechende Syntax für eine for-Schleife erzeugt.
Der Unterschied zwischen einer for-Schleife in C und in Basic ist weitgehend syntaktisch, und wir können die Flexibilität von LaTeX nutzen, um diesen syntaktischen Details zu entgehen. Der Befehl \forloop verwendet die Flaggenzähler-Sprache, um zu entscheiden, ob die vier Elemente der Schleife im Basic- oder C-Stil angeordnet werden sollen. Dies ermöglicht es uns, einen Text über die Initialisierung von Arrays und Schleifen zu schreiben, ohne entscheiden zu müssen, auf welche Sprache sich das Zieldokument beziehen wird.
Beachten Sie, dass in der C-Version der for-Schleifensyntax die geschweiften Klammern, die die Anweisungen des Schleifenkörpers einschließen, als \{ … \} und nicht als { … }. Das liegt daran, dass die Symbole für geschweifte Klammern für LaTeX bereits eine Bedeutung haben. Damit LaTeX geschweifte Klammern ausgibt, wird ihnen ein Backslash vorangestellt.
In Abbildung 10 haben wir die Zählersprache auf 1 gesetzt, sodass die Ausgabe in Basic erfolgt. Aus dem Quellcode in Abbildung 10 erzeugt LaTeX die Ausgabe in Abbildung 11. Wenn wir ein Dokument erstellen wollen, das dasselbe über C-Arrays aussagt, müssen wir einfach die Zeile \setcounter{language}{1} in \setcounter{language}{0} ändern. So einfach ist das.
Mathematik
LaTeX wird oft (und zu Recht) für die Art und Weise gelobt, in der es den Schriftsatz von komplexer Mathematik ermöglicht. Viele moderne Texte aus den Bereichen Mathematik, Informatik und anderen Natur- und Ingenieurwissenschaften werden mit LaTeX gesetzt.
Mathematischer Text kann entweder inline gesetzt werden, d.h. er erscheint in dem Satz, in dem er geschrieben wird, oder im Anzeigemodus, d.h. er erscheint zentriert in einer eigenen Zeile, die gleichsam angezeigt wird. Alle gängigen mathematischen Symbole und Textformen sind für die Verwendung von Befehlen vorgesehen. Da es LaTeX schon so lange gibt und es von so vielen Mathematikern auf der ganzen Welt entwickelt und verbessert wurde, ist es äußerst unwahrscheinlich, dass es irgendeine Form der mathematischen Ausgabe gibt, für die nicht schon jemand gesorgt hat. Wenn Sie Ihr Bücherregal durchstöbern, werden Sie wahrscheinlich feststellen, dass LaTeX in mehreren Informatik- und Mathematiklehrbüchern erwähnt wird, da es häufig zur Erstellung von Fachbüchern verwendet wird, so dass die Autoren ihren Verlagen druckfertige Kopien zur Verfügung stellen können.
Es gibt auch eine blühende LaTeX-Benutzergemeinschaft, die dafür sorgt, dass all diese wertvollen Informationen gesammelt, gepflegt und aktualisiert werden. Alle LaTeX-Entwicklungen sind vollständig rückwärtskompatibel, so dass Sie sich keine Sorgen machen müssen, dass Ihre Dokumente irgendwie veraltet sind.
Wiederverwendung
Ich schätze, dass es zwischen zwei Tagen und einer Woche dauert, um mit LaTeX produktiv zu werden. Viele Leserinnen und Leser mögen dies im Vergleich zur Einarbeitungszeit bei WYSIWYG-Editoren für inakzeptabel halten. Wenn Sie nur Dokumente wie Briefe und Memos vorbereiten müssen, ist LaTeX wahrscheinlich keine Überlegung wert. Wenn Sie jedoch eine große Menge an Text zu erstellen haben und bereit sind, in ein System zu investieren, das Ihnen letztendlich Monate an Arbeit ersparen könnte, dann könnte LaTeX die richtige Lösung sein.
Einer der nicht greifbaren, aber attraktivsten Vorteile für LaTeX-Benutzer liegt darin, dass LaTeX wie eine gute Programmiersprache die Wiederverwendung unterstützt. Sehr schnell werden Sie eine Reihe von persönlichen Makros erstellen, mit denen Sie Ihre Dokumente nach Ihrem eigenen Geschmack gestalten können. Die Wiederverwendung von Teilen eines Dokuments in einem anderen geht mühelos und nahtlos vonstatten. Diese Nahtlosigkeit ergibt sich aus zwei Aspekten des LaTeX-Ansatzes. Die symbolische Benennung von Teilen eines Dokuments ermöglicht die automatische Aktualisierung von Querverweisen, wenn das Dokument bearbeitet wird. Das Konzept der Umgebung bedeutet, dass ein und derselbe Quelltext in verschiedenen Kontexten unterschiedlich aussehen kann. Dies steht natürlich im direkten Widerspruch zum WYSIWYG-Prinzip, aber das ist die wesentliche Stärke von LaTeX. Viele Fachzeitschriften, Konferenzen und Verlage bieten ihre eigenen LaTeX-Stil-Dateien an, die, wenn sie in eine LaTeX-Quelldatei eingefügt werden, das Dokument automatisch in die für die Veröffentlichung erforderliche Form bringen.
Where to go next
Wenn Sie daran interessiert sind, LaTeX selbst auszuprobieren, können Sie eine (kostenlose) MS-Windows-Version von http://www.eece.ksu.edu/~khc/tex.html erhalten. LaTeX wird standardmäßig auf den meisten UNIX-Plattformen und mit den meisten Linux-Distributionen ausgeliefert, wenn Sie also eine dieser Plattformen benutzen, versuchen Sie man latex einzugeben. Es gibt eine FTP-Site mit vielen nützlichen LaTeX-Tools, Makros und verwandten Dokumenten unter ftp.tex.ac.uk.
Es gibt zwei unentbehrliche Bücher zum Thema LaTeX-Dokumente schreiben. Beide sind sehr lesenswert und informativ. LaTeX A Document Preparation System von Leslie Lamport (ISBN 0-201-15790-X), beschreibt das grundlegende System und ist ein sehr gutes Buch für den Einstieg. Es enthält genügend Informationen, um sofort die meisten normalen Dokumente zu schreiben. The LaTeX Companion von Mike Goossens, Frank Mittelbach und Alexander Samarin (ISBN 0-201-54199-8) ist ausführlicher und behandelt alle neuen Funktionen, die LaTeX durch das LaTeX2e-Projekt hinzugefügt wurden. Dieses Buch ist nützlich, wenn Sie viele Dokumente mit LaTeX schreiben und die Sprache an Ihren eigenen Geschmack anpassen möchten. Es erklärt, wie man alle möglichen exotischen Effekte erzielen kann, wie z. B. das Anordnen von Text in einer Herzform (vielleicht nützlich für bestimmte Dokumente, die kurz vor dem 14. Februar geschrieben wurden). Beide Bücher sind bei Addison-Wesley erschienen.
Logisch ist besser
Das LaTeX-System zur Vorbereitung von Dokumenten hat sich im Laufe der Jahre weiterentwickelt und verbessert. Es ist äußerst robust und bietet Funktionen für das Schreiben von Dokumenten nach veröffentlichungsfähigen Standards, die Text und Mathematik enthalten. Ein LaTeX-Dokument wird mit einer Programmiersprache beschrieben, die dem LaTeX-Benutzer alle Möglichkeiten und die Flexibilität einer herkömmlichen Programmiersprache bietet. Der Schreibstil zwingt den Benutzer, Dokumente auf der Ebene ihrer logischen Organisation zu betrachten und nicht auf der Ebene ihrer physischen Erscheinung. Dies ist anfangs etwas frustrierend, hat aber letztlich viele Vorteile, wie die Unterstützung der Wiederverwendung und die Erstellung allgemeiner Dokumente, die mehrere physische Instanzen haben können.
Mark Harman ist Forschungsdirektor und amtierender Leiter der School of Informatics and Multimedia Technology an der University of North London (http://www.unl.ac.uk/~mark/welcome.html). Er kann per E-Mail unter [email protected] oder per Post an Mark Harman, Project Project, School of Informatics and Multimedia Technology, University of North London, Holloway Road, London N7 8DB kontaktiert werden.
Abbildung 1 Ein einfaches LaTeX-Dokument.
\documentstyle{article}
\begin{document}
hello world
\end{document}
Abbildung 2 Abschnitte
\documentstyle{article}
\begin{document}
\section{Introduction}
Dies ist ein recht kurzes Dokument und dies ist seine Einleitung.
\section{Begründung}
Das Dokument ist so kurz, weil es einfach und beispielhaft ist.
\end{Dokument}
Abbildung 3 Symbolische Verweise
\documentstyle{article}
\begin{Dokument}
\section{Einführung}
\label{intro}
Dies ist ein recht kurzes Dokument und dies ist seine Einführung.
\section{Rationale}
Eine kurze Einführung in dieses Dokument findet sich in section \ref{intro}.
\end{document}
Abbildung 4 Die Itemize Umgebung.
\begin{itemize}
\item Solid
\item Liquid
\item Gas
\end{itemize}
Abbildung 5 Die enumerate Umgebung.
\begin{enumerate}
\item Känozoikum
\begin{enumerate}
\item Quartär
\item Tertiär
\end{enumerate}
\item Mesozoikum
\Anfang{Aufzählung}
\Eintrag Kreidezeit
\Eintrag Jura
\Eintrag Trias
\Ende{Aufzählung}
Eintrag Paläozoikum
\Anfang{Aufzählung}
\Zeichen Perm
\Zeichen Karbon
\Zeichen Devon
\Zeichen Silur
\Zeichen Ordovizium
\Zeichen Kambrium
\end{aufzählen}
\item Präkambrium
\end{aufzählen}
Abbildung 6 Parameterlose Befehle.
\documentstyle{article}
\newcommand{\fruit} { apple }
\begin{document}
Die erste \fruit, die erscheint, wird die erste \fruit sein, die ich essen werde.
\end{document}
Abbildung 7 Parameter: Grundversion.
\documentstyle{article}
\newcommand{\lookup} { #1(#2) }
\begin{document}
Um das größte Element des Arrays A zu finden, speichern Sie das erste Element, \lookup{A}{0}, in der Variablen b. Als Nächstes geben Sie eine Schleife ein, die durch die Variable i gesteuert wird und bei 1 beginnt und bis zum Ende des Arrays fortschreitet. An jedem Punkt der Schleife vergleichen Sie das Element i, \lookup{A}{i}, mit dem Wert in b. Wenn \lookup{A}{i} größer ist als b, dann weisen Sie \lookup{A}{i} b zu.
\end{document}
Abbildung 8 Parameter: C-Version.
\documentstyle{article}
\newcommand{\lookup} { #1 }
\begin{document}
Um das größte Element des Arrays A zu finden, speichern Sie das erste Element, \lookup{A}{0}, in der Variablen b. Als nächstes geben Sie eine Schleife ein, gesteuert durch die Variable i, beginnend bei 1 und fortfahrend bis zum Ende des Arrays. An jedem Punkt der Schleife vergleichen Sie das Element i, \lookup{A}{i}, mit dem Wert in b. Wenn \lookup{A}{i} größer als b ist, dann weisen Sie \lookup{A}{i} b zu.
\end{Dokument}
Abbildung 9 Zählervariablen.
\newcounter{pointnumber}
\setcounter{pointnumber}{1}
\newcommand{\point} { Punkt \diePunktnummer \Schrittzähler{Punktnummer} }
\Punkt
Ein Text, der zu einem der Punkte gehört
\Punkt
Ein Text, der zu einem anderen Punkt gehört
\Punkt
Ein weiterer Punkt
Abbildung 10 Flaggenvariablen.
\documentstyle{article}
\newcounter{language} % auf 1 für Basic und 0 für C gesetzt
\setcounter{language}{1}
\newcommand{\lookup}
{
\ifthenelse{\value{language} = 1} {#1(#2)} {#1}
}
\newcommand{\update}
{
\ifthenelse{\value{language} = 1} {LET #1(#2) = #3} {#1 = #3}
}
% Der Befehl forloop benötigt vier Parameter
% 1. Die untere Grenze der Schleife – ein ganzzahliger oder integraler Ausdruck
% 2. Die obere Grenze der Schleife – ein ganzzahliger oder integraler Ausdruck.
% 3. Die Steuervariable der Schleife – eine ganzzahlige Variable.
% 4. Der Schleifenkörper – eine Folge von Anweisungen.
% Das Flag Zählersprache, wird verwendet, um die Sprache zu bestimmen, in der
% die Syntax der Schleife geschrieben wird.
\neuerBefehl{\fürSchleife}
{
\ifthenelse{\wert{Sprache} = 1}
{
FOR #3 = #1 TO #2
NEXT #3
}
{
for(#3=#1;#3 != #2;#3++)
\{
\}
}
\begin{document}
Um den Wert 10 im Element Nummer 3 im Array A zu speichern, schreiben wir \update{A}{3}{10}.
Um die Elemente 0 bis 10 im Array A mit dem Anfangswert 0 zu initialisieren, können wir eine for-Schleife verwenden, die bei 0 beginnt und bis 10 geht. Dies würde wie folgt geschrieben
\forloop{0}{10}{i}{\update{A}{i}{0}}
\end{document}
Abbildung 11 Das Ergebnis der Kompilierung des LaTeX-Quelltextes in Abbildung 10.
Um den Wert 10 in Element Nummer 3 im Array A zu speichern, schreiben wir LET A(3) = 10.
Um die Elemente 0 bis 10 im Array A mit dem Anfangswert 0 zu initialisieren, können wir eine for-Schleife verwenden, die bei 0 beginnt und bis 10 geht. Dies würde wie folgt geschrieben
FOR i = 0 TO 10
LET A(i) = 0
NEXT i
(P)1997, Centaur Communications Ltd. EXE Magazine ist eine Veröffentlichung von Centaur Communications Ltd. Kein Teil dieses Werkes darf ohne die ausdrückliche Genehmigung von Centaur Communications und des Inhabers des Urheberrechts, sofern es sich um eine andere Partei handelt, ganz oder auszugsweise veröffentlicht werden.
EXE Magazine, St Giles House, 50 Poland Street, London W1V 4AX, email [email protected]