+ All Categories
Home > Documents > TEX Praxis || Erweiterungen von Plain-TEX

TEX Praxis || Erweiterungen von Plain-TEX

Date post: 08-Dec-2016
Category:
Upload: silvio
View: 221 times
Download: 5 times
Share this document with a friend
25
14 Erweiterungen von Plain-lEX DaB man umfangreichere Dokumente nicht allein mit Tpc bzw. Plain- Tpc erstellt, liegt auf der Hand und wird von allen Autoren bestatigt. Knuth entwickelte die - inzwischen le- gendaren - manmac-Makros, und wir stellten das fancy-Format vor, welches bestimmte, immer wiederkehrende, Layout-Makros enthalt. Viele Dokumententypen stellen ahnliche Anforderungen an die Strukturierung und Gliederung, so daB es naheliegend ist, Makros hierftir bereitzustellen. Das bekannteste Makropaket hierflir stellt dar, das von ei- nem speziellen Entwicklerteam - dem ,,JbTJi( 3 Project Team" - grundlegend tiberarbeitet wird, siehe Literaturverzeichnis. Aber auch flir Plain-Tpc existieren Erweiterungen, die viele der beim Buchdruck immer wieder auftretenden Aufgaben sehr elegant lOsen kon- nen. Die wichtigste dieser Erweiterungen - ePlain-TEX- steHen wir im folgenden genauer vor. 14.1 Was ist "eplain"? ePlain- Tpc steht flir "erweitertes" oder "erganztes" Plain-Tpc. Es wird von Karl Berry (und in einigen Teilen von Steven Smith) entwickelt und gepftegt. Die aktuelle Version 2.6 wird unter den Bedingungen der "GNU General Public License" auf den CTAN- Servern als eplain. tex zur Verfligung gestellt. Eine dokumentierte Variante ist dort unter xeplain. tex ebenfalls vorhanden. 1m Unterschied zu steHt ePlain-Tpc nur minimale Makros zur visuellen Dar- steHung ("visuelles Markup") zur Verftigung, da die notwendigen Formatannahmen oft nicht den tatsachlichen Erfordernissen entsprechen. Hier ist dann der Autor gefordert, selbst entsprechende Makros zu entwickeln. ePlain- Tpc bietet stattdessen Makros ftir die Grundstrukturierung von Dokumenten, also z. B. ftir das Anlegen eines Inhaltsverzeich- nisses, eines Stichwortregisters oder den Mehrspaltensatz. R. Séroul et al., TEX Praxis © Birkhäuser Verlag 1998
Transcript
Page 1: TEX Praxis || Erweiterungen von Plain-TEX

14 Erweiterungen von Plain-lEX

DaB man umfangreichere Dokumente nicht allein mit Tpc bzw. Plain-Tpc erstellt, liegt auf der Hand und wird von allen Autoren bestatigt. Knuth entwickelte die - inzwischen le­gendaren - manmac-Makros, und wir stellten das fancy-Format vor, welches bestimmte, immer wiederkehrende, Layout-Makros enthalt. Viele Dokumententypen stellen ahnliche Anforderungen an die Strukturierung und Gliederung, so daB es naheliegend ist, Makros hierftir bereitzustellen. Das bekannteste Makropaket hierflir stellt k\T~ dar, das von ei­nem speziellen Entwicklerteam - dem ,,JbTJi( 3 Project Team" - grundlegend tiberarbeitet wird, siehe Literaturverzeichnis. Aber auch flir Plain-Tpc existieren Erweiterungen, die viele der beim Buchdruck immer wieder auftretenden Aufgaben sehr elegant lOsen kon­nen. Die wichtigste dieser Erweiterungen - ePlain-TEX- steHen wir im folgenden genauer vor.

14.1 Was ist "eplain"?

ePlain-Tpc steht flir "erweitertes" oder "erganztes" Plain-Tpc. Es wird von Karl Berry (und in einigen Teilen von Steven Smith) entwickelt und gepftegt. Die aktuelle Version 2.6 wird unter den Bedingungen der "GNU General Public License" auf den CTAN­Servern als eplain. tex zur Verfligung gestellt. Eine dokumentierte Variante ist dort unter xeplain. tex ebenfalls vorhanden.

1m Unterschied zu k\T~ steHt ePlain-Tpc nur minimale Makros zur visuellen Dar­steHung ("visuelles Markup") zur Verftigung, da die notwendigen Formatannahmen oft nicht den tatsachlichen Erfordernissen entsprechen. Hier ist dann der Autor gefordert, selbst entsprechende Makros zu entwickeln. ePlain-Tpc bietet stattdessen Makros ftir die Grundstrukturierung von Dokumenten, also z. B. ftir das Anlegen eines Inhaltsverzeich­nisses, eines Stichwortregisters oder den Mehrspaltensatz.

R. Séroul et al., TEX Praxis© Birkhäuser Verlag 1998

Page 2: TEX Praxis || Erweiterungen von Plain-TEX

258 Kapitel 14. Erweiterungen von Plain-T EX

14.2 ePlain-TEX einsetzen

Es gibt mehrere Moglichkeiten, ePlain-Tpc einzusetzen.

ePlain-TeX in den Quelltext laden

ePlain-Tpc kann mittels des \input-Kommandos im Quelltext geladen werden. Diese einfache Moglichkeit empfiehlt sich, wenn die Eignung bestimmter ePlain-Tpc -Strukturen getestet werden solI.

Bei dieser Methode ist es sinnvoll, zu testen, ob ePlain-Tpc bereits geladen wurde. Dazu kann folgende kurze Befehlsfolge verwendet werden:

\ifx\eplain\undefined \input eplain \fi

ePlain-TPC besteht aus mehreren Komponenten: eplain. tex enthltlt die meisten der unten beschriebenen Makros. arrow. tex enthalt Makros zum Setzen der in Abschnitt 11.24 vorgestellten kommunitativen Diagramme. btxmac. tex definiert die Makros fUr Literaturzitate und -verzeichnisse. texnames. tex schlieBlich wird zur Darstellung von TPC-Logos - wie z. B. BmTpc - eingesetzt.

Die in der Datei btxmac . tex definierten Makros benotigen relativ viel Speicherplatz. Deshalb wurde folgende Moglichkeit vorgesehen, diese Makros nicht zu laden:

\let\nobibtex=t \input eplain

(Entsprechendes gilt auch fUr arrow. tex, des sen Laden durch den Befehl \noarrow unterbunden wird.)

Ein ePlain-TeX-Format Die zweite Moglichkeit, ePlain-TJ3X einzusetzen, besteht in def Vefwendung eines spe­

ziellen Format-Files. Diese Moglichkeit stellt die schnellste Variante dar und sollte ver­wendet werden, wenn ePlain-TJ3X -Makros regelmltBig benutzt werden.

Beim Erzeugen eines speziellen ePlain-TEX.-Format-Files muB die Datei eplain. aux existieren, ansonsten werden viele Features abgeschaltet. (Der Inhalt dieser Datei ist ir­relevant, *nix-User verwenden wahrscheinlich touch eplain. aux, urn diese Datei zu erstellen.) AnschlieBend muB initex nur noch mit dem Plain-Tpc-Format gestartet und eplain. tex eingeladen werden:

initex This is TeX, ... **&plain eplain (eplain) \dump

Damit ist die Datei eplain. fmt im aktuellen Verzeichnis entstanden. Verschieben Sie diese in das (in Ihrer Implementation) entsprechende Verzeichnis.

Page 3: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros filr logische Strukturen 259

14.3 Die ePlain-TEX-Makros Die ePlain-TEX-Makros konnen in verschiedene Funktionsgruppen unterteilt werden:

Es existieren Makros, die bestimmte Einstellungen vornehmen oder iindern, Makros, die bestimmte logische Strukturen definieren, und solche, die beim Erstellen und Testen ei­gener Makrostrukturen hilfreich sind. Wir werden diese Gruppen in den folgenden Ab­schnitten vorstellen.

Makros, die Einstellungen vornehmen oder andern Wiihrend Plain-TEX voreinstellungsgemaB O.4pt starke Linien setzt, konnen bei der

Verwendung von ePlain-TEX die folgenden drei Befehle zur Definition der Defaultwerte eingesetzt werden.

\hrul edef aul the igh t definiert die vertikale Ausdehnung horizontaler Linien (vor­eingestellt sind 0.4 pt). \hruledef aul tdepth (voreingestellt ist 0 pt) beschreibt den ver­tikalen Versatz der Linie zum Referenzpunkt. \ vruledef aul twidth legt die horizontale Breite vertikaler Linien fest, (voreingestellt sind 0.4 pt).

Damit die Verwendung dieser Makros nicht eine Redefinition der Befehle \hrule und \vrule notwendig macht (welche unabsehbare Folgen hat), werden die beiden ePlain­TEX-Befehle \ehrule und \evrule eingefUhrt. Sie sollten an Stelle von \hrule und \ vrule eingesetzt werden.

Der Bereich, in dem TEX den Text setzt, wird durch die TEX-primitives \hsize und \ vsize festgelegt. Alternativ kann auch eine Beschreibung des Textbereiches durch die Angabe von Riindern erfolgen. Dazu sind die folgenden Makros vorhanden:

\ topmargin enthiilt den Wert fUr den oberen Rand, \bottommargin fUr den unteren. Entsprechend definieren \leftmargin und \rightmargin die linken bzw. rechten Ran­der. Fur alle Befehle stehen Varianten zur Verfugung, die die entsprechenden Riinder ver­iindern. \advancetopmargin wird z. B. fUr den oberen Rand eingesetzt, fUr den linken heiBt sie \advanceleftmargin, etc. Die Befehle werden folgendermaBen eingesetzt:

\advancebottommargin by 3ex

vergroBert den unteren Rand urn den Wert 3ex, wlihrend

\advancerightmargin by -5mm

den rechten Rand urn 5 mm verkleinert. Die GroBe der Gesamtseite wird durch die Werte in den Makros \paperwidth (8.5in)

und \paperheight (llin) definiert; die Defaultwerte wurden in Klammern angegeben.

14.4 Makros fOr logische Strukturen Die in den folgenden Abschnitten beschriebenen Makros werden zur Formatierung be­

stimmter logischer Strukturen verwendet. Die endgiiltige Darstellungsweise kann (und solI) durch Anwenderbefehle den Erfordernissen entsprechend angepaBt werden. Die hier beschriebenen Makros definieren die Funktion der entsprechenden Struktur.

Page 4: TEX Praxis || Erweiterungen von Plain-TEX

260 Kapitel 14. Erweiterungen von Plain-T £X

Listen

Listen sind haufig auftretende Strukturen in technisch/wissenschaftlichen Dokumenten. Eine Anzahl von Einzelpunkten wird konsistent formatiert. Plain-TEX definiert nur die einfachste Form der Liste. Die einzelnen Listeneintrage konnen aus mehreren Absatzen bestehen. Eine Verschachtelung mehrerer Listen ist moglich, siehe dazu die Diskussion der Makros \i tem, \i temi tem und \i temi temi tem.

ePlain-TEX definiert zwei weitere Listentypen.

1) Numerierte Listen: Ein Beispiel sehen Sie hier. Listen dieses Typs beginnen mit dem Befehl \numberedlist. Die Listeneintrage werden nicht wie i.iblich durch \item­Befehle, sondem mittels \li markiert. Numerierte Listen beginnen voreinstellungsge­maB bei 1.

a) Listenelemente der nachsten Ebene werden dann mit arabischen Kleinbuchstaben bezeichnet.

i) Die dritte Ebene verwendet kleine romische Zahlen zur Kennzeichnung der Li­steneintrage.

In allen weiteren Ebenen werden die Listeneintrage durch ein vorangestelltes *-Symbole markiert.

2) Ein Synonym flir die \numberedlist stellt \orderedlist dar.

3) Listen mit festen Markierungen werden durch die Befehle \unorderedlists und \endunorderedlists erzeugt:

• Elemente der ersten Ebene werden wie hier dargestellt markiert .

• Das Symbol wird durch den Befehl \blackbox erzeugt.

- Die folgende Ebene wird durch ein ,,-"-Symbol gekennzeichnet, alle weiteren Ebenen erhalten defaultmaBig das ,,*"-Symbol.

Diese Listen konnen weitgehend konfiguriert werden:

• \abovelistskipamount wird vor der Listenstruktur, \belowlistskipamount danach eingefligt.

• Zwischen den Listenpunkten wird der Abstand \interi temski pamount gesetzt.

• Rechtsseitig findet eine Einriickung urn der Wert von \listrightindent und linksseitig von \listleftindent statt. Dabei wird \listrightindent zu dem Wert von \rightskip addiert und \listleftindent relativ zu dem Wert von \parindent.

• Zwischen der Listenmarkierung und dem Eintragstext wird ein Abstand in der GroBe von \listmarkerspace gesetzt. Voreingestellt ist hier ein \enspace.

• Diese Voreinstellungen konnen durch den Aufruf des Befehls \listcompact deut­lich reduziert werden, ohne daB sich die Gesamtdarstellung wesentlich verandert.

Page 5: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros fOr /ogische Strukturen 261

• Listenmarkierungen konnen durch die Redefinition der Makros \numberedmarker bzw. \unorderedmarker verandert werden. Dort konnen \orderedlistdepth oder \numberedlistdepth eingesetzt werden, wie folgende Definitionen zeigen.

Die Voreinstellung fiir numerierte Listen lautet:

\def\numberedmarker{% \ifcase\numberedlistdepth

}%

(impossible)% \or \printitemnumber \or \printitemletter \or \printitemromannumeral \else *% \fi

Die Numerierung in der Liste erfolgt tiber die zwei Integer-Variablen \i temnumber und \i temletter. \i temnumber beginnt mit dem Wert 1 und \i temletter bei 97 (entspricht dem ASCII-Wert des kleinen "a".)

Die Voreinstellung fiir Listen yom Typ \unorderedlist ist:

\def\unorderedmarker{% \ifcase\unorderedlistdepth

}%

(impossible)% \or \blackbox \or ---% \else *% \fi

Die Problematik der FuBnotendarstellung wurde in Kapitel 6.12 bereits erlautert. Das Glossar enthiilt unter dem Stichwort \myfootnote einen Vorschlag zur Programmierung besserer FuBnotenmakros. ePlain-TEX enthalt hierfiir einen weiteren Ansatz.

Mit dem Makro \numberedfootnote wird der im Argument tibergebene Text als FuB­note dargestellt. Diese FuBnoten erhalten zur Kennzeichnung eine Zahl, die sich bei jeder FuBnote erhoht. Sie konnen das FuBnotenmakro auch durch

\let\footnote\numberedfootnote

fiir aIle FuBnoten auf den Befehl \footnote abbilden. Die Nummer der aktuellen FuB­note wird im Ganzzahlregister \footnotenumber gespeichert. Diese kann - z. B. am Beginn einen neuen Kapitels durch

\footnotenumber=O

zUrUckgesetzt werden. Zwischen der FuBnote und dem FuBnotentext wird der Abstands­befehl \footnotemarkseparation eingefiigt, er ist mit einem \enspace vorbelegt.

Zwischen mehreren FuBnoten einer Seite wird der im \interfootnoteskip-Makro enthaltene vertikale Abstand gesetzt. \parindent ist in FuBnotentexten verschwindend klein (0 mm).

Page 6: TEX Praxis || Erweiterungen von Plain-TEX

262 Kapitel 14. Erweiterungen von Plain-T EX

Eine wesentliche Hilfe bei der gleichmaBigen Formatierung von FuBnoten stellt das Makro \everyfootnote dar. Dieses Tokenregister wird nach dem Berechnen der FuB­notennummer und Position am Beginn der Ausgabe des FuBnotentextes expandiert. So ist es durch die Angabe

\everyfootnote={\sevenrm \leftskip10mm}

moglich, alle FuBnoten einheitlich mit dem Font \sevenrm und einer linksseitigen Ein­riickung von 10 mm darzustellen.

FuBnotentexte werden durch eine Linie yom FlieBtext getrennt. Diese Linie kann durch die Langenvariablen \footnoterulewidth in ihrer Lange und in ihrer Starke durch \footnoteruleheight verandert werden. \footnoteruleheight=Omm laBt diese Li­nie verschwinden. Zwischen der Linie und der ersten FuBnote wird der vertikale Abstand \belowfootnoterulespace eingefiigt, den der Anwender ebenfalls verandem kann.

Der Abstand zwischen FlieBtext und FuBnotenlinie wird durch \skip\footins kon­trolliert. Voreingestellt ist hier ein \bigskip.

TOC: (TableOfContents), das Inhaltsverzeichnis Das automatische Erstellen eines Inhaltsverzeichnisses ist eine in vielen Arbeiten sinn­

volle Aufgabe. Zum einen wird hierdurch eine erhebliche Menge an Arbeitszeit ein­gespart, anderseits werden die Fehlermoglichkeiten wesentlich reduziert, insbesondere dann, wenn zu einem spateren Zeitpunkt Erganzungen des Textes vorgenommen werden.

ePlain-T£X verwendet in Analogie zu ~T£X eine exteme Datei mit der Extension . toe, urn das Inhaltsverzeichnis zu speichern. (Die Extension dieser Datei wird im Makro \definecontentsfile definiert.)

Eintrage in diese Datei werden mit dem Makro \writetocentry vorgenommen. 1m ersten Argument dieses Makros wird die Gliederungsebene des Eintrags iibergeben - z. B. "chapter" oder "section"- , im zweiten der Text des entsprechenden Eintrags, wie er im Inhaltsverzeichnis erscheinen soll. (Dieser Text muB nicht zwingend identisch sein mit dem, der in der Uberschrift erscheint. Manchmal ist es sinnvoller, abgektirzte Titel im Inhaltsverzeichnis zu verwenden.)

In der . toc-Datei entsteht fiir jeden durch das Makro \writetocentry generierten Eintrag eine Zeile der folgenden Form:

\ tocpartentry{TextHSeite}

Vordefiniert sind die folgenden drei Makros \ tocchapterentry, \ tocsectionentry und \tocsubsectionentry:

\def\tocchapterentry#1#2{\line{\bf #1 \dotfill\ #2}}% \def\tocsectionentry#1#2{\line{\quad\sl #1 \dotfill\ \rm #2}}% \def\tocsubsectionentry#1#2{\line{\qquad\rm #1 \dotfill\ #2}}%

Weitere Makros konnen nach diesem Muster leicht erzeugt werden, vergleichen Sie auch unsere Ausfiihrungen tiber den \leaders-Befehl..

Das im Argument Text vorhandene Material wird ohne Expansion in die. toc-Datei tibernommen.

\ wri tenumberedtocentry erweitert die Syntax des Makros \ writetocentry urn eine wesentliche Komponente: Ein drittes Argument wird bei diesem Befehl an der Stelle

Page 7: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros fOr logische Strukturen 263

im Quelltext expandiert, an welcher der Befehl aufgerufen wird. Damit ist es moglich, aktuelle Werte von Zahlem in die. toc-Datei aufzunehmen. Wird im dritten Argument also z. B. \ the \chapter geschrieben, expandieren diese Makros zu dem entsprechenden Wert, den sie im Quelltext haben. In diesem Kapitel wird also folgende Zeile in die . toc­Datei geschrieben:

\ tocchapterentry{Erwei terungen von Plain-TEX}{14}{Seitenzahl}

Die Verwendung des \wri tenumberedtocentry-Makros macht eine Redefinition der \ tocpartentry-Makros erforderlich, urn den Inhalt des dritten Argumentes auswerten zu konnen.

Wenn nach einem Ubersetzungslauf die. toc-Datei existiert, sollte sie mit dem Makro \readtocfile an der entsprechenden Stelle im Quelltext eingelesen werden, an der das Inhaltverzeichnis gesetzt werden solI.

Durch \rewri tetocfilefalse wird ein emeutes Schreiben der . toc-Datei unter­bunden, was sich empfiehlt, wenn das Inhaltsverzeichnis am Ende des Dokumentes ein­gebunden werden solI.

Querverweise

Querverweise stellen ein sehr machtiges Werkzeug zur Orientierung in umfangreichen Dokumenten dar. Mit TEX ist es auf einfache Weise moglich, auf bestimmte Seiten, Ka­pitel, Abschnitte, Gleichungen oder ahnliche Strukturen zu verweisen.

Querverweise werden in einer Datei mit der Extension aux verwaltet. Diese Datei wird von den ePlain-TEX-Befehlen automatisch gelesen und danach emeut geschrieben, so daB nach zwei Ubersetzungen die aktuellen Referenzen vorhanden sind.

ePlain-TEX verwendet bei der Verwaltung der Querverweise ein Verfahren, das dem von Jt\TPC weitgehend entspricht. Die Label dtirfen aus Zeichen der Kategorieklassen 3, 4, 7, 8, 10, 11 und 12 bestehen, jedoch keine Zeichen der anderen Klassen enthalten. (Die Zeichen %\{} sind verboten.)

An den Stellen des Quelltextes, auf die Bezug genommen werden soli, werden Markie­rungen (Label) angebracht. Mittels bestimmter Referenzbefehle konnen dann die relevan­ten Informationen gewonnen werden. Die folgenden Beispiele zeigen die Arbeitsweise:

Diese Seite wird mit dem Befehl \xrdef{bsp-sei te} markiert.

\@definelabel{bsp-seite}{263}{page}

Der Befehlsaufruf \xrefn{bsp-sei te} fligt dann ,,263" in den Text ein. Wurde zuvor ein "word" -Befehl flir diesen Labeltyp definiert (hier ist es der Typ "page", siehe unten), also z. B. \def\pageword{Sei te}, dann generiert \ref{bsp-sei te}: Seite 263.

Allgemein werden Label mit dem Befehl \definexref definiert. Dieser Befehl ver­fligt tiber drei Argumente: das erste Argument enthalt den Markierungstext, wie er in den Referenzbefehlen angegeben wird. Das zweite Argument kann einen beliebigen Ein­trag enthalten, tiblicherweise wird hierin der Wert (eines Zahlers) der Gliederungsstruktur tibergeben. Das dritte Argument zeigt schlieBlich den Typ des Labels an. Label, die sich auf Abschnitte beziehen, sollten yom Typ "section" sein, solche flir Kapitel "chapter", und flir Beispiel konnte der Typ "example" angegeben werden.

Page 8: TEX Praxis || Erweiterungen von Plain-TEX

264 Kapitel 14. Erweiterungen von Plain-T e<

\def\eplainref{\©generalref{}}% \def\refs{\©generalref s}% \def\©generalref#1#2{%

}%

\readauxfile \edef\temp{\getproperty{\xrlabel{#2}}{class}}% \expandafter\ifx\csname \temp word\endcsname\relax \else

\csname \temp word\endcsname #1\penalty\©M \

\fi \refn{#2}%

Ein Beispiel: Hier wird mittels \definexref{bsp}{1}{example} ein Label defi­niert. In die. aux-Datei wird die Zeile \©definelabel{bsp}{1}{example} geschrie­ben. Der Aufruf von \ref{bsp} expandiert zu 1. Falls der korrespondierende "word"­Befehl existiert, (\def\exampleword{Beispiel}) wird "Beispiel 1" gesetzt.

Folgende "word"-Befehle sollten bereitgestellt werden:

\def\pageword{Seite} \def\chapterword{Kapitel} \def\sectionword{Abschnitt} \def\subsectionword{Unterabschnitt}

Weitere Referenzbefehle sind:

• \refn und \xrefn (Synonym). Sie referenzieren den im zweiten (~ummer-) Ar­gument des Befehls \definexref enthaltenen Wert: \refn{bsp} liefert "Beispiel I", wohingegend \refn{bsp-sei te} zu ,,263" expandiert.

• \refs (Definition siehe oben) erzeugt Beispiels 1 (Beispiel mit "s" am Ende). Ur­spriinglich wurde das Makro fUr die englische Sprache entwickelt, so daB eine Anpassung sinnvoll sein konnte, z. B. in der Form: \def\refs{\©generalref e}

• \xref ist ein spezieller Referenzbefehl fUr "page"-Label: \xref{bsp-sei te} setzt "p. 263". Die voreingestellte Befehlsdefinition zeigt die nachste Abbildung.

Wird stattdessen \def\xref{S. \thinspace\xrefn} definiert, erzeugt der Aufruf \xref{bsp-sei te} entsprechend "S. 263". Auf Label anderer Typen angewendet wer­den mit diesem Befehl unsinnige Ausgaben produziert: \xref{bsp} erzeugt "S. 1".

Nicht existierende Label-Marken erzeugen voreingestelltermaBen Warnungen: \ref {nicht existierender Label} wird als 'nicht existierender Label' (was so ebenfalls auf dem Terminal ausgegeben wird) gesetzt, wenn nicht zuvor die Meldungen mit \xrefwarninigfalse unterdruckt wurden.

Fur mathematische Gleichungen existieren entsprechende Befehle, die das Verweisen auf einzelne Gleichungen oder auch Gleichungsteile ermoglichen.

Page 9: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros fOr logische Strukturen 265

\def\xrefn#1{% \readauxfile

}%

\expandafter \ifx\csname\xrlabel{#1}\endcsname\relax \if@citewarning

\message{\linenumber Undefined label '#1' .}% \fi \expandafter\def\csname\xrlabel{#1}\endcsname{%

'{\tt

}% \fi

\escapechar = -1 \expandafter\string\csname#1\endcsname

}'%

\csname\xrlabel{#1}\endcsname % Always produce something.

\let\refn = \xrefn \def\xref{p.\thinspace\xrefn}%

Oas Stichwortverzeichnis: Index Stichwortverzeichnisse stellen eine weitere, nicht triviale Aufgabe beim Satz komple­

xer Dokumente dar. Indexeintrage werden im Quelltext markiert (oder unsichtbar ein­gefiigt), und TE,X erzeugt bei der Ubersetzung eine exteme Datei mit den Stichworten und den Seitenzahlen, auf denen das Stichwort auftritt. Diese Stichwortdatei wird - zu­meist mit einem speziellen Programm (oft wird make index hierfur verwendet) - sortiert. Dabei werden die Stichworte alphabetisch (und eventuell in mehreren Ebenen) sortiert, gleiche Stichworte werden zusammengefaBt, und die Seitenzahlen werden auf eine spe­zielle Weise zusammengestellt. Diese Daten werden in eine exteme Datei geschrieben, welche dann bei der nachsten Ubersetzung in das Dokument eingebunden werden kann.

ePlain-TEX erlaubt die Verwendung mehrerer Indexdateien. So wird fUr dieses ein In­dex fiir die normalen Stichworte gefiihrt und ein weiterer fUr die Kontrollsequenzen. Da­durch ist es wesentlich einfacher, bestimmte Informationen gezielt aufzusuchen.

ePlain-TEX verwendet voreingestellt die Indexdatei . idx. Jeder weitere Index wird mit dem Befehl \defineindex{Kennhuchstabe} eingefUhrt. Fur jeden Index werden auto­matisch mehrere Befehle definiert. (In den folgenden Ausfuhrungen berucksichtigen wir nur den Default-Index, fUr aile weiteren gilt analoges. Der Buchstabe "i" wird dann durch den entsprechenden ersetzt.)

Der Indexbefehl \idx schreibt den im Argument enthaltenen Text sowohl in die. dvi­Datei als auch in die Indexdatei.

\idx{Index} erzeugt in der . idx-Datei folgende Zeile:

\indexentry{Index}{265}

Der zweite Indexbefehl stellt eine stille Variante von \idx dar: \sidx erzeugt keinen Text in der . dvi-Datei, wohl aber einen Eintrag im Indexfile. Dabei kann der Eintragstyp bei dies em Befehl genauer spezifiziert werden.

Page 10: TEX Praxis || Erweiterungen von Plain-TEX

266 Kapitel 14. Erweiterungen von Plain-T e<

\sidx{Index} [EintragJ erzeugt folgende Zeile in der . idx-Datei:

\indexentry{Index!Eintrag}{265}

Das ,,!"-Zeichen dient dem make index als Indikator fUr Untereintrage; die Zeile oben wird also interpretiert als "Eintrag »Index« mit dem Untereintrag »Eintrag«".

make index kann Eintrage in drei Ebenen verwalten. Sie konnen deshalb auch den folgenden Code eingeben \sidx{Eintrag! Index! manuell} und erhalten dann:

\indexentry{Eintrag!Index!manuell}{266}

Ftir die Eingabe von Namen wurden zwei spezielle Befehle bereitgestellt: \idxname und \sidxname. Der Befehl wird folgendermaBen verwendet.

\sidxname{Vorname}{von Nachname} [UntereintragJ generiert:

\indexentry{von Nachname\idxnameseparator Vorname!Untereintrag}{266}

\idxnameseparator ist mit dem Kommazeichen vorbelegt. Oft ist es sinnvoll, bestimmte Indexeintrage unter einem bestimmten Schliisselwort ein­

zusortieren, dort aber eine andere Darstellungsform zu verwenden. Z. B. sollte der Eintrag rEX unter TeX erscheinen, aber als \ TeX-Logo gesetzt werden.

Die Befehle \idxmarked und \sidxmarked sind fUr diese Aufgabe vorgesehen. Beide Befehle verwenden ein yom Anwender definiertes Formatierungsmakro fUr die Darstel­lung der Indexeintrage. Dieses Formatierungsmakro verftigt tiber ein Argument, das die bei der Sortierung berucksichtigte Form des Indexeintrags enthalt. 1m obigen Beispiel wtirde folgende Form zum gewtinschten Ergebnis fUhren:

\def\idxformat#1{\csname #1\endcsname} \idxmarked\idxformat{TeX}

\idxformat{TeX} wird als TEX dargestellt. In der . idx-Datei steht dann folgende Zeile:

\indexentry{TeX@\idxformat {TeX}}{266}

Die gleichen Indexeintrage konnen nattirlich auch durch das direkte EinfUgen des ,,@"­Zeichens in den - stillen - Indexbefehl erzeugt werden. ,,@" trennt den Sortierschliissel yom dargestellten Eintrag.

Urn eines der Indexsonderzeichen ,,!", ,,©" oder ,,1" darzustellen, wird ihnen ein ,,"" vorangestellt. Das gilt auch fUr die Darstellung des,,"" -Zeichens, es wird verdoppelt.

\idxsubmarked und \sidxsubmarked sind Varianten dieser Befehle fUr die forma­tierte Darstellung von Untereintragen.

Die ePlain-rEX -Indexbefehle verfUgen tiber weitere Features. Eines wollen wir hier noch vorstellen: AIle Indexbefehle verftigen tiber ein optionales Argument, das - wenn es vor dem ersten, in {}-Klammem angegebenen auftritt - die Art des Indexeintrags genauer spezifizieren kann. Die komplette Syntax des \idx-Befehls lautet also

\idx [SpezifizierungJ [EintragJ [UntereintragJ

Spezifizierung kann die folgenden Schliisselworte enthalten:

• begin oder end: Mit diesen Schltisseln werden Bereiche gekennzeichnet, in de­nen der Eintrag mehrfach auf tritt, jedoch nicht immer markiert wurde. Die Angabe der

Page 11: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros fOr logische Strukturen 267

Schlussel bewirkt, daB im Index ein ,,-" -Strich (-- "bis") zwischen der Seitenzahl fOr die erste und letzte Angabe gesetzt wird.

auf Seite 17: \idx [begin] {Indexeintrag} und auf Seite 25: \sidx [end] {Indexeintrag} bewirkt: Indexeintrag 17-25

• see: Hiermit wird ein Verweis auf einen anderen Indexeintrag gegeben. \idx[see] {Eintrag} [Index] {Indexeintrag}

erzeugt in der . idx-Datei:

\indexentry{Eintrag! Index I indexsee{Indexeintrag}}{9999 9}

Vor dem Querverweis wird der Inhalt des Makros \idxseecmdword eingeftigt; dieses ist folgendermaBen vordefiniert:

\def\idxseecmdword{see}%

• seea!so kombiniert die Eigenschaften von see mit den normalen Verweisen. Ne­ben dem Querverweis werden auch noch die entsprechenden Seitenzahlen eingeftigt. Vor dem Querverweis wird der Inhalt des Makros \idxseea!socmdword gesetzt:

\def\idxseea!socmdword{seea!so}%

• pagemarkup=Typ: Mittels dieses Schlusselwortes kann eine bestimmte Formatie­rung der Seitenzahl, die mit dem Stichwort in die. idx-Datei geschrieben wird, festgelegt werden. Mit diesem Verfahren werden z. B. in [4] und [7] die Seitenzahlen, auf denen die Definition eines Makros gezeigt wird, unterschieden (kursiv, fett oder unterstrichen dar­gestellt) von denen, auf denen das Makro angewendet wird (normal gesetzt), obwohl die Seitenzahlen alle hinter demselben Stichwort erscheinen.

Fur den Typ muG ein Makro mit genau einem Argument (der Seitenzahl des Eintrags) definiert werden:

\def\defPage#1{{\bf #1}}

Das MakrO wird dann in der . idx-Datei angewendet: \sidx [pagemarkup=defPage] {bsp} erzeugt auf Seite 222: \indexentry{bsp I defPageH222}, was als \i tem bsp \pfil! \defPage{22} im Index gesetzt wird.

Fur die Indexerstellung stellt ePlain-TEX noch einige hilfreiche Makros zur Verfugung. \indexproofterm ist ein Makro, das den in seinem Argument enthaltenen Text in

einer \hbox setzt und mit dem Befehl \indexprooffont (default emtt8) formatiert darstellt. Wird dieser Befehl zusammen mit den Indexbefehlen angewendet, kann ePlain­TEX eingesetzt werden, urn die tatsaehlieh verwendeten Indexeintrage im Dokument zu kennzeichnen.

\indexproofingtrue ist ein Schalter, der die ePlain-TEX-Indexmakros veranlaBt, ih­ren Inhalt in den Seitenrand zu schreiben. Dadurch konnen Fehler bei der Indexmarkie­rung leichter aufgekliirt werden. Die Voreinstellung ist \indexproofingfa!se.

Den Index sortieren Nachdem die rohe Indexdatei durch das Ubersetzen des Quelltextes erstellt wurde, wird

sie sortiert. Fur diese Aufgabe bietet sich der Indexprozessor make index von Pehong

Page 12: TEX Praxis || Erweiterungen von Plain-TEX

268 Kapitel 14. Erweiterungen von Plain-T g<

Chen an. Wir sehen hier von einer ausfUhrlichen Beschreibung des Programmes ab, da sie den Rahmen sprengen wtirde und die Programmdokumentation (einschlieBlich man­pages) sehr ausfUhrlich ist. In [4] und [7] werden Anwendungsbeispiele gegeben.

Die rohe Indexdatei wird mit dem Befehlsaufruf

make index eingabe.ist

bearbeitet. Dabei entsteht neben der Ausgabedatei eingabe. ind noch eine . ilg-Datei, die zusatzliche Informationen zur Indexbearbeitung enthiHt.

Auf dem Terminal erscheinen Meldungen der Form:

This is make index , portable version 2.12 [26-May-1993]. Scanning input file eingabe.idx .... done (100 entries accepted, o rejected). Sorting entries ... done (100 comparisons). Generating output file eingabe.ind .... done (80 lines written, o warnings). Output written in eingabe.ind. Transcript written in eingabe.ilg.

Die rohe Indexdatei kann auch unter Verwendung einer Indexstildatei bearbeitet wer­den, diese enthiilt dann Angaben tiber das Format der Eingabedatei und konfiguriert die Darstellung des Stichwortverzeichnisses.

make index -sStildatei eingabe. ist

Die Verwendung einer Stildatei (hier gind. i st) wird durch folgende Zeile auf dem Terminal dokumentiert:

Scanning style file gind.ist ..... done (13 attributes redefined, 3 ignored).

Den sortierten Index einbinden

Nachdem der Index sortiert in einer Datei mit der Extension. ind vorliegt, kann er in das Dokument eingebunden werden. ePlain-TEX hat dazu den \readindexfile{i}­Befehl definiert. {i} kennzeichnet den verwendeten Index, wie oben beschrieben.

Je nach der verwendeten Indexstildatei treten im sortierten Indexfile Formatierungsbe­fehle auf, die zuvor definiert werden mtissen. (Tatsachlich dient die Indexstildatei u. a. dazu, die geeigneten Befehle in die sortierte Indexdatei zu schreiben.) Bei der Verwen­dung der Standard-Indexstildatei gind. ist sind folgende Definitionen notwendig:

\let\bfseries\bf \let\nopagebreak\nobreak \let\pfill\dotfill \let\efill\dotfill

Mit den weiter unten beschriebenen Makros fUr den Mehrspaltensatz sind so auf ein­fache Weise drei- oder vierspaltige Stichwortverzeichnisse darstellbar. Voreingestellt ist der zweispaltige Satz.

Page 13: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros fOr logische Strukturen 269

Einfache Tabellen ePlain-TJY( stellt fUr den Tabellensatz ein einziges Makro \makecolumns zur Verfti­

gung. Dieses Makro ist geeignet, einfaehe Tabellen mit wenig Aufwand darzustellen. Das \makecolumns-Makro weist eine etwas gewohnungsbedtirftige Syntax auf: Es

verftigt tiber zwei Argumente, von denen das erste mit einem "/,, begrenzt wird und das zweite dureh: ,,: u" (ein Doppelpunkt gefolgt von einem Leerzeiehen). Beide Argumente sind ganze Zahlen; das erste enthalt die Anzahl der zu bearbeitenden Eintrage, das zweite die Anzahl der zum Satz verwendeten Spalten. Dies ist der Quelltext fUr die folgenden Abbildungen:

1. Eintrag 2. 3. \bf fett 4. 5. 6. 7. 8. 9. 10. 11. letzter Dieser Text steht hinter dem letzten Eintrag.

Die linke Abbildung wird in einer 33mm breiten, die reehte in einer 92mm breiten Box gesetzt, die folgenden Beispiele dann in 60mm breiten Boxen:

\makecolumns12/2: \makecolumns12/6: erzeugt: 1. Eintrag 7. 1. Eintrag 3. fett 5. 7. 9. 11. 2. 8. 2. 4. 6. 8. 10. letzter 3. feU 9. 4. 10.

Dieser Text steht hinter dem letzten Eintrag.

5. 11. 6. letzter

Dieser Text steht hin­ter dem letzten Eintrag.

\makecolumns12/4: erzeugt: l. Eintrag4. 7. 10. 2. 5. 8. 11. 3. fett 6. 9. letzter

\makecol umns 12/3: erzeugt: l. Eintrag 5. 9. 2. 6. 10. 3. fett 4.

7. 8.

11. letzter

Die obigen Beispiele zeigen die Wirkung des \makecolumns-Makros: stets werden die Tabellen in der Breite der umgebenden Box (\hsize) erzeugt, und alle Spalten haben die gleiche Breite. Textzeilen, die naeh der Tabelle folgen, werden als eigenstandige Absatze formatiert.

Page 14: TEX Praxis || Erweiterungen von Plain-TEX

270 Kapitel 14. Erweiterungen von Plain-T g<

Literaturzitate und -verzeichnisse

Die Verwaltung der Literaturzitate und -verzeichnisse erfolgt weitgehend analog zu derjenigen in k\TpC Diese ist z. B. in [4] und [7] ausfiihrlich dargestellt. Wir werden im folgenden nur die wichtigsten Konzepte vorstellen.

Literaturverzeichnisse konnen manuell erstellt (siehe [7]) oder aus Literaturdatenban­ken extrahiert (siehe [4] und [8]) werden. Das Ergebnis dieser Arbeit stellt eine Umgebung yom Typ \thebibliography (in k\T~) oder \References (ePlain-TEX) dar, innerhalb der durch \bibi tem-Makros getrennt, die Literaturzitate einzeln aufgefiihrt sind.

\bi bi tern [optionale Listenmarke] {Label fur ersten Eintrag} erster Eintrag \bibi tern [optionale Listenmarke] {Label fur zweiten Eintrag} zweiter Eintrag

Mit den optionalen Parametern der \bibi tem-Befehle konnen alternative DarsteIlun­gen der Zitatbezeichner gesetzt werden. Label fur . .. ten Eintrag enthalt die Markierung, mit der im \ci te-Befehl auf diesen Eintrag verwiesen wird, siehe unten.

1m wesentlichen handelt es sich bei der \thebibliography- oder \References­Umgebung urn eine Listenstruktur. Jeder einzelne Eintrag in dieser Liste besteht aus ei­nem Label, dem Zitatbezeichner und dem dazugehorenden Textblock, der in konsistenter Weise aIle Zitate darstellt. So konnen z. B. aIle Autorennamen durch Kapitalchen gekenn­zeichnet werden, Buchtitel kursiv gesetzt werden und ahnliches mehr.

Die in der Literaturliste definierten Label konnen innerhalb des Dokumentes referen­ziert (d. h. auf sie kann verwiesen) werden. Dazu wird der \ci te-Befehl verwendet. Die­sem Befehl wird in geschweiften Klammern ein - analog zu den Querverweisen definier­ter - Bezeichner tibergeben, z. B.:

\cite{texbook}

Existiert in der Literaturliste ein \bibi tem-Befehl, der das gleiche Argument hat, also

\bibitem{texbook} ... ,

dann expandiert der \ci te-Befehl zu dem Zitatbezeichner, hier also [1], siehe Literatur­verzeichnis. Der \ci te-Befehl schreibt den im Argument enthaltenen Bezeichner als

\ci tation{Bezeichner}

in die. aux-Datei, die dann von BIBTEX bearbeitet wird (siehe unten). Die Darstellung der Zitatbezeichner IaBt sich in vielf<iltigster Weise voreinstellen, eben­

so wie das Format der Literaturzitate in der Literaturliste, so daB aIle geforderten Darstel­lungen moglich sind.

Die folgenden Kontrollsequenzen beeinftussen die Darstellung der Literaturzitate im Text und in der Literaturliste.

Darstellung von Literaturzitaten im Text andern Die Darstellung der Zitatbezeichner durch den \ci te-Befehl wird durch die folgenden

Befehle gesteuert: Die Makros \printci testart und \printci tefinish definieren diejenigen Zeichen, die vor und nach dem entsprechenden Zitatbezeichner gesetzt wer­den. Voreingestellt sind die Zeichen ,,[" und ,,]".

Page 15: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros fOr logische Strukturen 271

Das Makro \printbetweenci tations wird expandiert, wenn mehrere Zitate nach­einander angegeben werden, wenn also z. B.

\cite{texbook, texprogram}

geschrieben wird, was als [1, 2] dargestellt wird. Voreingestellt ist ein Komma, gefolgt von einem Leerzeichen.

Es bleibt noch anzumerken, daB der \ci te-Befehl tiber ein optionales Argument ver­fiigt, das das Literaturzitat weiter konkretisiert: \ci te [Sei te 17] {texbook} wird als [1, Seite 17] dargestellt.

\printci tenote: Dieses Makro hat ein Argument, welches eine optionale Note (An­merkung zum Zitat) darstellt. Es wird nur dann ausgefiihrt, wenn das optionale Argument des \cite-Befehls verwendet wird.

K. Berry schHigt vor, hochgestellte Zitate durch folgende Definition zu realisieren:

\def\printcitestart{\unskip$-\bgroup} \def\printcitefinish{\egroup}$ \def\printbetweencitations{,} \def\printcitenote#1{\hbox{\sevenrm\space (#1)}}

Literaturlisten mit Bm'IEX erstellen Das Extrahieren von Literaturlisten aus Literaturdatenbanken wird von ePlain-TljX mit

mehreren Befehlen untersttitzt, die wir hier vorstellen wollen. Zunachst werden wir jedoch noch einmal kurz auf die Arbeitsweise von BIBTljX eingehen.

BIBTljX liest . aux-Dateien, durchsucht diese nach den unten beschriebenen Schltissel­worten und bearbeitet dann eine Literaturdatenbank. Diese Literaturdatenbank ist in einer (oder mehreren) Dateien mit der Extension. bib enthalten. Das Ergebnis dieser Bearbei­tung ist eine lokale Literaturliste, die in einer Datei mit der Extension . bbl gespeichert wird. Werden in einem Dokument - z. B. einem Sammelwerk mehrerer Autoren - mehrere Literaturverzeichnisse benotigt, konnen ftir diese tiber das Makro \bblfilebasename unterschiedliche Dateinamen (z. B. kapitelweise) ftir die einzelnen . bbl-Dateien angege­ben werden.

Das Makro \bibliography hat eine zweifache Funktion: einerseits schreibt es den Inhalt seines Argumentes in die. aux-Datei, andererseits versucht es, eine . bbl-Datei mit dem entsprechenden Namen in das Dokument einzubinden, also die lokale Literaturliste darzustellen.

Uber BIBTljX-Steuerdateien (sie werden auch als BIBTljX-Styles bezeichnet und haben die Dateiextension . bst) wird die Formatierung und Extraktion gesteuert.

Die Information dartiber, welche . bst-Datei von BIBTljX beim der Erstellen der . bbl­Datei verwendet werden solI, wird mit dem \bibliographystyle-Befehl innerhalb des Quelltextes festgelegt. Der Inhalt des Befehlsargumentes wird in der Form \bibstyle {Sti!} in die. aux-Datei geschrieben, wo BIBTljX sie findet und auswertet. In [8] werden zahlreiche, an die deutsche Sprache angepaBte, Varianten der . bst-Dateien vorgestellt. Die enge Zusammenarbeit von ePlain-TljX und BibTeX macht folgende Arbeitsweise not­wendig:

Page 16: TEX Praxis || Erweiterungen von Plain-TEX

272 Kapitel 14. Erweiterungen von Plain-T g<

eplain datei bibtex datei eplain datei eplain datei

erzeugt: datei. aux liest datei. aux und erzeugt: datei. bbl liest datei . bbl ein, Referenzen noeh undefiniert Referenzen eingeftigt, fertig

Der Befehl \noci te wird in Quelltexten eingesetzt, urn nieht dargestellte (nieht zi­tierte) Literaturquellen in die Literaturliste aufzunehmen. Der Befehl sehreibt analog zum \ci te-Befehl eine \ci tation-Zeile in die. aux-Datei. Von besonderer Bedeutung ist die Angabe \noci te{ *}: sie bewirkt, daB aile Literaturzitate aus der Literaturdatenbank in die. bbl-Datei tibemommen werden. \xrefwarningfalse unterdrtiekt Wamungen, die von ePlain-TEX generiert werden, wenn auf in der Literaturliste nicht definierte Zitate verwiesen wird.

Literaturverzeichnisse formatieren

Die Darstellung der Literaturlisten unterliegt ahnlichen Anforderungen wie die der La­bel im Text. ePlain-TEX definiert zahlreiche Befehle, die die Formatierung dieser Liste steuem. \biblabelwidth ist ein \dimen-Register, das die Breite des langsten Label in der Literaturliste angibt. \biblabelprint formatiert den im Argument enthaltenen Bezeichner als Label. Das Makro kann redefiniert werden, wenn z. B. die eingefUgten Abstande verandert werden sollen. Es arbeitet eng mit dem folgenden Befehl zusammen, wie die Definition zeigt.

\def\biblabelprint#l{\noindent \hbox to \biblabelwidth{%

\biblabelprecontents \biblabelcontents{#l}% \biblabelpostcontents}%

\kern\biblabelextraspace}%

\biblabelprecontent und \biblabelpostcontents sind mit . bst-abhangigen Definitionen belegt. Fur numerische Label wird z. B.

\let\biblabelprecontents = \hss \let\biblabelpostcontents = \relax

definiert. Sie konnen fUr besondere Darstellungen angepaBt werden. \biblabelextraspace wird bei der Formatierung der Literaturliste mit "hangendem

Einzug" zusatzlieh eingefUgt. Voreingestellt sind 0.5 em. \biblabelcontents formatiert den im Argument vorhandenen Eintrag. Voreinge­

stellt dazu ist die Verwendung des Befehls \bblrm, altemativ konnen auch die Befehle \bblem, \bblsc oder analog definierte Makros eingesetzt werden.

\def\biblabelcontents#l{{\bblrm [#1]}}% \def\bblrm{\rm}% \def\bblem{\it}% \def\bblsc{\ifx\©scfont\©undefined

\font\©scfont = cmcscl0 \fi \©scfont}%

Page 17: TEX Praxis || Erweiterungen von Plain-TEX

14.4 Makros fOr logische Strukturen 273

\bibnewblock separiert die einzelnen Komponenten eines Eintrags in der Literatur­liste. Dieser Befehl wird z. B. zwischen der Darstellung des Autornamens und des Titels, des Titels und der Vedagsangabe usw. ausgefiihrt.

\def\bblnewblock{\hskip .11em plus .33em minus .07em }%

Bleibt noch das Makro \bblhook. Es wird vor dem Einlesen einer . bbl-Datei ex­pandiert und kann verwendet werden, urn bestimmte Einstellungen (z. B. die GroBe des \parindent) festzulegen oder urn Fonts zu aktivieren. Die VoreinsteHung bewirkt nichts.

\let\bblhook = \empty

Dieses Makro wird mittels \def-Befehlen definiert.

Mehrspaltensatz

Die Formatierung mehrspaltiger Dokumente steHt eine nicht triviale Aufgabe dar. Umso bemerkenswerter ist die Tatsache, daB ePlain-TEX Makros fUr die ein- bis vierspaltige Formatierung enthalt.

Der Zweispaltensatz wird mit dem Makrobefehl \doublecolumns einge­leitet.

Entsprechendes gilt fUr den dreispalten Satz, der durch \triplecolumns begonnen wird und fUr

den Vierspaltensatz, der nach \quadcolumns-Be­fehlen verwendet wird.

\singlecolumn wechselt dann wieder in die gewohnte Satzform zurUck.

Eine Spalte kann durch den Befehl \ col umnf ill so mit Leerraum aufgefUHt werden, daB der Satz in der nachsten Zeile weiter geht.

Die einzelnen Spalten werden urn den im Makro \gutter enthaltenen Llingen­wert (voreingesteHt 2 pc) voneinander ge-

trennt gesetzt. Vor einem Textblock im Mehrspaltensatz wird der vertikale Ab­stand \abovedoublecolumnskip ein­gefUgt, \belowdoublecolumnskip an­schlieBend.

VoreingesteHt ist fUr beide Makros der Wert \bigskipamount.

Die Formatierung sehr schmaler Spalten steHt ein schwieriges typografisches Problem dar, wie die Beispiele oben zeigen. Sie konnen TEX die Arbeit erleichtern, indem Sie folgende - dem U\Tpc-Befehl \sloppy entstammenden - Makros vor dem Satz dieser Spalten aufrufen:

\tolerance9999 \emergencystretch3em \hfuzz.5pt

Page 18: TEX Praxis || Erweiterungen von Plain-TEX

274 Kapitel 14. Erweiterungen von Plain-T e<

14.5 Diverses ePlain-TEX stellt noch weitere Befehle fUr Anwender und Programmierer zur Verfii­

gung. Wir werden die wichtigsten auf den folgenden Seiten kurz beschreiben.

Boxen Schwarze Quadrate (.), wie sie in nicht numerierten Listen angewendet werden, k6nnen

mit \blackbox erzeugt werden. Fiir die Darstellung nicht ausgefiillter Boxen wurde der Befehl \makeblankbox de­

finiert. Er ben6tigt zwei Angaben tiber die Breite und H6he der leeren Box. Die Kon­struktion bezieht sich auf die \boxO, deren Inhalt ignoriert wird. Diese ist deshalb zuvor entsprechend zu initialisieren.

ePlain-TEX stellt eine Variante des \boxi t-Makros zur Verfiigung:

\long\def\boxit#l{% \vbox{%

}% }%

\ehrule \hbox{%

\evrule \kern\boxitspace \vbox{\kern\boxitspace \parindent Opt #l\kern\boxitspace}% \kern\boxitspace \evrule

}% \ehrule

So wurde [ BOXIT [ durch \boxi t{\hbox{BOXIT} erzeugt. Die Makros \ehrule und \evrule werden zur Konstruktion verwendet.

Verbatimes Die Problematik bei der Darstellung verbatimen Materials wurde in Abschnitt 12.6

erHiutert. ePlain-TEX unterstiitzt den Anwender mit einigen sehr hilfreichen Befehlen. Zwischen den Befehlen \verbatim und I endverbatim kann beliebiger 7-Bit-Code

stehen. (8-Bit-Zeichen erzeugen Fehlermeldungen.)

\verbatim%&#@-Iendverbatim erzeugt: %&#@-

Der escape character fUr die I endverbatim-Zeichenkette wird in dem \catcode­basierenden Makro \ verbatimescapechar mit I vorbelegt. \ verbatimescapechar\@ definiert @ fUr diesen Zweck.

\listing ist ein Makro, das verwendet werden kann, urn eine exteme Datei im Quell­text verbatim darzustellen. Es wird analog zu \input verwendet, wobei die Syntax des jeweiligen Filesystems berticksichtigt werden muB. Die Datei wird zeilenweise eingele­sen, gegebenenfalls werden Seitenumbriiche vorgenommen; \listing {. / gind. ist} erzeugt:

Page 19: TEX Praxis || Erweiterungen von Plain-TEX

actual '=' quote' , level '!' preamble "\n \\begin{theindex} \n " %\\makeatletter\\scan@allowedfalse\n" post amble "\n\n \\end{theindex}\n" item_xl "\\efill \n \\subitem " item_x2 "\\efill \n \\subsubitem " delim_O "\\pfill" delim_l "\\pfill" delim_2 "\\pfill"

14.5 Diverses 275

% The next lines will produce some warnings when % running Makeindex as they try to cover two different % versions of the program: lethead_prefix "{\\bfseries\\hfil" lethead_suffix "\\hfil}\\nopagebreak\n" lethead_flag 1 heading_prefix heading_suffix headings_flag %%

"{\\bfseries\\hfil " "\\hfil}\\nopagebreak\n"

1

%% End of file 'gind.ist'. Weiterhin ist eine zeilenweise numerierte Darstellung der eingelesenen Datei mit dem

Makro \linenumberedlisting moglich. Das Makro \printlistinglineno bewirkt die Formatierung der Zeilennummem. Voreingestellt ist folgende Definition:

\def\printlistinglineno{\llap{[\the\lineno]\quad}}%

Zur Darstellung wird der im Makro \listingfont definierte Fontbefehl ausgefilhrt, sinnvoll sind hier in erster Linie die Schreibmaschinenschriften wie \ tt (Voreinstellung).

Das Makro \setuplistinghook wird vor dem Expandieren der ... listing ... -Befehle ausgefilhrt. Durch

\def\printlistinglineno{\llap{\sevenrm\the\lineno:\quad}} \let\setuplistinghook\linenumberedlisting

wird die eingelesene Datei mit kleinen (im Roman-Font gesetzten) Zahlen, die mit einem Doppelpunkt abgeschlossen sind, dargestellt.

Pfade: Technische Bezeichner umbrechen

Der Befehl \path wird zur Darstellung langer (technischer) Bezeichner verwendet, wie z. B. von email-Adressen. Der im Argument dieses Befehls stehende Text wird nur an den Stellen umgebrochen, die durch \discretionaries definiert werden. Voreingestellt ist \discretionaries '-@$%&- _: ; ,. ! ?'\!<>="*O{}[] ,

Page 20: TEX Praxis || Erweiterungen von Plain-TEX

276 Kapitel 14. Erweiterungen von Plain-T g<

Dieser Befehl verwendet zur Begrenzung der Argumente ebenso wie der \path-Befehl das Zeichen I. Durch den Schalter \specialpathdelimi terstrue kann diese Vorein­stellung veriindert werden.

Diagramme

DaB arrow. tex sehr wirksame Makros fUr das Setzen von (kommutativen) Diagram­men enthiilt, haben wir bereits in Abschnitt 12.24 gezeigt.

Wir wollen hier deshalb auf die Beschreibung der einzelnen Befehle verzichten und zeigen stattdessen ein weiteres Beispiel nebst Quelltext:

U v

u(U n V) (U n V)v

unv Unv

$$\hgrid=16pt \vgrid=8pt \sarrowlength=32pt \def\cross#1#2{\setboxO=\hbox{$#1$}%

\hbox to\wdO{\hss\hbox{$#2$}\hss}\11ap{\unhboxO}} \def\1#1{\11ap{$#1$\hskip.5em}} \def\r#1{\rlap{\hskip.5em$#1$}} \gridcommdiag{&&U&&&&V\cr &&\bullet&&&&\bullet\cr &&\sarrowlength=16pt\sline(O,1)&&&&\sarrowlength=16pt\sline(O,l)\cr &&\l{u(U\cap V)}\bullet&&&&\bullet\r{(U\cap V)v}\cr &&&\sline(2,-1)&&\sline(2,1)\cr &&\cross{=}{\sline(O,l)}&&\bullet&&\cross{=}{\sline(O,l)}\cr\cr &&\l{-{\textstyle u(U\cap v)}}\bullet&&\cross{=}{\sline(O,l)}&& \bullet\r{-{\textstyle(u\cap V)v}}\cr

&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)\cr \l{u}\bullet&&&&\bullet&&&&\bullet\r{v}\cr &\sline(2,-1)&&\sline(2,1)&&\sline(2,-1)&&\sline(2,1)\cr &&\bullet&&&&\bullet\cr &&u\cap V&&&&U\cap v\cr}$$

Die Abbildung entsteht in einem Tabellenraster, wie Sie an den &-Zeichen erkennen.

Makros fOr den Mathematikmodus

Plain-TJY( bewirkt, daB abgesetzte Formeln (die durch $$ erzeugt werden) immer ho­rizontal zentriert werden. Viele Layouts sehen aber eine linksbiindige Darstellung vor. ePlain-TJY( definiert dafUr den Befehl \leftdisplays, der ein Einriicken urn den Wert aus \leftskip plus \parindent plus \leftdisplayindent bewirkt. \leftdisplays

Page 21: TEX Praxis || Erweiterungen von Plain-TEX

14.5 Diverses 277

redefiniert \displaylines, \eqalignno und \leqalignno so, daB linksbiindiger Satz entsteht.

ePlain-TEX steHt eine alternative Variante des \nicefrac-Makros unter dem Namen \frac zur Verfugung.

Fur die Darstellung von Gleichungsnummem werden drei Makros definiert: \eqprint setzt die Nummer in der Gleichung.

\def\eqprint#1{(#1)}%

lautet die VoreinsteHung, sie kann entsprechend den Anforderungen angepaBt werden. Der Parameter #1 wird durch den darzusteHenden Text (i. A. der Gleichungsnummer) ersetzt, die im Ganzzahlregister \eqnumber vorliegt. Hier sind auch die bei den Querver­wei sen beschriebenen logischen Verweise moglich.

Programmierhilfen

Bei der TEX-Programmierung ist es oft notwendig, den kompletten Inhalt von Boxen auf dem Terminal (und im . log-File) sehen zu konnen, urn bestimmte Resultate zu ver­stehen. Der ePlain-TEX-Befehl \tracingboxes wurde fUr diesen Zweck definiert.

Aktive Zeichen konnen mit ePlain-TEX durch den Befehl \makeactive definiert wer­den: \makeacti ve'@ aktiviert das @-Zeichen. Zwei \catcode-Abkurzungen wurden de­finiert: \letter und \other stehen fUr die Kategorieklassen II und 12.

\uncatcodespecial wird verwendet, urn die urspriinglichen Kategorieklassen aller Zeichen zu restaurieren.

ePlain-TEX definiert fUr die Alloziierungs-Makros \new ... (count, skip, etc.) Ver­sionen, die auch innerhalb von Makrodefinitionen wirksam sind. Dieser Mechanismus erstreckt sich auch auf Makrodefinitionen, die durch \innerdef\name{NAME} erfoI­gen. name ist der Name des Makros, wahrend NAME die outer-Zeichenkette fUr das Makro darstellt.

Sehr niitzlich sind die folgenden Makros: \for bearbeitet iterativ eine durch Kommata separierte Liste von Eintragen, die mit \do terminiert ist. Das Argument des \do-Befehls enthalt die auszufUhrenden Befehle.

\for\name:= karl, karsten,kurt\do{% \message{\name}%

}

\def\namelist{ karl, karsten,kurt} \for\name:=\namelist\do{%

\message{\name}% }

schreibt" karl karstenkurt" auf das Terminal. Beachten Sie die Ausgabe des Leer­zeichens vor karl und karsten. Die zweite Variante liefert dasselbe Ergebnis. " karl karstenkurt"

\gobble, \gobbletwo und \gobblethree sind "Dummy"-Makros", die 0, ein oder zwei Argumente verwerfen. Ahnlich funktioniert auch \eattoken, das genau ein (das)

Page 22: TEX Praxis || Erweiterungen von Plain-TEX

278 Kapitel 14. Erweiterungen von Plain-T E'<

folgendes Token vernichtet: \eattoken{ ... } wiirde nur die offnende Klammer aus dem Eingabestrom entfernen.

\identi ty ist als \def\identi ty#1 {#1}% definiert; sinnvoll wird es z. B. dann ein­gesetzt, wenn die Redefinition eines Makros vorgesehen ist, die Voreinstellung jedoch keine besondere Funktion haben solI.

\sanitize wandelt die Expansion der folgenden Kontrollsequenz in eine Zeichen­folge (Kategorieklasse 11) urn, wie dies z. B. beim Schreiben in eine Datei notwendig ist.

\csn{Argument} ist eine Abkiirzung fiir \csnameArgument\endcsname. \ece{Token}{Argument} expandiert Token nach \csnameArgument\endcsname. \expandonce {Argument} ist eine Abkiirzung fiir \expandafter\noexpand{Argu-

ment}. Argument wird einmal expandiert. \hookaction, \hookappend, \hookprepend und \hookactiononce addieren die

folgende Kontrollsequenz zu der im Argument angegebenen Hookliste. \ifundefined fiihrt in Abhiingigkeit von der Existenz der folgenden Kontrollsequenz

die folgenden Befehle aus. Wie immer wird mit \else eine Alternative eingeleitet, \fi terminiert die Abfrage.

Jt\TPC verwendet einen funktionsgleichen Befehl, urn das Uberschreiben bestehender Kontrollsequenzen bei der Definition neuer zu verhindern. Schwartz hat in [3] einen ent­sprechenden \def-Befehl vorgestellt:

\let\AltesDef\def \AltesDef\def#1{\ifx#1\GanzBestimmtUndefiniert

\else \message{\string#1 ist bereits definiert} \fi \AltesDef#1}

\futurenonspacelet funktioniert wie \futurelet, ignoriert aber aIle Leerzeichen. \obeywhitespace wandelt Leerzeichen (und Zeilenumbriiche) im Quelltext in hori­

zontalen Leerraum urn, auch dort, wo \obeyspaces versagt: am Anfang von Zeilen. \blanklineskipamount kann verwendet werden, urn den vertikalen Abstand von

Leerzeilen zu justieren. Der Wert wird als Argument eines \ vski p-Befehls eingesetzt. \hpenal ty fiigt explizit die im Argument iibergebenen Strafpunkte im horizontalen

Modus ein. Dafiir wird - wenn notwendig - \leavevmode ausgefiihrt. \ vpenal ty stellt die Variante zum Einfiigen von Strafpunkten im vertikalen Modus

(durch \par) dar. \loggingall ist ein Makro, das - analog zu \tracingall- den gesamten Weg von

Makroexpansionen darstellt. Diese werden aber nur in die .log-Datei geschrieben. \ tracingoff schaltet das Protokollieren von Makroexpansionen abo Weiterhin definiert ePlain-TEX zwei Tracing-Befehle mit globaler Wirkung:

\gtracingall aktiviert das Tracing, \gloggingall das Schreiben in die .log-Datei, unabhangig, ob die Befehle innerhalb einer Gruppe angewendet werden oder nicht.

Fiir die Verwendung in Hilfsmeldungen (error messages) ist das Makro \newlinechar vorgesehen. Es wird von ePlain-TEX als - - J (Zeilenumbruch) definiert.

Page 23: TEX Praxis || Erweiterungen von Plain-TEX

14.5 Diverses 279

\setproperty und \getproperty wurden zum Setzen und Abfragen von properties (in LISP eingeftihrte Name/Wert-Paare) implementiert. Da TEX tiber keine eingebauten property-Mechanismen verftigt, werden diese Befehle selten verwendet.

\setproperty{atom}{name}{wert}\getproperty{atom}{name} erzeugt: wert

\iifileexists fUhrt in Abhangigkeit von der Existenz einer Datei die im folgenden Token beginnende Aktion aus. Das Makro wird durch \ testf ileexistence initialisiert.

\testfileexistence definiert einen Dateinamen, der sich aus dem \jobname (V or­einstellung) und der im Argument iibergebenen Extension zusammensetzt. Urn die Exi­stenz einer . toc-Datei zu testen und sie - wenn vorhanden - einzuladen, wird folgender Code ausgefUhrt:

\testfileexistence{toc} \iffileexists\input \jobname.toc \fi

Die Flexibilitat dieser Abfrage laBt sich noch vergroBern, indem man auch den Basis­namen der Testdatei angibt. Dies ist moglich in Form eines optionalen Parameters des Befehls \ testfileexistence:

\testfileexistence [gind] {ist} \iffileexists\listing{gind.ist} \fi

Die Auswertung optionaler Befehlsparameter ist fUr Programmierer, die ePlain-TEX verwenden, einfach, wie das folgende Beispiel zeigt:

\def\@testfileexistence{\@getoptionalarg\@finishtestfileexistence}% \def\@finishtestfileexistence#l{%

}%

\begingroup \def\extension{#l}% \immediate\openinO =

\ifx\@optionalarg\empty\jobname\else\@optionalarg\fi \ifx\extension\empty \else .#l\fi \space

\ifeof 0 \global\@fileexistsfalse

\else \global\@fileexiststrue

\fi \immediate\closeinO

\endgroup

\let\testfileexistence = \@testfileexistence

\@getoptionalarg ist ein internes Makro zur Auswertung optionaler Befehlspara­meter.

Page 24: TEX Praxis || Erweiterungen von Plain-TEX

280 Kapitel 14. Erweiterungen von Plain-T E?<

Logos und andere Befehle Wird das Laden der texnames. tex-Definitionen ermoglicht (siehe Abschnitt 14.2),

konnen die folgenden Logos im Quelltext eingesetzt werden:

T}3X \TeX AMS-U\TPC \AMSLaTeX U\TPC \LaTeX AM5-T}3X \AMSTeX

METAFONT \MF b4MS-T}3X \LAMSTeX

\SliTeX \BibTeX

ePlain-T}3X stellt einfache Makros fUr den Flattersatz (siehe Abschnitt 6.6) bereit, sie sind als Altemativen der dort definierten \ragged ... -Makros anzusehen:

\center, \flushleft und \flushright werden innerhalb einer Gruppe angewen­del. Sie

wirken ab dem Befehl bis zum Ende der Gruppe auf aIle

eingeschlossenen

Absatze, wie dieses Beispiel zeigt:

Gruppe angewendet. {\rm Sie\center wirken ab dem Befehl bis zum Ende der Gruppe auf alle

eingeschlossenen

Abs\"atze,} wie dieses Beispiel zeigt:

\monthname erzeugt den auf drei Zeichen abgekiirzten Namen des aktuellen Monats; \fullmonthname liefert den ganzen (englischen) Namen; eine Redefinition der Makros ist einfach:

\def\monthname{% \if case \month

}%

\or Jan\or Feb\or Mar\or Apr\or May\or Jun% \or Jul\or Aug\or Sep\or Oct\or Nov\or Dec%

\fi

\ timestring expandiert zu der Tageszeit, zu der die T}3X-Dbersetzung gestartet wurde. \timestamp erganzt diese urn das aktuelle Datum, das mit \today auch einzeln darge­stellt werden kann.

\def\timestamp{\number\day\space\monthname\space \number\year\quad\timestring}%

\def\today{\the\day\ \fullmonthname\ \the\year}%

\numbername ist ein leicht an die Erfordemisse anpaBbares Makro, das Zahlen durch ihre Zahlworter darstelll. Werte, flir die keine Zahlworter definiert sind, werden als Zahlen dargestelll.

Page 25: TEX Praxis || Erweiterungen von Plain-TEX

\def\numbername#1{\ifcase#1%

}%

zero% \or one \or five \or nine \fi

\or two \or six \or ten

\or three \or seven \or #1%

14.5 Diverses 281

\or four% \or eight%


Recommended