diff options
Diffstat (limited to 'info/german/texbuch/texbuch.tex')
-rw-r--r-- | info/german/texbuch/texbuch.tex | 10230 |
1 files changed, 10230 insertions, 0 deletions
diff --git a/info/german/texbuch/texbuch.tex b/info/german/texbuch/texbuch.tex new file mode 100644 index 0000000000..ef8f413cfe --- /dev/null +++ b/info/german/texbuch/texbuch.tex @@ -0,0 +1,10230 @@ +\documentstyle[11pt,german,twoside,a4,makeidx]{report} +\pagestyle{headings} +\makeindex +% +% Neue Schriften +% +\newfont{\itg}{cmu10 scaled 1000} +\newfont{\ninerm}{cmr9 scaled 1000} +\newfont{\eightrm}{cmr8 scaled 1000} +\newfont{\sevenrm}{cmr7 scaled 1000} +\newfont{\fiverm}{cmr5 scaled 1000} +\newfont{\grossfiverm}{cmr5 scaled 2000} +\newfont{\bigtenrm}{cmr10 scaled\magstep1} +\newfont{\Bigtenrm}{cmr10 scaled\magstep2} +\newfont{\Mf}{cmex10 scaled 1000} +\newfont{\manual}{manfnt scaled 1000} +% +% Ma\ss{}einheit f\"ur Bilder +% +\unitlength1cm +% +\begin{document} +\title{Das kleine\\[1ex] {\Huge\bf \TeX Buch}} +\author{Fritz Cremer} +\date{5.7.1993} +\maketitle +\chapter*{Vorwort} +\section*{Warum dieses Buch?} +Ich habe mich entschlossen dieses Buch zu schreiben, weil in vielen Texten zum +Programm \TeX\ das \TeX book angesprochen wird, es aber kaum ein vern\"unftiges +Buch zu \TeX\ in deutscher Sprache gibt. Au\ss{}erdem wollte ich den Text in der +DF\"U zur Verf\"ugung stellen. Daraus ergaben sich verschiedene Probleme. Zum +einen mu\ss{}te ich die Urheberrechte ber\"uck\-sich\-tigen, die auf dem \TeX book +liegen, zum anderen durfte der Text nicht zu lang werden. Ich habe mich daher +f\"ur folgendes Vorgehen entschlossen. Ich habe das \TeX book nicht einfach +linear \"ubersetzt, das w\"are auch fast nicht m\"oglich, da dieses Buch viel zu +viele Wortspiele u.a.\ enth\"alt. Ich habe vielmehr das \TeX book Abschnitt f\"ur +Abschnitt gelesen und in meinen eigenen Worten wiedergegeben. Dabei konnte ich viel +k\"urzen. So enth\"alt dieser Text keine \"Ubungsaufgaben mehr. Ich habe die +Aufgaben, soweit sie vorkamen mit in den Text eingearbeitet, so da\ss{} keine +Information verloren ging. +\section*{An wen richtet sich das Buch?} +Dieser Text richtet sich an die Benutzer von \TeX\ und nicht so sehr +an die \index{Makro!Design} +Makrodesigner f\"ur \TeX, wenn auch dieses Kapitel keineswegs +ausgenommen wurde. Ich habe mich nur entschlossen die Teile des Buches +wegzulassen, die so speziell auf das Design von Makros ausgerichtet +sind, da\ss{} sie normalerweise nicht von Interesse sein k\"onnen. So fehlt +z.B.\ der Anhang `Dirty tricks', in dem un\"ublicher Gebrauch von Teilen von +\TeX\ beschrieben wird. +\section*{Copyright und \"Ahnliches} +Dieser Text kann beliebig weitergegeben werden und auch in +\index{File!Netze}Filenetzen +vertrieben werden. Ich bitte sogar ausdr\"ucklich darum, da\ss{} dieses Buch +m\"oglichst vielen Mitgliedern der DF\"U zu\-g\"ang\-lich gemacht wird. Die +Rechte an diesem Text bleiben allerdings bei mir. +\section*{Fehler} +Dieser Text entstand im Laufe vieler Monate. Es bleibt nicht aus, da\ss{} +im Verlaufe dieser Zeit bessere und weniger gute Abschnitte +entstanden. Auch werden sich noch etliche Recht\-schreib\-feh\-ler in diesem +Buch befinden. Verbesserungsvorschl\"age und Korrekturhinweise bitte ich +mir zukommen zu lassen. + +\begin{center} +\fbox{\fbox{\parbox{12cm}{ +Wem dieses Buch gef\"allt, der empfehle und kopiere es weiter, +wems nicht gef\"allt, der schweige stille. +}}} +\end{center} + +\vspace*{2cm} +\hspace{\fill}{\bf Fritz Cremer}, S\"udstr. 45, 52064 Aachen, Deutschland +\tableofcontents +\chapter{Einf\"uhrung} +Wenn sie einmal ein Buch durchbl\"attern, dann werden sie feststellen, +da\ss{} es verschiedene \index{Bindestrich} +Bindestriche gibt, je nachdem, ob W\"orter durch +Bindestriche verbunden werden (wie bei Tren-nung-en), ob +\index{Seite!Bereich}Seitenbereiche angegeben werden (Seiten: 2--13), ob +\index{Gedankenstrich}Gedankenstriche +--- ge\-schrie\-ben werden sollen, oder ob in einer mathematischen +\index{Formel!Minuszeichen}Formel ein \index{Minuszeichen} +Minuszeichen auftaucht ($1-2$). + +Auch k\"onnte ihnen auffallen, da\ss{} manche Buchstaben wie {\em ein} +Zeichen aussehen, so z.B.\ die Kombination von `f' und `i', die dann +als `fi' erscheint. Die Kombination von Zeichen zu {\em einem} Zeichen +hei\ss{}t \"ubrigens \index{Ligatur} +{\em Ligatur}. Derartige Ligaturen, werden f\"ur viele +Zeichenkombinationen benutzt, wie z.B.\ f\"ur `ff', `fl' oder `ff'. + +Aber es gibt noch weitere Merkw\"urdigkeiten. Sie finden z.B.\ auf der +Tastatur ihres Com\-put\-ers keine Taste f\"ur ein Paar +\index{Doppelt!Anfuehrungszeichen@Doppelt!Anf\"uhrungszeichen}doppelter +\index{Anfuehrungszeichen@Anf\"uhrungszeichen} +Anf\"uhrungszeichen. Das liegt daran, da\ss{} es es im \index{ASCII} +ASCII-Zeichensatz +keine derartigen Zeichen gibt. Dennoch tauchen in B\"uchern diese +Zeichen ``auf''. In \TeX\ k\"onnen sie das erreichen, indem sie einfach +zweimal ein einfaches Anf\"uhrungszeichen, bzw.\ +\index{Abfuehrungszeichen@Abf\"uhrungszeichen}``Abf\"uhrungszeichen'' +benutzen. Falls es auf ihrer Tastatur kein einfaches Anf\"uhrungszeichen +gibt, k\"onnen sie \"ubrigens auch den Befehl \index{zzzlq@{\tt\char92 lq}} +`\verb|\lq|' f\"ur das linke, +bzw.\ `\verb|\rq|' f\"ur das rechte An\-f\"uhr\-ungs\-zei\-chen benutzen. Sie +m\"ussen in diesem Fall nur ein `\verb|\|' hinter den Befehl schreiben, +wenn dem `\verb|\lq|' oder `\verb|\rq|' ein \index{Leer!Zeichen} +Leerzeichen folgt. Mit: +\begin{verbatim*} +\lq\lq Haken\rq\rq\ +\end{verbatim*} +Erhalten sie: +\begin{quote} +\lq\lq Haken\rq\rq\ +\end{quote} +Der Trick ist nat\"urlich, da\ss{} auch die beiden Anf\"uhrungszeichen zu +einem Zeichen zusammen\-ge\-fa\ss{}t werden, genau wie bei dem `fi'. Da nur +zwei Anf\"uhrungszeichen zusammengefa\ss{}t werden, ergibt die Kombination +von drei Anf\"uhrungszeichen: ```. So kann man also ein einfaches +Anf\"uhrungszeichen innerhalb von einem doppelten schreiben. + +\"Ubrigens, folgendes (`\thinspace``) erreichen sie nicht so einfach, +dazu ist ein weiterer Befehl n\"otig, geben sie: +\index{zzzthinspace@{\tt\char92 thinspace}} +\begin{verbatim*} +`\thinspace`` +\end{verbatim*} +ein, um das gew\"unschte Resultat zu erhalten. + +Schlie\ss{}lich finden sich Zeichen, die {\em untereinandergeschoben} +scheinen. So zu sehen, wenn ein `V' hinter einem `A' steht. Das sieht +dann so: `VA' aus. Dieses Untereinanderschieben nennt man +\index{Kerning}{\em Kerning}. + +Jetzt die gute Nachricht: Mit \TeX\ brauchen sie sich um derartige +Kleinigkeiten nicht mehr zu k\"ummern; die verschiedenen +\index{Bindestrich}Bindestriche, +die \index{Ligatur}Ligaturen und auch das \index{Kerning} +Kerning wird von \TeX\ v\"ollig selbst\"andig +erledigt. Sie k\"onnen sich also ganz auf ihre eigentliche Arbeit, das +Schreiben des Textes konzentrieren. +\chapter{Bis zum ersten Text ...} +\section{\TeX\ kontrollieren} +Die Tastatur ihres Computers bietet viel weniger M\"oglichkeiten, als +sie f\"ur ein \index{Schrift!Stueck@Schrift!St\"uck} +Schriftst\"uck brauchen. Daher mu\ss{} ein Zeichen als +sogenanntes \index{Escape} +{\em Escape}zeichen definiert werden, mit dem sie dann +Befehle, die die Form oder das Aussehen des Textes ver\"andern, oder die +nur ein weiteres Zeichen zur Verf\"ugung stellen. In \TeX\ ist es zwar +prinzipiell m\"oglich jedes Zeichen dazu zu verwenden, \"ublicherweise +wird aber der \index{Gegenschraegstrich@Gegenschr\"agstrich} +Gegenschr\"agstrich, `\verb|\|', dazu verwendet. Der Grund +hierf\"ur ist einfach, dieses Zeichen kommt in normalen Texten sogut wie +nie vor, + +\TeX\ versteht jede \index{Eingabe} +Eingabe, die mit diesem \index{Gegenschraegstrich@Gegenschr\"agstrich} +Gegenschr\"agstrich beginnt +als eine \index{Kontrollsequenz} {\em Kon\-troll\-se\-quenz}. Die Eingabe von: +\index{zzzinput@{\tt\char92 input}} +\begin{verbatim*} +\input neu +\end{verbatim*} +z.B.\ bedeutet, da\ss{} `\verb|\input|' eine \index{Kontrollsequenz} +Kontrollsequenz ist, und +`\verb|neu|' sein \index{Argument} +Argument (Tats\"achlich veranla\ss{}t dieser Befehl \TeX\ +als n\"achstes den \index{File!Einlesen} +File `\verb|neu.tex|' einzulesen und diesen zu be\-ar\-bei\-ten). + +In der Zeile: +\begin{verbatim*} +Neue Eintr\\"age +\end{verbatim*} +findet sich die \index{Kontrollsequenz} +Kontrollsequenz `\verb|\\"|'. Diese sorgt daf\"ur, da\ss{} +\"uber das folgende Zeichen zwei Strichelchen geschrieben werden, das +Ergebnis sieht also so `\"a' aus. + +Im folgenden wird zwischen zwei Arten von \index{Kontrollsequenz} +Kontrollsequenzen +unterschieden. Zum einen die, bei denen hinter dem +\index{Gegenschraegstrich@Gegenschr\"agstrich}Gegenschr\"agstrich +eine Reihe von Buchstaben folgt (Buchstaben sind: `\verb|A...Z|' und +`\verb|a...z|', aber nicht `\verb|0...9|'). Die obige Sequenz +\index{zzzinput@{\tt\char92 input}} +`\verb|\input|' geh\"ort z.B.\ zu dieser Kategorie; sie wird {\em +Kontrollwort} genannt. Zum anderen die, bei denen hinter dem +\index{Gegenschraegstrich@Gegenschr\"agstrich} +Gegenschr\"agstrich nur ein Zeichen folgt, das {\em kein} Buchstabe ist. +Zur letzten Kategorie geh\"ort auch das `\verb|\\"|'. Diese Sequenzen +hei\ss{}en \index{Kontrollzeichen}{\em Kontrollzeichen}. + +Folgt einem Kontrollwort ein \index{Leer!Zeichen} +Leerzeichen, dann wird es ignoriert. +Dieses Leerzeichen dient quasi nur der Begrenzung des Kontrollwortes. +Was nun aber, wenn sie ein Leerzeichen hinter einem Kontrollwort +schreiben wollen? Da \TeX\ mehrere Leerzeichen immer zu einem +zusammenfa\ss{}t, w\"are es falsch einfach zwei, statt des einen +Leerzeichens zu schreiben. Statt dessen gibt es eine +\index{Kontrollsequenz}Kontrollsequenz, +die genau das gew\"unscht Ergebnis bereith\"alt:\footnote{Das Zeichen {\tt\char32} +bezeichnet dabei ein Leerzeichen.} +\begin{quote} +{\tt\char92\char32} +\end{quote} +Da, wie schon eben gesagt, \TeX\ mehrere Leerzeichen immer zu einem +zusammenfa\ss{}t, m\"u\ss{}ten sie, wollten sie drei Leerzeichen hinter einem +Kontrollwort erzeugen schon: `\verb*|\ \ \ |' schrei\-ben, um das +Gew\"unschte zu erhalten. + +\"Ubrigens, statt des \index{Leer!Zeichen} +Leerzeichens kann auch ein Tabulatorzeichen, oder +ein Zeilentrenner stehen, da \TeX\ letztere in Leerzeichen umwandelt. + +Sie fragen sich sicher schon, wieso man hinter einem Kontrollwort ein +Leerzeichen schrei\-ben will? Nun, die Antwort ist ganz einfach: Um z.B. +die Zeichenfolge `\TeX' zu erhalten, gibt es den Befehl: +`\verb|\TeX|'. Wenn sie nun einen Satz wie: +\begin{quote} +\TeX\ gef\"allt mir. +\end{quote} +schreiben wollen, dann m\"ussen sie eingeben: +\begin{verbatim*} +\TeX\ gef\"allt mir. +\end{verbatim*} +W\"urden sie `\verb|\TeX|' nicht mit einem +\index{Gegenschraegstrich@Gegenschr\"agstrich}Gegenschr\"agstrich +abschlie\ss{}en, dann s\"ahe das Ergebnis so aus: +\begin{quote} +\TeX gef\"allt mir. +\end{quote} +Und das gefiele uns dann nicht mehr. Es darf allerdings ein +Kontrollwort nicht in jedem Fall mit einem +\index{Gegenschraegstrich@Gegenschr\"agstrich}Gegenschr\"agstrich beendet +werden. Um z.B.\ `\TeX' zu erhalten, darf nicht: +\begin{verbatim*} +`\TeX\' +\end{verbatim*} +eingegeben werden, das Ergebnis w\"are: +\begin{quote} +`\TeX\'. +\end{quote} +Sie k\"onnen sich vermutlich schon denken, woher der +\index{Fehler!Kontrollzeichen}Fehler stammt, +`\verb|\'|' ist ein \index{Kontrollzeichen}Kontroll\-zei\-chen, was die gew\"unschte +\index{Ausgabe}Ausgabe verhinderte. + +Derartige \index{Kontrollsequenz} +Kontrollsequenzen gibt es einige in \TeX, so z.B.\ `\verb|\pi|' +f\"ur den Buchstaben `$\pi$', `\verb|\Pi|' f\"ur `$\Pi$' und so weiter. +Sie sehen hier schon eine wichtige Eigenschaft von \TeX. Die +Kontrollsequenzen sind alle so gew\"ahlt, da\ss{} sie m\"oglichst {\em +klingende} Namen haben. Dies gew\"ahrleistet, da\ss{} sie die wichtigsten +schnell lernen k\"onnen. + +Die \index{Kontrollsequenz} +Kontrollsequenzen werden weiterhin unterschieden in sogenannte: +\index{Primitiv} +{\em Primitive} und {\em zusammengesetzte} \index{Kontrollsequenz} +Kontrollsequenzen. +Primitive sind nicht aus anderen \index{Kontrollsequenz} +Kontrollsequenzen zusammengesetzt. Zu +dieser Kategorie geh\"oren \index{zzzinput@{\tt\char92 input}} +`\verb|\input|' oder \index{zzzaccent@{\tt\char92 +accent}}`\verb|\accent|'. +Wohingegen `\verb|\\"|' ein zusammengesetzte \index{Kontrollsequenz} +Kontrollsequenz ist, die +u.a.\ auf `\verb|\accent|' zur\"uckgreift. Sie werden sich fragen, warum +man \"uberhaupt zusammengesetzte \index{Kontrollsequenz} +Kontrollsequenzen zur Verf\"ugung stellt. +Nun ganz einfach, die anderen sind einfach zu \index{Primitiv} +{\bf primitiv}. Es w\"are +zu m\"uhsam einen Text nur mit Primitiven zu schreiben, ausserdem kann +man mit der \"Anderung {\em einer} zusammengesetzten +\index{Kontrollsequenz}Kontrollsequenz das +Aussehen im ganzen Text beeinflu\ss{}en. Wie man aus \TeX\ +Kontrollsequenzen neue zusammensetzt, und wie man die Sequenzen +\"andert, lesen sie in einem sp\"ateren Kapitel. + +Insgesamt bietet ein nicht schon ver\"andertes \TeX\ ca.\ 300 +\index{Primitiv}Primitive +und 600 zu\-sam\-men\-ge\-setz\-te \index{Kontrollsequenz} +Kontrollsequenzen an. Erschrecken sie nicht +vor der gro\ss{}en Zahl. Mit den meisten werden sie nie zu tun haben, und +die, die sie brauchen haben gr\"o\ss{}tenteils selbsterkl\"arende Namen. + +Wie kann man nun unterscheiden, ob eine \TeX\ \index{Kontrollsequenz} +Kontrollsequenz +zusammengesetzt, oder \index{Primitiv} +primitiv ist? Nun, man kann nat\"urlich in diesem +Buch nachlesen, wo die Befehle erkl\"art werden, man kann aber auch +\TeX\ veranlassen die Antwort zu geben. Dazu gibt es eine weitere +Kontrollsequenz: +\index{zzzshow@{\tt\char92 show}} +\begin{verbatim*} +\show +\end{verbatim*} +Wenn sie in einen \TeX\ File \index{zzzinput@{\tt\char92 input}} +`\verb|\show\input|' schreiben, dann gibt +\TeX\ auf dem \index{Bildschirm}Bildschirm aus: +\begin{verbatim*} +> \input=\input. +\end{verbatim*} +Sie erinnern sich daran, da\ss{} `\verb|\input|' eine \index{Primitiv}primitive +\index{Kontrollsequenz} +Kontrollsequenz ist. Anders hingegen die Reaktion, wenn sie auf +\"ahnliche Art den Befehl: \index{zzzthinspace@{\tt\char92 thinspace}} +`\verb|\thinspace|' untersuchen. Sie +erhielten das Ergebnis: +\index{zzzkern@{\tt\char92 kern}} +\begin{verbatim} +\> thinspace=macro: +->\kern .16667em. +\end{verbatim} +Hierbei ist `\verb|\kern|' allerdings wieder ein \index{Primitiv}Primitiv. + +\section{Die Zeichens\"atze} +\subsection{Die Schrifttypen} +Mitunter wollen sie auf einen anderen Zeichensatz umschalten, z.B. +etwas \index{Fettschrift}{\bf fett} schreiben, oder durch {\sl schr\"agstellen} +hervorheben. Um dies zu erreichen m\"ussen sie einfach einige Befehle in +den Text schreiben, die die Schrift umschalten. Mit der +\index{Eingabe}Eingabe von: +\begin{verbatim} +z.B.\ etwas \bf fett \rm schreiben, oder durch \sl schr\"agstellen \rm her.. +\end{verbatim} +erhalten sie obiges Ergebnis. \TeX\ arbeitet mit Zeichen, die zu +\index{Gruppe!Von Zeichen} +Gruppen von 256 Zeichen zusammengefa\ss{}t sind, die sogenannten +Zeichens\"atze. \TeX\ bietet folgende Befehle um auf einen anderen +Zeichensatz umzuschalten: + +\begin{quote}\index{Italic}\index{Schreibmaschinenschrift} +\index{zzzit@{\tt\char92 it}} +\begin{tabular}{ll} +{\tt\char92 rm} schaltet auf die Schriftart \index{Roman}`Roman' & Roman \\ +{\tt\char92 sl} schaltet auf die geneigte Roman Schrift & {\sl Geneigt} \\ +{\tt\char92 it} schaltet auf die Schrift `Italic' & {\it Italic} \\ +{\tt\char92 tt} schaltet auf eine Schreibmaschinenschrift & {\tt Schreibmaschine} \\ +{\tt\char92 bf} schaltet auf fette Schrift um & {\bf Fett} +\end{tabular} +\end{quote} + +Es gibt einen Unterschied zwischen der geneigten und er +Italic-Schrift. Der Unterschied liegt darin, da\ss{} es sich bei der +geneigten Schrift um die Schriftart \index{Roman}`Roman' handelt, die einfach nur +geneigt wurde. Die Schriftart `Italic' ist dagegen eine ganz andere +Schrift. {\itg Am augenf\"alligsten wird das, wenn sie sich mal die +ungeneigte Italic Schrift ansehen}\footnote{Wie soeben geschehen.}. +Erst mit dem Fortschritt in der +Erarbeitung von Zeichens\"atzen, wurde der Unterschied zwischen der +geneigten und der Italic Schrift relevant. Fr\"uher wurde kein +Unterschied zwischen Texten, die geneigt werden sollten und +mathematischen Zeichen gemacht. Mittlerweile hat es sich eingeb\"urgert, +Texte in der geneigten, mathematische \index{Formel!Schrift} +Formeln aber in der Schrift +`Italic' zu schreiben. Sie kennen die `Italic' Schrift vermutlich aus +mathematischen B\"uchern, als Bezeichnung f\"ur Variablen. + +\TeX\ beginnt die Arbeit \"ublicherweise in der Schriftart \index{Roman} +`Roman'. Der +Grund hierf\"ur liegt darin, da\ss{} die Schriftart `Roman' speziell auf +gute Lesbarkeit ausgelegt ist. Sie sollten sich angew\"ohnen, die +Texthervorhebungen nur in geringem Ma\ss{}e zu benutzen. L\"angere Texte in +einer anderen Schriftart, als \index{Roman}Roman, sind nicht gut lesbar. + +Nachdem sie auf eine andere Schriftart umgeschaltet haben, m\"ussen sie +normalerweise erst wieder auf die Schriftart \index{Roman} +`Roman' zur\"uckschalten, +bevor sie weiter schreiben k\"onnen. Dies kann auch einfacher gel\"ost +werden, wenn sie den Text, der hervorgehoben werden soll, zusammen mit +dem Zeichensatzbefehl in geschweifte \index{Klammer!Geschweift} +Klammern schreiben. Das obige +Beispiel h\"atte man also auch schreiben k\"onnen, als:\footnote{Bei dieser +Art der Schriftart\"anderung handelt es sich um ein Beispiel f\"ur die +Gruppierung, die im n\"achsten Abschnitt vorgestellt wird.} +\begin{verbatim} +z.B.\ etwas {\bf fett} schreiben, oder durch {\sl schr\"agstellen} her.. +\end{verbatim} +Die geneigten Schriften, also die geneigte \index{Roman} +Roman Schrift und die Schrift \index{Italic} +Italic, werfen ein kleines Problem auf. Betrachten sie z.B. +den folgenden Satz, der aus geraden und geneigten Zeichen gemischt ist: +\begin{quote} +Ich sehe {\sl f\"unf} Indianer. +\end{quote} +Dadurch, da\ss{} das Wort `f\"unf' in einer geneigten Schrift dargestellt +wird, erscheint der \index{Abstand} +Abstand zwischen dem zweiten `f' des Wortes `f\"unf' +und dem `I' von `Indianer' zu klein. F\"ur diesen Fall bietet \TeX\ +einen besonderen Befehl `\verb|\/|'. Mit diesem Befehl wird ein +zus\"atzlicher \index{Zwischenraum} +Zwischenraum beim Umschalten von einer geneigten Schrift +auf eine gerade Schrift eingef\"ugt. Dieser Zwischenraum ist abh\"angig +vom Buchstaben, also f\"ur ein `f' \index{Groesse!Zeichen@Gr\"o\ss{}e!Zeichen} +gr\"o\ss{}er, als z.B.\ f\"ur ein `e'. Wird der obige Satz als: +\begin{verbatim} +Ich sehe {\sl f\"unf\/} Indianer. +\end{verbatim} +eingegeben, dann erscheint er so: +\begin{quote} +Ich sehe {\sl f\"unf\/} Indianer. +\end{quote} +Tats\"achlich gibt es f\"ur jedes Zeichen, also auch f\"ur die Zeichen der +geraden Schriften eine sogenannte \index{Italic!Korrektur} +{\em Italic Korrektur}, nur ist sie +bei den meisten Zeichen gleich Null. + +Noch eine Nachbemerkung zu den verschiedenen Schriften. Fr\"uher galt es +als guter \index{Stil!Schreib}Schriftstil, einen \index{Punkt} +Punkt oder ein \index{Komma}Komma in derselben +Schriftart zu schreiben, in der auch das Wort davor geschrieben war. +Sp\"atestens bei einem `Italic' Semikolon sieht das aber ziemlich +l\"acherlich aus. Es hat sich daher durchgesetzt, die +\index{Satz!Zeichen}Satzzeichen in der +normalen Schriftart zu schreiben. + +Schlie\ss{}lich gibt es bei \TeX\ noch einen Befehl f\"ur eine Schriftart, +die es gar nicht gibt. \index{Font!Null}\index{zzznullfont@{\tt\char92 nullfont}} +`\verb|\nullfont|' schaltet auf einen {\em +leeren}\index{Leer!Zeichensatz} Zeichensatz um, der keine Zeichen enth\"alt. Dieser wird +gebraucht, wenn man als \index{Argument} +Argument einen Zeichensatz angeben mu\ss{}, aber +gar keine Zeichen ausgeben will. + +\subsection{Die Schriftgr\"o\ss{}en} +Schriften k\"onnen sich in der Gr\"o\ss{}e genauso voneinander unterscheiden, +wie in der Form. Die Schrift, die sie hier lesen hat die Gr\"o\ss{}e von +10pt\footnote{Das pt-Ma\ss{}system wird sp\"ater noch genauer vorgestellt. +Hier reicht es zu wissen, da\ss{} die \index{Klammer!Hoehe@Klammer!H\"ohe} +Klammern der Schrift 10pt hoch und +der \index{Gedankenstrich} +Gedankenstrich 10pt breit ist (\"Ubrigens nicht hier in der +\index{Fussnote!Schriftgroesse@Fu\ss{}note!Schriftgr\"o\ss{}e}Fu\ss{}note, +die Schrift ist kleiner)}. + +Jeder Zeichensatz in \TeX\ steht in Zusammenhang mit einem +Kontrollwort. F\"ur die 10pt \index{Roman}Roman Schrift gilt z.B.\ der Befehl +`\verb|\tenrm|', f\"ur die entsprechende 9pt Schrift `\verb|\ninerm|'. +Die Kontrollworte f\"ur die entsprechenden geneigten Schriften hei\ss{}en +`\verb|\tensl|' bzw.\ `\verb|\ninesl|'. Diese Kontrollworte sind nicht +in \TeX\ {\em eingebaut}, sie sind keine \index{Primitiv} +Primitive, sie dienen nur der +besseren Ansprechbarkeit der Schriftgr\"o\ss{}en. + +Wenn verschiedengro\ss{}e Schriften zusammen gebraucht werden, dann +orientiert sich \TeX\ an einer \index{Grundlinie} +{\em Grundlinie}. Die \index{Eingabe}Eingabe von: +\begin{verbatim} +\tenrm kleiner \ninerm und kleiner +\eightrm und kleiner \sevenrm und kleiner +\sixrm und kleiner \fiverm und kleiner \tenrm +\end{verbatim} +ergibt im Text: \tenrm kleiner \ninerm und kleiner \eightrm und +kleiner \sevenrm und kleiner \sixrm und kleiner \fiverm und +kleiner \tenrm. + +Wir kennen jetzt zwei Befehle um auf die 10pt \index{Roman}Roman Schrift +umzuschalten `\verb|\tenrm|' und \index{zzzrm@{\tt\char92 rm}} +`\verb|\rm|'. Worin besteht der +Unterschied? Nun, `\verb|\rm|' schaltet gar nicht auf die 10pt Schrift +um, sondern in die derzeit aktuelle Gr\"o\ss{}e der Schriftart \index{Roman} +Roman. Der +Sinn dieses Befehls liegt darin, da\ss{} man ihn benutzen kann, ohne an +die augenblicklich g\"ultige Gr\"o\ss{}e der Schrift denken zu m\"ussen. +`\verb|\tenrm|' schaltet dagegen tats\"achlich auf die 10pt +\index{Roman}Roman +Schriftart um. + +Wie bringt man \TeX\ nun bei, welchen Zeichensatz man benutzen m\"ochte. +Die Zeichens\"atze existieren ja als \index{File!Zeichensatz} +Zeichensatzfiles in ihrem System. +Nun, sie geben die \index{Definition}Definition: +\index{zzzfont@{\tt\char92 font}} +\begin{verbatim} +\font\ninerm=cmr9 +\end{verbatim} +ein, und ab sofort wei\ss{} \TeX\ was unter dem Kontrollwort zu verstehen +ist, n\"amlich da\ss{} ab da der Zeichensatz zu verwenden ist, der in der +Datei {\em cmr9.xxx} steht (um das `xxx' k\"ummern wir uns +sp\"ater)\footnote{`cmr9' bedeutet \"ubrigens: {\em Computer modern +Roman} mit 9pt}. + +Au\ss{}er den verschieden gro\ss{}en Zeichens\"atzen, kann man einen einzelnen +Zeichensatz auch noch vergr\"o\ss{}ert oder verkleinert benutzen. Das +definiert man: +\index{zzzfont@{\tt\char92 font}} +\begin{verbatim} +\font\cs=<externer Zeichensatzname> at <gew\"unschte Gr\"o\ss{}e> +\end{verbatim} +Mit `\verb|\cs|' steht dann der vergr\"o\ss{}erte Zeichensatz zur Verf\"ugung, +vorausgesetzt, er existiert in ihrem System. Mit: +\begin{verbatim} +\font\grossfiverm=cmr5 at 10pt +\end{verbatim} +erhalten sie z.B.\ die Schrift `cmr5' auf 10pt vergr\"o\ss{}ert, also in +\index{Doppelt!Schrift}doppelter Gr\"o\ss{}e. + +Sie werden sich jetzt sicher fragen, wieso man denn dann \"uberhaupt +noch eine 10pt Schrift (cmr10) braucht? Der Grund ist einfach, die +beiden Schriften sehen unterschiedlich aus\footnote{Der Grund f\"ur das +unterschiedliche Aussehen liegt einfach darin, da\ss{} z.B.\ in der Schrift +cmr10 noch Striche von der St\"arke eins m\"oglich sind, bei der +vergr\"o\ss{}erten cmr5 Schrift, w\"are hingegen ein Strich der St\"arke eins +schon auf die St\"arke 2 verdoppelt worden.}. Sie sollten die 10pt +Schrift immer dann verwenden, wenn sie davon ausgehen k\"onnen, da\ss{} ihr +Text in Originalgr\"o\ss{}e gelesen werden wird, wenn ihr Text aber, z.B. +auf fotographischem Wege, verkleinert werden soll, dann w\"ahlen sie die +vergr\"o\ss{}erte 5pt Schrift. Um den Unterschied deutlich zu machen ein +Beispiel: +\begin{quote} +Hier in 10pt {\grossfiverm und hier vergr\"o\ss{}ert} +\end{quote} + +Es gibt noch eine andere M\"oglichkeit den Vergr\"o\ss{}erungsfaktor einer +Schrift anzugeben. Mit der \index{Eingabe}Eingabe von: +\index{zzzfont@{\tt\char92 font}} +\begin{verbatim} +\font\grossfiverm=cmr5 scaled 2000 +\end{verbatim} +erreichen sie dasselbe Ergebnis wie mit der Angabe von `\verb|at +10pt|', n\"amlich die \index{Doppelt!Schrift} +Verdoppelung. Die Zahlenangabe hinter dem Wort +`\verb|scaled|' gibt den Vergr\"o\ss{}erungsfaktor in \index{Promille} +Promille an. Die Basis +der Berechnung ist hier also 1000. 1500 w\"are die eineinhalbfache +Vergr\"o\ss{}erung. + +Es hat sich bew\"ahrt Zeichens\"atze mit den +\index{Potenz!Vergroesserung@Potenz!Vergr\"o\ss{}erung}Potenzen von $1.2$ zu +vergr\"o\ss{}ern. Daher gibt es in \TeX\ auch \index{Kontrollsequenz} +Kontrollsequenzen, die diese +Vergr\"o\ss{}erungen einfach bereitstellen. Mit: +\index{zzzfont@{\tt\char92 font}}\index{zzzmagstep@{\tt\char92 magstep}} +\begin{verbatim} +\font\bigtenrm=cmr10 scaled\magstep2 +\end{verbatim} +wird die 10pt Schrift in $1.2 \times 1.2$-facher Vergr\"o\ss{}erung +bereitgestellt. Die \index{Abkuerzung@Abk\"urzung} +abk\"urzende \index{Kontrollsequenz}Kontrollsequenz hei\ss{}t also +`\verb|\magstepn|', wobei `n' \"ublicherweise f\"ur: $0, 1, 2, 3, 4, 5$ +steht. Die Vergr\"o\ss{}erungen sehen dann so aus:\footnote{Es gibt auch noch +die Vergr\"o\ss{}erungsstufe `{\tt\char92 magstephalf}', die eine Schrift um +den Faktor: $\sqrt{1.2}$ vergr\"o\ss{}ert, also genau zwischen 0 und 1 liegt.} +\begin{quote} +Hier normal `\verb|\magstep0|'\\ +{\bigtenrm einmal um $1.2$ vergr\"o\ss{}ert `\verb|\magstep1|'}\\ +{\Bigtenrm und zweimal um $1.2$ vergr\"o\ss{}ert `\verb|\magstep2|'} +\end{quote} + +\section{Gruppierungen} +Mitunter ist es erw\"unscht, wenn ein Teil eines Textes, wie eine +Einheit behandelt wird. Dazu stellt \TeX\ die Zeichen `\verb|{|' und +`\verb|}|' bereit. Alles, was zwischen diesen Zeichen steht wird als +\index{Einheit!Text}Einheit behandelt. Die beiden \index{Klammer!Gruppe} +Klammern sind also \"ahnlich spezielle +Zeichen, wie das `\verb|\|'. + +Die \index{Gruppe}Gruppen in \TeX\ haben eine \"ahnliche Aufgabe, wie die sogenannte +\index{Block!Struktur} +{\em Blockstruktur} bei Pro\-gram\-mier\-spra\-chen. \index{Definition} +Definitionen, die +innerhalb einer Gruppe getroffen wurden, gelten nur innerhalb der +Gruppe, und verlieren ihre G\"ultigkeit, sobald die Gruppe endet. In der +Sprache der Pro\-gram\-mier\-spra\-chen sind sie {\em lokal}. + +Im letzten Abschnitt wurde schon ein Beispiel f\"ur Gruppen geliefert, +hier folgt ein weiteres. Wir haben schon gelernt, da\ss{} man bei dem +\index{Logo}Logo +`\TeX' unterscheiden mu\ss{}, welche \index{Kontrollsequenz} +Kontrollsequenz man schreibt, je +nachdem, ob ein \index{Leer!Zeichen} +Leerzeichen folgen soll, oder nicht. Man kann dieses +Problem auch l\"osen, indem man: +\begin{verbatim} +{\TeX} +\end{verbatim} +schreibt. Die zweite schlie\ss{}ende Klammer beendet die kleine Gruppe, +und danach wird alles wieder normal behandelt, d.h.\ ein +\index{Leer!Zeichen}Leerezeichen +ist dann nicht mehr \index{Begrenzer!Kontrollsequenz} +Begrenzer einer \index{Kontrollsequenz}Kontrollsequenz, sondern wieder +ein ganz normales Leerzeichen. Auch: +\begin{verbatim} +\TeX{} +\end{verbatim} +h\"atte denselben Erfolg gebracht, da sich nun der +\index{Kontrollsequenz}Kontrollsequenz +`\verb|\TeX|' eine leere Gruppe anschlie\ss{}t. + +Als weiteres Beispiel, was uns dann weiter f\"uhren wird dient +folgendes: +\index{zzzcenterline@{\tt\char92 centerline}} +\begin{verbatim} +\centerline{Diese Information ist zentriert} +\end{verbatim} +Das Beispiel benutzt die \index{Kontrollsequenz} +Kontrollsequenz `\verb|\centerline|'. Diese +Kontrollsequenz \index{Zentrierung} +zentriert das fol\-gen\-de Zeichen in einer eigenen Zeile. +Die \index{Klammer!Gruppe} +Gruppenklammern sind n\"otig, da sonst nur das `D' von `Diese' +zentriert w\"urde, der Rest aber in die n\"achste Zeile geschrieben w\"urde, +--- nicht im Sinne des Erfinders. + +Es ist nat\"urlich auch m\"oglich \index{Gruppe!Schachtelung} +Gruppen ineinanderzuschachteln. Die \index{Eingabe}Eingabe von: +\index{zzzit@{\tt\char92 it}} +\begin{verbatim} +\centerline{Diese Information ist {\it zentriert}} +\end{verbatim} +ergibt als Ergebnis:\medskip + +\index{Zentrierung}\index{zzzcenterline@{\tt\char92 centerline}} +\centerline{Diese Information ist {\it zentriert}}\medskip + +Ich habe oben geschrieben, da\ss{} \index{Definition} +Definitionen, die innerhalb von \index{Gruppe!Definitionen}Gruppen +getroffen werden, nur innerhalb der Gruppe G\"ultigkeit haben. Das gilt +auch f\"ur alle anderen Befehle innerhalb der Gruppe. Beim letzten +Beispiel betraf die Umschaltung auf \index{Italic} +Italic nur das Wort \index{Zentrierung}`zentriert'. Es +gibt mitunter Situationen, wo man innerhalb einer Gruppe etwas +ver\"andern m\"ochte und diese Ver\"anderung \"uber die \index{Gruppe!Grenze} +Gruppengrenzen hinaus wirken soll. Das ist m\"oglich, indem man den Befehl +\index{zzzglobal@{\tt\char92 global}}`\verb|\global|' vor den +Befehl schreibt. H\"atten wir im letzten Beispiel: +\index{zzzit@{\tt\char92 it}} +\begin{verbatim} +\centerline{Diese Information ist {\global\it zentriert}} +\end{verbatim} +geschrieben, dann w\"are auch aller nachfolgender Text in \index{Italic} +Italic +geschrieben worden, bis zu einem anderen, auf eine andere Schriftart +umschaltenden Befehl. \index{zzzglobal@{\tt\char92 global}} +`\verb|\global|' bewirkt, das der unmittelbar +darauf folgende Befehl f\"ur alle existierenden Gruppen wirksam wird. + +Eine weitere M\"oglichkeit eine Gruppe zu begrenzen besteht mit den +\index{Primitiv} Primitiven \index{zzzbegingroup@{\tt\char92 begingroup}} +\index{zzzendgroup@{\tt\char92 endgroup}} +`\verb|\begingroup|' und `\verb|\endgroup|'. Diese +machen es leichter m\"oglich eine Gruppe in einer +\index{Kontrollsequenz}Kontrollsequenz +beginnen und in einer anderen enden zu lassen. Man mu\ss{} nur darauf +achten, da\ss{} sie die \index{Gruppe!Ueberlappung@Gruppe!\"Uberlappung} +Gruppen nicht \"uberlappen. Konstruktionen, wie: +\index{zzzbegingroup@{\tt\char92 begingroup}}\index{zzzendgroup@{\tt\char92 endgroup}} +\begin{verbatim} +{ \begingroup } \endgroup +\end{verbatim} +sind unzul\"assig. + +\section{Die Arbeit mit \TeX} +Sie wissen nun schon genug, um mit \TeX, vom Brief angefangen bis zum +Buch alles schreiben zu k\"onnen (wirklich). Das Einzige, was noch +fehlt, ist der eigentliche Umgang mit dem Programm \TeX\ selber. In +diesem Abschnitt sollen ihnen einige Beispiele den Umgang mit dem +Programm \TeX\ verdeutlichen und ihnen das notwendige R\"ustzeug zu +eigenen Experimenten geben. + +\subsection{Der erste Text} +Rufen sie \TeX\ auf\index{Betriebssystem}\footnote{Der Aufruf eines Programms ist von +Betriebssystem zu Betriebssystem unterschiedlich, der Pro\-gramm\-name von +\TeX\ lautet i.a.\ {\tt virtex}}. Es m\"u\ss{}te sich mit einer Meldung, +nicht un\"ahnlich dieser: +\begin{verbatim} +This is TeX, Version 3.0 (preloaded format=plain 89.7.15) +** +\end{verbatim} +melden. F\"ur den Anfang geben sie bitte +\index{zzzrelax@{\tt\char92 relax}} +`\verb|\relax|' ein, was \TeX\ +veranla\ss{}t nichts zu tun, \TeX\ m\"u\ss{}te sich nun mit {\em einem} +\index{Stern!Prompt} +Sternchen wiedermelden. Versuchen sie nun `\verb|Hallo?|', oder etwas +\"ahnliches. Und zum Schlu\ss{} schreiben sie noch `\verb|\end|'. + +\TeX\ sollte nun mit einem `\verb|[1]|' antworten (Es wurde soeben die +erste \index{Seite!Erste} +Seite ihres ersten Textes ausgegeben. Der Inhalt steht in einer +Datei mit dem Namen: {\tt texput.dvi}\footnote{{\tt dvi} hei\ss{}t {\em +device independent}, also \index{Geraeteunabhaengig@Ger\"ateunabh\"angig} +ger\"ateunabh\"angig. Fragen sie jemanden, der +sich damit auskennt, wie man dieses Ergebnis ansehen, besser noch +\index{Ausdruck}ausdrucken kann.}. + +\subsection{Nun die Eingabe aus einem File} +Sie k\"onnen \TeX\ nat\"urlich {\em on line} benutzen, das ist aber nicht +sehr effektiv. Besser ist es ihre Eingabe in einen File zu schreiben, +sie k\"onnen dazu einen \index{Editor} +Editor ihrer Wahl benutzen. Diesen File werden +wir dann sp\"ater an \TeX\ \"ubergeben. + +Schreiben sie als erstes den folgenden, aus dem \TeX Book hinl\"anglich +bekannten Text: +\index{zzzcenterline@{\tt\char92 centerline}}\index{zzzeject@{\tt\char92 eject}} +\index{zzzhrule@{\tt\char92 hrule}}\index{zzzvfill@{\tt\char92 vfill}} +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\hrule +\vskip 1in +\centerline{\bf A SHORT STORY} +\vskip 8pt +\centerline{\sl by A. U. Thor} +\vskip .6cm +Once upon the time, in a distant + galaxy called \\"O\\"o\c c, +there lived a computer +named R. J. Drofnats + +Mr.~Drofnats---or ``R. J.,'' as +he preferred to be called--- +was happiest when he was at work +typesetting beautiful documents. +\vskip 1in +\hrule +\vfill\eject +\end{verbatim} +Schreiben sie den Text genauso, wie sie ihn hier sehen, ich beziehe +mich im weiteren auf die Zeilen-num\-mern. + +Sehen wir uns den Text doch noch etwas an, bevor wir ihn an \TeX\ +\"ubergeben. In Zeile 1 und 17 steht jeweils der Befehl `\verb|\hrule|', +der eine d\"unne \index{Linie!Quer} +Querlinie mit der Breite einer \index{Seite!Querstrich} +Seite zieht. Dann gibt +es in den Zeilen 2, 4, 6 und 16 noch den Befehl \index{zzzvskip@{\tt\char92 vskip}} +`\verb|\vskip|', der +einen zus\"atzlichen vertikalen \index{Zwischenraum} +Zwischenraum einf\"ugt. Die +\index{Groesse!Zwischenraum@Gr\"o\ss{}e!Zwischenraum}Gr\"o\ss{}e des +Zwischenraums steht unmittelbar hinter dem Befehl, aber um die +\index{Einheit!Mass@Einheit!Ma\ss{}} +Ma\ss{}einheiten k\"ummern wir uns sp\"ater. Weitere Befehle kennen sie ja +schon, so z.B.\ den Befehl \index{zzzcenterline@{\tt\char92 centerline}} +`\verb|\centerline|'. Auch die Befehle +`\verb|\\"|' sollten ihnen schon bekannt vorkommen, es handelt sich um +Umlautbefehle, so da\ss{} der Ausdruck: `\verb|\\"O\\"o\c c|' als: `\\"O\\"o\c +c' erscheint. + +Bei genauerem Hinsehen fallen allerdings noch ein paar Kleinigkeiten +auf: Zum einen taucht zwischen manchen W\"ortern, statt eines +\index{Leer!Zeichen} +Leerzeichens das Zeichen: `\verb|~|' auf. Dieses wird von \TeX\ wie +ein Leerzeichen behandelt, nur da\ss{} dort die Zeile nicht umgebrochen +werden darf. N\"utzlich z.B.\ bei \index{Initialen} +Initialen. Weiterhin ist die leere +Zeile 11 bemerkenswert. Mit einer derartigen Leerzeile wird \TeX\ +mitgeteilt, da\ss{} ein Abschnitt zu Ende ist, und danach ein +\index{Neu!Abschnitt}neuer +anf\"angt. Die \"ubliche Neuformatierung, die sie vielleicht von +Textverarbeitungsprogrammen gew\"ohnt sind, entf\"allt. + +Am Schlu\ss{} unseres Textes stehen die Befehle: +\index{zzzvfill@{\tt\char92 vfill}}`\verb|\vfill|' und +\index{zzzeject@{\tt\char92 eject}} +`\verb|\eject|'. Diese bewirken, da\ss{} die laufende +\index{Seite!Laufende}Seite mit +\index{Leer!Zeile}leeren +Zeilen aufgef\"ullt wird (\verb|\vfill|) und dann ausgegeben wird +(\verb|\eject|). + +Jetzt wird es Zeit \TeX\ wieder zu starten, aber nachdem es uns mit +den beiden \index{Stern!Prompt} +Sternchen begr\"u\ss{}t, geben wir jetzt nicht wieder +\index{zzzrelax@{\tt\char92 relax}} +`\verb|\relax|' ein, sondern `\verb|story|'\footnote{Ich gehe davon +aus, da\ss{} sie ihren Text in einer Datei mit dem Namen {\tt story.tex} +abgespeichert haben.}. + +Sie haben sich vielleicht schon gewundert, wieso \TeX\ bei der ersten +Meldung zwei, sp\"ater aber nur ein Sternchen ausgibt. Der Grund hierf\"ur +ist einfach. Die beiden Sternchen bedeuten, da\ss{} jede Eingabe, die +nicht mit einem \index{Gegenschraegstrich@Gegenschr\"agstrich} +Gegenschr\"agstrich oder einem \index{Kaufmannsund}Kaufmannsund (`\verb|&|') +beginnt, als Filename verstanden wird und \TeX\ deshalb ein +\index{zzzinput@{\tt\char92 input}} `\verb|\input|' vorher ausf\"uhrt (Sie +h\"atten also auch `\verb|\input story|' schreiben k\"onnen; `\verb|\input|' +beginnt mit einem \index{Gegenschraegstrich@Gegenschr\"agstrich} +Gegenschr\"agstrich).\footnote{Wenn dem doppelten +\index{Stern!Prompt!Doppelt}Sternchen ein\index{Kaufmannsund} +Kaufmannsund folgt, dann nimmt \TeX\ an, da\ss{} es sich um die Angabe +eines Formatfiles handelt. Wenn bei ihrem \TeX\ kein Formatfile +mitgeladen wird, dann m\"u\ss{}te ihre Eingabe lauten: {\tt\char38 plain +\char92 input story}.} Bei manchen Systemen ist es auch m\"oglich all +diese Angaben sofort beim Aufruf von \TeX\ in die Kommandozeile zu +schreiben. Der Aufruf s\"ahe dann ungef\"ahr so aus:\footnote{Bei manchen +Betriebssystemen ist es dar\"uber hinaus notwendig das Argument in +Anf\"uhrungszeichen zu schreiben.} +\begin{verbatim} +virtex &plain \input story +\end{verbatim} +Und \TeX\ w\"urde sofort mit seiner Arbeit beginnen. + +W\"ahrend der Bearbeitung von \TeX\ taucht jetzt die \index{Ausgabe}Ausgabe: +\begin{verbatim} +(story.tex [1]) +\end{verbatim} +auf, und nachdem sie beim abschlie\ss{}end wieder auftretenden Sternchen +wieder ein `\verb|\end|' eingegeben habe, k\"onnen sie den +\index{Neu!File}neuen File +`\verb|story.dvi|' wieder ausgeben lassen und sich das Ergebnis +ansehen. +\subsection{Fehler in der Eingabe} +Damit ihnen sp\"ater, wenn es dann mal zu {\em echten} Fehlern kommt, +jede Erfahrung im Umgang mit dieser Situation abgeht, jetzt mal einige +Fehlersituationen.\footnote{\index{Knuth. D.} +D. Knuth schreibt hierzu, da\ss{} man sich +immer vor Augen halten soll, da\ss{} man mit Fehlern nicht etwa den +Computer beleidigt, so da\ss{} er sp\"ater die Mitarbeit verweigert, Fehler +sind dazu da gemacht zu werden um aus ihnen zu lernen.} +\subsubsection{Die Sache mit der Textbreite} +Starten sie \TeX\ und auf die Eingabeaufforderung (\verb|**|) geben +sie ein: +\index{zzzhsize@{\tt\char92 hsize}}\index{zzzinput@{\tt\char92 input}} +\begin{verbatim} +\hsize=4in \input story +\end{verbatim} +Die \index{Kontrollsequenz} +Kontrollsequenz `\verb|\hsize|' regelt die bedruckbare Breite des +Textes, normalerweise wird sie in {\em Plain} vordefiniert, hier aber +auf die Breite von 4 Inch reduziert.\footnote{Ein Inch entspricht etwa +2.54 cm.} Wenn jetzt wieder das Sternchen auftaucht, geben sie ein: +\index{zzzhsize@{\tt\char92 hsize}}\index{zzzinput@{\tt\char92 input}} +\begin{verbatim} +\hsize=3in \input story +\end{verbatim} +und nachdem sie \TeX\ dar\"uber informiert hat, da\ss{} es die zweite +\index{Seite!Zweite}Seite +des Dokuments auch geschrieben hat (die erste Seite war ja 4 Inch +breit, und wird nicht \"uberschrieben, sondern jede weitere Seite wird +einfach angeh\"angt), geben sie der Reihe nach auch noch ein: +\index{zzzhsize@{\tt\char92 hsize}}\index{zzzinput@{\tt\char92 input}} +\begin{verbatim} +\hsize=2.5in \input story +\hsize=2in \input story +\end +\end{verbatim} + +\"Ubergehen sie zun\"achst einmal alle Meldungen, die \"uber ihren +\index{Bildschirm} +Bildschirm huschen; f\"uhren sie einfach erst mal alles so aus, wie hier +beschrieben. Sie m\"ussen keine Angst haben, da\ss{} ihnen etwas entgeht. +Alle Fehlermeldungen, die sie auf dem Bildschirm sehen, werden +au\ss{}erdem noch in einem sogenannten \index{File!Transscript} +Transscriptfile, oder \index{File!Log}Logfile +gesichert, so da\ss{} sie sich dort sp\"ater in Ruhe ansehen +k\"onnen.\footnote{Tats\"achlich ist die Fehlermeldung im Logfile sogar +noch etwas ausf\"uhrlicher.} + +Schauen wir uns doch mal eine der Fehlermeldungen an, die sie erhalten +haben d\"urften. Wenn sie nicht genau so aussehen, wie die hier +beschriebenen, dann macht das nichts, die Struktur der Fehlermeldung +ist die gleiche.\index{Box!Overfull}\index{zzzhbox@{\tt\char92 hbox}} +\begin{verbatim} +Overfull \hbox (0.98807pt too wide) in paragraph at lines 7--11 +\tenrm tant galaxy called []O^^?o^^Xc, there lived| +Overfull \hbox (0.4325pt too wide) in paragraph at lines 7--11 +\tenrm a com-puter named R. J. Drof-nats. || +Overfull \hbox (5.32132pt too wide) in paragraph at lines 12--16 +\tenrm he pre-ferred to be called---was hap-|| +\end{verbatim} +Jede \"ubervolle Box liegt an einer bestimmten Stelle im urspr\"unglichen +File (beim erste Fall zwischen den Zeilen 7 und 11) und au\ss{}erdem l\"a\ss{}t +sich ablesen, wieviel die Box zu gro\ss{} ist (im ersten Fall 0.98807pt). +Die Fehlermeldung gibt auch noch einen Teil der Box aus, die zu lang +ist; hier Zeichen im Zeichensatz {\em tenrm}. Die beiden +\index{Klammer!Eckige}Klammern vor +dem `O' bedeuten, da\ss{} hier etwas kompliziertes, wie eine +\index{Absatz!Einrueckung@Absatz!Einr\"uckung} +Absatzeinr\"uckung, oder wie in diesem Fall die Konstruktion von +`\\"O\\"o\c c' vorliegt. Die Meldung gibt auch noch an, an welchen +Stellen \TeX\ trennen wollte, bevor der Fehler auftrat. Beim zweiten +Fehler z.B.\ wollte \TeX\ `Drof-nats' trennen. Der Trennalgorithmus von +\TeX\ ist ausserordentlich gut, aber nat\"urlich nicht perfekt, so wurde +z.B.\ nicht erkannt, da\ss{} `galaxy' h\"atte hinter dem `l' getrennt werden +k\"onnen.\footnote{Man kann \TeX\ etwas auf die Spr\"unge helfen, indem +man entweder an der entsprechenden Stelle `{\tt gal\char92 -axy}' +schreibt, oder, wenn man es \index{Global!Trennung} +global f\"ur den ganzen Text haben will, zu +Beginn des Textes: \index{zzzhyphenation@{\tt\char92 hyphenation}} +`{\tt\char92 hyphenation\char123 gal-axy\char125}'.} + +Jetzt aber zum Grund f\"ur die Fehlermeldungen. \TeX\ l\"a\ss{}t zwischen +Worten variablen Wortabstand\index{Abstand!Worte} + zu. Betrachten sie die folgenden +Zeilen:\medskip + +\hbox spread-5.5pt{Hier mal mit ganz kleinen Abst\"anden} + +\hbox spread+1.679895em{und hier mal mit ganz gro\ss{}en}\medskip + +Es ist deutlich, da\ss{} die Wortabst\"ande unterschiedlich sind. \TeX\ +berechnet nun f\"ur jede Zeile einen Wert, genannt \index{Badness} +`\verb|badness|'. +Dieser gibt an, wie gut oder schlecht die Wort in der Zeile verteilt +sind. Dabei geht \TeX\ von einem Idealabstand\index{Abstand!Ideal} +aus. Wird dieser unter- +oder \"uberschritten, dann erh\"oht sich demgem\"a\ss{} der Wert von +\verb|badness|. Normalerweise l\"a\ss{}t \TeX\ nur Zeilen mit einer badness +von weniger als 200 ohne Fehlermeldung zu. Dieser Wert (200) steht in +einer Variablen names `\verb|tolerance|'. Setzen sie diesen Wert doch +einfach einmal h\"oher. Starten sie \TeX\ erneut und geben sie +\index{zzzhsize@{\tt\char92 hsize}}\index{zzzinput@{\tt\char92 input}} +\index{zzztolerance@{\tt\char92 tolerance}} +\begin{verbatim} +\hsize=2in \tolerance=1600 \input story +\end{verbatim} +ein. Es wird ihnen keine `\verb|Overfull hbox|' mehr gemeldet. Ok, ok, +es gibt da noch ein paar Meldungen wegen `\verb|Underful hbox|'; das +liegt daran, da\ss{} \TeX\ alle \index{Box!Underfull}Boxen meldet, die eine badness \"uber einem +Wert haben, der in \index{zzzhbadness@{\tt\char92 hbadness}} +`\verb|\hbadness|' steht. Der vordefinierte Wert +f\"ur `\verb|\hbadness|' ist 1000. + +Auch den letzten Fehler k\"onnen wir noch beseitigen, indem der Befehl +\index{zzzraggedright@{\tt\char92 raggedright}} +`\verb|\raggedright|' mit\-an\-ge\-ge\-ben wird. Er veranla\ss{}t +\TeX\ sich nicht mehr um den rechten \index{Rand!Ausgleich} +Randausgleich zu k\"ummern. Bis zum +rechten Rand wird mit \index{Leer!Zeichen}Leerzeichen aufgef\"ullt. + +Abschlie\ss{}ende Bemerkungen zum Thema. Man kann sich z.B.\ fragen, ob es +besser ist, die {\tt tolerance} oder den Wert f\"ur {\tt hbadness} +hochzusetzen. Tats\"achlich haben beide M\"oglichkeiten ihre Vor- und +Nachteile. Wenn sie wirklich ihren Text noch korregieren wollen, dann +w\"ahlen sie lieber die erste Alternative, \TeX\ gibt ihnen dann noch +an, wieweit die Boxen das erlaubte Ma\ss{} \"uberschreiten, und sie k\"onnen +darauf reagieren. Geht es ihnen darum einfach ihren Text m\"oglichst +schnell und fehlerfrei zu setzen, dann w\"ahlen sie die zweite Methode. + +Es gibt aber auch noch eine Variante: \TeX\ meckert nicht jede zu voll +geratene Box an. Wenn eine Box nur {\em etwas} zu gro\ss{} ist, erhalten +sie keine Fehlermeldung und auch \TeX\ ignoriert das herausragen der +Zeile. Der Wert, um den ein Text herausragen darf steht in +\index{zzzhfuzz@{\tt\char92 hfuzz}} +`\verb|\hfuzz|', und er ist \"ublicherweise mit 0.1pt vorbesetzt. Sie +k\"onnen ihn aber auch \"andern, wie alle Werte in \TeX. +\subsubsection{Und jetzt mal {\em richtige} Fehler} +Im letzten Teil dieses Abschnitts wollen wir mal ein paar {\em +richtige} Fehler begehen. \"Andern sie in ihrem File {\tt story.tex} die +Zeile 3 in: +\index{zzzcenterline@{\tt\char92 centerline}}\index{zzzERROR@{\tt\char92 ERROR}} +\begin{verbatim} +\centerline{\bf A SHORT \ERROR STORY} +\end{verbatim} +in der zweiten Zeile schreiben sie statt +\index{zzzvskip@{\tt\char92 vskip}}`\verb|\vskip|' einfach +\index{zzzvship@{\tt\char92 vship}} +`\verb|\vship|'. Um das Ma\ss{} voll zu machen, schreiben sie statt des +\index{File!Name} +Filenamens {\tt story} auch noch {\tt sorry} in die Eingabe von \TeX. + +\TeX\ wird sie auffordern, einen andern Filenamen einzugeben, da er +den von ihnen angegebenen nicht finden kann. Versuchen sie nur sich durch +ein neues Dr\"ucken der Returntaste aus dieser Lage zu befreien, +letztlich ist es doch besser, sie schreiben den richtigen Filenamen. +\TeX\ wird dann mit der Arbeit beginnen und nach verh\"altnism\"a\ss{}ig +kurzer Zeit mit der Fehlermeldung: +\begin{verbatim} +! Undefined control sequence. +l.2 \vship + 1in +? +\end{verbatim} +aufwarten. Die Fehlermeldung beginnt mit einem `\verb|!|' und der +Angabe, worin der Fehler besteht. Es folgt die Angabe der +Zeilennummer, und dem Text, soweit \TeX\ ihn bisher bearbeitet hat. +Eine Zeile tiefer erscheint der Text, der als n\"achstes zu bearbeiten +w\"are. Abgeschlossen wird das Ganze durch ein \index{Fragezeichen} +Fragezeichen, was +anzeigt, da\ss{} \TeX\ eine Eingabe von ihnen erwartet, wie es weiter +gehen soll. Sie haben nat\"urlich keine Ahnung (und wenn sie schon +welche haben, dann haben sie vergessen) wie es weitergehen soll. +Tippen sie deshalb auch mal ein Fragezeichen, und \TeX\ wird ihnen +folgenderma\ss{}en antworten: +\begin{verbatim} +Type <return> to proceed, S to scroll future error messages, +R to run without stopping, Q to run quietly, +I to insert something, E to edit your file, +1 or ... or 9 to ignore the next 1 to 9 tokens of input, +H for help, X to quit. +\end{verbatim} +Es handelt sich dabei um eine Menuauswahl, wobei sie jetzt nur noch +entscheiden m\"ussen, wie sie reagieren wollen. Sie haben die folgenden +M\"oglichkeiten: +\begin{enumerate} +\item Dr\"ucken sie einfach die Returntaste. \TeX\ versucht dann soweit +es m\"oglich ist alleine aus den Schwierigkeiten heraus zu kommen. +\item Dr\"ucken sie die Taste `S'. Sie wechseln damit in einen anderen +\index{Modus!Fehler} +Modus. Ab sofort h\"alt \TeX\ bei Fehlern nicht mehr an, die +Fehlermeldungen sausen nur so \"uber den \index{Bildschirm} +Bildschirm (eventuell) und sie +k\"onnen sie nur noch sp\"ater im \index{File!Log}Logfile richtig lesen. \TeX\ verh\"alt +sich also so, als w\"urden sie bei diesem und jedem weiteren Fehler +immer wieder die Returntaste dr\"ucken. + +Denselben Effekt k\"onnen sie auch erreichen, wenn sie +\index{zzzscrollmode@{\tt\char92 scrollmode}} +`\verb|\scrollmode|'in ihren File als Befehl hineinschreiben. +\item Dr\"ucken sie die Taste `R'. \TeX\ reagiert wie im letzten Fall, +allerdings noch etwas rabiater. \TeX\ h\"alt jetzt nicht einmal mehr an, +wenn ein falscher \index{File!Name}Filename eingegeben wurde. + +Mit dem Befehl \index{zzznonstopmode@{\tt\char92 nonstopmode}} +`\verb|\nonstopmode|' im Text erreichen sie denselben Effekt. +\item Die Taste `Q'. Auch hier wieder eine \"ahnliche Reaktion, wie bei +`R', nur das dar\"uberhinaus auch noch alle Meldungen auf dem +\index{Bildschirm}Bildschirm +unterdr\"uckt werden. + +Hierf\"ur gibt es im Text den Befehl \index{zzzbatchmode@{\tt\char92 batchmode}} +`\verb|\batchmode|' +\item Mit `I' kann etwas in den Text eingef\"ugt werden. Schreiben sie +dazu das, was sie einf\"ugen wollen unmittelbar hinter das `I'. \TeX\ +tut so, als st\"unde dieser so eingef\"ugte Text vor dem, den es noch +lesen mu\ss{}. Das Return, das sie zur Beendigung der Eingabe eingeben, wird {\em +nicht} als \index{Leer!Zeichen}Leerzeichen interpretiert. +\item Wenn sie eine Nummer, die kleiner als 100 sein mu\ss{}, eingeben, +dann ignoriert \TeX\ die ent\-sprech\-en\-de Anzahl von Buchstaben, bzw. +\index{Kontrollsequenz} +Kontrollsequenzen in ihrem Text. Damit sind die gemeint, die dem +Fehler folgen! +\item Mit `H' erhalten sie eine weitergehende Hilfe. \TeX\ +unterscheidet zwischen einer formalen und einer informellen +Fehlermeldung. Normalerweise erhalten sie nur die formale, in den +\index{File!Log}Logfile wird allerdings sofort auch die informelle geschrieben. Mit +`H' erhalten sie die volle Fehlermeldung. +\item Mit `X' verlassen sie \TeX\ an dieser Stelle. Dies bietet sich +an, wenn es einfach schon zu viele Fehler geworden sind, oder wenn es +zuviele Folgefehler gibt. +\item Auch `E' verl\"a\ss{}t \TeX, bereitet aber den Computer auf eine +Korrektur des \index{File!Eingabe}Eingabefiles vor. Dieses Feature wird nicht von allen +Rechnern und \TeX\ Versionen unterst\"utzt. +\end{enumerate} +Ach ja, Ich hatte oben von den Befehlen geschrieben, mit denen die +Modi auch im Text gesetzt werden k\"onnen. Zur\"uckgesetzt werden sie +Modi durch den Befehl: \index{zzzerrorstopmode@{\tt\char92 errorstopmode}} +`\verb|\errorstopmode|'. + +Wie begegnen wir nun unserer ersten Fehlermeldung? Schreiben sie doch +einfach: +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +I\vskip +\end{verbatim} +Die unbekannte \index{Kontrollsequenz} +Kontrollsequenz \index{zzzvship@{\tt\char92 vship}} +`\verb|\vship|' wird ignoriert, und +statt dessen die gewollte eingef\"ugt (allerdings nicht in ihrer +Textdatei, da m\"ussen sie sie sp\"ater erst noch wieder \"andern). Sie +h\"atten auch `\verb|3|' eingeben k\"onnen, dann w\"are die Angabe +`\verb|1in|' auch ignoriert worden. H\"atten sie einfach Return +gedr\"uckt, st\"unde ein seltsames `1in' in ihrem Text. + +Nun zum n\"achsten Fehler. \TeX\ beantwortet ihn folgenderma\ss{}en: +\index{zzzcenterline@{\tt\char92 centerline}}\index{zzzERROR@{\tt\char92 ERROR}} +\index{zzzhss@{\tt\char92 hss}}\index{zzzline@{\tt\char92 line}} +\begin{verbatim} +! Undefined control sequence. +<argument> \bf A SHORT \ERROR + STORY +\centerline #1->\line {\hss #1 + \hss } +l.3 \centerline{\bf A SHORT \ERROR STORY} +|null +? +\end{verbatim} +Diese Fehlermeldung ist etwas komplizierter, da der Text: +\index{zzzERROR@{\tt\char92 ERROR}} +\begin{verbatim} +\bf A SHORT \ERROR STORY +\end{verbatim} +als \index{Argument} +Argument an den Befehl `\verb|\centerline|' \"ubergeben worden ist. +Der Fehler tritt auf, bei der Bearbeitung von `\verb|\centerline|'. +Dieser Befehl ist in {\em Plain} \TeX\ folgenderma\ss{}en definiert: +\index{zzzdef@{\tt\char92 def}}\index{zzzhss@{\tt\char92 hss}} +\index{zzzline@{\tt\char92 line}} +\begin{verbatim} +\def\centerline#1{\line{\hss#1\hss}} +\end{verbatim} +Das `\verb|#1|' steht dabei stellvertretend f\"ur das \"ubergebene +\index{Argument} +Argument.\footnote{Um die Bedeutung der Befehle: {\tt\char92 hss} und +{\tt\char92 line} brauchen wir uns jetzt noch nicht zu k\"ummern.} Ich +denke mit diesem Wissen braucht die Fehlermeldung nicht weiter erkl\"art +zu werden. Die Verschachtelung sogenannter +\index{Makro!Verschachtelung}Makros kann sehr tief sein. +Sie brauchen sich aber nicht alle Verschachtelungen in der +Fehlermeldung anzusehen, die ihnen meist sowieso nichts sagt, da sie +die \index{Definition}Makrodefinitionen nicht kennen. Mit dem Befehl: +\index{zzzerrorcontextlines@{\tt\char92 errorcontextlines}} +\begin{verbatim} +\errorcontextlines=... +\end{verbatim} +k\"onnen sie angeben, wieviele {\em Zwischen}zeilen sie angezeigt haben +m\"ochten. Ist der Wert z.B.\ gleich 2, dann werden nur die obersten +beiden Verschachtelungen angezeigt. +\chapter{Die internen Zeichen} +\section{Wie lie\ss{}t \TeX, was sie schreiben?} +Es d\"urfte ihnen schon klar geworden sein, da\ss{} ihre Texteingabe nur +ungef\"ahr etwas mit der \index{Ausgabe} +Ausgabe zu tun hat. Zeilenumbr\"uche etc.\ werden +von \TeX\ gesetzt. Au\ss{}erdem wird: +\begin{itemize} +\item Ein Return wie ein \index{Leer!Zeichen}Leerzeichen behandelt, +\item Zwei Leerzeichen wie ein Leerzeichen behandelt und +\item Eine leere Zeile beendet einen Absatz. +\end{itemize}\index{Absatz} +Wenn sie sich die drei \index{Punkt} +Punkte genau ansehen, wird ihnen ein Fehler +auffallen. Die Regeln wieder\-spre\-chen sich. Eine \index{Leer!Zeile} +Leerzeile besteht aus +zwei Returns hintereinander, die wie zwei Leerzeichen hintereinander +zu einem Leerzeichen zusammengefasst werden m\"u\ss{}ten. Vielleicht +interessieren sie sich irgendwann einmal f\"ur die {\em tats\"achlichen} +Regeln, Hier zun\"achst ein kleiner Einblick, was mit ihrer Eingabe +alles geschieht, bis sie zur \index{Ausgabe}Ausgabe geworden ist. + +Die 256 verschiedenen Zeichen, die innerhalb \TeX\ m\"oglich sind +geh\"oren 16 verschiedenen \index{Kategorie!Zeichen} +Ka\-te\-gori\-en an. Diese Kategorien sind:\medskip + +\index{Block!Anfang}\index{Block!Ende}\index{Hochstellung} +\index{Satz!Zeichen}\index{Kommentar}\index{Spalte!Tabelle}\index{Ziffer} +\begin{tabular}{|l|l|l|} \hline +{\em Kategorie} & {\em Bedeutung} & {\em Standard} \\ \hline\hline +0 & Befehlsanfang & {\tt\char92} \\ \hline +1 & Blockanfang & {\tt\char123} \\ \hline +2 & Blockende & {\tt\char125} \\ \hline +3 & Math. Umschaltbefehl & {\tt\char36} \\ \hline +4 & Tabellenspalte & {\tt\char38} \\ \hline +5 & Zeilenende & Return (ASCII CR) \\ \hline +6 & Makroargument & {\tt\char35} \\ \hline +7 & Hochstellung & {\tt\char94} \\ \hline +8 & Tiefstellung & {\tt\char95} \\ \hline +9 & Ignorieren & ASCII NULL \\ \hline +10 & Leerzeichen & {\tt\char32} \\ \hline +11 & Buchstabe & {\tt A..Z} und {\tt a..z} \\ \hline +12 & Sonstige Zeichen & Ziffern, Satzzeichen, etc. \\ \hline +13 & Aktives Zeichen & {\tt\char126} Als Makroname verwendbar \\ \hline +14 & Kommentarzeichen & {\tt\char37} Kommentaranfang \\ \hline +15 & Ung\"ultiges Zeichen & ASCII DEL \\ \hline +\end{tabular}\medskip\index{Aktiv!Zeichen}\index{Argument}\index{ASCII} + +In diesem Text sind schon mehrere Male Zeichen aufgetaucht, die nicht +als normale Zeichen von \TeX\ verstanden werden. Nun haben wir alle +diese Zeichen auf einem Blick (und es sind dann auch wirklich alle). +Aus {\em Plain} \TeX\ heraus sind etliche dieser Zeichen, die man auch gerne +drucken w\"urde, nicht so einfach druckbar, da sie eine andere Bedeutung +haben. Es sind dies die Zeichen: +\begin{verbatim} +\ { } $ & # ^ _ % ~ +\end{verbatim} +Einige davon lassen sich dennoch im Text ausgeben, nat\"urlich durch +\index{Kontrollsequenz}Kontrollsequenzen: +\begin{quote} +`\verb|\&|' f\"ur \&, `\verb|\%|' f\"ur \%, `\verb|\&|' f\"ur \&, `\verb|\#|' +f\"ur \# und `\verb|\_|' f\"ur \_. +\end{quote} +Innerhalb des mathematischen \index{Modus!Mathematisch} +Modus k\"onnen au\ss{}erdem die +\index{Kontrollsequenz} +Kontrollsequenzen `\verb|\{|' und `\verb|\}|' f\"ur $\{$ und $\}$ +benutzt werden. Und schlie\ss{}lich gibt es nicht die \index{Akzent} +Akzentbefehle: +`\verb|\~|' und `\verb|\^|' z.B.\ f\"ur die Akzente \~e und \^a. + +Jede Eingabezeile wird von \TeX\ in sogenannte Token zerlegt. Diese +Token bestehen aus Zeichen, Kontrollsequenzen, \index{Ziffer} +Ziffern etc.\ So wird +die Eingabe von: \index{zzzhskip@{\tt\char92 hskip}} +`\verb|{\hskip 36 pt}|' zerlegt in: +\[\{_1\quad\mbox{\fbox{hskip}}\quad 3_{12}\quad +6_{12}\quad\mbox{\tt\char32}_10\quad p_{11}\quad t_{11}\quad \}_2\] +Die Indizes deuten dabei die \index{Kategorie!Zeichen} +Kategorie an, der das jeweilige Token +angeh\"ort. \fbox{hskip} hat keinen Index, da eine +\index{Kontrollsequenz}Kontrollsequenz +keiner Kategorie angeh\"ort. Auch das \index{Leer!Zeichen} +Leerzeichen hinter der +Kontrollsequenz wird nicht behandelt, da es nur die Kontrollsequenz +abschlie\ss{}t. Nach der Zerlegung in Token, erscheint \TeX\ ihre Eingabe, +wie eine unheimlich lange Zeile von Token, es gibt also gar keine +Abs\"atze und sonstiges mehr, nur noch Token. + +\index{Kontrollsequenz} +Kontrollsequenzen sind also nur {\em ein} Token lang, so da\ss{} es +\"uberhaupt nichts ausmacht, wie lang der Name der Kontrollsequenz ist. +Die Kategorie, die einem Token zukommt, kann ge\"andert werden. Wenn sie +z.B.\ INITEX starten, das Programm, mit dem die Formatdateien erstellt +werden k\"onnen etc., dann gibt es f\"ur manche Kategorien noch gar keine +Zeichen. Die Kategorie k\"onnen sie einem Zeichen zuweisen, resp.\ die +Kategorie eines Zeichens andern, mit dem Befehl: +\index{zzzcatcode@{\tt\char92 catcode}} +\begin{verbatim} +\catcode`\ +\end{verbatim} +Hinter diesem Befehl m\"ussen sie dann das Zeichen tippen, dessen +\index{Kategorie!Aendern@Kategorie!\"Andern} +Kategorie sie bestimmen oder \"andern wollen. +\begin{verbatim} +\catcode`\a=14 +\end{verbatim} +wuerde z.B.\ daf\"ur sorgen, da\ss{} \index{Kommentar!Einleitung} +Kommentare mit einem `a' eingeleitet +werden (nicht sehr sinnvoll). + +\index{Kontrollsequenz} +Kontrollsequenzen werden ja als {\em ein} Token behandelt. Trotzdem +bietet \TeX\ eine M\"oglichkeit eine Kontrollsequenz in ihre Zeichen zu +zerlegen. Der entsprechende Befehl hei\ss{}t \index{zzzstring@{\tt\char92 string}} +`\verb|\string|'. Mit der +Eingabe von: +\begin{verbatim} +\string\TeX +\end{verbatim} +erhalten sie: +\[ \mbox{\tt\char92}_{12}\quad \mbox{\tt T}_{12}\quad \mbox{\tt +e}_{12}\quad \mbox{\tt X}_{12}\] + +Umgekehrt kann nat\"urlich auch aus beliebigen Token eine +\index{Kontrollsequenz} +Kontrollsequenz aufgebaut werden. Der zugeh\"orige Befehl lautet: +\index{zzzcsname@{\tt\char92 csname}}\index{zzzendcsname@{\tt\char92 endcsname}} +\begin{verbatim} +\csname TeX\endcsname +\end{verbatim} +Hier werden die Token: +\[ \mbox{\tt T}_{12}\quad \mbox{\tt e}_{12}\quad \mbox{\tt X}_{12}\] +zu der \index{Kontrollsequenz}Kontrollsequenz: `\verb|\TeX|' zusammengef\"ugt. + +Leider gibt es eine Einschr\"ankung. Da zwischen +`\verb|\csname|' und `\verb|\endcsname|' zwar beliebige Token, also +auch wieder Kontrollsequenzen, stehen d\"urfen, aber diese m\"ussen sich +alle zu Zeichen, und nicht zu \index{Primitiv} +Primitiven aufl\"osen lassen. Somit ist +die Eingabe von: +\index{zzzcsname@{\tt\char92 csname}}\index{zzzendcsname@{\tt\char92 endcsname}} +\begin{verbatim} +\csname\TeX\endcsname +\end{verbatim} +falsch, da `\verb|\TeX|' auch auf das \index{Primitiv} +Primitiv \index{zzzkern@{\tt\char92 kern}}`\verb|\kern|' +zur\"uckgreift. + +Wenn wir schon bei den F\"ahigkeiten von \TeX\ sind etwas umzuwandeln. +Nat\"urlich ist auch das \index{Escape} +Escapezeichen `\verb|\|' nichts gottgegebenes +in \TeX. Tats\"achlich steht in der Variablen +\index{zzzescapechar@{\tt\char92 escapechar}}`\verb|\escapechar|' der +Wert des Zeichens, das dann das Escapezeichen ausmacht. + +Und noch mehr F\"ahigkeiten zur Umwandlung: +Es gibt noch die beiden Befehle: \index{zzznumber@{\tt\char92 number}} +`\verb|\number|' und\index{zzzromannumber@{\tt\char92 romannumber}} +`\verb|\romannumber|', welche beide eine Zahl als \index{Ziffer}Ziffernfolge +ausgeben. +\begin{verbatim} +\romannumber24 +\end{verbatim} +produziert z.B.\ `\verb|xxiv|'. `\verb|\number|' gibt den Wert einfach +als Zahl aus. Hier ist es nat\"urlich nicht sinnvoll eine Zahl +anzugeben, aber `\verb|\number|' arbeitet auch mit den +\index{Register}Registern von +\TeX, deren Inhalt man sich mit `\verb|\number|' ausgeben lassen kann. +\section{Die Sache mit den Zeichen} +Etwas weiter vorne konnten sie lesen, da\ss{} \TeX\ intern 256 Zeichen +verarbeiten kann. Diese gro\ss{}e Menge von Zeichen kann allerdings auf +den meisten Tastaturen nicht direkt eingegeben werden. Es stellt sich +die Frage, wie man denn am besten vorgeht. +Um z.B.\ das 37te Zeichen eines Zeichensatzes ansprechen zu k\"onnen, +geben sie einfach: +\begin{verbatim} +\char37 +\end{verbatim} +ein, also `\verb|\char|' gefolgt von der gew\"unschten Nummer. Auf diese +Art lassen sich alle Zeichen ansprechen. So ergibt z.B.: +\begin{verbatim} +\char70 ritz +\end{verbatim} +meinen Vornamen: `\char70ritz'. Sie vermuten ganz richtig, da\ss{} das `F' das +70. Zeichen im aktuell g\"ultigen Zeichensatz ist. Die Nummerierung der +Zeichen h\"angt vom sogenannten \index{ASCII} +`ASCII' Zeichensatz ab, nach dem sich +\TeX\ orientiert. Diese Orientierung findet \"ubrigens {\em innerhalb} +von \TeX\ statt, unabh\"angig davon, welchen Zeichensatz ihr Rechner +benutzt. + +Innerhalb der Tabelle von Zeichen, die zur Verf\"ugung stehen, werden +die Zeichen oft mit ihrem \index{Oktal} +oktalen, oder \index{Hexadezimal}hexadezimalen Wert +angesprochen. In \TeX\ k\"onnen diese Werte auch angegeben werden, wenn +sie die \index{Dezimal!Wert} +dezimalen nicht kennen oder ausrechnen wollen. Vor den \index{Oktal} +oktalen +Zahlen mu\ss{} ein (rechtes) H\"akchen `\verb|'|' stehen, vor den +\index{Hexadezimal}hexadezimalen ein \index{Anfuehrungszeichen@Anf\"uhrungszeichen} +Anf\"uhrungszeichen `\verb|\"|'. Die folgenden Angaben +sind also \"aquivalent: +\begin{verbatim} +\char98 \char'142 \char\"62 +\end{verbatim} +Tats\"achlich brauchen sie nicht einmal die Nummer des Zeichens zu +kennen, dessen Wert sie angeben wollen. Das Token $`_{12}$ (linkes +H\"akchen) liefert den Wert des unmittelbar folgenden Buchstaben oder +der \index{Kontrollsequenz} +Kontrollsequenz, die nur aus einem Buchstaben besteht (dann +nat\"urlich den Wert dieses Buchstabens). Man kann also angeben: +`\verb|\char`b|' oder `\verb|\char`\b|'.\footnote{Auf diese Art wird +\"ubrigens das \index{Kommentar!Zeichen} +Kommentarzeichen ausgegeben. Man definiert die zugeh\"orige +\index{Kontrollsequenz} +Kontrollsequenz als: {\tt\char92def\char92\char37\char123\char92 +char\char96\char92\char37\char125}. Etwas eleganter geht es aber auch +mit dem Befehl: {\tt\char92chardef}.} + +Den `\verb|\char|' Befehl d\"urfen sie \"uberall benutzen um ein Zeichen +anzusprechen, allerdings nicht innerhalb einer Kontrollsequenz. Wozu +ist dieser Befehl denn nun eigentlich n\"utzlich? Nun, es gibt Zeichen, +wie z.B.\ das Zeichen `\char0', welches im normalen Text nicht +geschrieben werden kann. Da es aber das 0. Zeichen des Zeichensatzes +ist, kann es einfach als `\verb|\char0|' angesprochen werden. + +Es gibt noch zwei weitere interessante M\"oglichkeiten ein Zeichen aus +einem Zeichensatz an\-zu\-spre\-chen und zwar durch: +\begin{verbatim} +^^ +\end{verbatim} +Wenn sie hinter diese beiden Zeichen ein weiteres Zeichen schreiben, +dann reagiert \TeX\ folgenderma\ss{}en: Hat das folgende Zeichen einen +inneren Wert zwischen 64 und 127, dann werden 64 subtrahiert, hat es +einen Wert zwischen 0 und 63, dann werden 64 addiert. Um das obige +Zeichen darzustellen h\"atte ich also auch: +\begin{verbatim} +^^@ +\end{verbatim} +schreiben k\"onnen, da `@' den inneren Wert 64 hat. `\verb|^^@|' wird +also als das 0. Zeichen gelesen. + +Folgt den beiden `\verb|^^|' eine {\em kleingeschriebene} +\index{Hexadezimal}hexadezimale +Zahl, dann wird das entsprechende Zeichen, dem diese hexadezimale Zahl +entspricht ausgegeben. `\verb|^^7f|' ergibt also das 127. Zeichen. + +Die Realisation der Zeichenordnung innerhalb von \TeX\ erlaubt eine +ungeheure Sprachunabh\"angigkeit. So ist es z.B.\ m\"oglich auch noch mit +Tastaturen zu arbeiten, die Zeichen, wie `\char26' bereitstellen, doch +hier verweise ich auf das \TeX Book, das diese M\"oglichkeit viel +genauer beschreibt. +\chapter{\TeX's Ausgabe} +Dieses Kapitel besch\"aftigt sich mit dem, was \TeX\ in die {\tt dvi} +\index{File!DVI}Files ausgibt. Dazu geh\"oren, neben den Zeichen, auch die +\index{Einheit!Mass@Einheit!Ma\ss{}}Ma\ss{}einheiten, +um Positionierungen durchf\"uhren zu k\"onnen. +\section{\TeX's Roman Zeichens\"atze} +Ich habe schon fr\"uher die m\"oglichen Zeichens\"atze angesprochen, die +\TeX\ ausgeben kann. Hier nun ein etwas systematischerer Zugang. +Zun\"achst einmal die Zeichen des Roman Zeichensatzes. Da sind zun\"achst +folgende Zeichen m\"oglich: +\begin{quote}\index{Satz!Zeichen} +Die Buchstaben: {\tt A} bis {\tt Z} und {\tt a} bis {\tt z}\\ +die \index{Ziffer}Ziffern {\tt 0} bis {\tt 9}\\ +die Satzzeichen: {\tt : ; ! ? ( ) [ ] ` ' - * / . , @} +\end{quote} +Au\ss{}erdem gibt es die \index{Ligatur}Ligaturen:\medskip + +\begin{tabular}{*{4}{lcl@{$\qquad$}}} +{\tt ff} & $\rightarrow$ & ff & +{\tt ffi} & $\rightarrow$ & ffi & +{\tt ``} & $\rightarrow$ & `` & +$<$ & $\rightarrow$ & < \\ +{\tt fi} & $\rightarrow$ & fi & +{\tt ffl} & $\rightarrow$ & ffl & +{\tt ''} & $\rightarrow$ & '' & +$>$ & $\rightarrow$ & > \\ +{\tt fl} & $\rightarrow$ & fl & +{\tt --} & $\rightarrow$ & -- & +{\tt ---} & $\rightarrow$ & --- & & & +\end{tabular}\medskip + +Auch die Zeichen `+' und `=' sind m\"oglich, sollten aber besser im +mathematischen \index{Modus!Mathematisch} +Modus verwendet werden, der durch ein +\index{Dollarzeichen}Dollarzeichen +`\verb|$|' ein- bzw.\ ausgeleitet wird. Sie sehen dann besser aus. Das +gleiche gilt f\"ur `-' und `/'. + +Weiterhin gibt es die reservierten Zeichen: +\begin{verbatim} + $ # % & +\end{verbatim} +die aber durch die \index{Kontrollzeichen}Kontrollzeichen: +\begin{verbatim} +\$ \# \% \& +\end{verbatim} +erhalten werden k\"onnen. Au\ss{}erdem reserviert {\em Plain} \TeX\ noch die +Zeichen: +\begin{verbatim} +\ { } ^ _ ~ +\end{verbatim} +Schlie\ss{}lich bleiben im sichtbaren \index{ASCII} +ASCII-Code noch vier Zeichen \"ubrig, +die sie aber in normalem Text nicht verwenden sollten, resp.\ durch +andere Zeichen(kombinationen) ersetzen sollten: +\begin{verbatim} +\" | < > +\end{verbatim} +\TeX\ bietet aber auch einiges, was sie in der normalen +\index{ASCII} +ASCII-Codierung nicht finden. An erster Stelle die \index{Akzent} +Akzente:\medskip + +\begin{tabular}{ll} +{\em Eingabe} & {\em Ausgabe} \\ +{\tt\char92\char96 o} & \`o \\ +{\tt\char92\char39 o} & \'o \\ +{\tt\char92\char94 o} & \^o \\ +{\tt\char92\char34 o} & \\"o \\ +{\tt\char92\char126 o} & \~o \\ +{\tt\char92\char61 o} & \=o \\ +{\tt\char92\char46 o} & \.o \\ +{\tt\char92 u o} & \u o \\ +{\tt\char92 v o} & \v o \\ +{\tt\char92 H o} & \H o \\ +{\tt\char92 t oo} & \t oo +\end{tabular}\medskip + +Die Akzente lassen sich nat\"urlich auch auf andere Buchstaben, als das +`o' setzen. Achten sie allerdings darauf, da\ss{} bei den letzten vier +Beispielen ein \index{Zwischenraum} +Zwischenraum zwischen dem \index{Kontrollzeichen} +Kontrollzeichen und dem +\index{Argument} +Argument steht. Alternativ k\"onnen sie auch `\verb|\H{o}|' schreiben. + +Weiterhin kennt \TeX\ auch Akzente {\em unter} den Buchstaben:\medskip + +\begin{tabular}{ll} +{\em Eingabe} & {\em Ausgabe} \\ +{\tt\char92 c o} & \c o \\ +{\tt\char92 d o} & \d o \\ +{\tt\char92 b o} & \b o +\end{tabular}\medskip + +Dar\"uberhinaus kennt \TeX\ auch noch einige \index{Spezialzeichen} +Spezialzeichen europ\"aischer +\index{Schrift!Europaeisch@Schrift!Europ\"aisch}Schriften:\medskip + +\index{Kreis}\index{Lateinisch}\index{Polnisches L} +\begin{tabular}{lll} +{\em Eingabe} & {\em Ausgabe} & {\em Bezeichnung} \\ +{\tt\char92 oe, \char92 OE} & \oe, \OE & Franz\"osische \index{Ligatur}Ligatur \\ +{\tt\char92 ae, \char92 AE} & \ae, \AE & Lateinische, skandinavische +\index{Ligatur}Ligatur \\ +{\tt\char92 aa, \char92 AA} & \aa, \AA & Skandinavisches A mit Kreis \\ +{\tt\char92 o, \char92 O} & \o, \O & Skandinavisches O mit Strich \\ +{\tt\char92 l, \char92 L} & \l, \L & Polnisches L mit Strich \\ +{\tt\char92 ss} & \ss & Deutsches Es-Zet +\end{tabular}\medskip + +Die Roman \index{Schrift!Roman} +Schrift enth\"alt au\ss{}erdem noch die Buchstaben `i' und `j' +ohne den \index{Punkt} +Punkt. So ergeben `\verb|\i|': \i\ und `\verb|\j|': \j. Der +Grund hierf\"ur ist, da\ss{} der Punkt bei diesen Zeichen entfernt werden +mu\ss{}, bevor ein anderer \index{Akzent} +Akzent auf die Zeichen gesetzt werden kann. + +Die Schriften: `\verb|\sl|', `\verb|\it|' und `\verb|\bf|' haben die +gleichen Zeichen. Nur der Zeichensatz `\verb|\tt|' verh\"alt sich etwas +anders. Zum einen kennt dieser Zeichensatz keine \index{Ligatur} +Ligaturen. Selbst +{\tt ---} wird als {\tt ---} ausgegeben. Die \index{Akzent}Akzente: +\index{zzzldots@{\tt\char92 ldots}} +`\verb|\H|'$\ldots$`\verb|\L|' k\"onnen nicht benutzt werden, daf\"ur aber +die Zeichen: {\tt \", |, <, >}. + +Schlie\ss{}lich gibt es noch vier Zeichen, die in allen Zeichens\"atzen +gleich aussehen:\medskip + +\index{zzzdag@{\tt\char92 dag}}\index{zzzddag@{\tt\char92 ddag}} +\begin{tabular}{ll} +{\em Eingabe} & {\em Ausgabe} \\ +{\tt\char92 dag} & \dag \\ +{\tt\char92 ddag} & \ddag \\ +{\tt\char92 S} & \S \\ +{\tt\char92 P} & \P +\end{tabular}\medskip + +Im Anhang wird noch genauer dargestellt, da\ss{} alle \index{Akzent} +Akzente von \TeX\ +auf das \index{Primitiv} +Primitiv: \index{zzzaccent@{\tt\char92 accent}} +`\verb|\accent|' zugreifen. So ist z.B.\ `\verb|\'#1|' +\"aquivalent zu: `\verb|{\accent19 #1}|'. Generell wird der +\index{Akzent}Akzent mit +einer Nummer angesprochen. Die Akzente werden immer richtig \"uber die +nachfolgenden Zeichen gesetzt. So w\"urde ein Akzent \"uber einem `o' +niedriger gesetzt, als \"uber einem `f', aber auch Akzente \"uber gar +keinem Zeichen sind m\"oglich. Ahnen sie wie? `\verb|\'{}|' ergibt: +\'{}. +\section{Die Ma\ss{}einheiten} +\subsection{Die eigentlichen Ma\ss{}einheiten} +Im englischsprachigen Raum haben sich die {\em klassischen} +Ma\ss{}einheiten \index{Point} +`Point' und \index{Pica}`Pica' f\"ur Drucker durchgesetzt. Neben diesen +kennt \TeX\ aber auch noch einige andere, um die Benutzung von \TeX\ +komfortabeler zu gestalten.\medskip + +\index{Cicero}\index{Didot}\index{Pica}\index{Zentimeter} +\begin{tabular}{ll} +{\em Abk\"urzung} & {\em Bedeutung} \\ +{\tt pt} & Point \\ +{\tt pc} & Pica (1pc=12pt) \\ +{\tt in} & Inch (1in=72.27pt) \\ +{\tt bp} & Big Point (72bp=1in) \\ +{\tt cm} & Zentimeter (2.54cm=1in) \\ +{\tt mm} & Millimeter (10mm=1cm) \\ +{\tt dd} & Didot Punkt (1157dd=1238pt) \\ +{\tt cc} & Cicero (1cc = 12dd) \\ +{\tt sp} & Skalierter Punkt (65536sp=1pt) +\end{tabular}\medskip\index{Abkuerzung@Abk\"urzung} + +Die Ma\ss{}einheiten werden immer nach folgenden Regeln angegeben: +\begin{quote} +$<$optionales Vorzeichen$><$Nummer$><$Ma\ss{}einheit$>$, oder\\ +$<$optionales Vorzeichen$><$Ziffern$>.<$Ziffern$><$Ma\ss{}einheit$>$ +\end{quote} +Dabei k\"onnen zwischen der Zahl und der Ma\ss{}einheit \index{Leer!Zeichen} +Leerzeichen +eingef\"ugt werden. Leerzeichen zwischen den \index{Ziffer} +Ziffern der Zahl, oder den +Buchstaben der Ma\ss{}einheit sind dagegen nicht erlaubt. + +Intern arbeitet \TeX\ mit dem {\tt sp}. Diese Ma\ss{}einheit ist so +klein,\footnote{Die Wellenl\"ange des sichtbaren Lichtes inst ungef\"ahr +100sp} da\ss{} auch trotz der Verwendung von \index{Integer!Arithmetik} +Integerarithmetik keine +erkennbaren \index{Fehler!Integerarithmetik} +Fehler auftreten. Allerdings begrenzt sich dadurch die +maximal angebbare \index{Groesse@Gr\"o\ss{}e}Gr\"o\ss{}e in \TeX\ auf $2^{30}$sp, was aber auch nicht +weiter st\"ort, da diese Gr\"o\ss{}e einer Strecke von $5.7583$ Metern +entspricht. + +Im weiteren werden des \"ofteren \index{Dimension!Angabe} +Dimensionsangaben gebraucht. Statt +dort immer eine explizite Angabe zu verwenden, wird die +Abk\"urzung:\index{Abkuerzung@Abk\"urzung} +$<$dimen$>$ verwendet, z.B.: +\begin{quote} +\verb|\hsize=|$<$dimen$>$ +\end{quote} +\subsection{Ma\ss{}einheiten und Vergr\"o\ss{}erung} +Zu Beginn eines Textes k\"onnen sie eine +\index{Global!Vergroesserung@Global!Vergr\"o\ss{}erung}globale Vergr\"o\ss{}erung oder +Verkleinerung angeben. Dies geschieht mit dem Befehl: +\index{zzzmagnifikation@{\tt\char92 magnifikation}} +\begin{verbatim} +\magnifikation=1200 +\end{verbatim} +Die Zahl am Ende des Befehls variiert nat\"urlich von Fall zu Fall. Bei +der Zahlangabe handelt es sich um eine \index{Promille} +Promilleangabe, so da\ss{} eine +Angabe von 1000 zu keiner Ver\"anderung f\"uhrt. Der Befehl: +\begin{verbatim} +\magnifikation=2000 +\end{verbatim} +\index{Doppelt!Vergroesserung@Doppelt!Vergr\"o\ss{}erung} +verdoppelt die Gr\"o\ss{}e ihrer \index{Ausgabe} +Ausgabe. Vergewissern sie sich allerdings {\em +vorher}, ob die entsprechenden Zeichens\"atze auf ihrem System verf\"ugbar +sind. + +Mit der Vergr\"o\ss{}erung oder Verkleinerung des Textes werden auch alle +Ma\ss{}angaben ge\"andert, mit Ausnahme des {\tt sp}. Wenn sie in ihrem +urspr\"unglichen Text eine L\"ucke von 2cm gelassen hatten, dann erhalten +sie jetzt eine 4cm gro\ss{}e L\"ucke (entsprechend dem letzten Beispiel). +Wenn sie das verhindern wollen, dann m\"ussen sie {\em vor} der +Ma\ss{}einheit das Wort `\verb|true|' einf\"ugen. Haben sie obige L\"ucke mit: +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\vskip 2 true cm +\end{verbatim} +definiert, dann ist sie auch in der Vergr\"o\ss{}erung nur 2cm gro\ss{}. Der +Grund f\"ur dieses Verhalten liegt darin, da\ss{} alle Ma\ss{}einheiten mit +einer Grundgr\"o\ss{}e in \index{zzzmag@{\tt\char92 mag}} +`\verb|\mag|' verrechnet werden. Diese Berechnung +verhindern sie mit der Angabe von `\verb|true|'. +\subsection{Relative Ma\ss{}einheiten} +Jeder Zeichensatz verf\"ugt \"uber zwei relative Ma\ss{}einheiten: +\begin{quote} +{\tt em} ist die Breite eines \index{zzzquad@{\tt\char92 quad}} +`\verb|\quad|' der entsprechenden +Schrift\\ +{\tt ex} ist die \index{Hoehe!x@H\"ohe!x} +H\"ohe des `x' in der entsprechenden Schrift. +\end{quote} +Die tats\"achlichen Ausma\ss{}e dieser Ma\ss{}einheiten ist von Zeichensatz zu +Zeichensatz verschieden. +\subsection{Abschlie\ss{}ende Bemerkungen} +Ihnen ist vielleicht aufgefallen, da\ss{} die Ma\ss{}einheiten nicht mit einem +\index{Gegenschraegstrich@Gegenschr\"agstrich} +Gegenschr\"agstrich eingeleitet werden. Das liegt daran, da\ss{} \TeX\ +einige \index{Schluesselwort@Schl\"usselwort} +Schl\"usselworte kennt. Die Ma\ss{}einheiten geh\"oren auch dazu. Hier +eine vollst\"andige \index{Liste!Schluesselworte@Liste!Schl\"usselworte} +Liste der Schl\"usselworte von \TeX: +{\tt at}, {\tt bp}, {\tt by}, {\tt cc}, {\tt cm}, {\tt dd}, {\tt +depth}, {\tt em}, {\tt ex}, {\tt fil}, {\tt height}, {\tt in}, {\tt l}, +{\tt minus}, {\tt mm}, {\tt mu}, {\tt pc}, {\tt plus}, +{\tt pt}, {\tt scaled}, {\tt sp}, {\tt spread}, {\tt to}, {\tt true}, +{\tt width}. +\chapter{Interna des Textsatzes} +In diesem Kapitel werden die wichtigsten Elemente des Textsatzes von +\TeX\ dargestellt. F\"ur die normale Anwendung ist das Wissen um diese +Zusammenh\"ange nicht unbedingt n\"otig, wenn sie also nur {\em normale} +Texte mit \TeX\ schreiben wollen, k\"onnen sie dieses Kapitel +\"uberspringen. +\section{Boxen} +Auch, wenn sich \TeX\ des modernen Hilfsmittel {\em Computer} bedient, +beruht die Methode, mit der Texte gesetzt werden letztlich auf der +guten alten \index{Satz!Kunst} +Satzkunst, die sp\"atestens mit Guttenberg ihren Einzug in +die sch\"onen K\"unste gefunden hat. Fr\"uher war es n\"otig einzelne Zeichen, +die als erhabene Grate auf Bleikl\"otzchen vorgegeben waren, auf einer +Schiene zusammenzusetzen, und diese Schienen dann ihrerseits wieder zu +gr\"o\ss{}eren Komponenten zusammenzuf\"ugen. An dieser Idee hat \TeX\ nichts +ge\"andert, nur da\ss{} statt der Bleikl\"otzchen nun sogenannte `Boxen' +verwendet werden.\footnote{Nat\"urlich nur intern. Der {\em normale} +Anwender bekommt davon nichts mit.} Es gibt zwei Arten von Boxen: die +einen k\"onnen Zeichen enthalten, die anderen nicht, sind insofern also +noch einfacher. +\subsection{Die {\em Rule}boxen} +Die Ruleboxen\footnote{Der Begriff kommt von der \"ublichen Verwendung +dieser Boxen. Mit ihnen werden normalerweise \index{Linie} +Linien gezogen.} sind +eigentlich nur gef\"ullte Rechtecke. Je nachdem, ob sie breiter als +hoch, oder umgekehrt sind, werden sie mit den Befehlen: +\index{zzzhrule@{\tt\char92 hrule}}`\verb|\hrule|' +oder \index{zzzvrule@{\tt\char92 vrule}} +`\verb|\vrule|' angesprochen. \index{Quadrat} +Quadratische Boxen dieser Art k\"onnen +mit beiden Befehlen erzeugt werden. Der generelle Aufruf der Befehle +lautet: +\index{zzzxrule@{\tt\char92 xrule}} +\begin{verbatim} +\xrule width <dimen> height <dimen> depth <dimen> +\end{verbatim} +Zu den \index{Groesse!Einer Box@Gr\"o\ss{}e!Einer Box} +Gr\"o\ss{}en `\verb|width|', `\verb|height|' und `\verb|depth|' komme +ich im n\"achsten Abschnitt (Das `x' mu\ss{} nat\"urlich gegen `v' oder `h' +ausgetauscht werden). Zu diesem Boxtyp abschlie\ss{}end ein Beispiel. Die +\index{Eingabe}Eingabe von: +\index{zzzhrule@{\tt\char92 hrule}} +\begin{verbatim} +\hrule width 10pt height 2pt +\end{verbatim} +ergibt: \vrule width 10pt height 2pt +\subsection{Die Zeichenboxen} +Jedes Zeichen, mit dem \TeX\ arbeitet, stellt sich f\"ur das Programm +als eine Box dar, deren Abmessungen vom Zeichensatzdesigner festgelegt +wurden.\footnote{Genauste Darstellung im \index{METAFONT} +{\manual METAFONT}Book.} Bei +den Abmessungen werden folgende Werte unterschieden: Breite (width), +\index{Hoehe!Box@H\"ohe!Box} +H\"ohe (height) und Tiefe (depth). Eine Box hat somit folgendes +Aussehen: + +\begin{picture}(10,6) +\put(1,1.5){\makebox(0,0){Referenzpunkt}} % Text +\put(2.3,1.5){\vector(1,0){0.5}} % Zeiger +\put(3,1.5){\circle*{0.1}} % Referenzpunkt +\put(3,0.5){\line(1,0){3}} % untere Linie +\put(3,0.5){\line(0,1){5}} % links senkrecht +\put(6,0.5){\line(0,1){5}} % rechts senkrecht +\put(3,5.5){\line(1,0){3}} % obere Linie +\put(3,1.5){\line(1,0){3}} % Bezugslinie +\put(4.5,1.7){\makebox(0,0){Basislinie}} % Text +\put(4.5,0){\makebox(0,0){Breite}} % Text +\put(7,1){\makebox(0,0){Tiefe}} % Text +\put(7,3.5){\makebox(0,0){H\"ohe}} % Text +\put(4.5,0.3){\vector(1,0){1.5}} % Breiten- +\put(4.5,0.3){\vector(-1,0){1.5}} % Vector +\put(6.2,1){\vector(0,1){0.5}} % Tiefen- +\put(6.2,1){\vector(0,-1){0.5}} % Vektor +\put(6.2,3.5){\vector(0,1){2}} % H\"ohen- +\put(6.2,3.5){\vector(0,-1){2}} % Vektor +\end{picture} + +Die Bedeutung der \index{Linie!Basis} +Basislinie und des Referenzpunktes wird sofort +deutlich. Wenn n\"amlich die Zeichen zu einer Zeile zusammengef\"ugt +werden, dann befinden sich die Basislinien aller Zeichen auf einer +H\"ohe.\footnote{Die \index{Leer!Zeichen} +Leerzeichen sind {\em keine} Boxen, doch dazu im +n\"achsten Abschnitt mehr.} Die Zeichen werden dabei zu einer +\"ubergeordneten Box, einer sogenannten `{\tt hbox}' (horizontale Box) +zusammengef\"ugt. Die einzelnen Zeilen, jetzt zusammengef\"ugt in ihren +{\tt hboxen} werden dann \"ubereinandergef\"ugt, und zwar so, da\ss{} die +Referenzpunkte der {\tt hboxen} jeweils auch wieder genau \"ubereinander +liegen. \TeX\ w\"are nicht \TeX, wenn sich so etwas nicht auch {\em +manuell} bewerkstelligen lie\ss{}e. Um eine {\em fertige} {\tt hbox} zu +erhalten braucht man nur den richtigen Befehl und den darin +enthaltenen Test. Die Sequenz: +\index{zzzhbox@{\tt\char92 hbox}} +\begin{verbatim} +\hbox{Eine Zeile mit Text} +\end{verbatim} +ergibt eine vollst\"andige {\tt hbox}. Um deutlicher zu machen, wie +\TeX\ das nun setzt, sollen die Boxen einmal mitgezeichnet +werden:\medskip + +\thicklines +\fbox{\fbox{E}\fbox{i}\fbox{n}\fbox{e} +\fbox{Z}\fbox{e}\fbox{i}\fbox{l}\fbox{e} \fbox{m}\fbox{i}\fbox{t} +\fbox{T}\fbox{e}\fbox{x}\fbox{t}}\medskip + +Der entsprechende Befehl f\"ur die \"ubereinandergesetzten {\tt hboxen} +hei\ss{}t \"ubrigens {\tt vbox} (f\"ur vertikale Box, wie kaum anders zu +erwarten war. Der entsprechende Befehl daf\"ur lautet: +\index{zzzhbox@{\tt\char92 hbox}} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +\vbox{\hbox{Zwei Zeilen}\hbox{purer Text}} +\end{verbatim} +und das gesetzte Ergebnis sieht dann folgenderma\ss{}en aus:\medskip + +\fbox{\vbox{\hbox{\fbox{\fbox{Z}\fbox{w}\fbox{e}\fbox{i} +\fbox{Z}\fbox{e}\fbox{i}\fbox{l}\fbox{e}\fbox{n}}} +\hbox{\fbox{\fbox{p}\fbox{u}\fbox{r}\fbox{e}\fbox{r} +\fbox{T}\fbox{e}\fbox{x}\fbox{t}}}}}\medskip + +Bei diesem zweiten Beispiel ist auch eine Teilbox erkennbar, die eine +{\em echte} Tiefe besitzt. Sehen sie sich dazu bitte den Rahmen um das +`p' des Wortes `purer' einmal genau an. Sie k\"onnen sehen, da\ss{} der +Rahmen tiefer hinunterreicht, als die Rahmen der anderen Buchstaben. +Auch die, je nach Buchstabe, unterschiedliche Breite der Boxen ist +deutlich erkennbar. + +Normalerweise brauchen sie die Boxbefehl nie, sie erlauben aber +absolute Kontrolle \"uber das Aussehen des Ergebnisses. Es sind z.B. +auch negative \index{Dimension!Angabe} +Dimensionsangaben f\"ur die Breite einer Box zul\"assig, so +da\ss{} auch Buchstaben \"ubereinander gedruckt werden k\"onnen. + +Boxen k\"onnen auch in internen \index{Register!Box} +Registern gespeichert werden. Die Angabe +von: +\index{zzzhbox@{\tt\char92 hbox}}\index{zzzkern@{\tt\char92 kern}} +\index{zzzlower@{\tt\char92 lower}} +\index{zzzsetbox@{\tt\char92 setbox}} +\begin{verbatim} +\setbox0=\hbox{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125em X} +\end{verbatim} +speichert das \TeX\ \index{Logo}Logo in der {\tt box0}, einem der internen +\index{Register!Intern} +Register von \TeX. Sie k\"onnen sich auch den Inhalt einer derartigen +Box ansehen. Mit \index{zzzshowbox@{\tt\char92 showbox}} +`\verb|\showbox0|' erhalten sie: +\index{zzzendtt@{\tt\char92 endtt}}\index{zzzhbox@{\tt\char92 hbox}} +\index{zzzkern@{\tt\char92 kern}} +\begin{verbatim} +\hbox(6.83331+2.15277)x18.6108 +.\tenrm T +.\kern -1.66702 +.\hbox(6.83331+0.0)x6.80557, shifted 2.15277 +..\tenrm E +.\kern -1.25 +.\tenrm X +\end{verbatim} +allerdings nur in ihrem \index{File!Log} +Logfile. Die Angaben im Einzelnen. Zun\"achst +sagt ihnen \TeX, da\ss{} es sich um eine Box mit der +\index{Hoehe!Box@H\"ohe!Box}H\"ohe 6.83331pt, Tiefe +2.15277pt und der Breite 18.6108pt handelt. In der folgenden Zeile +zeigt der f\"uhrende \index{Punkt} +Punkt an, da\ss{} sie sich sozusagen schon im Inneren +der Box befinden. Der erste Inhalt ist das Zeichen `T' in +`\verb|\tenrm|' als \index{Schrift!Art} +Schriftart. Jetzt folgt ein negativer +\index{Abstand}Abstand von +-1.66702pt, das `E' wird etwas an das `T' heranger\"uckt. Gefolgt von +einer weiteren Box, die 6.83331pt hoch ist, 0pt tief und 6.80557pt +breit, au\ss{}erdem ist sie um 2.15277pt nach unten verschoben, was die +{\tt shifted} Angabe aussagt. Der Inhalt dieser Box (angezeigt durch +die {\em zwei} \index{Punkt} +Punkte) ist das `E'. Den Rest k\"onnen sie sich jetzt +sicher selber erkl\"aren. Eine derartige Aufschl\"usselung ist sicher nur +zu \index{Diagnose}Diagnosezwecken sinnvoll. + +Jetzt kennen sie fast schon den ganzen Weg von ihrer \index{Eingabe} +Eingabe bis zur \index{Ausgabe} +Ausgabe durch \TeX. Sie beginnen mit Token, die intern in Boxen +umgewandelt werden. Diese Boxen werden zu einer gr\"o\ss{}eren {\tt hbox} +zusammengef\"ugt, die {\tt hboxen} zu einer, oder mehreren {\tt vbox} +und diese wieder zu einer \index{Seite!Aus Boxen} +Seite, die nat\"urlich auch wieder eine Box +ist. Alles was ihnen noch zum Verst\"andnis fehlt ist das, was die Boxen +zusammenh\"alt, der {\em Leim}, englisch: {\em Glue}. +\section{Leim} +\subsection{Eigenschaften von Leim} +Neben den Boxen gibt es noch etwas in Texten, die mit \TeX\ gesetzt +wurden, und das hei\ss{}t {\em Leim}\footnote{Dieser Leim d\"urfte Lesern +der B\"ucher von \index{Kopka}H.\ Kopka bekannt sein, der Leim hei\ss{}t dort: +\index{Elastische Masse@Elastische +Ma\ss{}e}\index{Masse!Elastisch@Ma\ss{}e!Elastisch}{\em +elastische Ma\ss{}e}. Die Wichtigkeit dieser elastischen Ma\ss{}e wird erst +hier richtig klar.}. Die Zeilen dieses Textes haben z.B.\ einen +derartigen \index{Zwischenraum}Zwischenraum, da\ss{} der \index{Abstand} +Abstand der \index{Grundlinie}Grundlinien zweier Zeilen +immer 12pt betr\"agt. + +Was macht nun diesen Leim aus? Er hat drei Eigenschaften: Eine {\em +nat\"urliches} Ausma\ss{}, ein \index{Schrumpf!Mass@Schrumpf!Ma\ss{}} +{\em Schrumpfma\ss{}} und ein {\em Streckma\ss{}}. +Wenn z.B.\ kleinere Boxen zu einer gr\"o\ss{}eren horizontalen Box +zusammengefa\ss{}t werden, dann wird zwischen den kleinen Boxen Leim +eingef\"ugt. Um zu verstehen, wie das funktioniert, ein kleines +Beispiel: + +\thinlines +\begin{center} +\begin{picture}(10.4,7) +\put(0,2){\framebox(1,4){}} % erste Box +\put(2.8,3.2){\framebox(1.2,1){}} % zweite Box +\put(5.8,3){\framebox(.6,3){}} % dritte Box +\put(8.8,2){\framebox(1.6,4){}} % vierte Box +\put(0,4){\line(1,0){1}} % Bezugslinie +\put(2.8,4){\line(1,0){1.2}} % Bezugslinie +\put(5.8,4){\line(1,0){.6}} % Bezugslinie +\put(8.8,4){\line(1,0){1.6}} % Bezugslinie +\put(1,4){\dashbox{.1}(1.8,0){}} % Verbindungslinie +\put(4,4){\dashbox{.1}(1.8,0){}} % Verbindungslinie +\put(6.4,4){\dashbox{.1}(2.4,0){}} % Verbindungslinie +\put(0,6.5){Breite 5} +\put(2.8,6.5){Breite 6} +\put(5.8,6.5){Breite 3} +\put(8.8,6.5){Breite 8} +\put(1.1,3.5){\makebox(0,0)[tl]{\parbox{1.8cm}{Platz 9\\Streck 3\\Schrumpf 1}}} +\put(4.1,3.5){\makebox(0,0)[tl]{\parbox{1.8cm}{Platz 9\\Streck 6\\Schrumpf 2}}} +\put(6.5,3.5){\makebox(0,0)[tl]{\parbox{1.8cm}{Platz 12\\Streck 0\\Schrumpf 0}}} +\put(5.2,1){\makebox(0,0){Breite 52}} % Gesamtbreite +\put(4,1){\vector(-1,0){4}} % Anzeiger +\put(6.4,1){\vector(1,0){4}} +\put(0,4){\circle*{.1}} % Bezugs- +\put(2.8,4){\circle*{.1}} % punkte +\put(5.8,4){\circle*{.1}} +\put(8.8,4){\circle*{.1}} +\end{picture} +\end{center} + +Das erste Leimst\"uck hat z.B.\ eine nat\"urliche Breite von 9pt, eine +\index{Schrumpf!Moeglichkeit@Schrumpf!M\"oglichkeit} +Schrumpfm\"oglichkeit von 1pt und eine Streckm\"oglichkeit von 3pt. Die +\index{Gesamt!Breite} +Gesamtbreite der ganzen, gro\ss{}en \index{Box!Breite} +Box ergibt sich normalerweise als die +Breite der Einzelboxen, plus die nat\"urliche Breite des Leimes, also: +\[5+9+6+9+3+12+8=52\] +Angenommen, \TeX\ w\"urde aufgefordert diese Box auf eine Breite von +58pt zu strecken (z.B.\ wegen der \index{Rechtsbuendig@Rechtsb\"undig} +Rechtsb\"undigkeit), d.h.\ die Box um +6pt zu strecken. Nun, es gibt insgesamt $3+6+0=9$pt als +\index{Gesamt!Streckmoeglichkeit@Gesamt!Streckm\"oglichkeit} +Gesamtstreckm\"oglichkeit. \TeX\ multipliziert nun jede +Streckm\"oglichkeit mit $6/9$ um die neuen +\index{Groesse!Leim@Gr\"o\ss{}e!Leim}Leimgr\"o\ss{}en zu errechnen. +Damit ergibt sich f\"ur die erste L\"ucke: $9+(6/9)\times 3=11$pt und f\"ur +die zweite L\"ucke: $9+(6/9)\times 6=13$pt. Die letzte L\"ucke ist nicht +weiter streckbar, so da\ss{} sie $12$pt breit bleibt. Das +\index{Gesamt!Bild}Gesamtbild sieht +nun folgenderma\ss{}en aus: + +\begin{center} +\begin{picture}(11.6,7) +\put(0,2){\framebox(1,4){}} % erste Box +\put(3.2,3.2){\framebox(1.2,1){}} % zweite Box +\put(7,3){\framebox(.6,3){}} % dritte Box +\put(10,2){\framebox(1.6,4){}} % vierte Box +\put(0,4){\line(1,0){1}} % Bezugslinie +\put(3.2,4){\line(1,0){1.2}} % Bezugslinie +\put(7,4){\line(1,0){.6}} % Bezugslinie +\put(10,4){\line(1,0){1.6}} % Bezugslinie +\put(1,4){\dashbox{.1}(2.2,0){}} % Verbindungslinie +\put(4.4,4){\dashbox{.1}(2.6,0){}} % Verbindungslinie +\put(7.6,4){\dashbox{.1}(2.4,0){}} % Verbindungslinie +\put(1.1,3.5){$9+2$} +\put(4.5,3.5){$9+4$} +\put(7.7,3.5){$12+0$} +\put(5.8,1){\makebox(0,0){Breite 58}} % Gesamtbreite +\put(4.6,1){\vector(-1,0){4.6}} % Anzeiger +\put(7,1){\vector(1,0){4.6}} +\put(0,4){\circle*{.1}} % Bezugs- +\put(3.2,4){\circle*{.1}} % punkte +\put(7,4){\circle*{.1}} +\put(10,4){\circle*{.1}} +\end{picture} +\end{center} + +W\"are \TeX, umgekehrt angewiesen worden die Box nur 51pt breit zu +machen, dann w\"urde sie erste L\"ucke um $1/3$, die zweite um $2/3$ ihrer +\index{Schrumpf!Moeglichkeit@Schrumpf!M\"oglichkeit} +Schrumpfm\"oglichkeit verkleinert. + +Egal wie, der Leim definiert wurde, so hat \TeX\ dennoch nicht die +M\"oglichkeit eine Box beliebig weit zusammenzuschrumpfen. Im vorherigen +Beispiel ist daher $49$pt die geringste Breite, die die horizontale +Box annehmen kann. Hingegen kann der Leim beliebig weit gestreckt +werden, wenn man ihm die entsprechenden Angaben beigibt. + +Es fragt sich nur, welche Angaben gibt man denn dem Leim? Nun, man +sollte die Ma\ss{}e immer so w\"ahlen, da\ss{} der Text mit dem nat\"urlichen Ma\ss{} +des Leimes am besten aussieht, und die maximale +\index{Schrumpf!Mass@Schrumpf!Ma\ss{}}Schrumpf- bzw. +\index{Masse!Streck@Ma\ss{}e!Streck} +Streckma\ss{}e so, da\ss{} er gerade eben noch gut aussieht. Normalerweise +brauchen sie sich allerdings nicht darum zu k\"ummern, da \TeX\ ihnen +diese Arbeit abnimmt. Um z.B.\ die Abst\"ande zwischen Abs\"atzen zu +bestimmen, gibt es in {\em Plain} \TeX\ den Befehl: +\index{zzzsmallskip@{\tt\char92 smallskip}}`\verb|\smallskip|'. +Dieser Befehl wird automatisch immer hinter einem \index{Absatz} +Absatz eingef\"ugt, +sie kennen also schon genug Beispiele f\"ur die Anwendung. Es ist immer +besser einen derartigen Befehl einzusetzen, als den \index{Abstand} +Abstand explizit +anzugeben. Nur, wenn es unbedingt sein mu\ss{}, k\"onnen sie auf den Leim +zur\"uckgreifen. Stellt sich die Frage, {\em wie} man den nun eine +Leimangabe macht. \"Ublicherweise wird Leim in \TeX\ folgenderma\ss{}en +spezifiziert: +\begin{quote} +$<$dimen$>$ {\tt plus} $<$dimen$>$ {\tt minus} $<$dimen$>$ +\end{quote} +Die Angaben von {\tt plus} $<$dimen$>$ und {\tt minus} $<$dimen$>$ +sind optional, und werden als Null angenommen, wenn sie nicht +angegeben werden. Die \index{Groesse!Leim@Gr\"o\ss{}e!Leim} +Gr\"o\ss{}e, die hinter {\tt plus} steht repr\"asentiert +sie Streckbarkeit, die hinter {\tt minus} die +\index{Schrumpf!Schrumpfbarkeit}Schrumpfbarkeit. Die +nat\"urliche Gr\"o\ss{}e {\em mu\ss{}} angegeben werden, auch wenn sie Null ist. +Der Befehl \index{zzzmedskip@{\tt\char92 medskip}} +`\verb|\medskip|' wird z.B.\ in {\em Plain} \TeX\ folgenderma\ss{}en +definiert: +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\vskip6pt plus2pt minus2pt +\end{verbatim} +Auch \index{Horizontal!Platz}horizontaler Platz wird entsprechend definiert. Der Befehl +\index{zzzenskip@{\tt\char92 enskip}} +`\verb|\enskip|' wird z.B.\ definiert als:\index{zzzhskip@{\tt\char92 hskip}} +\index{zzzrelax@{\tt\char92 relax}} +\begin{verbatim} +\hskip.5em\relax +\end{verbatim} +Es wird also ein halbes `em' Platz gelassen, allerdings ohne die +M\"oglichkeit der \index{Schrumpfung}Schrumpfung oder Streckung. Der Befehl +\index{zzzrelax@{\tt\char92 relax}}`\verb|\relax|' +hinter der Angabe sorgt daf\"ur, da\ss{} der Befehl auch dann richtig +arbeitet, wenn im Text hinter dem Befehl eine `plus' oder `minus' +steht. + +Eine wichtige Eigenschaft des Leimes ist, da\ss{} er auch {\em unendlich} +weit gestreckt werden kann. Nehmen sie z.B.\ an, im letzten Beispiel +w\"are der zweite Leimabschnitt unendlich weit streckbar. Dann w\"urde nur +der zweite \index{Zwischenraum} +Zwischenraum gestreckt, w\"arend die andern unver\"andert +bleiben w\"urden. + +Das wird erst interessant, wenn sie daran denken, da\ss{} +der Befehl \index{zzzcenterline@{\tt\char92 centerline}} +`\verb|\centerline|' nichts anderes ist, als +eine \index{Box!Hbox}hbox von der Breite \index{zzzhsize@{\tt\char92 hsize}} +`\verb|\hsize|', deren Text von zwei +unendlich streckbaren Leimst\"ucken eingerahmt ist. Auch in der kleinen +Geschichte, die wir in einem fr\"uheren Kapitel kennengelernt haben +wurde derartiger Leim benutzt. Die Geschichte endete mit den Befehlen: +\index{zzzvfill@{\tt\char92 vfill}} +`\verb|\vfill|' und \index{zzzeject@{\tt\char92 eject}} +`\verb|\eject|'. `\verb|\eject|' sorgt nur f\"ur die +\index{Ausgabe} +Ausgabe des Textes an den \index{Ausgabe!File} +Ausgabefile, `\verb|\vfill|' hingegen +bedeutet: F\"uge vertikalen \index{Zwischenraum} +Zwischenraum mit der nat\"urlichen L\"ange 0 +ein, der aber unendlich weit streckbar ist. Mit anderen Worten, f\"ulle +die restliche \index{Seite!Auffuellen@Seite!Auff\"ullen} +Seite mit \index{Leer!Raum}Leerraum auf. + +Es gibt nun in \TeX\ verschiedene Arten von {\em Unendlichkeit}, die +sich voneinander unterscheiden. Bei der vertikalen Streckung gibt es +die Befehle: \index{zzzvfil@{\tt\char92 vfil}} +`\verb|\vfil|' und `\verb|\vfill|', wobei der zweite +wesentlich st\"arker wirkt. Wenn `\verb|\vfil|' alleine benutzt wird, +dann wird es soweit, wie n\"otig gestreckt. Tritt es allerdings zusammen +mit `\verb|\vfill|' auf, dann wird es nicht gestreckt, sondern es wird +da gestreckt, wo `\verb|\vfill|' steht. Denken sie sich das einfach +so, als h\"atte `\verb|\vfil|' eine Streckf\"ahigkeit von einem Kilometer, +und `\verb|\vfill|' von einer Million Kilometer. + +Analog gibt es auch noch die Befehl +\index{zzzhfil@{\tt\char92 hfil}}`\verb|\hfil|' und +\index{zzzhfill@{\tt\char92 hfill}}`\verb|\hfill|' +und die Befehle \index{zzzhss@{\tt\char92 hss}} +`\verb|\hss|' und \index{zzzvss@{\tt\char92 vss}} +`\verb|\vss|', die sowohl Streckung, +als auch unendliche \index{Schrumpfung}Schrumpfung zulassen. + +In diesen Zusammenhang geh\"ort auch noch der Befehl +\index{zzzhfilneg@{\tt\char92 hfilneg}}`\verb|\hfilneg|', +bzw.\ \index{zzzvfilneg@{\tt\char92 vfilneg}} +`\verb|\vfilneg|'. Diese Befehle heben die Streckbarkeit von +\index{zzzhfil@{\tt\char92 hfil}} +`\verb|\hfil|' und `\verb|\vfil|' auf. Den Grund f\"ur einen derartigen +Befehl werden wir erst sp\"ater kennenlernen. + +Um derartige unendlich streckbare \index{Masse!Streck@Ma\ss{}e!Streck} +Ma\ss{}e erstelle zu k\"onnen, k\"onnen sie +auf die \index{Primitiv} +Primitive `\verb|fil|', `\verb|fill|' oder `\verb|filll|' +zur\"uckgreifen. Die Befehle `\verb|\vfil|', `\verb|\vfill|', +`\verb|\vss|' und `\verb|\vfilneg|' werden z.B.\ definiert als: +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\vskip 0pt plus 1fil +\vskip 0pt plus 1fill +\vskip 0pt plus 1fil minus 1fil +\vskip 0pt plus -1fil +\end{verbatim} +Die dritte Alternative: `\verb|filll|' sollten sie nicht benutzen, +auch {\em Plain} \TeX\ macht keinen Gebrauch davon. Sie ist f\"ur absolute +Notf\"alle vorbehalten. +\subsection{Verwendung des Leims durch \TeX} +Wie wird der Leim von {\em Plain} \TeX\ verwendet? Es gibt einige +interessante Anwendungen. \TeX\ f\"ugt z.B.\ hinter einem Satz einen +etwas \index{Groesse!Zwischenraum@Gr\"o\ss{}e!Zwischenraum} +gr\"o\ss{}eren \index{Zwischenraum}Zwischenraum ein, als zwischen normalen Worten. +Au\ss{}erdem wird die Streckbarkeit des Zwischenraums an diesen Stellen +erh\"oht. Betrachten wir folgenden Satz:\footnote{Originalbeispiel aus +dem \TeX Book.} +\begin{verbatim} +``Oh, oh!'' cried Baby Sally. Dick and Jane laughed. +\end{verbatim} +In nat\"urlicher Breite sieht der Satz so aus:\medskip + +``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.\medskip + +Was aber passiert, wenn man ihn um 5pt, 10pt, 15pt oder mehr +auseinanderzieht? Sehen wir es uns an:\medskip + +\hbox spread 5pt{``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.} + +\hbox spread 10pt{``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.} + +\hbox spread 15pt{``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.} + +\hbox spread 20pt{``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.}\medskip + +Der Leim hinter dem \index{Komma}Komma wird um das $1\frac{1}{4}$fache des Normalen +gestreckt. Hinter dem \index{Punkt} +Punkt und hinter dem `\verb|!''|' sogar um das +dreifache. Zwischen zusammengeh\"origen Zeichen ist kein Leim, so da\ss{} +die einzelnen Worte ihr Aussehen behalten. Wie siehts nun aus, wenn +dieser Satz auf das Minimum zusammengestaucht wird?\medskip + +{\hfuzz 1000pt +\hbox to 0pt{``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.}} +\medskip + +Der \index{Zwischenraum}Zwischenraum nach dem \index{Komma} +Komma wird nur 80\% dessen, der Zwischenraum +nach dem \index{Punkt} +Punkt, bzw.\ dem Ausrufezeichen sogar nur ein Drittel dessen +kleiner, wie der normale Zwischenraum zwischen den Worten. + +F\"ur den Normalfall ist das auch so in Ordnung, was aber, wenn ein +\index{Punkt} +Punkt \"uberhaupt nicht ein Wortende markiert? Dazu gibt es mehrere +M\"oglichkeiten: +\begin{enumerate} +\item Wenn sie drei \index{Punkt} +Punkte schreiben wollen, um die Fortsetzung eines +Satzes anzuzeigen $\ldots$, dann sollten sie statt der drei Punkte +lieber die Sequenz \index{zzzldots@{\tt\char92 ldots}} +`\verb|$\ldots$|' schreiben. Damit schalten sie +kurzfristig in den mathematischen \index{Modus!Mathematisch} +Modus um und geben dort mit dem +Befehl `\verb|\ldots|' die gew\"unschten Punkte an. \"Ubrigens sieht diese +Version auch besser aus. Drei Punkte ergeben n\"amlich normalerweise, ohne +die Umschaltung in den mathematischen Modus: `...'. +\item \index{Punkt}Punkte hinter \index{Abkuerzung@Abk\"urzung} +Abk\"urzungen beenden \"ublicherweise auch keinen +Satz. Hier gibt es zwei M\"oglichkeiten. Entweder, sie ersetzen das +\index{Leer!Zeichen} +Leerzeichen hinter dem \index{Punkt} +Punkt durch die Tilde: `\verb|~|', oder sie +setzen ein Kontrollleerzeichen: `\verb*+\ +', je nachdem, ob sie eine +Trennung an dieser Stelle zulassen wollen oder nicht. Die Tilde wird +durch ein Leerzeichen ersetzt, an dem aber kein Zeilenumbruch +stattfinden kann. +\item Sie k\"onnen sich diese \"Uberlegungen sparen, wenn der +\index{Punkt}Punkt hinter +einem \index{Grossbuchstaben@Gro\ss{}buchstaben} +Gro\ss{}buchstaben steht. \TeX\ nimmt dann sowieso an, da\ss{} es sich +um eine \index{Abkuerzung@Abk\"urzung} +Abk\"urzung handelt und behandelt den \index{Punkt}Punkt nicht wie einen +\index{Satz!Ende}Satz-Ende-Punkt. +\end{enumerate} +Letztlich k\"onnen sie alle \"Uberlegungen zu \index{Zwischenraum} +Zwischenr\"aumen vergessen, +wenn sie zu Beginn ihres Textes den Befehl: +\index{zzzfrenchspacing@{\tt\char92 frenchspacing}}`\verb|\frenchspacing|' +schreiben. Mit diesem Befehl bewirken sie, da\ss{} alle Zwischenr\"aume +gleich gro\ss{} sind, egal, wie und wo sie stehen. Unser Beispiel s\"ahe +damit folgenderma\ss{}en aus:\medskip + +{\frenchspacing +``Oh, oh!'' cried Baby Sally. Dick and Jane laughed.}\medskip + +Mit `\verb|\nonfrenchspacing|' wird wieder zur\"uckgeschaltet. +Angenommen, wir h\"atten den Befehl gegeben, normal mit +\index{Zwischenraum}Zwischenraum +umzugehen, dann k\"onnten wir uns den Leim ansehen, indem wir den Satz +in eine Box schreiben und diese dann ansehen: +\index{zzzglue@{\tt\char92 glue}}\index{zzzkern@{\tt\char92 kern}} +\begin{verbatim} +.\tenrm \ (ligature ``) +.\tenrm O +.\tenrm h +.\tenrm , +.\glue 3.33333 plus 2.08331 minus 0.88889 +.\tenrm o +.\tenrm h +.\tenrm ! +.\tenrm \" (ligature '') +.\glue 4.44444 plus 4.99997 minus 0.37036 +.\tenrm c +.\tenrm r +.\tenrm i +.\tenrm e +.\tenrm d +.\glue 3.33333 plus 1.66666 minus 1.11111 +.\tenrm B +.\tenrm a +.\tenrm b +.\kern-0.27779 +.\tenrm y +.\glue 3.33333 plus 1.66666 minus 1.11111 +.\tenrm S +.\tenrm a +.\tenrm l +.\tenrm l +.\tenrm y +.\kern-0.83334 +.\tenrm . +.\glue 4.44444 plus 4.99997 minus 0.37036 +\end{verbatim} +Normalerweise hat der Leim bei der \index{Schrift!Art} +Schriftart `\verb|\tenrm|' die +Werte: 3.33333pt plus 1.66666 pt minus 1.11111 pt, aber achten sie +darauf, wie sich bei der \index{Interpunktion} +Interpunktion der Leim \"andert. Sie k\"onnen an +diesem Beispiel noch mehr sehen. Zum einen wandelt \TeX\ die beiden +`\verb|``|' in eine \index{Ligatur} +Ligatur (also {\em ein} Zeichen) und ausserdem +werden noch einige `\verb|\kern|' Befehle eingef\"ugt. `\verb|\kern|' +verh\"at sich \"ahnlich wie Leim, nur das er weder streck- noch +\index{Schrumpf!Schrumpfbarkeit} +schrumpfbar ist und es wird hinter einem `\verb|\kern|' Befehl {\em +nie} ein Zeilenumbruch durchgef\"uhrt, es sei denn es folgt unmittelbar +ein Leimbefehl. +\subsection{Die genauen Regeln f\"ur den Leim} +Ihnen d\"urfte eventuell schon aufgefallen sein, da\ss{} die oben +beschriebenen Regeln nicht {\em hunderprozentig} richtig sind. So +w\"urden die obigen Regeln nicht erkl\"aren, wieso das Ausrufezeichen +richtig behandelt wird, obwohl noch die beiden +\index{Anfuehrungszeichen@Anf\"uhrungszeichen}Anf\"uhrungsstriche +folgen. + +Es gibt einen weiteren wichtigen Wert, den \index{Zwischenraum!Faktor} +Zwischenraumfaktor ($f$). +Dieser ist \"ublicherweise $1000$. Wenn der Faktor gr\"o\ss{}er als $2000$ +wird, wird der \index{Zwischenraum} +Zwischenraum folgenderma\ss{}en berechnet: Addiere zum +normalen Zwischenraum den sog. Extrazwischenraum\footnote{Zu jedem +Zeichensatz sind die folgenden Angaben vorgegeben: Normaler +Zwischenraum, normaler Streckwert, normaler \index{Schrumpf!Wert} +Schrumpfwert und eben +dieser Extrazwischenraum. F\"ur {\tt cmr10} sind die Werte: 3.33333pt, +1.66666pt, 1.11111pt und 1.11111pt} und multipliziere den Streckwert +mit $f/1000$, den Schrumpfwert mit $1000/f$. + +Es gibt nun f\"ur sie einfache M\"oglichkeiten den normalen Zwischenraum +zu \"uberschreiben. Mit den Befehlen: \index{zzzspaceskip@{\tt\char92 spaceskip}} +`\verb|\spaceskip|' und `\verb|\xspaceskip|' wird folgenderma\ss{}en verfahren: +Ist der +Zwischenraumfaktor ($f$) gr\"o\ss{}er als 2000, dann wird entweder der +Leimwert von \index{zzzxspaceskip@{\tt\char92 xspaceskip}} +`\verb|\xspaceskip|' genommen, wenn dieser ungleich Null +ist, oder der von `\verb|\spaceskip|', wobei die Streck- und +\index{Schrumpf!Komponenten} +Schrumpfkomponenten mit $f/1000$ bzw.\ $1000/f$ multipliziert werden. +Das \index{zzzraggedright@{\tt\char92 raggedright}} +`\verb|\raggedright|' Makro z.B.\ benutzt die beiden Befehle, um +jedes Strecken oder \index{Schrumpfung}Schrumpfen zu verhindern. + +Wenn eine \index{Horizontal!Liste}horizontale \index{Liste!Horizontal} +Liste begonnen wird, wird der \index{Zwischenraum!Faktor} +Zwischenraumfaktor +auf 1000 gesetzt. Ebenso nach jedem \index{Nichtbuchstaben} +Nichtbuchstaben oder einer +mathematischen Formel. Jedes andere Zeichen, was an die Liste angef\"ugt +wird, hat einen eigenen Zwischenraumfaktor, der dann den alten Wert +ersetzt. Dabei gibt es allerdings noch zwei Regeln: +\begin{enumerate} +\item Ist der Faktor des Zeichens 0, dann wird der alte Wert +beibehalten, +\item Ist der Wert von $1000$ verschieden, und es gilt z.B.: $f<1000<g$ +($g$ der Faktor des Zeichens), dann erh\"alt $f$ den Wert $1000$. Mit +andern Worten, $f$ {\em \"uberspringt} nicht die $1000$er Grenze. +\end{enumerate} +Der gr\"o\ss{}tm\"ogliche Zwischenraumfaktor ist $32767$, und damit gr\"o\ss{}er, +als jemals n\"otig. + +Wenn {\tt INITEX} seine Arbeit aufnimmt, haben alle Zeichen den +Zwischenraumfaktor 1000, au\ss{}er den +\index{Grossbuchstaben@Gro\ss{}buchstaben}Gro\ss{}buchstaben, die den Wert 999 +haben.\footnote{Erraten sie, warum \index{Punkt} +Punkte hinter Gro\ss{}buchstaben anders +behandelt werden?} {\em Plain} \TeX\ \"andert nun einige Werte mit dem +\index{Primitiv}\index{zzzcatcode@{\tt\char92 catcode}} +Primitiv: \index{zzzsfcode@{\tt\char92 sfcode}} +`\verb|\sfcode|', der \"ahnlich dem `\verb|\catcode|' Befehl +arbeitet. +\begin{verbatim} +\sfcode`)=0 \sfcode`.=3000 +\end{verbatim} +\"andert den Faktor f\"ur die schlie\ss{}ende \index{Klammer!Platz um} +Klammer so, da\ss{} er ignoriert +wird, f\"ur den \index{Punkt} +Punkt so, da\ss{} zus\"atzlicher \index{Zwischenraum}Zwischenraum eingef\"ugt wird. + +Bei \index{Ligatur}Ligaturen berechnet sich der +\index{Zwischenraum!Faktor}Zwischenraumfaktor aus den +Einzelkomponenten, aus denen die Ligatur besteht. + +Nun zu einem Beispiel, wie \TeX\ {\em wirklich} eine Zeile +zusammensetzt: Die nat\"urliche Breite einer \index{Box!Breite} +Box setzt sich zusammen aus +allen Zeichenboxbreiten plus den nat\"urlichen Breiten der Leimst\"ucke. +Ist die nat\"urliche Breite gleich der gew\"unschten Breite, passiert +nichts. Ist hingegen die gew\"unschte Breite kleiner oder gr\"o\ss{}err, als +die nat\"urliche Breite, dann wird ein Faktor berechnet, mit dem jeder +\index{Schrumpf!Faktor} +Schrumpf- bzw.\ Streckfaktor der Leimst\"ucke multipliziert wird. Das +Ergebnis ist eine Box, die genau die gew\"unschte Breite hat. + +Um einer \index{Box!Hbox}{\tt hbox} eine feste Breite zu geben benutzt man den Befehl: +\index{zzzhbox@{\tt\char92 hbox}} +\begin{verbatim} +\hbox to <dimen>{ ... } +\end{verbatim} +\index{zzzcenterline@{\tt\char92 centerline}} +Das Makro `\verb|\centerline|' beginnt z.B.: `\verb|\hbox to\hsize|'. +\"Ahnlich arbeitet die Angabe von: +\index{zzzhbox@{\tt\char92 hbox}} +\begin{verbatim} +\hbox spread <dimen>{ ... } +\end{verbatim} +Die angegebene \index{Dimension} +Dimension besagt, um wieviel gr\"o\ss{}er, als die nat\"urliche +Breite ($<$dimen$> > 0$), bzw.\ um wieviel kleiner als die nat\"urliche +\index{Groesse!Natuerliche@Gr\"o\ss{}e!Nat\"urliche} +Gr\"o\ss{}e ($<$dimen$> < 0$) die {\tt hbox} werden soll. +\section{Die Feinheiten einer vertikalen Box}\index{Box!Vbox} +Die \index{Grundlinie} +Grundlinie einer horizontalen Box ist gleich der gemeinsamen +Grundlinie aller Elemente, soweit diese nicht angehoben oder abgesenkt +wurden. Die \index{Hoehe!Box@H\"ohe!Box} +H\"ohe einer derartigen Box ist gleich der H\"ohe des h\"ochsten +Elements, die Tiefe gleich der tiefsten Einzeltiefe. Somit kann eine +horizontale Box nur positive H\"ohe und Tiefe haben, wohl aber eine +negative Breite. + +Wenn nun horizontale Boxen zu einer vertikalen Box zusammengef\"ugt +werden sollen, dann funktioniert das \"ahnlich, wie bei den horizontalen +Boxen, mit einem Unterschied. Die horizontalen Boxen sollen sich nicht +ber\"uhren. Dazu gibt es drei Werte, die vorher festgelegt werden +m\"ussen: +\index{zzzbaselineskip@{\tt\char92 baselineskip}} +\index{zzzlineskip@{\tt\char92 lineskip}} +\index{zzzlineskiplimit@{\tt\char92 lineskiplimit}} +\begin{verbatim} +\baselineskip=<Leim> +\lineskip=<Leim> +\lineskiplimit=<dimen> +\end{verbatim}\index{Baseline!Skip} +Wird nun eine neue horizonatale \index{Box!In Liste}Box an eine vertikale +\index{Liste!Vertikal}Liste angef\"ugt, +dann wird der \index{Abstand!Zeilen} +Zeilenabstand so berechnet, da\ss{} der Abstand der +Basislinie der neuen \index{Box!Basislinie} +Box, von der Basislinie der letzten Box genau den +\index{zzzbaselineskip@{\tt\char92 baselineskip}} +Wert von `\verb|\baselineskip|' hat. Ist das Ergebnis so, da\ss{} die +Zeilen mit dieser L\"osung zu nahe aneinanderliegen, genauer, n\"aher als +der Wert in `\verb|\lineskiplimit|', dann wird statt dessen der Wert +\index{zzzlineskip@{\tt\char92 lineskip}}`\verb|\lineskip|' benutzt. + +Als Ausnahme von dieser Regel dienen nur die Befehle: +\index{zzzvskip@{\tt\char92 vskip}}`\verb|\vskip|' +und \index{zzzkern@{\tt\char92 kern}} +`\verb|\kern|', und alle daraus zusammengesetzten Befehle. Hiermit +ist es m\"oglich einen anderen, als den normalen \index{Abstand!Zeilen} +Zeilenabstand zu +erzeugen. Z.B.\ der Befehl +\index{zzzsmallskip@{\tt\char92 smallskip}}`\verb|\smallskip|' arbeitet so. Eine +weitere Ausnahme besteht darin, da\ss{} hinter +\index{zzzxrule@{\tt\char92 xrule}}`\verb|\xrule|'-Befehlen +kein \index{Zwischenraum!Zeile} +Zeilenzwischenraum eingef\"ugt wird. Sie k\"onnen den \index{Zwischenraum} +Zwischenraum +aber auch mit dem Befehl: \index{zzznointerlineskip@{\tt\char92 nointerlineskip}} +`\verb|\nointerlineskip|' selber verhindern. + +Als Regel sollte sie sich folgendes angew\"ohnen: Wenn ihr Text \"uber +mehrere Zeilen geht, dann sollte \index{zzzbaselineskip@{\tt\char92 baselineskip}} +`\verb|\baselineskip|' {\em keine} +\index{Schrumpf!Angabe} +Schrumpf- oder Streckangaben enthalten, um so das Aussehen der +\index{Seite!Aussehen}Seiten +gleichm\"a\ss{}iger zu gestalten. Bei Texten, die nur \"uber eine Seite gehen, +ist dagegen die Angabe dieser Werte sinvoll, um eine bessere +Ausnutzung der Seite zu erhalten. + +Zur Berechnung des \index{Zwischenraum!Zeile} +Zeilenzwischenraums greift \TeX\ \"ubrigens auf ein +\index{Primitiv} +Primitiv mit Namen: +\index{zzzprevdepth@{\tt\char92 prevdepth}} +`\verb|\prevdepth|' zur\"uck. Normalerweise die +Tiefe der letzten horizontalen \index{Box!Tiefe} +Box, die angef\"ugt wurde. Der Wert wird +allerdings auf $-1000$ gesetzt, am Anfang einer neuen vertikalen +\index{Liste!Vertikal}Liste, oder nach einem +\index{zzzrule@{\tt\char92 rule}}`\verb|\rule|'-Befehl. Sie k\"onnen den Wert aber +auch {\em von Hand} \"andern, wenn sie es wollen. + +Schlie\ss{}lich noch die exakten Regeln, nach denen eine neue horizontale +Box an eine vertikale Box angeh\"angt wird: Angenommen die neu Box hat +eine \index{Hoehe!Box@H\"ohe!Box} +H\"ohe von $h$, und der Wert von `\verb|\prevdepth|' ist $p$. +Weiterhin sollen sein: +\index{zzzbaselineskip@{\tt\char92 baselineskip}} +\index{zzzlineskiplimit@{\tt\char92 lineskiplimit}} +\begin{verbatim} +\baselineskip=b plus y minus z +\lineskiplimit=l +\end{verbatim} +Wenn $p\le -1000$pt wird kein \index{Zwischenraum!Zeile} +Zeilenzwischenraum eingef\"ugt. Ist +andererseits: $b-p-h\ge l$ dann wird der \index{Zwischenraum} +Zwischenraum $(b-p-h) +\mbox{ plus } x \mbox{ minus } y)$ eingef\"ugt, ansonsten {\tt\char92 +lineskip}. + +F\"ur die vertikalen Boxen gelten dieselben Befehle, wie f\"ur die +horizontalen Boxen, mit dem Unterschied, da\ss{} der Befehl: `\verb|\vbox|' +\index{zzzvbox@{\tt\char92 vbox}} +verwendet wird. Es sind nat\"urlich auch die Befehle: `\verb|\vbox to +...|' und `\verb|\vbox spread ...|' erlaubt. + +Der tiefste vorkommende Referenzpunkt innerhalb einer vertikalen +\index{Box!Referenzpunkt}Box +wird als Referenzpunkt f\"ur die ganze vertikale Box genommen. +Normalerweise werden vertikale Boxen so untereinander gesetzt, da\ss{} +ihre Referenzpunkte senkrecht untereinander liegen, mit den Befehlen: +\index{zzzmoveleft@{\tt\char92 moveleft}} +\index{zzzmoveright@{\tt\char92 moveright}} +\begin{verbatim} +\moveright<dimen><box> +\moveleft<dimen><box> +\end{verbatim} +k\"onnen sie aber auch nach rechts oder links verschoben werden. Dies +entspricht den Befehlen +\index{zzzraise@{\tt\char92 raise}} +`\verb|\raise|' und \index{zzzlower@{\tt\char92 lower}} +`\verb|\lower|' in +horizontalen Boxen. +\section{Sonderf\"alle} +Neben dem Befehl f\"ur eine vertikale \index{Box!Vbox} +{\tt vbox} gibt es auch den +Befehl: \index{zzzvtop@{\tt\char92 vtop}} +`\verb|\vtop|'. Dieser erzeugt auch eine vertikale Box, und +die zugeh\"origen Befehle arbeiten komplett analog zu denen f\"ur +\index{zzzvbox@{\tt\char92 vbox}} +`\verb|\vbox|'. Der Unterschied besteht darin, da\ss{} die Basislinie der +{\em obersten} enthaltenen horizontalen Box als Referenzpunkt genommen +wird. Damit sind Konstruktionen wie die folgende m\"oglich: +\index{zzzhbox@{\tt\char92 hbox}} +\begin{verbatim} +\hbox{Hier sind \vtop{\hbox{zwei Zeilen}\hbox{mit Text}}} +\end{verbatim} +Das ergibt:\medskip + +\hbox{Hier sind \vtop{\hbox{zwei Zeilen}\hbox{mit Text}}}\medskip + +Ein weiteres Element bei der Arbeit mit vertikalen Boxen stellt der +Befehl \index{zzzstrut@{\tt\char92 strut}} +`\verb|\strut|' dar. Mit ihm wird eine Box der +\index{Hoehe!Box@H\"ohe!Box}H\"ohe 8.5pt, der +Tiefe 3.5pt und der Breite Null bereitgestellt. Sie k\"onnen diesen +Befehl benutzen, um immer korrekte Abst\"ande zu erzwingen. Schauen sie +sich z.B.\ im Anhang das `\verb|\footnote|' Makro an, das daf\"ur sorgt, +da\ss{} mehrere \index{Fussnote!Absetzen@Fu\ss{}note!Absetzen} +Fu\ss{}noten auch voneinander abgesetzt werden. + +Letztlich sind noch die Befehle \index{zzzrlap@{\tt\char92 rlap}} +`\verb|\rlap|' und +\index{zzzllap@{\tt\char92 llap}}`\verb|\llap|' +interessant. Sie sorgen daf\"ur, da\ss{} der Text, auf den sich die Befehle +beziehen folgenderma\ss{}en verh\"alt. Das Makro `\verb|\rlap|' gibt den +zugeh\"origen Text aus, nimmt aber keinen Platz weg. Genauer, es wird +eine Box der Breite Null erzeugt, an den sich der zugeh\"orige Text +anschlie\ss{}t. Man kann das auch so verstehen, als w\"urde der Text +ausgegeben, und dann um die Breite des Textes zur\"uckgegangen. Somit +ist das Zeichen: `$\neq$' auch produzierbar mit dem Befehl: +`\verb|\rlap=/|'. Analog arbeitet der Befehl `\verb|\llap|' nur, da\ss{} +hier der Text sozusagen {\em nach links} ausgegeben wird. Das obige +Zeichen lie\ss{}e sich also auch mit. `\verb|/\llap=|' erzeugen. +\chapter{Zusammensetzung der Seiten} +\section{Modi} +\TeX\ kennt sechs verschiedene +Bearbeitungsmodi:\index{Horizontal!Modus} +\begin{itemize} +\item Den {\em vertikalen Modus}, in dem die \"ausserste vertikale +\index{Liste!Vertikal}Liste +bearbeitet wird, die zur \index{Ausgabe}Ausgabe der Seiten f\"uhrt. +\item Den {\em internen vertikalen Modus} zum Aufbau von +`\verb|\vbox|'en.\index{zzzvbox@{\tt\char92 vbox}} +\item Den {\em horizontalen Modus} um aus Zeilen Paragraphen +aufzubauen. +\item Den {\em eingeschr\"ankten horizontalen Modus} zum Aufbau von +\index{zzzhbox@{\tt\char92 hbox}}`\verb|\hbox|'en. +\item Den {\em mathematischen Modus} mit dem mathematische Formeln in +eine horizontale \index{Liste!Horizontal}Liste eingef\"ugt werden. +\item Den {\em abgesetzten mathematischen Modus}, mit dem Formeln in +eine eigene Zeile gesetzt werden, die den momentanen Paragraphen +unterbricht. +\end{itemize}\index{Formel!abgesetzte} +Normalerweise braucht sie der Modus, in dem \TeX\ sich gerade befindet +nicht zu interessieren, h\"ochstens bei der \index{Fehler!Suche} +Fehlersuche kann es +hilfreich sein die verschiedenen Modi zu kennen. Grunds\"atzlich reicht +es zu wissen, da\ss{} es die drei Grundtypen: vertikaler, horizontaler und +mathematischer \index{Modus!Mathematisch} +Modus gibt. Manche Befehle haben, je nach momentanem +Modus unterschiedliche Wirkung. Der Befehl \index{zzzkern@{\tt\char92 kern}} +`\verb|\kern|' bewirkt +z.B.\ einen vertikalen resp.\ horizontalen \index{Zwischenraum} +Zwischenraum, je nach +Modus, in dem er angetroffen wird. + +Betrachten wir mal wieder unser Lieblingsbeispiel: die kleine Story. +Zu Bearbeitungsbeginn befindet sich \TeX\ immer im vertikalen Modus. +Die \index{Abstand!Anweisung} +Abstandsanweisung, sowie der \index{Horizontal!Strich} +horizontale Strich, werden einfach an +die vertikale \index{Liste!Horizontal} +Liste angef\"ugt. Auch die \index{Box!Centerline} +Box, die von \index{zzzcenterline@{\tt\char92 centerline}} +`\verb|\centerline|' erzeugt wird, wird einfach an die Liste +angeh\"angt, sie erfordert aber etwas mehr Vorarbeit. Die Box, die `{\tt +A SHORT STORY}' enth\"alt wird im eingeschr\"ankten horizontalen Modus +erstellt. Die beiden folgenden Paragraphen werden dann im normalen +horizontalen Modus erstellt. + +Wenn sich \TeX\ im vertikalen Modus befindet, sorgt jeder auftretende +Buchstabe f\"ur ein Umschalten in den horizontalen Modus. Das gilt aber +auch f\"ur die Befehle: `\verb|\char|', \index{zzzaccent@{\tt\char92 accent}} +`\verb|\accent|',\index{zzzhskip@{\tt\char92 hskip}} +`\verb|\hskip|', `\verb*|\ |' und +\index{zzzvrule@{\tt\char92 vrule}}`\verb|\vrule|' oder die Umschaltung +in den mathematischen Modus (\$). Ausserdem l\"a\ss{}t sich mit den +Befehlen: \index{zzzindent@{\tt\char92 indent}} +`\verb|\indent|' oder \index{zzznoindent@{\tt\char92 noindent}} +`\verb|\noindent|' in den horizontalen +Modus umschalten. Diese Befehle werden zu Beginn eines Paragraphen +gebraucht um eine \index{Einrueckung@Einr\"uckung} +Einr\"uckung der Gr\"o\ss{}e \index{zzzparindent@{\tt\char92 parindent}} +`\verb|\parindent|' zu +bewirken, oder eben nicht. + +Der horiontale Modus wird beendet durch: +\index{zzzpar@{\tt\char92 par}} +\begin{enumerate} +\item Zwei \index{Leer!Zeile}Leerzeilen, +\item den Befehl: `\verb|\par|' +\item einen inkompatibelen Befehl wie z.B.:\ +\index{zzzvskip@{\tt\char92 vskip}}`\verb|\vskip|', der im +horizontalen Modus keinen Sinn erg\"abe. +\end{enumerate} + +Der mathematische Modus wird durch ein \index{Dollarzeichen} +Dollarzeichen (\$) eingeleitet +und solange beibehalten, bis wieder ein schlie\ss{}endes Dollarzeichen +gefunden wird. Die Dollarzeichen wirken also wie eine +\index{Klammer!Dollarzeichen als}Klammer. + +Mit einem doppelten \index{Dollarzeichen!Doppelt} +Dollarzeichen wird in den +abgesetzten\index{Formel!abgesetzte} +mathematischen Modus geschaltet (\$\$). Der laufende Paragraph wird +unterbrochen, die mathematische Formel in einer eigenen Zeile gesetzt +und nach dem schlie\ss{}enden doppelten Dollarzeichen wird der Paragraph +wieder fortgesetzt. So ergibt: +\index{zzzapprox@{\tt\char92 approx}} +\begin{verbatim} +Die Nummer $$\pi \approx 3.1415926536$$ ist wichtig. +\end{verbatim} +Die Nummer $$\pi \approx 3.1415926536$$ ist wichtig. + +Im vertikalen Modus werden \index{Leer!Zeichen} +Leerzeichen und -zeilen ignoriert. Eine +Ausnahme bildet nur das kontrollierte Leerzeichen (`\verb*|\ |'), das +einen neuen Paragraphen einleitet, nachdem zuvor die +\index{Einrueckung@Einr\"uckung}Einr\"uckung +vorgenommen wurde. + +Um einen Text zu beenden sollte man am besten den Befehl: +\index{zzzbye@{\tt\char92 bye}}`\verb|\bye|' +verwenden, der eine \index{Abkuerzung@Abk\"urzung} +Abk\"urzung f\"ur die Befehlsfolge: \index{zzzvfill@{\tt\char92 vfill}} +`\verb|\vfill|' +(auff\"ullen der letzten Seite mit Leerplatz), +\index{zzzeject@{\tt\char92 eject}}`\verb|\eject|' +(\index{Ausgabe}Ausgabe +der Seite) und `\verb|\end|' (Beendigung der Arbeit von \TeX) +darstellt. + +Der interne vertikale Modus unterscheidet sich nur geringf\"ugig vom +normalen vertikalen Modus und der eingeschr\"ankte +\index{Horizontal!Modus}horizontale Modus +noch weniger vom normalen horizontalen Modus. Dennoch gibt es kleine +Unterschiede, da die Zielsetzung ein wenig anders ist. + +\TeX\ schaltet h\"aufig zwischen den Modi hin und her. Dabei ist der +\"ausserste Modus immer der vertikale Modus. Wird er unterbrochen, dann +wird nach der Unterbrechung der vertikale Modus wiederaufgenommen. +Alle Modi k\"onnen getestet werden, wenn man folgenden \index{File!Test} +File eingibt: +\index{zzznoindent@{\tt\char92 noindent}} +\index{zzzshowlists@{\tt\char92 showlists}} +\index{zzztracingcommands@{\tt\char92 tracingcommands}} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +\tracingcommands=1 +\hbox{ +$ +\vbox{ +\noindent$$ +x\showlists +$$}$}\bye +\end{verbatim} +Der erste Befehl in diesem File bewirkt, da\ss{} alle weiteren Aktionen +genauer mitprotokolliert werden. Der Logfile zu dieser Datei sieht +damit folgenderma\ss{}en aus: +\index{Display!Mode} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +{vertical mode: \hbox} +{restricted horizontal mode: blank space} +{math shift character $} +{math mode: blank space} +{\vbox} +{internal vertical mode: blank space} +{\noindent} +{horizontal mode: math shift character $} +{display math mode: blank space} +{the letter x} +\end{verbatim} +Versuchen sie diese \index{Ausgabe} +Ausgabe selber zu verstehen, so schwierig, wie es +auf den ersten Blick aussieht ist es gar nicht. Denken sie nur daran, +da\ss{} \TeX\ die \index{Markierung!Zeilenende} +Zeilenendemarkierung in ein \index{Leer!Zeichen} +Leerzeichen umwandelt. Der\index{zzzshowlists@{\tt\char92 showlists}} +Befehl `\verb|\showlists|' soll hier zun\"achst ignoriert werden. + +\section{Wie macht \TeX\ aus Zeilen Paragraphen?} +\subsection{Das Vorgehen und Sonderf\"alle} +Grunds\"atzlich werden Zeilenumbr\"uche innerhalb eines Paragraphen immer +f\"ur den ganzen Paragraphen berechnet. Die Vorgehensweise ist dabei +so, da\ss{} die Umbr\"uche gesucht werden, bei denen die \index{Badness} +{\em badness} f\"ur +den ganzen Paragraphen am geringsten ist. \TeX\ kann nat\"urlich nicht +f\"ur {\em psychologisch} schlechte Umbr\"uche verantwortlich gemacht +werden. In ganz schlimmen F\"allen\footnote{Ich erinnere hier immer +wieder gerne an das Beispiel aus der {\em Context} Dokumentation: Man +sollte Urinstinkt nicht zu: Urin -- stinkt trennen.} mu\ss{} man wohl per +Hand nachhelfen. Es gibt aber f\"ur viele F\"alle eine einfache +M\"oglichkeit Zeilenumbr\"uche zu verhindern: Die Tilde (`\verb|~|'). + +Die Tilde ersetzt ein \index{Leer!Zeichen} +Leerzeichen, \TeX\ setzt an die Stelle auch ein +Leerzeichen, bricht aber an dieser Stelle die Zeile nicht um. Man +sollte die Tilde z.B.\ in folgenden F\"allen +benutzen:\index{Kapitel!Nummer} + +1. \index{Referenz}Referenzen in Texten: +\begin{verbatim} +Kapitel~1 Satz~12 +Anhang~A Figur~13 +\end{verbatim} + +2. Zwischen Vornamen und zwischen den Teilen von +Nachnamen:\index{Gogh}\index{Knuth. D.} +\begin{verbatim} +Donald~E. Knuth +Vincent van~Gogh +Fritz~der~Gro\ss{}e +\end{verbatim} + +3. Zwischen mathematischen Symbolen und ihren Bezeichnern: +\begin{verbatim} +Breite~$b$ H\"ohe~$h$ +\end{verbatim} + +4. Zwischen Symbolen in Serie: +\index{zzzldots@{\tt\char92 ldots}} +\begin{verbatim} +1,~2 oder~3 +1,~2 $\ldots$~$n$ +\end{verbatim} +Auch \index{Box!Hbox}\index{zzzhbox@{\tt\char92 hbox}} +`\verb|\hboxen|' werden von \TeX\ nicht gebrochen. Wenn sie z.B.\ +einen Seitenbereich angeben wollen, dann schreiben sie am besten: +`\verb|Seiten \hbox{1--3}|'. Seien sie aber bitte mit dieser Variante +vorsichtig. Es ist z.B.\ besser `\verb|Kapitel~12|', als +`\verb|\hbox{Kapitel 12}|' zu schreiben, da im ersten Falle das +\index{Leer!Zeichen} +Leerzeichen noch gestreckt oder geschrumpft werden kann und au\ss{}erdem +das Wort `\verb|Kapitel|' noch getrennt werden kann. + +Einen Zeilenumbruch an einer bestimmten Stelle erzwingen +sie mit dem Befehl \index{zzzbreak@{\tt\char92 break}}`\verb|\break|'. +Er\hfil kann\hfil allerdings\hfil dazu\hfil f\"uhren,\break da\ss{} ihre +Zeile etwas in die L\"ange gezogen wird. Wenn sie wollen, da\ss{} \TeX\ +zun\"achst die Zeile mit \index{Leer!Platz} +leerem Platz auff\"ullt,\hfil\break dann +benutzen sie den Befehl \index{zzzhfil@{\tt\char92 hfil}} +`\verb|\hfil\break|' um genau das zu erreichen. + +Mitunter, besonders in Gedichten wollen sie vielleicht, da\ss{} die Zeilen +immer da umgebrochen werden, wo sie auch in der \index{Eingabe!Umbruch} +Eingabe umgebrochen +sind. Sie k\"onnen das erreichen, indem sie hinter jede Zeile ein +\index{zzzpar@{\tt\char92 par}} +`\verb|\par|' schreiben, einfacher ist es allerdings, wenn sie +innerhalb einer \index{Gruppe} +Gruppe den Befehl \index{zzzobeylines@{\tt\char92 obeylines}} +`\verb|\obeylines|' benutzen. Auch +hier wieder ein Beispiel aus dem Original: +\index{zzzsmallskip@{\tt\char92 smallskip}} +\begin{verbatim} +{\obeylines\smallskip +Roses are red, +\quad Violets are blue; +Rhymes can be typeset +\quad With boxes and glue. +\smallskip} +\end{verbatim} +\subsection{Wie gehts genau?} +\subsubsection{Die horizontale Liste} +Wie macht \TeX\ es denn nun, wenn es einen Paragraphen in Zeilen +bricht? Zun\"achst ist ein Paragraph f\"ur \TeX\ nur eine lange Reihe von +W\"ortern. Genauer gesagt nicht aus W\"ortern, sondern aus einer Reihe von +Elementen, die folgendes sein k\"onnen: +\begin{enumerate}\index{Box} +\item Ein Box (Also ein Zeichen, eine \index{Ligatur} +Ligatur, eine Linie, eine hbox +oder eine vbox). +\item Eine m\"ogliche Trennung (wird gleich erkl\"art). +\item Ein ``WasDenn'' (kommt sp\"ater). +\item Vertikales Material (von \index{zzzmark@{\tt\char92 mark}} +`\verb|\mark|', \index{zzzvadjust@{\tt\char92 vadjust}}`\verb|\vadjust|' oder +\index{zzzinsert@{\tt\char92 insert}}`\verb|\insert|'). +\item Etwas \index{Leim}\index{zzzleaders@{\tt\char92 leaders}} +Leim (oder `\verb|\leaders|', wie auch sp\"ater noch erkl\"art +wird). +\item Ein Kern (so was wie Leim, der aber nicht gestreckt oder +geschrumpft werden kann). +\item Strafpunkte (die anzeigen, ob hier ein Zeilenumbruch g\"unstig +oder ung\"unstig ist). +\item Ein Zeichen, da\ss{} den Beginn oder das Ende des mathematischen +Modus anzeigt. +\end{enumerate} +Die letzten vier M\"oglichkeiten hei\ss{}en \"ubrigens {\em entfernbar}, da +sie bei einem Zeilenumbruch ver\"andert werden k\"onnen, oder sogar ganz +wegfallen. +\subsubsection{Die m\"ogliche Trennung} +Immer, wenn ein Wort auf eine besondere Art getrennt werden soll, dann +gibt es in \TeX\ die M\"oglichkeit diese Trennung gesondert anzugeben. +Besonders in der deutschen Sprache ist diese M\"oglichkeit wichtig, da +im Deutschen h\"ochst seltsame Trennregeln existieren. Aber auch bei +ungew\"ohnlichen Trennungen (z.B.\ Trennung von `st'), kann dieser +Befehl benutzt werden. Die allgemeine Form lautet dabei +folgenderma\ss{}en: +\index{zzzdiscretionary@{\tt\char92 discretionary}} +\begin{verbatim} +\discretionary{<Vor-Bruch Text>}{<Nach-Bruch Text>}{<Nicht-Bruch Text>} +\end{verbatim} +Im Deutschen wird z.B.\ jedes `ck' in `k-k' getrennt. Sollte es einmal +wichtig werden, dann schreiben sie doch einfach: +\begin{verbatim} +dr\"u\discretionary{k-}{k}{ck}en +\end{verbatim} +wenn sie das Wort `dr\"ucken' richtig trennen wollen. So kompliziert +braucht es aber nur in solchen Sonderf\"allen zu sein. F\"ur die m\"ogliche +Trennung: +\begin{verbatim} +\discretionary{-}{}{} +\end{verbatim} +gibt es auch die \index{Abkuerzung@Abk\"urzung}Abk\"urzung: `\verb|\-|' +\TeX\ macht \"ubrigens eigentlich genau das Gleiche, wenn es Worte trennen +will. Es werden einfach in ein Wort derartige m\"ogliche Trennungen +eingef\"ugt. Aus dem Wort `\verb|Trennung|' wird z.B.\ `\verb|Tren\-nung|'. +\subsubsection{Die Berechnung der Trennungen} +Zun\"achst versucht \TeX\ einen Paragraphen {\em ohne} Trennungen zu +setzen. Die dabei auftretenden Streckungen und Stauchungen m\"ussen +dabei unter dem Wert von +\index{zzzpretolerance@{\tt\char92 pretolerance}} +`\verb|\pretolerance|' bleiben. Erst im +zweiten Durchlauf, sollte er denn n\"otig sein, werden W\"orter getrennt +und dann m\"ussen die Werte von \index{Badness} +badness unter `\verb|\tolerance|'\index{zzztolerance@{\tt\char92 tolerance}} +bleiben. Voreingestellt sind \"ubrigens: +\begin{verbatim} +\pretolerance=100 +\tolerance=200 +\end{verbatim} + +Zun\"achst einmal: Wo darf \"uberhaupt getrennt werden? Es darf an den +folgenden Stellen im Text getrennt werden: +\begin{enumerate} +\item Bei \index{Leim}Leim, sofern dieser Leim nicht unmittelbar hinter einem +entfernbaren Element steht und er nicht in einer mathematischen Formel +auftritt. Gebrochen wird am linken +\index{Rand!Leimstueck@Rand!Leimst\"uck}Rand des Leimst\"ucks. +\item Bei Kern, vorausgesetzt, da\ss{} diesem Kern etwas Leim folgt und er +nicht in einer mathematischen Formel steht. +\item An einem Mathe-Ende-Zeichen, dem sofort Leim folgt. +\item Bei Strafpunkten, die eventuell automatisch eingef\"ugt wurden. +\item Bei einer m\"oglichen Trennung. +\end{enumerate} +Zu jeder m\"oglichen Trennung geh\"ort eine {\em \"asthetische +\index{Strafe!Aesthetische@Strafe!\"Asthetische}Strafe}. In +den F\"allen: 1,~2 und~3 ist die Strafe 0, im vierten Fall ist die +Strafe exakt angegeben, im f\"unften Fall ist es etwas komplizierter. +Ist der Text vor der Trennung nicht-leer, dann wird der Wert von +\index{zzzhyphenpenalty@{\tt\char92 hyphenpenalty}} +`\verb|\hyphenpenalty|' (voreingestellt mit 50), ist er leer der Wert +von \index{zzzexhyphenpenalty@{\tt\char92 exhyphenpenalty}} +`\verb|\exhyphenpenalty|' (voreingestellt mit 50) verwendet. + +Wenn sie explizit an einer Stelle in ihrem Text angeben: +\index{zzzpenalty@{\tt\char92 penalty}} +`\verb|\penalty 100|', dann kann dort zwar noch gebrochen werden, es +tritt aber eine Strafe von 100 auf\footnote{\index{Penalty}Penalty=Strafpunkte}. +Wenn sie hingegen `\verb|\penalty-100|' schreiben, dann geben sie damit an, +da\ss{} an dieser Stelle besonders gut gebrochen werden kann, da {\em +negative} Strafpunkte die Trennung f\"ordern. Eine Strafe von $10000$ ist +z.B. so hoch, da\ss{} \TeX\ hier nie eine Zeile umbrechen wird, eine +Strafe von $-10000$ so niedrig, da\ss{} \TeX\ hier immer die Zeile +umbrechen wird. Der Befehl \index{zzznobreak@{\tt\char92 nobreak}} +`\verb|\nobreak|' ist nur eine +\index{Abkuerzung@Abk\"urzung}Abk\"urzung +f\"ur `\verb|\penalty 10000|' und die Tilde wird einfach als: +`\verb*|\nobreak\ |' realsiert. + +Nach dem Zeilenumbruch werden alle entfernbaren Elemente entfernt und +zwar bis zum ersten nicht-entfernbaren Element, oder bis zum n\"achsten +Zeilenumbruch. + +Die genaue Berechnung der \index{Badness} +badness einer Zeile braucht hier nicht zu +interessieren, sie ist ungef\"ahr das Hundertfache der dritten +\index{Potenz!Badnessberechnung}Potenz +der Streckung oder \index{Schrumpf!Berechnung} +Schrumpfung der Zeile. Wenn eine Zeile z.B.\ 10pt +zu Streckung zur Verf\"ugung hat, die Zeile tats\"achlich um 9pt gestreckt +werden mu\ss{}, um auf das notwendige Ma\ss{} zu kommen, dann ist die badness: +\index{zzzapprox@{\tt\char92 approx}} +$100\times (9/10)^3\approx 73$. + +Zeilen werden nun entsprechend ihrer badness klassifiziert. Ist die +badness kleiner als 13, dann gilt die Zeile als {\em anst\"andig}, liegt +sie zwischen 13 und 99, dann hei\ss{}t sie {\em dicht}, wenn sie +geschrumpft wurde, {\em lose}, wenn sie gestreckt wurde. Ist die +badness gr\"o\ss{}er als 100, dann hei\ss{}t die Zeile {\em sehr dicht} oder +{\em sehr lose}. Zwei Zeilen sind optisch inkompatibel, wenn mehr als +ein Bereich \"ubersprungen wird, wenn z.B.\ eine anst\"andige Zeile vor +einer sehr losen kommt. + +\TeX\ berechnet nun f\"ur eine Folge von Zeilenumbr\"uchen die +\index{Minuspunkte}Minuspunkte +des Paragraphen, indem es die Minuspunkte aller Zeilen aufaddiert. Die +Minuspunkte einer Zeile ergeben sich dabei nach folgender +\index{Formel!Fuer Minuspunkte@Formel!F\"ur Minuspunkte}Formel +(dabei ist: $d$ die \index{Minuspunkte} +Minuspunkte, $p$ die Strafpunkte, $b$ die badness, +$l$ die sogenannte \index{Strafe!Zeile} +Zeilenstrafe, die von \TeX\ \"ublicherweise mit 10 +voreingestellt ist \index{zzzlinepenalty@{\tt\char92 linepenalty}} +(`\verb|\linepenalty|'). Sie kann erh\"oht werden, +wenn man erreichen will, da\ss{} die Paragraphen mit m\"oglichst geringer +Zeilenzahl gesetzt werden sollen): +\index{zzzleq@{\tt\char92 leq}} +\[ +d=\left\{\begin{array}{ll} +(l+b)^2+p^2 & \mbox{wenn\quad} 0\leq p <10000 \\ +(l+b)^2-p^2 & \mbox{wenn\quad} -10000 < p < 0 \\ +(l+b)^2 & \mbox{wenn\quad} p \leq -10000 \end{array} \right. \] +Sind zwei aufeinanderfolgende Zeilen optisch inkompatibel, dann wird +au\ss{}erdem noch der Wert von \index{zzzadjdemerits@{\tt\char92 adjdemerits}} +`\verb|\adjdemerits|' hinzugef\"ugt, enden +zwei aufeinanderfolgende Zeilen mit einer Trennung, dann wird der Wert +von \index{zzzdoublehyphendemerits@{\tt\char92 doublehyphendemerits}} +`\verb|\doublehyphendemerits|' addiert und endet die vorletzte +Zeile eines Paragraphen mit einer Trennung, dann wird noch +\index{zzzfinalhyphendemerits@{\tt\char92 finalhyphendemerits}} +`\verb|\finalhyphendemerits|' addiert. Dabei sind die folgenden Werte +voreingestellt: +\index{zzzadjdemerits@{\tt\char92 adjdemerits}} +\index{zzzdoublehyphendemerits@{\tt\char92 doublehyphendemerits}} +\begin{verbatim} +\adjdemerits=10000 +\doublehyphendemerits=10000 +\finalhyphendemerits=5000 +\end{verbatim} +Die genaue Berechnung der einzelnen Durchl\"aufe l\"a\ss{}t sich +verfolgen, wenn +\index{zzztracingparagraphs@{\tt\char92 tracingparagraphs}} +`\verb|\tracingparagraphs=1|' gesetzt wird, +dessen Erkl\"arung aber hier zu weit f\"uhren w\"urde. + +\subsubsection{Die letzte Zeile} +{\parfillskip=0pt Bisher d\"urfte noch nicht klar sein, wieso die letzte +Zeile eines Paragraphen k\"urzer sein kann, als die letzten. Die L\"osung +ist aber ganz einfach: Bevor \TeX\ anf\"angt die besten Zeilenumbr\"uche +zu suchen unternimmt es noch zwei wichtige Dinge: (1) Steht am Ende +eines Paragraphen ein St\"uck \index{Leim} +Leim, so wird dieser entfernt. (2) Werden +drei Befehle an den Paragraphen angeh\"angt: (a) +\index{zzzpenalty@{\tt\char92 penalty}} +`\verb|\penalty10000|', +was einen Zeilenumbruch vor den letzten Befehlen verhindert, (b) +\index{zzzparfillskip@{\tt\char92 parfillskip}} +`\verb|\hskip\parfillskip|', was den \index{Leer!Platz} +leeren Platz am Ende der Zeile +bewirkt, `\verb|\parfillskip|' ist dabei \"ublicherweise als {\tt 0pt +plus 1fil} definiert und (c) der Befehl `\verb|\penalty-10000|', was +den letzten Zeilenumbruch bewirkt. Mit dem Wert f\"ur +`\verb|\parfillskip|' kann \"ubrigens auch gespielt werden. Diese +\index{Absatz}Absatz +wurde mit dem Wert {\tt 0pt} gesetzt, so da\ss{} am Ende des Abschnitts +kein Platz gelassen wird. Das ist allerdings nur bei l\"angeren +Abschnitten problemlos m\"oglich.} + +\subsubsection{Lange Paragraphen} +Was tun, wenn ein Paragraph {\em wirklich} lang wird? \TeX\ h\"alt immer +den ganzen Paragraphen im \index{Speicher!Paragraph} +Speicher, und daher kann es vorkommen, da\ss{} +lange Paragraphen den \index{Speicher!Platz} +Speicherplatz, der zur Verf\"ugung steht, +sprengen. Man kann das umgehen, indem man in einen Paragraphen die +Befehlsfolge: +\index{zzznoindent@{\tt\char92 noindent}} +\index{zzzparfillskip@{\tt\char92 parfillskip}} +\index{zzzparskip@{\tt\char92 parskip}} +\begin{verbatim} +{\parfillskip0pt\par\parskip0pt\noindent} +\end{verbatim} +einf\"ugt. Auf die Art wird der Paragraph in kleinere Paragraphen +unterteilt, ohne da\ss{} der Leser es merkt. +\subsection{Feinheiten und Tricks} +\subsubsection{Einr\"uckungen und Flattersatz} +\begin{quote} +Bei dem Satz eines Paragraphen werden au\ss{}er den \"ublichen +Gr\"o\ss{}en auch noch die Werte von \index{zzzrightskip@{\tt\char92 rightskip}} +`\verb|\rightskip|' und +\index{zzzleftskip@{\tt\char92 leftskip}} +`\verb|\leftskip|' ber\"ucksichtigt. Es handelt sich dabei um +\index{Leim}Leimst\"ucke, die vor, bzw.\ nach jeder Zeile eingef\"ugt werden. +Normalerweise sind die Werte einfach Null, aber z.B.\ das Makro +\index{zzznarrower@{\tt\char92 narrower}} +`\verb|\narrower|' erh\"oht die beiden Werte auf den Wert von +\index{zzzparindent@{\tt\char92 parindent}} +`\verb|\parindent|', so da\ss{} alle Zeilen rechts und links einger\"uckt +werden. Dieser Absatz wurde mit dem Makro gesetzt. +\end{quote}\index{Absatz} + +{\raggedright Auch das Makro `\verb|\raggedright|' wird mit +`\verb|\rightskip|' realisiert, aber nicht einfach mit:} +\index{zzzraggedright@{\tt\char92 raggedright}} +\index{zzzrightskip@{\tt\char92 rightskip}} +\begin{verbatim} +\rightskip 0pt plus 1fil +\end{verbatim} +{\raggedright wie man vielleicht annehmen k\"onnte, da diese L\"osung dazu +f\"uhren w\"urde, da\ss{} auch ganz kurze Zeilen noch f\"ur \TeX\ akzeptabel +w\"aren. Statt dessen sollte man die Wortabst\"ande konstant w\"ahlen und +\index{zzzrightskip@{\tt\char92 rightskip}} +`\verb|\rightskip|' zwar hoch, aber auch nicht {\em zu} hoch setzen.} + +\subsubsection{Totale Kontrolle} +\parshape 16 +0pc 26pc +0pc 26pc +0pc 24.69pc +0pc 23.51pc +0pc 22.73pc +0pc 22.20pc +0pc 21.85pc +0pc 21.65pc +0pc 21.58pc +0pc 21.65pc +0pc 21.85pc +0pc 22.20pc +0pc 22.73pc +0pc 23.51pc +0pc 24.69pc +0pc 29pc +Es gibt schlie\ss{}lich noch eine {\em sehr} eindrucksvolle M\"oglichkeit +die L\"ange von Zeilen im Text zu beeinflu\ss{}en. Den Befehl +\index{zzzparshape@{\tt\char92 parshape}} +`\verb|\parshape|'. Ihm folgen zun\"achst eine einfache Zahl, und dann +Paare von Werte, die die folgende Bedeutung haben: Die erste Zahl +gibt an, auf wieviele Zeilen sich der Befehl bezieht (in diesem +Paragraphen sind es 16 Zeilen). Bei den folgenden Wertepaaren gibt der +erste Wert an, wieviel die Zeile vom linken +\index{Rand!Einrueckung@Rand!Einr\"uckung}Rand her einger\"uckt werden +soll, und der zweite Wert, wie lang die jeweilige Zeile sein soll. In +diesem Paragraphen mu\ss{}ten also 16 Wertepaare angegeben werden. Ist der +Paragraph k\"urzer, als die angegebene Anzahl von Zeilen, dann werden +die \"uberfl\"u\ss{}igen Angaben einfach ignoriert, ist er l\"anger, dann gilt +die Angabe f\"ur die letzte Zeile. Haben sie einen Paragraphen +geschrieben, und wissen nicht, ob ihre Angaben nicht eventuell mit in +den n\"achsten Abschnitt hineinragen, dann k\"onnen sie die letzte Angabe +einfach dadurch unwirksam machen, da\ss{} sie `\verb|\parshape 0|' +eingeben. So schalten sie wieder auf die urspr\"unglichen Werte von +Zeilenl\"ange. Eine wichtige \index{Abkuerzung@Abk\"urzung} +Abk\"urzung f\"ur den Befehl `\verb|\parshape|' +stellt \TeX\ mit den Befehlen \index{zzzhangindent@{\tt\char92 hangindent}} +`\verb|\hangindent|' und +\index{zzzhangafter@{\tt\char92 hangafter}} +`\verb|\hangafter|' bereit. Diese werden viel \"ofters gebraucht, als +der eigentliche Befehl `\verb|\parshape|', der nur in wirklich +seltenen F\"allen zur Anwendung kommt. + +\hangafter=-3 +\hangindent=\parindent +\noindent Mit den Befehlen \index{zzzhangindent@{\tt\char92 hangindent}} +`\verb|\hangindent|' und +\index{zzzhangafter@{\tt\char92 hangafter}} +`\verb|\hangafter|' k\"onnen an den vier {\em Ecken} eines +\index{Absatz}Absatzes +rechteckige Fl\"achen freigelassen werden. `\verb|\hangafter|' dient +dabei der Angabe, wieviele Zeilen von der +\index{Einrueckung@Einr\"uckung}Einr\"uckung betroffen sind, +und zwar sind die Zeilen $n+1$, $n+2 \ldots$ betroffen, wenn $n$ ein +positiver Wert von `\verb|\hangafter|' ist, ist $n$ negativ, dann sind +die Zeilen $1$, $2$, $|n|$ betroffen. Mit `\verb|\hangindent|' wird +nun angegeben, wie gro\ss{} die Einr\"uckung ist. Bei positivem Wert, wird +links, andernfalls rechts einger\"uckt. Dieser Paragraph wurde mit: +\index{zzzhangafter@{\tt\char92 hangafter}} +\index{zzzhangindent@{\tt\char92 hangindent}} +\index{zzzparindent@{\tt\char92 parindent}} +\begin{verbatim} +\hangafter=-3 +\hangindent=\parindent +\end{verbatim} +gesetzt. +Die beiden Befehle werden \"ubrigens f\"ur die Makros `\verb|\item|' und +`\verb|\itemitem|' benutzt, die f\"ur \index{Aufzaehlung@Aufz\"ahlung} +Aufz\"ahlungen zust\"andig sind. Wenn +sie z.B. schreiben:\index{Ebene!Aufzaehlung@Ebene!Aufz\"ahlung} +\begin{verbatim} +\item{1.} Dies ist die erste Aufz\"ahlungsebene +\itemitem{(a)} Hier nun die Unterebene, +\itemitem{(b)} und ein weiterer Eintrag in die Unterebene +\item{2.} Und zum Schlu\ss{} noch ein Eintrag in der h\"oheren Eintragebene, +um das Ganze etwas interessanter zu gestalten. +\end{verbatim} +dann erhalten sie: + +\begin{enumerate} +\item Dies ist die erste Aufz\"ahlungsebene +\begin{enumerate} +\item Hier nun die Unterebene, +\item und ein weiterer Eintrag in die Unterebene +\end{enumerate} +\item Und zum Schlu\ss{} noch ein Eintrag in der h\"oheren Eintragebene, +um das Ganze etwas interessanter zu gestalten. +\end{enumerate} + +Die Werte von \index{zzzparshape@{\tt\char92 parshape}} +`\verb|\parshape|', \index{zzzhangindent@{\tt\char92 hangindent}} +`\verb|\hangindent|' und +\index{zzzhangafter@{\tt\char92 hangafter}} +`\verb|\hangafter|' werden \"ubrigens am Ende eines Paragraphen +zur\"uckgesetzt. +\subsubsection{Die H\"ohe von Paragraphen} +Eine \index{Formel!abgesetzte} +abgesetzte Formel in einem Paragraphen nimmt den Platz von drei +Zeilen ein. Wenn ihr Paragraph also vier Zeilen vor und zwei Zeilen +nach der Formel hat, dann ist der gesamte Paragraph $4+3+2=9$ Zeilen +hoch. Intern wird die Anzahl der Zeilen, die schon bearbeitet wurden +in der Variablen \index{zzzprefgraf@{\tt\char92 prefgraf}} +`\verb|\prefgraf|' festgehalten. Dies k\"onnen sie dazu +ausnutzen, da\ss{} sie den Wert bei h\"oheren Formeln \"andern. Ist ihre +Formel z.B.\ sehr hoch, dann k\"onnten sie in dem vorigen Beispiel vor +den beiden letzten Zeilen den Wert von `\verb|\prefgraf|' auf 8 +setzen, so da\ss{} \TeX\ denkt, es h\"atte insgesamt einen Paragraphen mit +10 Zeilen gesetzt. + +Ein weiteres Mittel gibt es um die H\"ohe von Paragraphen zu +beeinflu\ss{}en. Dazu verwenden sie den Befehl +\index{zzzlooseness@{\tt\char92 looseness}} +`\verb|\looseness|'. Setzen sie diesen Wert +z.B.\ auf 1, dann macht \TeX\ den Paragraphen um eine Zeile l\"anger, +als es ihn normalerweise machen w\"urde. Mit negativen Werten kann ein +Paragraph auch k\"urzer gemacht werden. Der Wert von `\verb|\looseness|' +wird auch am Ende des Paragraphen zur\"uckgesetzt. + +\subsection{Der Satz von Paragraphen} +Schlie\ss{}lich, wenn alle Berechnungen zum Zeilenumbruch beendet sind, +m\"ussen die Zeilen noch in die vertikale Liste der Seite geschrieben +werden. Dabei geht \TeX\ folgenderma\ss{}en vor: Unmittelbar vor dem +Paragraphen wird ein spezielles \index{Leim}Leimst\"uck in die vertikale Liste +eingef\"ugt. Den \index{Abstand!Paragraphen} +Abstand zweier aufeinanderfolgender Paragraphen: +\index{zzzparskip@{\tt\char92 parskip}} +`\verb|\parskip|'. Plain \TeX\ setzt diesen Abstand auf: +\begin{verbatim} +\parskip=0pt plus 1pt +\end{verbatim} +Danach folgen die einzelnen Zeilen, die schon umgebrochen wurden. +Zwischen die Zeilen werden ggf.\ noch besondere Strafpunkte +geschrieben, die sp\"ater f\"ur den Seitenumbruch gebraucht werden. +Insbesondere wird zwischen die ersten beiden Zeilen und unmittelbar +vor die letzte Zeile eine besondere \index{Strafe!Zeile} +Strafe geschrieben, um +\index{Schusterjunge}``Schusterjungen'' und \index{Hurenkind} +``Hurenkinder'' zu vermeiden\footnote{Mit Schusterjungen und Hurenkindern +bezeichnen die Drucker einzelne Zeilen eines Abschnittes, die durch Seitenumbruch +vom Rest des Abschnittes getrennt wurde.}. Normalerweise wird zwischen die Zeilen +der Wert von \index{zzzinterlinepenalty@{\tt\char92 interlinepenalty}} +`\verb|\interlinepenalty|' +geschrieben, handelt es sich um den \index{Zwischenraum} +Zwischenraum zwischen erster und +zweiter Zeile, dann wird der Wert von \index{zzzclubpenalty@{\tt\char92 clubpenalty}} +`\verb|\clubpenalty|' addiert. +Handelt es sich um den \index{Zwischenraum} +Zwischenraum vor der letzten Zeile, dann wird +\index{zzzwidowpenalty@{\tt\char92 widowpenalty}} +`\verb|\widowpenalty|' eingef\"ugt, wenn keine \index{Formel!abgesetzte} +abgesetzte Formel davor +stand, sonst \index{zzzdisplaywidowpenalty@{\tt\char92 displaywidowpenalty}} +`\verb|\displaywidowpenalty|'. Fand in der letzten Zeile +eine Trennung statt, dann wird auch noch +\index{zzzbrokenpenalty@{\tt\char92 brokenpenalty}} +`\verb|\brokenpenalty|' +addiert. Die Werte werden in Plain \TeX\ folgenderma\ss{}en gesetzt: +\index{zzzdisplaywidowpenalty@{\tt\char92 displaywidowpenalty}} +\index{zzzinterlinepenalty@{\tt\char92 interlinepenalty}} +\begin{verbatim} +\interlinepenalty=0 +\clubpenalty=150 +\widowpenalty=150 +\displaywidowpenalty=50 +\brokenpenalty=100 +\end{verbatim} + +Neben den \index{Horizontal!Linie} +horizontalen Linien kann man auch aus einem Paragraphen +heraus andere Dinge in die vertikale Liste schreiben. Dazu dienen die +Befehl \index{zzzinsert@{\tt\char92 insert}} +`\verb|\insert|', \index{zzzmark@{\tt\char92 mark}} +`\verb|\mark|' und \index{zzzvadjust@{\tt\char92 vadjust}}`\verb|\vadjust|'. Die +ersten beiden werden sp\"ater beschrieben, der dritte f\"ugt das +\index{Argument}Argument +des Befehls unmittelbar nach der Zeile, in der der Befehl steht, in +die vertikale Liste ein. \index{zzzvadjust@{\tt\char92 vadjust}} +\vadjust{\kern2pt}Hier habe ich z.B.\ mit dem +Befehl `\verb|\vadjust{\kern2pt}|' einen zus\"atzlichen +\index{Zwischenraum}Zwischenraum in +den Paragraphen eingef\"ugt. +\subsection{Die restlichen Befehle} +\subsubsection{Ausf\"uhrungen f\"ur jeden Paragraphen} +Der Befehl +\index{zzzeverypar@{\tt\char92 everypar}}`\verb|\everypar|' gestattet es einen Befehl zu Beginn {\em +jedes} Paragraphen auszuf\"uhren. In der einfachsten Form sieht der +Befehl folgenderma\ss{}en aus: `\verb|\everypar{A}|'. Jedem Paragraphen +w\"urde nun ein `A' vorangestellt. Nicht sehr sinnvoll, aber denken sie +einmal daran, wie in der \LaTeX\ Umgebung `itemize' die +\index{Aufzaehlung!Markierung@Aufz\"ahlung!Markierung} +\index{Markierung!Aufzaehlung@Markierung!Aufz\"ahlung} +Aufz\"ahlungsmarkierung realisiert wird. +\subsubsection{Leere Zeilen} +Einen leeren Paragraphen erhalten sie mit der Befehlsfolge +\index{zzznoindent@{\tt\char92 noindent}} +`\verb|\noindent\par|', wenn `\verb|\everypar|' leer ist. Es wird dann +nur \index{zzzparskip@{\tt\char92 parskip}} +`\verb|\parskip|' in die vertikale Liste eingef\"ugt. +\subsubsection{Das letzte Hilfsmittel} +Wenn \"uberhaupt nichts mehr geht, und sie sich vor lauter +\index{Fehler!Meldung} +Fehlermeldungen nicht mehr retten k\"onnen, dann benutzen sie den Befehl +\index{zzzemergencystretch@{\tt\char92 emergencystretch}} +`\verb|\emergencystretch|'. Dieser Befehl l\"a\ss{}t auch ungew\"ohnlich gro\ss{}e +Streckungen zu. Ihr Text wird dann allerdings nicht mehr so gut +aussehen. +\section{Wie macht \TeX\ aus Paragraphen Seiten?} +\subsection{Der Normalfall} +Sie k\"onnen es \TeX\ einfach machen die besten Stellen f\"ur den +Seitenumbruch zu finden, wenn sie viele abgesetze Formeln in ihrem +Text verwenden, oder wenn sie oft die Befehl +\index{zzzsmallskip@{\tt\char92 smallskip}}`\verb|\smallskip|', +\index{zzzmedskip@{\tt\char92 medskip}} +`\verb|\medskip|' oder \index{zzzbigskip@{\tt\char92 bigskip}} +`\verb|\bigskip|' verwenden. Haben die diese +M\"oglichkeit nicht, und sie sind mit dem Umbruchalgorithmus von \TeX\ +nicht einverstanden, dann k\"onnen sie auch jederzeit selbst einen +Seitenumbruch bewirken, indem sie die Befehle +\index{zzzeject@{\tt\char92 eject}}\index{zzzvfill@{\tt\char92 vfill}} +`\verb|\vfill\eject|' +verwenden. Die Verwendung von `\verb|\eject|' alleine ist nicht +unbedingt zu empfehlen, dann dann die Zeilen der Seite auf das +erforderliche Ma\ss{} auseinandergezogen w\"urden. Der Seitenumbruch +geschieht sehr \"ahnlich, dem Zeilenumbruch, der im letzten Paragraphen +besprochen wurde. Aus \index{Speicher!Platz} +Speicherplatzgr\"unden wird allerdings nur {\em +lokal} optimiert. Es wird also nicht der gesamte Text im Speicher +gelassen, bevor die besten Stellen f\"ur den Seitenumbruch gesucht +werden. +\subsection{Die gehts genau?} +Die Inhalte einer Seite, werden zun\"achst auch einfach als Liste, hier +aber als vertikale Liste repr\"asentiert. In dieser Liste k\"onnen +folgende Elemente auftreten: +\begin{enumerate}\index{Box}\index{Einfuegung@Einf\"ugung} +\item Eine Box (hier eine hbox, eine vbox oder eine rulebox). +\item Ein ``WasDenn'' (kommt wieder sp\"ater). +\item Eine Markierung (wird auch sp\"ater erkl\"art). +\item Eine Einf\"ugung (auch das erst sp\"ater). +\item Etwas \index{Leim}Leim (oder \index{zzzleaders@{\tt\char92 leaders}}`\verb|\leaders|'). +\item Ein Kern. +\item Eine Strafe. +\end{enumerate} +Die drei letzten Elemente sind dabei wieder {\em entfernbare} +Elemente, entsprechend den Ausf\"uhrungen im letzen Abschnitt. Es kann +ebenfalls nicht an beliebiger Stelle eine Seitenumbruch erfolgen, das +geht nur an: +\begin{enumerate} +\item Bei einem \index{Leim}Leimst\"uck, vorausgesetzt, da\ss{} dem Leim ein +nicht-entfernbares Element unmittelbar vorangeht. +\item Bei einem Kern, vorausgesetzt, dem Kern folgt sofort etwas Leim. +\item Bei Strafpunkten. +\end{enumerate} +Die Regeln f\"ur Strafpunkte entsprechen dabei wieder denen f\"ur den +Zeilenumbruch. Im letzten Abschnitt wurde ja auch schon erl\"autert, an +welchen Stellen einer vertikalen Liste Strafpunkte auftreten k\"onnen. + +Den Befehlen `\verb|\small-|', `\verb|\med-|' und \index{zzzbigskip@{\tt\char92 bigskip}} +`\verb|\bigskip|' in +der \index{Horizontal!Liste}horizontalen Liste entsprechen jetzt die Befehle: +\index{zzzsmallbreak@{\tt\char92 smallbreak}} +`\verb|\smallbreak|', \index{zzzmedbreak@{\tt\char92 medbreak}} +`\verb|\medbreak|' und \index{zzzbigbreak@{\tt\char92 bigbreak}} +`\verb|\bigbreak|', mit +denen $-50$, $-100$ oder $-200$ Strafpunkte vergeben werden k\"onnen, um +anzuzeigen, da\ss{} ein Seitenumbruch an einer bestimmten Stelle besonders +gut oder schlecht zu machen ist. Au\ss{}erdem gibt es noch den Befehl +\index{zzzgoodbreak@{\tt\char92 goodbreak}} +`\verb|\goodbreak|', der eine \index{Abkuerzung@Abk\"urzung} +Abk\"urzung f\"ur die Befehle\index{zzzpar@{\tt\char92 par}} +\index{zzzpenalty@{\tt\char92 penalty}} +`\verb|\par\penalty-200|' darstellt. Dieser Befehl sollte am Ende +eines Paragraphen verwendet werden, wenn dort ein Seitenumbruch +erw\"unscht ist, ohne da\ss{} sofort mit dem drastischen Befehl +\index{zzzeject@{\tt\char92 eject}} +`\verb|\eject|' gearbeitet werden soll. Schlie\ss{}lich gibt es noch den +Befehl \index{zzzfilbreak@{\tt\char92 filbreak}} +`\verb|\filbreak|'. Dieser Befehl schlie\ss{}t die Seite ab und +f\"ullt sie mit \index{Leer!Raum} +Leerraum auf, wenn das vertikale Material bis zum +n\"achsten `\verb|\filbreak|' nicht mehr auf die Seite pa\ss{}t. + +Das Analog zum Befehl `\verb|\raggedright|' hei\ss{}t +\index{zzzraggedbottom@{\tt\char92 raggedbottom}} +`\verb|\raggedbottom|' und dieser Befehl bewirkt, da\ss{} die Seiten nicht +mehr gleichm\"a\ss{}ig aufgef\"ullt werden, sondern der \index{Abstand!Zeilen} +Zeilenabstand immer +konstant bleibt. + +Zur Berechnung des Seitenumbruchs kommt es nun folgenderma\ss{}en. Zu +Beginn kennt \TeX\ die Gr\"o\ss{}en \index{zzzvsize@{\tt\char92 vsize}} +`\verb|\vsize|', sowie +\index{zzzmaxdepth@{\tt\char92 maxdepth}} +`\verb|\maxdepth|'. Aus diesen Werten berechnet sich \TeX\ das {\em +Ziel} der Berechnung: \index{zzzpagegoal@{\tt\char92 pagegoal}} +`\verb|\pagegoal|'.\footnote{Zus\"atzlich wird noch +der Wert von {\tt\char92 topskip} ausgewertet, der angibt, wieviel am +oberen \index{Rand!Oben} +Rand der Seite freigelassen werden soll.} Die aktuelle +\index{Hoehe!Seite@H\"ohe!Seite}H\"ohe der +Seite wird in +\index{zzzpagetotal@{\tt\char92 pagetotal}} +`\verb|\pagetotal|' gespeichert. Nun wird Zeile an Zeile +in die Seite geschrieben, bis die Seite voll ist, also +\index{zzzpagegoal@{\tt\char92 pagegoal}} +`\verb|\pagegoal|' gleich `\verb|\pagetotal|' ist. Das passiert +nat\"urlich nur im Idealfall. W\"urde die Seite mit der letzten vertikalen +\index{Box!Vbox} +Box, die eingef\"ugt werden soll zu voll, dann wird sie sozusagen in +eine Warteposition gestellt, dann wird versucht noch +\index{Einfuegung@Einf\"ugung}Einf\"ugungen auf +der Seite unterzubringen\footnote{Kommt gleich.} bevor sie dann +ausgegeben wird; genauer an die Outputroutine \"ubergeben wird. +Seitenzahlen und \"ahnliches wird erst {\em nach} Fertigstellung der +Seite hinzugef\"ugt. +\subsection{Einf\"ugungen} +\subsubsection{Illustrationen} +\index{Fussnote@Fu\ss{}note}Fu\ss{}noten und Illustrationen werden in \TeX\ als Einf\"ugungen +realisiert. Der Rest des Kapitels besch\"af\-tigt sich mit der Frage, wie +diese Einf\"ugungen mit dem Seitenumbruchalgorithmus kooperieren. +Zun\"achst besch\"aftigen wir uns dabei mit den komplizierteren Befehlen, +die Plain \TeX\ zur Verf\"ugung stellt, sp\"ater sehen wir uns dann an, +wie die eigentliche Organisation vonstatten geht. +\subsubsection{Normale Einf\"ugungen} +Die einfachste Art etwas in einen Text einzuf\"ugen besteht in dem +Anweisungspaar: +\index{zzzendinsert@{\tt\char92 endinsert}} +\index{zzztopinsert@{\tt\char92 topinsert}} +\begin{verbatim} +\topinsert <vertikales Material> \endinsert +\end{verbatim} +Das `vertikale Material' ist dabei das, was eingef\"ugt werden soll. +\TeX\ versucht dieses Material am Anfang der laufenden Seite +unterzubringen. Ist dort kein Platz, dann wird es an den Anfang der +n\"achsten Seite geschrieben. Man kann z.B.\ folgendes schreiben: +\index{zzzendinsert@{\tt\char92 endinsert}}\index{zzzhsize@{\tt\char92 hsize}} +\index{zzznoindent@{\tt\char92 noindent}} +\index{zzztopinsert@{\tt\char92 topinsert}} +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\topinsert\vskip2in\hsize=3in\noindent +{\bf Figur 3} Dies ist die Unterschrift unter der dritten Figur meines +Textes. Ich habe vor dem Text 2 Inch Platz gelassen, damit ich dort +sp\"ater meine Illustration einkleben kann \endinsert +\end{verbatim} +\TeX\ f\"ugt hinter dem eingef\"ugten Material automatisch einen +\index{zzzbigskip@{\tt\char92 bigskip}}`\verb|\bigskip|' ein. + +Analog funktioniert der Befehl +\index{zzzpageinsert@{\tt\char92 pageinsert}} +`\verb|\pageinsert|', nur da\ss{} das +vertikale Material, das dem Befehl folgt auf eine eigene Seite +geschrieben wird, \"ublicherweise auf die n\"achste Seite. und schlie\ss{}lich +gibt es noch den Befehl \index{zzzmidinsert@{\tt\char92 midinsert}} +`\verb|\midinsert|', der versucht das Material +an der Stelle des Auftretens unterzubringen. Dann ist der Effekt wie: +\index{zzzbigbreak@{\tt\char92 bigbreak}}\index{zzzbigskip@{\tt\char92 bigskip}} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +\bigskip\vbox{<vertikales Material>}\bigbreak +\end{verbatim} +ist nicht genug Platz vorhanden, dann wird das Material wie bei +\index{zzztopinsert@{\tt\char92 topinsert}}`\verb|\topinsert|' behandelt. + +Benutzen sie die Befehl nicht innerhalb von horizontalen Boxen, +sondern nur an Stellen, an denen sich \TeX\ im vertikalen Modus +befindet. + +Wenn sie viele der obigen Befehl hintereinander benutzen, kann es +passieren, da\ss{} \TeX\ die Inhalte der Befehl auf viele folgende Seiten +verteilen mu\ss{}. Die Einf\"ugungen behalten dabei aber ihre vorgegebene +Reihenfolge. Wenn sie verhindern wollen, da\ss{} Einf\"ugungen in ein +sp\"ateres Kapitel \"ubernommen werden, dann benutzen sie die Befehlsfolge +\index{zzzsupereject@{\tt\char92 supereject}}\index{zzzvfill@{\tt\char92 vfill}} +`\verb|\vfill\supereject|'. Damit werden alle noch vorhandenen +Einf\"ugungen, nach \index{Leer!Raum} +Leerraum ausgegeben, bevor neuer Text gesetzt wird. + +\subsubsection{Fu\ss{}noten} +Neben der M\"oglichkeit mit `\verb|\topinsert|' etwas an den Anfang +einer Seite zu schreiben, wird mit dem Befehl `\verb|\footnote|' etwas +ans Ende einer Seite geschrieben. Au\ss{}erdem kann dieser Befehl auch +innerhalb eines Paragraphen benutzt werden. Fu\ss{}noten werden mit zwei +\index{Argument}Argumenten aufgerufen, das erste Argument stellt dabei die +\index{Markierung!Fussnote@Markierung!Fu\ss{}note} +Fu\ss{}notenmarkierung, das zweite den Fu\ss{}notentext dar.\footnote{In +diesem Text wird das Fu\ss{}notenmakro von \LaTeX\ benutzt. In {\em Plain} \TeX\ +sieht die Sache etwas anders aus. Zwischen den Fu\ss{}noten wird kein +zus\"atzlicher \index{Zwischenraum} +Zwischenraum eingef\"ugt, und die Fu\ss{}noten werden auch in +normaler \index{Groesse!Schrift@Gr\"o\ss{}e!Schrift} +\index{Schrift!Groesse@Schrift!Gr\"o\ss{}e} +Schriftgr\"o\ss{}e gesetzt. Die Fu\ss{}notenmarkierung wird in einen +\index{Zwischenraum} +Zwischenraum der Gr\"o\ss{}e {\tt\char92 textindent} gesetzt. Das Makro +{\tt\char92 textindent} arbeitet \"ahnlich, wie {\tt\char92 item}, +allerdings ohne eine h\"angende \index{Einrueckung@Einr\"uckung}Einr\"uckung.} + +Fu\ss{}noten k\"onnen umgebrochen werden und auf der folgenden Seite +weitergef\"uhrt werden. Dies wird allerdings soweit m\"oglich vermieden. +Einf\"ugungen k\"onnen nicht innerhalb von Einf\"ugungen verwendet werden. +Es ist also nicht m\"oglich innerhalb eines +\index{zzztopinsert@{\tt\char92 topinsert}}`\verb|\topinsert|'s eine +Fu\ss{}note zu benutzen. Sollten sie es doch einmal brauchen, dann k\"onnen +sie den Befehl \index{zzzvfootnote@{\tt\char92 vfootnote}} +`\verb|\vfootnote|' verwenden. Er ist dazu da im +vertikalen Modus eine Fu\ss{}note zu schreiben, und sie m\"ussen dann die +Fu\ss{}notenmarkierung in der Einf\"ugung per Hand anbringen, und den +`\verb|\vfootnote|' Befehl irgendwo auf die Seite schreiben, auf der +die Einf\"ugung sp\"ater erscheinen wird. Sie merken schon, nicht ganz +elegant, aber das sind Fu\ss{}noten sowieso nicht. + +Bevor wir uns nun mit den Feinheiten von Einf\"ugungen besch\"aftigen +k\"onnen m\"ussen wir lernen, was \TeX\ unter einem \index{Register} +{\em Register} +versteht. +\subsection{Register} +\subsubsection{Einfache Register} +\TeX\ kennt ein Konstrukt, da\ss{} sich Register nennt und das in anderen +Programmiersprachen wohl am ehesten den Variablen gleichkommt. Es gibt +verschiedene Registertypen, und von jedem Registertyp 256 Register. +Die einfachen Registertypen sind das Zahlenregister, das +\index{Dimension!Register} +Dimensionsregister, das Skipregister und das Muskipregister. Die +Zahlregister hei\ss{}en \index{zzzcount@{\tt\char92 count}} +`\verb|\count0|' $\ldots$ `\verb|\count255|', die +Dimensionsregister \index{zzzdimen@{\tt\char92 dimen}} +`\verb|\dimen0|' $\ldots$ `\verb|\dimen255|'. Der +Zahlbereich der Zahlregister reicht von $-2^{31}$ bis $2^{31}$. Die +Dimensionsregister k\"onnen jeden g\"ultigen \index{Dimension} +Dimensionswert annehmen, die +Skip- und Muskipregister jeden g\"ultigen Wert f\"ur \index{Leim}Leim. Die +\index{Zuweisung}Zuweisung erfolgt als: +\index{zzzcount@{\tt\char92 count}}\index{zzzdimen@{\tt\char92 dimen}} +\index{zzzmuskip@{\tt\char92 muskip}}\index{zzzskip@{\tt\char92 skip}} +\begin{verbatim} +\count<number> = <number> +\dimen<number> = <dimen> +\skip<number> = <glue> +\muskip<number> = <muglue> +\end{verbatim} +Mit diesen Register k\"onnen sie auch rechnen. \index{Addition}Addition und +\index{Subtraktion}Subtraktion +erfolgen mit dem gleichen Befehl: +\index{zzzadvance@{\tt\char92 advance}}\index{zzzcount@{\tt\char92 count}} +\index{zzzmuskip@{\tt\char92 muskip}} +\begin{verbatim} +\advance\count<number> by <number> +\advance\dimen<number> by <dimen> +\advance\skip<number> by <glue> +\advance\muskip<number> by <muglue> +\end{verbatim} +Die Anweisung: \index{zzzhsize@{\tt\char92 hsize}} +`\verb|\dimen8=\hsize \advance\dimen8 by 1in|' bewirkt +z.B., da\ss{} der Inhalt des 9ten \index{Dimension!Register} +Dimensionsregister eine L\"ange enth\"alt, +die um ein Inch gr\"o\ss{}er ist, als die augenblickliche Textbreite. + +{\em Unendliche} \index{Masse!Unendlich@Ma\ss{}e!Unendlich} +Ma\ss{}e verdr\"angen endliche Ma\ss{}e. Nach den Anweisungen: +\begin{verbatim} +\skip2 = 0pt plus 2fill minus 3fill +\advance\skip2 by 4pt plus 1fil minus 2filll +\end{verbatim} +Hat das Register den Wert: +\begin{verbatim} +4pt plus 2fill minus 2filll +\end{verbatim} + +Auch die \index{Division} +Division und \index{Multiplikation!Register} +Multiplikation von Registern ist m\"oglich, +allerdings nur ganzzahligen Werten. Bei den Zahlregistern ist die +Sache einfach. Bei den anderen Registern werden alle Angaben mit der +entsprechenden Zahl multipliziert, bzw.\ dividiert. +\index{zzzmultiply@{\tt\char92 multiply}} +`\verb|\multiply\count2 by 2|' \index{Doppelt!Register} +verdoppelt beispielsweise den Inhalt +des 3ten Zahlregisters, \index{zzzdivide@{\tt\char92 divide}} +`\verb|\divide\skip2 by 2|' halbiert alle +Werte im 3ten Skipregister. Da es sich nur um ganzzahlige +Rechenoperationen handelt, wird bei der Division etwaiger Rest +vernachl\"assigt. Das Vorzeichen des Ergebnisses bei der Division h\"angt +von den Vorzeichen der Operanden ab. Bei ungleichen Vorzeichen ist das +Ergebnis negativ, sonst positiv.\footnote{Vermeiden sie die Division +durch Null und \index{Multiplikation!Overflow} +Multiplikationen, die die Kapazit\"at des Registers +\"uberschreiten.} + +Sie k\"onnen Register \"uberall da verwenden, wo sie auch explizite +Angaben verwenden d\"urfen. Die Angabe von \index{zzzdimen@{\tt\char92 dimen}} +\index{zzzhskip@{\tt\char92 hskip}}`\verb|\hskip\dimen2|' ist +ebenso erlaubt, wie die Angabe von \index{zzzadvance@{\tt\char92 advance}} +`\verb|\advance\count10| +\verb|by| \verb|\count10|'. + +\index{Dimension!Register} +Dimensionsregister k\"onnen auch als Zahlregister, und Skipregister +k\"onnen ihrerseits sowohl als Dimensions- oder auch als Zahlregister +verwendet werden. Bei der Verwendung eines Skipregisters als +Dimensionsregister, wird etwaige Angaben f\"ur +\index{Schrumpf!Schrumpfung}Schrumpfung oder +Streckung ignoriert, bei der Verwendung eines Dimensionsregisters +wird als \index{Einheit!Scaled Point}Einheit der {\it sp} (Scaled Point) verwendet. + +Normalerweise haben Register ihren Wert nur innerhalb der +\index{Gruppe!Registerwert}Gruppe, in +der sie benutzt werden,\footnote{Daraus ergibt sich, da\ss{} \TeX\ +wesentlich mehr Register hat, als oben angegeben.} es ist aber m\"oglich +Register auch f\"ur alle Gruppen zu \"andern, indem man den Befehl +\index{zzzglobal@{\tt\char92 global}} +`\verb|\global|' voranstellt. Die Anweisungen: +\index{zzzadvance@{\tt\char92 advance}}\index{zzzcount@{\tt\char92 count}} +\begin{verbatim} +\count1=10 \count2=20 \count3=30 +{\count1=20 \global\advance\count1 by 12 \global\count2=2 \count2=4} +\end{verbatim} +haben zur Folge, da\ss{} die Register folgende Werte haben: +\begin{verbatim} +\count1 : 32 +\count2 : 2 +\count3 : 30 +\end{verbatim} +\index{zzzcount@{\tt\char92 count}} +Die ersten zehn Zahlregister (`\verb|\count0|' $\ldots$ +`\verb|\count9|') sind reserviert und sollten nicht benutzt werden. +Die Inhalte dieser Register werden bei der \index{Ausgabe!Auf dem +Bildschirm} Ausgabe auf dem Bildschirm +ausgegeben und durch \index{Dezimal!Punkt}\index{Punkt} +Dezimalpunkte getrennt. F\"uhrende \index{Leer!Register}leere Register +werden dabei nicht ausgegeben. {\em Plain} \TeX\ benutzt nur das erste +Zahlregister f\"ur die Seitenzahl, weshalb sie auch meist nur die +Ausgabe: `\verb|[0] [1] [2] ...|' sehen. W\"are z.B.\ `\verb|\count5=3|' +und `\verb|\count7=4|' dann w\"are die Ausgabe: `\verb|[3.0.4]|'. + +Es ist in \TeX\ einfach m\"oglich symbolische Namen f\"ur Register zu +vergeben. Dazu gibt es z.B. den Befehl \index{zzzcountdef@{\tt\char92 countdef}} +`\verb|\countdef|'. Nach der +Anweisung: +\index{zzzchapno@{\tt\char92 chapno}} +\begin{verbatim} +\countdef\chapno=28 +\end{verbatim} +kann der Befehl `\verb|\chapno|' als \index{Abkuerzung@Abk\"urzung} +Abk\"urzung f\"ur `\verb|\count28|' +verwendet werden. Analog arbeiten die Befehle: +\index{zzzdimendef@{\tt\char92 dimendef}}`\verb|\dimendef|', +\index{zzzskipdef@{\tt\char92 skipdef}} +`\verb|\skipdef|' und \index{zzzmuskipdef@{\tt\char92 muskipdef}} +`\verb|\muskipdef|' +\subsubsection{Boxregister}\index{Box!Register} +Neben den numerischen Registern kennt \TeX\ auch noch die sogenannten +Boxregister (`\verb|\box0|' $\ldots$ `\verb|\box255|'). In diesen +Boxregistern kann eine beliebige hbox, vbox oder Rulebox gespeichert +werden. Die Anweisung: +\index{zzzhbox@{\tt\char92 hbox}} +\index{zzzsetbox@{\tt\char92 setbox}} +\begin{verbatim} +\setbox0=\hbox{A} +\end{verbatim} +hat zur Folge, da\ss{} das erste Boxregister (`\verb|\box0|') den +Buchstaben `A' zum Inhalt hat. Die Abmessungen des Inhalts eines +derartigen Registers k\"onnen abgerufen werden. Mit den Befehlen: +\index{zzzdp@{\tt\char92 dp}}\index{zzzht@{\tt\char92 ht}} +\index{zzzwd@{\tt\char92 wd}} +\begin{verbatim} +\wd<nummer> +\ht<nummer> +\dp<nummer> +\end{verbatim} +werden die Breite, \index{Hoehe!Box@H\"ohe!Box}H\"ohe und Tiefe der entsprechenden +\index{Box!Masse@Box!Ma\ss{}e}Box angesprochen. + +Einen wichtigen Unterschied zwischen Boxregistern und numerischen +Registern gibt es: Boxregister werden beim Gebrauch geleert. Die +Anweisung \index{zzzraise@{\tt\char92 raise}} +`\verb|\raise\2pt\box3|' in einer \index{Horizontal!Liste} +horizontalen Liste bewirkt +erstens, da\ss{} der Inhalt der 4ten Box, um 2pt noch oben verschoben, in +die Liste aufgenommen wird, zweitens ist aber auch die 4te Box nach +dieser Anweisung leer. Wenn sie den Inhalt dieser Box nocheinmal +verwenden wollen, benutzen sie den Befehl \index{zzzcopy@{\tt\char92 copy}} +`\verb|\copy|', satt des +Befehls \index{zzzbox@{\tt\char92 box}}`\verb|\box|'. Im obigen Beispiel w\"are dann die Anweisung +\index{zzzraise@{\tt\char92 raise}}`\verb|\raise2pt\copy3|' richtig gewesen. + +Eine weitere Anweisung, die mit \index{Box!Register} +Boxregistern durchgef\"uhrt werden kann +ist das `{\em Unboxen}'. Damit k\"onnen sie eine \index{Ebene!Boxen} +Ebene von Boxen aufheben. Die Anweisungen: +\index{zzzsetbox@{\tt\char92 setbox}} +\begin{verbatim} +\setbox3=\hbox{A} \setbox3=\hbox{\box3 B} +\setbox4=\hbox{A} \setbox4=\hbox{\unhbox4 B} +\end{verbatim} +bewirken, da\ss{} in `\verb|\box3|' `\verb|\hbox{\hbox{A} B}|' steht, und +in `\verb|\box4|' `\verb|\hbox{AB}|'. Analog arbeitet der Befehl +\index{zzzunvbox@{\tt\char92 unvbox}} +`\verb|\unvbox|' f\"ur vertikale Boxen. Der Vorteil dieses Befehls liegt +auf der Hand: Weniger \index{Speicher!Bedarf} +Speicherbenutzung und schnellere Bearbeitung. +Ebenso gibt es die Befehle +\index{zzzunhcopy@{\tt\char92 unhcopy}}\index{zzzunvcopy@{\tt\char92 unvcopy}} +`\verb|\unhcopy|' und `\verb|\unvcopy|', +deren Verwendung eigentlich sofort klar sein d\"urfte. Interessant ist +nur noch das Verhalten von \index{Leim}Leim beim Unboxen. Nach +\index{zzzsetbox@{\tt\char92 setbox}} +\begin{verbatim} +\setbox5=\hbox{A \hbox{B C}} +\setbox6=\hbox to 1.05\wd5{\unhcopy5} +\end{verbatim} +ist `\verb|\box6|' um 5 \index{Prozent} +Prozent breiter, als `\verb|\box5|', es wird +aber nur zwischen dem `A' und dem `B' gestreckt, die {\em innere} Box +bleibt unber\"uhrt. + +Es gibt einen Unterschied zwischen einem leeren Boxregister und einem +Boxregister, das eine leere Box enth\"alt. Enth\"alt ein Register eine +leere hbox (`\verb|\hbox{}|'), dann k\"onnen auf dieses Register nur die +Befehl \index{zzzunhbox@{\tt\char92 unhbox}}\index{zzzunhcopy@{\tt\char92 unhcopy}} +`\verb|\unhbox|' und `\verb|\unhcopy|' angewendet werden. die +vertikalen \"Aquivalente sind nicht mehr zul\"a\ss{}ig. Bei einer +\index{Leer!Box}leeren Box +durfen alle Befehle verwendet werden. + +\subsubsection{Allgemeine Registerbefehle} +Wenn sie sich unschl\"ussig sind, wie \TeX\ mit Registern arbeitet, dann +k\"onnen sie verschiedene `\verb|\show|'-Befehle benutzen. +\index{zzzcount@{\tt\char92 count}}\index{zzzdimen@{\tt\char92 dimen}} +\index{zzzshowthe@{\tt\char92 showthe}} +\begin{verbatim} +\showthe\count1 \showthe\dimen2 \showthe\skip3 +\end{verbatim} +gibt z.B.\ die Inhalte des 2ten Zahl-, 3ten \index{Dimension!Register} +Dimensions- und 4ten +Skipregisters aus. Mit dem Befehl \index{zzzshowbox@{\tt\char92 showbox}} +`\verb|\showbox4|' k\"onnen sie sich den Inhalt +des 5ten Boxregisters ansehen.\footnote{Die Ausgabe erfolgt \"ubrigens +nur in den \index{File!Log}Logfile, es sei denn, sie setzen {\tt\char92 +tracingonline=1}.} + +Wenn viele Leute an einem \index{Makro!Paket} +Makropaket f\"ur \TeX\ arbeiten, w\"are es +fatal, wenn verschiedene Menschen dasselbe Register f\"ur +unterschiedliche Zwecke benutzen wollen. \TeX\ stellt deshalb den +Befehl \index{zzznewcount@{\tt\char92 newcount}} +`\verb|\newcount|' bereit, um ein noch unbenutztes Register +ansprechen zu k\"onnen. Sie k\"onnen einfach mit +\index{zzzmeinzaehler@{\tt\char92 meinzaehler}} +\begin{verbatim} +\newcount\meinzaehler +\end{verbatim} +ein \index{Neu!Zahlregister} +neues Zahlregister bereitstellen lassen, da\ss{} dann mit +`\verb|\meinzaehler|' angesprochen werden kann. Analog gibt es auch +die Befehle: +\index{zzznewbox@{\tt\char92 newbox}} +\index{zzznewdimen@{\tt\char92 newdimen}} +\index{zzznewmuskip@{\tt\char92 newmuskip}} +\index{zzznewskip@{\tt\char92 newskip}} +\begin{verbatim} +\newdimen +\newskip +\newmuskip +\newbox +\end{verbatim} +Au\ss{}erdem stellt {\em Plain} \TeX\ auch noch die Befehle: +\index{zzznewfam@{\tt\char92 newfam}}\index{zzznewinsert@{\tt\char92 newinsert}} +\index{zzznewread@{\tt\char92 newread}}\index{zzznewtoks@{\tt\char92 newtoks}} +\index{zzznewwrite@{\tt\char92 newwrite}} +\begin{verbatim} +\newtoks +\newread +\newwrite +\newfam +\newinsert +\end{verbatim} +bereit, deren Bedeutung sp\"ater erkl\"art wird. + +Wenn sie den Inhalt eines numerischen Registers in den Text \"ubernehmen +wollen, benutzen sie den Befehl \index{zzzthe@{\tt\char92 the}} +`\verb|\the|'. Mit +`\verb|\the\meinzaehler|' wird der augenblickliche Inhalt des +Zahlregisters `\verb|\meinzaehler|' in den Text \"ubernommen. + +F\"ur lokalen Gebrauch hat es sich durchgesetzt die Register +\index{zzzcount@{\tt\char92 count}}\index{zzzdimen@{\tt\char92 dimen}} +`\verb|\count255|', `\verb|\dimen255|' usw.\ zu benutzen. Dabei +sollten sie allerdings nicht das Register \index{Box!255} +`\verb|\box255|' benutzen, +da es eine besondere Bedeutung hat. Die Register $0\ldots9$ haben auch +spezielle Bedeutungen und werden auch nicht von den +\index{zzznew@{\tt\char92 new}}`\verb|\new|$\ldots$' Befehlen zur\"uckgegeben. + +\subsection{Die Details der Einf\"ugung} +Es gibt 255 \index{Klasse!Einfuegung@Klasse!Einf\"ugung} +Klassen von Einf\"ugungen. \index{zzzinsert@{\tt\char92 insert}} +`\verb|\insert0|' $\ldots$ +`\verb|\insert255|'. Jede Einf\"ugung korrespondiert mit einigen der +entsprechenden bekannten \index{Register!Korrespondierende} +Registern. `\verb|\insert100|' korrespondiert +mit \index{zzzcount@{\tt\char92 count}}\index{zzzdimen@{\tt\char92 dimen}} +`\verb|\count100|', `\verb|\dimen100|', `\verb|\skip100|' und +`\verb|\box100|'. {\em Plain} \TeX\ stellt Befehle zur Verf\"ugung, diese +Register sofort zu reservieren. Mit dem Befehl +\index{zzzfootins@{\tt\char92 footins}}\index{zzznewinsert@{\tt\char92 newinsert}} +\begin{verbatim} +\newinsert\footins +\end{verbatim} +Wird z.B.\ die Einf\"ugungsnummer f\"ur \index{Fussnote@Fu\ss{}note}Fu\ss{}noten festegelegt. Mit +\index{zzzcount@{\tt\char92 count}} +`\verb|\count\footins|' kann jetzt das entsprechende Zahlregister +angesprochen werden. Tats\"achlich sind die \index{Klasse!Nummer} +Klassennummern +festgelegt,\footnote{Fu\ss{}noten sind Klasse 254, Topeinf\"ugungen die +Klasse 253} aber im weiteren braucht uns das zun\"achst nicht zu st\"oren. +Nehmen wir einfach an es ginge um die Einf\"ugung $n$. Dann gilt f\"ur +diese Klasse von Einf\"ugung: + +\begin{quote} +\begin{tabular}{lp{10cm}} +{\tt\char92 box}$n$ & Enth\"alt das Material, das bei der Ausgabe +eingef\"ugt werden soll.\\ +{\tt\char92 count}$n$ & Enth\"alt den Vergr\"o\ss{}erungsfaktor, der f\"ur den +Seitenumbruch gebraucht wird.\\ +{\tt\char92 dimen}$n$ & Enth\"alt die maximale Einf\"ugungsgr\"o\ss{}e pro +Seite.\\ +{\tt\char92 skip}$n$ & Enth\"alt den Platz, der auf einer Seite +zus\"atzlich bereitgestellt werden soll. +\end{tabular} +\end{quote}\index{Ausgabe} + +Wenn die Einf\"ugung einfach nur ihre normale +\index{Hoehe!Einfuegung@H\"ohe!Einf\"ugung}H\"ohe hat, kann der +\index{Groesse!Faktor@Gr\"o\ss{}e!Faktor} +Vergr\"o\ss{}erungsfaktor auf 1000 gesetzt werden, auf dem er normalerweise +auch steht. Eine 10pt \index{Fussnote!Platzbedarf@Fu\ss{}note!Platzbedarf} +Fu\ss{}note braucht auch 10pt Platz. Es kann nun +aber sein, da\ss{} diese Fu\ss{}note in zwei +\index{Spalte!Fussnote@Spalte!Fu\ss{}note}Spalten gesetzt werden soll, dann +braucht sie in der H\"ohe nur den halben Platz. In diesem Falle w\"are +\index{zzzcount@{\tt\char92 count}} +`\verb|\count|$n$' auf 500 zu setzen. Der Vergr\"o\ss{}erungsfaktor wird +also gebraucht um auch in schwierigen F\"allen die Seitenberechnung +richtig durchf\"uhren zu k\"onnen. + +Die erste Fu\ss{}note auf einer Seite braucht etwas mehr Platz, als sie +selber einnimmt, da wir ja die Fu\ss{}noten etwas vom \"ubrigen Text +absetzen wollen und auch noch eine \index{Horizontal!Linie} +horizontale Linie einf\"ugen wollen. +Dieser Extraplatz steht in dem entsprechenden Skipregister. {\em Plain} +\TeX\ setzt z.B. +\index{zzzbigskipamount@{\tt\char92 bigskipamount}} +\index{zzzfootins@{\tt\char92 footins}} +\index{zzzskip@{\tt\char92 skip}} +\begin{verbatim} +\skip\footins=\bigskipamount +\end{verbatim} +Damit wird der notwendige Platz bereitgestellt. + +Mitunter ist es w\"unschenswert den maximalen Platz f\"ur Einf\"ugungen zu +begrenzen. Z.B.\ will niemand eine ganze Seite voller Fu\ss{}noten lesen. +Der Maximale Paltz, den alle Einf\"ugungen einer +\index{Klasse!Einfuegung@Klasse!Einf\"ugung}Klasse einnehmen d\"urfen +steht im entsprechenden \index{Dimension!Register} +Dimensionsregister. F\"ur Fu\ss{}noten etwa, +definiert {\em Plain} \TeX: +\index{zzzdimen@{\tt\char92 dimen}}\index{zzzfootins@{\tt\char92 footins}} +\begin{verbatim} +\dimen\footins=8 in +\end{verbatim} +Somit k\"onnen maximal 8 Inch einer Seite mit Fu\ss{}noten aufgef\"ullt +werden, der Rest wird auf weitere Seiten \"ubernommen. + +Zur Zerlegung einer Einf\"ugung gibt es einen Befehl: +\index{zzzvsplit@{\tt\char92 vsplit}}`\verb|\vsplit|'. +Mit der Anweisung +\index{zzzsetbox@{\tt\char92 setbox}} +\begin{verbatim} +\setbox200=\vsplit100 to 50pt +\end{verbatim} +geht \TeX\ folgenderma\ss{}en um: Zun\"achst wird der Anfang des Inhaltes +von \index{Box!Register} +Box100 nach Box200 kopiert, bis die Box200 die geforderte +\index{Hoehe!Box@H\"ohe!Box}H\"ohe von +50pt hat.\footnote{Hierbei werden dieselben Regeln wirksam, wie beim +Seitenumbruch.} Danach wird aus der Box100 alles entfernt, was jetzt +in der Box200 steht. So wird auch verfahren, wenn eine Einf\"ugung \"uber +mehr als eine Seite verteilt werden soll. +\chapter{Mathematische Formeln} +\section{Eingabe einfacher Formeln} +\subsection{Zeichen im mathematischen Modus} +Mathematische Formeln werden in \TeX\ mit zwei \index{Dollarzeichen} +Dollarzeichen (\$) +\index{Klammer!Mathematische Formeln} +eingeklammert. Alles was zwischen diesen Klammern steht wird als +mathematische Formel verstanden. \TeX\ verf\"ahrt dabei so, da\ss{} +komplexere Formeln aus einfacheren Formeln modular zusammengesetzt +werden. + +Innerhalb des mathematischen Modus von \TeX\ verh\"alt sich \TeX\ +anders, als im Textmodus. Die normalen Zeichen (`A'$\ldots$`Z' und +`a'$\ldots$`z') werden in \index{Italic}\index{Schrift!Italic} +Italicschrift gesetzt. Die \index{Punkt}Punkte. \index{Komma}Kommata +u.\"a.\ werden normal in \index{Roman}Roman gesetzt, aber z.B.\ das +\index{Minuszeichen}Minuszeichen +sieht anders aus, als der einfache \index{Bindestrich} +Bindestrich. \index{Leer!Zeichen}Leerzeichen werden im +mathematischen Modus g\"anzlich ignoriert, statt dessen verwendet \TeX\ +eigene Abst\"ande f\"ur die Formeln. Die \index{Funktion!Des Leerzeichens} +Funktion des Leerzeichens als +Beendigung einer \index{Kontrollsequenz} +Kontrollsequenz bleibt allerdings erhalten. Die in +der \index{Mathematik}Mathematik oft gebrauchten \index{Griechische Buchstaben} +griechischen Buchstaben stehen sowohl +als Klein, wie auch als \index{Grossbuchstaben@Gro\ss{}buchstaben} +Gro\ss{}buchstaben zur Verf\"ugung. Die Eingabe von \index{zzzalpha@{\tt\char92 +alpha}}\index{zzzbeta@{\tt\char92 beta}}\index{zzzdelta@{\tt\char92 delta}} +`\verb|$$\alpha,| \verb|\beta,| \index{zzzgamma@{\tt\char92 gamma}} +\verb|\gamma,| \verb|\delta$$|' ergibt: +\[\alpha, \beta, \gamma, \delta\] +Und durch eine kleine \"Anderung wird mit `\verb|$\Gamma$|': $\Gamma$. +Einige griechische Buchstaben stehen sogar in verschiedenen +Ausf\"uhrungen bereit. + +\index{zzzepsilon@{\tt\char92 epsilon}}\index{zzzphi@{\tt\char92 phi}} +\index{zzzrho@{\tt\char92 rho}}\index{zzztheta@{\tt\char92 theta}} +`\verb|$\phi,\theta,\epsilon,\rho$|' ergibt: $\phi,\theta,\epsilon,\rho$ + +\index{zzzvarepsilon@{\tt\char92 varepsilon}}\index{zzzvarphi@{\tt\char92 varphi}} +\index{zzzvarrho@{\tt\char92 varrho}}\index{zzzvartheta@{\tt\char92 vartheta}} +`\verb|$\varphi,\vartheta,\varepsilon,\varrho$|' ergibt: +$\varphi,\vartheta,\varepsilon,\varrho$ + +Dar\"uber hinaus gibt es noch viele Zeichen, die meist nur in der +\index{Mathematik} +Mathematik verwendet werden, wie \index{zzzapprox@{\tt\char92 approx}} +`$\approx$' (`\verb|\approx|') oder +`$\mapsto$' \index{zzzmapsto@{\tt\char92 mapsto}}(`\verb|\mapsto|'). + +\subsection{Potenzen und Indizes} +Nun soll etwas $^{\mbox{\tiny hochgestellt}}$ oder $_{\mbox{\tiny +tiefgestellt}}$ werden. In \TeX\ verwendet man dazu die Zeichen +`\verb|^|' und `\verb|_|'. Im einfachsten Fall, wenn nur ein Zeichen +hoch- bzw.\ tiefgestellt werden soll, sieht das folgenderma\ss{}en aus: + +\medskip\begin{tabular}{ll} +{\em Eingabe} & {\em Ausgabe}\\ +{\tt\char36 x\char94 2\char36} & $x^2$\\ +{\tt\char36 x\char95 2\char36} & $x_2$\\ +{\tt\char36 2\char94 x\char36} & $2^x$\\ +{\tt\char36 x\char94 2y \char94 2\char36} & $x^2y^2$\\ +{\tt\char36 x\ \char94\ 2y\ \char94\ 2\char36} & $x ^ 2y ^ 2$\\ +{\tt\char36 \char95 2F\char94 3\char36} & $_2F_3$ +\end{tabular}\medskip + +Wenn mehrere Zeichen hoch- bzw.\ tiefgestellt werden sollen, dann +m\"ussen diese Zeichen zu einer \index{Gruppe!Hoch- Tiefstellung} +Gruppe zusammengefa\ss{}t werden: + +\medskip\begin{tabular}{ll} +{\tt\char36 x\char94\char123 2y\char125\char26} & $x^{2y}$\\ +{\tt\char36 2\char94\char123 2\char94 x\char125\char36} & $2^{2^x}$\\ +{\tt\char36 y\char95\char123 x\char94 2\char125\char36} & $y_{x^2}$\\ +\end{tabular}\medskip + +Wie es auch bei {\em guten} \index{Mathematik} +Mathematikern der Fall ist, sind +Kombinationen, wie `\verb|x^y^z|' oder `\verb|x_y_z|' +verboten.\footnote{Der Grund liegt in der Nichteindeutigkeit der +Schreibweise. $9^{9^9}$ kann sowohl als $9^{(9^9)}$ verstanden werden, +als auch als ${(9^9)}^9 = 9^{81}$} Verwenden sie {\em immer} +\index{Klammer!Gruppe} +Gruppenklammern, um ihre Intention deutlich zu machen, also z.B.\ +`\verb|{x_y}_z|' oder `\verb|x^{y^z}|'. Aus \"ahnlichem Grunde ist es +auch schlechter \index{Stil!Index} +Stil `\verb|_2F_3|' zu schreiben. Setzen sie den +ersten Index besser an eine \index{Leer!Gruppe}leere \index{Gruppe!Leere} +Gruppe: `\verb|{}_2F_3|'. + +Die Reihenfolge der Indizierung und Potenzierung eines Zeichens ist +egal, wie sie bei den folgenden Beispielen sehen k\"onnen: + +\medskip\begin{tabular}{ll} +{\tt\char36 x\char94 2\char95 3\char36} & $x^2_3$\\ +{\tt\char36 x\char95 3\char94 2\char36} & $x_3^2$\\ +{\tt\char36 x\char94\char123 31415\char125\char95\char123 92\char125 ++\char92 pi\char36} & $x^{314151}_{92}+\pi$\\ +{\tt\char36 x\char95\char123 y\char94 a\char95b\char125\char94\char123 +z\char95 c\char94 d\char125\char36} & $x_{y^a_b}^{z_c^d}$ +\end{tabular}\medskip + +Das die normalen Zeichen in \index{Italic} +Italic ausgegeben werden, werden Indizes +etwas an das Zeichen heranger\"uckt, der Index steht also nicht genau +unter der Potenz. Will man diesen Effekt vermeiden, mu\ss{} man wieder +eine \index{Leer!Gruppe}leere Gruppe verwenden: + +\medskip\begin{tabular}{ll} +{\tt\char36 P\char95 2\char94 2\char36} & $P_2^2$\\ +{\tt\char36 P\char123\char125\char95 2\char94 2\char36} & $P{}_2^2$ +\end{tabular}\medskip + +Sehr oft wird als hochgestelltes Zeichen in der \index{Mathematik} +Mathematik ein +einfacher Strich benutzt. \TeX\ stellt hierf\"ur den Befehl +\index{zzzprime@{\tt\char92 prime}}`\verb|\prime|' zur Verf\"ugung. + +\medskip\begin{tabular}{ll} +{\tt\char36 y\char95 1\char94\char92 prime\char36} & $y_1^\prime$\\ +{\tt\char36 y\char95 2\char94\char123\char92 prime\char92 +prime\char125\char36} & $y_2^{\prime\prime}$\\ +{\tt\char36 y\char95 2\char94\char123\char92 prime\char92 +prime\char92 prime\char125\char36} & $y_2^{\prime\prime\prime}$\\ +\end{tabular}\medskip + +\subsection{Wurzeln und \"Ahnliches} +In \TeX\ gibt es einige Zeichen, die sich in ihrer +\index{Groesse!Automatisch@Gr\"o\ss{}e!Automatisch}Gr\"o\ss{}e automatisch +den Erfordernissen anpassen. Dazu geh\"oren das Wurzelzeichen +\index{zzzsqrt@{\tt\char92 sqrt}}\index{zzzunderline@{\tt\char92 underline}} +(`\verb|\sqrt|'), die Unterstreichung (`\verb|\underline|') und die +\index{Ueberstreichung@\"Uberstreichung} +\"Uberstreichung \index{zzzoverline@{\tt\char92 overline}} +(`\verb|\overline|'). Die Eingaben von +\index{zzzalpha@{\tt\char92 alpha}} +\index{zzzsqrt@{\tt\char92 sqrt}} +\index{zzzunderline@{\tt\char92 underline}} +\begin{verbatim} +$\sqrt2$ +$\sqrt{x+2}$ +$\underline4$ +$\overline{x+y}$ +$\overline x+\overline y$ +$x^{\underline n}$ +$x^{\overline{n+m}}$ +$\sqrt{x^3+\sqrt\alpha}$ +\end{verbatim} +ergeben der Reihe nach: + +$\sqrt2$, $\sqrt{x+2}$, $\underline4$, $\overline{x+y}$, +$\overline x+\overline y$, $x^{\underline n}$, $x^{\overline{n+m}}$, +$\sqrt{x^3+\sqrt\alpha}$ + +Auch andere, als die zweite Wurzeln, lassen sich in \TeX\ realisieren: +\index{zzzroot@{\tt\char92 root}} + +\medskip\begin{tabular}{ll} +{\tt\char36\char92 root\ 3\ \char92 of\ 2\char36} & $\root 3 \of 2$\\ +{\tt\char36\char92 root\ n\ \char92 of\ \char123 x\char94 n+y\char94 +n\char125\char36} & $\root n \of {x^n+y^n}$\\ +{\tt\char36\char92 root\ n+1\ \char92 of a\char36} & $\root n+1 \of a$ +\end{tabular}\medskip + +Wurzeln, \"Uber- und Unterstreichungen passen sich nicht nur der L\"ange +des \index{Argument}Arguments an, sondern auch der +\index{Hoehe!Argument@H\"ohe!Argument}H\"ohe. Deutlich wird das am +Unterschied zwischen \index{zzzoverline@{\tt\char92 overline}} +`\verb|\overline l|' ($\overline l$) und +`\verb|\overline m|' ($\overline m$). Oder auch der Folge: $\sqrt +a+\sqrt d+\sqrt y$. Wenn sie diese unterschiedlichen H\"ohen vermeiden +wollen, dann gibt es den Befehl \index{zzzmathstrut@{\tt\char92 mathstrut}} +`\verb|\mathstrut|', der dem\index{zzzstrut@{\tt\char92 strut}} +`\verb|\strut|' Befehl weitgehend entspricht, nur f\"ur den +mathematischen Modus. Die Eingabe von +\index{zzzsqrt@{\tt\char92 sqrt}} +\begin{verbatim} +$\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$ +\end{verbatim} +ergibt: $\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$ + +\subsection{Die Zeichen im mathematischen Modus} +Ich habe oben schon angedeutet, da\ss{} im mathematischen Modus manche +Zeichen anders ausgegeben werden, als im Textmodus. Hier nun ein etwas +systematischerer \"Uberblick, welche Zeichen sich wie \"andern. + +Die normalen Buchstaben (`A' bis `Z' und `a' bis `z') werden in +\index{Italic}Italic +gesetzt, da damit \"ublicherweise Variablen bezeichnet werden. +\[A\ldots Z\mbox{\quad und\quad}a\ldots z\] +F\"ur den Buchstaben `l' gibt es sogar zwei Zeichen, da in +\index{Schrift!Hand} +handschriftlichen Texten das `l' oft mit der `1' verwechselt wird. Der +zugeh\"orige Befehl hei\ss{}t \index{zzzell@{\tt\char92 ell}} +`\verb|\ell|' und er ergibt $\ell$. + +Die 18 Zeichen +\begin{verbatim} +0 1 2 3 4 5 6 7 8 9 ! ? . | / ` @ \" +\end{verbatim} +sind einfache Symbole, f\"ur sie wird kein extra Platz bereitgestellt. +Man achte allerdings auf den Unterschied zwischen der Null ($0$) und +dem kleinen oder gro\ss{}en `O'. + +Die drei Zeichen `\verb|-|', `\verb|+|' und `\verb|*|' hei\ss{}en bin\"are +\index{Operator!Binaer@Operator!Bin\"ar} +Operatoren, da sie sich \"ublicherweise auf zwei Teile einer Formel +beziehen. Sie werden mit etwas zus\"atzlichem \index{Zwischenraum} +Zwischenraum gesetzt: + +\medskip\begin{tabular}{ll} +{\em Eingabe} & {\em Ausgabe}\\ +{\tt\char36 x+y-z\char35} & $x+y-z$\\ +{\tt\char36 x+y*z\char36} & $x+y*z$\\ +{\tt\char36 x*y/z\char36} & $x*y/z$ +\end{tabular}\medskip + +Beachten sie auch, da\ss{} der \index{Bindestrich} +Bindestrich, im Textmodus `-', zum +\index{Minuszeichen} +Minuszeichen ($-$) wird, und das \index{Stern!Textmodus} +Sternchen, im Textmodus `*' tiefer +gesetzt wird ($*$). Beim \index{Schraegstrich@Schr\"agstrich} +Schr\"agstrich wird {\em kein} zus\"atzlicher +Platz gelassen, auch wenn meist zwei Teile durcheinander geteilt +werden. + +\TeX\ stellt noch mehr zweiseitige \index{Operator!Zweiseitig} +Operatoren bereit: + +\index{zzzbullet@{\tt\char92 bullet}}\index{zzzcap@{\tt\char92 cap}} +\index{zzzcirc@{\tt\char92 circ}}\index{zzzvee@{\tt\char92 vee}} +\index{zzzwedge@{\tt\char92 wedge}} +\medskip\begin{tabular}{ll} +{\tt\char36 c\char92 times y\char92 cdot z\char36} & $x\times y\cdot +z$\\ +{\tt\char36 x\char92 circ y\char92 bullet z\char36} & $x\circ y\bullet +z$\\ +{\tt\char36 x\char92 cup y\char92 cap z\char36} & $x\cup y\cap z$\\ +{\tt\char36 x\char92 sqcup y\char92 sqcap z\char36} & $x\sqcup y\sqcap z$\\ +{\tt\char36 x\char92 vee y\char92 wedge z\char36} & $x\vee y\wedge +z$\\ +{\tt\char36 x\char92 mp y\char92 pm z\char36} & $x\mp y\pm z$ +\end{tabular}\medskip + +In manchen F\"allen wird auch bei einem zweiseitigen +\index{Operator!Zweiseitig}Operator {\em kein} +zus\"atzlicher \index{Zwischenraum}Zwischenraum eingef\"ugt: +\begin{enumerate} +\item Wenn nur auf einer Seite des Operators etwas steht: + +\medskip\begin{tabular}{ll} +{\tt\char36 x=+1\char36} & $x=+1$\\ +{\tt\char36 3.142-\char36} & $3.142-$\\ +{\tt\char36(D*)\char36} & $(D*)$ +\end{tabular}\medskip + +\item Bei Indizes und \index{Potenz}Potenzen +\index{zzzbullet@{\tt\char92 bullet}}\index{zzzcap@{\tt\char92 cap}} +\index{zzzmapsto@{\tt\char92 mapsto}} + +\medskip\begin{tabular}{ll} +{\tt\char36 K\char95 n\char94 +,K\char95 n\char94 -\char36} & +$K_n^+,K_n^-$\\ +{\tt\char36 z\char94 *\char95\char123 ij\char125\char36} & +$z^*_{ij}$\\ +{\tt\char36 g\char94\char92 circ\ \char92 mapsto\ g\char94\char92 +bullet\char36} & $g^\circ \mapsto g^\bullet$\\ +{\tt\char36 f\char94 *(x)\ \char92 cap\ f\char95 *(y)\char36} & +$f^*(x) \cap f_*(y)$ +\end{tabular}\medskip +\end{enumerate} + +Neben den einfachen zweiseitigen Operatoren stellt \TeX\ auch noch +\index{Operator!Relation}\index{Relation} +Relationsoperatoren bereit, die {\em etwas} anders gesetzt werden. Die +einfachsten Relationsoperatoren sind `\verb|=|', `\verb|<|', `\verb|>|' +und `\verb|:|', wie die folgenden Beispiele aber zeigen, nicht die +einzigen. + +\medskip\begin{tabular}{ll} +{\tt\char36x=y\char62 z\char36} & $x=y>z$\\ +{\tt\char36 x:=y\char36} & $x:=y$\\ +{\tt\char36 x\char92 le y\char92 ne z\char36} & $x\le y\ne z$\\ +{\tt\char36 x\char92 sim y\char92 simeq z\char36} & $x\sim y\simeq +z$\\ +{\tt\char36 x\char92 equiv y\char92 not\char92 equiv z\char36}& +$x\equiv y\not\equiv z$\\ +{\tt\char36 x\char92 subset y\char92 subseteq z\char36} & $x\subset +y\subseteq z$ +\end{tabular}\medskip + +Die \index{Interpunktion!Zeichen} +Interpunktionszeichen \index{Komma} +Komma (,) und Semikolon (;) werden mit etwas +zus\"atzlichem Platz {\em hinter} dem Zeichen, aber nicht {\em vor} dem +Zeichen gesetzt + +\medskip\begin{tabular}{ll} +{\tt\char36 f(x,y;z)\char36} & $f(x,y;z)$ +\end{tabular}\medskip + +Der \index{Punkt}Punkt wird als normales Zeichen behandelt, anders, als der +\index{Doppelt!Punkt}Doppelpunkt. Soll dieser als normales Zeichen gesetzt werden, dann kann +das mit dem Befehl \index{zzzcolon@{\tt\char92 colon}}`\verb|\colon|' geschehen. + +\medskip\begin{tabular}{ll} +{\tt\char36 f:A\char92 to\ B\char36} & $f:A\to B$\\ +{\tt\char36 f\char92 colon A\char92 to\ B\char36} & $f\colon A\to B$ +\end{tabular}\medskip + +Wenn das \index{Komma} +Komma als einfaches Symbol gesetzt werden soll, schreiben sie +es in geschweifte \index{Klammer!Geschweifte} +Klammern. Alles, was in geschweiften Klammern steht +wird als einfaches Symbol betrachtet. + +\medskip\begin{tabular}{lll} +{\tt\char36 12,345x\char36} & $12,345x$ & (falsch) \\ +{\tt\char36 12\char123 ,\char125 345x\char36} & $12{,}345x$ & (richtig) +\end{tabular}\medskip + +Nun gibt es nur noch einige Tasten zu besprechen. Die Zeichen +`\verb|(|' und `\verb|[|' werden `\"Offner' genannt, die Zeichen +`\verb|)|' und `\verb|]|' \index{Schliesser@Schlie\ss{}er} +`Schlie\ss{}er'. Das Zeichen `\verb|'|' kennen +wir ja schon, und es bleiben nur noch die reservierten Zeichen: +\begin{verbatim} +\ $ % # & ~ { } _ ^ +\end{verbatim} + +Die besonderen Zeichen f\"ur Hoch- und Tiefstellung, sowie einige der +anderen mathematischen Befehle, wie \index{zzzapprox@{\tt\char92 approx}} +`\verb|\approx|' oder +\index{zzzalpha@{\tt\char92 alpha}} +`\verb|\alpha|' k\"onnen nicht in normalem Text verwendet werden. \TeX\ +benutzt diese Zeichen, um einen m\"oglichen \index{Fehler!Mathematische +Modus}Fehler ihrerseits finden zu +k\"onnen. Wird ein derartiges Zeichen oder ein solcher Befehl au\ss{}erhalb +des mathematischen Modus angetroffen, geht \TeX\ davon aus, da\ss{} die +ein `\verb|$|' vergessen haben, oder eins zuviel geschrieben haben. + +\subsection{Die mathematischen Akzente}\index{Akzent!Mathematische} +\TeX\ stellt neben den oben beschriebenen Zeichen auch noch eine Reihe +von Akzenten bereit, die auch nur im mathematischen Modus ansprechbar +sind. Hier eine vollst\"andige Liste: + +\index{zzzacute@{\tt\char92 acute}}\index{zzzbar@{\tt\char92 bar}} +\index{zzzbreve@{\tt\char92 breve}}\index{zzzcheck@{\tt\char92 check}} +\index{zzzddot@{\tt\char92 ddot}}\index{zzzdot@{\tt\char92 dot}} +\index{zzzgrave@{\tt\char92 grave}}\index{zzzhat@{\tt\char92 hat}} +\index{zzztilde@{\tt\char92 tilde}}\index{zzzvec@{\tt\char92 vec}} +\medskip\begin{tabular}{ll} +{\tt\char36\char92 hat a\char36} & $\hat a$\\ +{\tt\char36\char92 check a\char36} & $\check a$\\ +{\tt\char36\char92 tilde a\char36} & $\tilde a$\\ +{\tt\char36\char92 acute a\char36} & $\acute a$\\ +{\tt\char36\char92 grave a\char36} & $\grave a$\\ +{\tt\char36\char92 dot a\char36} & $\dot a$\\ +{\tt\char36\char92 ddot\char36} & $\ddot a$\\ +{\tt\char36\char92 breve\char36} & $\breve a$\\ +{\tt\char36\char92 bar\char36} & $\bar a$\\ +{\tt\char36\char92 vec\char36} & $\vec a$ +\end{tabular}\medskip + +Die Akzente lassen sich nat\"urlich auch auf andere Buchstaben als das +`a' setzen. Die ersten neun Akzente sind auch im Textmodus verwendbar, +haben dort allerdings eine andere \index{Kontrollsequenz}Kontrollsequenz. +Wenn sie einen der Buchstaben mit einem bestimmten Akzent +\"ofters brauchen, emfiehlt sich eine \index{Definition} +Definition zu Beginn des Textes +\index{zzzdef@{\tt\char92 def}}\index{zzzhat@{\tt\char92 hat}} +\begin{verbatim} +\def\Ahat{{\hat A}} +\def\chat{{\hat c}} +\end{verbatim} +Die Buchstaben `i' und `j' stehen im mathematischen Modus auch ohne +\index{Punkt} +Punkt,mit den Befehlen \index{zzzimath@{\tt\char92 imath}} +`\verb|\imath|' und `\verb|\jmath|', zur Verf\"ugung. +Diese eignen sich besser zur Akzentuierung. + +Auch \index{Doppelt!Akzent}doppelte \index{Akzent!Doppelter} +Akzente, jeder \index{Mathematik}Mathematiker h\"atte seine helle Freude, +lassen sich in \TeX\ realsieren, es bedarf allerdings etwas M\"uhe. Das +Symbol \index{zzzhat@{\tt\char92 hat}} +`$\skew6\hat{\hat A}$' l\"a\ss{}t sich z.B. mit dem Befehl +\index{zzzskew@{\tt\char92 skew}} +`\verb|\skew6\hat\Ahat|' erreichen. Die `6' wurde durch probieren +gefunden, mit dieser Angabe wird der Akzent nach rechts oder links +verschoben. `5' h\"atte den Akzent etwas zu weit nach links gesetzt, `7' +etwas zu weit nach rechts. Der entscheidende Befehl hei\ss{}t +`\verb|\skew|'. + +Abschlie\ss{}ende kennt \TeX\ noch zwei \index{Akzent!wachsende} +Akzente, die mit dem \index{Argument}Argument +mitwachsen (zumindest in gewissem Ma\ss{}e). Es sind dies die Akzente +\index{zzzwidehat@{\tt\char92 widehat}}\index{zzzwidetilde@{\tt\char92 widetilde}} +`\verb|\widehat|' und `\verb|\widetilde|' + +\medskip\begin{tabular}{ll} +{\tt\char36\char92 widehat x\char36} & $\widehat x$\\ +{\tt\char36\char92 widetilde x\char36} & $\widetilde x$\\ +{\tt\char36\char92 widehat\char123 xy\char125\char36} & +$\widehat{xy}$\\ +{\tt\char36\char92 widetilde\char123 xy\char125\char36} & +$\widetilde{xy}$\\ +{\tt\char36\char92 widehat\char123 xyz\char125\char36} & +$\widehat{xyz}$\\ +{\tt\char36\char92 widetilde\char123 xyz\char125\char36} & +$\widetilde{xyz}$ +\end{tabular}\medskip + +\section{Weitere Konstruktionselemente} +\subsection{Gestapelte Formeln} +Die beliebtesten Formeln aller \index{Mathematik} +Mathematiker sind die \index{Bruch}Br\"uche und +verwandte Formeln. Die Konstruktion von +\[\frac{1}{2}\mbox{\quad oder\quad} +\frac{n+1}{3}\mbox{\quad oder\quad} +\left(\begin{array}{c}n+1\\3\end{array}\right)\mbox{\quad oder\quad} +\sum_{n=1}^3 Z^2_n\] +sind in \TeX\ m\"oglich durch die Befehle +\index{zzzchoose@{\tt\char92 choose}} +\index{zzzover@{\tt\char92 over}} +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +$$1\over2$$ +$$n+1\over3$$ +$$n+1\choose3$$ +$$\sum_{n=1}^3 Z_n^2$$ +\end{verbatim} +\subsubsection{Br\"uche}\index{Bruch} +Br\"uche werden in \TeX\ durch den Befehl `\verb|\over|' realisiert. Er +bezieht sich auf {\em alles} was vor resp. nach ihm steht, es sei denn +sie gruppieren die gew\"unschten Zeichen. + +\index{Display!Stil} +\medskip\begin{tabular}{ll} +{\tt\char36\char36 x+y\char94 2\char92 over k+1\char36\char36} & +$\displaystyle{\frac{x+y^2}{k+1}}$\\ +{\tt\char36\char36\char123 x+y\char94 2\char92 over k\char125 ++1\char36\char36} & $\displaystyle{\frac{x+y^2}{k}+1}$\\ +{\tt\char36\char36 x+\char123 y\char94 2\char92 over k\char125 ++1\char36\char36} & $\displaystyle{x+\frac{y^2}{k}+1}$\\ +{\tt\char36\char36 x+\char123 y\char94 2\char92 over +k+1\char125\char36\char36} & $\displaystyle{x+\frac{y^2}{k+1}}$\\ +{\tt\char36\char36 x+y\char94\char123 2\char92 over +k+1\char125\char36\char36} & $\displaystyle{x+y^{\frac{2}{k+1}}}$\\ +\end{tabular}\medskip + +Bei \index{Bruch}\index{Mehrfachbrueche@Mehrfachbr\"uche} +Mehrfachbr\"uchen m\"ussen sie sogar geschweifte +\index{Klammer!Bei Bruechen@Klammer!Bei Br\"uchen}Klammern setzen + +\medskip\begin{tabular}{ll} +{\tt\char36\char36\char123 a\char92 over b\char125\char92 over +2\char36\char36} & $\displaystyle{\frac{\frac{a}{b}}{2}}$\\ +{\tt\char36\char36 a\char92 over\char123 b\char92 over +2\char125\char36\char36} & $\displaystyle{\frac{a}{\frac{b}{2}}}$ +\end{tabular}\medskip + +Bei derartigen \index{Bruch}\index{Mehrfachbrueche@Mehrfachbr\"uche} +Mehrfachbr\"uchen empfiehlt sich aber sowieso die +Verwendung des \index{Schraegstrich@Schr\"agstrich} +Schr\"agstriches. Die obigen Br\"uche s\"ahen dann wie +$\frac{a/b}{2}$ und $\frac{a}{b/2}$ aus. Denken sie nur daran, da\ss{} bei +Br\"uchen mit \index{Schraegstrich@Schr\"agstrich} +Schr\"agstrichen etwas andere Regeln gelten. Sie m\"ussen +eventuell ein paar Klammern mehr schreiben. +\subsection{Die verschiedenen Stile} +Bei den Beispielen d\"urften ihnen schon aufgefallen sein, da\ss{} \TeX\ die +Zeichen im mathematischen Modus in unterschiedlichen +\index{Groesse!Von Zeichen@Gr\"o\ss{}e!Von Zeichen}Gr\"o\ss{}en und Stilen +setzt. Es gibt acht verschiedene Stile in \TeX\ eine Formel zu setzen: + +\index{Display!Stil}\index{Ebene!Hoch- Tiefstellung}\index{Skript!Stil} +\medskip\begin{tabular}{ll} +Display Stil & F\"ur abgesetzte Formeln\\ +Text Stil & F\"ur Formeln im Text\\ +Skript Stil & F\"ur Hoch- bzw.\ Tiefstellungen\\ +Skriptskript Stil & F\"ur die zweite Ebene von Hoch- bzw.\ +Tiefstellungen +\end{tabular}\medskip\index{Formel!abgesetzte} + +Au\ss{}erdem gibt es noch zu jedem Stil einen ``geklammerten'' Stil, der +sich nicht wesentlich unterscheidet von dem Originalstil, nur da\ss{} die +\index{Exponent} +Exponenten nicht so hoch gesetzt werden. Im weiteren werden die Stile +durch: +\[D, D', T, T', S, S', SS, SS'\] +abgek\"urzt. Wird eine Formel in einfachen \index{Dollarzeichen} +Dollarzeichen eingeschlossen, +dann erscheint sie in Textstil, ist sie in doppelten +\index{Dollarzeichen!Doppelt}Dollarzeichen +eingeschlossen, erscheint sie im \index{Display!Stil} +Displaystil. Aus der Stilart folgt +die Gr\"o\ss{}e, in der die Formel, oder die Unterformel, gesetzt wird. + +Es gibt keinen $SSS$-Stil. Dieser w\"are nicht mehr lesbar. Die +Zusammenh\"ange der Stilarten ergeben sich wie folgt: + +\index{Hochstellung} +\medskip\begin{tabular}{lll} +{\em Die Formel} & {\em Hochstellung} & {\em Tiefstellung} \\ +$D,T$ & $S$ & $S'$\\ +$D',T'$ & $S'$ & $S'$\\ +$S,SS$ & $SS$ & $SS'$\\ +$S',SS'$ & $SS'$ & $SS'$ +\end{tabular}\medskip + +Wenn z.B.\ die Formel `\verb|x^{a_b}|' im $D$-Stil gesetzt werden +soll, dann wird das `\verb|a|' in $S$ und das `\verb|b|' in $SS'$ +gesetzt. Das Ergebnis ist: $\displaystyle{x^{a_b}}$. + +Der Hauptunterschied zwischen \index{Display!Stil} +Displaystil und Textstil zeigt sich bei +\index{Bruch}Br\"uchen. Die Zusammenh\"ange zeigt die folgende Tabelle: + +\index{Bruch}\index{Nenner} +\medskip\begin{tabular}{lll} + & \multicolumn{2}{c}{\em Bruch} \\ +{\em Formel} & {\em Nenner} & {\em Z\"ahler} \\ +$D$ & $T$ & $T'$\\ +$D'$ & $T'$ & $T'$\\ +$T$ & $S$ & $S'$\\ +$T'$ & $S'$ & $S'$\\ +$S,SS$ & $SS$ & $SS'$\\ +$S',SS'$ & $SS'$, & $SS'$ +\end{tabular}\medskip + +Am deutlichsten immer noch im Beispiel. Der \index{Bruch} +Bruch `einhalb' erscheint +im Text als: $\frac{1}{2}$ und in der abgesetzten +Formel\index{Formel!abgesetzte} +als:\[\frac{1}{2}\] + +\"Ubrigens, auch die Befehle \index{zzzoverline@{\tt\char92 overline}} +`\verb|\overline|' und \index{zzzsqrt@{\tt\char92 sqrt}}`\verb|\sqrt|' +\"andern den $D$-Stil in den $D'$-Stil. Die Stilarten sind nat\"urlich +nicht gottgegeben. Sie k\"onnen sie mit den Befehlen +\index{zzzdisplaystyle@{\tt\char92 displaystyle}} +\index{zzzscriptstyle@{\tt\char92 scriptstyle}} +\index{zzztextstyle@{\tt\char92 textstyle}} +\begin{verbatim} +\displaystyle +\textstyle +\scriptstyle +\scriptscriptstyle +\end{verbatim} +jederzeit selber frei w\"ahlen. Dazu zun\"achst ein etwas {\em dummes} +Beispiel: Die Eingabe von +\begin{verbatim} +$$n+\scriptstyle n+\scriptscriptstyle n$$ +\end{verbatim} +erzeugt \[n+\scriptstyle n+\scriptscriptstyle n\] +Man sieht aber schon, da\ss{} auch das \index{Pluszeichen} +Pluszeichen mit verkleinert wird. +Etwas besser geeignet um die Unterschiede zu zeigen ist das folgende +Beispiel.\footnote{Der Befehl {\tt\char92 strut} wird benutzt, um die +Z\"ahler etwas gr\"o\ss{}er zu machen. In einem sp\"ateren Kapitel besch\"aftigen +wir uns noch mehr mit dem {\em sch\"onen} Satz von Formeln.} Die Eingabe +von +\index{zzzdisplaystyle@{\tt\char92 displaystyle}} +\index{zzzover@{\tt\char92 over}} +\index{zzzstrut@{\tt\char92 strut}} +\begin{verbatim} +$$a_0+{1\over\displaystyle a_1+ + {\strut 1\over\displaystyle a_2+ + {\strut 1\over\displaystyle a_3+ + {\strut 1\over a_4}}}}$$ +\end{verbatim} +erzeugt +\[a_0+{1\over\displaystyle a_1+ + {\strut 1\over\displaystyle a_2+ + {\strut 1\over\displaystyle a_3+ + {\strut 1\over a_4}}}}\] +Ohne die Befehle `\verb|\displaystyle|' und `\verb|\strut|' sa\"ahe das +Ergebnis +\[a_0+{1\over a_1+ + {1\over a_2+ + {1\over a_3+ + {1\over a_4}}}}\] +aus. Die \index{Nenner} +Nenner werden automatisch \index{Zentrierung} +zentriert. Will man das verhindern, +dann sollte man den Befehl +\index{zzzhfill@{\tt\char92 hfill}}`\verb|\hfill|' benutzen. Damit sieht unser +\index{Bruch}Serienbruch so +\[a_0+{1\hfill\over\displaystyle a_1+ + {\strut 1\hfill\over\displaystyle a_2+ + {\strut 1\hfill\over\displaystyle a_3+ + {\strut 1\hfill\over a_4}}}}\] +aus. +\subsection{Weitere Befehle zur Stapelung} +Neben dem Befehl +\index{zzzover@{\tt\char92 over}} +`\verb|\over|' zur Bildung von Br\"uchen existiert in +\TeX\ auch noch der Befehl \index{zzzatop@{\tt\char92 atop}} +`\verb|\atop|', der einen \index{Bruch} +`Bruch' ohne Bruchstrich ausgibt. + +\medskip\begin{tabular}{ll} +{\tt\char36\char36x\char92 atop y+2\char36\char36} & +$\displaystyle{x\atop y+2}$\\ +\end{tabular}\medskip + +Weiterhin existiert der Befehl \index{zzzchoose@{\tt\char92 choose}} +`\verb|\choose|'\footnote{Die +\index{Binomealkoeffizienten} +Binomealkoeffizienten werden meist in der \index{Statistik} +Statistik gebraucht, um die +Anzahl der M\"oglichkeiten einer Wahl auszudr\"ucken.} der einen +Binomealkoeffizienten ausgibt. + +\medskip\begin{tabular}{ll} +{\tt\char36\char36 n\char92 choose k\char36\char36} & +$\displaystyle{n\choose k}$\\ +\end{tabular}\medskip + +Auch Mischungen dieser Befehle sind erlaubt, vorausgesetzt, sie halten +sich an die Regeln f\"ur Gruppierungen innerhalb von Formeln. +\[{n\choose k}\over 2\] +\[n\choose{k\over2}\] + +Es gibt noch einen Befehl, der zum Satz von Br\"uchen herangezogen +werden kann, bei dem allerdings die St\"arke des \index{Bruch}Bruchstrichs extra +angegeben werden mu\ss{}. Der Befehl hei\ss{}t \index{zzzabove@{\tt\char92 above}} +`\verb|\above|' und wird z.B.\ +folgenderma\ss{}en angewendet +\index{zzzdisplaystyle@{\tt\char92 displaystyle}} +\begin{verbatim} +$$\displaystyle{a\over b}\above1pt\displaystyle{c\over d}$$ +\end{verbatim} +Das Ergebnis sieht dann so aus: +\[\displaystyle{a\over b}\above1pt\displaystyle{c\over d}\] + +\subsection{Summen und Integrale} +Summen und Integrale werden im \index{Stil!Text} +Textstil und im \index{Display!Stil} +\index{Stil!Display}Displaystil in +unterschiedlichen Gr\"o\ss{}en gesetzt, sie hei\ss{}en auch {\em gro\ss{}e} +Symbole.\footnote{Es gibt au\ss{}er diesen beiden noch einige andere, die +aber hier nicht weiter besprochen werden.} + +\medskip\begin{tabular}{llll} +{\tt\char36\char92 sum x\char95 n\char36} & ergibt & $\sum x_n$ & +($T$-Stil)\\ +{\tt\char36\char36\char92 sum x\char95 n\char36\char36} & ergibt & +$\displaystyle{\sum x_n}$ & ($D$-Stil) +\end{tabular}\medskip + +Bei den \index{Summe!Zeichen}Summationszeichen werden meist Grenzen angegeben +\[\sum_{n=1}^m x_n\] +Die Grenzen werden in \index{Formel!abgesetzte} +abgesetzten Formeln \"uber und unter das +\index{Summe!Zeichen} +Summensymbol gesetzt. in Textformeln werden sie neben das Symbol +gesetzt: $\sum_{n=1}^m x_n$. Bei Integralen werden die +Integrationsgrenzen immer neben das Integrationszeichen gesetzt. + +\index{zzzinfty@{\tt\char92 infty}}\index{zzzint@{\tt\char92 int}} +\medskip\begin{tabular}{ll} +$\int_{-\infty}^{+\infty}$ & Im $T$-Stil\\ +$\displaystyle{\int_{-\infty}^{+\infty}}$ & Im $D$-Stil +\end{tabular}\medskip + +Mit \verb|\limits| und \verb|\nolimits| l\"\ss{}t sich das Setzen der Grenzen +aber auch ganz individuell gestalten.\index{zzzlimits@{\tt\char92 limits}} +\index{zzznolimits@{\tt\char92 nolimits}} +Die Eingabe von: +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +$\sum\limits_{n=1}^m x_n +\end{verbatim} +erzeugt in Textformeln: $\sum\limits_{n=1}^m x_n$ und die Eingabe von: +\index{zzzint@{\tt\char92 int}}\index{zzzlimits@{\tt\char92 limits}} +\begin{verbatim} +$$\int\limits_{-\infty}^{+\infty}$$ +\end{verbatim} +erzeugt: \[\int\limits_{-\infty}^{+\infty}\] +Andererseits ergibt +\index{zzznolimits@{\tt\char92 nolimits}} +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +$$\sum\nolimits_{n=1}^3 x_n$$ +\end{verbatim} +\[\sum\nolimits_{n=1}^3 x_n\] +Mit dem Befehl \index{Display!Limits} +\index{zzzdisplaylimits@{\tt\char92 displaylimits}} +`\verb|\displaylimits|' werden die Grenzen {\em jedes} +gro\ss{}en Symbols nur noch im $D$-Stil ober- resp.\ unterhalb des Symbols +gesetzt, sonst immer dahinter. +\subsubsection{Mehrzeilige Grenzen} +Bei \index{Mathematik} +Mathematikern kommt es auch vor, da\ss{} die Angabe der Grenzen sich +\"uber mehrere Zeilen erstreckt. Auch das ist in \TeX\ m\"oglich. Die +Formel:\index{zzzatop@{\tt\char92 atop}} +\[\sum_{\scriptstyle0\le i\le m\atop\scriptstyle0<j<n}P(i,j)\] +wurde z.B. mit der Befehlsfolge +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +$$\sum_{\scriptstyle0\le i\le m\atop\scriptstyle0<j<n}P(i,j)$$ +\end{verbatim} +erzeugt. +\subsection{Gr\"o\ss{}enanpassung von Symbolen} +Manche mathematischen Formeln sind ecklig lang. \TeX\ bietet daher +die M\"oglichkeit manche Symbole in ihrer Gr\"o\ss{}e anzupassen. Die Eingabe +von +\index{zzzsqrt@{\tt\char92 sqrt}} +\begin{verbatim} +$$\sqrt{1+\sqrt{1+\sqrt{1+ + \sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+x}}}}}}}$$ +\end{verbatim} +erzeugt z.B.: +$$\sqrt{1+\sqrt{1+\sqrt{1+ + \sqrt{1+\sqrt{1+\sqrt{1+\sqrt{1+x}}}}}}}$$ +Die drei gr\"o\ss{}ten Wurzelzeichen sind dabei untereinander identisch, bis +auf die Tatsache, da\ss{} der Aufstrich des Wurzelzeichens durch +unterschiedlich lange `\verb+|+' verl\"angert wurde. Die anderen Wurzeln +sind eigene Zeichen. Analog ist eine Gr\"o\ss{}enanpassung von +\index{Klammer!Groessenanpassung@Klammer!Gr\"o\ss{}enanpassung}Klammern +m\"oglich. +\index{zzzBiggl@{\tt\char92 Biggl}}\index{zzzbiggl@{\tt\char92 biggl}} +\index{zzzbiggr@{\tt\char92 biggr}}\index{zzzBigl@{\tt\char92 Bigl}} +\index{zzzbigl@{\tt\char92 bigl}}\index{zzzbigr@{\tt\char92 bigr}} +\[ +\displaystyle +\left(\vbox to 27pt{}\left(\vbox to 24pt{}\left(\vbox to 21pt{} +\Biggl(\biggl(\Bigl(\bigl(({\scriptstyle({\scriptscriptstyle(\hskip3pt +)})})\bigr)\Bigr)\biggr)\Biggr)\right)\right)\right) +\left\{\vbox to 27pt{}\left\{\vbox to 24pt{}\left\{\vbox to 21pt{} +\Biggl\{\biggl\{\Bigl\{\bigl\{\{{\scriptstyle\{{\scriptscriptstyle\{\hskip3pt +\}}\}}\}\bigr\}\Bigr\}\biggr\}\Biggr\}\right\}\right\}\right\} +\] +Klammern sind in Formeln sehr wichtig, deshalb bietet \TeX\ eine ganze +Reihe von ihnen an: + +\index{Klammer}\index{Doppelt!Strich}\index{Doppelt!Pfeil}\index{Pfeil} +\index{Gegenschraegstrich@Gegenschr\"agstrich}\index{Schraegstrich@Schr\"agstrich} +\index{zzzbackslash@{\tt\char92 backslash}} +\index{zzzdownarrow@{\tt\char92 downarrow}} +\index{zzzlangle@{\tt\char92 langle}}\index{zzzlceil@{\tt\char92 lceil}} +\index{zzzlfloor@{\tt\char92 lfloor}}\index{zzzrangle@{\tt\char92 rangle}} +\index{zzzrceil@{\tt\char92 rceil}}\index{zzzrfloor@{\tt\char92 rfloor}} +\index{zzzuparrow@{\tt\char92 uparrow}} +\index{zzzupdownarrow@{\tt\char92 updownarrow}} +\medskip\begin{tabular}{lll} +{\em Eingabe} & {\em Bedeutung} & {\em Ausgabe}\\ +{\tt (} & linke Klammer & $($ \\ +{\tt )} & rechte Klammer & $)$\\ +{\tt\char91\ oder \char92 lbrack} & linke eckige Klammer & $[$\\ +{\tt\char93\ oder \char92 rbrack} & rechte eckige Klammer & $]$\\ +{\tt\char92\char123\ oder \char92 lbrace} & linke geschweifte Klammer & $\{$\\ +{\tt\char92\char125\ oder \char92 rbrace} & rechte geschweifte Klammer & $\}$\\ +{\tt\char92 lfloor} & linke Bodenklammer & $\lfloor$\\ +{\tt\char92 rfloor} & rechte Bodenklammer & $\rfloor$\\ +{\tt\char92 lceil} & linke Deckenklammer & $\lceil$\\ +{\tt\char92 rceil} & rechte Deckenklammer & $\rceil$\\ +{\tt\char92 langle} & linke einfach eckige Klammer & $\langle$\\ +{\tt\char92 rangle} & rechte einfach eckige Klammer & $\rangle$\\ +{\tt /} & Schr\"agstrich & $/$\\ +{\tt\char92 backslash} & Gegenschr\"agstrich & $\backslash$\\ +{\tt\char124\ oder \char92 vert} & Gerader Strich & $|$\\ +{\tt\char92\char124\ oder \char92 Vert} & Doppelter gerader Strich & $\|$\\ +{\tt\char92 uparrow} & Pfeil nach oben & $\uparrow$\\ +{\tt\char92 downarrow} & Pfeil nach unten & $\downarrow$\\ +{\tt\char92 Uparrow} & Doppelpfeil nach oben & $\Uparrow$\\ +{\tt\char92 Downarrow} & Doppelpfeil nach unten & $\Downarrow$\\ +{\tt\char92 updownarrow} & Pfeil nach oben und unten & $\updownarrow$\\ +{\tt\char92 Updownarrow} & Doppelpfeil nach oben und unten & $\Updownarrow$ +\end{tabular}\medskip + +Um eine gr\"o\ss{}ere Fassung der gezeigten Symbole zu erreichen mu\ss{} ihnen +nur der Befehl \index{zzzbig@{\tt\char92 big}}\index{zzzbigl@{\tt\char92 bigl}} +`\verb|\bigl|' (f\"ur linke Klammersymbole) bzw.\ +\index{zzzbigr@{\tt\char92 bigr}} +`\verb|\bigr|' (f\"ur rechte) vorangestellt werden. Die Eingabe von +\begin{verbatim} +$\bigl(x-s(x)\bigr)\bigl(y-s(y)\bigr)$ +\end{verbatim} +erzeugt: $\bigl(x-s(x)\bigr)\bigl(y-s(y)\bigr)$, die Eingabe von +\index{zzzlfloor@{\tt\char92 lfloor}}\index{zzzrfloor@{\tt\char92 rfloor}} +\index{zzzsqrt@{\tt\char92 sqrt}} +\begin{verbatim} +$\bigl\lfloor\sqrt A\bigr\rfloor$ +\end{verbatim} +erzeugt: $\bigl\lfloor\sqrt A\bigr\rfloor$. + +Sehen wir uns doch einmal die verschiedenen Symbol im Vergleich an: +Zun\"achst die normalen mit den \index{zzzbig@{\tt\char92 big}} +ge`\verb|\big|'ten: +\index{zzzbackslash@{\tt\char92 backslash}} +\index{zzzbigl@{\tt\char92 bigl}} +\index{zzzbigm@{\tt\char92 bigm}} +\index{zzzdownarrow@{\tt\char92 downarrow}} +\index{zzzlangle@{\tt\char92 langle}} +\index{zzzlceil@{\tt\char92 lceil}} +\index{zzzlfloor@{\tt\char92 lfloor}} +\index{zzzrangle@{\tt\char92 rangle}} +\index{zzzrceil@{\tt\char92 rceil}} +\index{zzzrfloor@{\tt\char92 rfloor}} +\index{zzzVert@{\tt\char92 Vert}} +\[\begin{array}{l} +(\,)\,[\,]\,\{\,\}\,\lfloor\,\rfloor\,\lceil\,\rceil\,\langle\,\rangle +\,/\,\backslash\,\vert\,\Vert\,\uparrow\,\Uparrow\,\downarrow\,\Downarrow +\,\updownarrow\,\Updownarrow\\ +\bigl(\,\bigr)\,\bigl[\,\bigr]\,\bigl\{\,\bigr\}\,\bigl\lfloor +\,\bigr\rfloor\,\bigl\lceil\,\bigr\rceil\,\bigl\langle\,\bigr\rangle +\,\big/\,\big\backslash\,\big\vert\,\big\Vert\,\bigm\uparrow\,\bigm\Uparrow +\,\bigm\downarrow\,\bigm\Downarrow\,\bigm\updownarrow\,\bigm\Updownarrow +\end{array}\] +Jetzt k\"onnen sie auch noch `\verb|\Big|'x sagen (das `x' steht f\"ur `l' +oder `r'):\index{zzzBigl@{\tt\char92 Bigl}} +\[\Bigl(\,\Bigr)\,\Bigl[\,\Bigr]\,\Bigl\{\,\Bigr\}\,\Bigl\lfloor +\,\Bigr\rfloor\,\Bigl\lceil\,\Bigr\rceil\,\Bigl\langle\,\Bigr\rangle +\,\Big/\,\Big\backslash\,\Big\vert\,\Big\Vert\,\Bigm\uparrow\,\Bigm\Uparrow +\,\Bigm\downarrow\,\Bigm\Downarrow\,\Bigm\updownarrow\,\Bigm\Updownarrow\] +Wenn ihnen das noch nicht gen\"ugt, gibt es die Befehle +\index{zzzbigg@{\tt\char92 bigg}} +\index{zzzbiggl@{\tt\char92 biggl}} +\index{zzzbiggm@{\tt\char92 biggm}} +\index{zzzbiggr@{\tt\char92 biggr}} +`\verb|\bigg|'x +\[\biggl(\,\biggr)\,\biggl[\,\biggr]\,\biggl\{\,\biggr\}\,\biggl\lfloor +\,\biggr\rfloor\,\biggl\lceil\,\biggr\rceil\,\biggl\langle\,\biggr\rangle +\,\bigg/\,\bigg\backslash\,\bigg\vert\,\bigg\Vert\,\biggm\uparrow +\,\biggm\Uparrow\,\biggm\downarrow\,\biggm\Downarrow\,\biggm\updownarrow +\,\biggm\Updownarrow\] +Und zu guter Letzt noch `\verb|\Bigg|'x +\index{zzzBiggl@{\tt\char92 Biggl}} +\index{zzzBiggm@{\tt\char92 Biggm}} +\[\Biggl(\,\Biggr)\,\Biggl[\,\Biggr]\,\Biggl\{\,\Biggr\}\,\Biggl\lfloor +\,\Biggr\rfloor\,\Biggl\lceil\,\Biggr\rceil\,\Biggl\langle\,\Biggr\rangle +\,\Bigg/\,\Bigg\backslash\,\Bigg\vert\,\Bigg\Vert\,\Biggm\uparrow +\,\Biggm\Uparrow\,\Biggm\downarrow\,\Biggm\Downarrow\,\Biggm\updownarrow +\,\Biggm\Updownarrow\] +Neben den `l' und `r' Formen dieser Befehle bietet \TeX\ auch noch +eine `m' Variante an, also z.B.\ \index{zzzbigm@{\tt\char92 bigm}} +`\verb|\bigm|' oder `\verb|\Biggm|'. +Bei dieser Befehlsform wird das entsprechend folgende Symbol nicht wie +eine Klammer, \"offnend oder schlie\ss{}end, gesetzt, sondern wie eine +\index{Relation} +Relation. Welches Ergebnis am besten aussieht h\"angt vom Einzelfall ab. +Als Beispiel diene hier die Eingabe von +\index{zzzbigl@{\tt\char92 bigl}} +\index{zzzbigm@{\tt\char92 bigm}} +\index{zzzbigr@{\tt\char92 bigr}} +\begin{verbatim} +$$\bigl(x\in A(n)\bigm|\||x\in B(n)\bigr)$$ +\end{verbatim} +was +\[\bigl(x\in A(n)\bigm|\||x\in B(n)\bigr)\] +erzeugt. Au\ss{}erdem gibt es noch die M\"oglichkeit die Befehl {\em ohne} +Links-, oder Rechtsangabe zu benutzen. Dann wird das Symbol wie eine +normale Variable gesetzt. Dies empfiehlt sich meist nur beim Schr\"ag- +oder \index{Gegenschraegstrich@Gegenschr\"agstrich}Gegenschr\"agstrich. +\index{zzzover@{\tt\char92 over}} +\begin{verbatim} +$${a+1\over b}\bigg/{c+1\over d}$$ +\end{verbatim} +ergibt +$${a+1\over b}\bigg/{c+1\over d}$$ +\subsubsection{Die Rechts-Links-Befehle} +\TeX\ bietet noch eine einfache M\"oglichkeit die +\index{Klammer!Groessenanpassung@Klammer!Gr\"o\ss{}enanpassung} +Klammersymbole der +Gr\"o\ss{}e der Formel anzupassen. Die Befehl \index{zzzleft@{\tt\char92 left}} +`\verb|\left|' und\index{zzzrightarrow@{\tt\char92 rightarrow}} +`\verb|\right|' gefolgt von einem Klammersymbol sorgen selbst\"andig f\"ur +die richtige Gr\"o\ss{}e des Klammersymbols. Die Eingabe von +\index{zzzleft@{\tt\char92 left}} +\begin{verbatim} +$$1+\left(1\over1-x^2\right)^3$$ +\end{verbatim} +ergibt in der \index{Ausgabe}Ausgabe +$$1+\left(1\over1-x^2\right)^3$$ +In einer einfachen Formel, wie \index{zzzleft@{\tt\char92 left}} +`\verb|$\left(x\right)$|', werden nur +die einfachen Klammersymbole gew\"ahlt und die Ausgabe ist +$\left(x\right)$. Die Befehle `\verb|\left|' und `\verb|\right|' +m\"ussen immer in einer Gruppe stehen. Konstruktionen wie +\begin{verbatim} +$$\left( ... { ... \right) ... }$$ +\end{verbatim} +sind nicht erlaubt. Die Befehle stellen allerdings {\em ihrerseits} +selber eine Gruppierung dar, wie das obige Beispiel zeigt. Das `$1+$' +wird nicht in den \index{Bruch} +Bruch einbezogen. Daraus folgt auch, da\ss{} immer zu +jedem `\verb|\left|'-Befehl ein entsprechender `\verb|\right|'-Befehl +geschrieben werden mu\ss{}. Die Klammersymbole m\"ussen allerdings nicht +zueinander passen, wie das folgende Beispiel zeigt. +\index{zzzatop@{\tt\char92 atop}}\index{zzzleft@{\tt\char92 left}} +\begin{verbatim} +$$\left(1+n\atop 1-n\right[$$ +\end{verbatim} +ist erlaubt und ergibt +$$\left(1+n\atop 1-n\right[$$ +Jetzt fragt man sich, wieso man \"uberhaupt noch die Einzelbefehle f\"ur +die Gr\"o\ss{}e der Klammersymbole benutzen soll, wenn doch \TeX\ das so +sch\"on selber kann. Nun, es k\"onnen drei Situationen auftreten, wo die +Links-Rechts-Befehle eben doch nicht so hundertprozentig +passen.\index{Klammer!Groessenwahl, manuell@Klammer!Gr\"o\ss{}enwahl, +manuell}\index{Eingabe!Groesse@Eingabe!Gr\"o\ss{}e} +\begin{enumerate} +\item Manchmal w\"ahlt \TeX\ eine Klammer, die f\"ur diese Situation zu +klein ist. Wenn man z.B. +\index{zzzleft@{\tt\char92 left}}\index{zzzrightarrow@{\tt\char92 rightarrow}} +\begin{verbatim} +$\left|\left|x\right|+\left|y\right|\right|$ +\end{verbatim} +eingibt, dann ist das Ergebnis +$\left|\left|x\right|+\left|y\right|\right|$, obwohl man durch +explizite Eingabe der Gr\"o\ss{}en, das wesentlich bessere Ergebnis +\index{zzzbigl@{\tt\char92 bigl}}\index{zzzbigr@{\tt\char92 bigr}} +$\bigl|\left|x\right|+\left|y\right|\bigr|$ bevorzugen w\"urde. +\item Andererseits kann es aber auch vorkommen, da\ss{} \TeX\ zu gro\ss{}e +Symbole aussucht. Dies passiert z.B.\ bei gro\ss{}en Symbolen. Vergleichen +sie einmal +\index{zzzleft@{\tt\char92 left}} +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +$$\left(\sum_{k=1}^n A_k\right)$$ +\end{verbatim} +mit\index{zzzbiggl@{\tt\char92 biggl}}\index{zzzbiggr@{\tt\char92 biggr}} +\begin{verbatim} +$$\biggl(\sum_{k=1}^n A_k\biggr)$$ +\end{verbatim} +Und nun die Ausgabe +$$\left(\sum_{k=1}^n A_k\right)\qquad\biggl(\sum_{k=1}^n A_k\biggr)$$ +\item Schlie\ss{}lich kann es vorkommen, da\ss{} sie eine Formel \"uber mehr als +eine Zeile schreiben m\"ussen. Sie werden dann Probleme bekommen die +zusammengeh\"origen Befehle innerhalb einer Gruppe zu realisieren. Auch +in diesem Fall m\"ussen sie die Gr\"o\ss{}enanpassung selber vornehmen. +\end{enumerate}\index{Ausgabe} +Es gibt \"ubrigens f\"ur die Links-Rechts-Befehle auch eine +\index{Leer!Klammer}{\em leere} +\index{Klammer!Leere}Klammer, die bei Anwendungen, wie +$$|x|=\left\{\begin{array}{ll} +x & \mbox{f\"ur\quad}x\ge0\\ +-x & \mbox{f\"ur\quad}x<0\end{array}\right.$$ +n\"otig ist. Zu jedem `\verb|\left|'-Befehl mu\ss{} ja auch der passende +\index{zzzrightarrow@{\tt\char92 rightarrow}} +`\verb|\right|'-Befehl geschrieben werden. Man gibt hier bei dem +`\verb|\right|'-Befehl statt eines Klammersymbols einen \index{Punkt} +Punkt an. Im +obigen Beispiel stand am Ende einfach +\begin{verbatim} +...x<0\right.$$ +\end{verbatim} +Manchen sie sich keine Sorgen \"uber die zweizeilige Formel, wie so +etwas geht wird auch noch besprochen. Die {\em leere} Klammer ist +\"ubrigens nicht leer, statt dessen wird von \TeX\ noch der +\index{Zwischenraum} +Zwischenraum, der in der Variablen \index{Delimiterspace} +\index{zzznulldelimiterspace@{\tt\char92 nulldelimiterspace}} +`\verb|\nulldelimiterspace|' steht, +eingef\"ugt (Voreingestellt ist 1.2pt). +\subsubsection{Teilklammern}\index{Klammer!Teilklammern} +Weiter oben wurden einige Symbole gezeigt, die aus Teilzeichen +zusammengesetzt waren. Diese Teilzeichen kann man nat\"urlich auch +einzeln verwenden. Mit den Befehlen +\index{zzzarrowvert@{\tt\char92 arrowvert}} +\index{zzzbracevert@{\tt\char92 bracevert}} +\begin{verbatim} +\arrowvert +\Arrowvert +\bracevert +\end{verbatim} +werden einfache, bzw. \index{Doppelt!Strich} +doppelte senkrechte Striche gezogen, mit den +Befehlen +\index{zzzlgroup@{\tt\char92 lgroup}} +\index{zzzlmoustache@{\tt\char92 lmoustache}} +\index{zzzrgroup@{\tt\char92 rgroup}} +\index{zzzrmoustache@{\tt\char92 rmoustache}} +\begin{verbatim} +\lgroup +\rgroup +\lmoustache +\rmoustache +\end{verbatim} +werden Teile der geschweiften Klammer benutzt. Die Klammern sehen +folgenderma\ss{}en aus +\index{zzzarrowvert@{\tt\char92 arrowvert}} +\index{zzzbracevert@{\tt\char92 bracevert}} +\index{zzzlgroup@{\tt\char92 lgroup}} +$$\Big\arrowvert\ldots\Big\Arrowvert\ldots\Big\bracevert +\ldots\Big\lgroup\ldots\Big\rgroup\ldots\Big\lmoustache +\ldots\Big\rmoustache$$ +Diese Klammern sind nur als ziemlich gro\ss{}e Symbole (gr\"o\ss{}er als Big) +verf\"ugbar. + +Mitunter m\"ochten sie selber irgendwelche Symbole definieren, und in +unterschiedlichen Situationen benutzen. Daf\"ur bietet \TeX\ den Befehl +\index{zzzmathchoice@{\tt\char92 mathchoice}} +\begin{verbatim} +\mathchoice{<Teil>}{<Teil>}{<Teil>}{<Teil>} +\end{verbatim} +Die `\verb|<Teil>|'e sind dabei Teilformeln, die folgenderma\ss{}en +benutzt werden: Die erste Teilformel wird benutzt wenn der Stil $D$ +oder $D'$ \index{Aktiv!Stil} +aktiv ist, die zweite, wenn der Stil $T$ oder $T'$ aktiv +ist, wie es weitergeht k\"onnen sie sich denken. Beachten sie im Anhang +auch den Befehle \index{zzzmathpalette@{\tt\char92 mathpalette}} +`\verb|\mathpalette|', der in diesem Zusammenhang +interessant ist. +\subsection{Die Achse einer Formel}\index{Achse einer Formel} +Wenn sie sich einmal eine Formel mit Klammern genau ansehen, dann +werden sie feststellen, da\ss{} die Klammern bez\"uglich einer unsichtbaren +\index{Achse!einer Formel} +Achse \index{Zentrierung} +zentriert sind. Diese Achse hei\ss{}t `Achse der Formel' und liegt +bei Textformeln so: $\hskip 2em\over$. Z.B.\ jeder \index{Bruch} +Bruchstrich liegt +auf dieser Achse. Mitunter ist es notwendig eine vertikale +\index{Box!Vcenter}Box auf +dieser Achse zu \index{Zentrierung} +zentrieren.\footnote{Bei dem $|x|=\{\ldots$ Beispiel +von eben war das z.B.\ n\"otig} \TeX\ bietet nat\"urlich auch hierf\"ur +einfache Befehle. Geben sie einfach +\index{zzzvcenter@{\tt\char92 vcenter}} +\begin{verbatim} +\vcenter{<vertikales Material>} +\end{verbatim} +ein. Das vertikale Material schreiben sie so, als handele es sich um +eine \index{zzzvbox@{\tt\char92 vbox}} +\verb|\vbox|. Den Rest erledigt \TeX. Auch solche Konstruktionen +wie `\verb|\vcenter to...|' oder `\verb|\vcenter spread...|' sind +m\"oglich. \"Ubrigens, auch alle anderen \index{Box!Konstruktion}Boxkonstruktionen, inklusive +\index{zzzraise@{\tt\char92 raise}} +`\verb|\raise|' oder \index{zzzlower@{\tt\char92 lower}} +`\verb|\lower|' sind im mathematischen Modus +m\"oglich und erlaubt. +\section{Die Interna} +Dieser Abschnitt ist zum eigentlichen Verst\"andnis von \TeX\ im +mathematischen Modus nicht notwendig, er besch\"aftigt sich mit den +Interna der Zeichenauswahl in mathematischen Formeln. +\subsection{Familien} +Jedes Zeichen, das im mathematischen Modus ausgegeben wird, geh\"ort zu +einer von sechzehn Familien, die ihrerseits aus drei Zeichens\"atzen +bestehen. Mit den Befehlen \index{Font!Wahl} +\index{zzztextfont@{\tt\char92 textfont}}`\verb|\textfont|', +\index{zzzscriptfont@{\tt\char92 scriptfont}}`\verb|\scriptfont|' +und `\verb|scriptscriptfont|' w\"ahlen dabei jeweils eine dieser +Zeichens\"atze. Die Familie 0 wird in {\em Plain} \TeX\ f\"ur die +\index{Roman}Roman +Zeichens\"atze verwendet und die \index{Zuweisung}Zuweisungen lauten +\begin{verbatim} +\textfont0=\tenrm +\scriptfont0=\sevenrm +\scriptscriptfont0=\fiverm +\end{verbatim} +Wird kein Zeichensatz angegeben, verwendet \TeX\ +\index{Font!Null}\index{zzznullfont@{\tt\char92 nullfont}} +`\verb|\nullfont|'.\footnote{Haben sie sich nicht schon gefragt, wof\"ur +dieser Zeichensatz ben\"otigt wird?} Die \index{Schrift!Familie} +Schriftfamilie wird erst {\em +nach} Abarbeitung der Formel ausgewertet. Angenommen, sie haben auf +ihrem Rechner eine \index{Helevetica}\index{Schrift!Helevetica} +Heleveticaschrift zur Verf\"ugung, dann erhalten sie +nach der Anweisung +\index{zzzhelevetica@{\tt\char92 helevetica}} +\index{zzztextfont@{\tt\char92 textfont}} +\begin{verbatim} +$\textfont0=\tenrm 9 \textfont0=\helevetica 9$ +\end{verbatim} +zwei Neuen in der Schriftart Helevetica, da diese Anweisung am Ende +der Formel g\"ultig ist. Anders sieht es aus, wenn sie +\index{zzzhelevetica@{\tt\char92 helevetica}} +\index{zzztextfont@{\tt\char92 textfont}} +\begin{verbatim} +$\textfont0=\tenrm 9\hbox{$9\textfont0=\helevetica$}$ +\end{verbatim} +eingeben, dann erhalten sie die erste Neun in `tenrm' und die zweite +in `helevetica'. +\subsection{Zeichenklassen} +Zu jedem mathematischen Zeichen gibt es einen Code zwischen $0$ und +$4096$, der sich aus der Positionsnummer innerhalb des Zeichensatzes +plus dem $256$fachen der \index{Familie!Nummer} +Familiennummer ergibt. Am einfachsten wird +das \index{Hexadezimal}hexadezimal notiert. Die Kodierung `\verb|24A|' bedeutet, da\ss{} es +sich um das {\tt 2A}te Zeichen in der Familie {\tt 2} handelt. Au\ss{}er +der Familienzugeh\"origkeit und der Position innerhalb eines +Zeichensatzes gibt es aber auch noch eine Klassifizierung der Zeichen. + +\index{Interpunktion}\index{Schliesser@Schlie\ss{}er} +\medskip\begin{tabular}{lll} +{\em Klasse} & {\em Bedeutung} & {\em Beispiel} \\ +0 & Normal & $/$\\ +1 & Gro\ss{}es Symbol & $\sum$\\ +2 & Bin\"arer Operator & $+$\\ +3 & Relation & $=$\\ +4 & `\"Offner' & $($\\ +5 & `Schlie\ss{}er' & $)$\\ +6 & Interpunktion & $,$\\ +7 & Variable Familie & $x$ +\end{tabular}\medskip + +Die Klassen $0$ bis $6$ besagen, welchem Sprachteil das Zeichen +zugeh\"ort, die Klasse $7$ wird sofort besprochen. Die Klassenkodierung +wird mit $4096$ multipliziert der Zeichenkodierung zuaddiert, so da\ss{} +sich eine vierstellige \index{Hexadezimal}hexadezimale Zahl ergibt. {\tt 1350} bedeutet: +Klasse {\tt 1} (Gro\ss{}es Symbol), in der \index{Familie} +Familie {\tt 3}, und dort das +Zeichen {\tt 50} (Alle Zahlangeben hexadezimal). + +Die Klasse $7$ erlaubt es Zeichen in verschiedenen Familien +aufzutauchen. Normalerweise verhalten sich Zeichen der Klasse $7$ wie +die der Klasse $0$, es sein denn die \index{Integer!Variable} +Integervariable \index{zzzfam@{\tt\char92 fam}}`\verb|\fam|' hat +einen g\"ultigen Familienwert ($0\ldots15$). Normalerweise wird der Wert +auf $-1$ gesetzt, kann aber ge\"andert werden. {\em Plain} \TeX\ benutzt diese +M\"oglichkeit f\"ur den Befehl \index{zzzrm@{\tt\char92 rm}} +`\verb|\rm|'. Er ist eine +\index{Abkuerzung@Abk\"urzung} +Abk\"urzung f\"ur die +Befehle `\verb|\fam=0|' und `\verb|\tenrm|'. Die Familie aller Zeichen +(haben normalerweise die Klasse $7$) wird also $0$ und die +\index{Schrift!Familie}Schrift +{\tt tenrm} wird als voreingestellte \index{Schrift!Voreingestellt} +Schrift verwendet. Mit diesem +Befehl ist es dann m\"oglich innerhalb mathematischer Formeln normalen +Text zu setzen. +\subsection{Mathcode} +Von einer Tabelle mit $256$ ``mathcode''-Werten h\"angt die Interpretation +der Zeichen im mathematischen Modus ab. Der zu einem Zeichen geh\"orige Wert kann +mit dem Befehl \index{zzzmathcode@{\tt\char92 mathcode}} +`\verb|\mathcode|' ge\"andert werden.\footnote{Entspricht +soweit dem Befehl {\tt\char92 catcode}, der schon behandelt wurde.} +Der Befehl +\begin{verbatim} +\mathcode`<=\"313C +\end{verbatim} +bedeutet, da\ss{} dem Zeichen `\verb|<|' der Code `\verb|313C|' zukommt, +also $3$te \index{Klasse!Zeichencode} +Klasse in der $1$ten Familie und dort Zeichen Nummer +`\verb|3C|'. Der Buchstabe `b' wird z.B.\ mit `\verb|7162|' kodiert. +Es gibt noch den `mathcode' `\verb|8000|', der zur Folge hat, da\ss{} das +Zeichen wie ein \index{Aktiv!Zeichen} +aktives Zeichen (catcode=13) behandelt wird. + +Analog zu dem Befehl `\verb|\char|' gibt es auch einen Befehl um jedes +mathematische Zeichen ansprechen zu k\"onnen, und der hei\ss{}t, wie nicht +anders zu erwarten war, \index{zzzmathchar@{\tt\char92 mathchar}} +`\verb|\mathchar|'. Die \index{Definition} +Definition des +\index{Summe!Zeichen}Summenzeichens w\"are also m\"oglich mit der Befehlsfolge +\index{zzzdef@{\tt\char92 def}} +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +\def\sum=\mathchar\"1350 +\end{verbatim} +(Klasse 1, gro\ss{}es Symbol; Familie 3, Zeichen 50) Aber es gibt auch +noch eine bessere M\"oglichkeit, denn genau, wie es den Befehl +\index{zzzchardef@{\tt\char92 chardef}} +`\verb|\chardef|' gibt, gibt es auch den Befehl +\index{zzzmathchardef@{\tt\char92 mathchardef}}`\verb|\mathchardef|' +und damit reduziert sich die Aufgabe zu +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +\mathchardef\sum=\"1350 +\end{verbatim} + +\TeX\ kann auch einer ganzen Teilformel eine \index{Klasse!Einer +Teilformel}Klasse zukommen lassen. +Dazu dienen die Befehle +\index{zzzmathbin@{\tt\char92 mathbin}}\index{zzzmathclose@{\tt\char92 mathclose}} +\index{zzzmathop@{\tt\char92 mathop}}\index{zzzmathopen@{\tt\char92 mathopen}} +\index{zzzmathord@{\tt\char92 mathord}}\index{zzzmathpunkt@{\tt\char92 mathpunkt}} +\index{zzzmathrel@{\tt\char92 mathrel}} +\begin{verbatim} +\mathord +\mathop +\mathbin +\mathrel +\mathopen +\mathclose +\mathpunkt +\end{verbatim} +Sie beziehen sich immer auf das Zeichen, oder die gruppierte +Teilformel, die dahinter steht. Die Anweisung +\begin{verbatim} +$G\mathbin:H$ +\end{verbatim} +sorgt daf\"ur, da\ss{} der \index{Doppelt!Punkt} +Doppelpunkt wie ein Zeichen eines bin\"aren +\index{Operator!Binaer@Operator!Bin\"ar} +Operators verwendet wird. Der Befehl `\verb|\mathord|' ist eigentlich +\"uberfl\"u\ss{}ig, da alles in \index{Klammer!In Formel}Klammern wie ein normales Symbol verwendet +wird. Die beiden folgenden Anweisungen sind also gleichwertig +\index{zzzmathord@{\tt\char92 mathord}} +\begin{verbatim} +$1\mathord,2345$ +$1{,}2345$ +\end{verbatim} +Es gibt noch eine achte Klassifizierung: \index{zzzmathinner@{\tt\char92 mathinner}} +`\verb|\mathinner|', die f\"ur +spezielle Zwecke gebraucht wird. \index{Bruch}Br\"uche und +Rechts-Links-Konstruktionen werden als {\em inner} bezeichnet, und mit +etwas zus\"atzlichem \index{Leer!Raum} +Leerraum umgeben. Normalerweise werden Teilformeln +als normales Symbol angesehen. +\subsection{Delcode}\index{Klammer!Code} +Klammern werden noch weiter spezifiziert, sie haben neben dem {\tt +catcode} und dem {\tt mathcode} auch noch einen sechstelligen, +\index{Hexadezimal}hexadezimalen {\tt delcode}.\footnote{Vom englischen \index{Delimiter} +{\em Delimiter}.} +Die ersten drei \index{Ziffer} +Ziffern geben dabei das {\em kleine}, die zweiten drei +Ziffern das {\em gro\ss{}e} Symbol an. Die Anweisung +\index{zzzdelcode@{\tt\char92 delcode}} +\begin{verbatim} +\delcode`(=\"028300 \delcode`.=0 +\end{verbatim} +besagt, da\ss{} f\"ur die \"offnende Klammer als kleines Symbol das {\tt 28}te +Zeichen aus der \index{Familie} +Familie {\tt0} in Frage kommt, und die gro\ss{}e Variante +in Familie {\tt3} an der Position {\tt0} zu finden ist. Im Falle des +\index{Punkt} +Punktes wird keine gro\ss{}e und keine kleine Variante angegeben, so da\ss{} +es auch zu keiner \index{Ausgabe} +Ausgabe kommt.\footnote{Erinnern sie sich an die +Bedeutung des Punktes in Zusammenhang mit Klammern?} Eine Klammer kann +auch direkt mit dem Befehle \index{Delimiter!Befehl} +\index{zzzdelimiter@{\tt\char92 delimiter}} +`\verb|\delimiter|' angegeben werden. Der +zugeh\"orige Zahlwert mu\ss{} nur kleiner als `\verb|\"7FFFFFF|' sein. Die +Angabe enth\"alt sofort auch die \index{Klasse!Angabe}Klassenangabe. +\index{zzzdef@{\tt\char92 def}}\index{zzzdelimiter@{\tt\char92 delimiter}} +\begin{verbatim} +\def\langle{\delimiter\"426830A} +\end{verbatim} +Bedeutet, da\ss{} \index{zzzlangle@{\tt\char92 langle}} +`\verb|\langle|' ein \"offnendes Symbol ist, dessen kleine +Variante bei `\verb|268|' zu finden ist, und die gro\ss{}e Variante bei +`\verb|30A|'. Tritt der `\verb|\delimiter|' Befehl nach einem +\index{zzzleft@{\tt\char92 left}}\index{zzzrightarrow@{\tt\char92 rightarrow}} +`\verb|\left|' oder einem `\verb|\right|' Befehl auf, dann wird die +Klassenangabe ignoriert, in anderem Kontext werden die letzten drei +Stellen gestrichen und die ersten vier \index{Ziffer}Ziffern wie bei einer +\index{zzzmathchar@{\tt\char92 mathchar}} +`\verb|\mathchar|' Angabe verwendet. Die folgenden Angaben sind also +\"aquivalent +\index{zzzlangle@{\tt\char92 langle}} +\begin{verbatim} +$\langle x$ +$\mathchar\"4268 x$ +\end{verbatim} +\subsubsection{Andere \"ahnliche Befehle} +Wie auch der `\verb|\delimiter|' Befehl arbeiten die Befehle +\index{zzzradical@{\tt\char92 radical}} +`\verb|\radical|' und \index{zzzmathaccent@{\tt\char92 mathaccent}} +`\verb|\mathaccent|', die dazu dienen +Wurzelzeichen, bzw.\ mathematische \index{Akzent!mathematische} +Akzente zu definieren. Die +Kodierung ist auch hier wieder dieselbe, wie schon in den vorherigen +Beispielen. +\subsection{Familienzugeh\"origkeit nach {\em Plain} \TeX} +{\em Plain} \TeX\ setzt die \index{Familie!Plain TeX@Familie!{\it +Plain} \TeX}Familien normalerweise wie folgt: Familie $1$ +f\"ur die \index{Schrift!Italic}\index{Italic} +Italic-Schriften, Familie $2$ f\"ur normale mathematische +Symbole, Familie $3$ f\"ur gro\ss{}e Symbole. Die Familien $2$ und $3$ sind +meist mit den Zeichens\"atzen `\verb|cmsy|' und `\verb|cmex|' verbunden, +die noch weitere Informationen zum Satz beinhalten. +\subsection{Elemente einer mathematischen Liste} +Sie k\"onnen sich vermutlich schon denken, da\ss{} auch mathematische Formeln +von \TeX\ zun\"achst wie eine lange Liste von Elementen angesehen wird, +wie es auch schon bei der \index{Horizontal!Liste} +horizontalen und der vertikalen Liste der +Fall war. In einer mathematischen Liste k\"onnen nun folgende Elemente +auftreten.\index{Bruch}\index{Display!Stil} +\begin{enumerate} +\item Ein Atom (Siehe unten) +\item Horizontales Material (Ein Strich, eine Trennung, eine Strafe +oder ein ``WasDenn'') +\item Vertikales Material +\item Etwas \index{Leim}Leim +\item Ein Kern +\item Ein \index{Stil!Wechsel} +Stilwechsel (von den Befehlen {\tt\char92 displaystyle} o.\"a.) +\item Ein Bruch o.\"a. +\item Ein B\"undel (meist eine Teilformel, die z.B. in Klammern gesetzt +ist) +\item Eine Mathe-Auswahl von {\tt\char92 mathchoise} +\end{enumerate}\index{Atom} +\subsection{Atome} +Das wichtigste Element in einer mathematischen Liste ist das sog.\ +Atom. Es besteht aus einem {\em K\"orper}, einer \index{Hochstellung} +{\em Hochstellung} und +einer {\em Tiefstellung}. Wenn sie z.B.\ eingeben +\index{zzzoverline@{\tt\char92 overline}} +\begin{verbatim} +(x_i+y)^{\overline{n+1}} +\end{verbatim} +dann erhalten sie eine Folge von f\"unf Atomen: $($, $x_i$, $+$, $y$ und +$)^{\overline{n+1}}$. Die K\"orper dieser Atome sind: $($, $x$, $+$, $y$ +und $)$, ihre \index{Hochstellung}Hochstellungen sind leer, bis auf die +Hochstellung des +letzten Atoms, die aus $\overline{n+1}$ besteht, ihre Tiefstellungen +sind auch leer, bis auf die des zweiten Atoms, welche aus $i$ besteht. +Es gibt verschiedene Atomtypen. + +\index{Box!Vbox}\index{Interpunktion!Atom}\index{Punct} +\index{zzzhat@{\tt\char92 hat}}\index{zzzoverline@{\tt\char92 overline}} +\medskip\begin{tabular}{ll} +Ord & Ein einfaches Atom wie $x$\\ +Op & Ein gro\ss{}es Atom wie $\sum$\\ +Bin & Ein bin\"ares Atom wie $+$\\ +Rel & Eine Relation wie $=$\\ +Open & Ein \"offnendes Atom wie $($\\ +Close & Ein schlie\ss{}endes Atom wie $)$\\ +Punct & Ein Interpunktionsatom wie $,$\\ +Inner & Ein inneres Atom wie $\frac{1}{2}$\\ +Over & Eine \"uberstrichenes Atom wie $\overline{x}$\\ +Under & Ein unterstrichenes Atom wie $\underline{x}$\\ +Acc & Ein Akzentatom wie $\hat a$\\ +Rad & Ein Wurzelatom wie $\sqrt{2}$\\ +Vcent & Eine vertikale Box, von {\tt\char92 vcenter} +\end{tabular}\medskip\index{Atom!Typen} + +Der K\"orper, die \index{Hochstellung} +Hochstellung und die Tiefstellung eines Atoms hei\ss{}en +{\em Felder}. F\"ur diese Felder gibt es vier M\"oglichkeiten, ein Feld +enth\"alt\index{Box} +\begin{enumerate} +\item nichts +\item ein mathematisches Symbol +\item eine Box +\item eine mathematische Liste +\end{enumerate} +Den genauen Aufbau dieser Atome k\"onnen sie sich mit +\index{zzzshowlists@{\tt\char92 showlists}}`\verb|\showlists|' +ansehen. Manche Atome haben \"ubrigens weitere Informationen, so sind +z.B.\ alle `Op' Atome mit der zus\"atzlichen Information \"uber +\index{zzzlimits@{\tt\char92 limits}}\index{zzznolimits@{\tt\char92 nolimits}} +`\verb|\limits|' oder `\verb|\nolimits|' versehen. +\section{Sch\"one Aussichten} +Es sind nun schon fast alle M\"oglichkeiten von \TeX\ besprochen, eine +Formel zu setzen, wenn man allerdings mit der Zeit etwas \"Ubung darin +bekommen hat, zu erkennen, wie eine Formel aussieht, wenn man sie +schreibt, dann kommt der Wunsch auf Formeln nicht nur einfach zu +setzen, sondern ihr Aussehen noch positiv zu beeinflu\ss{}en. Hier nun +einige Regeln daf\"ur. +\subsection{Interpunktion} +Punkt und \index{Komma}Kommata sollten in Textformeln nicht zwischen die +`\verb|$|'s geschrieben werden, wenn sie nicht zur Formel geh\"oren. +Eine Textformel +\begin{verbatim} +f\"ur $x=a, b$, oder $c$ +\end{verbatim} +schreibt man besser als +\begin{verbatim} +f\"ur $x=a$, $b$, oder~$c$ +\end{verbatim} +Der Grund hierf\"ur liegt darin, da\ss{} {\em in} einer Formel die Abst\"ande +hinter Interpunktionszeichen anders gesetzt werden, als im Text, man +erhielte also unterschiedlich breite \index{Leer!Raum} +Leerr\"aume, was h\"ochst unsch\"on +aussieht. Au\ss{}erdem bricht \TeX\ eine Formel hinter einem +Interpunktionszeichen nur {\em sehr} ungerne um, was aber in diesem +Fall gerade w\"unschenswert w\"are.\footnote{Der Grund f\"ur das Verhalten +von \TeX\ liegt darin, da\ss{} man ja \"ublicherweise nicht eine Formel wie +$f(a,b)$ in $f(a,$ und $b)$ getrennt haben m\"ochte.} + +Innerhalb einer \index{Formel!abgesetzte} +abgesetzten Formel sieht die Sache etwas anders aus. +Hier sollte das Interpunktionszeichen {\em in} die Formel geschrieben +werden. Der Grund wird sofort klar, wenn man sich die beiden folgenden +Beispiele ansieht. +\begin{verbatim} +$$f(a,b).$$ +\end{verbatim} +ergibt das gew\"unschte +$$f(a,b).$$ +wohingegen +\begin{verbatim} +$$f(a,b)$$. +\end{verbatim} +etwas seltsam aussieht: +$$f(a,b)$$. +Achten sie darauf, wo der \index{Punkt}Punkt hingekommen ist. +\subsubsection{Mehr Platz} +Man kann Textformeln auch dadurch hervorheben, da\ss{} man ihnen etwas +mehr Platz verschaftt. \TeX\ bietet diese M\"oglichkeit mit dem Befehl +\index{zzzmathsurround@{\tt\char92 mathsurround}} +`\verb|\mathsurround|'. Die Textformel +\begin{verbatim} +$x=a$, $b$, oder $c$ +\end{verbatim} +sieht mit den Vorgaben f\"ur `\verb|\mathsurround|' f\"ur ein, bzw.\ zwei +pt folgenderma\ss{}en aus + +{\mathsurround=1pt$x=1$, $b$, oder $c$} + +{\mathsurround=2pt$x=1$, $b$, oder $c$} + +Normalerweise wird der Wert auf 0pt gesetzt. +\subsection{Buchstaben in Nicht-Italic} +\subsubsection{Generelles} +Normalerweise werden Buchstaben in Formeln immer in der +\index{Schrift!Art}\index{Schrift!Italic}Schriftart +\index{Italic}Italic gesetzt. Bei \index{Funktion!Namen} +Funktionsnamen o.\"a.\ ist dies aber st\"orend. \TeX\ +bietet daher einige Befehle, die die entsprechenden Funktionsnamen in +der \index{Schrift!Roman}\index{Schrift!Art} +Schriftart \index{Roman}Roman ausgeben. +\index{zzzarccos@{\tt\char92 arccos}} +\index{zzzarcsin@{\tt\char92 arcsin}} +\index{zzzarctan@{\tt\char92 arctan}} +\index{zzzarg@{\tt\char92 arg}} +\index{zzzcos@{\tt\char92 cos}} +\index{zzzcosh@{\tt\char92 cosh}} +\index{zzzcot@{\tt\char92 cot}} +\index{zzzcoth@{\tt\char92 coth}} +\index{zzzcsc@{\tt\char92 csc}} +\index{zzzdeg@{\tt\char92 deg}} +\index{zzzdet@{\tt\char92 det}} +\index{zzzdim@{\tt\char92 dim}} +\index{zzzexp@{\tt\char92 exp}} +\index{zzzgcd@{\tt\char92 gcd}} +\index{zzzhom@{\tt\char92 hom}} +\index{zzzinf@{\tt\char92 inf}} +\index{zzzker@{\tt\char92 ker}} +\index{zzzlim@{\tt\char92 lim}} +\index{zzzliminf@{\tt\char92 liminf}} +\index{zzzlog@{\tt\char92 log}} +\index{zzzmax@{\tt\char92 max}} +\index{zzzmin@{\tt\char92 min}} +\index{zzzsec@{\tt\char92 sec}} +\index{zzzsin@{\tt\char92 sin}} +\index{zzzsinh@{\tt\char92 sinh}} +\index{zzzsup@{\tt\char92 sup}} +\index{zzztan@{\tt\char92 tan}} +\index{zzztanh@{\tt\char92 tanh}} +\index{zzzlimsup@{\tt\char92 limsup}} +\begin{verbatim} +\arccos \cos \csc \exp \ker \limsup \min \sinh +\arcsin \cosh \deg \gcd \lg \ln \Pr \sup +\arctan \cot \det \hom \lim \log \sec \tan +\arg \coth \dim \inf \liminf \max \sin \tanh +\end{verbatim} +Hier einige Beispiele, die auch zeigen, da\ss{} immer der richtige +\index{Leer!Raum}Leerraum um die Funktionsnamen gesetzt wird. + +\index{zzzover@{\tt\char92 over}} +\medskip\begin{tabular}{ll} +{\em Eingabe} & {\em Ausgabe}\\ +{\tt\char36\char92 sin2\char92 theta=2\char92 sin\char92 theta\char92 +cos\char92 theta\char36} & $\sin2\theta=2\sin\theta\cos\theta$\\ +{\tt\char36 O(n\char92 log n\char92 log \char92 log n)\char36} & +$O(n\log n\log\log n)$\\ +{\tt\char36\char92 Pr(X\char62 x)=\char92 exp(-x/\char92 mu)\char36} & +$\Pr(X>x)=\exp(-x/\mu)$\\ +{\tt\char36\char36\char92 max\char95\char123 1\char92 le n\char92 le +m\char125\char92 log\char95 2P\char95 n\char36\char36} & +$\displaystyle{\max_{1\le n\le m}\log_2P_n}$\\ +{\tt\char36\char36\char92 lim\char95\char123 x\char92 +to0\char125\char123\char92 sin x\char92 over x\char125 +=1\char36\char36} & $\displaystyle{\lim_{x\to0}{\sin x\over x}=1}$ +\end{tabular}\medskip + +Wie man am Beispiel des \index{zzzmax@{\tt\char92 max}} +`\verb|\max|'-Operators sieht werden manche +dieser \index{Kontrollsequenz}Kontrollsequenzen als gro\ss{}e Symbole behandelt. + +Mitunter reichen diese Befehle nicht aus. Sollten sie nur ab und zu +einen anderen Befehle benutzen m\"ussen, dann sollten sie es per Hand +machen, tritt die Situation allerdings h\"aufiger auf, dann sollten sie +sich einen entsprechenden Befehl schaffen. Hier zun\"achst die +M\"oglichkeit als solche Text in Formeln in einer anderen +\index{Schrift!Art}Schriftart zu setzen. + +Am einfachsten erreichen sie das gew\"unschte Ziel, wenn sie den Befehl +\index{zzzrm@{\tt\char92 rm}}`\verb|\rm|' verwenden. Die Eingaben von +\index{zzzsqrt@{\tt\char92 sqrt}} +\begin{verbatim} +$$\sqrt{{\rm Var}(X)}$$ +$$x_{\rm max}-x_{\rm min}$$ +\end{verbatim} +f\"uhren zu dem Ergebnis +$$\sqrt{{\rm Var}(X)}$$ +und +$$x_{\rm max}-x_{\rm min}$$ +Denken sie allerdings daran, da\ss{} sie \index{Leer!Zeichen} +Leerzeichen in derartigen Texten +mit der \index{Kontrollsequenz} +Kontrollsequenz `\verb*|\ |' schreiben, da sie sonst ignoriert +w\"urden. Es geht auch mit dem Befehle \index{Box!Hbox} +`\verb|\hbox|', aber Achtung, es k\"onnen \index{Fehler!Bei Hbox}Fehler auftreten. +\index{Groesse!Schrift@Gr\"o\ss{}e!Schrift}\index{Schrift!Groesse@Schrift!Gr\"o\ss{}e} +\index{Schrift!Art} +\begin{enumerate} +\item Wenn sie den {\tt\char92 hbox} Befehl verwenden, wird die +Schriftgr\"o\ss{}e nicht ge\"andert. Die \index{Eingabe}Eingabe von {\tt\char36 +x\char95\char123\char92 hbox\char123 min\char125\char125\char36} +ergibt die \index{Ausgabe}Ausgabe: $x_{\hbox{min}}$. +\item Es ist nicht unbedingt sichergestellt, da\ss{} sie auch wirklich die +Schriftart erreichen, die sie haben wollen. Der Text in der +{\tt\char92 hbox} wird in der Schrift gesetzt, die au\ss{}erhalb der +Formel g\"ultig ist. Wenn sie also z.B.\ die Schriftart \index{Boldface}Boldface +benutzen, dann w\"urde auch ihr Text in Boldface gesetzt. +\end{enumerate} +\subsubsection{Moduln} +F\"ur Modulnangaben existieren zwei \index{Kontrollsequenz} +Kontrollsequenzen. Einmal der Befehl +\index{zzzbmod@{\tt\char92 bmod}}`\verb|\bmod|', der wie ein bin\"arer +\index{Operator!Binaer@Operator!Bin\"ar}Operator gesetzt wird und +innerhalb von Formeln verwendet werden sollte, und andererseits der +Befehl \index{zzzpmod@{\tt\char92 pmod}} +`\verb|\pmod|', der am Ende von Formeln verwendet werden +sollte, der wie eine \index{Klammer!Bei Moduln} +Klammer gesetzt wird. Der Befehl `\verb|\pmod|' +setzt \"ubrigens eigene Klammern, die Eingabe von +\begin{verbatim} +$$x\equiv y+1\pmod{m^2}$$ +\end{verbatim} +ergibt +$$x\equiv y+1\pmod{m^2}$$ +\subsubsection{\"Andern der Schriftart} +\"Anderungen der Schriftart durch die normalen Befehle wirkt sich nur +auf die normalen Buchstaben, die \index{Griechische Buchstaben} +griechischen \index{Grossbuchstaben@Gro\ss{}buchstaben}Gro\ss{}buchstaben und die +\index{Akzent!mathematische} +Akzente aus. Die \index{Dollarzeichen} +Dollarzeichen, die eine Formel umschlie\ss{}en wirken +dabei wie eine \index{Gruppe!Formel} +Gruppenklammer, so da\ss{} die Schriftart\"anderung lokal bleibt. + +\index{zzzphi@{\tt\char92 phi}} +{\tt\char36\char92 bf a+b=\char92 Phi\char95 m\char36} ergibt $\bf +a+b=\Phi_m$ + +Neben den \"ublichen Umschaltbefehlen existiert im mathematischen Modus +auch Befehl +\index{zzzcal@{\tt\char92 cal}}`\verb|\cal|', der \index{Kalligraphie} +kalligraphische Buchstaben erzeugt, +allerdings {\em nur} \index{Grossbuchstaben@Gro\ss{}buchstaben} +Gro\ss{}buchstaben. Die Angabe von `\verb|$\cal A$|' +ergibt $\cal A$. + +Ein weiterer Befehl ist \index{zzzmit@{\tt\char92 mit}} +`\verb|\mit|', der f\"ur \index{Italic}``mathematisches +Italic'' steht. Mit diesem Befehle werden auch die griechischen +\index{Grossbuchstaben@Gro\ss{}buchstaben} +Gro\ss{}buchstaben in \index{Italic}Italic ausgegeben. Auf die normalen Buchstaben hat +dieser Befehl keinen Einflu\ss{}, genau, wie der Befehl +\index{zzzrm@{\tt\char92 rm}}`\verb|\rm|' auf +die griechischen Gro\ss{}buchstaben keinen Einflu\ss{} hat. Worin besteht nun +der Unterschied zwischen mathematischem Italic und normalem Italic, am +besten zeigt das ein Beispiel + +\medskip\begin{tabular}{ll} +{\tt\char36 Dies\char92\ ist\char92\ mathematisches\char92\ +Italic\char36} & $Dies\ ist\ mathematisches\ Italic$\\ +{\tt\char123\char92 it Das ist Text Italic\char125} & {\it Das ist +Text Italic} +\end{tabular}\medskip + +Die mathematischen Buchstaben sind etwas breiter und sie werden mit +anderem \index{Leer!Raum}Leerraum gesetzt. +\subsection{Platz zwischen Formeln} +Mitunter sollen, vor allem in \index{Formel!abgesetzte} +abgesetzten Formeln, mehr als eine +Formel gesetzt werden, die voneinander durch etwas Platz getrennt +werden sollen. Der normale \index{Abstand!In Formeln} +Abstand hilft hier nicht weiter. Der +Formelsatz +$$F_n=F_{n-1}+F_{n-2},n\ge2$$ +ist nicht gerade das, was man erwarten w\"urde. Grunds\"atzlich ist es +empfehlenswert derartige Formeln durch Text zu trennen, also +$$F_n=F_{n-1}+F_{n-2},{\rm\ wenn\ }n\ge2$$ +es geht aber auch mit \index{Zwischenraum} +Zwischenraum, wenn man sie einer der beiden +Befehle \index{zzzquad@{\tt\char92 quad}} +`\verb|\quad|' oder \index{zzzqquad@{\tt\char92 qquad}} +`\verb|\qquad|' bedient. Der Befehl +`\verb|\quad|' schafft etwas den Platz eines em, der andere Befehl +etwa das \index{Doppelt!Platz}doppelte. Die Formel +\begin{verbatim} +$$F_n=F_{n-1}+F_{n-2},\qquad n\ge2$$ +\end{verbatim} +sieht dann so aus +$$F_n=F_{n-1}+F_{n-2},\qquad n\ge2$$ +Derartigen Platz m\"ussen sie immer explizit mit solchen Befehlen +angeben. +\subsection{Platz {\em in} Formeln} +Meist ist die Positionierung von Formelteilen in einer Formel +hinreichend gut. Es kann aber vorkommen, da\ss{} die Vorgabe von \TeX\ +doch nicht ganz den Erwartungen entspricht. Es w\"are unsinnig mit den +Befehlen `\verb|\quad|', \index{zzzqquad@{\tt\char92 qquad}} +`\verb|\qquad|' oder `\verb*|\ |' Platz zu +schaffen, da diese Befehle viel zu gro\ss{}e \index{Zwischenraum} +Zwischenr\"aume schaffen. In +Formeln werden von \TeX\ drei verschiedene Abst\"ande benutzt. Ein +gro\ss{}er \index{Abstand!Gleichheitszeichen} +Abstand wird rechts und links von Gleichheitszeichen verwendet +($2=3-1$), mittleren \index{Abstand!Binaere Zeichen@Abstand!Bin\"are Zeichen} +Abstand w\"ahlt \TeX\ vor und hinter bin\"aren +Zeichen, wie dem \index{Minuszeichen} +Minuszeichen, der kleinste Abstand ist noch kleiner, +er macht gerade den Unterschied zwischen `${\rm loglog}$' und `${\rm +log\, log}$' aus. + +Sie k\"onnen diese \index{Zwischenraum} +Zwischenr\"aume auch selber in Formeln schreiben, wenn +sie die Befehle + +\medskip\begin{tabular}{ll} +{\tt\char92 ,} & Kleiner Zwischenraum ($1/6$ eines quad)\\ +{\tt\char92\char62} & Mittlerer Zwischenraum ($2/9$ eines quad)\\ +{\tt\char92 ;} & Gro\ss{}er Zwischenraum ($5/18$ eines quad)\\ +{\tt\char92 !} & negativer kleiner Zwischenraum +\end{tabular}\medskip + +Die Gr\"o\ss{}enangaben sind nur im Normalfall richtig, da die Abst\"ande in +\index{Muglue}{\em muglue} definiert sind. Die Bezeichnung \index{Leim} +{\em glue}=Leim, kennen +wir bereits, die Vorsilbe {\em mu} bedeutet `mathematic units'. $18$ +mu machen ein em aus, je nach aktueller Schriftart \"andern sich also +auch die Abst\"ande. Die \index{Definition} +Definition der Abst\"ande lautet +\index{zzzmedmuskip@{\tt\char92 medmuskip}} +\index{zzzthickmuskip@{\tt\char92 thickmuskip}} +\index{zzzthinmuskip@{\tt\char92 thinmuskip}} +\begin{verbatim} +\thinmuskip = 3mu +\medmuskip = 4mu plus 2mu minus 4mu +\thickmuskip = 5mu plus 5mu +\end{verbatim} +Sie k\"onnen den Platz, den sie in eine Formel zus\"atzlich hineinbringen +wollen auch sofort in \index{Muglue}muglue angeben, dazu dient der Befehl +\index{zzzmuskip@{\tt\char92 muskip}} +`\verb|\muskip|', der wie der {\tt hskip} Befehl arbeitet, allerdings +verlangt er als \index{Argument!Bei Muskip}Argument {\em immer} mu's. +\subsubsection{Beispiele der Anwendung} +Als erstes Beispiel dient der $dx$ Ausdruck am Ende eines +\index{Integral}Integrals. +Normalerweise w\"urde er zu nahe an den Inhalt des Integrals gesetzt. + +\index{zzzinfty@{\tt\char92 infty}}\index{zzzint@{\tt\char92 int}} +\medskip\begin{tabular}{ll} +{\tt\char26\char92 int\char95 0\char94\char92 infty f(x)\char92 +,dx\char36} & $\int_0^\infty f(x)\,dx$\\ +{\tt\char36 x\char92 ,dy/dx\char36} & $x\,dx/dy$ +\end{tabular}\medskip + +Im letzten Beispiel ist der Befehl vor dem $dy$ nat\"urlich \"uberfl\"u\ss{}ig. +Auch \index{Einheit!Mass@Einheit!Ma\ss{}} +Einheiten sollten derartig abgesetzt werden + +\medskip\begin{tabular}{ll} +{\tt\char36 55\char92 rm\char92 ,km/h\char36} & $55\rm\, km/h$\\ +{\tt\char36 g=9,8\char92 rm\char92 ,m/sec\char94 2\char36} & +$g=9,8\rm\, m/sec^2$ +\end{tabular}\medskip + +Auch hinter \index{Fakultaet@Fakult\"at} +Fakult\"atszeichen, hinter denen noch etwas folgt, sollten +sie etwas zus\"atzlichen \index{Zwischenraum}Zwischenraum setzen + +\medskip\begin{tabular}{ll} +{\tt\char36 3!\char92 ,4!\char92 ,5!\char36} & $3!\,4!\,5!$ +\end{tabular}\medskip + +Weitere Beispiele sehen sie nun +\index{zzzbigl@{\tt\char92 bigl}}\index{zzzbigr@{\tt\char92 bigr}} +\index{zzzint@{\tt\char92 int}} + +\medskip\begin{tabular}{ll} +{\tt\char36\char92 sqrt2\char92 ,x\char36} & $\sqrt2\,x$\\ +{\tt\char36\char92 sqrt\char123\char92 ,\char92 log x\char125\char36} +& $\sqrt{\,\log x}$\\ +{\tt\char36 O\char92 bigl(1/\char92 sqrt\ n\char92 ,\char92 +bigr)\char36} & $O\bigl(1/\sqrt n\,\bigr)$\\ +{\tt\char36\char91\char92 ,0,1)\char36} & $[\,0,1)$\\ +{\tt\char36\char36\char92 int\char92 !\char92 !\char92 !\char92 +int\char95 D dx\char92 ,dy\char36\char36} & +$\displaystyle{\int\!\!\!\int_D dx\,dy}$ +\end{tabular}\medskip + +In der folgenden Tabelle werden alle \index{Zwischenraum} +Zwischenr\"aume erkl\"art, die \TeX\ +automatisch zwischen \index{Atom!Einer Formel} +Formelatomen setzt. Dabei stellen $0$, $1$, $2$ +und~$3$ keinen, kleinen, mittleren und gro\ss{}en Zwischenraum dar. Die +Angaben stehen in Klammern, wenn der Zwischenraum nur im +\index{Display!Stil}Display- und +im Textstil gesetzt wird und sonst nicht. Wenn ein Stern in der +Tabelle auftaucht, dann ist damit eine Situation gemeint, die nie +auftreten kann. + +\medskip\begin{scriptsize} +\begin{tabular}{lc} + & Rechtes Atom \\ +\begin{tabular}{ll} + & \strut \\ + & \strut Ord \\ + & \strut Op \\ + & \strut Bin \\ +Linkes & \strut Rel \\ +Atom & \strut Open \\ + & \strut Close \\ + & \strut Punct \\ + & \strut Inner +\end{tabular} & \fbox{ +\begin{tabular}{cccccccc} +Ord & Op & Bin & Rel & Open & Close & Punct & Inner \\ +0 & 1 & (2) & (3) & 0 & 0 & 0 & (1) \\ +1 & 1 & $*$ & (3) & 0 & 0 & 0 & (1) \\ +(2) & (2) & $*$ & $*$ & (2) & $*$ & $*$ & (2) \\ +(3) & (3) & $*$ & 0 & (3) & 0 & 0 & (3) \\ +0 & 0 & $*$ & 0 & 0 & 0 & 0 & 0 \\ +0 & 1 & (2) & (3) & 0 & 0 & 0 & (1) \\ +(1) & (1) & $*$ & (1) & (1) & (1) & (1) & (1) \\ +(1) & 1 & (2) & (3) & (1) & 0 & (1) & (1) +\end{tabular}} +\end{tabular} +\end{scriptsize}\medskip + +Die Regeln von \TeX\ sind manchmal etwas \index{Fehler!Der Regeln} +fehlerhaft, besonders, wenn +`\verb+|+' und `\verb+\|+' in einer Formel auftreten, da die Zeichen +$|$ und $\|$ als normale Symbole und nicht als \index{Klammer!Fehler} +Klammern aufgefa\ss{}t werden. + +\medskip\begin{tabular}{ll} +{\em Eingabe} & {\em Ausgabe}\\ +{\tt\char36\char124 -x\char124=\char124 +x\char124\char36} & +$|-x|=|+x|$\\ +{\tt\char36\char92 left\char124 -x\char92 right\char124 =\char92 +left\char124 +x\char92 right\char124\char36} & +$\left|-x\right|=\left|+x\right|$\\ +\end{tabular}\medskip + +\subsection{Punkte} +\index{Mathematik} +Mathematiker brauchen \"ofters Punkte in ihren Formeln, um weitergehende +Folgen von Elementen anzuzeigen. Die Eingabe von `\verb|$x...y$|' +f\"uhrt zu dem unsch\"onen Ergebnis $x...y$. \TeX\ bietet statt dessen die +Befehle \index{zzzldots@{\tt\char92 ldots}} +`\verb|\ldots|' und \index{zzzcdots@{\tt\char92 cdots}} +`\verb|\cdots|' an, die drei Punkte auf +der \index{Linie!Basis} +Basislinie, resp.\ etwas dar\"uber setzen. Der erste Fall bietet +sich bei Elementen an, die durch \index{Komma}Kommata getrennt sind, z.B.\ +$x_1,\ldots,x_n$, der zweite Befehl dient der Darstellung von +Elementen, die per Operation verkn\"upft sind, wie $x_1+\cdots+x_n$. Sie +sollten allerdings daran denken, da\ss{} diese Befehle nicht gen\"ugend +\index{Leer!Raum} +Leerraum lassen, speziell am Ende einer Formel, oder vor Klammern. Um +das korrekte Ergebnis +$$(1-x)^{-1}=1+x+x^2+\cdots\,.$$ +zu erhalten, mu\ss{} man +\index{zzzcdots@{\tt\char92 cdots}} +\begin{verbatim} +$$(1-x)^{-1}=1+x+x^2+\cdots\,.$$ +\end{verbatim} +eingeben. Da dieser Fall oft vorkommt, bietet \TeX\ f\"ur die +Befehlsfolge \index{zzzldots@{\tt\char92 ldots}} +`\verb|\ldots\,|' die einfache \index{Abkuerzung@Abk\"urzung} +Abk\"urzung \index{zzzdots@{\tt\char92 dots}}`\verb|\dots|' +an. + +\subsection{Zeilenumbr\"uche} +Auch mathematische Formeln k\"onnen in Zeilen umgebrochen werden. \TeX\ +trennt dabei nur nach einer \index{Relation} +Relation oder einem bin\"aren Symbol, +solange diese nicht in einer Gruppe oder einem \index{Bruch} +Bruch stehen. Die Formel +\begin{verbatim} +$f(x,y) = x^2-y^2 = (x+y)(x-y)$ +\end{verbatim} +wird vorzugsweise bei den \index{Gleichheitszeichen} +Gleichheitszeichen umgebrochen, wenn das +nicht geht, eventuell auch noch nach dem Plus- bzw.\ +\index{Minuszeichen}Minuszeichen. Wenn +man erreichen will, da\ss{} {\em nur} bei den Gleichheitszeichen +umgebrochen werden kann, dann mu\ss{} man die Formel als +\begin{verbatim} +$f(x,y) = {x^2-y^2} = {(x+y)(x-y)}$ +\end{verbatim} +schreiben. Man kann in Formeln einen \"ahnlichen Befehl wie den +`\verb|\-|' Befehl benutzen, er lautet `\verb|\*|', allerdings +schreibt \TeX\ im Trennungsfall keinen \index{Bindestrich} +Bindestrich, sondern ein +\index{Multiplikation!Symbol}\index{zzztimes@{\tt\char92 times}} +Multiplikationssymbol ($\times$). Ebenso kann man, au\ss{}erhalb einer +Gruppierung, auch den Befehl \index{zzzallowbreak@{\tt\char92 allowbreak}} +`\verb|\allowbreak|' verwenden, um \TeX\ +einen Hinweis zu geben, wo am besten umgebrochen wird. + +Die \index{Strafe!Zeile!Formel} +Strafen f\"ur Zeilenumbr\"uche in Formeln sind + +\medskip\begin{tabular}{llp{8cm}} +{\em Befehl} & {\em Strafe} & {\em Bedeutung} \\ +{\tt\char92 relpenalty} & 500 & Umbruch nach einem Rel-Atom\\ +{\tt\char92 binoppenalty} & 700 & Umbruch nach einem Bin-Atom\\ +\end{tabular}\medskip\index{Atom} + +Sie k\"onnen auch jederzeit in einer Formel die Strafe mit dem Befehl +\index{zzzpenalty@{\tt\char92 penalty}} +`\verb|\penalty<Nummer>|' selber angeben. Auch der Befehl +\index{zzznobreak@{\tt\char92 nobreak}}`\verb|\nobreak|' ist erlaubt. + +\subsection{Geschweifte Klammern}\index{Klammer!Geschweifte} +Geschweifte Klammern werden in der \index{Mathematik} +Mathematik z.B.\ ben\"otigt, um +Mengen darzustellen. Bei einfachen Mengendarstellungen ist das auch +problemlos m\"oglich, denken sie nur daran, da\ss{} sie die geschweiften +Klammern mit den Befehlen `\verb|\{|' und `\verb|\}|' schreiben. Somit +ergibt `\verb|$\{a,b,c\}$|' das gew\"unschte Resultat $\{a,b,c\}$. Etwas +anders sieht es aus, wenn die Mengendarstellungen komplizierter +werden. Um die korrekte Abst\"ande in der Angabe +$$\{\,x\mid x>5\,\}$$ +zu erreichen, m\"ussen sie +\begin{verbatim} +$$\{\,x\mid x>5\,\}$$ +\end{verbatim} +eingeben. Noch etwas schwieriger wird die Sache, wenn die Klammern +gr\"o\ss{}er werden. Die \index{Ausgabe}Ausgabe +\index{zzzbigl@{\tt\char92 bigl}}\index{zzzbigm@{\tt\char92 bigm}} +\index{zzzbigr@{\tt\char92 bigr}} +$$\bigl\{\,\bigl(x,f(x)\bigr)\bigm|x\in D\,\bigr\}$$ +wurde mit der Anweisung +\begin{verbatim} +$$\bigl\{\,\bigl(x,f(x)\bigr)\bigm|x\in D\,\bigr\}$$ +\end{verbatim} +erreicht. + +Ein anderes Beispiel, in dem geschweifte Klammern ben\"otigt werden ist +die Auswahl aus verschiedenen Alternativen. Mit +\index{zzzcases@{\tt\char92 cases}} +\begin{verbatim} +$$|x|=\cases{x,&wenn$x\ge0$;\cr -x,&anderenfalls.\cr}$$ +\end{verbatim} +erreichen sie das Ergebnis +$$|x|=\cases{x,&wenn$x\ge0$;\cr -x,&anderenfalls.\cr}$$ +Sie sehen hier erstmals die Verwendung des +`\verb|&|'-Zeichens.\footnote{Dieses Zeichen wird in +\index{Tabelle!Zeichen}Tabellen +verwendet. Da es sich hier um etwas \"ahnliches handelt, ist die +Verwendung dieses Zeichens hier notwendig. Auch die andern, in einer +Tabelle erlaubten Befehle sind hier erlaubt.} Mit dem Zeichen werden +zwei Spalten hinter der \"offnenden geschweiften Klammer, die von dem +Befehl automatisch eingesetzt wird, getrennt. Alles {\em vor} diesem +Zeichen wird automatisch in `\verb|$|' gesetzt, steht also im +mathematischen Modus. Alles hinter diesem Zeichen wird als normaler +Text behandelt. Die Zeilen, die schlie\ss{}lich die Auswahl erst +ausmachen, werden durch den Befehl `\verb|\cr|' getrennt. Es sind +\"ubrigens beliebig viele Zeilen m\"oglich. + +Schlie\ss{}lich gibt es noch geschweifte \index{Klammer!Geschweifte, unter +Formeln}Klammern \"uber, bzw.\ unter +Formeln. Diese werden mit den Befehlen +\index{zzzoverbrace@{\tt\char92 overbrace}}`\verb|\overbrace|' und +\index{zzzunderbrace@{\tt\char92 underbrace}} +`\verb|\underbrace|' erreicht. Da diese Befehle wie gro\ss{}e Symbole +behandelt werden, ist es m\"oglich noch {\em Grenzen} anzugeben. +\index{zzzcdots@{\tt\char92 cdots}}\index{zzzoverbrace@{\tt\char92 overbrace}} +\begin{verbatim} +$$\overbrace{x+\cdots+x}^{k\rm\;mal}$$ +$$\underbrace{x+y+z}_{>\,0}$$ +\end{verbatim} +ergeben +$$\overbrace{x+\cdots+x}^{k\rm\;mal}$$ +$$\underbrace{x+y+z}_{>\,0}$$ + +\subsection{Matrizen} +Eine weitere Anwendung, die einer Tabelle sehr \"ahnlich ist, sind die +Matrizen. Da auch sie \"ofter vorkommen, bietet \TeX\ einige Befehle zur +Konstruktion dieser Matrizen. Die \index{Matrix}Matrix +\index{zzzmatrix@{\tt\char92 matrix}} +\index{zzzlambda@{\tt\char92 lambda}} +$$A=\left(\matrix{x-\lambda&1&0\cr + 0&x-\lambda&1\cr + 0&0&x-\lambda\cr}\right)$$ +wurde mit +\begin{verbatim} +$$A=\left(\matrix{x-\lambda&1&0\cr + 0&x-\lambda&1\cr + 0&0&x-\lambda\cr}\right)$$ +\end{verbatim} +gesetzt. Es werden wieder die `\verb|&|' Zeichen ben\"otigt, um die +\index{Spalte!Tabelle} +Spalten, und die `\verb|\cr|' Befehle ben\"otigt, um die Zeilen zu +trennen. \TeX\ setzt die Matrize nicht automatisch in +\index{Klammer!Matrix}Klammern, da +aber Matrizen meist in runde Klammern gesetzt werden, gibt es den +Befehl \index{zzzpmatrix@{\tt\char92 pmatrix}} +`\verb|\pmatrix|', der dann die Klammern automatisch setzt. + +Die einzelnen Eintr\"age der \index{Matrix} +Matrix werden normalerweise \index{Zentrierung}zentriert, und +durch ein quad getrennt, man kann die Ausrichtung aber durch +\index{zzzhfill@{\tt\char92 hfill}} +`\verb|\hfill|' Befehle \"andern. Die Eintr\"age werden einzeln gesetzt, +man sollte also nicht versuchen zwei Eintr\"age in eine Gruppenklammer +zu setzen. + +Vielfach werden Matrizen nicht ganz ausgeschrieben. Neben den +\index{Punkt} +Punktbefehlen, die weiter oben beschrieben wurden, gibt es noch die +Befehle \index{zzzvdots@{\tt\char92 vdots}} +`\verb|\vdots|' f\"ur vertikale und `\verb|\ddots|' f\"ur +diagonale \index{Punkt}Punkte.\index{zzzddots@{\tt\char92 ddots}} +$$A=\pmatrix{a_{11}&a_{12}&\ldots&a_{1n}\cr + a_{21}&a_{22}&\ldots&a_{2n}\cr + \vdots&\vdots&\ddots&\vdots\cr + a_{m1}&a_{m2}&\ldots&a_{mn}\cr}$$ +erreicht man durch +\begin{verbatim} +$$A=\pmatrix{a_{11}&a_{12}&\ldots&a_{1n}\cr + a_{21}&a_{22}&\ldots&a_{2n}\cr + \vdots&\vdots&\ddots&\vdots\cr + a_{m1}&a_{m2}&\ldots&a_{mn}\cr}$$ +\end{verbatim} + +Neben den normalen Matrizen kennt \TeX\ noch eine Sonderform, bei der +Zeilen und \index{Spalte!Matrix}Spalten der \index{Matrix} +Matrix beschriftet werden. Der entsprechende +Befehl hei\ss{}t \index{zzzbordermatrix@{\tt\char92 bordermatrix}} +`\verb|\bordermatrix|' und sieht in der Anwendung +folgenderma\ss{}en aus. +$$M=\bordermatrix{&C&I&C'\cr C&1&0&0\cr I&b&1-b&0\cr C'&0&a&1-a\cr}$$ +wird realisiert durch +\begin{verbatim} +$$M=\bordermatrix{&C&I&C'\cr C&1&0&0\cr I&b&1-b&0\cr C'&0&a&1-a\cr}$$ +\end{verbatim} +Jeweils die erste Zeile und die erste \index{Spalte!Matrix} +Spalte der \index{Matrix} +Matrix werden dann +nicht \index{Klammer!Bordermatrix} +geklammert. Beachten sie, da\ss{} der erste Spalteneintrag der +ersten Zeile leer ist, was durchaus erlaubt ist, und das die Klammern +wieder automatisch gesetzt wurden. + +Wenn sie in einer Textformel Matrizen schreiben wollen, dann sollten +sie sie anders konstruieren, da die \index{Matrix} +Matrixbefehle zu gro\ss{}e Matrizen\index{zzzchoose@{\tt\char92 choose}} +erzeugen. $1\,0\choose0\,1$ erzeugt man z.B.\ mit +\begin{verbatim} +$1\,0\choose0\,1$| +\end{verbatim} +und eine \index{Matrix}Matrix wie +\index{zzzatop@{\tt\char92 atop}}\index{zzzbigl@{\tt\char92 bigl}} +\index{zzzbigr@{\tt\char92 bigr}} +$\bigl({a\atop l}{b\atop m}{c\atop n}\bigr)$ erzeugt man durch die +Befehle +\begin{verbatim} +$\bigl({a\atop l}{b\atop m}{c\atop n}\bigr)$ +\end{verbatim} +\subsection{Vertikaler Leerraum} +Wir haben schon einige Befehle kennengelernt, die es erlauben die +\index{Hoehe!Formel@H\"ohe!Formel}H\"ohe +einer Formel so zu ver\"andern, da\ss{} sie anders als normal gesetzt wird. +Dazu geh\"oren die Befehle +\index{zzzstrut@{\tt\char92 strut}} +`\verb|\strut|' und \index{zzzmathstrut@{\tt\char92 mathstrut}} +`\verb|\mathstrut|'. Es +gibt aber noch andere M\"oglichkeiten. Als erstes den Befehl +\index{zzzphantom@{\tt\char92 phantom}} +\begin{verbatim} +\phantom{<Teilformel>} +\end{verbatim} +\TeX\ belegt bei Benutzung dieses Befehls zwar den Platz, den die +Teilformel einnehmen w\"urde, gibt die Formel selber aber nicht aus. Die +Angabe von `\verb|\phantom{0}2|' w\"urde als Ergebnis nur die Zwei +liefern, aber den Platz von der Null und der Zwei beanspruchen. Wenn +sie also z.B.\ ein Symbol in der +\index{Groesse!Summenzeichen@Gr\"o\ss{}e!Summenzeichen} +Gr\"o\ss{}e eines \index{Summe!Zeichen}Summenzeichens selber +sp\"ater per Hand einf\"ugen wollen, dann schreiben sie +\index{zzzmathop@{\tt\char92 mathop}} +\index{zzzphantom@{\tt\char92 phantom}} +\index{zzzsum@{\tt\char92 sum}} +\begin{verbatim} +\mathop{\phantom\sum} +\end{verbatim} +Der `\verb|\mathop|' Befehl sorgt daf\"ur, das der Platz wie f\"ur ein +gro\ss{}es Symbol gesetzt wird. + +Weiterhin gibt es die beiden \index{Subbefehl} +Subbefehle \index{zzzhphantom@{\tt\char92 hphantom}}`\verb|\hphantom|' und +\index{zzzvphantom@{\tt\char92 vphantom}} +`\verb|\vphantom|'. Bei der ersten Variante wird die Breite der +nachfolgenden Teilformel freigehalten, \index{Hoehe!Formel@H\"ohe!Formel} +H\"ohe und Tiefe sind aber Null, +bei der zweiten Alternative, wird die H\"ohe und die Tiefe der +Teilformel freigehalten, die Breite aber ist Null. Der +\index{zzzmathstrut@{\tt\char92 mathstrut}} +`\verb|\mathstrut|' Befehl wird einfach mit +\begin{verbatim} +\vphantom( +\end{verbatim} +erzeugt. + +{\em Plain} \TeX\ kennt noch den Befehl +\index{zzzsmash@{\tt\char92 smash}}`\verb|\smash{<Teilformel>}|', der +zwar die Teilformel ganz normal ausgibt, aber die H\"ohe und die Tiefe +der \index{Ausgabe} +Ausgabe auf Null setzt. Somit ist es m\"oglich jeder Ausgabe jede +beliebige H\"ohe und Tiefe zu geben. Mit +\index{zzzliminf@{\tt\char92 liminf}}\index{zzzlimsup@{\tt\char92 limsup}} +\index{zzzmathop@{\tt\char92 mathop}} +\index{zzzsmash@{\tt\char92 smash}} +\index{zzzvphantom@{\tt\char92 vphantom}} +\begin{verbatim} +\mathop{\smash\limsup\vphantom\liminf} +\end{verbatim} +wird das gro\ss{}e Symbol `$\limsup$' ausgegeben, allerdings mit den +H\"ohenabmessungen von `$\liminf$', also mit der Tiefe Null. + +Mit den \index{Box!Befehle} +Boxbefehlen \index{zzzraise@{\tt\char92 raise}} +`\verb|\raise|' und \index{zzzlower@{\tt\char92 lower}} +`\verb|\lower|' k\"onnen +Teilformeln auch noch h\"oher oder tiefergestellt werden. Mit der +Eingabe +\index{zzzscriptstyle@{\tt\char92 scriptstyle}} +\begin{verbatim} +$2^{\raise1pt\hbox{$\scriptstyle n$}}$ +\end{verbatim} +erreicht man, da\ss{} der \index{Exponent}Exponent um ein pt h\"oher gesetzt wird, als +normal, also $2^{\raise1pt\hbox{$\scriptstyle n$}}$ statt $2^n$. Der +Befehl `\verb|\scriptstyle|' ist n\"otig, da normlerweise in einer hbox +die \index{Schrift!Art} +Schriftart gew\"ahlt wird, die die mathematische Umgebung umgibt. + +\subsection{Spezielle Befehle f\"ur besondere Aufgaben} +\subsubsection{\tt\char92 nonscript} +Folgt dem Befehl \index{zzznonscript@{\tt\char92 nonscript}} +`\verb|\nonscript|' unmittelbar etwas \index{Leim} +Leim, oder ein +Kern, dann wird dieser nicht entsprechend dem Script- oder +\index{Stil!Scriptscript} +Scriptscriptstil ausgegeben, sondern in der f\"ur den Text- oder +\index{Display!Stil} +Displaystil vorgegebenen Gr\"o\ss{}e. Der Befehl `\verb|\nonscript\;|' +erzeugt also genau den \index{Zwischenraum} +Zwischenraum, der in obiger Tabelle mit $(3)$ +angegeben ist. +\subsubsection{\tt\char92 every...} +Mit den beiden Befehlen \index{zzzeverymath@{\tt\char92 everymath}} +`\verb|\everymath|' und +\index{zzzeverydisplay@{\tt\char92 everydisplay}}`\verb|\everydisplay|' +kann jeder mathematishcen Umgebung, Textformel, bzw.\ +\index{Formel!abgesetzte}abgesetzte +Formel eine Befehlsgruppe \"ubergeben werden. Die Befehle entsprechen +somit dem Befehl \index{zzzeverypar@{\tt\char92 everypar}} +`\verb|\everypar|' f\"ur Abs\"atze. +\section{Abgesetzte Formeln} +\subsection{Einzeilige Formeln} +Wie abgesetzt Formeln aufgerufen werden, d\"urfte bis hier schon klar +sein, auch, wie man normalen Text in eine derartige Formel schreibt. +Wir haben auch schon gesehen, wie man mehr als eine Formel in eine +derartige Zeile schreibt. Hier jetzt noch einmal ein zusammenfassendes +Beispiel. Die Eingabe von +\index{zzzqquad@{\tt\char92 qquad}} +\begin{verbatim} +$$X_n=X_k\qquad\hbox{wenn, und nur wenn}\qquad + Y_n=Y_k\quad\hbox{und}\quad Z_n=Z_k$$ +\end{verbatim} +erzeugt +$$X_n=X_k\qquad\hbox{wenn, und nur wenn}\qquad + Y_n=Y_k\quad\hbox{und}\quad Z_n=Z_k$$ +Achten sie auf die unterschiedlichen \index{Zwischenraum} +Zwischenr\"aume, bei dem {\em wenn, +und nur wenn} und dem {\em und}. Wenn sie \index{Box!Hbox} +hboxen in mathematischen +Formeln verwenden, k\"onnen sie sich auch noch f\"ur eine andere Art des +\index{Leer!Raum} +Leerraums entscheiden. Beenden sie ihren Text in der hbox einfach mit +einem \index{Leer!Zeichen} +Leerzeichen, das erscheint dann in der Formel. Mit der Eingabe +von +\begin{verbatim} +$$... \hbox{f\"ur alle }n\ge0$$ +\end{verbatim} +bekommen sie +$$\ldots\hbox{f\"ur alle }n\ge0$$ + +Sie haben sich sicher schon gefragt, wie man in \TeX\ denn derartige +abgesetzte Formeln nummerieren kann. Die L\"osung des Problems liegt in +dem Befehl \index{zzzeqno@{\tt\char92 eqno}}`\verb|\eqno|'. Er wird +\begin{verbatim} +$$<Formel 1>\eqno<Formel 2>$$ +\end{verbatim} +angewendet, und alles hinter dem Befehl wird als Formelnummer +verwendet. Mit der Eingabe von +\begin{verbatim} +$$x^2-y^2=(x+y)(x-y)\eqno(15)$$ +\end{verbatim} +erhalten sie +$$x^2-y^2=(x+y)(x-y)\eqno(15)$$ +\"Ahnlich arbeitet der Befehl \index{zzzleqno@{\tt\char92 leqno}} +`\verb|\leqno|', nur da\ss{} dann die +Formelnummer links von der Formel erscheint, sie mu\ss{} trotzdem als {\em +zweites} \index{Argument!Bei Formelnummern}Argument angegeben werden. +\begin{verbatim} +$$x^2-y^2=(x+y)(x-y)\leqno(16)$$ +\end{verbatim} +erscheint also als +$$x^2-y^2=(x+y)(x-y)\leqno(16)$$ +An den Beispielen k\"onnen sie auch sehen, da\ss{} die Formel unabh\"angig von +den Formelnummern \index{Zentrierung} +zentriert wird. Nur wenn die Formel so lang w\"are, +da\ss{} sie bei der \index{Zentrierung} +Zentrierung mit der Nummer in Ber\"uhrung k\"ame, w\"urde +sie etwas zur Seite gesetzt. Wenn sie dann immer noch nicht pa\ss{}t, dann +k\"onnen sie noch einen der folgenden Tricks verwenden. Setzen sie die +Formelnummer in einen \index{zzzrlap@{\tt\char92 rlap}} +`\verb|\rlap|' oder einen \index{zzzllap@{\tt\char92 llap}} +`\verb|\llap|' Befehl, +sie erscheint dann in einer eigenen Zeile.\footnote{Welchen der beiden +Befehle sie verwenden m\"ussen ergibt sich daraus, nach welcher Seite +die Formelnummer \"uberlappen mu\ss{}.} +\index{zzzeqno@{\tt\char92 eqno}} +\begin{verbatim} +$$x^2-y^2=(x+y)(x-y)\eqno\llap{(17)}$$ +\end{verbatim} +Erzeugt +$$x^2-y^2=(x+y)(x-y)\eqno\llap{(17)}$$ +\subsection{Mehrzeilige Formeln} +F\"ur mehrzeilige Formeln stellt \TeX\ einige n\"utzliche Befehle bereit. +Der erste Befehl dieser Art ist der Befehl +\index{zzzeqalign@{\tt\char92 eqalign}}`\verb|\eqalign|', der es +mit einer \"ahnlichen Konstruktion wie schon bei +\index{zzzmatrix@{\tt\char92 matrix}} +`\verb|\matrix|' und +\index{zzzcases@{\tt\char92 cases}} +`\verb|\cases|' erlaubt, mehrere Formeln zu setzen. Der +grunds\"atzliche Aufbau ist +\index{zzzeqalign@{\tt\char92 eqalign}} +\begin{verbatim} +\eqalign{<linke Seite 1> & <rechte Seite 1> \cr + <linke Seite 2> & <rechte Seite 2> \cr + . + . + <linke Seite n> & <rechte Seite n>\cr} +\end{verbatim} +Dabei wird die linke Seite immer \index{Rechtsbuendig@Rechtsb\"undig} +rechtsb\"undig, die rechte immer +\index{Linksbuendig@Linksb\"undig} +linksb\"undig gesetzt, so da\ss{} beide Teile eine gemeinsame Formel +ergeben. Da h\"aufig \index{Gleichung}Gleichungen gesetzt werden m\"ussen, bietet sich +dieses Befehlsformat an. Man kann z.B.\ das \index{Gleichheitszeichen} +Gleichheitszeichen immer +als erstes Zeichen der rechten Seite w\"ahlen, und erreicht damit, da\ss{} +die Gleichheitszeichen genau \"ubereinander stehen. +\index{zzzcdots@{\tt\char92 cdots}}\index{zzzeqalign@{\tt\char92 eqalign}} +\begin{verbatim} +$$\eqalign{X_1+\cdots+X_n&=m,\cr + Y_1+\cdots+Y_m&=n.\cr}$$ +\end{verbatim} +Ergibt somit +\begin{eqnarray*} +X_1+\cdots+X_n & = & m,\\ +Y_1+\cdots+Y_m & = & n. +\end{eqnarray*} +Der Befehl erzeugt eine \index{Box!Gleichungen}Box, die vertikal +\index{Zentrierung}zentriert wird, es k\"onnen +also auch mehrere \index{Gleichung} +Gleichungsketten nebeneinander dargestellt werden. +\index{zzzalpha@{\tt\char92 alpha}}\index{zzzbeta@{\tt\char92 beta}} +$$ +\left\{\begin{array}{r@{=}l} +\displaystyle{\alpha} & \displaystyle{f(z)}\\ +\displaystyle{\beta} & \displaystyle{f(z^2)}\\ +\displaystyle{\gamma} & \displaystyle{f(z^3)}\end{array} +\right\}\qquad\left\{ +\begin{array}{r@{=}l} +\displaystyle{x} & \displaystyle{\alpha^2-\beta}\\ +\displaystyle{y} & \displaystyle{2\gamma}\end{array}\right\}.$$ +wurde mit +\index{zzzeqalign@{\tt\char92 eqalign}} +\begin{verbatim} +$$\left\{\eqalign{ +\alpha&=f(z)\cr \beta&=f(z^2)\cr \gamma&=f(z^3)\cr} +\right\}\qquad\left\{ +\eqalign{x&=\alpha^2-\beta\cr y&=2\gamma\cr}\right\}.$$ +\end{verbatim} +erzeugt. + +Bei derartigen Folgen von \index{Gleichung}Gleichungen, aber auch bei anderen +Konstruktionen, bei denen mehrere Formeln untereinander stehen, ist es +mitunter w\"unschenswert die Zeilen zu gruppieren. Um etwas zus\"atzlichen +Platz zwischen zwei Formeln zu erhalten, kann hinter einem `\verb|\cr|' +der Befehl +\index{zzznoalign@{\tt\char92 noalign}} +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\noalign{\vskip3pt} +\end{verbatim} +geschrieben werden, um 3pt mehr Platz zu erhalten. Statt 3pt kann +nat\"urlich jede \index{Leim} +Leimangabe stehen, die gerade gebraucht +wird.\footnote{Es kann mit diesem Befehl alles m\"ogliche zwischen zwei +Zeilen geschrieben werden, wie gleich in einem weiteren Beispiel zu +sehen ist.} + +Um Zeilen in einer mehrzeiligen Umgebung nummerieren zu k\"onnen gibt es +die zwei verwandten Befehle \index{zzzeqalignno@{\tt\char92 eqalignno}} +`\verb|\eqalignno|' und \index{zzzleqalignno@{\tt\char92 leqalignno}} +`\verb|\leqalignno|', wobei der +zweite wieder nur die Formelnummer auf der linken Seite ausgibt. Wenn +einzelne Zeilen nicht nummeriert werden sollen, dann braucht auch das +`\verb|&|' nicht geschrieben zu werden. Die Eingabe von +\index{zzzeqalignno@{\tt\char92 eqalignno}} +\begin{verbatim} +$$\eqalignno{(x+y)(x-y)&=x^2-xy+yx-y^2\cr + &=x^2-y^2;&(7.1)\cr + (x+y)^2&=x^2+2xy+y^2.&(7.2)\cr}$$ +\end{verbatim} +ergibt +\begin{eqnarray} +(x+y)(x-y)&=&x^2-xy+yx-y^2\nonumber\\ + &=&x^2-y^2;\\ + (x+y)^2&=&x^2+2xy+y^2.\end{eqnarray} +was auch zeigt, da\ss{} durchaus auch einzelne Teile der Formel ganz +\index{Leer!Formel}leer +bleiben k\"onnen. + +Es gibt noch einen wichtigen Unterschied zwischen den Befehlen, die +eine Formelzeile ausgeben, und denen, die das nicht tun. Mit dem +`\verb|\eqalignno|' Befehl werden Zeilen ausgegeben, die \"uber eine +ganze Zeile gehen, mit dem +\index{zzzeqalign@{\tt\char92 eqalign}}`\verb|\eqalign|' Befehl werden Boxen +erzeugt, die nur ihre nat\"urliche Breite haben, und die vertikal +\index{Zentrierung} +zentriert werden. Daraus ergeben sich einige Konsequenzen: +\begin{enumerate} +\item Der {\tt\char92 eqalignno} Befehl kann nur {\em einmal} in einer +Formel verwendet werden, der {\tt\char92 eqalign} Befehl, wie oben +gezeigt, mehrfach. +\item Die Zeilen, die aus einem {\tt\char92 eqalign} Befehl erzeugt +wurden k\"onnen nicht zwischen zwei \index{Seite!Umbruch} +Seiten umgebrochen werden, da dieser +Befehl ja eine Box erzeugt. Der {\tt\char92 eqalignno} Befehl erzeugt +dagegen einzelne Zeilen, die sehr wohl auf zwei Seiten aufgeteilt +werden k\"onnen. +\item Weiterhin k\"onnen die Zeilen, die mit dem +\index{zzzeqalignno@{\tt\char92 eqalignno}}`\verb|\eqalignno|' +Befehl angeordnet werden, durch Text unterbrochen werden, {\em ohne} +da\ss{} die Ausrichtung dabei verloren geht. Eine Anordnung, wie +\begin{eqnarray} +x&=&y+z\\ \noalign{\hbox{und}} +y^2+z^2&=&x^2\end{eqnarray} +wird mit einem \index{zzznoalign@{\tt\char92 noalign}} +`\verb|\noalign{\hbox{und}}|' +hinter dem ersten `\verb|\cr|' erzeugt. +\end{enumerate} + +Eine weitere M\"oglichkeit mehrere Zeilen untereinander zu schreiben, +besteht in dem Befehl \index{zzzdisplaylines@{\tt\char92 displaylines}} +`\verb|\displaylines|'. Das generelle Format +dieses Befehls lautet +\begin{verbatim} +$$\displaylines{<erste Zeile>\cr + <zweite Zeile>\cr + . + . + <letzte Zeile>\cr}$$ +\end{verbatim} +Die einzelnen Zeilen werden durch ein \index{zzzhfil@{\tt\char92 hfil}} +`\verb|\hfil|' +\index{Zentrierung}zentriert, was +also durch ein \index{zzzhfill@{\tt\char92 hfill}} +`\verb|\hfill|' \"uberschrieben werden kann. Mit +\index{zzzdisplaylines@{\tt\char92 displaylines}}\index{zzzllap@{\tt\char92 llap}} +\begin{verbatim} +$$\displaylines{\hfill x\equiv x;\hfill\llap{(1)}\cr + \hfill\hbox{wenn}\quad x\equiv y\quad\hbox{dann}\quad + y\equiv x;\hfill\llap{(2)}\cr + \hfill\hbox{wenn}\quad x\equiv y\quad\hbox{und}\quad + y\equiv z\quad\hbox{dann}\quad + x\equiv z.\hfill\llap{(3)}\cr}$$ +\end{verbatim} +erhalten sie +$$\displaylines{\hfill x\equiv x;\hfill\llap{(1)}\cr + \hfill\hbox{wenn}\quad x\equiv y\quad\hbox{dann}\quad + y\equiv x;\hfill\llap{(2)}\cr + \hfill\hbox{wenn}\quad x\equiv y\quad\hbox{und}\quad + y\equiv z\quad\hbox{dann}\quad + x\equiv z.\hfill\llap{(3)}\cr}$$ + +Sie haben sicher schon bemerkt, da\ss{} der Abstand zwischen zwei und mehr +Zeilen \index{Groesse!Zeilenabstand@Gr\"o\ss{}e!Zeilenabstand} +gr\"o\ss{}er ist, als der Abstand der Zeilen im Text. Dies geschieht +zum Zwecke der besseren Lesbarkeit. Der Befehl, der diese `\"Offnung' +der Zeilen bewirkt, wird automatisch nach jedem der Mehrzeilenbefehle +eingef\"ugt, er lautet \index{zzzjot@{\tt\char92 jot}} +\index{zzzopenup@{\tt\char92 openup}} +`\verb|\openup1\jot|'. Wenn sie nicht mit \TeX's +Befehlen arbeiten wollen, sondern die Anordnung mit dem +\index{zzzhalign@{\tt\char92 halign}}`\verb|\halign|' +Befehl selber bewerkstelligen wollen, dann sollten sie den +\index{Oeffnungsbefehl@\"Offnungsbefehl} +\"Offnungsbefehl selber einf\"ugen. Aber beachten sie dabei folgendes. Die +`\"Offnung' der Zeilen wirkt nur innerhalb der +\index{Gruppe!Oeffnung@Gruppe!\"Offnung}Gruppe, die durch die +`\verb|$$|' erzeugt wird, dadurch gibt es einen kleinen +\index{Nebeneffekt}Nebeneffekt. +Die letzte Formelzeile steht ja wieder vor einer Textzeile, und da ist +der \index{Abstand!Hinter Formeln} +Abstand wieder der normale, sie m\"ussen also am Ende der +Formelzeilen {\em per Hand} noch etwas zus\"atzlichen Abstand einf\"ugen. +\subsection{Lange Formeln} +Alle Regeln, die sie bisher \"uber Formelsatz gelernt haben, n\"utzen +ihnen nichts, wenn sie eine Formel haben, die einfach l\"anger ist, als +eine Zeile. \index{Knuth. D.} +D.~Knuth empfiehlt in solch einem Falle die Verwendung des +`\verb|eqalign|' Befehls. Man kann dabei eine lange Formel z.B. so +setzen +\begin{eqnarray*} +\sigma(2^{34}-1,2^{35},1)&=&-3+(2^{34}-1)/2^{35}+2^{35}\!/(2^{34}-1)\\ + & &{}+7/2^{35}(2^{34}-1)-\sigma(2^{35},2^{34}-1,1).\end{eqnarray*} +Diese Formel wurde mit +\index{zzzeqalign@{\tt\char92 eqalign}} +\index{zzzqquad@{\tt\char92 qquad}} +\index{zzzsigma@{\tt\char92 sigma}} +\begin{verbatim} +$$\eqalign{\sigma(2^{34}-1,2^{35},1) + &=-3+(2^{34}-1)/2^{35}+2^{35}\!/(2^{34}-1)\cr + &\qquad+7/2^{35}(2^{34}-1)-\sigma(2^{35},2^{34}-1,1).\cr}$$ +\end{verbatim} +erzeugt. \TeX\ kennt selber {\em keine} Regeln, f\"ur den Umbruch einer +derartigen Formel, dazu mu\ss{} man den Inhalt der Formel nicht nur +kennen, sondern sie auch verstehen, um den besten Platz f\"ur den +Umbruch zu erkennen. Statt dessen stehen hier einige kleine Regeln, +die ihnen die \index{Umbruch von Formeln} +Entscheidung etwas erleichtern sollen. +\begin{enumerate} +\item Brechen sie eine lange Formel {\em vor} einem bin\"aren Symbol, +oder einem \index{Relation} +Relationssymbol um, also anders, als in Textformeln. +\item R\"ucken sie den zweiten Zeil der Formel etwas ein. Sie k\"onnen +auch den ersten Teil der Formel mit einem {\tt\char92 hfill} ganz nach +links, den zweiten mit einem weiteren {\tt\char92 hfill} ganz nach +rechts schieben. +\end{enumerate} + +Achten sie zum Abschlu\ss{} darauf, da\ss{} sie keine +\index{zzzleft@{\tt\char92 left}} +`\verb|\left|', +`\verb|\right|' Konstruktionen \"uber mehrere Zeilen verwenden. Bei +einer langen Formel m\"ussen sie die Gr\"o\ss{}enwahl der +\index{Klammer!Groessenanpassung@Klammer!Gr\"o\ss{}enanpassung}Klammer schon selber +vornehmen. +\chapter{Definitionen oder Makros} +\section{Generelles} +Wenn sie einen Text schreiben, der oft dieselbe Folge von Zeichen +enth\"alt, dann k\"onnen sie sich mit \TeX\ die Arbeit erleichtern. +Angenommen, sie schreiben einen mathematischen Text, der oft den +Vektor `$(x_1,\ldots,x_n)$' enth\"alt. Dann k\"onnen sie mit der Anweisung +\index{zzzdef@{\tt\char92 def}} +\index{zzzxvek@{\tt\char92 xvek}} +\begin{verbatim} +\def\xvek{(x_1,\ldots,x_n)} +\end{verbatim} +einen \index{Neu!Befehl} +neuen Befehl `\verb|\xvek|' bereitstellen, der ab sofort als +\index{Abkuerzung@Abk\"urzung} +Abk\"urzung f\"ur `\verb|(x_1,\ldots,x_n)|' steht. Eine komplizierte +\index{Formel!Abkuerzung@Formel!Abk\"urzung}Formel, wie +\index{zzzbigl@{\tt\char92 bigl}}\index{zzzbigr@{\tt\char92 bigr}} +$$\sum_{(x_1,\ldots,x_n)\ne(0,\ldots,0)} +\bigl(f(x_1,\ldots,x_n)+g(x_1,\ldots,x_n)\bigr)$$ +kann dann mit der einfachen Anweisung +\index{zzzsum@{\tt\char92 sum}} +\index{zzzxvek@{\tt\char92 xvek}} +\begin{verbatim} +$$\sum_{\xvek\ne(0,\ldots,0)} \bigl(f\xvek+g\xvek\bigr)$$ +\end{verbatim} +geschrieben werden. Derartige \index{Abkuerzung@Abk\"urzung} +Abk\"urzungen bieten sich nat\"urlich nur +an, wenn eine Zeichenfolge wirklich \"ofters vorkommt. Sie bietet dann +aber auch eine gewisse Gew\"ahr gegen \index{Fehler!Schreibfehler} +Tippfehler, die auch nicht zu vernachl\"a\ss{}igen ist. + +\TeX\ expandiert ihre neu geschaffene \index{Kontrollsequenz} +Kontrollsequenz, bis nichts mehr +zu expandieren ist, sprich nur noch \index{Primitiv} +Primitive \"ubrigbleiben. Der Befehl +\index{zzzxvek@{\tt\char92 xvek}} +\begin{verbatim} +\xvek +\end{verbatim} +wird zun\"achst zu +\index{zzzldots@{\tt\char92 ldots}} +\begin{verbatim} +(x_1,\ldots,x_n) +\end{verbatim} +expandiert, und dieser Ausdruck dann zu +\index{zzzldotp@{\tt\char92 ldotp}} +\index{zzzmathinner@{\tt\char92 mathinner}} +\begin{verbatim} +(x_1,\mathinner{ldotp\ldotp\ldotp},x_n) +\end{verbatim} +da auch \index{zzzldots@{\tt\char92 ldots}} +`\verb|\ldots|' ein Makro\footnote{Statt des Begriffs +`Definition' hat sich auch der Begriff `Makro' durchgesetzt, da quasi +eine mikroskopisch kleine Anweisung einen makroskopischen Effekt haben +kann.} ist. Die jetzt noch verbliebenen \index{Kontrollsequenz} +Kontrollsequenzen sind keine +Makros mehr, werden also auch nicht weiter expandiert. + +Es empfiehlt sich eine eigene \index{Bibliothek} +Bibliothek solcher Makrodefinitionen +anzulegen, in denen alle Definitionen gespeichert werden, die sie +\"ofters brauchen. Achten sie aber darauf, da\ss{} die Bibliothek nicht {\em +zu} gro\ss{} wird, da sie f\"ur jeden Text mit +\index{zzzinput@{\tt\char92 input}} +\begin{verbatim} +\input makro +\end{verbatim} eingelesen werden mu\ss{},\footnote{Ich gehe hier davon aus, +da\ss{} sie alle Makros in einer Datei {\tt makro.tex} gespeichert haben, +w\"ahlen sie einen anderen Dateinamen, dann lautet auch der Name hinter +dem {\tt\char92 input} Befehl anders.} was jedesmal etwas Zeit dauert. + +Definitionen dieser Art sind nat\"urlich auch au\ss{}erhalb des +mathematischen Modus erlaubt, und sie haben auch dort dieselbe Syntax. +Eine Definition hat {\em immer} den folgenden Aufbau +\index{Ersatztext}\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\<name>{<Ersatztext>} +\end{verbatim} +sie wird also immer mit der \index{Kontrollsequenz} +Kontrollsequenz `\verb|\def|' eingeleitet, +der dann der Name der neu zu definierenden Kontrollsequenz, inklusive +\index{Gegenschraegstrich@Gegenschr\"agstrich} +Gegenschr\"agstrich, folgt. Zum Schlu\ss{} dann in geschweiften +\index{Klammer!In Definition}Klammern der +Text, der aus der Kontrollsequenz expandiert werden soll. {\em +Achtung}, die geschweiften Klammern haben hier ausnahmsweise einmal +{\em nicht} die Wirkung einer Gruppierungsklammer. Wenn sie erreichen +wollen, da\ss{} eine Kontrollsequenz zu `\verb|{\bf x}|' expandiert werden +soll, dann mu\ss{} die Definition +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\bfx{{\bf x}} +\end{verbatim} +lauten. Anderenfalls w\"urde der gesamte nachfolgende Text +\index{Schrift!Fett}\index{Fettschrift}fett gesetzt. +\section{Parameterisierte Definitionen} +Angenommen, sie wollten au\ss{}er `$(x_1,\ldots,x_n)$' auch \"ofters +\"ahnliche Konstruktionen, nur mit anderen Buchstaben, also z.B.\ +`$(y_1,\ldots,y_n)$', schreiben. Sie m\"ussen daf\"ur nicht jeweils eine +Extradefinition schreiben, \TeX\ bietet die M\"oglichkeit Makros auch +mit Parametern zu definieren und aufzurufen. Die Definition +\index{zzzdef@{\tt\char92 def}} +\index{zzzvektor@{\tt\char92 vektor}} +\begin{verbatim} +\def\vektor#1{(#1_1,\ldots,#1_n)} +\end{verbatim} +erwartet bei Aufruf ein \index{Argument!Einer Definition} +Argument, da\ss{} dan an die entsprechende Stelle +gesetzt wird. Der Aufruf `\verb|\vektor x|' erzeugt +`$(x_1,\ldots,x_n)$', der Aufruf `\verb|\vektor y|' erzeugt +`$(y_1,\ldots,y_n)$'. Auch mehrere Parameter sind m\"oglich. Wenn z.B.\ +der h\"ochste Wert der Vektoren nicht immer $n$ sein soll, dann +empfiehlt sich die Definition +\index{zzzdef@{\tt\char92 def}} +\index{zzzvektorn@{\tt\char92 vektorn}} +\begin{verbatim} +\def\vektorn#1{(#1_1,\ldots,#1_#2))} +\end{verbatim} +Der Aufruf `\verb|\vektorn am|' erzeugt dann `$(a_1,\ldots,a_m)$'. Sie +k\"onnen bis zu neun Argumente an ein Makro \"ubergeben (\verb|#1| bis +\verb|#9|). Die Reihenfolge des Auftretens im \index{Ersatztext} +Ersatztext ist dabei +beliebig, nicht aber hinter der Angabe des Namens. Sie k\"onnen z.B.\ +kein `\verb|#5|' benutzen, wenn sie nicht vorher alle Parameterzeichen +bis `\verb|#4|' verwendet haben.\footnote{Ab hier d\"urfte auch klar +sein, wieso das Zeichen {\tt\char35} normalerweise verboten ist.} + +Wenn sie eine \index{Kontrollsequenz} +Kontrollsequenz mehrfach definieren, dann ist immer nur +die letzte Definition g\"ultig. Die Anweisungen +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\a{Hallo} \def\a{wie geht's} +\end{verbatim} +bewirkt, da\ss{} bei Aufruf von `\verb|\a|' `wie geht's' ausgegeben wird. +Allerdings lassen sich Definitionen lokal, in einer Gruppe, \"andern, +ohne, da\ss{} die urspr\"ungliche Bedeutung verloren geht. + +Sie k\"onnen sich entscheiden, ob sie die Definition mit +\index{Leer!Zeichen}Leerzeichen +\"ubersichtlicher machen wollen, oder nicht. Die Definitionen +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\a #1 #2{#1 oder #2} +\def\a#1#2{#1 oder #2} +\end{verbatim} +sind gleichwertig. Auch im Aufruf ist es gleichg\"ultig, ob sie +`\verb|\a A B|' oder `\verb|\aAB|' verwenden, Das Ergebnis ist immer +`A oder B'. + +Normalerweise folgt einem Parameterzeichen nur eine \index{Ziffer} +Ziffer zwischen 1 +und 9, man kann aber durch weitere Zeichen erreichen, da\ss{} auch gr\"o\ss{}ere +\index{Argument!Einer Definition} +Argumente leicht \"ubergeben werden k\"onnen.\footnote{Von dieser +M\"oglichkeit sollte man nur sehr sparsam Gebrauch machen, und nur, wenn +einem die Definition eines Makros {\em immer} klar ist.} Die +Definition +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\cs #1. #2\par{...} +\end{verbatim} +definiert einen neuen Befehl mit zwei \index{Argument!Mehrere +Definitionsargumente}Argumenten, wobei das erste +Argument durch das Vorkommen eines \index{Punkt} +Punktes, gefolgt von einem +\index{Leer!Zeichen}Leerzeichen, hier ist das +Leerzeichen wichtig, das zweite Argument von +dem Befehl \index{zzzpar@{\tt\char92 par}} +`\verb|\par|' beendet wird. Diese Beender, gelten auch beim +Aufruf. Wenn man diesen Befehl mit +\begin{verbatim} +\cs Sie schulden \$5.00 DM. Zahlen Sie sie.\par +\end{verbatim} +aufruft, dann wird `{\em Sie schulden \$5.00 DM}' zum ersten Argument; +der erste \index{Punkt}Punkt wird nicht als \index{Begrenzer!Makroargument} +Begrenzer erkannt, da ihm keine +\index{Leer!Stelle} +Leerstelle folgt, das zweite Argument ist dann `{\em Zahlen Sie sie.}' +Weiterhin wird auch dann ein Argument weiter angenommen, wenn bei +Auftreten eines Argumentbegrenzers noch geschweifte Klammern ge\"offnet +sind. H\"atte man obigen Befehl mit +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\cs #1.#2\par{...} +\end{verbatim} +definiert, dann m\"u\ss{}te der Aufruf +\index{zzzpar@{\tt\char92 par}} +\begin{verbatim} +\cs Sie schulden {\$5.00} DM. Zahlen Sie sie.\par +\end{verbatim} +lauten, um das gew\"unschte Ergebnis zu erhalten. Man kann sich diese +Form der Parameterbegrenzung zunutze machen, um z.B.\ mathematische +Theoreme {\em sch\"on} zu setzen. + +\proclaim Theorem 1. \TeX\ hat gro\ss{}e Makrof\"ahigkeiten.\par + +Tats\"achlich kennt {\em Plain} \TeX\ einen Befehl +\index{zzzproclaim@{\tt\char92 proclaim}} +`\verb|\proclaim|', mit dem +die Beispielzeile gesetzt wurde. Er ist folgenderma\ss{}en definiert +\index{zzzdef@{\tt\char92 def}}\index{zzzenspace@{\tt\char92 enspace}} +\index{zzzmedbreak@{\tt\char92 medbreak}}\index{zzznoindent@{\tt\char92 noindent}} +\index{zzzpar@{\tt\char92 par}} +\begin{verbatim} +\def\proclaim #1. #2\par{\medbreak + \noindent{\bf#1.\enspace}{\sl#2}\par\medbreak} +\end{verbatim} +Wenn sie diese Definition \"andern, was sie ohne weiteres durch eine +\index{Neu!Definition} +Neudefinition zu Beginn ihres Textes tun k\"onnen, \"andern sie damit das +Aussehen {\em aller} Theoreme in ihrem gesamten Text. +\subsection{Die Regeln der Parameterisierung} +Jede Makrodefinition hat die folgende Form\index{Ersatztext} +\begin{verbatim} +\def<Kontrollsequenz><Parameterliste>{<Ersatztext>} +\end{verbatim} +Wobei die Parameterliste keine geschweiften +\index{Klammer!Parameterliste}Klammern enthalten darf, +au\ss{}erdem das \index{Spezialzeichen} +Spezialzeichen `\verb|#|' von \index{Ziffer}Ziffern 1 bis (maximal) 9 +gefolgt wird, die der Reihe nach auftreten m\"ussen; der Ersatztext +enth\"alt nur paarweise geschweifte Klammern und die entsprechenden +Parameterzeichen `\verb|#|' haben nur Ziffern als n\"achstes Zeichen, es +sei denn, ihnen folgt ein weiteres `\verb|#|', was das einfache +Zeichen `\verb|#|' darstellt. Zur weiteren Betrachtung dient ein +Beispiel einer Definition, die zu nichts anderem gut ist, als uns die +Regeln, nach denen \TeX\ vorgeht zu verdeutlichen. +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\cs AB#1#2C$#3\$ {#3{ab#1}#1 c##\x #2} +\end{verbatim} +Diese Definition hat eine Parameterliste, bestehend aus neun Token +\begin{verbatim} +A, B, #1, #2, C, $, #3, \$, Leerzeichen +\end{verbatim} +und einen \index{Ersatztext}Ersatztext, bestehend aus zw\"olf Token +\begin{verbatim} +#3, {, a, b, #1, }, #1, Leerzeichen, c, # \x, #2 +\end{verbatim} +Beim Aufruf erwartet \TeX\ zun\"achst die beiden Zeichen `\verb|AB|'. +Falls diese beim Aufruf nicht mit angegeben werden, erhalten sie eine +\index{Fehler!Meldung} +Fehlermeldung, die besagt, da\ss{} der Aufruf des Makros nicht mit seiner +Definition \"ubereinstimmt. Dann folgen die Argumente 1 und 2, $\ldots$ + +Woran merkt \TeX\ nun, da\ss{} ein Parameter beendet ist? Es gibt zwei +F\"alle, einmal kann ein Parameter noch von einem \index{Begrenzer!Makro} +Parameterbegrenzer +gefolgt werden, oder es folgt ein n\"achster Parameter. Schlie\ss{}lich wird +das Ende der Parameterliste erreicht, wenn die ge\"offnete, geschweifte +\index{Klammer!Vor Ersatztext}Klammer den Beginn des +\index{Ersatztext}Ersatztextes anzeigt. Der Aufruf +\index{zzzLook@{\tt\char92 Look}} +\begin{verbatim} +\cs AB {\Look}C${And\$ }{look}\$ 5. +\end{verbatim} +bewirkt nun folgendes. Das erste \index{Argument!Einer Definition} +Argument ist `\verb|\Look|', von dem +zuvor die Klammern entfernt wurden. Das zweite Argument bleibt +\index{Leer!Argument}leer, +da das `\verb|$C|' sofort folgt. Das dritte Argument bekommt den {\em +Inhalt} `\verb|{And\$ }{look}|', da das erste Auftreten von `\verb|\$|' +in einer geschweiften Klammer steht. Auch die Klammern um das gesamte +Argument werden {\em nicht} entfernt, da dann die beiden inneren +Klammern alleine \"ubrigblieben, was auch wieder zu einer nicht +richtigen Verteilung der geschweiften Klammern f\"uhren w\"urde. Die +\index{Ausgabe}Ausgabe dieses Aufrufs w\"are +\index{zzzLook@{\tt\char92 Look}} +\begin{verbatim*} +{And\$ }{look}{ab\Look}\Look c#\x5. +\end{verbatim*} +Das \index{Leer!Zeichen} +Leerzeichen wird nicht entfernt, auch wenn es hinter dem +Kontrollwort `\verb|\Look|' steht, da \TeX\ Leerzeichen hinter +Kontrollworten sozusagen nur auf den ersten Rutsch entfernt, aber +nicht bei der \index{Expansion}Expansion von Makros. + +Noch einen Spezialfall. Wenn sie als letztes Zeichen vor der \"offnenden +Klammer, die den \index{Ersatztext} +Ersatztext einleitet ein `\verb|#|' schreiben, dann +verh\"alt sich \TeX\ so, als st\"unde die \"offnende Klammer beim Aufruf vor +dem Argument. Wenn sie also +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\a#1#{\hbox to #1} +\end{verbatim} +definieren, dann ergibt der Aufruf `\verb|\a3pt{x}|' als Ergebnis +\begin{verbatim} +\hbox to 3pt{x} +\end{verbatim} +und nicht nur +\begin{verbatim} +\hbox to 3 +\end{verbatim} +wie man zun\"achst erwarten w\"urde. Was \TeX\ genau macht, wenn es die +Parameter einer Makrodefinition auswertet kann man sich nat\"urlich auch +anzeigen lassen, es geht, wie nicht anders zu erwarten mit dem Befehl +`\verb|\tracingmacros=1|'.\index{zzztracingmacros@{\tt\char92 tracingmacros}} + +Jeder Mensch macht \index{Fehler!Schreibfehler} +Fehler. Der h\"aufigste, in Zusammenhang mit +Makrodefinitionen und Makroaufrufen d\"urfte eine fehlende schlie\ss{}ende +\index{Klammer!Makro}Klammer bei der \index{Argument!Uebergabe@Argument!\"Ubergabe} +Argument\"ubergabe an eine \index{Kontrollsequenz}Kontrollsequenz sein. \TeX\ +tritt dem entgegen, indem es bei dem ersten Auftreten des Befehls +\index{zzzpar@{\tt\char92 par}} +`\verb|\par|' das weitere Einlesen eines Arguments beendet, es sei +denn, sie haben \TeX\ ausdr\"ucklich angewiesen `\verb|\par|' zu +akzeptieren. Dies geschieht, indem sie den Befehl \index{zzzlong@{\tt\char92 long}} +`\verb|\long|' vor +das \index{zzzdef@{\tt\char92 def}} +`\verb|\def|' schreiben. Mit der Anweisung +\begin{verbatim} +\long\def\bftext{{\bf #1}} +\end{verbatim} +k\"onnen sie auch mehrere Paragraphen \index{Schrift!Fett} +\index{Fettschrift}fett ausgeben +lassen.\footnote{Allerdings verbrauchen sie mit dieser Methode {\em +sehr} viel \index{Speicher!Bedarf} +Speicher --- es gibt bessere L\"osungen.} Etwas schwieriger +sieht die Sache aus, wenn sie die schlie\ss{}ende Klammer des +\index{Ersatztext}Ersatztextes +vergessen haben. Hier w\"are eine Begrenzung durch +\index{zzzpar@{\tt\char92 par}} +`\verb|\par|' nicht +w\"unschenswert, da dieser Befehl in Ersatztexten oft gebraucht wird. Es +gibt aber dennoch eine M\"oglichkeit sich wenigstens etwas abzusichern. +Wenn sie der \index{zzzdef@{\tt\char92 def}} +`\verb|\def|' Anweisung ein \index{zzzouter@{\tt\char92 outer}} +`\verb|\outer|' voranstellen, +dann kann die neudefinierte \index{Kontrollsequenz} +Kontrollsequenz nur in der \"aussersten +vertikalen Liste verwendet werden. Sie kann also nicht in einer +Tabelle stehen, noch kann sie in einem \index{Ersatztext} +Ersatztext auftauchen o.\"a. +\TeX\ hat es in diesem Fall leichter einen \index{Fehler!Suche} +Fehler zu finden. + +Schlie\ss{}lich kann einer \index{zzzdef@{\tt\char92 def}} +`\verb|\def|' Anweisung noch ein +\index{zzzglobal@{\tt\char92 global}} +`\verb|\global|' vorangestellt werden. Der Effekt ist wie man ihn +erwarten w\"urde. Da diese Situation oft auftritt, gibt es aber auch die +\index{Abkuerzung@Abk\"urzung}Abk\"urzung \index{zzzgdef@{\tt\char92 gdef}} +`\verb|\gdef|', die das gleiche bewirkt. +\section{Ein weiterer Zuweisungsbefehl} +Bisher haben wir schon einige Befehle kennengelernt, die einer +\index{Kontrollsequenz}Kontrollsequenz etwas zuweisen. Z.B.\ +\index{zzzfont@{\tt\char92 font}}`\verb|\font|', +\index{zzzchardef@{\tt\char92 chardef}}\index{zzzcountdef@{\tt\char92 countdef}} +`\verb|\chardef|', `\verb|\countdef|' oder \index{zzzdef@{\tt\char92 def}} +`\verb|\def|'. Dar\"uber +hinaus gibt es noch den Befehl \index{zzzlet@{\tt\char92 let}} +`\verb|\let|', der einer +Kontrollsequenz eine Reihe von Token zuweist. Mit der Anweisung +\index{zzzdef@{\tt\char92 def}}\index{zzzlet@{\tt\char92 let}} +\begin{verbatim} +\let\a=\def +\end{verbatim} +k\"onnte man erreichen, da\ss{} \index{Neu!Definition} +Neudefinitionen nicht mehr mit `\verb|\def|' +eingeleitet werden brauchen, sondern statt dessen mit dem Befehl +`\verb|\a|'. Ist das \index{Argument}Argument der `\verb|\let|' Anweisung ein +einzelnes Zeichen, dann verh\"alt sich der neu geschaffene Befehl wie +dieses Zeichen, allerdings mit ein paar Ausnahmen. Wenn man z.B.\ mit +\index{zzzzero@{\tt\char92 zero}} +`\verb|\let\zero=0|' den Befehl `\verb|\zero|' schafft, dann kann +dieser dennoch nicht in numerischen Konstanten verwendet werden, da +dort nur \index{Ziffer} +Ziffern erlaubt sind, und `\verb|\zero|' {\em kein} Makro +ist, das expandiert wird. Letztlich gibt es auch noch den Befehl +\index{zzzfuturelet@{\tt\char92 futurelet}} +\begin{verbatim} +\futurelet\cs=<Token1><Token2> +\end{verbatim} +was sich genauso verh\"alt, wie die Anweisung +\index{zzzlet@{\tt\char92 let}} +\begin{verbatim} +\let\cs=<Token2><Token1><Token2> +\end{verbatim} +\section{Die Entscheidungsbefehle} +\TeX\ bietet eine Reihe von Befehlen, mit denen das Verhalten von +\TeX\ gesteuert werden kann, d.h.\ da\ss{} je nach Ausgangssituation +unterschiedliche Ergebnisse herauskommen. Diese M\"oglichkeit findet +nat\"urlich auch besonders in Makros eine Anwendung. Der generelle +Aufbau dieser \index{Bedingung}Bedingungspr\"ufungen ist +\index{zzzelse@{\tt\char92 else}}\index{zzzfi@{\tt\char92 fi}} +\begin{verbatim} +\if<Bedingung><Wahrtext>\else<Falschtext>\fi +\end{verbatim} +Wenn bei Erreichen dieser Anweisung die Bedingung {\em wahr} ist, dann +wird der {\tt Wahrtext} ausgef\"uhrt, andernfalls der {\tt Falschtext}. +Der Befehl\index{Seite!Rechts-Links} +\index{zzzcount@{\tt\char92 count}}\index{zzzelse@{\tt\char92 else}} +\index{zzzfi@{\tt\char92 fi}}\index{zzzifodd@{\tt\char92 ifodd}} +\index{zzzlinkeseite@{\tt\char92 linkeseite}} +\index{zzzrechteseite@{\tt\char92 rechteseite}} +\begin{verbatim} +\ifodd\count0 \rechteseite \else \linkeseite \fi +\end{verbatim} +sorgt daf\"ur, da\ss{} je nach \index{Seite!Zahl} +Seitenzahl, die bei \TeX\ \"ublicherweise im +Z\"ahlregister $0$ steht, entweder die \index{Kontrollsequenz} +Kontrollsequenz f\"ur rechte, oder +linke Seiten ausgef\"uhrt wird. Achten sie bei numerischen Vergleichen +in den Abfragen darauf, da\ss{} die numerischen Konstanten immer richtig +abgeschlossen werden. Bei der Anweisung +\index{zzzifnum@{\tt\char92 ifnum}} +\begin{verbatim} +\ifnum\zaehler=0... +\end{verbatim} +sollten sie hinter der $0$ ein Leerzeichen schreiben, um +sicherzustellen, da\ss{} die Konstante richtig erkannt wird, auch wenn der +nachfolgende Text auch wieder mit \index{Ziffer}Ziffern anf\"angt. + +Hier nun eine vollst\"andige Liste der +Vergleichsbefehle.\index{Box!If}\index{Dimension!If}\index{Gleichheit!If} +\index{Horizontal!Modus} +\begin{enumerate} +\item \index{zzzifnum@{\tt\char92 ifnum}} +`\verb|\ifnum<Nummer1><Relation><Nummer2>|'\\Vergleicht zwei +Zahlen miteinander. Als \index{Relation} +Relation sind dabei nur die Vergleiche +`\verb|<|', `\verb|=|' und `\verb|>|' zugelassen. +\item \index{zzzifdim@{\tt\char92 ifdim}} +`\verb|\ifdim<Dimension1><Relation><Dimension2>|'\\Genau wie der +letzte Befehl, nur da\ss{} zwei Dimensionen vergliechen werden. +\item \index{zzzifodd@{\tt\char92 ifodd}} +`\verb|\ifodd<Zahl>|'\\Testet, ob die \"ubergebene Zahl ungerade +ist. +\item \index{zzzifvmode@{\tt\char92 ifvmode}} +`\verb|\ifvmode|'\\Testet, ob sich \TeX\ gerade im vertikalen, +oder im internen vertikalen Modus befindet. +\item \index{zzzifhmode@{\tt\char92 ifhmode}} +`\verb|\ifhmode|'\\Testet, ob sich \TeX\ gerade im horizontalen, +bzw.\ im eingeschr\"ankten horizontalen Modus befindet. +\item \index{zzzifmmode@{\tt\char92 ifmmode}} +`\verb|\ifmmode|'\\Testet, ob sich \TeX\ im mathematischen Modus +befindet. +\item `\verb|\if<Token1><Token2>|'\\Die beiden \"ubergebenen Token +werden miteinander auf Gleichheit vergleichen. Allerdings nicht +uneingeschr\"ankt. Tats\"achlich werden die \"ubergebenen Token expandiert, +falls das erforderlich ist, und beim ersten nichtexpandierbaren +Zeichen wird der Zeichencode getestet. +\item \index{zzzifcat@{\tt\char92 ifcat}} +`\verb|\ifcat<Token1><Token2>|'\\Arbeitet wie der letzte Befehl, +nur da\ss{} jetzt nicht die Zeichencodes vergleichen werden, sondern die +\index{Kategorie!Vergleich}Kategoriecodes. +\item \index{zzzifx@{\tt\char92 ifx}} +`\verb|\ifx<Token1><Token2>|'\\Jetzt wird der Vergleich +ausgef\"uhrt, {\em ohne} da\ss{} die Token zuvor expandiert werden. Handelt +es sich um Zeichen, dan wird Zeichen- und Kategoriecode verglichen, +sind es beides Makros, dann wird ihr Status verglichen. +\item \index{zzzifhbox@{\tt\char92 ifhbox}}\index{zzzifvbox@{\tt\char92 ifvbox}} +\index{zzzifvoid@{\tt\char92 ifvoid}} +`\verb|\ifvoid<Nummer> \ifhbox<Nummer> \ifvbox<Nummer>|'\\ Die +\"ubergebene Nummer ist eine Zahl zwischen $0$ und $255$, und die +\index{Bedingung} +Bedingung ist wahr, wenn das entsprechende Boxregister +\index{Leer!Register}leer ist, bzw. +eine hbox oder vbox enth\"alt. +\item \index{zzzifeof@{\tt\char92 ifeof}} +`\verb|\ifeof|'\\Testet auf Fileende.\index{File!Test auf Ende} +\item \index{zzziffalse@{\tt\char92 iffalse}}\index{zzziftrue@{\tt\char92 iftrue}} +`\verb|\iftrue \iffalse|'\\Sind immer wahr, bzw.\ immer falsch. +\end{enumerate} +Schlie\ss{}lich gibt es noch einen Befehl, der den einfachen +Vergleichsbefehlen verwandt ist. +\index{zzzelse@{\tt\char92 else}}\index{zzzfi@{\tt\char92 fi}} +\index{zzzifcase@{\tt\char92 ifcase}} +\begin{verbatim} +\ifcase<Nummer><Text Fall 0>\or + <Text Fall 1>\or + ... + <Text Fall n>\else + <Text in allen anderen Situationen>\fi +\end{verbatim} +Wenn die \"ubergebene Nummer den Wert $0$ hat wird der erste Text +ausgef\"uhrt, ist der Wert $1$, dann der zweite, usf. Pa\ss{}t keiner der +angegebene F\"alle zu der Zahl, dann wird der Text hinter dem +`\verb|\else|' ausgef\"uhrt. + +Das Auftreten von `\verb|\if|' und dem beendenden +\index{zzzfi@{\tt\char92 fi}}`\verb|\fi|' ist +{\em immer} paarweise, allerdings ist es unabh\"angig von +\index{Klammer!Gruppe}Gruppierungsklammern.\footnote{Achtung, hier +gibt es die M\"oglichkeit einige echte Sauereien zu programmieren!} + +Wenn man eine eigene Bedingung erst schaffen will, dann gibt es noch +den Befehl \index{zzznewif@{\tt\char92 newif}}`\verb|\newif|'. Mit +\index{zzzifabc@{\tt\char92 ifabc}} +\begin{verbatim} +\newif\ifabc +\end{verbatim} +werden die Befehl `\verb|\ifabc|', \index{zzzabctrue@{\tt\char92 abctrue}} +`\verb|\abctrue|' und +\index{zzzabcfalse@{\tt\char92 abcfalse}} +`\verb|\abcfalse|' geschaffen. Mit dem ersten kann die Bedingung +abgefragt werden, mit den beiden anderen kann die Bedingung gesetzt +werden. + +F\"ur die \index{Uebergabe@\"Ubergabe} +\"Ubergabe von Token an eine Definition oder einen Vergleich +kennt \TeX\ noch $256$ Tokenregister, die +\index{zzztoks@{\tt\char92 toks}}`\verb|\toks0|' bis +`\verb|\toks255|' hei\ss{}en. Die \index{Zuweisung} +Zuweisung an ein Tokenregister erfolgt mit +\begin{verbatim} +\toks<Nummer>={Token} oder +\toks<Nummer>=\toks<Nummer} +\end{verbatim} +Es gibt nat\"urlich auch hier wieder einen \index{zzznewtoks@{\tt\char92 newtoks}} +`\verb|\newtoks|' Befehl, der +entsprechend den anderen \index{zzznew@{\tt\char92 new}} +`\verb|\new|' Befehlen arbeitet. +\section{Expansionen} +Wenn \TeX\ einen Text abarbeitet, dann wird Token nach Token +eingelesen. Ist eines dieser Token ein Makro, dann wird dieses erst +expandiert, bevor \TeX\ seine Arbeit fortsetzt.\footnote{Als Ausnahme +gibt es nat\"urlich Befehle, wie {\tt\char92 def} oder +\index{zzzifx@{\tt\char92 ifx}}{\tt\char92 +ifx}.} Es gibt unterschiedliche \index{Kontrollsequenz} +Kontrollsequenzen, die expandiert +werden m\"ussen.\index{Bedingung}\index{Bildschirm}\index{Ersatztext} +\begin{enumerate} +\item {\em Makros} Wenn ein Makro expandiert wird, dann sucht \TeX\ +ggf.\ erst nach Argumenten und ersetzt dann die +\index{Kontrollsequenz} +Kontrollsequenz durch +den angegebenen Ersatztext. +\item {\em Vergleiche} \TeX\ entscheidet, ob die Bedingung zutrifft, +oder nicht und ersetzt dann die Bedingung durch den der Bedingung +entsprechenden Text. +\item \index{zzznumber@{\tt\char92 number}} +`\verb|\number<Nummer>|' Die Nummer, die hinter dem +`\verb|\number|' Befehl steht wird in eine \index{Ziffer} +Ziffernfolge expandiert, je +nach Wert der Nummer noch mit einem f\"uhrenden \index{Minuszeichen} +Minuszeichen. +\item \index{zzzromannumeral@{\tt\char92 romannumeral}} +`\verb|\romannumeral<Nummer>|' Komplett analog zum vorherigen +Befehl, nur da\ss{} jetzt die Zahl in r\"omische Zahlzeichen expandiert +wird. +\item \index{zzzstring@{\tt\char92 string}} +`\verb|\string<Token>|' Steht hinter dem Befehl eine +\index{Kontrollsequenz} +Kontrollsequenz, dann wird der Befehl zu der Zeichenkette expandiert, +aus der die Kontrollsequenz besteht (inkl. dem f\"uhrenden Zeichen, +entsprechend \index{Escape}\index{zzzescapechar@{\tt\char92 escapechar}} +`\verb|\escapechar|'). Handelt es sich nur um ein +einfaches Zeichen, dann wird dieses Zeichen als Ergebnis der Expansion +ausgegeben. +\item \index{zzzjobname@{\tt\char92 jobname}} +`\verb|\jobname|' Dieser Befehl wird zu dem augenblicklichen +Arbeitsnamen expandiert. Wenn \TeX\ z.B.\ in die \index{Ausgabe!File} +Ausgabefiles +{\em Papier.dvi} und {\em Papier.log} schreibt, dann wird +`\verb|\jobname|' zu {\em Papier} expandiert. +\item \index{zzzfontname@{\tt\char92 fontname}} +`\verb|\fontname|' wird zu dem angegebenen \index{Font!Name}Fontnamen expandiert. +Die Angabe von\\`\verb|\fontname\tenrm|'\\w\"urde z.B.\ im +Normalfall die Expansion {\em cmr10} zur Folge haben. +\item \index{zzzmeaning@{\tt\char92 meaning}} +`\verb|\meaning<Token>|' gibt das aus, was auf dem Bildschirm +mit der Anweisung\\\index{zzzlet@{\tt\char92 let}} +`\verb|\let\test=<Token>|'\\und\\\index{zzzshow@{\tt\char92 show}} +`\verb|\show\test|'\\ +ausgegeben w\"urde. Wenn es sich um den Buchstaben `A' handelt, +w\"are das Ergebnis: `{\em The letter A}' +\item \index{zzzcsname@{\tt\char92 csname}} +\index{zzzendcsname@{\tt\char92 endcsname}} +`\verb|\csname|'$\ldots$`\verb|\endcsname|' Dieses Befehlspaar +ist das Gegenteil des \index{zzzstring@{\tt\char92 string}} +`\verb|\string|' Befehls. Alle Token zwischen +den beiden Befehlen werden solange expandiert, bis nur noch Buchstaben +\"ubrig sind. Diese werden dann als \index{Kontrollsequenz} +Kontrollsequenz interpretiert. +\item \index{zzzexpandafter@{\tt\char92 expandafter}} +`\verb|\expandafter<Token>|' \TeX\ lie\ss{}t bei diesem Befehl das +Token, das unmittlebar hinter dem Befehl steht ein und expandiert es +nicht. Das folgende Token wird expandiert und schlie\ss{}lich das nicht +expandierte wieder davor geschrieben. +\item \index{zzznoexpand@{\tt\char92 noexpand}} +`\verb|\noexpand<Token>|' Die Expansion ist das Token selber, +das aber behandelt wird, wie der Befehl +\index{zzzrelax@{\tt\char92 relax}}`\verb|\relax|'. +\item \index{zzzbotmark@{\tt\char92 botmark}} +\index{zzzfirstmark@{\tt\char92 firstmark}} +\index{zzzsplitbotmark@{\tt\char92 splitbotmark}} +\index{zzzsplitfirstmark@{\tt\char92 splitfirstmark}} +\index{zzztopmark@{\tt\char92 topmark}} +`\verb|\topmark, \firstmark, \botmark, \splitfirstmark, +\splitbotmark|'\\Die Expansionen sind der Inhalt des entsprechenden +\index{Markregister}Markregisters, wie noch besprochen wird. +\item \index{zzzinput@{\tt\char92 input}} +`\verb|\input<Filename>|' Die Expansion ist +\index{Leer!Expansion}leer, aber \TeX\ +bereitet sich darauf vor aus den angegebenen File zu lesen. +\item \index{zzzendinput@{\tt\char92 endinput}} +`\verb|\endinput|' Die Expansion ist wieder leer, aber \TeX\ +beendet die \index{Eingabe!Vom File} +Eingabe vom augenblicklichen File, sobald die aktuelle +Zeile bearbeitet wurde. +\item \index{zzzthe@{\tt\char92 the}} +`\verb|\the<Interne Gr\"o\ss{}e>|' Der `\verb|\the|' Befehl gibt eine +Reihe von Token aus, die dem Wert der internen Gr\"o\ss{}e entsprechen. Die +Anweisung `\verb|\the\skip5|' k\"onnte z.B.\ {\em 5.0pt plus 2.0fil} +sein. Der `\verb|\the|' Befehl hat viele Unterarten, die jetzt +zusammen vorgestellt werden sollen. +\index{Horizontal!Modus} +\begin{enumerate}\index{Delcode}\index{Dimension} +\item `\verb|\the<Parameter>|' Wobei \index{Parameter!Intern} +Parameter eines der internen +Parameter von \TeX\ ist. Dies k\"onnen\\ \index{Parameter!Ganzzahl} +Ganzzahlparameter +(`\verb|\the\widowpeanlty|'),\\ \index{Parameter!Dimension} +Dimensionsparameter\index{zzzparindent@{\tt\char92 parindent}} +(`\verb|\the\parindent|')\\ \index{Leim} +\index{Parameter!Leim}Leimparameter \index{zzzleftskip@{\tt\char92 leftskip}} +(`\verb|\the\leftskip|') oder\\ +\index{Muglue}\index{Parameter!Muglue} +Muglueparameter\index{zzzthinmuskip@{\tt\char92 thinmuskip}} +(`\verb|\the\thinmuskip|') sein. +\item `\verb|\the<register>|' womit die Inhalte der Zahl-, +Dimensions-, Leim- und Mugluregister ausgegeben werden k\"onnen. +\item `\verb|\the<Codename><8-Bit Zahl>|' Hierbei steht +\index{zzzcatcode@{\tt\char92 catcode}} +`\verb|<Codename>|' f\"ur\\`\verb|\catcode|',\\ +\index{zzzmathcode@{\tt\char92 mathcode}}`\verb|\mathcode|',\\ +\index{zzzlccode@{\tt\char92 lccode}} +\index{zzzuccode@{\tt\char92 uccode}} +`\verb|\lccode|',\\`\verb|\uccode|',\\ +\index{zzzsfcode@{\tt\char92 sfcode}}`\verb|\sfcode|', oder\\ +\index{zzzdelcode@{\tt\char92 delcode}} +`\verb|\delcode|'.\\Die Anweisung `\verb|\the\mathcode`/|' gibt den +augenblich g\"ultigen mathematischen Codewert des Schr\"ag\-strichs aus. +\item `\verb|\the<Spezialregister>|' Als Spezialregister kommen dabei +die folgenden in Frage:\\\index{zzzdeadcycles@{\tt\char92 deadcycles}} +\index{zzzinsertpenalties@{\tt\char92 insertpenalties}} +\index{zzzprevgraf@{\tt\char92 prevgraf}} +`\verb|\prevgraf, \deadcycles, +\insertpenalties|',\\ \index{zzzbadness@{\tt\char92 badness}} +\index{zzzinputlineno@{\tt\char92 inputlineno}} +\index{zzzparshape@{\tt\char92 parshape}} +\verb|\inputlineno, \badness, \parshape|'\\oder +eine der Dimensionen\\ +\index{zzzpagegoal@{\tt\char92 pagegoal}} +\index{zzzpagestretch@{\tt\char92 pagestretch}} +\index{zzzpagetotal@{\tt\char92 pagetotal}} +`\verb|\pagetotal, \pagegoal, \pagestretch, +\pagefilstretch|'\\\index{zzzpagedepth@{\tt\char92 pagedepth}} +\index{zzzpagefilllstretch@{\tt\char92 pagefillstretch}} +\index{zzzpagefillstretch@{\tt\char92 pagefillstretch}} +\index{zzzpagefilstretch@{\tt\char92 pagefilstretch}} +\index{zzzpageshrink@{\tt\char92 pageshrink}} +`\verb|\pagefillstretch, \pagefilllstretch, +\pageshrink, \pagedepth|'\\Im horizontalen Modus kann au\ss{}erdem noch +die Dimension \index{zzzspacefactor@{\tt\char92 spacefactor}} +`\verb|\spacefactor|' und im vertikalen Modus die +Dimension \index{zzzprevdepth@{\tt\char92 prevdepth}} +`\verb|\prevdepth|' ausgegeben werden. +\item `\verb|\the\fontdim<Parameternummer><Font>|' Jeder +\index{Font!Parameter}Font +(Zeichensatz) hat seine eigenen \index{Parameter!Zeichensatz} +Parameter. Der sechste Parameter ist +der Wert von `em'. Mit\\`\verb|\the\fontdim6\tenrm|'\\erhielte man +z.B.\ {\em 10.0pt}. +\item `\verb|\the\hyphenchar<Font> \the\skewchar<Font>|' +\index{zzzskewchar@{\tt\char92 skewchar}} +\"ubergibt das +entsprechende Zeichen, das f\"ur diesen Font definiert wurde. +\item `\verb|\the\lastpenalty \the\lastkern \the\lastskip|' ergibt die +letzte Strafe, den letzten Kern oder den letzten \index{Zwischenraum} +Zwischenraum, +vorausgesetzt, da\ss{} das letzte Element der aktuellen Liste auch genau +das entsprechende Element war. +\item `\verb|\the<Definiertes Zeichen>|' gibt den ganzzahligen Wert +einer \index{Kontrollsequenz} +Kontrollsequenz zu\-r\"uck, die mit einem der `\verb|\...def|' +Befehle zuvor gesetzt wurde. +\end{enumerate}\index{Badness} +Normalerweise produziert der `\verb|\the|' Befehl eine Zeichenkette +aus \index{ASCII}ASCII-Zeichen. Nur in einigen F\"allen gilt das nicht. +\begin{enumerate} +\item `\verb|\the<Font>|' w\"ahlt den angegebenen Font aus. +\index{zzzfont@{\tt\char92 font}} +`\verb|\the\font|' w\"ahlt z.B.\ den augenblicklichen Font. +\item `\verb|\the<Tokenvariable>|' \"ubergibt eine Kopie des Inhalts des +Tokenregisters. +\end{enumerate} +Neben dem `\verb|\the|' Befehl existiert auch noch der +\index{zzzshowthe@{\tt\char92 showthe}}`\verb|\showthe|' +Befehl, der absolut analog arbeitet, nur da\ss{} die \index{Ausgabe!Auf +dem Bildschirm}Ausgabe auf dem Bildschirm erfolgt. +\end{enumerate} +\subsection{Wann wird nicht expandiert} +Es gibt Situationen, in denen eine \index{Kontrollsequenz} +Kontrollsequenz oder ein Makro +nicht expandiert wird. Hier nun eine vollst\"andige Liste all dieser +Situationen. Manche \index{Primitiv} +Primitive, die hier angesprochen werden sind noch +unbekannt, sie werden sp\"ater +besprochen.\index{Dollarzeichen}\index{Ersatztext} +\begin{enumerate} +\item Wenn ein Token w\"ahrend des Versuchs einen Fehler zu beheben, +gel\"oscht wird. +\item Wenn ein Token in einer Vergleichsanweisung steht, die aufgrund +der Bedingung nicht ausgef\"uhrt wird. +\item Wenn \TeX\ die Argumente eines Makros liest. +\item Wenn \TeX\ eine \index{Kontrollsequenz} +Kontrollsequenz einliest, die mit einem der +\index{zzzlet@{\tt\char92 let}} +`\verb|\let|' oder einem der \index{zzzdef@{\tt\char92 def}} +`\verb|\def|' Befehle definiert werden soll. +\item Wenn \TeX\ Argumente f\"ur einen der Befehle +\index{zzzafterassignment@{\tt\char92 afterassignment}} +\index{zzzaftergroup@{\tt\char92 aftergroup}} +\index{zzzexpandafter@{\tt\char92 expandafter}} +\index{zzzfuturelet@{\tt\char92 futurelet}} +\index{zzzifx@{\tt\char92 ifx}} +\index{zzzlet@{\tt\char92 let}} +\index{zzzmeaning@{\tt\char92 meaning}} +\index{zzznoexpand@{\tt\char92 noexpand}} +\index{zzzshow@{\tt\char92 show}} +\index{zzzstring@{\tt\char92 string}}\\ +`\verb|\expandafter|',\\ +`\verb|\noexpand|',\\ +`\verb|\string|',\\ +`\verb|\meaning|',\\ +`\verb|\let|',\\ +`\verb|\futurelet|',\\ +`\verb|\ifx|',\\ +`\verb|\show|',\\ +`\verb|\afterassignment|',\\ +`\verb|\aftergroup|'\\einliest. +\item Beim Einlesen einer \index{Parameter!Definition} +Parameterliste der \index{zzzdef@{\tt\char92 def}}`\verb|\def|' Befehle. +\item Beim Einlesen eines Ersatztextes, oder beim Einlesen einer +Tokenliste, dies geschieht z.B. bei der Bearbeitung von +\index{zzzlowercase@{\tt\char92 lowercase}}`\verb|\lowercase|'. +\item Beim Einlesen des Vorspanns einer Tabelle. +\item Wenn ein Dollarzeichen eingelesen wurde. +\item Wenn ein `\verb|`|' einen numerischen Wert einleitet. +\end{enumerate} +Wenn sie erreichen wollen, da\ss{} in einer Makrodefinition der +\index{Ersatztext}Ersatztext +nach den obigen Regeln expandiert werden soll, dann verwenden sie den +Befehl \index{zzzedef@{\tt\char92 edef}} +`\verb|\edef|', statt des normalen `\verb|\def|' Befehls, oder +den Befehl \index{zzzxdef@{\tt\char92 xdef}} +`\verb|\xdef|', der wie der `\verb|\edef|' Befehl arbeitet, +nur \index{Global!Definition}global. Mit der Anweisung +\begin{verbatim} +\def\doppelt#1{#1#1} +\edef\a{\doppelt{xy}} +\end{verbatim} +w\"urden sie erreichen, da\ss{} bei Aufruf von `\verb|\a|' {\em xyxy} +ausgegeben w\"urde. Mit \index{zzznoexpand@{\tt\char92 noexpand}} +`\verb|\noexpand|' wird die +Expandierung des folgenden Tokens unterbunden. So k\"onnen auch in einer +expandierenden Definition Teile vor der Expansion gesch\"utzt werden. + +Bei den Befehlen +\index{zzzerrmessage@{\tt\char92 errmessage}}\index{zzzmark@{\tt\char92 mark}} +\index{zzzmessage@{\tt\char92 message}} +\index{zzzspecial@{\tt\char92 special}} +\index{zzzwrite@{\tt\char92 write}} +\begin{verbatim} +\mark{...} +\message{...} +\errmessage{...} +\special{...} +\write{...} +\end{verbatim} +wird der \"ubergebene Text expandiert, genau wie bei einer +\index{zzzedef@{\tt\char92 edef}}`\verb|\edef|' +Definition. Allerdings braucht das \index{Parameter!Zeichen} +Parameterzeichen `\verb|#|' {\em +nicht} doppelt verwendet werden, um es einmal zu erhalten, es gen\"ugt, +im Gegensatz zur Verwendung in Makros, die einmalige Verwendung. +\subsection{Fileeingabe} +Neben der M\"oglichkeit mit dem \index{zzzinput@{\tt\char92 input}} +`\verb|\input|' Befehl weitere Files +einzulesen kann \TeX\ gleichzeitig bis zu $16$ Files zur Eingabe +verwalten. Um einen derartigen File bereitzustellen, sollten sie ihn +mit +\index{zzzopenin@{\tt\char92 openin}} +\begin{verbatim} +\openin<Nummer>=<Filename> +\end{verbatim} +\"offnen. Die Nummern liegen hierbei wieder zwischen $0$ und $15$, wobei +es auch wieder einen \index{zzznewread@{\tt\char92 newread}} +`\verb|\newread|' Befehl gibt, der absolut analog +zu den entsprechenden Befehlen arbeitet.\footnote{Normalerweise wird +von den meisten Implementationen das {\tt .tex} automatisch angeh\"angt, +wenn keine spezielle \index{Extension} +Extension angegeben ist.} Wird der File nicht +gefunden, oder kann aus einem anderen Grunde nicht gelesen werden, +dann gibt \TeX\ {\em keine} \index{Fehler!Meldung} +Fehlermeldung aus. Sie m\"ussen mit +\index{zzzifeof@{\tt\char92 ifeof}} +`\verb|\ifeof|' selber pr\"ufen, ob die Eingabe durch den File m\"oglich +ist. Nach dem Einlesen, sollten sie den File mit +\index{zzzclosein@{\tt\char92 closein}} +\begin{verbatim} +\closein<Nummer> +\end{verbatim} +wieder schlie\ss{}en. Eine Eingabe aus dem File erhalten sie nun mit der +Anweisung +\index{zzzread@{\tt\char92 read}} +\begin{verbatim} +\read<Nummer>to<Kontrollsequenz> +\end{verbatim} +Dabei wird die n\"achste Zeile des Files eingelesen, oder mehr, falls +sich sonst unpaarige geschweifte \index{Klammer!Unpaarig} +Klammern ergeben w\"urden, und in der +\index{Kontrollsequenz} +Kontrollsequenz gespeichert. Diese Definition der Kontrollsequenz ist +lokal, solange dem `\verb|\read|' kein \index{zzzglobal@{\tt\char92 global}} +`\verb|\global|' vorangestellt +wird. Mit Zahlen au\ss{}erhalb den Zul\"assigen, kann ein Dialog mit dem +Benutzer gef\"uhrt werden. +\index{zzzmessage@{\tt\char92 message}}\index{zzzmyname@{\tt\char92 myname}} +\index{zzzread@{\tt\char92 read}} +\begin{verbatim} +\message{Tippen sie ihren Namen} +\read16 to \myname +\message{Hallo, \myname} +\end{verbatim} +fordert den Benutzer auf seinen Namen einzugeben, und gibt diesen +danach, hinter dem Wort `Hallo' wieder aus. +\subsection{Schleifen} +\TeX\ bietet auch die M\"oglichkeit Schleifen zu programmieren. Mit der +Anweisung +\index{zzzloop@{\tt\char92 loop}}\index{zzzrepeat@{\tt\char92 repeat}} +\begin{verbatim} +\loop <Teil 1> \if... <Teil 2> \repeat +\end{verbatim} +wird folgendes bewirkt. Zun\"achst wird der erste Teil abgearbeitet, und +dann die \index{Bedingung} +Bedingung vom `\verb|\if|' getestet.\footnote{Dies ist die +einzige Variante, bei der {\tt\char92 if} {\em ohne} passendes +{\tt\char92 fi} auftritt.} Wenn die Bedingung wahr ist, wird der +zweite Teil ausgef\"uhrt und dann die ganze Schleife wiederholt. Ist die +Bedingung falsch, dann wird der zweite Teil nicht mehr ausgef\"uhrt und +die Schleife sofort verlassen.\footnote{Das \TeX book liefert an +dieser Stelle einige bemerkenswerte Beispiele, wie man \TeX\ als +\index{Taschenrechner} +Taschenrechner, oder zur Berechnung von \index{Primzahlen} +Primzahlen einsetzen kann, ich +habe mir die \"Ubernahme erspart :-)} +\chapter{Weitere Boxbefehle}\index{Box!Befehle} +In diesem Kapitel sollen die letzten, noch unbesprochenen Boxbefehle +erl\"autert werden. Es stellt insofern nur eine Erg\"anzung der schon +bekannten Befehle dar. +\section{Die Strichboxen} +Um eine Strichbox, genauer eine rechteckige, geschw\"arzte Fl\"ache zu +erzeugen, benutzen sie im vertikalen Modus den Befehl `\verb|\hbox|' +und im \index{Horizontal!Modus} +horizontalen Modus den Befehl \index{zzzvbox@{\tt\char92 vbox}} +`\verb|\vbox|', inklusive der +\index{Dimension!Angabe}Dimensionsangaben, also z.B. +\index{zzzvrule@{\tt\char92 vrule}} +\begin{verbatim} +\vrule height4pt width3pt depth2pt +\end{verbatim} +in einem Paragraphen, und sie erhalten `\vrule height4pt width3pt +depth2pt' als Ergebnis. Wenn eine der Dimensionen +\index{Doppelt!Dimensionsangabe}doppelt angegeben +wird, gilt die zweite Angabe, wird einer der Dimensionen ausgelassen, +dann gelten folgende Standardwerte: + +\medskip\begin{tabular}{lcc} + & {\tt\char92 hrule} & {\tt\char92 vrule} \\ +Breite & $*$ & 0.4pt\\ +H\"ohe & 0.4pt & $*$\\ +Tiefe & 0.0pt & $*$ +\end{tabular}\medskip + +Der `$*$' bedeutet, da\ss{} sich die Rulebox an der \index{Dimension} +Dimension der kleinsten umschlie\ss{}enden Box orientiert.\medskip + +\hrule\medskip + +Wenn sie z.B.\ einfach \index{zzzhrule@{\tt\char92 hrule}} +`\verb|\hrule|' schreiben, dann erhalten sie +obiges Ergebnis, da die kleinste umschlie\ss{}ende Box die Seite selber +ist. Mit +\index{zzzhrule@{\tt\char92 hrule}} +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\hrule width5cm height1pt \vskip1pt \hrule width6cm +\end{verbatim} +erhalten sie das Ergebnis {\em unter} diesem Abschnitt. Zwischen +Ruleboxen wird {\em kein} zus\"atzlicher \index{Zwischenraum} +Zwischenraum eingef\"ugt. Die +Zeilen sind genau ein pt voneinander entfernt.\medskip + +\hrule width5cm height1pt \vskip1pt \hrule width6cm\medskip + +Sie m\"ussen sich schon an die Vorgabe halten, im vertikalen Modus nur +horizontale Boxen zu erzeugen (`\verb|\hrule|') und im +\index{Horizontal!Modus}horizontalen +Modus nur vertikale \index{zzzvrule@{\tt\char92 vrule}} +(`\verb|\vrule|'). Auch wenn die +\index{Dimension!Angabe}Dimensionsangaben +\"ubereinstimmen und deshalb sich die Boxen durch nichts unterscheiden, +passiert folgendes. Wenn sie im vertikalen Modus den Befehl +`\verb|\vrule|' verwenden, beginnt \TeX\ einen \index{Neu!Paragraphen} +neuen Paragraphen. +Verwenden sie \index{zzzhrule@{\tt\char92 hrule}} +`\verb|\hrule|' im horizontalen Modus, dann beendet +\TeX\ den augenblicklichen Paragraphen und geht in den vertikalen +Modus \"uber. + +Negative Angaben bei einer Rulebox sind zul\"a\ss{}ig und sinnvoll. Die Box +`\vrule width3cm depth-2pt' hat beispielsweise eine Tiefe von $-2$pt. +Allerdings mu\ss{} die Breite positiv sein und auch die Summe von +\index{Hoehe!Box@H\"ohe!Box}H\"ohe und +Tiefe mu\ss{} positiv sein, damit \"uberhaupt eine Box gezeichnet wird. +\section{Boxtypen} +Es gibt verschiedene Typen von Boxen: (1) Jedes Zeichen stellt f\"ur sich +eine Box dar. (2) Die Befehle `\verb|\hrule|' und `\verb|\vrule|' +erzeugen Boxen und (3) lassen sich Boxen auch explizit angeben +\index{zzzbox@{\tt\char92 box}}\index{zzzcopy@{\tt\char92 copy}} +\index{zzzlastbox@{\tt\char92 lastbox}} +\index{zzzvbox@{\tt\char92 vbox}} +\index{zzzvsplit@{\tt\char92 vsplit}} +\index{zzzvtop@{\tt\char92 vtop}} +\begin{verbatim} +\hbox<Box Spez.>{<Horizontales Material>} +\vbox<Box Spez.>{<Vertikales Material>} +\vtop<Box Spez.>{<Vertikales Material>} +\box<Registernummer> +\copy<Registernummer> +\vsplit<Registernummer> to <Dimension> +\lastbox +\end{verbatim} +Die `\verb|<Box. Spez.>|' sind dabei die Angaben \index{Dimension!Box} +`\verb|to <Dimension>|' +oder `\verb|spread <Dimension>|', sie k\"onnen nat\"urlich +auch wegfallen. Der letzte Befehl ist bisher noch unbekannt. Au\ss{}er man +befindet sich im normalen vertikalen Modus, enth\"alt `\verb|\lastbox|' +immer dann eine Box, wenn das letzte Element der aktuellen Liste eine +Box war, sonst, und auch im mathematischen Modus ist sie leer. + +Der \index{zzzunskip@{\tt\char92 unskip}} +`\verb|\unskip|' Befehl \"ahnelt dem `\verb|\lastbox|' Befehl, au\ss{}er +da\ss{} er sich auf \index{Leim} +Leim und nicht auf Boxen bezieht. Im vertikalen Modus +erbringt der Befehl `\verb|\unskip|' nicht die gew\"unschte Wirkung, +also die Entfernung des letzten Leimst\"uckes, aber mit +\index{zzzlastskip@{\tt\char92 lastskip}} +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\vskip-\lastskip +\end{verbatim} +kann derselbe Effekt erreicht werden. + +In den zusammenfassenden Kapiteln am Ende dieses Buches wird unter +einer Box immer eine der explizit angegebenen verstanden, da +Zeichen(boxen) und Ruleboxen so speziell sind, da\ss{} sie nicht wie die +anderen Boxen behandelt werden. +\section{Leaders} +Was sie in dieser Zeile sehen \xleaders\hbox to 6pt{$\hss\cdot\hss$}\hfil\ +wird Leader genannt.\footnote{Vom englischen {\em lead} f\"ur leiten, da +sie die Augen entlang einer Zeile leiten sollen.} Leader sind der +\"ubergeordnete Begriff f\"ur \index{Leim}Leim. Leim f\"ullt einen +\index{Zwischenraum}Zwischenraum mit +\index{Leer!Zeichen} +Leerzeichen, bei Leadern kann der \index{Fuellbuchstabe@F\"ullbuchstabe} +F\"ullbuchstabe angegeben werden. Der Befehl f\"ur Leader lautet +\index{zzzhskip@{\tt\char92 hskip}}\index{zzzleaders@{\tt\char92 leaders}} +\begin{verbatim} +\leaders<Box oder Rule>\hskip<Leim> +\end{verbatim} +Der Effekt ist genauso, als h\"atten sie nur `\verb|\hskip<Leim>|' +angegeben, mit der Ausnahme, da\ss{} der \index{Zwischenraum} +Zwischenraum mit Kopien der Box +gef\"ullt wird. Die Eingabe von +\index{zzzalpha@{\tt\char92 alpha}}\index{zzzdef@{\tt\char92 def}} +\index{zzzhfill@{\tt\char92 hfill}}\index{zzzhss@{\tt\char92 hss}} +\index{zzzleaderfill@{\tt\char92 leaderfill}} +\index{zzzline@{\tt\char92 line}} +\begin{verbatim} +\def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill} +\line{$\alpha$\leaderfill $\omega$} +\line{Anfang\leaderfill Ende} +\end{verbatim} +ergibt + +$$\vbox{ +\def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill} +\hbox to \hsize{$\alpha$\leaderfill $\omega$} +\hbox to \hsize{Anfang\leaderfill Ende}}$$ + +Die Angabe von `\verb|\hbox to 1em{\hss .\hss}|' erzeugt eine Box mit +einem em Breite, in dessen Mitte ein \index{Punkt} +Punkt steht. Mit diesen Boxen +wird dann die Zeile aufgef\"ullt. Der Grund daf\"ur, da\ss{} die Punkte genau +\"ubereinander liegen ist darin zu suchen, da\ss{} der Leaderbefehl +sozusagen nur einen kleinen Ausschnitt von einer ganzen Reihe von +Kopien dieser Box zeigt. Dies erm\"oglicht die Justierung der einzelnen +Boxen auch \"ubereinander. Leider hat dieses Verfahren auch einen +kleinen Nachteil. Vor dem ersten und hinter dem letzten \index{Punkt} +Punkt kann ein +etwas zu gro\ss{}er \index{Zwischenraum} +Zwischenraum stehen. Insbesondere, wenn ein Leader +alleine auftaucht, kann das etwas st\"orend sein. Dazu gibt es die +Befehle \index{zzzcleaders@{\tt\char92 cleaders}} +`\verb|\cleaders|' und `\verb|xleadres|'. Mit dem ersten +Befehl werden die Boxen insgesamt in dem Freiraum \index{Zentrierung} +zentriert, mit dem +zweiten werden die Boxen einzeln auf die passende L\"ange gezogen. + +Statt einer Box kann auch eine Rulebox angegeben werden, evtl.\ mit +Angaben \"uber die \index{Hoehe!Rulebox@H\"ohe!Rulebox} +H\"ohe, Breite und Tiefe. Hier macht dann auch eine +`\verb|\hbox|' im \index{Horizontal!Modus} +horizontalen Modus Sinn, da so eine \index{Horizontal!Linie}horizontale +Linie ausgegeben werden kann. H\"atten wir die vorige Definition als: +\index{zzzdef@{\tt\char92 def}}\index{zzzhfill@{\tt\char92 hfill}} +\index{zzzhrule@{\tt\char92 hrule}}\index{zzzleaderfill@{\tt\char92 leaderfill}} +\index{zzzleaders@{\tt\char92 leaders}} +\begin{verbatim} +\def\leaderfill{\leaders\hbox to 1em{\hrule}\hfill} +\end{verbatim} +geschrieben, dann w\"are das Ergebnis + +$\alpha$\hrulefill $\omega$ + +Anfang\hrulefill Ende + +gewesen. + +Leaders k\"onnen nat\"urlich genauso im vertikalen Modus verwendet werden, +wobei, wie auch im horizontalen Modus kein \index{Zwischenraum} +Zwischenraum zwischen den +einzelnen Boxen gelassen wird. Wenn sie Boxen angeben, die eine +negative Breite, oder eine negative \index{Gesamt!Hoehe@Gesamt!H\"ohe} +Gesamth\"ohe (H\"ohe plus Tiefe) +haben, ignoriert \TeX\ die Angabe und verwendet einfach \index{Leim}Leim. + +\subsection{Anwendungen} +\subsubsection{Liegende geschweifte Klammern}\index{Klammer!Leader} +Mit den Befehlen +\index{zzzupbracefill@{\tt\char92 upbracefill}} +`\verb|\upbracefill|' und \index{zzzdownbracefill@{\tt\char92 downbracefill}} +`\verb|\downbracefill|' +k\"onnen ganze Textteile durch eine geschweifte Klammer \"uberzogen, oder +unterstrichen werden. Die vier Symbole `{\Mf\char122}', +`{\Mf\char123}', {\Mf\char124}' und `{\Mf\char125}' werden dabei durch +Ruleleader verbunden. +$$\vbox{\kern4pt +\hbox to 100pt{\downbracefill}\hbox to 50pt{\upbracefill}}$$ +\subsubsection{Pfeile} +Auch Pfeile lassen sich nat\"urlich auf diese Art verl\"angern. W\"urde man +eine Verl\"angerung eines Pfeilsymbols mit \index{Minuszeichen} +Minuszeichen oder +\index{Gleichheitszeichen}Gleichheitszeichen versuchen, dann w\"urden die einzelnen Zeichen durch +kleine \index{Leer!Stelle}Leerstellen getrennt. Statt dessen dient der Befehl +\index{zzzrightarrowfill@{\tt\char92 rightarrowfill}} +\begin{verbatim} +\hbox to 100pt{\rightarrowfill} +\end{verbatim} +zu dem Ergebnis `\hbox to 100pt{\rightarrowfill}' +\subsubsection{Vertikale Anwendung} +Um auch die Anwendung vertikaler Leader einmal zu zeigen dient diese +Textur\index{zzzcleaders@{\tt\char92 cleaders}} +$$\hbox to 2.5in{\cleaders + \vbox to .5in{\cleaders\hbox{\TeX}\vfil}\hfil}$$ +Sie wurde mit +\index{zzzvbox@{\tt\char92 vbox}} +\index{zzzvfil@{\tt\char92 vfil}} +\begin{verbatim} +$$\hbox to 2.5in{\cleaders + \vbox to .5in{\cleaders\hbox{\TeX}\vfil}\hfil}$$ +\end{verbatim} +erzeugt. +\section{WasDenn} +Schon oft wurden sie erw\"ahnt, hier nun endlich soll gekl\"art werden, +worum es sich dabei handelt. Es handelt sich dabei um eine M\"oglichkeit +Eigenschaften von \TeX\ zu \"andern, ohne dabei den Sourcecode von \TeX\ +selber allzu sehr zu modifizieren. Von dieser M\"oglichkeit sollte +allerdings nicht allzuviel Gebrauch gemacht werden, um die +Kompatibilit\"at der Texte nicht zu gef\"ahrden. In allen \TeX\ +Implementationen sind allerdings mindestens zwei `WasDenn' mit +eingebaut\index{File!Ausgabe} +\begin{enumerate} +\item Die Fileausgabe. +\item Der {\tt\char92 special} Befehl. +\end{enumerate} +\subsection{Fileausgabe}\index{Ausgabe!File} +Die M\"oglichkeit der Fileausgabe erlaubt die Verwendung der Ausgabe +durch andere Programme, inklusive \TeX\ selber. Sie wird z.B.\ f\"ur +\index{Inhaltsverzeichnis} +Inhaltsverzeichnisse und \"ahnliche Anwendungen gebraucht. Analog zur +\index{Eingabe!Vom File}Fileeingabe gibt es die Befehle +\index{zzzcloseout@{\tt\char92 closeout}}\index{zzznewwrite@{\tt\char92 newwrite}} +\index{zzzopenout@{\tt\char92 openout}} +\index{zzzwrite@{\tt\char92 write}} +\begin{verbatim} +\openout<Nummer>=<Filename> +\closeout<Nummer> +\write<Nummer>{<Tokenliste>} +\newwrite +\end{verbatim} +Ist die Nummer gr\"o\ss{}er als 15 oder kleiner als Null, dann wird wieder +in den Logfile, bzw.\ auf dem \index{Bildschirm} +Bildschirmen ausgegeben. Es gibt aber +einen wesentlichen Unterschied, zu den entsprechenden Eingabebefehlen. +Die Ausgabe erfolgt nicht beim Auftreten des Befehls, sondern bei dem +Auftreten des WasDenn bei der eigentlichen Ausgabe der +\index{Seite!Ausgabe}Seite an den +\index{File!DVI} +Dvi-File. Eine sofortige Ausgabe kann durch unmittlebares voranstellen +des Befehls \index{zzzimmediate@{\tt\char92 immediate}} +`\verb|\immediate|' vor dem Schreibbefehl erreicht werden. +Die Anweisung +\index{zzzwrite@{\tt\char92 write}} +\begin{verbatim} +\immediate\write16{Auf Wiedersehen!} +\end{verbatim} +Bewirkt die Ausgabe von `Auf Wiedersehen!' auf dem \index{Bildschirm} +Bildschirm, +\"ahnlich, wie auch der \index{zzzmessage@{\tt\char92 message}} +`\verb|\message|' Befehl, allerdings wird mit +dem `\verb|\write|' Befehl immer eine eigene Zeile ausgegeben. +\subsection{Der {\tt\char92 special} Befehl} +Der Befehl \index{zzzspecial@{\tt\char92 special}} +`\verb|\special|' erlaubt es eine (expandierte) Tokenliste +in den Dvi-File zu schreiben. Au\ss{}erdem wird im Dvi-File auch vermerkt, +an welcher Stelle im Originalfile der Befehl stand. Diese expandierte +Tokenliste kann dann z.B.\ durch ein Ausgabeprogramm ausgewertet +werden. Bislang gibt es {\em keine} Standardisierung f\"ur die +{\tt\char92 special} Befehle. +\chapter{Tabellen und Ausrichtungen} +Die so oft vorkommenden Tabellen k\"onnen in \TeX\ auf zwei verschiedene +Arten gesetzt werden. Zum einen kennt \TeX\ eine Tabelle, und dann das +Werkzeug der \index{Horizontal!Ausrichtung} +horizontalen Ausrichtung. Zun\"achst die Tabellen. +\section{Tabellen} +\subsection{Gleiche Spaltenbreite} +Mit der Anweisung \index{zzzcolumns@{\tt\char92 columns}} +\index{zzzsettabs@{\tt\char92 settabs}} +`\verb|\settabs n \columns|' wird die laufende Zeile +in $n$ Spalten gebrochen. Jede der so geschaffenen Spalten ist gleich +breit.\footnote{Einen entsprechenden Befehl gibt es in \LaTeX\ nicht!} +Die einzelnen Zeilen dieser Tabelle werden dann mit: +\begin{verbatim} +\+ <Text 1> & <Text 2> & .... \cr +\end{verbatim} +eingegeben. Die Eingabe von +\index{zzzcolumns@{\tt\char92 columns}} +\index{zzzsettabs@{\tt\char92 settabs}} +\begin{verbatim} +\settabs 4 \columns +\+&&Text in der dritten Spalte\cr +\+&Text in der zweiten Spalte\cr +\+\it Text in der ersten Spalte&&&und in der vierten Spalte\cr +\end{verbatim} +hat folgende Wirkung: + +\medskip\noindent\begin{tabular}{*{4}{p{30mm}}} + & & Text 3. Spalte & \\ + & Text 2. Spalte & & \\ +\multicolumn{2}{l}{\it Text in der 1. Spalte} & & und 4. Spalte +\end{tabular}\medskip + +Dieses Beispiel zeigt einige wichtige Eigenschaften der +Tabulatorbefehle von \TeX. +\begin{enumerate} +\item Die {\tt\char38} entsprechen den Tabulatorstopps einer normalen +Schreibmaschine. +\item Der Unterschied besteht darin, da\ss{} es {\em immer} genausoviele +Tabstopps in einer Zeile gibt, wie es {\tt\char38} Zeichen gibt, +besonders gut an der untersten Zeile zu sehen. +\item Jede Zeile wird mit einem `\verb|\cr|' beendet. Dies kann auch +geschehen, wenn noch nicht alle Spalten mit {\tt\char38} getrennt +sind. Es kann also weniger als die angegebene Anzahl von Spalten geben. +\item Leerzeichen hinter `\verb|&|' und `\verb|\+|' werden ignoriert. +\item Jeder \index{Spalte!Eintrag}Spalteneintrag stellt eine eigene +\index{Gruppe!Tabelleneintrag}Gruppe dar. Das ist +besonders an der ersten Spalte der letzten Zeile zu sehen, bei der f\"ur +die lokale \index{Schrift!Umschaltung} +Schriftumschaltung {\em keine} Gruppenklammern verwendet +werden brauchten. +\end{enumerate} + +Normalerweise bleiben die Spalten, die sie mit +\index{zzzsettabs@{\tt\char92 settabs}}`\verb|\settabs|' +eingerichtet haben bestehen, auch wenn sie danach wieder normalen Text +schreiben, der in normale Paragraphen umgebrochen wird. Sie k\"onnen die +Tabulatoren nat\"urlich auch innerhalb einer \index{Gruppe!Tabelle}Gruppe definieren, dann +gelten sie nur dort. Eine Globalisierung durch \index{zzzglobal@{\tt\char92 global}} +`\verb|\global|' ist +{\em nicht} zul\"a\ss{}ig. + +Normalerweise werden Tabellen zwischen Paragraphen gesetzt. Es ist +aber auch sinnvoll sie in \index{Box!Vbox} +\verb|vbox|en zu gebrauchen. Damit sind z.B.\ +Tabellen in \index{Formel!abgesetzte}abgesetzten Formeln m\"oglich. Mit +\index{zzzcolumns@{\tt\char92 columns}} +\index{zzzsettabs@{\tt\char92 settabs}} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +$$\vbox{\settabs 3 \columns + \+Dies ist&ein seltsames&Beispiel\cr + \+mit einem&drei Spalten&Format.\cr}$$ +\end{verbatim} +erhalten sie + +$$\begin{array}{p{4cm}@{\qquad}p{4cm}@{\qquad}p{4cm}} +Dies ist&ein seltsames&Beispiel\\ +mit einem&drei Spalten&Format.\\ +\end{array}$$ + +\subsection{Unterschiedliche Spaltenbreite} +Es ist nat\"urlich nicht immer w\"unschenswert, da\ss{} die Spalten alle +dieselbe Breite haben. F\"ur diesen Fall mu\ss{} der Tabulatorbefehl etwas +abge\"andert werden. Dazu dient eine \index{Muster!Zeile} +{\em Musterzeile}, die unmittelbar +hinter den `\verb|\settabs|' Befehl geschrieben wird und auch mit +`\verb|\cr|' abgeschlossen wird. +\index{zzzindent@{\tt\char92 indent}} +\begin{verbatim} +\settabs\+\indent&Horizontale Liste\quad&\cr % sample line +\+&Horizontale Liste&Kapitel 14\cr +\+&Vertikale Liste&Kapitel 15\cr +\+&Math. Liste&Kapitel 17\cr +\end{verbatim} +Ist ein Beispiel f\"ur eine derartige Liste. Die \index{Muster!Zeile} +Musterzeile wird dabei +{\em nicht} ausgegeben, so da\ss{} das Ergebnis so aussieht + +\medskip\begin{tabular}{ll} +Horizontale Liste&Kapitel 14\\ +Vertikale Liste&Kapitel 15\\ +Math. Liste&Kapitel 17 +\end{tabular}\medskip + +Bei der Konstruktion einer l\"angeren Tabelle mit dieser Methode mu\ss{} +man darauf achten, da\ss{} man den jeweils l\"angsten Spalteneintrag in die +\index{Muster!Zeile}Musterzeile schreibt. + +Mit \index{Einfuegung!Fuellmaterial@Einf\"ugung!F\"ullmaterial} +Einf\"ugung von \index{zzzhfill@{\tt\char92 hfill}} +`\verb|\hfill|' an geeigneten Stellen kann der Text +auch andere Ausrichtungen, als die \index{Linksbuendig@Linksb\"undig} +Linksb\"undigkeit erhalten. In {\em Plain} +\TeX\ wird definiert, da\ss{} jeder Spalteneintrag in eine \index{Box!Hbox} +Hbox mit der +Breite einer Spalte geschrieben wird, gefolgt von dem Befehl +\index{zzzhss@{\tt\char92 hss}} +`\verb|\hss|'. \index{zzzhfill@{\tt\char92 hfill}} +`\verb|\hfill|' ist der m\"achtigere Befehl, so da\ss{} damit +die Wirkung von `\verb|\hss|' unterbunden werden kann. Eine einfache +\index{Zentrierung} +Zentrierung ist allerdings mit einem vorgestellten `\verb|\hss|' +m\"oglich, das nachgestellte wird ja automatisch eingef\"ugt. Dies geht +allerdings nur in den ersten Spalten. In der letzten Spalte wird der +Text in eine Hbox geschrieben, die die nat\"urliche Breite des Textes +hat. + +Eine sehr gute Anwendungsm\"oglichkeit dieser variablen Tabulatorstops +bietet die Dokumentation von Programmsourcen. Stellen sie sich vor, +sie sollten folgendes Computerprogramm in der vorgestellten Weise +setzen. + +\medskip\begin{tabbing} +\qquad\= {\bf if}\= $\quad n<r\quad$\= {\bf then}\= $\quad n=n+1$\\ +\> \> \> {\bf else} \> {\bf begin} $print;\quad n:=0;$\\ +\> \> \> \> {\bf end;}\\ +\> {\bf while} $p>0$ {\bf do} \> \> \> \\ +\> \> {\bf begin} $\quad q:=link(p);\quad free(p);\quad p:=q;$ \> \> \\ +\> \> {\bf end;} \> \> \\ +\end{tabbing}\medskip + +Es w\"are ziemlich m\"uhsam f\"ur jeder der vorkommenden Tabulatorpositionen +einen Tabulatorstop zu setzen. Es ist nun zwar so, da\ss{} man durch +einf\"ugen eines weiteren `\verb|&|' jederzeit eine +\index{Neu!Spaltenposition}neue Position f\"ur +eine Spalte setzen kann, aber auch diese Methode w\"are noch ziemlich +un\"ubersichtlich. Es gibt einen noch einfacheren Weg das obige Ergebnis +zu erreichen. Die gesetzten Tabulatorpositionen k\"onnen mit dem Befehl +\index{zzzcleartabs@{\tt\char92 cleartabs}} +`\verb|\cleartabs|' auch alle wieder gel\"oscht werden, um dann neue zu +setzen. Somit konnte das obige Programm einfach mit +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +$$\vbox{\+\bf if $n<r$ \cleartabs&\bf then $n=n+1$\cr +\+&\bf else & {\bf begin} ${\it print}$; $n:=0$;\cr +\+&&{\bf end};\cr +\+\cleartabs {\bf while} $p>0$ {\bf do}\cr +\+\quad&{\bf begin} $q:=link(p)$; $free(p)$; $p:=q$;\cr +\+&\{\bf end};\cr +\end{verbatim} +gesetzt werden. + +Es d\"urfen keine `\verb|\+|' Zeilen geschachtelt werden. Sie k\"onnen +also sozusagen keine Tabellen innerhalb von Tabellen definieren. Da +diese Tabellen in \index{Box!Tabellen} +Boxen gleicher Breite aufgebaut werden, k\"onnen sie +mit der Befehlsfolge \index{zzzshowbox@{\tt\char92 showbox}} +`\verb|\showbox\tabs|' genau ausgeben lassen, was +bei der Konstruktion von Tabellen geschieht. + +\section{Ausrichtungen} +Es gibt noch eine weitere M\"oglichkeit in \TeX\ Tabellen zu setzen. Sie +basiert auf der Idee einer \index{Schablone} Schablone. Mit der Eingabe +von +\index{zzzhalign@{\tt\char92 halign}}\index{zzzindent@{\tt\char92 indent}} +\begin{verbatim} +\halign{\indent#\hfil&\quad#\hfil\cr +Horizontale Liste&Kapitel 14\\ +Vertikale Liste&Kapitel 15\\ +Math. Liste&Kapitel 17\cr} +\end{verbatim} +erh\"alt man dasselbe Ergebnis, wie schon zuvor mit dem `\verb|\+|' +Befehl, n\"amlich: + +\medskip\begin{tabular}{ll} +Horizontale Liste&Kapitel 14\\ +Vertikale Liste&Kapitel 15\\ +Math. Liste&Kapitel 17 +\end{tabular}\medskip + +Dieses Beispiel zeigt aber doch im wesentlichen, wie der +\index{zzzhalign@{\tt\char92 halign}} +`\verb|\halign|' Befehl funktioniert.\footnote{halign kommt von +`horizontal alignment', was soviel beeutet, wie +\index{Horizontal!Ausrichtung}`horizontale +Ausrichtung'.} Die erste Zeile, nicht im physikalischen Sinne, sondern +der Text bis zum ersten `\verb|\cr|', stellt die \index{Schablone} +Schablone f\"ur die +weiteren Aktivit\"aten dar. Dieses Beispiel enth\"alt zwei +\index{Muster!Eintrag}Mustereintr\"age +in der Schablone, n\"amlich + +\medskip{\tt\char92 indent\char35\char92 hfil} und {\tt\char92 +quad\char35\char92 hfil}\medskip + +Jeder dieser \index{Muster!Eintrag}Mustereintr\"age enth\"alt genau ein `\verb|#|' Zeichen, an +der sp\"ater der Text der Spalte eingef\"ugt wird. In der ersten Zeile +wird so der Eintrag +\index{zzzhfil@{\tt\char92 hfil}}\index{zzzindent@{\tt\char92 indent}} +\begin{verbatim} +\indent Horizontale Liste \hfil +\end{verbatim} +eingetragen. Nun zur Frage, was denn das `\verb|\hfil|' in dem Eintrag +soll. Nun. Im \index{zzzhalign@{\tt\char92 halign}} +`\verb|\halign|' Befehl werden zun\"achst {\em alle} +Spalten eingelesen, und \TeX\ setzt dann die Breite der Spalten nach +dem breitesten vorkommenden Eintrag. Da ein aktueller Eintrag ggf.\ +schmaler ist, als der breiteste, mu\ss{} mit einem `\verb|\hfil|' der +restliche Platz aufgef\"ullt werden, um keine \index{Fehler!Meldung} +Fehlermeldung zu erhalten. + +Es gibt einige Unterschiede zwischen dem +\index{zzzhalign@{\tt\char92 halign}}`\verb|\halign|' Befehl und +dem `\verb|\+|'~Befehl. +\index{Eingabe!Tabellen}\index{Horizontal!Ausrichtung} +\begin{enumerate} +\item Beim dem Befehl zur horizontalen Ausrichtung wird die Breite der +Spalten nach dem breitesten Eintrag automatisch berechnet. +\item Jeder `\verb|\halign|' Befehl berechnet seine Spaltenbreiten f\"ur +sich. Wenn sie in zwei verschiedenen Tabellen die selbe Ausrichtung +haben wollen, dann m\"ussen sie sich schon einiger Tricks bedienen. +\item Gro\ss{}e Tabellen lassen sich schlecht mit `\verb|\halign|' +erstellen, da die ganze Tabelle im \index{Speicher!Tabelle} +Speicher gehalten werden mu\ss{} und es +deshalb zu Problemen kommen kann. +\item Der `\verb|\halign|' Befehl ist wesentlich schneller, als der +`\verb|\+|'~Befehl, da es sich um eine eingebaute Funktion von \TeX\ +und nicht um ein Makro handelt. +\item Man kann sich die Eingabe vereinfachen. Statt der obigen Eingabe +w\"are z.B. + +\medskip +{\tt\char92 halign\char123\char92 indent\char35\ Liste\char92 +hfil\char38\char92 quad Kapitel \char35\char92 cr}\\{\tt +Horizontale\char38 14\char92 cr Vertikale\char38 15\char92 cr +Math.\char38 17\char92 cr\char125}\medskip + +auch m\"oglich gewesen. Man sollte sich allerdings nicht {\em zu} viel +M\"uhe mit der \index{Optimierung}Optimierung geben (man h\"atte die `1' der +\index{Kapitel!Nummer}Kapitelnummer +noch mit in die \index{Schablone} +Schablone \"ubernehmen k\"onnen), da die Zeit, die man +daf\"ur aufwenden mu\ss{} in keinem Verh\"altnis zum Erfolg steht. +\item Wenn die Spaltenbreiten h\"aufig wechseln, so wie in dem +Programmbeispiel, sollte man lieber mit dem `\verb|\+|' Befehl +arbeiten. +\end{enumerate} +\subsection{Beispiel zur Anwendung} +Der wichtigste Punkt bei der Erstellung von Tabellen mit dem +\index{zzzhalign@{\tt\char92 halign}} +`\verb|\halign|' Befehl besteht in der g\"unstigen Konstruktion der +\index{Schablone} +Schablone. Hier sollte man ruhig etwas Zeit investieren, die sich +sp\"ater erst auszahlt. Wenn sie z.B.\ die folgende Tabelle setzen +wollen + +\medskip\begin{tabular}{rccl} +{\em Name} & {\em Geschlecht} & {\em Alter} & {\em Schul-} \\ + & & & {\em bildung} \\[1ex] +\bf Karl & \em m\"annlich & 20 & Hauptschule\\ +\bf Tina & \em weiblich & 22 & Abitur\\ +\bf Otto & \em m\"annlich & 21 & Mittl. Reife\\ +\bf Jupp & \em m\"annlich & 20 & Abitur +\end{tabular}\medskip + +Dann w\"unscht man sich nat\"urlich eine einfache \index{Eingabe!Tabellen} +Eingabe. Die zweite Zeile sollte am besten mit +\begin{verbatim} +Tina & weiblich & 22 & Abitur\cr +\end{verbatim} +eingegeben werden k\"onnen. Die oberste Zeile mu\ss{} nat\"urlich gesondert +behandelt werden, aber es soll m\"oglich sein, da\ss{} die rechte +Ausrichtung der ersten Spalte\index{Spalte!Tabelle!Ausrichtung}, +die linke der letzten und die +\index{Zentrierung} +Zentrierung der mittleren Spalten automatisch vorgenommen wird. Ebenso +w\"are es w\"unschenswert, wenn die \index{Schrift!Umschaltung} +Schriftumschaltung in der ersten und +der zweiten Spalte automatisch erfolgen w\"urde. Dies ist tats\"achlich +m\"oglich mit folgender \index{Schablone}Schablone +\index{zzzhalign@{\tt\char92 halign}}\index{zzhfil@{\tt\char92 hfil}} +\begin{verbatim} +\halign{\hfil\bf#&\quad\hfil\it#\hfil&\quad\hfil#\hfil&\quad#\hfil\cr +\end{verbatim} +Jetzt brauchen sie nur noch die Zeilen, entsprechend der `Tina'-Zeile +einzugeben, und sie erhalten das gew\"unschte Ergebnis. In der +Titelzeile ist allerdings bei jedem Eintrag die Angabe der +\index{Schrift!Form}Schriftform +notwendig, um die Vorgaben zu \"uberschreiben. + +Die Tabelle kann \"ubrigens mit dem Befehl \index{zzzopenup@{\tt\char92 openup}} +`\verb|\openup|' etwas +auseinandergezogen werden. Mit der Angabe `\verb|\openup2pt|' entsteht + +\medskip\begin{tabular}{rccl} +{\em Name} & {\em Geschlecht} & {\em Alter} & {\em Schul-} \\[2pt] + & & & {\em bildung} \\[1ex] +\bf Karl & \em m\"annlich & 20 & Hauptschule\\[2pt] +\bf Tina & \em weiblich & 22 & Abitur\\[2pt] +\bf Otto & \em m\"annlich & 21 & Mittl. Reife\\[2pt] +\bf Jupp & \em m\"annlich & 20 & Abitur +\end{tabular}\medskip + +Der zus\"atzliche \index{Zwischenraum} +Zwischenraum zwischen der Titelzeile und dem Rest der +Tabelle wurde mit der Angabe von +\index{zzznoalign@{\tt\char92 noalign}} +\index{zzzsmallskip@{\tt\char92 smallskip}} +\begin{verbatim} +\noalign{\smallskip} +\end{verbatim} +erreicht. Grunds\"atzlich ist es immer m\"oglich mit diesem Befehl +vertikale Elemente in eine Tabelle einzuf\"ugen, die nicht zu der +Tabelle selber geh\"oren. Von dieser M\"oglichkeit kann man Gebrauch +machen, wenn man etwas zwischen zwei Zeilen schreiben m\"ochte. Mit der +Eingabe von +\index{zzzhalign@{\tt\char92 halign}}\index{zzzhfil@{\tt\char92 hfil}} +\index{zzznoalign@{\tt\char92 noalign}} +\begin{verbatim} +\halign{#\hfil&\quad#\hfil\cr +Erste & Spalte \cr\noalign{Dazwischen} +Zweite & Spalte\cr} +\end{verbatim} +erhalten sie z.B. + +\medskip\begin{tabular}{ll} +\qquad Erste & Zeile \\ +Dazwischen\\ +\qquad Zweite & Zeile +\end{tabular}\medskip + +\subsection{Weitere Befehle} +Es ist auch m\"oglich, da\ss{} sie \TeX\ entscheiden lassen, wieviel Platz +zwischen die \index{Spalte!Tabelle} +Tabellenspalten gesetzt werden soll. Sie k\"onnen also auf +den \index{zzzquad@{\tt\char92 quad}} +`\verb|\quad|' Befehl zwischen den Spalten verzichten. Statt +dessen geben sie an, wieviel {\tt tabskipglue} zwischen den Spalten +verwendet werden soll. Wenn sie also statt der obigen +\index{Schablone}Schablone\index{zzzhalign@{\tt\char92 halign}} +\index{zzzhfil@{\tt\char92 hfil}} +\index{zzztabskip@{\tt\char92 tabskip}} +\begin{verbatim} +\tabskip=1em plus 2em minus.5em +\halign{\hfil\bf#&\hfil\it#\hfil&\hfil#\hfil&#\hfil\cr +\end{verbatim} +schreiben, dann erhalten sie trotzdem die Tabelle in der Form, wie sie +sie schon gesehen haben, als + +\medskip\begin{tabular}{rccl} +{\em Name} & {\em Geschlecht} & {\em Alter} & {\em Schul-} \\[2pt] + & & & {\em bildung} \\[1ex] +\bf Karl & \em m\"annlich & 20 & Hauptschule\\[2pt] +\bf Tina & \em weiblich & 22 & Abitur\\[2pt] +\bf Otto & \em m\"annlich & 21 & Mittl. Reife\\[2pt] +\bf Jupp & \em m\"annlich & 20 & Abitur +\end{tabular}\medskip + +Der \index{Leim} +Tabskip-Leim wird auch vor sie erste und hinter die letzte Spalte +gesetzt, so da\ss{} sie mit +\index{zzzhalign@{\tt\char92 halign}} +\begin{verbatim} +\halign to... \halign spread +\end{verbatim} +genauso verfahren k\"onnen, wie bei den entsprechenden Boxbefehlen. + +Die Befehlsfolge +\index{zzzhsize@{\tt\char92 hsize}}`\verb|\halign| \verb|to| \verb|\hsize|' wird +allerdings nur dann richtig verstanden, wenn der Tabskip-Leim auch die +n\"otige F\"ahigkeit zur Streckung besitzt. Falls dies nicht der Fall ist +wird eine \index{Fehler!Meldung}Fehlermeldung auf dem \index{Bildschirm} +Bildschirm und im \index{File!Log}Logfile ausgegeben. +Das geschieht auch, wenn ein Eintrag so gro\ss{} oder klein ist, da\ss{} die +angegebene \index{Groesse!Leim@Gr\"o\ss{}e!Leim} +Gr\"o\ss{}e des Leims nicht ausreicht um eine passende Spalte +daraus zu machen. + +Die Werte f\"ur den Tabskip-Leim k\"onnen auch in der \index{Schablone} +Schablone ge\"andert +werden. Es m\"ussen also nicht f\"ur alle Spalten die gleichen Werte +verwendet werden. Damit k\"onnen sie einzelne Spalten von den anderen +absetzen. + +\TeX\ \"ubernimmt die \index{Schablone} +Schablone $1:1$, d.h.\ da\ss{} nichts in der Schablone +expandiert wird. Die einzigen Befehle, die \TeX\ innerhalb der +Schablone erkennt sind +\index{zzzspan@{\tt\char92 span}} +\index{zzztabskip@{\tt\char92 tabskip}} +\begin{verbatim} +& # \cr \span \tabskip +\end{verbatim} +Der Befehl `\verb|\span|' sorgt daf\"ur, da\ss{} das n\"achste Token in der +Schablone {\em doch} expandiert wird.\footnote{{\em Innerhalb} der +Tabelle hat der Befehl eine andere Wirkung, die sp\"ater erkl\"art wird.} +Dies f\"uhrt zu einem besonderen Verhalten aller `\verb|\if|' Befehle +innerhalb von Tabellen. Verwenden sie diese Befehle besser nicht +innerhalb von Tabellen, wenn sie Probleme vermeiden wollen. + +Es kann vorkommen, da\ss{} alle Spalten, bis auf eine oder zwei eine +\"ahnliche Form haben, so da\ss{} sich entsprechende \index{Muster!Fuer +Schablone@Muster!F\"ur Schablone}Muster in der \index{Schablone}Schablone +empfehlen. F\"ur die Eintr\"age, die dieser Form nicht entsprechen, gibt +es den Befehl \index{zzzomit@{\tt\char92 omit}} +`\verb|\omit|'. Wenn er als erstes im Eintrag steht, +wird das Muster aus der Schablone durch ein einfaches `\verb|#|' +ersetzt. + +\subsection{Besondere Tabellen} +\subsubsection{Dezimalpunkte} +Wie geht man vor, wenn man eine Tabelle schreiben will, die z.B.\ +Geldwerte enthalten soll, bei denen nat\"urlich der Dezimalpunkt +\"ubereinander stehen soll. Man kann nat\"urlich aus jeder Zahl drei +\index{Spalte!Zahlen} +Spalten machen, und die \index{Zwischenraum} +Zwischenr\"aume so setzen, da\ss{} die mittlere +Spalte den Dezimalpunkt enth\"alt und trotzdem noch gut aussieht. Es +gibt aber auch eine andere M\"oglichkeit. Der Trick besteht darin, da\ss{} +alle \index{Ziffer} +Ziffernzeichen dieselbe Breite haben. Man kann nun ein Zeichen, +das sonst nicht gebraucht wird zu einem \index{Aktiv!Zeichen} +aktiven Zeichen machen und +durch dieses Zeichen einen \index{Leer!Raum} +Leerraum ausgeben lassen, der genau der +Breite eines \index{Ziffer} +Ziffernzeichens entspricht. Wenn man mit der Befehlsfolge +\index{zzzactive@{\tt\char92 active}}\index{zzzcatcode@{\tt\char92 catcode}} +\index{zzzdef@{\tt\char92 def}}\index{zzzdigitwidth@{\tt\char92 digitwidth}} +\index{zzzkern@{\tt\char92 kern}}\index{zzznewdimen@{\tt\char92 newdimen}} +\index{zzzsetbox@{\tt\char92 setbox}} +\begin{verbatim} +\newdimen\digitwidth +\setbox0=\hbox{\rm0} +\digitwidth=\wd0 +\catcode`?=\active +\def?{\kern\digitwidth} +\end{verbatim} +Das Zeichen `\verb|?|' zu einem aktiven Zeichen gemacht hat, dann kann +man die Zahlen $123.45$ und $6.789$ als `\verb|123.45?|' und +`\verb|??6.789|' in dem Eintrag eingeben, und sie werden beide genau +mit dem Dezimalpunkt \"ubereinander gesetzt. + +\subsubsection{Lange Tabellen} +Was ist mit Tabellen, wie dieser + +\index{zzzcal@{\tt\char92 cal}} +\medskip\begin{tabular}{r@{$=$}*{15}{c}} +$n$ & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & +$\ldots$ \\ +${\cal G}(n)$ & 1 & 2 & 4 & 3 & 6 & 7 & 8 & 16 & 18 & 25 & 32 & 11 & +64 & 31 & $\ldots$ +\end{tabular}\medskip + +Mit Sicherheit w\"are es h\"ochst m\"uhsam f\"ur diese Tabelle eine +\index{Schablone}Schablone +zu schreiben, insbesondere, da die Tabelle nur zwei Zeilen hat. Es +gibt aber einen einfacheren Weg. Wenn sie an einer Stelle der +Schablone ein \index{Kaufmannsund}\index{Doppelt!Kaufmannsund} +doppeltes `\verb|&|' schreiben, dann setzt \TeX\ die +folgenden Eintr\"age bis zum `\verb|\cr|' beliebig oft fort. +\index{zzzcdots@{\tt\char92 cdots}} + +\medskip +$t_1\,${\tt\char38}$\,t_2\,${\tt\char38}$\,t_3\,${\tt\char38\char38} +$\,t_4\,${\tt\char38}$\,t_5\,${\tt\char92 cr} +\ wird verstanden als \ +$t_1\,${\tt\char38}$\,t_2\,${\tt\char38}$\,t_3\,${\tt\char38}$\,t_4\,$ +{\tt\char38}$\,t_5\,${\tt\char38}$\,t_4\,${\tt\char38}$\,t_5\,$ +{\tt\char38}$\,t_4\,${\tt\char38}$\,\,\cdots\,$ + +und + +{\tt\char38}$t_1\,${\tt\char38}$\,t_2\,${\tt\char38}$\,t_3\,${\tt\char38} +$\,t_4\,${\tt\char38}$\,t_5\,${\tt\char92 cr} +\ wird verstanden als \ +$t_1\,${\tt\char38}$\,t_2\,${\tt\char38}$\,t_3\,${\tt\char38}$\,t_4\,$ +{\tt\char38}$\,t_5\,${\tt\char38}$\,t_1\,${\tt\char38}$\,t_2\,$ +{\tt\char38}$\,t_3\,${\tt\char38}$\,\,\cdots\,.$\medskip + +Der evtl.\ gesetzte Tabskip-Leim wird in die Kopie \"ubernommen. Somit +l\"a\ss{}t sich die \index{Schablone}Schablone der obigen Tabelle als +\index{zzzhfil@{\tt\char92 hfil}} +\begin{verbatim} +$\hfil#$ =&&\ \hfil#\hfil\cr +\end{verbatim} +schreiben. + +\subsection{Breite Eintr\"age} +Mitunter ist es n\"otig, da\ss{} sich ein Eintrag einer Tabelle \"uber mehr +als eine Spalte erstreckt. F\"ur diesen Fall bieten sich zwei +M\"oglichkeiten an. +\subsubsection{Verstecken der Breite} +In {\em Plain} \TeX\ wird der Befehl +\index{zzzhidewidth@{\tt\char92 hidewidth}}`\verb|\hidewidth|' als +\index{zzzhskip@{\tt\char92 hskip}} +\begin{verbatim} +\hskip-1000pt plus 1fill +\end{verbatim} +definiert. Er hat also eine extreme negative, nat\"urliche Breite, kann +aber beliebig gestreckt werden. Wenn sie diesen Befehl rechts hinter +einen Spalteneintrag schreiben, erscheint es f\"ur \TeX, als habe er +keine Breite, und der Eintrag ragt rechts \"uber seine +\index{Box!Tabellen}Box hinaus. +Analog arbeitet der Befehl, wenn er links vor einen Eintrag +geschrieben wird. Sp\"ater wird noch eine n\"utzliche Eigenschaft dieses +Befehls gezeigt, wenn er rechts {\em und} links vom Eintrag steht. +\subsubsection{Eintr\"age \"uber mehrere Spalten} +Statt der obigen Methode k\"onnen sie auch den Befehl +\index{zzzspan@{\tt\char92 span}} +`\verb|\span|' anstelle des `\verb|&|' verwenden.\footnote{Hier hat +dieser Befehl eine {\em ganz} andere Wirkung, als in der +\index{Schablone}Schablone!} +\TeX\ behandelt die Eintr\"age vor und hinter diesem Befehl genauso, als +wenn dort ein `\verb|&|' st\"unde, schreibt sie aber anschlie\ss{}end in +eine Box, die sich \"uber die Breite zweier Eintr\"age erstreckt. + +Sie k\"onnen den Befehl zusammen mit \index{zzzomit@{\tt\char92 omit}} +`\verb|\omit|' verwenden, um +eventuell auftretende automatische Eintr\"age zu unterbinden. +Schlie\ss{}lich gibt es noch den Befehl +\index{zzzmultispan@{\tt\char92 multispan}}`\verb|\multispan|', dem eine +Nummer folgen mu\ss{}, die angibt, wieviele \index{Spalte!Zusammenfassen} +Spalten zusammengefa\ss{}t werden +sollen. Sollen mehr als $9$ Spalten zusammengefa\ss{}t werden, mu\ss{} die +Zahl in geschweiften \index{Klammer!Omit}Klammern angegeben werden. + +Sie k\"onnen sich die Wirkung der Befehle noch einmal am folgenden +Beispiel verdeutlichen. + +\medskip\begin{tabular}{ccc} +Eins & Zwei & Drei \\ +\multicolumn{2}{c}{Eins-Zwei} & Drei\\ +Eins &\multicolumn{2}{c}{Zwei-Drei}\\ +\multicolumn{3}{c}{Eins-Zwei-Drei} +\end{tabular}\medskip + +wurde mit +\index{zzzhalign@{\tt\char92 halign}}\index{zzzhfil@{\tt\char92 hfil}} +\index{zzzmultispan@{\tt\char92 multispan}} +\index{zzzspan@{\tt\char92 span}} +\index{zzztabskip@{\tt\char92 tabskip}} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +$$\tabskip=3em +\vbox{\halign{&\hfil#\hfil\cr +Eins&Zwei&Drei\cr +Eins-\span Zwei&Drei\cr +Eins&Zwei-\span Drei\cr +\multispan3 Eins-Zwei-Drei\cr}}$$ +\end{verbatim} +erzeugt. +\subsection{Gerahmte Tabellen} +\index{Knuth. D.} +D.~Knuth spricht davon, da\ss{} die Erstellung von gerahmten Tabellen mit +zum Schwierigsten geh\"ort, was in \TeX\ realisiert werden kann. +Tats\"achlich ergeben sich {\em einige} Schwierigkeiten, wenn man sich +genauer mit diesem Thema besch\"aftigt.\footnote{Die Schwierigkeiten +sind so gro\ss{}, da\ss{} ich jedem nur empfehlen kann, nur im \"aussersten +Notfall {\em nicht} die Tabular-Umgebung von \LaTeX\ zu benutzen.} + +Zun\"achst m\"ussen sie den \index{Zwischenraum} +Zwischenraum zwischen den Zeilen ausschalten, +und den n\"otigen \index{Abstand!Zeilen} +Zeilenabstand durch `Struts' in der \index{Schablone}Schablone +aufbauen, da sonst die senkrechten \index{Linie!Senkrecht} +Linien nicht aneinander sto\ss{}en +w\"urden. Dies geschieht mit dem Befehl +\index{zzzoffinterlineskip@{\tt\char92 offinterlineskip}} +`\verb|\offinterlineskip|'. Die +H\"ohe der senkrechte Linie braucht nicht spezifiziert zu werden, da +\TeX\ die Boxh\"ohe vorgibt und sich der unspezifizierte Befehl an die +umgebende Box anpa\ss{}t. Allerdings mu\ss{} jeder senkrechte Strich in eine +eigene Spalte geschrieben werden. Im \TeX Book findet sich folgendes +Beispiel +\index{zzzhalign@{\tt\char92 halign}} +\index{zzzhfil@{\tt\char92 hfil}} +\index{zzzhrule@{\tt\char92 hrule}} +\index{zzzmultispan@{\tt\char92 multispan}} +\index{zzzoffinterlineskip@{\tt\char92 offinterlineskip}} +\index{zzzstrut@{\tt\char92 strut}} +\index{zzzvbox@{\tt\char92 vbox}} +\index{zzzvrule@{\tt\char92 vrule}} +\begin{verbatim} +\vbox{\offinterlineskip +\hrule +\halign{&\vrule#& + \strut\quad\hfil#\quad\cr +\multispan5\hrulefill\cr +height2pt&\omit&&\omit&\cr +&Year\hfil&&World Population&\cr +height2pt&\omit&&\omit&\cr +\multispan5\hrulefill\cr +height2pt&\omit&&\omit&\cr +&8000\BC&&5,000,000&\cr +&50\AD&&200,000,000&\cr +&1650\AD&&500,000,000&\cr +&1850\AD&&1,000,000,000&\cr +&1945\AD&&2,300,000,000&\cr +&1980\AD&&4,400,000,000&\cr +height2pt&\omit&&\omit&\cr} +\hrule} +\end{verbatim} +An diesem Beispiel k\"onnen sie sehen, wie vergleichsweise k\"ummerlich +die Befehle f\"ur gerahmte Tabellen in {\em Plain} \TeX\ tats\"achlich ist, denn +das Ergebnis ist gerade mal + +\medskip\begin{tabular}{|r|r|}\hline +Year\hfil & World Population \\ \hline +8000 B.C. & 5,000,000\\ +50 A.D. & 200,000,000\\ +1650 A.D. & 500,000,000\\ +1850 A.D. & 1,000,000,000\\ +1945 A.D. & 2,300,000,000\\ +1980 A.D. & 4,400,000,000\\ \hline +\end{tabular}\medskip + +Etwas verwirrend k\"onnten noch die Zeilen +\index{zzzomit@{\tt\char92 omit}} +\begin{verbatim} +height2pt&\omit&&\omit&\cr +\end{verbatim} +sein. Sie bewirken, da\ss{} auch der Anschlu\ss{} zu den waagerechten Zeilen +geschafft wird. +\subsection{Hilfen bei Tabellen} +Wenn bei der Konstruktion einer Tabelle etwas schief geht, empfiehlt +sich folgendes Vorgehen. F\"ugen sie an einer Stelle, an der sie den +\index{Fehler!Behebung} +Fehler vermuten eine unbekannte \index{Kontrollsequenz} +Kontrollsequenz ein, ich benutze f\"ur +diese Zwecke immer `\verb|\fritz|'. Dann k\"onnen sie mit dem Befehl +\index{zzzshowlists@{\tt\char92 showlists}} +`\verb|\showlists|' eine genauer Information dar\"uber bekommen, was +\TeX\ an dieser Stelle gerade macht. + +Eine weitere Hilfe interessiert wohl mehr die \index{Makro!Design} +Makrodesigner. Jede +Zeile eines Alignments {\em mu\ss{}} mit dem Befehl `\verb|\cr|' +abgeschlossen werden. Sie k\"onnen durch das Primitv +\index{zzzcrcr@{\tt\char92 crcr}}`\verb|\crcr|' dem +Fall vorbeugen, da\ss{} ein Anwender diesen `\verb|\cr|' Befehl vergi\ss{}t. +Die Wirkung dieses Befehls ist folgende. Steht er unmittelbar hinter +einem `\verb|\cr|', dann wirkt er gar nicht, steht er woanders, dann +wirkt er wie ein `\verb|\cr|' Befehl. + +Wenn ihnen selber die andauernde Tipperei der `\verb|\cr|' Befehle +zuviel wird, dann gibt es noch eine M\"oglichkeit. Schlie\ss{}en sie ihre +Tabelle in eine eigene Gruppe ein und stellen sie dann innerhalb der +Gruppe der Tabelle die Befehle +\index{zzzlet@{\tt\char92 let}}\index{zzzobeylines@{\tt\char92 obeylines}} +\begin{verbatim} +\let\par=\cr +\obeylines +\end{verbatim} +voran. Durch den `\verb|\obeylines|' Befehl wird jede Zeile wie ein +eigener \index{Absatz} +Absatz behandelt. Das automatisch eingef\"ugte +\index{zzzpar@{\tt\char92 par}}`\verb|\par|' +wird als `\verb|\cr|' interpretiert. Diese Vorgehensweise empfiehlt +sich aber nur bei l\"angeren Tabellen, die sie aber sowieso mit +`\verb|\+|' ausf\"uhren sollten. Dort funktioniert dieser Trick aber +leider nicht. + +\chapter{Ausgaberoutinen}\index{Ausgabe!Routine} +In einem vorhergehenden Kapitel haben sie schon gesehen, wie \TeX\ aus +der langen Reihe von Token zun\"achst Paragraphen und dann Seiten macht. +Diese Seiten bestehen zun\"achst allerdings nur aus dem eigentlichen +\index{Seite!Text}Seitentext und den \index{Einfuegung@Einf\"ugung} +Einf\"ugungen, z.B.\ \index{Fussnote@Fu\ss{}note}Fu\ss{}noten. Was noch fehlt sind +die \index{Kopf!Zeile}Kopf- und \index{Fusszeile@Fu\ss{}note} +Fu\ss{}zeilen.\footnote{Man beachte den Unterschied zwischen +Fu\ss{}noten und Fu\ss{}zeilen. In letzteren stehen \"ublicherweise die +\index{Seite!Nummer} +Seitennummern o.\"a.} Diese Erg\"anzungen werden von einer sogenannten +Outputroutine noch zu der Seite hinzugef\"ugt. +\section{Die Outputroutine von {\em Plain} \TeX} +Normalerweise ist eine \index{Seite!Masse@Seite!Ma\ss{}e} +Seite von {\em Plain} \TeX\ $8\frac{1}{2}$ Inch breit und 11 +Inch hoch, dazu ein \index{Rand!Bei Plain@Rand!Bei {\it Plain}} +Rand von einem Inch an allen vier Seiten. Diese +Werte k\"onnen nat\"urlich ver\"andert werden. Dazu dienen die Befehle +\index{zzzhsize@{\tt\char92 hsize}} +`\verb|\hsize|' und \index{zzzvsize@{\tt\char92 vsize}} +`\verb|\vsize|'. {\em Plain} \TeX\ setzt +`\verb|\hsize=6.5in|' und erh\"alt damit eine \index{Seite!Breite} +Seitenbreite von +$8\frac{1}{2}$ Inch (denken sie an die beiden \index{Raender@R\"ander}R\"ander von einem Inch +und `\verb|\vsize=8.9in|'. Nicht, wie erwartet `\verb|9in|', da {\em Plain} +\TeX\ keinen Platz f\"ur die \index{Seite!Nummer}Seitennummer reserviert. + +Sie sollten diese beiden Werte nicht zu oft \"andern. Am besten nur ganz +zu Beginn eines Textes, oder wenn sie sicher sind, da\ss{} \TeX\ alle +Seiten ausgegeben hat. + +Sie k\"onnen dar\"uber hinaus auch noch die gesamte Seite auf dem Papier +verschieben und zwar mit den Befehlen \index{zzzhoffset@{\tt\char92 hoffset}} +`\verb|\hoffset|' und\index{zzzvoffset@{\tt\char92 voffset}} +`\verb|\voffset|'. Die Angabe +\begin{verbatim} +\hoffset=.5in \voffset=-1in +\end{verbatim} +verschiebt ihre Seite um ein halbes Inch nach rechts und ein Inch nach +oben. Sie sollten aber auf die physikalischen Grenzen ihres Mediums, +meist Papiers, achten, da \TeX\ daf\"ur keine Kontrolle bereitstellt. + +Die einfachste Art die Outputroutine von {\em Plain} \TeX\ zu \"andern besteht +in der Angabe von +\index{zzznopagenumbers@{\tt\char92 nopagenumbers}} +\begin{verbatim} +\nopagenumbers +\end{verbatim} +Mit diesem Befehl verhindern sie die \index{Ausgabe!Seitennummern} +Ausgabe von \index{Seite!Nummer}Seitennummern, was +vor allem bei kurzen Texten recht hilfreich sein d\"urfte. Dies ist aber +nur ein Spezialfall. Generell k\"onnen die \index{Kopf!Zeile}Kopf- und die +\index{Fusszeile@Fu\ss{}note}Fu\ss{}zeile einer +Seite mit den Befehlen +\index{zzzfootline@{\tt\char92 footline}}\index{zzzheadline@{\tt\char92 headline}} +\begin{verbatim} +\headline={<Kopfzeile>} +\footline={<Fusszeile>} +\end{verbatim} +gesetzt werden. Mit \index{zzzhrulefill@{\tt\char92 hrulefill}} +`\verb|\headline={\hrulefill}|' w\"urde z.B.\ vor +jede Seite ein waagerechter Strich gezogen. Die generelle Idee ist es, +da\ss{} die Outputroutine von {\em Plain} \TeX\ vor die Seite ein +\index{zzzline@{\tt\char92 line}} +\index{zzzthe@{\tt\char92 the}} +\begin{verbatim} +\line{\the\headline} +\end{verbatim} +und hinter die Seite ein +\index{zzzfootline@{\tt\char92 footline}} +\begin{verbatim} +\line{\the\footline} +\end{verbatim} +schreibt, wobei die \index{Kopf!Zeile}Kopf- bzw.\ \index{Fusszeile@Fu\ss{}note} +Fu\ss{}zeile etwas von der eigentlichen +Seite abgesetzt wird. Das Makro \index{zzznopagenumbers@{\tt\char92 nopagenumbers}} +`\verb|\nopagenumbers|' ist also +einfach eine \index{Abkuerzung@Abk\"urzung}Abk\"urzung f\"ur +\index{zzzfootline@{\tt\char92 footline}}\index{zzzhfil@{\tt\char92 hfil}} +\begin{verbatim} +\footline={\hfil} +\end{verbatim} +Normalerweise ist +\index{zzzfolio@{\tt\char92 folio}}\index{zzzhss@{\tt\char92 hss}} +`\verb|\footline={\hss\tenrm\folio\hss}|' definiert, +wobei `\verb|\folio|' die \index{Seite!Nummer} +Seitennummer ausgibt. Die Umschaltung auf +die \index{Schrift!Umschaltung} +Schrift ist notwendig, da sonst immer die aktuelle Schrift +verwendet w\"urde, was nicht immer w\"unschenswert ist. Das Makro leistet +aber noch mehr. Wenn die \index{Seite!Zahl} +Seitenzahl negativ ist, wird sie in r\"omischen +\index{Ziffer} +Ziffern ausgegeben, ist sie positiv, dann wird sie in normalen +\index{Lateinisch!Ziffern} +lateinischen Ziffern ausgegeben. Die Definition lautet: +\index{zzzelse@{\tt\char92 else}}\index{zzzfi@{\tt\char92 fi}} +\index{zzzifnum@{\tt\char92 ifnum}}\index{zzznumber@{\tt\char92 number}} +\index{zzzpageno@{\tt\char92 pageno}} +\index{zzzromannumeral@{\tt\char92 romannumeral}} +\begin{verbatim} +\ifnum\pageno<0 \romannumeral-\pageno \else\number\pageno \fi +\end{verbatim} + +Hier nun mal ein Beispiel einer \index{Seite!Nummer} +Seitennummerierung aus dem \TeX book, +bei dem die Seitennummern in der \index{Kopf!Zeile}Kopfzeile ausgegeben werden, und zwar +bei ungeraden und geraden \index{Seite!Rechts-Links} +Seiten unterschiedlich. +\index{zzzbaselineskip@{\tt\char92 baselineskip}} +\index{zzzdef@{\tt\char92 def}} +\index{zzzelse@{\tt\char92 else}} +\index{zzzfi@{\tt\char92 fi}} +\index{zzzfolio@{\tt\char92 folio}} +\index{zzzheadline@{\tt\char92 headline}} +\index{zzzhfil@{\tt\char92 hfil}} +\index{zzzifodd@{\tt\char92 ifodd}} +\index{zzznopagenumbers@{\tt\char92 nopagenumbers}} +\index{zzzpageno@{\tt\char92 pageno}} +\index{zzzvoffset@{\tt\char92 voffset}} +\begin{verbatim} +\nopagenumbers % suppress footlines +\headline={\ifodd\pageno\rightheadline \else\leftheadline\fi} +\def\rightheadline{\tenrm\hfil RIGHT RUNNING HEAD\hfil\folio} +\def\leftheadline{\tenrm\folio\hfil LEFT RUNNING HEAD\hfil} +\voffset=2\baselineskip +\end{verbatim}\index{Baseline!Skip} +Mit ``Running Head''\footnote{Laufender \index{Kopf!Laufender} +Kopf.} werden in englischen +B\"uchern Kopfzeilen bezeichnet, die auf mehreren Seiten erscheinen. Die +Angabe von `\verb|\voffset|' ist n\"otig, damit auch weiterhin ein +\index{Abstand!Kopfzeile} +Abstand zur eigentlichen Seiten bestehen bleibt. + +Wenn sie \index{zzzvsize@{\tt\char92 vsize}} +`\verb|\vsize|' nicht \"andern, dann wird sich auch die +Position der \index{Kopf!Zeile}Kopf- bzw.\ \index{Fusszeile@Fu\ss{}note} +Fu\ss{}zeilen nicht \"andern. Wenn sie z.B.\ den +Befehl +\index{zzzraggedbottom@{\tt\char92 raggedbottom}} +`\verb|\raggedbottom|' verwenden, so da\ss{} nicht mehr alle Seiten +die gleiche \index{Hoehe!Seite@H\"ohe!Seite} +H\"ohe haben, dann \"andert sich dennoch die Position der Fu\ss{}zeile nicht! +\section{Die Interna der Outputroutinen} +Beim Aufruf einer \index{Ausgabe!Routine} +Ausgaberoutine ist in der \index{Box!255}Box255 immer die aktuelle, +zur Ausgabe bereite Seite gespeichert. Der Befehl +\index{zzzoutput@{\tt\char92 output}}`\verb|\output|' +wird wie ein normaler Befehl, so wie +\index{zzzeverypar@{\tt\char92 everypar}}`\verb|\everypar|' o.\"a.\ +bearbeitet, mit der Ausnahme, da\ss{} immer eine Gruppierungsklammer um +den Befehl geschrieben wird. Dies dient der Vermeidung von +Seiteneffekten. Die Ausgaberoutinen \"andern z.B.\ oft den Baselineskip, +wobei die \"Anderung nat\"urlich nicht in den weiteren Text flie\ss{}en soll. + +Wenn keine spezielle Outputroutine installiert wird +\index{zzzoutput@{\tt\char92 output}} +(`\verb|\output={...}|'), dann verwendet \TeX\ seine eigene, minimale +Ausgaberoutine +\index{zzzshipout@{\tt\char92 shipout}} +\begin{verbatim} +\output={\shipout\box255} +\end{verbatim} +Der Befehl `\verb|\shipout|' schreibt das \index{Argument!Bei Shipout} +Argument in den derzeit +g\"ultigen \index{File!DVI}Dvi-File, zeigt den Inhalt der Zahlregister 0 bis 9 an und +f\"uhrt die anstehenden +\index{zzzwrite@{\tt\char92 write}} +`\verb|\write|'-Befehle aus. Genauere +Informationen k\"onnen auch hier wieder mit dem Befehl +\index{zzztracingoutput@{\tt\char92 tracingoutput}} +`\verb|\tracingoutput|' erhalten werden, wenn der Wert dieser +Variablen gr\"o\ss{}er als Null ist. Achten sie darauf, da\ss{} alle Makros +w\"ahrend eines Shipout genau definiert sind, da sie zu der dann +g\"ultigen Version expandiert werden. + +Neben dem 255ten \index{Box!255}Boxregister k\"onnen auch noch andere Registerwerte +Einflu\ss{} auf die Ausgaberoutine haben und von dieser ausgewertet +werden. \TeX\ verwendet z.B. die Werte +\index{zzzinsertpenalties@{\tt\char92 insertpenalties}} +\index{zzzoutput@{\tt\char92 output}} +\index{zzzoutputpenalty@{\tt\char92 outputpenalty}} +\begin{verbatim} +\insertpenalties +\outputpenalty +\end{verbatim} +in folgender Weise. Der erste Wert enth\"alt die Anzahl der +\index{Einfuegung!Anzahl@Einf\"ugung!Anzahl}Einf\"ugungen, +die noch zur\"uckgehalten werden, der zweite Wert ist gleich den +Strafpunkten dieses \index{Seite!Umbruch} +Seitenumbruchs. Die Ausgaberoutine von {\em Plain} +\TeX\ erkennt z.B.\ ein +\index{zzzsupereject@{\tt\char92 supereject}} +`\verb|\supereject|' um alle noch ausstehenden +Einf\"ugungen an den Dvi-File auszugeben. Dies geschieht, indem der +zweite Wert auf $-20000$ gesetzt wird und der zweite Wert ausgewertet +wird um zu entscheiden, wieviele Einf\"ugungen noch vorhanden sind. + +Die voreingestellte Ausgaberoutine von {\em Plain} \TeX, die einfach +alles ausgibt hat nat\"urlich auch ein Pendant, eine Ausgaberoutine, die +nichts ausgibt. Diese ist definiert als +\index{zzzoutput@{\tt\char92 output}} +\index{zzzoutputpenalty@{\tt\char92 outputpenalty}} +\index{zzzpenalty@{\tt\char92 penalty}} +\index{zzzunvbox@{\tt\char92 unvbox}} +\begin{verbatim} +\output={\unvbox255 \penalty=\outputpenalty} +\end{verbatim} +Mit dem ersten Befehl wird die Seite wieder zur\"uckgegeben, mit dem +zweiten wieder die richtige Anzahl an Strafpunkten gesetzt. Jetzt +versucht \TeX\ wieder einen \index{Seite!Umbruch} +Seitenumbruch zu finden. Da sich nichts +ge\"andert hat, wird auch wieder derselbe Seitenumbruch gefunden, +allerdings viel schneller, als beim ersten Mal, da z.B.\ die +Paragraphen nicht umgebrochen werden brauchen. Somit befindet sich +\TeX\ in einer Endlosschleife.\index{Schleife!Endlos} + +Um derartige Endlosschleifen zu verhindern gibt es in \TeX\ einen +Mechanismus. Bei jedem Aufruf einer Ausgaberoutine wird der Zahler +\index{zzzdeadcycles@{\tt\char92 deadcycles}} +`\verb|\deadcycles|' um eins erh\"oht und erst bei einer tats\"achlichen +Ausgabe wieder auf Null zur\"uckgestellt. Wenn der Wert dieser Variablen +gleich oder gr\"o\ss{}er als +\index{zzzmaxdeadcycles@{\tt\char92 maxdeadcycles}} +`\verb|\maxdeadcycles|' wird, dann wird die +voreingestellte Ausgaberoutine aufgerufen. + +Nach dem Aufruf einer Ausgaberoutine mu\ss{} die \index{Box!255}Box255 +\index{Leer!Box}leer sein, da +\TeX\ dort die \index{Neu!Seite}\index{Seite!Neu} +neue Seite aufbauen will. Sollte das Register nicht +leer sein, dann geht \TeX\ davon aus, da\ss{} sie das Register +\index{Fehler!Box255}fehlerhaft +benutzen und zerst\"ort den Inhalt. +\section{Beispiele f\"ur Outputroutinen} +\subsection{Die Routine von {\em Plain} \TeX} +Die Ausgaberoutine von {\em Plain} \TeX\ ist definiert als +\index{zzzoutput@{\tt\char92 output}} +\index{zzzplainoutput@{\tt\char92 plainoutput}} +\begin{verbatim} +\output={\plainoutput} +\end{verbatim} +hierbei ist `\verb|\plainoutput|' eine \index{Abkuerzung@Abk\"urzung} +Abk\"urzung f\"ur +\index{zzzadvancepageno@{\tt\char92 advancepageno}} +\index{zzzelse@{\tt\char92 else}} +\index{zzzfi@{\tt\char92 fi}} +\index{zzzifnum@{\tt\char92 ifnum}} +\index{zzzmakefootline@{\tt\char92 makefootline}} +\index{zzzmakeheadline@{\tt\char92 makeheadline}} +\index{zzzoutputpenalty@{\tt\char92 outputpenalty}} +\index{zzzpagebody@{\tt\char92 pagebody}} +\index{zzzshipout@{\tt\char92 shipout}} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +\shipout\vbox{\makeheadline + \pagebody + \makefootline} +\advancepageno +\ifnum\outputpenalty>-20000 \else\dosupereject\fi +\end{verbatim} +Wie im \TeX book sollte dieses ``Programm'' Zeile f\"ur Zeile betrachtet +werden, um einen Einblick in die Wirkungsweise dieser Ausgaberoutine +zu gewinnen. + +Zun\"achst das Makro `\verb|\makeheadline|'. Dieses Makro erzeugt eine +Box der H\"ohe und Tiefe Null, das die \index{Kopf!Zeile} +Kopfzeile enth\"alt. Definiert ist +es folgenderma\ss{}en +\index{zzzheadline@{\tt\char92 headline}} +\index{zzzline@{\tt\char92 line}} +\index{zzznointerlineskip@{\tt\char92 nointerlineskip}} +\index{zzzthe@{\tt\char92 the}} +\index{zzzvbox@{\tt\char92 vbox}} +\index{zzzvskip@{\tt\char92 vskip}} +\index{zzzvss@{\tt\char92 vss}} +\begin{verbatim} +\vbox to 0pt{\vskip-22.5pt + \line{\vbox to8.5pt{}\the\headline}\vss} +\nointerlineskip +\end{verbatim} +Der seltsame Wert von $-22.5$pt sorgt daf\"ur, da\ss{} die +\index{Linie!Referenz}Referenzlinie der +\index{Kopf!Zeile} +Kopfzeile genau $24$pt oberhalb der Referenzlinie der obersten +Textzeile der Seite liegt. Sie setzt sich zusammen aus +$$\mbox{topskip} - \mbox{H\"ohe eines Strut} - +2\mbox{Baselineskip}$$\index{Baseline!Skip} +das ist +$$10\mbox{pt}-8.5\mbox{pt}-24\mbox{pt}$$ + +Das Makro \index{zzzpagebody@{\tt\char92 pagebody}} +`\verb|\pagebody|' ist eine \index{Abkuerzung@Abk\"urzung}Abk\"urzung f\"ur +\index{zzzboxmaxdepth@{\tt\char92 boxmaxdepth}} +\index{zzzmaxdepth@{\tt\char92 maxdepth}} +\index{zzzpagecontents@{\tt\char92 pagecontents}} +\index{zzzvbox@{\tt\char92 vbox}} +\index{zzzvsize@{\tt\char92 vsize}} +\begin{verbatim} +\vbox to\vsize{\boxmaxdepth=\maxdepth \pagecontents} +\end{verbatim} +Der Wert von `\verb|\boxmaxdepth|' wird auf `\verb|\maxdepth|' +gesetzt, wobei die Routine annimmt, da\ss{} \TeX\ die \index{Box!255} +Box255 f\"ur die Seite +verwendet hat. Das Makro `\verb|\pagecontents|' f\"ugt nun die Seite, +inkl.\ aller \index{Einfuegung@Einf\"ugung} +Einf\"ugungen am Anfang und am Ende ein. Es ist definiert als +\index{zzzdimen@{\tt\char92 dimen}} +\index{zzzdp@{\tt\char92 dp}} +\index{zzzelse@{\tt\char92 else}} +\index{zzzfi@{\tt\char92 fi}} +\index{zzzfootins@{\tt\char92 footins}} +\index{zzzfootnoterule@{\tt\char92 footnoterule}} +\index{zzzifraggedbottom@{\tt\char92 ifraggedbottom}} +\index{zzzifvoid@{\tt\char92 ifvoid}} +\index{zzzkern@{\tt\char92 kern}} +\index{zzzunvbox@{\tt\char92 unvbox}} +\index{zzzvfil@{\tt\char92 vfil}} +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\ifvoid\topins \else\unvbox\topins\fi +\dimen0=\dp255 \unvbox255 +\ifvoid\footins\else % footnote info is present + \vskip\skip\footins + \footnoterule + \unvbox\footins\fi +\ifraggedbottom \kern-\dimen0 \vfil \fi +\end{verbatim} +\index{zzztopins@{\tt\char92 topins}} +`\verb|\topins|' und `\verb|\footins|' sind die \index{Klasse!Nummer} +Klassennummern f\"ur die +\index{Kopf!Einfuegung@Kopf!Einf\"ugung} +Kopf- und Fu\ss{}einf\"ugungen. Sollten auch noch andere Einf\"ugungsklassen +verwendet werden, ist diese Routine entsprechend abzu\"andern. Mit +`\verb|\footnoterule|' wird ein waagerechter Strich zur Abgrenzung des +Textes von den \index{Fussnote!Abgrenzung@Fu\ss{}note!Abgrenzung} +Fu\ss{}noten ausgegeben. In der letzten Zeile wird +zus\"atzlicher \index{Leim} +Leim eingef\"ugt, falls die Seiten unterschiedliche L\"ange +haben sollen, um den +\index{zzztopskip@{\tt\char92 topskip}}`\verb|\topskip|' nicht \"uberzustrapazieren. + +Im \index{Hauptprogramm} +``Hauptprogramm'' folgt nun der Aufruf von +\index{zzzmakefootline@{\tt\char92 makefootline}} +`\verb|\makefootline|'. +Dieser Aufruf setzt die \index{Fusszeile@Fu\ss{}note}Fu\ss{}zeile der Seite +\index{zzzbaselineskip@{\tt\char92 baselineskip}} +\index{zzzfootline@{\tt\char92 footline}} +\index{zzzline@{\tt\char92 line}} +\index{zzzthe@{\tt\char92 the}} +\begin{verbatim} +\baselineskip=24pt +\line{\the\footline} +\end{verbatim}\index{Baseline!Skip} + +Das Makro \index{zzzadvancepageno@{\tt\char92 advancepageno}} +`\verb|\advancepageno|' erh\"oht nun die +\index{Seite!Nummer!Erhoehen@Seite!Nummer!Erh\"ohen}Seitenzahl, falls +diese positiv ist, anderenfalls wird sie erniedrigt.\footnote{Daher +erfolgt die Nummerierung der {\em negativen} Seiten richtig, also: i, +ii, iii, iv, $\ldots$} Definiert ist dieses Makro als +\index{zzzadvance@{\tt\char92 advance}} +\index{zzzelse@{\tt\char92 else}} +\index{zzzfi@{\tt\char92 fi}} +\index{zzzglobal@{\tt\char92 global}} +\index{zzzifnum@{\tt\char92 ifnum}} +\index{zzzpageno@{\tt\char92 pageno}} +\begin{verbatim} +\ifnum\pageno<0 \global\advance\pageno by-1 +\else \global\advance\pageno by 1 \fi +\end{verbatim} + +Schlie\ss{}lich werden {\em alle} \index{Einfuegung@Einf\"ugung} +Einf\"ugungen ausgegeben, wenn nur die +Strafpunkte den entsprechenden Wert haben. Die Definition sieht +folgenderma\ss{}en aus +\index{zzzfi@{\tt\char92 fi}} +\index{zzzifnum@{\tt\char92 ifnum}} +\index{zzzinsertpenalties@{\tt\char92 insertpenalties}} +\index{zzzkern@{\tt\char92 kern}} +\index{zzzline@{\tt\char92 line}} +\index{zzznobreak@{\tt\char92 nobreak}} +\index{zzzsupereject@{\tt\char92 supereject}} +\index{zzztopskip@{\tt\char92 topskip}} +\index{zzzvfill@{\tt\char92 vfill}} +\begin{verbatim} +\ifnum\insertpenalties>0 + \line{} \kern-\topskip \nobreak + \vfill\supereject\fi +\end{verbatim} +Der Kernbefehl l\"oscht einen evtl. vorhandenen Topskip, der zwischen +den Einf\"ugungen nur st\"orend w\"are. +\subsection{Zweispaltige Ausgabe} +Der Trick bei einer zweispaltigen Ausgabe besteht darin, da\ss{} man \TeX\ +einfach sagt, da\ss{} die Seite nur noch halb so breit sein darf, und dann +die Ausgaberoutine nur jede zweite Seite etwas ausgeben l\"a\ss{}t. Insofern +stellt also jede einzelne \index{Spalte!Seite} +Spalte eine eigenst\"andige Seite mit eigenene +Einf\"ugungen und allen anderen Einzelheiten dar. Nur die +\index{Kopf!Zeile}Kopf- und +\index{Fusszeile@Fu\ss{}note}Fu\ss{}zeile teilt sie mit der +\index{Nachbarspalte}Nachbarspalte. + +Die Spalten sollen z.B.\ 3.2 Inch breit sein, der \index{Zwischenraum} +Zwischenraum soll +0.1 Inch betragen. F\"ur die \index{Kopf!Zeile} +Kopf- und Fu\ss{}zeile brauchen wir nun eine +neue Gr\"o\ss{}e +\index{zzzdef@{\tt\char92 def}} +\index{zzzfullhsize@{\tt\char92 fullhsize}} +\index{zzzfullline@{\tt\char92 fullline}} +\index{zzzhsize@{\tt\char92 hsize}} +\index{zzznewdimen@{\tt\char92 newdimen}} +\begin{verbatim} +\newdimen\fullhsize +\fullhsize=6.5in \hsize=3.2in +\def\fullline{\hbox to\fullhsize} +\end{verbatim} +Die Makros \index{zzzmakeheadline@{\tt\char92 makeheadline}} +`\verb|\makeheadline|' und \index{zzzmakefootline@{\tt\char92 makefootline}} +`\verb|\makefootline|' sollten +nun `\verb|\fullline|' statt \index{zzzline@{\tt\char92 line}} +`\verb|\line|' benutzen. + +Die Ausgaberoutine unterscheidet nun einen neuen Kontrollwert +`\verb|\lr|', der die Werte `L' oder `R' annehmen kann. Bekommt die +Routine eine {\em linke} Spalte, dann wird diese einfach in einem +\index{Register} +Register gespeichert, bekommt die Routine eine rechte Spalte, dann +wird sie zusammen mit der linken ausgegeben und die +\index{Seite!Nummer}Seitennummer +erh\"oht. Die Definition sieht folgenderma\ss{}en aus +\index{zzzadvancepageno@{\tt\char92 advancepageno}} +\index{zzzbox@{\tt\char92 box}} +\index{zzzcolumnbox@{\tt\char92 columnbox}} +\index{zzzdef@{\tt\char92 def}} +\index{zzzdoubleformat@{\tt\char92 doubleformat}} +\index{zzzelse@{\tt\char92 else}} +\index{zzzfi@{\tt\char92 fi}} +\index{zzzfullline@{\tt\char92 fullline}} +\index{zzzglobal@{\tt\char92 global}} +\index{zzzhfil@{\tt\char92 hfil}} +\index{zzzifnum@{\tt\char92 ifnum}} +\index{zzzleftline@{\tt\char92 leftline}} +\index{zzzlet@{\tt\char92 let}} +\index{zzzmakefootline@{\tt\char92 makefootline}} +\index{zzzmakeheadline@{\tt\char92 makeheadline}} +\index{zzznewbox@{\tt\char92 newbox}} +\index{zzzoutput@{\tt\char92 output}} +\index{zzzoutputpenalty@{\tt\char92 outputpenalty}} +\index{zzzpagebody@{\tt\char92 pagebody}} +\index{zzzsetbox@{\tt\char92 setbox}} +\index{zzzshipout@{\tt\char92 shipout}} +\index{zzzvbox@{\tt\char92 vbox}} +\begin{verbatim} +\let\lr=L \newbox\leftcolumn +\output={\if L\lr + \global\setbox\leftcolumn=\columnbox \global\let\lr=R + \else \doubleformat \global\let\lr=L\fi + \ifnum\outputpenalty>-20000 \else\dosupereject\fi} +\def\doubleformat{\shipout\vbox{\makeheadline + \fullline{\box\leftcolumn\hfil\columnbox} + \makefootline} + \advancepageno} +\def\columnbox{\leftline{\pagebody}} +\end{verbatim} +Das `\verb|\columnbox|' Makro stellt sicher, da\ss{} die Seite auch in +eine Spalte pa\ss{}t. Es k\"onnte ja sein, da\ss{} im Originaltext +\index{zzzhsize@{\tt\char92 hsize}}`\verb|\hsize|' +ge\"andert wurde. Es kann nun passieren, da\ss{} ein Text mit einer +gef\"ullten linken, aber leeren rechten Spalte endet. Dieser Text w\"urde +bei der obigen Routine nicht ausgegeben. Hier hilft die Anweisung +\index{zzzeject@{\tt\char92 eject}} +\index{zzzfi@{\tt\char92 fi}} +\index{zzznull@{\tt\char92 null}} +\index{zzzsupereject@{\tt\char92 supereject}} +\index{zzzvfill@{\tt\char92 vfill}} +\begin{verbatim} +\supereject +\if R\lr \null\vfill\eject\fi +\end{verbatim} +\subsection{Markierungen} +Bei der Erstellung eines Textes gibt es die unterschiedlichsten +Anforderungen, die eine \index{Kopf!Zeile} +Kopfzeile erf\"ullen mu\ss{}. Denken sie alleine +einmal an den Unterschied zwischen einem Buch, in dessen Kopfzeile die +aktuelle \index{Kapitel!Ueberschrift@Kapitel!\"Uberschrift} +Kapitel\"uberschrift steht, gegen\"uber einem W\"orterbuch, bei dem +auf der linken \index{Seite!Woerterbuch@Seite!W\"orterbuch} +Seite die ersten Buchstaben des ersten Eintrags der +Seite stehen sollen, auf der rechten Seite aber die +\index{Anfangsbuchstaben}Anfangsbuchstaben +des letzten Eintrags der Seite. Die besondere Art von \TeX\ Seiten an +eine Ausgaberoutine zu \"ubergeben macht es nahezu unm\"oglich im +Vorhinein festzustellen, an welcher Stelle \TeX\ sich befinden wird, +wenn es eine Seite umbricht. + +\TeX\ bietet nun die M\"oglichkeit innerhalb des Textes {\em +Markierungen} anzubringen. Generell funktioniert das so, da\ss{} sie +innerhalb eines Textes +\index{zzzmark@{\tt\char92 mark}} +\begin{verbatim} +\mark{<Markierungstext>} +\end{verbatim} +schreiben, wobei der `\verb|<Markierungstext>|' expandiert wird, wie +bei einer \index{zzzedef@{\tt\char92 edef}} +`\verb|\edef|' Definition. \TeX\ schreibt diese Markierung +in die vertikale Liste, wie schon fr\"uher erw\"ahnt. + +Fr\"uher haben wir uns auch schon vorgestellt, da\ss{} der Text f\"ur \TeX\ +eine lange Liste von Token ist. Stellen sie sich nun weiter vor diese +lange Liste wird in \index{Seite!Markierung} +Seiten gebrochen und an eine Ausgaberoutine +\"ubergeben. Dann werden vorher drei \index{Register}Register gesetzt +\begin{enumerate} +\item {\tt\char92 botmark} Ist der Markierungstext, der am weitesten +unten auf der gerade bearbeiteten Seite gefunden wurde. +\item {\tt\char92 firstmark} Ist der Markierungstext, der am weitesten +oben auf der gerade bearbeiteten Seite gefunden wurde. +\item {\tt\char92 topmark} Hat den Inhalt von {\tt\char92 botmark}, +{\em bevor} die aktuelle Seite angefangen wurde. +\end{enumerate} +Angenommen sie haben einen Text geschrieben mit vier Markierungen und +der Text wird so gebrochen, da\ss{} Markierung \index{zzzalpha@{\tt\char92 +alpha}}$\alpha$ auf Seite 2,\index{zzzbeta@{\tt\char92 beta}} +Markierung $\beta$ und $\gamma$ auf Seite 4 und Markierung $\delta$ +auf Seite 5 steht. Dann sie die \index{Register}Register im Verlaufe der Abarbeitung +folgenderma\ss{}en gesetzt. + +\medskip\begin{tabular}{cccc} +Auf Seite & {\tt\char92 topmark} ist & {\tt\char92 firstmark} ist & +{\tt\char92 botmark} ist \\[.5ex] +1 & leer & leer & leer \\ +2 & leer & $\alpha$ & $\alpha$ \\ +3 & $\alpha$ & $\alpha$ & $\alpha$ \\ +4 & $\alpha$ & $\beta$ & $\gamma$ \\ +5 & $\gamma$ & $\delta$ & $\delta$ \\ +6 & $\delta$ & $\delta$ & $\delta$ +\end{tabular}\medskip + +Im vertikalen Modus werden Markierungen einfach an der Stelle, an der +sie auftreten eingef\"ugt, im \index{Horizontal!Modus} +horizontalen Modus werden sie an das Ende +des Paragraphen angeh\"angt. Im internen vertikalen Modus und im +beschr\"ankten horizontalen Modus k\"onnen Markierungen verschwinden und +sollten deshalb dort nicht verwendet werden. Der +\index{zzzvsplit@{\tt\char92 vsplit}}`\verb|\vsplit|' +Befehl behandelt die Markierungen \"ubrigens entsprechend, allerdings +mit einem Unterschied. Die obere bzw.\ untere Markierung wird nun in +\index{zzzsplitbotmark@{\tt\char92 splitbotmark}} +\index{zzzsplitfirstmark@{\tt\char92 splitfirstmark}} +\begin{verbatim} +\splitfirstmark +\splitbotmark +\end{verbatim} +gefunden. + +Eine Outputroutine kann nun die Markierungen nutzen um die +entsprechend gew\"unschte \index{Kopf!Zeile} +Kopfzeile zu erstellen. Bei W\"orterb\"uchern +gen\"ugt die Verwendung von\index{zzzfirstmark@{\tt\char92 firstmark}} +`\verb|\firstmark|' bzw.\ \index{zzzbotmark@{\tt\char92 botmark}} +`\verb|\botmark|' +v\"ollig, um den Anforderungen gen\"uge zu tun. Anders sieht das bei +B\"uchern aus, die andere \index{Kopf!Zeile} +Kopfzeilen erfordern. Hier ist es meist +erw\"unscht, da\ss{} in der Kopfzeile {\em das} \index{Kapitel!Kopfzeile} +Kapitel benannt werden soll, +welches zu Beginn einer Seite g\"ultig ist. Sollte auf der Seite ein +\index{Neu!Kapitel} +neues Kapitel beginnen, dann soll dessen \index{Kopf!Zeile} +Kopfzeile erst auf der +n\"achsten Seite stehen. + +Angenommen in einem Buch beginnt auf einer Seite ein +\index{Neu!Abschnitt}neuer Abschnitt, +z.B.\ der `Abschnitt 3. Neues aus \TeX Land'. Dieser Abschnitt soll +mit dem Befehl +\index{zzzbeginsection@{\tt\char92 beginsection}} +\begin{verbatim} +\beginsection 3. Neues aus \TeX Land +\end{verbatim} +eingeleitet werden. Wie ist dann der Befehl `\verb|\beginsection|' am +besten zu definieren? Hier eine M\"oglichkeit +\index{zzzbeginsection@{\tt\char92 beginsection}} +\index{zzzdef@{\tt\char92 def}} +\index{zzzleftline@{\tt\char92 leftline}} +\index{zzzmark@{\tt\char92 mark}} +\index{zzznobreak@{\tt\char92 nobreak}} +\index{zzznoindent@{\tt\char92 noindent}} +\index{zzzsectionbreak@{\tt\char92 sectionbreak}} +\index{zzzsectionfont@{\tt\char92 sectionfont}} +\index{zzzsmallskip@{\tt\char92 smallskip}} +\begin{verbatim} +\def\beginsection #1. #2. + {\sectionbreak + \leftline{\sectionfont #1. #2} + \mark{#1} + \nobreak\smallskip\noindent} +\end{verbatim} +Der `\verb|\sectionbreak|' Befehl soll daf\"ur sorgen, da\ss{} entweder ein +gen\"ugend gro\ss{}er \index{Zwischenraum} +Zwischenraum zum vorherigen Abschnitt gelassen wird, +oder da\ss{} die letzte \index{Seite!Letzte} +Seite aufgef\"ullt wird und eine neue Seite begonnen +wird. Eine m\"ogliche Realisation w\"are +\index{zzzpenalty@{\tt\char92 penalty}} +\index{zzzvskip@{\tt\char92 vskip}} +\begin{verbatim} +\penalty-200 \vskip18pt plus4pt minus6pt +\end{verbatim} +Der letzte Befehl sorgt daf\"ur, da\ss{} der erste Paragraph des Textes +nicht einger\"uckt wird, uns interessiert hier aber die Markierung. Die +hier vorgestellte L\"osung erf\"ullt aber nicht die Erwartungen. Das +Ergebnis ist n\"amlich folgenderma\ss{}en. +\index{zzzfirstmark@{\tt\char92 firstmark}}`\verb|\firstmark|' wird `3.' +sein und \index{zzztopmark@{\tt\char92 topmark}} +`\verb|\topmark|' `2.' unabh\"angig davon, ob der +\index{Absatz}Absatz auf +der Seite beginnt oder nicht. Die L\"osung best\"unde darin die Markierung +{\em vor} den Befehl zu Beginn des Absatzes zu setzen +\index{zzzsectionbreak@{\tt\char92 sectionbreak}} +(`\verb|\sectionbreak|'), statt an die Stelle, an der er jetzt steht. +Dann w\"urde `\verb|\topmark|' immer den Absatz bezeichnen, der an +Beginn der Seite noch g\"ultig ist. + +Es gibt aber noch eine bessere L\"osung. Diese sorgt daf\"ur, da\ss{} sich +`\verb|\topmark|' immer auf den Anfang der \index{Seite!Anfang}Seite, und +\index{zzzbotmark@{\tt\char92 botmark}} +`\verb|\botmark|' immer auf das Ende der \index{Seite!Ende} +Seite bezieht. Damit ist eine +noch genauere \index{Kopf!Gestaltung} +Kopfgestaltung, z.B.\ bezogen auf rechte und linke +\index{Seite!Rechts-Links} +Seiten m\"oglich. Eine Definition k\"onnte folgenderma\ss{}en aussehen +\index{zzzbeginsection@{\tt\char92 beginsection}} +\index{zzzcurrentsection@{\tt\char92 currentsection}} +\index{zzzdef@{\tt\char92 def}} +\index{zzzelse@{\tt\char92 else}} +\index{zzzleftline@{\tt\char92 leftline}} +\index{zzzmark@{\tt\char92 mark}} +\index{zzznobreak@{\tt\char92 nobreak}} +\index{zzznoexpand@{\tt\char92 noexpand}} +\index{zzznoindent@{\tt\char92 noindent}} +\index{zzzsectionbreak@{\tt\char92 sectionbreak}} +\index{zzzsectionfont@{\tt\char92 sectionfont}} +\index{zzzsmallskip@{\tt\char92 smallskip}} +\begin{verbatim} +\def\beginsection #1. #2. + {\mark{\currentsection \noexpand\else #1} + \sectionbreak + \leftline{\sectionfont #1. #2} + \mark{#1\noexpand\else #1} \def\currentsection{#1} + \nobreak\smallskip\noindent} +\def\currentsection{} % the current section number +\end{verbatim} +Die Idee hier ist folgende: Es werden zwei Markierungen gesetzt, eine +vor und eine hinter dem \index{Absatz!Abstand} +Absatzabstand. Au\ss{}erdem bestehen die +Markierungen aus dem Text `\verb|2.\else 3.|' f\"ur +\index{zzztopmark@{\tt\char92 topmark}}`\verb|\topmark|' +und `\verb|3.\else 3.|' f\"ur \index{zzzbotmark@{\tt\char92 botmark}} +`\verb|\botmark|'. Die linke Komponente +von `\verb|\botmark|' ist somit f\"ur den unteren +\index{Seite!Rand!Unten} +Seitenrand, die rechte +Komponente von `\verb|\topmark|' f\"ur den oberen \index{Seite!Rand!Oben} +Seitenrand zust\"andig. + +Im obigen Beispiel wurde zwischen zwei Markierungskomponenten mittels +einer `\verb|if|' Abfrage ausgew\"ahlt. V\"ollig analog kann nat\"urlich +auch ein Markierungstext aus +\begin{verbatim} +a1 \or a2 \or a3 \or ... +\end{verbatim} +bestehen und dann aus mehreren Alternativen ausgew\"ahlt werden. +\chapter{Umgang mit Fehlern} +In einem fr\"uheren Kapitel haben sie schon gesehen, wie \TeX\ darauf +reagiert, wenn eine unbekannte \index{Kontrollsequenz} +Kontrollsequenz auftaucht, meist ein +Fehler in der Schreibweise. \TeX\ kennt aber wesentlich mehr Fehler, +die sie aber vermutlich nie alle kennenlernen werden, da manche dieser +Fehler nur schwer zu produzieren sind. In diesem Kapitel werden nun +einige weitere Fehlersituationen behandelt. +\section{Schreibfehler} +Normalerweise treten Fehler als Schreibfehler auf. Was passiert z.B.\ +wenn man eine \index{Einheit!Mass@Einheit!Ma\ss{}} +\index{Masse!Einheit@Ma\ss{}e!Einheit} +Ma\ss{}einheit falsch schreibt? Gehen wir man davon aus, da\ss{} +sie statt +\index{zzzhsize@{\tt\char92 hsize}} +`\verb|\hsize=4in|' `\verb|\hsize=4im|' geschrieben h\"atten. +Die Fehlermeldung, die sie erhalten wird dann ungef\"ahr so aussehen +\index{zzzinput@{\tt\char92 input}} +\begin{verbatim} +! Illegal unit of measure (pt inserted). +<to be read again> + i +<to be read again> + m +<*> \hsize=4im + \input story +? +\end{verbatim} +Sie sehen, ich verwende wieder das Beispiel von fr\"uher. Ein einfaches +Return w\"urde hier daf\"ur sorgen, da\ss{} die Buchstaben `i' und `m' einen +neuen Paragraphen ausmachen w\"urden, besser w\"are es eine `2' +einzugeben, um die Buchstaben zu l\"oschen. Danach w\"urde \TeX\ anhalten +um ihnen die Gelegenheit zu geben das weitere Vorgehen zu \"uberdenken. +Die zugeh\"orige Meldung s\"ahe folgenderma\ss{}en aus +\index{zzzinput@{\tt\char92 input}} +\begin{verbatim} +<recently read> m +|indent +<*> \hsize=4im + \input story +? +\end{verbatim} +O.k.\ das `i' und das `m' sind nun weg. W\"urden sie jetzt versuchen +\TeX\ mit einem einfachen Return zur Weiterarbeit zu veranlassen, dann +w\"urde \TeX\ versuchen den ganzen Text in einer Breite von 4pt zu +setzen. Die Anzahl von Fehlermeldungen wg.\ \"ubervollen \index{Box!Hbox} +{\tt hbox}en k\"onnen +sie sich sicher selber vorstellen. Besser ist es die gew\"unschte Breite +erneut einzuf\"ugen. +\index{zzzhsize@{\tt\char92 hsize}} +\begin{verbatim} +I\hsize=4in +\end{verbatim} + +Normalerweise versucht \TeX\ selber Fehler zu beseitigen. Das +geschieht dadurch, da\ss{} Texte eingef\"ugt werden, die offensichtlich +ausgelassen wurden, oder aber Textteile entfernt werden, die +offensichtliche fehlen. Auch hierzu ein Beispiel +\begin{verbatim} +! Missing $ inserted. +<inserted text> + $ +<to be read again> + ^ +l.11 Die Tatsache 32768=2^ + {15} ist hier uninteressant +? H +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. +\end{verbatim} +Der Unterschied zum obigen Beispiel liegt darin, da\ss{} hier der +eingef\"ugte Text (`\verb|$|') noch nicht wirklich eingef\"ugt wurde. Sie +haben also die Chance den \index{Einfuegung!Text@Einf\"ugung!Text} +Einf\"ugungstext zu entfernen, bevor \TeX\ ihn +tats\"achlich zu sehen bekommt. + +Wie sollte man in einem solchen Falle vorgehen. Die Sequenz `32768=2' +ist schon gesetzt, und sie haben keine Chance den falschen Leerraum um +das \index{Gleichheitszeichen}Gleichheitszeichen nachtr\"aglich zu \"andern. Ihr Ziel sollte sein +den Rest des Textes m\"oglichst fehlerfrei bearbeitet zu bekommen, um +eventuell auftretende weitere Fehler noch gemeldet zu bekommen. + +Ein Return w\"urde den Rest des Paragraphen in \index{Italic} +\index{Schrift!Italic}Italic-Schrift setzen, +was mit Sicherheit nicht w\"unschenswert ist. Es gibt zwei Alternativen +zu reagieren +\begin{enumerate} +\item Mit `6' l\"oschen sie das `\verb|$^{15}|' und f\"ugen dann mit +`\verb|I$^{15}$|' den richtigen Text ein, oder +\item sie geben `2' ein und erhalten $\ldots215$, und der Rest des +Absatzes wird richtig gesetzt. +\end{enumerate}\index{Absatz} + +\section{Schlimme Fehler} +Richtig \"argerlich sind allerdings die Fehler, die z.B. in Zeile 10 +eines \index{Absatz} +Absatzes verursacht werden, aber erst in Zeile 73 desselben +Absatzes bemerkt werden.\footnote{Meistens handelt es sich um eine +fehlende Gruppenklammer, es ist also ein \index{Editor} +Editor empfehlenswert, der +zueinander passende Klammerpaare findet.} Derartige Fehler haben meist +Folgefehler, dennoch ist es meist m\"oglich in einem Lauf von \TeX\ alle +Fehler zu finden, wenn man nur auf die Fehlermeldungen entsprechend +reagiert. Am schlimmsten sind aber Fehler, bei denen kein +Schreibfehler vorliegt, sondern ein Bedeutungsfehler. Wenn sie z.B.\ +mit +\index{zzzdef@{\tt\char92 def}} +\begin{verbatim} +\def\box{...} +\end{verbatim} +eine Definition einrichten und so alle Boxbefehle von \TeX\ unsinnig +werden lassen, dann wird es schwer diesen Fehler zu beheben. Am besten +lesen sie dieses Buch von Anfang bis Ende und vermeiden solche Fehler. + +Auch bei der \index{Makro!Definition} +Makrodefinition k\"onnen solche Fehler auftreten. Das \TeX +Book stellt einen solchen Fehler dar. Die Definition lautet +\index{zzzadvance@{\tt\char92 advance}} +\index{zzzdef@{\tt\char92 def}} +\index{zzzfirstnumber@{\tt\char92 firstnumber}} +\index{zzznewcount@{\tt\char92 newcount}} +\index{zzznextnumber@{\tt\char92 nextnumber}} +\index{zzznobreak@{\tt\char92 nobreak}} +\index{zzznumber@{\tt\char92 number}} +\index{zzzserialnumber@{\tt\char92 serialnumber}} +\begin{verbatim} +\newcount\serialnumber +\def\firstnumber{\serialnumber=0 } +\def\nextnumber{\advance \serialnumber by 1 + \number\serialnumber)\nobreak\hskip.2em } +\end{verbatim} +Mit dem Aufruf von +\begin{verbatim} +\firstnumber +\nextnumber xx, \nextnumber yy, and \nextnumber zz +\end{verbatim} +w\"urde \TeX\ dann folgendes setzen: 1)\hskip.2em xx, 2)\hskip.2em yy +und 3)\hskip.2em zz. Ein anderer Benutzer k\"onnte nun folgende +Fehlermeldung erhalten +\index{zzznextnumber@{\tt\char92 nextnumber}} +\begin{verbatim} +! Missing number, treated as zero. +<to be read again> + c +l.107 \nextnumber minusc + ule chances of error +? +\end{verbatim} +Der Fehler l\"age darin, da\ss{} das Wort `\verb|minus|' ein +\index{Schluesselwort@Schl\"usselwort}Schl\"usselwort +von \TeX\ ist und nat\"urlich eine Zahl erwartet w\"urde. Der Fehler kann +einfach dadurch behoben werden, da\ss{} die \index{Makro!Definition} +Makrodefinition mit einem\index{zzzrelax@{\tt\char92 relax}} +`\verb|\relax|' abgeschlossen wird. +\section{Fehler, die nicht zur Unterbrechung f\"uhren} +Auch wenn ihr Text vollst\"andig und ohne Fehlermeldung \"ubersetzt wird, +kann es noch zu Fehlern kommen. Eine M\"oglichkeit ist die, da\ss{} ein von +ihnen verwendeter Zeichensatz nicht zur Verf\"ugung steht und von ihrem +Dvi-Treiber durch einen anderen ersetzt wird. Dieser Ersatzzeichensatz +kann allerdings ziemlich schlecht aussehen und ihren Anspr\"uchen nicht +gen\"ugen. In diesem Falle m\"ussen sie schon per Hand zur Fehlerkorrektur +greifen, da kann ihnen \TeX\ nicht weiterhelfen.\footnote{Am besten +besorgen sie sich den ben\"otigten Zeichensatz.} + +\section{Der Uralttrick} +Wenn sie wirklich einmal nicht mehr weiter wissen und absolut nicht +darauf kommen, wieso \TeX\ an einer Stelle einen Fehler macht, dann +gehen sie folgenderma\ss{}en vor. K\"urzen sie den Text solange, bis er +praktisch nur noch aus dem Fehler besteht. Sie haben eine wesentliche +bessere Chance den Fehler zu finden. + +Sehr beliebt sind in diesem Zusammenhang auch fehlende +\index{Leer!Zeichen}Leerzeichen. +Denken sie daran, da\ss{} \TeX\ in zwei F\"allen Leereichen als Trenner +lie\ss{}t und nicht ausgibt +\begin{enumerate} +\item Hinter \index{Kontrollsequenz}Kontrollsequenzen, und +\item hinter Ma\ss{}angaben f\"ur \TeX\ \index{Primitiv}Primitive. +\end{enumerate} +Die Suche nach derartigen Fehlern gestaltet sich besonders bei der +Verwendung von \index{Makro!Fehler, bei} +Makros besonders schwierig. Setzen sie ggf. +\index{zzztracingcommands@{\tt\char92 tracingcommands}} +\begin{verbatim} +\tracingcommands=1 +\end{verbatim} +um hinter das Problem zu kommen. +\section{Fatale Fehler} +In manchen F\"allen wei\ss{} auch das gute, alte \TeX\ nicht mehr weiter. +Z.B.\ im \index{zzzbatchmode@{\tt\char92 batchmode}} +`\verb|\batchmode|' wenn \TeX\ eine \index{Eingabe!Tastatur} +Eingabe +von der Tastatur ben\"otigt. \TeX\ macht dann einen \index{Nothalt} +Nothalt, bevor es +f\"ur immer den Geist aufgibt. Hier eine Auswahl der Fehlermeldungen, +die sie u.U.\ zu sehen bekommen.\index{File!Format} +\begin{verbatim} +Fatal format file error; I'm stymied. +\end{verbatim} +Der geladene Formatfile kann nicht benutzt werden, da er f\"ur eine +andere Version von \TeX\ hergestellt wurde. +\begin{verbatim} +That makes 100 errors; please try again. +\end{verbatim} +\TeX\ hat hundert Fehler gefunden, seit der letzte Paragraph beendet +wurde. Vermutlich befindet es sich in einer +Endlosschleife.\index{Schleife!Endlos} +\begin{verbatim} +Interwoven alignment preambles are not allowed. +\end{verbatim} +Wenn sie diese Meldung erhalten, dann werden sie auch verstehen, was +sie bedeutet, und sie werden sie nicht lieben. +\begin{verbatim} +I can't go on meeting you like this. +\end{verbatim} +Wegen eines fr\"uheren Fehlers kann \TeX\ nicht weiter arbeiten, sie +m\"ussen erst den vorigen Fehler beheben. +\begin{verbatim} +This can't happen. +\end{verbatim} +Irgendetwas ist mit ihrem \TeX\ nicht in Ordnung. +\section{Speicherprobleme} +Mitunter kann auch folgende Meldung auftreten +\begin{verbatim} +TeX capacity exceeded, sorry. +\end{verbatim} +Dies ist immer dann der Fall, wenn f\"ur irgendein Teil von \TeX\ mehr +Speicher ben\"otigt wird, als auf ihrem Rechner vorhanden ist. +Zus\"atzlich wird auch angegeben, um welche Art von Speicher es sich +handelt. Es gibt vierzehn M\"oglichkeiten: + +\index{Box}\index{Einfuegung!Fehler@Einf\"ugung!Fehler}\index{File!Name} +\index{Font!Daten} +\medskip\begin{tabular}{lp{8cm}} +{\em Meldung} & {\em Gegenstand der Bearbeitung}\\[.5ex] +{\tt number of strings} & Namen der \index{Kontrollsequenz} +Kontrollsequenzen und der Files\\ +{\tt pool size} & Die Zeichen in derartigen Namen\\ +{\tt main memory size} & Boxen, \index{Leim}Leim, Umbruchpunkte, Tokenlisten, +Zeichen, etc.\\ +{\tt hash size} & Namen der Kontrollsequenzen\\ +{\tt font memory} & Zeichensatzdaten\\ +{\tt exception dictionary} & Trennungsausnahmen\\ +{\tt input stack size} & Parallele Eingabedateien\\ +{\tt semantic nest size} & Bearbeitung einer unfertigen Liste\\ +{\tt parameter stack size} & Makroparameter\\ +{\tt buffer size} & Zeichen in einer Eingabezeile\\ +{\tt save size} & Werte, die nach einem Gruppenende wieder hergestellt +werden m\"ussen\\ +{\tt text input levels} & Inputfiles und Einf\"ugungen\\ +{\tt grouping levels} & Unvollst\"andige Gruppen\\ +{\tt pattern memory} & Trennungsmuster +\end{tabular}\medskip + +Mit \index{zzztracingstats@{\tt\char92 tracingstats}} +`\verb|\tracingstats=1|' k\"onnen nat\"urlich wieder alle +Speicherverwendungen angesehen werden. Bei jedem Shipout wird dann der +Speicherbedarf angegeben, und zwar in der Form `xxx\&xxxx'. Dabei +meint die Zahl vor dem \index{Kaufmannsund} +Kaufmannsund wieviele (Speicher)worte f\"ur gro\ss{}e +Dinge, wie Boxen etc.\ verwendet wurden, und die zweite Zahl wieviele +f\"ur kleine Dinge, wie Zeichen oder Token verwendet wurden. + +Was macht man nun, wenn ein derartiger Fehler aufgetreten ist, und man +sonst keine M\"oglichkeit hat f\"ur mehr Speicher zu sorgen. Es gibt zwei +M\"oglichkeiten. Zum einen k\"onnen sie nach gro\ss{}en Paragraphen, +\index{Tabelle!Grosse@Tabelle!Gro\ss{}e}Tabellen +oder Makrodefinitionen suchen und diese verkleinern.\footnote{Tricks +dazu stehen in diesem Text ja reichlich.} Sie k\"onnen aber auch \TeX\ +anders konfigurieren. Sie m\"ussten dann f\"ur die Speicherart, bei der +das Problem auftrat, mehr physikalischen Speicher bereitstellen, den +sie bei anderen Arten, die evtl.\ nicht so ausgelastet sind, +einschr\"anken. + +Meist handelt es sich aber um einen Fehler in einer Definition, der +leicht zu beheben ist. Bei der Definition von +\index{zzzdef@{\tt\char92 def}}\index{zzzrekurs@{\tt\char92 rekurs}} +\begin{verbatim} +\def\rekurs{(\rekurs)} +\end{verbatim} +erhalten sie in k\"urzester Zeit die Fehlermeldung +\index{zzzrecurse@{\tt\char92 recurse}} +\begin{verbatim} +! TeX capacity exceeded, sorry [input stack size=80]. +\recurse ->(\recurse + ) +\recurse ->(\recurse + ) +... +\end{verbatim} +was nicht weiter verwundern d\"urfte. +\section{Eine letzte Hilfe} +Wenn ihnen sonst nichts mehr einf\"allt, um einen bestimmten Fehler zu +beheben, dann k\"onnen sie immer noch ein +\index{zzzpausing@{\tt\char92 pausing}} +`\verb|\pausing=1|' einf\"ugen, +was \TeX\ dazu veranla\ss{}t die Zeilen von der Tastatur und nicht mehr +vom \index{Eingabe!Vom File}Eingabefile einzulesen. Sie k\"onnen dann einen der vielen +`\verb|\show...|' Befehle einf\"ugen, oder sonst Befehle eingeben, die +ihnen vielleicht weiterhelfen. + +Einen kleinen Wehrmutstropfen zum Schlu\ss{}. Die ganzen Tracingbefehle +sind leider nicht auf allen \TeX\ Implementationen verf\"ugbar. + +\begin{appendix} +\chapter{Die Plain \TeX\ Befehle} +\section{Die Konventionen} +\subsection{Spezielle Buchstaben} +F\"ur besonderen Gebrauch sind die Zeichen +\begin{verbatim} +\ { } $ & # % ^ _ ~ +\end{verbatim} +bestimmt. +\subsection{Die Schriftarten} +\begin{tabular}{cccc} +\verb|\rm roman| & \verb|{\sl geneigt}| & \verb|{\bf fett}| & +\verb|{\it Italic\/} Schrift|\\ +roman & {\sl geneigt} & {\bf fett} & {\it Italic\/} Schrift +\end{tabular} +\subsection{Sonderzeichen} +\begin{tabular}{cccccccccc} +\verb|``| & \verb|''| & \verb|--| & \verb|---| & \verb|?`| & +\verb|!`| & \verb|\$| & \verb|\#| & \verb|\&| & \verb|\%|\\ +`` & '' & -- & --- & ?` & +!` & \$ & \# & \& & \%\\ +\verb|\ae| & \verb|\AE| & \verb|\oe| & \verb|\OE| & \verb|\aa| & +\verb|\AA| & \verb|\ss| & \verb|\o| & \verb|\O| & \verb|\`a|\\ +\ae & \AE & \oe & \OE & \aa & +\AA & \ss & \o & \O & \`a\\ +\verb|\'e| & \verb|\^o| & \verb|\\"u| & \verb|\=y| & \verb|\~n| & +\verb|\.p| & \verb|\u\i| & \verb|\v s| & \verb|\H\j| & \verb|\t\i u|\\ +\'e & \^o & \\"u & \=y & \~n & +\.p & \u\i & \v s & \H\j & \t\i u\\ +\verb|\b k| & \verb|\c c| & \verb|\d h| & \verb|\l| & \verb|\L| & +\verb|\dag| & \verb|\ddag| & \verb|\S| & \verb|\P| & \\ +\b k & \c c & \d h & \l & \L & +\dag & \ddag & \S & \P & \\ +\end{tabular}\medskip + +Und au\ss{}erdem noch die Zeichen + +\medskip\begin{tabular}{ccccc} +\verb|{\it\$| & \verb|\&}| & \verb|\copyright| & \verb|\TeX| & +\verb|\dots|\\ +{\it\$} & {\it\&} & \copyright & \TeX & \dots\\ +\end{tabular} +\subsection{Zeilenumbruchbefehle} +Die {\em normalen} Befehle +\begin{verbatim} +\break \nobreak \allowbreak \hbox{Nicht umbrechbar} +\end{verbatim} +und die speziellen Befehle +\begin{verbatim} +dis\-cre\-tion\-ary Tren\-nung +Erlaubte\slash Trennung +\end{verbatim} +\subsection{Horizontale Abst\"ande} +\subsubsection{Mit erlaubtem Zeilenumbruch} +\begin{tabular}{ll} +\verb*|\ | & Normaler Wortabstand\\ +\verb|\enskip| & So\enskip viel\\ +\verb|\quad| & So\quad viel\\ +\verb|\qquad| & So\qquad viel\\ +\verb|\hskip| & Angebbarer Platz +\end{tabular} +\subsubsection{Ohne Erlaubnis zum Zeilenumbruch} +\begin{tabular}{ll} +\verb|~| & Normaler Wortabstand\\ +\verb|\enspace| & So\enspace viel\\ +\verb|\thinspace| & So\thinspace viel\\ +\verb|\negthinspace| & So\negthinspace viel\\ +\verb|\kern| & Angebbarer Platz +\end{tabular} +\subsection{Vertikale Abst\"ande} +\verb|\smallskip| \vbox{\hrule width 2cm\smallskip\hrule width2cm}\quad +\verb|\medskip| \vbox{\hrule width 2cm\medskip\hrule width2cm}\quad +\verb|\bigskip| \vbox{\hrule width 2cm\bigskip\hrule width2cm} +\subsection{Seitenumbruch} +Seitenumbruchkontrolle ohne vertikalen Platz erlauben die Befehle +\begin{verbatim} +\eject \supereject \nobreak \goodbreak \filbreak +\end{verbatim} +Mit vertikalem Platz verwendet man +\begin{verbatim} +\smallbreak \medbreak \bigbreak +\end{verbatim} +\subsection{Tabellenbefehle} +Zum einen gibt es die Tabellenbefehle +\begin{verbatim} +\settabs \columns \+ \cr +\end{verbatim} +und au\ss{}erdem die etwas generelleren Befehle +\begin{verbatim} +\halign \valign \omit \span \multispan +\end{verbatim} +Zum Auff\"ullen der Zwischenr\"aume in Tabellen dienen die Befehle +\begin{verbatim} +\hrulefill \dotfill +\leftarrowfill \rightarrowfill +\upbracefill \downbracefill +\end{verbatim} +\section{Die Makros von {\tt\bf plain.tex}} +Die Makros aus dem File {\tt plain.tex} sollen ab hier erkl\"art werden. +Tritt dabei ein Befehl auf, der bisher noch nicht behandelt wurde, +dann wird er auch f\"ur normale Anwender erkl\"art, ansonsten richtet sich +die Beschreibung eher an die Designer von Makros.\footnote{Ich habe +die Kommentare im Source in englischer Sprache gehalten, die Bedeutung +sollte aber sowieso klar sein.} +\subsection{Die Kodetabellen} +Zun\"achst m\"ussen die Kategoriekodes mancher Zeichen ge\"andert werden, +damit \"uberhaupt weitere Definitionen m\"oglich sind. Die ersten Zeilen +lauten daher +\begin{verbatim} +\catcode`\{=1 % left brace is begin-group character +\catcode`\}=2 % right brace is end-group character +\catcode`\$=3 % dollar sign is math shift +\catcode`\&=4 % ampersand is alignment tab +\catcode`\#=6 % hash mark is macro parameter character +\catcode`\^=7 \catcode`\^^K=7 % circumflex and uparrow for superscripts +\catcode`\_=8 \catcode`\^^A=8 % underline and downarrow for subscripts +\catcode`\^^I=10 % ASCII tab is treated as a blank space +\chardef\active=13 \catcode`\~=\active % tilde is active +\catcode`\^^L=\active \outer\def^^L{\par} % ASCII form-feed is \outer\par + +\message{Preloading the plain format: codes,} +\end{verbatim}\index{ASCII} +Die Zuweisungen f\"ur `\verb|^^K|' und `\verb|^^A|' dienen f\"ur die +Verwendung von anderen Tastaturen. Alle Zeichen au\ss{}er den Buchstaben +erhalten die Kategorie {\em anders}~(12), die Buchstaben die +Kategorie~11. Weiterhin werden die folgenden Zeichenkodes gesetzt +\begin{verbatim} +\catcode `\\ =0 \catcode`\ =10 \catcode `\%=14 +\catcode`\^^@=9 \catcode`\^^M=5 \catcode`\^^?=15 +\end{verbatim} +Der `\verb|\message|' Befehl gibt eine Meldung \"uber den Stand der +Dinge bis zu diesem Zeitpunkt auf dem \index{Bildschirm} +Bildschirm aus.\footnote{Diese +Meldungen erscheinen {\em immer} bei der Bearbeitung mit INITEX.} Wenn +sie au\ss{}er den Befehlen von {\tt plain.tex} weitere Befehle einbinden +wollen, dann schreiben sie nach der Aufforderung von INITEX einfach +`\verb|&plain meine|', wenn sie ihre Definitionen in einer Datei mit +dem Namen {\tt meine.tex} geschrieben haben. Die {\em Plain} \TeX\ +Befehle werden dann auf dem schnelleren, vorkompilierten Wege +eingelesen und ihre Definitionen angef\"ugt. + +Schlie\ss{}lich wird das `\verb|@|' Zeichen vor\"ubergehend zu einem +normalen Zeichen gemacht. Auf diese Art ist es m\"oglich, da\ss{} {\em +Plain} \TeX\ seine eigenen Befehle kennt, die sie als Anwender nicht +so einfach benutzen k\"onnen. Sp\"ater wird diesem Zeichen wieder eine +andere Kategorie zugewiesen. Jetzt kommen die Tabellen der +mathematischen Zeichen +\begin{verbatim} +\mathcode`\^^@=\"2201 \mathcode`\^^A=\"3223 \mathcode`\^^B=\"010B +\mathcode`\^^C=\"010C \mathcode`\^^D=\"225E \mathcode`\^^E=\"023A +\mathcode`\^^F=\"3232 \mathcode`\^^G=\"0119 \mathcode`\^^H=\"0115 +\mathcode`\^^I=\"010D \mathcode`\^^J=\"010E \mathcode`\^^K=\"3222 +\mathcode`\^^L=\"2206 \mathcode`\^^M=\"2208 \mathcode`\^^N=\"0231 +\mathcode`\^^O=\"0140 \mathcode`\^^P=\"321A \mathcode`\^^Q=\"321B +\mathcode`\^^R=\"225C \mathcode`\^^S=\"225B \mathcode`\^^T=\"0238 +\mathcode`\^^U=\"0239 \mathcode`\^^V=\"220A \mathcode`\^^W=\"3224 +\mathcode`\^^X=\"3220 \mathcode`\^^Y=\"3221 \mathcode`\^^Z=\"8000 +\mathcode`\^^[=\"2205 \mathcode`\^^\=\"3214 \mathcode`\^^]=\"3215 +\mathcode`\^^^=\"3211 \mathcode`\^^_=\"225F \mathcode`\^^?=\"1273 +\mathcode`\ =\"8000 \mathcode`\!=\"5021 \mathcode`\'=\"8000 +\mathcode`\(=\"4028 \mathcode`\)=\"5029 \mathcode`\*=\"2203 +\mathcode`\+=\"202B \mathcode`\,=\"613B \mathcode`\-=\"2200 +\mathcode`\.=\"013A \mathcode`\/=\"013D \mathcode`\:=\"303A +\mathcode`\;=\"603B \mathcode`\<=\"313C \mathcode`\==\"303D +\mathcode`\>=\"313E \mathcode`\?=\"503F \mathcode`\[=\"405B +\mathcode`\\=\"026E \mathcode`\]=\"505D \mathcode`\_=\"8000 +\mathcode`\{=\"4266 \mathcode`\|=\"026A \mathcode`\}=\"5267 +\end{verbatim} +Es folgen die Setzungen f\"ur\index{Delcode} +\begin{verbatim} +\uccode \lccode +\sfcode \delcode +\end{verbatim} +Abschlie\ss{}end noch einige Definitionen +\begin{verbatim} +\chardef\@ne=1 \chardef\tw@=2 \chardef\thr@@=3 +\chardef\sixt@@n=16 \chardef\@cclv=255 +\mathchardef\@cclvi=256 \mathchardef\@m=1000 +\mathchardef\@M=10000 \mathchardef\@MM=20000 +\end{verbatim} +Diese Definitionen sorgen daf\"ur, da\ss{} \TeX\ bei manchen Anwendungen +schneller l\"auft und weniger Speicher ben\"otigt. In diesem Anhang werden +aber dennoch immer die Zahlkonstanten verwendet, da so die Programme +besser lesbar sind. +\subsection{Die Register} +Der zweite Teil von {\tt plain.tex} besch\"aftigt sich mit der +\index{Alloziierung!Register} +Alloziierung von Registern, so da\ss{} sp\"ater die einzelnen Makros +miteinander arbeiten k\"onnen, ohne sich gegenseitig die Register +umzubelegen. Hier die zugeh\"origen Regeln +\begin{enumerate} +\item Die Register mit den Nummern~0 bis~9 sind immer f\"ur den +tempor\"aren Gebrauch frei. Jedes Makro beendet seine Benutzung eines +dieser Register nach seiner Benutzung.\footnote{Die Z\"ahlregister +{\tt\char92 count0} bis {\tt\char92 count9} sind allerdings schon von +\TeX\ vorbelegt. Diese Reservierung gilt also nur f\"ur alle anderen +Register.} +\item Die Register {\tt\char92 count255}, {\tt\char92 dimen255} und +{\tt\char92 skip255} stehen auch nur f\"ur den tempor\"aren Gebrauch zur +Verf\"ugung. +\item Alle Zuweisungen zu ungeraden Registern sollten lokal, alle zu +geraden Registern sollten global sein.\footnote{Damit verhindert man, +da\ss{} zuviele Register am Ende einer Gruppe wieder hergestellt werden +m\"ussen.} +\item Register d\"urfen nat\"urlich innerhalb einer Gruppe frei belegt +werden, wenn sichergestellt ist, da\ss{} sie am Ende der Gruppe wieder +hergestellt werden k\"onnen und wenn keine anderen Makros globale +Zuweisungen auf dieses Register vornehmen. +\item Register, die von vielen Makros, oder f\"ur eine l\"angere Zeit +beansprucht werden, sollten mit den {\tt\char92 new...} Befehle +alloziiert werden. +\end{enumerate} +Einige \index{Abkuerzung@Abk\"urzung}Abk\"urzungen dienen dem besseren Zugriff auf die +Temporalregister +\begin{verbatim} +\countdef\count@=255 \toksdef\toks@=0 \skipdef\skip@=0 +\dimendef\dimen@=0 \dimendef\dimen@i=1 \dimendef\dimen@ii=2 +\end{verbatim} +Es folgen nun einige Zuweisungen zu Registern, mit denen sp\"ater +festgehalten wird, welche Zahl denn nun mit einem {\tt\char92 new} +Befehl alloziiert wurde. Diese Zahl kann auch von einem alloziierenden +Makro verwendet werden. +\begin{verbatim} +\count10=22 % this counter allocates \count registers 23, 24, 25, ... +\count11=9 % this counter allocates \dimen registers 10, 11, 12, ... +\count12=9 % this counter allocates \skip registers 10, 11, 12, ... +\count13=9 % this counter allocates \muskip registers 10, 11, 12, ... +\count14=9 % this counter allocates \box registers 10, 11, 12, ... +\count15=9 % this counter allocates \toks registers 10, 11, 12, ... +\count16=-1 % this counter allocates input streams 0, 1, 2, ... +\count17=-1 % this counter allocates output streams 0, 1, 2, ... +\count18=3 % this counter allocates math families 4, 5, 6, ... +\count19=0 % this counter allocates language codes 1, 2, 3, ... +\count20=255 % this counter allocates insertions 254, 253, 252, ... +\countdef\insc@unt=20 % nickname for the insertion counter +\countdef\allocationnumber=21 % the most recent allocation +\countdef\m@ne=22 \m@ne=-1 % a handy constant +\def\wlog{\immediate\write-1} % this will write on log file (only) +\end{verbatim} +\begin{verbatim} +\outer\def\newcount{\alloc@0\count\countdef\insc@unt} +\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} +\outer\def\newskip{\alloc@2\skip\skipdef\insc@unt} +\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} +\outer\def\newbox{\alloc@4\box\chardef\insc@unt} +\let\newtoks=\relax % this allows plain.tex to be read in twice +\outer\def\newhelp#1#2{\newtoks#1#1=\expandafter{\csname#2\endcsname}} +\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +\outer\def\newread{\alloc@6\read\chardef\sixt@@n} +\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n} +\outer\def\newfam{\alloc@8\fam\chardef\sixt@@n} +\outer\def\newlanguage{\alloc@9\language\chardef\@cclvi} +\end{verbatim} +\begin{verbatim} +\def\alloc@#1#2#3#4#5{\global\advance\count1#1 by 1 + \ch@ck#1#4#2% make sure there's still room + \allocationnumber=\count1#1 \global#3#5=\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} +\end{verbatim} +\begin{verbatim} +\outer\def\newinsert#1{\global\advance\insc@unt by-1 + \ch@ck0\insc@unt\count \ch@ck1\insc@unt\dimen + \ch@ck2\insc@unt\skip \ch@ck4\insc@unt\box + \allocationnumber=\insc@unt + \global\chardef#1=\allocationnumber + \wlog{\string#1=\string\insert\the\allocationnumber}} +\end{verbatim} +\begin{verbatim} +\def\ch@ck#1#2#3{\ifnum\count1#1<#2% + \else\errmessage{No room for a new #3}\fi} +\end{verbatim} +Das Makro `\verb|\alloc@|' erledigt hier die meiste Arbeit, inkl.\ der +Meldung in den Logfile etc. Au\ss{}erdem wurde ein Befehl `\verb|\newhelp|' +eingef\"uhrt, der es erlaubt relativ einfach eigene Hilfstexte zu +bearbeiten. Mit der Folge +\begin{verbatim} +\newhelp\helpout{Hilfstext} +\errhelp=\helpout +\end{verbatim} +vor dem Aufruf von `\verb|\errmessage|' wird dieser Text verf\"ugbar +gemacht.\footnote{Dies d\"urfte aber wirklich {\em nur} Makrodesigner +interessieren.} + +Nun werden die wichtigen Konstanten \index{Alloziierung!Konstanten} +alloziiert. +\begin{verbatim} +\newdimen\maxdimen \maxdimen=16383.99999pt +\newskip\hideskip \hideskip=-1000pt plus1fill +\newskip\centering \centering=0pt plus 1000pt minus 1000pt +\newdimen\p@ \p@=1pt % this saves macro space and time +\newdimen\z@ \z@=0pt % likewis +\newskip\z@skip \z@skip=0pt plus0pt minus0pt +\newbox\voidb@x % permanently void box register +\end{verbatim} +Die Kontrollsequenz `\verb|\maxdimen|' steht f\"ur die gr\"o\ss{}te zur +Verf\"ugung stehende Dimension. Die Befehle `\verb|\hideskip|' und +`\verb|\centering|' sollten niemals ge\"andert werden, von ihnen wird +sp\"ater noch zu lesen sein. Die konstanten Zuweisungen dienen wieder +einmal der Optimierung. + +Abschlie\ss{}end noch einige andere Alloziierungen +\begin{verbatim} +\outer\def\newif#1{\count@=\escapechar \escapechar=-1\parbreak% + \expandafter\expandafter\expandafter\parbreak% + \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}%\parbreak% + \expandafter\expandafter\expandafter\parbreak% + \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}%\parbreak% + \@if#1{false}\escapechar=\count@} % the condition starts out false +\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}\parbreak% +{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required +\end{verbatim} +\subsection{Parameter} +INITEX setzt die meisten Parameter auf Null, leert alle Box- und +sonstigen Register, es gibt aber auch einige Ausnahmen + +\medskip\begin{tabular}{ll} +{\em Parameter} & {\em voreingestellter Wert}\\[.5ex] +\verb|\mag| & 1000\\ +\verb|\tolerance| & 10000\\ +\verb|\maxdeadcycles| & 25\\ +\verb|\hangafter| & 1\\ +\verb|\escapechar| & \verb|`\\|\\ +\verb|\endlinechar| & \verb|`\^^M| +\end{tabular}\medskip + +Dar\"uber hinaus setzt {\em Plain} \TeX\ noch weitere Werte +\begin{verbatim} +\pretolerance=100 \tolerance=200 \hbadness=1000 \vbadness=1000 +\linepenalty=10 \hyphenpenalty=50 \exhyphenpenalty=50 +\binoppenalty=700 \relpenalty=500 +\clubpenalty=150 \widowpenalty=150 \displaywidowpenalty=50 +\brokenpenalty=100 \predisplaypenalty=10000 +\doublehyphendemerits=10000 \finalhyphendemerits=5000 \adjdemerits=10000 +\tracinglostchars=1 \uchyph=1 \delimiterfactor=901 +\defaulthyphenchar=`\- \defaultskewchar=-1 \newlinechar=-1 +\showboxbreadth=5 \showboxdepth=3 \errorcontextlines=5 +\end{verbatim}\index{Badness} +\begin{verbatim} +\hfuzz=0.1pt \vfuzz=0.1pt \overfullrule=5pt +\hsize=6.5in \vsize=8.9in \parindent=20pt +\maxdepth=4pt \splitmaxdepth=\maxdimen \boxmaxdepth=\maxdimen +\delimitershortfall=5pt \nulldelimiterspace=1.2pt \scriptspace=0.5pt +\end{verbatim} +\begin{verbatim} +\parskip=0pt plus 1pt +\abovedisplayskip=12pt plus 3pt minus 9pt +\abovedisplayshortskip=0pt plus 3pt +\belowdisplayskip=12pt plus 3pt minus 9pt +\belowdisplayshortskip=7pt plus 3pt minus 4pt +\topskip=10pt \splittopskip=10pt +\parfillskip=0pt plus 1fil +\end{verbatim} +\begin{verbatim} +\thinmuskip=3mu +\medmuskip=4mu plus 2mu minus 4mu +\thickmuskip=5mu plus 5mu +\end{verbatim} +Einige Parameter werden erst zur Laufzeit initialisiert. Die Parameter +\begin{verbatim} +\time \day \month \year +\end{verbatim} +werden erst zu Beginn einer Bearbeitung gesetzt. Der Parameter +`\verb|\outputpenalty|' wird von der Ausgaberoutine gesetzt. Die +Parameter +\begin{verbatim} +\predisplaysize \displaywidth \displayindet +\end{verbatim} +erhalten ihre Werte, unmittelbar bevor eine \index{Formel!abgesetzte} +abgesetzte Formel erstellt +wird, und die Parameter +\begin{verbatim} +\looseness=0 +\hangindent=0pt +\hangafter=1 +\parshape=0 +\end{verbatim} +werden am Ende jedes Paragraphen gesetzt, wenn \TeX\ in den vertikalen +Modus \"ubergeht. Auch die Parameter +\begin{verbatim} +\baselineskip \lineskip \lineskiplimit +\end{verbatim}\index{Baseline!Skip} +werden erst durch ein Makro initialisiert, das erst sp\"ater vorgestellt +wird. + +Jetzt kommen einige ``Pseudoparameter'', sie verhalten sich genauso, +wie die Parameter von \TeX, geh\"oren aber eher zum Sprachumfang von +{\em Plain} \TeX, als zu den Primitiven. +\begin{verbatim} +\newskip\smallskipamount % the amount of a \smallskip + \smallskipamount=3pt plus1pt minus1pt +\newskip\medskipamount % the amount of a \medskip + \medskipamount=6pt plus2pt minus2pt +\newskip\bigskipamount % the amount of a \bigskip + \bigskipamount=12pt plus4pt minus4pt +\newskip\normalbaselineskip % normal value of \baselineskip + \normalbaselineskip=12pt +\newskip\normallineskip % normal value of \lineskip + \normallineskip=1pt +\newdimen\normallineskiplimit % normal value of \lineskiplimit + \normallineskiplimit=0pt +\newdimen\jot % unit of measure for opening up displays + \jot=3pt +\newcount\interdisplaylinepenalty % interline penalty in \displaylines + \interdisplaylinepenalty=100 +\newcount\interfootnotelinepenalty % interline penalty in footnotes + \interfootnotelinepenalty=100 +\end{verbatim} +\subsection{Fontinformationen} +Hier kommen nun die Befehle, die \TeX\ braucht um sich in den ganzen +Zeichens\"atzen zurechtfinden zu k\"onnen. Zun\"achst das {\tt magstep} +Makro +\begin{verbatim} +\def\magstephalf{1095 } +\def\magstep#1{\ifcase#1 1000\or + 1200\or 1440\or 1728\or 2074\or 2488\fi\relax} +\end{verbatim} +Bemerkenswert ist vielleicht, da\ss{} eine Zahl zur\"uck gegeben wird und +nicht mit dem Multiplikationsbefehl gearbeitet wird. Der Grund daf\"ur +liegt darin, da\ss{} der Multiplikationsbefehl eine Zuweisung bedeutet, +und Zuweisungen werden innerhalb von Makros nicht ausgef\"uhrt. + +Jetzt kommen die Zeichens\"atze, die schon einmal vorab geladen werden +sollen. +\begin{verbatim} +\font\tenrm=cmr10 \font\preloaded=cmr9 \font\preloaded=cmr8 +\font\sevenrm=cmr7 \font\preloaded=cmr6 \font\fiverm=cmr5 +\end{verbatim} +\begin{verbatim} +\font\teni=cmmi10 \font\preloaded=cmmi9 \font\preloaded=cmmi8 +\font\seveni=cmmi7 \font\preloaded=cmmi6 \font\fivei=cmmi5 +\end{verbatim} +\begin{verbatim} +\font\tensy=cmsy10 \font\preloaded=cmsy9 \font\preloaded=cmsy8 +\font\sevensy=cmsy7 \font\preloaded=cmsy6 \font\fivesy=cmsy5 +\end{verbatim} +\begin{verbatim} +\font\tenex=cmex10 +\end{verbatim} +\begin{verbatim} +\font\tenbf=cmbx10 \font\preloaded=cmbx9 \font\preloaded=cmbx8 +\font\sevenbf=cmbx7 \font\preloaded=cmbx6 \font\fivebf=cmbx5 +\end{verbatim} +\begin{verbatim} +\font\tensl=cmsl10 \font\preloaded=cmsl9 \font\preloaded=cmsl8 +\font\tentt=cmtt10 \font\preloaded=cmtt9 \font\preloaded=cmtt8 +\font\tenit=cmti10 \font\preloaded=cmti9 \font\preloaded=cmti8 +\font\preloaded=cmss10 \font\preloaded=cmssq8 +\font\preloaded=cmssi10 \font\preloaded=cmssqi8 +\end{verbatim} +\begin{verbatim} +\font\preloaded=cmr7 scaled \magstep4 % for titles +\font\preloaded=cmtt10 scaled \magstep2 +\font\preloaded=cmssbx10 scaled \magstep2 +\end{verbatim} +\begin{verbatim} +% Additional \preloaded fonts can be specified here. +% (And those that were \preloaded above can be eliminated.) +\let\preloaded=\undefined % preloaded fonts must be declared anew later. +\end{verbatim} +Mit dem `\verb|\preloaded|' Befehl werden die Zeichens\"atze nicht {\em +tatsaechlich} verfuegbar gemacht. Der Befehl bleibt undefiniert. Der +Grund daf\"ur liegt darin, da\ss{} {\em Plain} \TeX\ ein Standardformat ist, +das nicht zu viele Zeichens\"atze enthalten soll. Dennoch werden die +Zeichensatzinformationen hier in \TeX's Speicher geladen und nicht +erst beim Aufruf mit `\verb|\font|'. Das spart sp\"ater eine Menge Zeit. + +Die meisten Zeichens\"atze haben ihre eigenen Werte f\"ur `\verb|\/|', +Trennungszeichen u.a. Mathematische Zeichen- und Symbols\"atze haben das +oft nicht, sie m\"ussen erst definiert werden, das geschieht hier. +\begin{verbatim} +\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177 +\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60 +\end{verbatim} +Nachdem nun die Zeichens\"atze geladen sind, m\"ussen sie noch in +Familien, f\"ur den Gebrauch in mathematischen Sequenzen eingeordnet +werden, und es fehlen noch die \index{Abkuerzung@Abk\"urzung} +Abk\"urzungen, wie `\verb|\it|' oder +`\verb|\rm|' +\begin{verbatim} +\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm +\def\rm{\fam0 \tenrm} +\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei +\def\mit{\fam1 } \def\oldstyle{\fam1 \teni} +\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy +\def\cal{\fam2 } +\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex +\end{verbatim} +\begin{verbatim} +\newfam\itfam \def\it{\fam\itfam\tenit} \textfont\itfam=\tenit +\newfam\slfam \def\sl{\fam\slfam\tensl} \textfont\slfam=\tensl +\newfam\bffam \def\bf{\fam\bffam\tenbf} \textfont\bffam=\tenbf + \scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\fivebf +\newfam\ttfam \def\tt{\fam\ttfam\tentt} \textfont\ttfam=\tentt +\end{verbatim} +\subsection{Textmakros} +Hier kommen nun die ersten Makros, zun\"achst die, die nichts mit dem +mathematischen Zeichensatz zu tun haben. +\begin{verbatim} +\def\frenchspacing{\sfcode`\.=1000 \sfcode`\?=1000 \sfcode`\!=1000 + \sfcode`\:=1000 \sfcode`\;=1000 \sfcode`\,=1000 } +\def\nonfrenchspacing{\sfcode`\.=3000 \sfcode`\?=3000 \sfcode`\!=3000 + \sfcode`\:=2000 \sfcode`\;=1500 \sfcode`\,=1250 } +\def\normalbaselines{\lineskip=\normallineskip + \baselineskip=\normalbaselineskip \lineskiplimit=\normallineskiplimit} +\end{verbatim}\index{Baseline!Normal} +Die nun folgenden Makros sind zwar einfach, aber sie werden oft +eingesetzt. Zun\"achst werden `\verb|<TAB>|' und `\verb|<RETURN>|' so +umdefiniert, da\ss{} sie als normales Leerzeichen verstanden werden. Dann +kommen Makros, f\"ur Leute, die sich schwer tun +\index{Anfuehrungszeichen@Anf\"uhrungszeichen}Anf\"uhrungszeichen und +eckige Klammern zu schreiben. Die Definitionen von `\verb|\endgraf|' +und `\verb|\endline|' sind n\"otig, da es oft sinnvoll ist `\verb|\par|' +und `\verb|\cr|' selber umzudefinieren. Der Rest erkl\"art sich von +selber. +\begin{verbatim} +\def\^^I{\ } \def\^^M{\ } +\def\lq{`} \def\rq{'} \def\lbrack{[} \def\rbrack{]} +\let\endgraf=\par \let\endline=\cr +\def\space{ } \def\empty{} \def\null{\hbox{}} +\let\bgroup={ \let\egroup=} +\end{verbatim} +Nun folgt die Definition des trickreichen Makros `\verb|\obeylines|' +und `\verb|\obeyspaces|' +\begin{verbatim} +\def\obeyspaces{\catcode`\ =\active} +{\obeyspaces\global\let =\space} +{\catcode`\^^M=\active % these lines must end with `%' + \gdef\obeylines{\catcode`\^^M=\active \let^^M=\par}% + \global\let^^M=\par} % this is in case ^^M appears in a \write +\end{verbatim} +Die Definition benutzt `\verb|\let|' anstelle von `\verb|\def|' um +sp\"ater mehr Flexibilit\"at zu erreichen.\footnote{Beispiele dazu +im Kapitel \"uber Tabellen.} +Jetzt folgen die {\em Schleifen}makros. +\begin{verbatim} +\def\loop#1\repeat{\def\body{#1}\iterate} +\def\iterate{\body \let\next=\iterate \else\let\next=\relax\fi \next} +\let\repeat=\fi % this makes \loop...\if...\repeat skippable +\end{verbatim} +Nun kommen die Definitionen f\"ur Leerr\"aume. Neben den bekannten +Befehlen mit ihren Eigenschaften werden hier auch `\verb|\hglue\<Leim>|' +und `\verb|\vglue\<Leim>|' definiert, die einen Zwischenraum schaffen, +der {\em nie} entfernt wird. + +Die Makros `\verb|\nointerlineskip|' und `\verb|\offinterlineskip|' +bewirken beide, da\ss{} zwischen den n\"achsten Zeilen kein +\index{Abstand!Zeilen}Zeilenabstand +eingef\"ugt wird. Der zweite Befehl ist dabei der weitergehende. Er +bewirkt, da\ss{} zwar Zwischenraum da ist, dieser aber die Ausdehnung Null +hat. Der erste Befehl wirkt nur auf die n\"achste Zeile. +\begin{verbatim} +\def\enskip{\hskip.5em\relax} \def\enspace{\kern.5em } +\def\quad{\hskip1em\relax} \def\qquad{\hskip2em\relax} +\def\thinspace{\kern .16667em } \def\negthinspace{\kern-.16667em } +\end{verbatim} +\begin{verbatim} +\def\hglue{\afterassignment\hgl@\skip@=} +\def\hgl@{\leavevmode \count@=\spacefactor \vrule width0pt + \nobreak\hskip\skip@ \spacefactor=\count@} +\def\vglue{\afterassignment\vgl@\skip@=} +\def\vgl@{\par \dimen@=\prevdepth \hrule height0pt + \nobreak\vskip\skip@ \prevdepth=\dimen@} +\def\topglue{\nointerlineskip \vglue-\topskip \vglue} % for top of page +\end{verbatim} +\begin{verbatim} +\def\nointerlineskip{\prevdepth=-1000pt } +\def\offinterlineskip{\baselineskip=-1000pt + \lineskip=0pt \lineskiplimit=\maxdimen} +\end{verbatim}\index{Baseline!Skip} +\begin{verbatim} +\def\smallskip{\vskip\smallskipamount} +\def\medskip{\vskip\medskipamount} +\def\bigskip{\vskip\bigskipamount} +\end{verbatim} +Nun kommen die Befehle zum Zeilenumbruch u.a. +\begin{verbatim} +\def\break{\penalty-10000 } \def\nobreak{\penalty10000 } +\def\allowbreak{\penalty0 } +\def~{\penalty10000\ } +\def\slash{/\penalty\exhyphenpenalty} +\end{verbatim} +\begin{verbatim} +\def\filbreak{\par\vfil\penalty-200\vfilneg} +\def\goodbreak{\par\penalty-500 } +\def\eject{\par\penalty-10000 } +\def\supereject{\par\penalty-20000 } +\end{verbatim} +\begin{verbatim} +\def\removelastskip{\ifdim\lastskip=0pt \else\vskip-\lastskip\fi} +\def\smallbreak{\par \ifdim\lastskip<\smallskipamount + \removelastskip \penalty-50 \smallskip \fi} +\def\medbreak{\par \ifdim\lastskip<\medskipamount + \removelastskip \penalty-100 \medskip \fi} +\def\bigbreak{\par \ifdim\lastskip<\bigskipamount + \removelastskip \penalty-200 \bigskip \fi} +\end{verbatim} +Als n\"achstes die Boxbefehle\index{Box!Befehle} +\begin{verbatim} +\def\line{\hbox to\hsize} +\def\leftline#1{\line{#1\hss}} \def\rightline#1{\line{\hss#1}} +\def\centerline#1{\line{\hss#1\hss}} +\end{verbatim} +\begin{verbatim} +\def\llap#1{\hbox to 0pt{\hss#1}} \def\rlap#1{\hbox to 0pt{#1\hss}} +\end{verbatim} +\begin{verbatim} +\def\m@th{\mathsurround=0pt } +\def\underbar#1{$\setbox0=\hbox{#1} \dp0=0pt + \m@th \underline{\box0}$} +\end{verbatim} +Beachten sie, da\ss{} \TeX\ in den mathematischen Modus umschaltet, um +eine Unterstreichung vorzunehmen. Dieser Gebrauch vom mathematischen +Modus kommt noch mehrmals vor. + +Zun\"achst aber mal der `\verb|\strut|' Befehl in allen vorkommenden +Feinheiten +\begin{verbatim} +\newbox\strutbox +\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt} +\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} +\end{verbatim} +Der `\verb|\relax|' Befehl wird hier verwendet, um Seiteneffekte zu +vermeiden. + +Und noch einige Tabellenbefehle +\begin{verbatim} +\def\ialign{\everycr={}\tabskip=0pt \halign} % initialized \halign +\def\hidewidth{\hskip\hideskip} +\end{verbatim} +\begin{verbatim} +\newcount\mscount +\def\multispan#1{\omit \mscount=#1 \loop\ifnum\mscount>1 \sp@n\repeat} +\def\sp@n{\span\omit \advance\mscount by -1 } +\end{verbatim} +Die nun folgenden Befehle betreffen alle den Tabellenaufbau. Am besten +sehen sie sich die Wirkung mit `\verb|\tracingall|' an einem einfachen +Beispiel an. +\begin{verbatim} +\newif\ifus@ \newif\if@cr +\newbox\tabs \newbox\tabsyet \newbox\tabsdone +\end{verbatim} +\begin{verbatim} +\def\cleartabs{\global\setbox\tabsyet=\null \setbox\tabs=\null} +\def\settabs{\setbox\tabs=\null \futurelet\next\sett@b} +\let\+=\relax % in case this file is being read in twice +\def\sett@b{\ifx\next\+ \let\next=\relax % turn off \outerness + \def\next{\afterassignment\s@tt@b\let\next}% + \else\let\next=\s@tcols\fi\next} +\def\s@tt@b{\let\next=\relax \us@false\m@ketabbox} +\outer\def\+{\tabalign} \def\tabalign{\us@true \m@ketabbox} +\def\s@tcols#1\columns{\count@=#1 \dimen@=\hsize + \loop \ifnum\count@>0 \@nother \repeat} +\def\@nother{\dimen@ii=\dimen@ \divide\dimen@ii by\count@ + \setbox\tabs=\hbox{\hbox to\dimen@ii{}\unhbox\tabs}% + \advance\dimen@ by-\dimen@ii \advance\count@ by -1 } +\end{verbatim} +\begin{verbatim} +\def\m@ketabbox{\begingroup + \global\setbox\tabsyet=\copy\tabs \global\setbox\tabsdone=\null + \def\cr{\@crtrue\crcr\egroup\egroup + \ifus@ \unvbox0 \lastbox\fi \endgroup + \setbox\tabs=\hbox{\unhbox\tabsyet\unhbox\tabsdone}}% + \setbox0=\vbox\bgroup\@crfalse \ialign\bgroup&\t@bbox##\t@bb@x\crcr} +\end{verbatim} +\begin{verbatim} +\def\t@bbox{\setbox0=\hbox\bgroup} +\def\t@bb@x{\if@cr\egroup % now \box0 holds the column + \else\hss\egroup \global\setbox\tabsyet=\hbox{\unhbox\tabsyet + \global\setbox1=\lastbox}% now \box1 holds its size + \ifvoid1 \global\setbox1=\hbox to\wd0{}% + \else\setbox0=\hbox to\wd1{\unhbox0}\fi + \global\setbox\tabsdone=\hbox{\box1\unhbox\tabsdone}\fi + \box0} +\end{verbatim} +Es folgen die Makros f\"ur die +Aufz\"ahlungen\index{Aufzaehlung!Makros@Aufz\"ahlung!Makros} +\begin{verbatim} +\def\hang{\hangindent\parindent} +\def\item{\par\hang\textindent} +\def\itemitem{\par\indent \hangindent2\parindent \textindent} +\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces} +\def\narrower{\advance\leftskip by\parindent + \advance\rightskip by\parindent} +\end{verbatim} +Das folgende Makro dient dazu einen neuen Abschnitt in einem Dokument +einzuleiten. Es beginnt eine neue Seite, wenn die letzte nahezu voll +ist, dann wird ein `\verb|\bigskip|' eingef\"ugt, und der +Abschnittstitel in einer eigenen Zeile in Fettschrift ausgegeben. +Dieser Titel erscheint auch bei der Ausgabe auf dem \index{Bildschirm} +Bildschirm. +Au\ss{}erdem wird bei dem ersten Paragraphen keine Einr\"uckung vorgenommen. +\begin{verbatim} +\outer\def\beginsection#1\par{\vskip0pt plus.3\vsize\penalty-250 + \vskip0pt plus-.3\vsize\bigskip\vskip\parskip + \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent} +\end{verbatim} +Zum Setzen von Lemmata, S\"atzen u.a.\ dient das folgende Makro +\begin{verbatim} +\outer\def\proclaim #1. #2\par{\medbreak + \noindent{\bf#1.\enspace}{\sl#2\par}% + \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi} +\end{verbatim} +Hier nun die Definition der Makros f\"ur den Flattersatz. Das zweite +Makro dient f\"ur die Ausgabe in der Teletyperschrift, da dort die +Wortabst\"ande gr\"o\ss{}er sind. +\begin{verbatim} +\def\raggedright{\rightskip=0pt plus2em + \spaceskip=.3333em \xspaceskip=.5em\relax} +\def\ttraggedright{\tt\rightskip=0pt plus2em\relax} +\end{verbatim} +Schlie\ss{}lich die \index{Akzent!Definition} +Akzente, die ja auch via Makro realisiert werden. +\begin{verbatim} +\chardef\%=`\% \chardef\&=`\& \chardef\#=`\# \chardef\$=`\$ +\chardef\ss=\"19 +\chardef\ae=\"1A \chardef\oe=\"1B \chardef\o=\"1C +\chardef\AE=\"1D \chardef\OE=\"1E \chardef\O=\"1F +\chardef\i=\"10 \chardef\j=\"11 % dotless letters +\def\aa{\accent'27a} \def\l{\char'40l} +\end{verbatim} +\begin{verbatim} +\def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary +\def\_{\leavevmode \kern.06em \vbox{\hrule width0.3em}} +\def\L{\leavevmode\setbox0=\hbox{L}\hbox to\wd0{\hss\char'40L}} +\def\AA{\leavevmode\setbox0=\hbox{h}\dimen@=\ht0 + \advance\dimen@ by-1ex + \rlap{\raise.67\dimen@\hbox{\char'27}}A} +\end{verbatim} +\begin{verbatim} +\def\mathhexbox#1#2#3{\leavevmode + \hbox{$\m@th \mathchar\"#1#2#3$}} +\def\dag{\mathhexbox279} \def\ddag{\mathhexbox27A} +\def\S{\mathhexbox278} \def\P{\mathhexbox27B} +\end{verbatim} +\begin{verbatim} +\def\oalign#1{\leavevmode\vtop{\baselineskip0pt \lineskip.25ex + \ialign{##\crcr#1\crcr}}} % put characters over each other +\def\ooalign{\lineskiplimit-\maxdimen \oalign} +\def\d#1{\oalign{#1\crcr\hidewidth.\hidewidth}} +\def\b#1{\oalign{#1\crcr\hidewidth + \vbox to.2ex{\hbox{\char'26}\vss}\hidewidth}} +\def\c#1{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent'30 #1% + \else{\ooalign{\hidewidth\char'30\hidewidth\crcr\unhbox0}}\fi} +\def\copyright{{\ooalign + {\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}} +\end{verbatim}\index{Baseline!Skip} +\begin{verbatim} +\def\dots{\relax\ifmmode\ldots\else$\m@th \ldots\,$\fi} +\def\TeX{T\kern-.1667em \lower.5ex\hbox{E}\kern-.125em X} +\end{verbatim} +\begin{verbatim} +\def\`#1{{\accent\"12 #1}} \def\'#1{{\accent\"13 #1}} +\def\v#1{{\accent\"14 #1}} \def\u#1{{\accent\"15 #1}} +\def\=#1{{\accent\"16 #1}} \def\^#1{{\accent\"5E #1}} +\def\.#1{{\accent\"5F #1}} \def\H#1{{\accent\"7D #1}} +\def\~#1{{\accent\"7E #1}} \def\\"#1{{\accent\"7F #1}} +\def\t#1{{\edef\next{\the\font}\the\textfont1\accent\"7F\next#1}} +\end{verbatim} +Einige spezielle Befehle f\"ur die gl\"ucklichen Menschen, die eine +bessere Tastatur haben, als Normalsterbliche. +\begin{verbatim} +\let\^^_=\v \let\^^S=\u \let\^^D=\^ +\end{verbatim} +Jetzt jede Menge M\"oglichkeiten Zwischenraum aufzuf\"ullen. +\begin{verbatim} +\def\hrulefill{\leaders\hrule\hfill} +\def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu . \mkern1.5mu$}\hfill} +\def\rightarrowfill{$\m@th \mathord- \mkern-6mu + \cleaders\hbox{$\mkern-2mu \mathord- \mkern-2mu$}\hfill + \mkern-6mu \mathord\rightarrow$} +\def\leftarrowfill + {$\m@th \mathord\leftarrow \mkern-6mu + \cleaders\hbox{$\mkern-2mu \mathord- \mkern-2mu$}\hfill + \mkern-6mu \mathord-$} +\end{verbatim} +\begin{verbatim} +\mathchardef\braceld=\"37A \mathchardef\bracerd=\"37B +\mathchardef\bracelu=\"37C \mathchardef\braceru=\"37D +\def\upbracefill{$\m@th + \bracelu\leaders\vrule\hfill\bracerd + \braceld\leaders\vrule\hfill\braceru$} +\def\downbracefill{$\m@th + \braceld\leaders\vrule\hfill\braceru + \bracelu\leaders\vrule\hfill\bracerd$} +\end{verbatim} +Die Befehle `\verb|\upbracefill|' und `\verb|\downbracefill|' f\"urfen +nur innerhalb einer \index{Box!Hbox}`\verb|\hbox|' auftreten, oder in einer Tabelle. +Nun kommt noch die Definition von `\verb|\bye|' +\begin{verbatim} +\outer\def\bye{\par\vfill\supereject\end} % the recommended way to stop +\end{verbatim} +\subsection{Makros f\"ur die Mathematik} +Viele der in diesem Abschnitt vertretenen Makros dienen nur der +Darstellung von Sonderzeichen, sie werden hier nicht gesondert +aufgef\"uhrt. Zun\"achst einmal einige einfache Makros, f\"ur Leute, die +kein `\verb|_|' oder `\verb|^|' auf ihrer Tastatur haben gibt es die +Befehle `\verb|\sp|' und `\verb|\sb|'. Dann kommen noch die Makros f\"ur +die Zwischenr\"aume, und andere Kleinigkeiten +\begin{verbatim} +\let\sp=^ \let\sb=_ {\catcode`\_=\active \global\let_=\_} +\def\,{\mskip\thinmuskip} \def\!{\mskip-\thinmuskip} +\def\>{\mskip\medmuskip} \def\;{\mskip\thickmuskip} +\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} +{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math +\end{verbatim} +\begin{verbatim} +{\catcode`\'=\active \gdef'{^\bgroup\prim@s}} +\def\prim@s{\prime\futurelet\next\pr@m@s} +\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s + \else\ifx^\next\let\nxt\pr@@@t + \else\let\nxt\egroup\fi\fi \nxt} +\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup} +\end{verbatim} +Jetzt kommen die Definitionen f\"ur griechische Buchstaben. Um die +Geschichte nicht allzu lang werden zu lassen werden Folgen von +Befehlen durch drei Punkte angezeigt. +\begin{verbatim} +\mathchardef\alpha=\"010B ... \mathchardef\omega=\"0121 +\mathchardef\Gamma=\"7000 ... \mathchardef\Omega=\"700A +\mathchardef\aleph=\"0240 ... \mathchardef\spadesuit=\"027F +\def\hbar{{\mathchar'26\mkern-9muh}} +\def\surd{{\mathchar\"1270}} +\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr + \not\mathrel{\mkern14mu}\crcr \noalign{\nointerlineskip} + \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}} +\end{verbatim} +Nun die gro\ss{}en Symbole +\begin{verbatim} +\mathchardef\smallint=\"1273 +\mathchardef\sum=\"1350 ... \mathchardef\biguplus=\"1355 +\mathchardef\intop=\"1352 \def\int{\intop\nolimits} +\mathchardef\ointop=\"1348 \def\oint{\ointop\nolimits} +\end{verbatim} +Auch nichts verwunderliches bei den bin\"aren Operatoren +\begin{verbatim} +\mathchardef\pm=\"2206 ... \mathchardef\amalg=\"2271 +\end{verbatim} +Auch die Relationen werden einfach linear definiert, mit Ausnahme der +Relationen, die aus verschiedenen Zeichen zusammengesetzt sind. Dazu +geh\"ort `\verb|\mapsto|' und `\verb|\longmapsto|' +\begin{verbatim} +\mathchardef\leq=\"3214 ... \mathchardef\perp=\"323F +\def\joinrel{\mathrel{\mkern-3mu}} +\def\relbar{\mathrel{\smash-}} \def\Relbar{\mathrel=} +\def\longrightarrow{\relbar\joinrel\rightarrow} +\def\Longrightarrow{\Relbar\joinrel\Rightarrow} +\def\longleftarrow{\leftarrow\joinrel\relbar} +\def\Longleftarrow{\Leftarrow\joinrel\Relbar} +\def\longleftrightarrow{\leftarrow\joinrel\rightarrow} +\def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow} +\mathchardef\mapstochar=\"322F \def\mapsto{\mapstochar\rightarrow} +\def\longmapsto{\mapstochar\longrightarrow} +\mathchardef\lhook=\"312C \def\hookrightarrow{\lhook\joinrel\rightarrow} +\mathchardef\rhook=\"312D \def\hookleftarrow{\leftarrow\joinrel\rhook} +\end{verbatim} +\begin{verbatim} +\def\neq{\not=} \def\models{\mathrel|\joinrel=} +\def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft} +\end{verbatim} +Nach der Definition von `\verb|\ldotp|' und `\verb|\cdotp|' ist die +weitere Definition von den im mathematischen Modus gebr\"auchlichen +Punkten keine Schwierigkeit mehr. +\begin{verbatim} +\mathchardef\ldotp=\"613A\mathchardef\cdotp=\"6201\mathchardef\colon=\"603A +\def\ldots{\mathinner{\ldotp\ldotp\ldotp}} +\def\cdots{\mathinner{\cdotp\cdotp\cdotp}} +\def\vdots{\vbox{\baselineskip=4pt \lineskiplimit=0pt + \kern6pt \hbox{.}\hbox{.}\hbox{.}}} +\def\ddots{\mathinner{\mkern1mu\raise7pt\vbox{\kern7pt\hbox{.}}\mkern2mu + \raise4pt\hbox{.}\mkern2mu\raise1pt\hbox{.}\mkern1mu}} +\end{verbatim}\index{Baseline!Skip} +Die meisten mathematischen \index{Akzent!mathematische} +Akzente werden mit `\verb|\mathaccent|' +realisiert, die mit variabler Breite m\"ussen einzeln bereitgestellt +werden +\begin{verbatim} +\def\acute{\mathaccent\"7013 } ... \def\ddot{\mathaccent\"707F } +\def\widetilde{\mathaccent\"0365 } \def\widehat{\mathaccent\"0362 } +\def\overrightarrow#1{\vbox{\ialign{##\crcr + \rightarrowfill\crcr\noalign{\kern-1pt\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overleftarrow#1{\vbox{\ialign{##\crcr + \leftarrowfill\crcr\noalign{\kern-1pt\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overbrace#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3pt} + \downbracefill\crcr\noalign{\kern3pt\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} +\def\underbrace#1{\mathop{\vtop{\ialign{##\crcr + $\hfil\displaystyle{#1}\hfil$\crcr \noalign{\kern3pt\nointerlineskip} + \upbracefill\crcr\noalign{\kern3pt}}}}\limits} +\def\skew#1#2#3{{#2{#3\mkern#1mu}\mkern-#1mu}{}} +\end{verbatim} +Nun die 24 \index{Klammer}Klammern, die in der Gr\"o\ss{}e variabel sind +\begin{verbatim} +\def\langle{\delimiter\"426830A } \def\rangle{\delimiter\"526930B } +\def\lbrace{\delimiter\"4266308 } \def\rbrace{\delimiter\"5267309 } +\def\lceil{\delimiter\"4264306 } \def\rceil{\delimiter\"5265307 } +\def\lfloor{\delimiter\"4262304 } \def\rfloor{\delimiter\"5263305 } +\def\lgroup{\delimiter\"400033A } \def\rgroup{\delimiter\"500033B } +\def\lmoustache{\delimiter\"4000340 } \def\rmoustache{\delimiter\"5000341 } +\def\uparrow{\delimiter\"3222378 } \def\Uparrow{\delimiter\"322A37E } +\def\downarrow{\delimiter\"3223379 } \def\Downarrow{\delimiter\"322B37F } +\def\updownarrow{\delimiter\"326C33F } \def\arrowvert{\delimiter\"033C000 } +\def\Updownarrow{\delimiter\"326D377 } \def\Arrowvert{\delimiter\"033D000 } +\def\vert{\delimiter\"026A30C } \def\Vert{\delimiter\"026B30D } +\def\backslash{\delimiter\"026E30F } \def\bracevert{\delimiter\"033E000 } +\end{verbatim} +Jetzt k\"onnen auch die `\verb|\big...|' Befehle bereitgestellt werden +\begin{verbatim} +\def\bigl{\mathopen\big} \def\bigm{\mathrel\big} \def\bigr{\mathclose\big} +\def\Bigl{\mathopen\Big} \def\Bigm{\mathrel\Big} \def\Bigr{\mathclose\Big} +\def\biggl{\mathopen\bigg} \def\Biggl{\mathopen\Bigg} +\def\biggm{\mathrel\bigg} \def\Biggm{\mathrel\Bigg} +\def\biggr{\mathclose\bigg} \def\Biggr{\mathclose\Bigg} +\def\big#1{{\hbox{$\left#1\vbox to 8.5pt{}\right.\n@space$}}} +\def\Big#1{{\hbox{$\left#1\vbox to 11.5pt{}\right.\n@space$}}} +\def\bigg#1{{\hbox{$\left#1\vbox to 14.5pt{}\right.\n@space$}}} +\def\Bigg#1{{\hbox{$\left#1\vbox to 17.5pt{}\right.\n@space$}}} +\def\n@space{\nulldelimiterspace=0pt \m@th} +\end{verbatim} +Und jetzt noch ein paar \index{Abkuerzung@Abk\"urzung} +Abk\"urzungen, die sich auf +\index{Klammer!Abkuerzungen@Klammer!Abk\"urzung}Klammern beziehen +\begin{verbatim} +\def\choose{\atopwithdelims()} +\def\brack{\atopwithdelims[]} +\def\brace{\atopwithdelims\{\}} +\def\sqrt{\radical\"270370 } +\end{verbatim} +Nun wird es wieder etwas interessanter. Der `\verb|\mathpalette|' +Befehl reagiert unterschiedlich, je nach Stil, in dem er aufgerufen +wird. Er ist ma\ss{}geblich f\"ur weitere Befehle. Diese Definition kann +auch als Muster daf\"ur dienen, wie andere Definitionen auf die +verschiedenen Stile reagieren kann. +\begin{verbatim} +\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}} + {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}} +\end{verbatim} +\begin{verbatim} +\newbox\rootbox +\def\root#1\of{\setbox\rootbox= + \hbox{$\m@th \scriptscriptstyle{#1}$} + \mathpalette\r@@t} +\def\r@@t#1#2{\setbox0=\hbox{$\m@th #1\sqrt{#2}$} + \dimen@=\ht0 \advance\dimen@ by-\dp0 + \mkern5mu \raise.6\dimen@\copy\rootbox \mkern-10mu \box0} +\end{verbatim} +\begin{verbatim} +\newif\ifv@ \newif\ifh@ +\def\vphantom{\v@true\h@false\ph@nt} +\def\hphantom{\v@false\h@true\ph@nt} +\def\phantom{\v@true\h@true\ph@nt} +\def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}% + \else\let\next=\makeph@nt\fi \next} +\def\makeph@nt#1{\setbox0=\hbox{#1}\finph@nt} +\def\mathph@nt#1#2{\setbox0=\hbox{$\m@th#1{#2}$}\finph@nt} +\def\finph@nt{\setbox2=\null \ifv@ \ht2=\ht0 \dp2=\dp0 \fi + \ifh@ \wd2=\wd0 \fi \box2 } +\def\mathstrut{\vphantom(} +\end{verbatim} +\begin{verbatim} +\def\smash{\relax % \relax, in case this comes first in \halign + \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh + \fi \next} +\def\makesm@sh#1{\setbox0=\hbox{#1}\finsm@sh} +\def\mathsm@sh#1#2{\setbox0=\hbox{$\m@th#1{#2}$}\finsm@sh} +\def\finsm@sh{\ht0=0pt \dp0=0pt \box0 } +\end{verbatim} +\begin{verbatim} +\def\cong{\mathrel{\mathpalette\@vereq\sim}} % \sim over = +\def\@vereq#1#2{\lower.5pt\vbox{\baselineskip0pt \lineskip-.5pt + \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} +\def\notin{\mathrel{\mathpalette\c@ncel\in}} +\def\c@ncel#1#2{\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} +\def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} +\def\rlh@#1{\vcenter{\hbox{\ooalign{\raise2pt + \hbox{$#1\rightharpoonup$}\crcr $#1\leftharpoondown$}}}} +\def\buildrel#1\over#2{\mathrel{\mathop{\kern0pt #2}\limits^{#1}}} +\def\doteq{\buildrel\textstyle.\over=} +\end{verbatim}\index{Baseline!Skip} +Hier einige Definitionen f\"ur alternative Namen +\begin{verbatim} +\let\ne=\neq \let\le=\leq \let\ge=\geq +\let\{=\lbrace \let\|=\Vert \let\}=\rbrace +\let\to=\rightarrow \let\gets=\leftarrow \let\owns=\ni +\let\land=\wedge \let\lor=\vee \let\lnot=\neg +\def\iff{\;\Longleftrightarrow\;} +\end{verbatim} +Die meisten Funktionsnamen, die in der Schriftart Roman gesetzt werden +sind schon bekannt, hier folgen nur einige, die noch nicht vorgestellt +wurden +\begin{verbatim} +\def\arccos{\mathop{\rm arccos}\nolimits} + ... \def\tanh{\mathop{\rm tanh}\nolimits} +\def\det{\mathop{\rm det}} ... \def\sup{\mathop{\rm sup}} +\def\liminf{\mathop{\rm lim\,inf}} \def\limsup{\mathop{\rm lim\,sup}} +\end{verbatim} +\begin{verbatim} +\def\bmod{\mskip-\medmuskip \mkern5mu + \mathbin{\rm mod} \penalty900 \mkern5mu \mskip-\medmuskip} +\def\pmod#1{\allowbreak \mkern18mu ({\rm mod}\,\,#1)} +\end{verbatim} +Die Definitionen von `\verb|\matrix|' und `\verb|\bordermatrix|' +werden hier bereitgestellt. +\begin{verbatim} +\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th + \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr + \mathstrut\crcr\noalign{\kern-\baselineskip} + #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,} +\end{verbatim}\index{Baseline!Normal} +\begin{verbatim} +\newdimen\p@renwd \setbox0=\hbox{\tenex B} \p@renwd=\wd0 +\def\bordermatrix#1{\begingroup \m@th + \setbox0=\vbox{\def\cr{\crcr\noalign{\kern2pt\global\let\cr=\endline}} + \ialign{$##$\hfil\kern2pt\kern\p@renwd&\thinspace\hfil$##$\hfil + &&\quad\hfil$##$\hfil\crcr + \omit\strut\hfil\crcr\noalign{\kern-\baselineskip} + #1\crcr\omit\strut\cr}} + \setbox2=\vbox{\unvcopy0 \global\setbox1=\lastbox} + \setbox2=\hbox{\unhbox1 \unskip \global\setbox1=\lastbox} + \setbox2=\hbox{$\kern\wd1\kern-\p@renwd \left( \kern-\wd1 + \global\setbox1=\vbox{\box1\kern2pt} + \vcenter{\kern-\ht1 \unvbox0 \kern-\baselineskip} \,\right)$} + \null\;\vbox{\kern\ht1\box2}\endgroup} +\end{verbatim}\index{Baseline!Skip} +Die n\"achsten Definitionen sind wieder etwas einfacher +\begin{verbatim} +\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th + \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.} +\def\pmatrix#1{\left( \matrix{#1} \right)} +\end{verbatim} +Zum guten Schlu\ss{} noch die Makros f\"ur die \index{Formel!abgesetzte} +abgesetzten Formeln +\begin{verbatim} +\def\openup{\afterassignment\@penup\dimen@=} +\def\@penup{\advance\lineskip\dimen@ + \advance\baselineskip\dimen@ \advance\lineskiplimit\dimen@} +\def\eqalign#1{\null\,\vcenter{\openup1\jot \m@th + \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil + \crcr#1\crcr}}\,} +\end{verbatim} +\begin{verbatim} +\newif\ifdt@p +\def\displ@y{\global\dt@ptrue \openup1\jot \m@th + \everycr{\noalign{\ifdt@p \global\dt@pfalse + \vskip-\lineskiplimit \vskip\normallineskiplimit + \else \penalty\interdisplaylinepenalty \fi}}} +\def\@lign{\tabskip=0pt\everycr={}} % restore inside \displ@y +\def\displaylines#1{\displ@y + \halign{\hbox to\displaywidth{$\hfil\@lign\displaystyle##\hfil$}\crcr + #1\crcr}} +\end{verbatim} +\begin{verbatim} +\def\eqalignno#1{\displ@y \tabskip=\centering + \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip=0pt + &$\@lign\displaystyle{{}##}$\hfil\tabskip=\centering + &\llap{$\@lign##$}\tabskip=0pt\crcr + #1\crcr}} +\def\leqalignno#1{\displ@y \tabskip=\centering + \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip=0pt + &$\@lign\displaystyle{{}##}$\hfil\tabskip=\centering + &\kern-\displaywidth\rlap{$\@lign##$}\tabskip=\displaywidth\crcr + #1\crcr}} +\end{verbatim} +Der Wert von `\verb|\lineskiplimt|' wird dabei als +`\verb|\normallineskiplimit|' angenommen, nur ver\"an\-dert durch die +``\"Offnung''. + +\subsection{Makros f\"ur die Ausgaberoutine} +Zuerst werden einige Dinge bzgl.\ Seitennummern, Kopf- und Fu\ss{}zeilen +geregelt +\begin{verbatim} +\countdef\pageno=0 \pageno=1 % first page is number 1 +\newtoks\headline \headline={\hfil} % headline is normally blank +\newtoks\footline \footline={\hss\tenrm\folio\hss} + % footline is normally a centered page number in font \tenrm +\def\folio{\ifnum\pageno<0 \romannumeral-\pageno \else\number\pageno \fi} +\def\nopagenumbers{\footline={\hfil}} % blank out the footline +\def\advancepageno{\ifnum\pageno<0 \global\advance\pageno by -1 + \else\global\advance\pageno by 1 \fi} % increase |pageno| +\end{verbatim} +\begin{verbatim} +\newif\ifr@ggedbottom +\def\raggedbottom{\topskip10pt plus60pt \r@ggedbottomtrue} +\def\normalbottom{\topskip10pt \r@ggedbottomfalse} % undoes \raggedbottom +\end{verbatim} +Das Fu\ss{}noten Makro benutzt +`\verb|\futurelet|' und `\verb|\aftergroup|', damit die Fu\ss{}note nicht +als Argument an ein anderes Makro \"ubergeben werden mu\ss{}. +\begin{verbatim} +\newinsert\footins +\def\footnote#1{\let\@sf=\empty % parameter #2 (the text) is read later + \ifhmode\edef\@sf{\spacefactor=\the\spacefactor}\/\fi + #1\@sf\vfootnote{#1}} +\def\vfootnote#1{\insert\footins\bgroup + \interlinepenalty=\interfootnotelinepenalty + \splittopskip=\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth=\dp\strutbox \floatingpenalty=20000 + \leftskip=0pt \rightskip=0pt \spaceskip=0pt \xspaceskip=0pt + \textindent{#1}\footstrut\futurelet\next\fo@t} +\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t + \else\let\next\f@t\fi \next} +\def\f@@t{\bgroup\aftergroup\@foot\let\next} +\def\f@t#1{#1\@foot} +\def\@foot{\strut\egroup} +\def\footstrut{\vbox to\splittopskip{}} +\skip\footins=\bigskipamount % space added when footnote is present +\count\footins=1000 % footnote magnification factor (1 to 1) +\dimen\footins=8in % maximum footnotes per page +\end{verbatim} +Hier steht nun, wie {\em flie\ss{}ende} Einf\"ugungen realisiert werden +\begin{verbatim} +\newinsert\topins \newif\ifp@ge \newif\if@mid +\def\topinsert{\@midfalse\p@gefalse\@ins} +\def\midinsert{\@midtrue\@ins} +\def\pageinsert{\@midfalse\p@getrue\@ins} +\skip\topins=0pt % no space added when a topinsert is present +\count\topins=1000 % magnification factor (1 to 1) +\dimen\topins=\maxdimen % no limit per page +\def\@ins{\par\begingroup\setbox0=\vbox\bgroup} % start a \vbox +\def\endinsert{\egroup % finish the \vbox + \if@mid \dimen@=\ht0 \advance\dimen@ by\dp\z@ \advance\dimen@ by12\p@ + \advance\dimen@ by\pagetotal \advance\dimen@ by-\pageshrink + \ifdim\dimen@>\pagegoal \@midfalse\p@gefalse\fi\fi + \if@mid \bigskip \box0 \bigbreak + \else\insert\topins{\penalty100 % floating insertion + \splittopskip=0pt \splitmaxdepth=\maxdimen \floatingpenalty=0 + \ifp@ge \dimen@=\dp0 + \vbox to\vsize{\unvbox0 \kern-\dimen@} % depth is zero + \else \box0 \nobreak\bigskip\fi}\fi\endgroup} +\end{verbatim} +Hier die vollst\"andige Ausgaberoutine +\begin{verbatim} +\output={\plainoutput} +\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}% + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi} +\def\pagebody{\vbox to\vsize{\boxmaxdepth=\maxdepth \pagecontents}} +\def\makeheadline{\vbox to 0pt{\vskip-22.5pt + \line{\vbox to8.5pt{}\the\headline}\vss}\nointerlineskip} +\def\makefootline{\baselineskip=24pt \line{\the\footline}} +\def\dosupereject{\ifnum\insertpenalties>0 % something is being held over + \line{}\kern-\topskip\nobreak\vfill\supereject\fi} +\end{verbatim}\index{Baseline!Skip} +\begin{verbatim} +\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi + \dimen@=\dp255 \unvbox255 + \ifvoid\footins\else % footnote info is present + \vskip\skip\footins \footnoterule \unvbox\footins\fi + \ifr@ggedbottom \kern-\dimen@ \vfil \fi} +\def\footnoterule{\kern-3pt + \hrule width 2truein \kern 2.6pt} % the \hrule is .4pt high +\end{verbatim} +\subsection{Trennung und dergleichen} +Der letzte Teil von {\tt plain.tex} lie\ss{}t die Trennungsmuster aus dem +File {\tt hyphen.tex} und auch die Ausnahmen +\begin{verbatim} +\lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks +\input hyphen % the hyphenation patterns and exceptions +\end{verbatim} +\begin{verbatim} +\def\magnification{\afterassignment\m@g\count@} +\def\m@g{\mag=\count@ + \hsize6.5truein\vsize8.9truein\dimen\footins8truein} +\end{verbatim} +\begin{verbatim} +\def\tracingall{\tracingonline=1 \tracingcommands=2 \tracingstats=2 + \tracingpages=1 \tracingoutput=1 \tracinglostchars=1 + \tracingmacros=2 \tracingparagraphs=1 \tracingrestores=1 + \showboxbreadth=\maxdimen \showboxdepth=\maxdimen \errorstopmode} +\end{verbatim} +\begin{verbatim} +\def\showhyphens#1{\setbox0=\vbox{\parfillskip0pt \hsize=\maxdimen \tenrm + \pretolerance=-1 \tolerance=-1 \hbadness=0 \showboxdepth=0 \ #1}} +\end{verbatim}\index{Badness} +\begin{verbatim} +\normalbaselines\rm % select roman font +\nonfrenchspacing % punctuation affects the spacing +\catcode`@=12 % at signs are no longer letters +\end{verbatim}\index{Baseline!Normal} +\begin{verbatim} +\def\fmtname{plain}\def\fmtversion{3.0} % identifies the current format +\end{verbatim} +\chapter{Trennungen} +Es ist sicher besser ein Wort zu trennen, als die \index{Zwischenraum} +Zwischenr\"aume +zwischen einzelnen W\"ortern zu weit zu strecken. Computer sind +normalerweise nicht sehr gut bei der Trennung von Worten. Als die +ersten automatischen Trennungen in Zeitungen auftauchten, machten auch +schnell die ersten Witze die Runde.\footnote{Im Gegensatz zu den +englischen Beispielen aus dem \TeX book erinnere ich hier an die +unvergessenen Beispiele aus der CONTEXT-Dokumentation, wie Klo-ster, +oder noch besser Urin-stinkt. Im weiteren werde ich mich aber an die +Originalbeispiele halten.} + +Woher die Schwierigkeiten kommen d\"urfte klar sein. So wird z.B.\ das +Wort `record' einmal als `re-cord' und einmal als `rec-ord' getrennt, +je nachdem, wie es verwendet wird. Auch das englische Wort f\"ur +Trennung: `hy-phen-a-tion' ist nicht ganz einfach zu trennen, so wird +bei dem \"ahnlichen Wort `con-cat-e-na-tion' das `n' mit zu dem `a' +gezogen, im Gegensatz zu dem ersten Beispiel. + +Eine gute L\"osung f\"ur das Trennungproblem fand \index{Liang} +Frank~M. Liang zwischen +1980 und 1982 und \TeX\ \"ubernahm die Methode. Diese Methode findet zu +fast allen W\"ortern die legitimen Trennstellen, macht nur selten +\index{Fehler!Bei Trennungen}Fehler, ist schnell, verbraucht nur wenig +\index{Speicherplatz!Trennung}Speicherplatz und ist +flexibel genug um schnell auf andere Sprachen angewendet zu werden, +ja, sie kann sogar simultan auf zwei Sprachen angewendet werden. + +Um ein Wort zu trennen schaut \TeX\ zuerst in ein +\index{Register!Ausnahme}Ausnahmenregister, +um das Wort eventuell dort zu finden. Wenn das Wort dort nicht +vorkommt, dann sucht \TeX\ nach \index{Muster!Trennung} +Mustern in dem Wort, und das ist der +Kernpunkt der Methode von \index{Liang}Liang. Hier nun die Vorgehensweise am +Beispiel des Wortes \index{zzzhyphenation@{\tt\char92 hyphenation}} +`hyphenation', vorausgesetzt, \TeX\ arbeitet mit +den englischen Trennmustern. + +Zun\"achst wird dem Wort ein Zeichen vor- und eins nachgestellt, die als +\index{Markierung!Trennung}Markierung dienen sollen. +\index{zzzhyphenation@{\tt\char92 hyphenation}} +\begin{verbatim} +.hyphenation. +\end{verbatim} +Hier bei wurde das `\verb|.|' als Markierung verwendet. Dieses Wort +hat die {\em Unter}w\"orter +\begin{verbatim} +. h y p h e n a t i o n . +\end{verbatim} +der L\"ange eins, und die Unterw\"orter der L\"ange zwei +\begin{verbatim} +.h hy yp ph he en na at ti io on n. +\end{verbatim} +und schlie\ss{}lich die der L\"ange drei +\begin{verbatim} +.hy hyp yph phe hen ena nat ati tio ion on. +\end{verbatim} +und so weiter. Jedes Unterwort der L\"ange $k$ definiert $k+1$ kleine +Zahlwerte, die die F\"ahigkeit zur Trennung zwischen zwei Buchstaben +ausdr\"ucken. In den folgenden Beispielen werden diese Wert als Indizes +angegeben. +\newcommand{\ti}[1]{${}_#1$} + +`\ti0 h\ti0 e\ti2 n\ti0' meint z.B., da\ss{} bei dem Unterwort `\verb|hen|' +alle Werte Nul sind mit der Ausnahme zwischen den Buchstaben `\verb|e|' +und `\verb|n|', deren Wert zwei ist. Die Werte sind alle Null, es sei +denn \TeX\ findet in seiner \index{Muster!Trennung} +Musterbibliotek ein Muster. Bei unserem +Beispiel werden die folgenden Muster gefunden + +\noindent +\ti0 h\ti0 y\ti3 p\ti0 h\ti0\\ +\ti0 h\ti0 e\ti2 n\ti0\\ +\ti0 h\ti0 e\ti0 n\ti0 a\ti4\\ +\ti0 h\ti0 e\ti0 n\ti5 a\ti0 t\ti0\\ +\ti1 n\ti0 a\ti0\\ +\ti0 n\ti2 a\ti0 t\ti0\\ +\ti1 t\ti0 i\ti0 o\ti0\\ +\ti2 i\ti0 o\ti0\\ +\ti0 o\ti2 n\ti0 + +\TeX\ berechnet nun das Maximum an Werten, das zwischen zwei +Buchstaben vorkommt. Zwischen `\verb|e|' und `\verb|n|' treten z.B.\ +vier signifikante Werte auf. Das Ergebnis dieser Berechnung ist + +.\ti0 h\ti0 y\ti3 p\ti0 h\ti0 e\ti2 n\ti5 a\ti4 t\ti2 i\ti0 o\ti2 n\ti0 . + +Jetzt kommt der letzte Schritt. Eine Trennung ist akzeptabel an einer +Stelle, an der ein ungerader Wert berechnet wurde. Somit ergeben sich +zwei m\"ogliche Trennungen: `\verb|hy-phen-ation|'. Das Wort +`\verb|concatenation|' ergibt die Muster + +\noindent +\ti0 o\ti2 n\ti0\\ +\ti0 o\ti0 n\ti1 c\ti0\\ +\ti1 c\ti0 a\ti0\\ +\ti1 n\ti0 a\ti0\\ +\ti0 n\ti2 a\ti0 t\ti0\\ +\ti1 t\ti0 i\ti0 o\ti0\\ +\ti2 i\ti0 o\ti0\\ +\ti0 o\ti2 n\ti0 + +und das Ergebnis + +\ti0 c\ti0 o\ti2 n\ti1 c\ti0 a\ti0 t\ti0 e\ti1 n\ti2 a\ti1 t\ti2 i\ti0 +o\ti2 n\ti0 + +und damit die m\"oglichen Trennungen `\verb|con-cate-na-tion|'. Weitere +Worte, wie das Beispiel aus dem \TeX book +\index{Supercalifragilisticexpialidocious} +`supercalifragilisticexpialidocious' erspare ich mir an dieser Stelle. + +{\em Plain} \TeX\ l\"adt 4447 \index{Muster!Trennung} +Muster in seinen Speicher. Angefangen mit +`\ti0 .\ti0 a\ti0 c\ti0 h\ti4' bis `\ti4 z\ti1 z\ti2' und +`\ti0 z\ti4 z\ti0 y\ti0'. Die Werte zwischen den Buchstaben haben +dabei die Werte 0 bis 5. Ein gro\ss{}er ungerader Wert, wie 5 f\"ordert +nat\"urlich eine Trennung an dieser Stelle, ein gro\ss{}er gerader Wert, +wie 4 verhindert praktisch eine Trennung an dieser Stelle. + +\index{Liang}Liang fand diese Muster, indem er ein spezielles W\"orterbuch +bearbeitete und auch solche Ausnahmen wie `Af-ghan-i-stan' mit +aufnahm. Diese Trennmuster reichen aus f\"ur nahezu alle vorkommenden +Trennungen, solange es sich um englischsprachige W\"orter handelt. F\"ur +andere Sprachen mu\ss{} nat\"urlich eine eigene \index{Bibliothek} +Bibliothek von W\"ortern +gefunden werden. Normalerweise findet diese Methode nur g\"ultige +Trennungen, es werden aber nicht unbedingt alle m\"oglichen Trennungen +gefunden, wie man auch an den obigen Beispielen sehen kann. + +In seltenen F\"allen kann es nat\"urlich vorkommen, da\ss{} \TeX\ ein Wort +nicht richtig trennt. Dann haben sie noch die M\"oglichkeit die Trennung +explizit anzugeben. Sie schaffen damit einen weiteren Ausnahmeeintrag, +der oben schon angesprochen wurde. Das \TeX book wurde mit den +Ausnahmen +\index{zzzhyphenation@{\tt\char92 hyphenation}} +\begin{verbatim} +\hyphenation{man-u-script man-u-scripts ap-pen-dix} +\end{verbatim} +geschrieben, um auch die Worte `manuscript', `manuscripts' und +`appendix' richtig zu trennen. Sie sehen, da\ss{} auch der Plural des +Wortes angegeben ist. Das h\"angt damit zusammen, da\ss{} das Wort +vollst\"andig in der Ausnahmeliste gefunden werden mu\ss{}. Es handelt sich +also tats\"achlich um zwei Eintr\"age. + +Wenn sie alle Trennungen sehen wollen, die \TeX\ bei einem Text +findet, dann k\"onnen sie mit der Eingabe +\index{zzzshowhyphens@{\tt\char92 showhyphens}} +\begin{verbatim} +\showhyphens{Text} +\end{verbatim} +eine \index{Box!Hbox} +hbox ausgeben lassen, die alle W\"orter des Textes in getrennter +Form enth\"alt. Diese Box ist allerdings immer zu klein, so da\ss{} sie +immer eine \index{Fehler!Meldung} +Fehlermeldung erhalten werden, k\"ummern sie sich nicht darum. + +Um ein Wort in die Ausnahmeliste aufzunehmen mu\ss{} der Befehl +\index{zzzhyphenation@{\tt\char92 hyphenation}} +\begin{verbatim} +\hyphenation{<Worte>} +\end{verbatim} +am besten zu Beginn des Textes angegeben werden. `\verb|<Worte>|' ist +dabei eine Liste von Worten, die durch \index{Leer!Zeichen} +Leerzeichen getrent sind. Diese +Worte enthalten das Zeichen `\verb|-|' als Trennzeichen an den +Stellen, an denen es getrennt werden darf. \TeX\ wandelt alle Worte +zun\"achst in \index{Kleinbuchstabe} +Kleinbuchstaben um, bevor die \index{Gleichheit!Von +Buchstaben}Gleichheit mit einem +aufgefundenen Wort gepr\"uft wird. Trennungen werden nicht nach dem +ersten Buchstaben und vor dem letzten Buchstaben akzeptiert. Ein +Trennungseintrag kann auch keine Trennung enthalten, dann wird \TeX\ +das Wort \"uberhaupt nicht mehr trennen. + +Die Eintr\"age in die Ausnahmeliste sind \index{Global!Trennung} +global, sie verschwinden nicht +am Ende einer Gruppe. Wir ein Wort mehrfach angegeben, dann gilt immer +die letzte Angabe. + +V\"ollig analog funktioniert die Angabe der \index{Muster!Trennung} +Trennmuster, allerdings mit +einem schwerwiegenden Unterschied. Der Befehl +\index{zzzpatterns@{\tt\char92 patterns}} +\begin{verbatim} +\patterns{<Muster>} +\end{verbatim} +darf nur f\"ur INITEX auftreten. Beim Lauf von \TeX\ k\"onnen die Muster +nicht mehr ge\"andert werden. +\end{appendix} +% \begin{theindex} +\printindex +% \end{theindex} +\end{document} |