Der LATEX-Begleiter
Zweite überarbeitete und erweiterte Auflage
Unser Online-Tipp für noch mehr Wissen …
... aktuelles Fachwissen rund um die Uhr – zum Probelesen, Downloaden oder auch auf Papier.
www.InformIT.de
Der LATEX-Begleiter Zweite überarbeitete und erweiterte Auflage
Frank Mittelbach LATEX3-Project, Mainz, Deutschland
Michel Goossens CERN, Genf, Schweiz
mit Johannes Braams, David Carlisle, und Chris Rowley und Beiträgen von Christine Detig und Joachim Schrod
ein Imprint von Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam
Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. Die Informationen in diesem Buch werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht ausgeschlossen werden. Verlag, Herausgeber, Übersetzer und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Autoren dankbar. Es konnten nicht alle Rechteinhaber von Abbildungen ermittelt werden. Sollte dem Verlag gegenüber der Nachweis der Rechtsinhaberschaft geführt werden, wird das branchenübliche Honorar nachträglich gezahlt. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Dies gilt nicht für die Beispiele in diesem Buch, die unter der LPPL (LaTEX Project Public License) stehen und die im Rahmen dieser Lizenz frei benutzbar sind (siehe www.latex-project.org/lppl/). Fast alle Produktbezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt. Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das ® Symbol in diesem Buch nicht verwendet. Umwelthinweis: Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt. Die Einschrumpffolie – zum Schutz vor Verschmutzung – ist aus umweltverträglichem und recyclingfähigem PE-Material. 10 9 8 7 6 5 4 3 2 09
08
07
ISBN 978-3-8273-7166-9 © 2005 Pearson Studium ein Imprint der Pearson Education Deutschland GmbH, Martin-Kollar-Straße 10-12, D-81829 München/Germany Alle Rechte vorbehalten
http://www.pearson-studium.de Übersetzung: Claudia Krysztofiak, http://www.krysztofiak.de Rebecca Stiels,
[email protected] Diplom-Übersetzerinnen Lektorat: Irmgard Wagner, Gräfelfing,
[email protected] Fachlektorat: Frank Mittelbach,
[email protected] Korrektorat: Claudia Krysztofiak, Rebecca Stiels, Hubert Gäßlein Einbandgestaltung: adesso 21, Thomas Arlt, München Herstellung: Philipp Burkart,
[email protected] Satz: Frank Mittelbach. Gesetzt aus der Lucida Bright 8.5/11.7 Pkt. Druck und Verarbeitung: Kösel, Krugzell, http://www.KoeselBuch.de Printed in Germany Korrigierter Nachdruck, Februar 2007
Dieses Buch ist Michael Downes (1958–2003) gewidmet, der uns ein guter Freund war, und ein wunderbarer Kollege im LaTEX-Team. Wir vermissen sein freundliches Wesen und seinen stillen Humor, die unser Leben und unsere Arbeit in vieler Hinsicht bereichert haben. Darüber hinaus hat seine Erfahrung, die er in die Unterstützung aller Aspekte des Setzens mathematischer Formeln einfließen ließ, das Leben zahlloser dankbarer (LA)TEX-Benutzer erleichtert. Sehr viele Meisterwerke der Setzkunst werden für immer an seine stillen, aber tiefen Einsichten erinnern.
Inhaltsverzeichnis
Abbildungsverzeichnis
xix
Tabellenverzeichnis
xxi
Vorwort zur deutschen Ausgabe
xxv
Vorwort zur englischen Originalausgabe Kapitel 1 1.1
xxvii
Einleitung
1
Ein kurzer Blick in die Vergangenheit . . . . . . . . . . . . . . . . . . . .
1.2
Das heutige System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Wie man dieses Buch verwendet . . . . . 1.3.1 Was steht wo? . . . . . . . . 1.3.2 Typographische Konventionen 1.3.3 Arbeiten mit den Beispielen .
Kapitel 2
. . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
. . . .
. . . . .
... . . . . . . . .
. . . . .
Die Struktur eines LATEX-Dokumentes
1 6 11 11 12 15 17
2.1
Der Aufbau der Quelldateien . . . . . . . . . . . . . . . 2.1.1 Verwenden von Paketen und Optionen . . 2.1.2 Aufteilen von Quelldateien . . . . . . . . 2.1.3 Kombinieren mehrerer Dateien . . . . . . 2.1.4 optional – Variationen über ein Dokument
... . . . . . . . .
. . . . .
. . . . .
17 19 21 22 23
2.2
Gliederungsbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Nummerieren von Überschriften . . . . . . . . . . . 2.2.2 Formatieren von Überschriften . . . . . . . . . . . . 2.2.3 Ändern von vorgegebenen Überschriften . . . . . . . 2.2.4 fncychap – Fertige Layouts für Kapitelüberschriften . 2.2.5 quotchap – Mottos für Kapitel . . . . . . . . . . . . 2.2.6 titlesec – Ein neuer Ansatz für Überschriften . . . . .
. . . . . . .
. . . . . . .
24 26 29 36 36 37 38
INHALTSVERZEICHNIS
2.3
Der Aufbau von Verzeichnissen. . . . . . . . . . . . . . . . . . . . . . 2.3.1 Eintragen von Daten in Verzeichnisdateien . . . . . . 2.3.2 Formatieren von Verzeichnissen . . . . . . . . . . . 2.3.3 Kombinieren von Verzeichnissen . . . . . . . . . . . 2.3.4 Erstellen weiterer Verzeichnisse . . . . . . . . . . . 2.3.5 shorttoc – Kompakte Inhaltsverzeichnisse . . . . . . 2.3.6 minitoc – Mehrfache Inhaltsverzeichnisse. . . . . . . 2.3.7 titletoc – Ein anderer Ansatz für Inhaltsverzeichnisse .
. . . . . . . .
. . . . . . . .
48 49 52 56 58 58 59 62
2.4
Verweise in Dokumenten . . . . . . . . . . . . . . . . . . . . . . 2.4.1 showkeys – Anzeigen der Querverweisschlüssel 2.4.2 varioref – Flexiblere Querverweise . . . . . . . 2.4.3 prettyref – Ausschmücken von Querverweisen . 2.4.4 titleref – Nicht numerische Verweise . . . . . . 2.4.5 hyperref – Dynamische Querverweise . . . . . . 2.4.6 xr – Verweise auf externe Dokumente . . . . .
... . . . . . . . . . . . .
. . . . . . .
. . . . . . .
69 71 72 79 80 82 82
3.1
Textfragmente und Absätze . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 xspace – Korrekte Leerräume nach Makros . . . . . . 3.1.2 ellipsis, lips – Auslassungspunkte . . . . . . . . . . 3.1.3 amsmath – Geschützte Bindestriche . . . . . . . . . 3.1.4 relsize – Relative Skalierung der Schriftgröße . . . . . 3.1.5 textcase – Intelligente Groß- und Kleinschreibung . . 3.1.6 ulem – Betonen durch Unterstreichen. . . . . . . . . 3.1.7 soul – Sperren oder Schafe stehlen . . . . . . . . . . 3.1.8 url – URLs, Pfadnamen und Ähnliches . . . . . . . . 3.1.9 euro – Konvertieren und Formatieren von Währungen 3.1.10 lettrine – Schmücken von Absätzen . . . . . . . . . . 3.1.11 Randausgleich in LATEX . . . . . . . . . . . . . . . . 3.1.12 ragged2e – Verbessern des Randausgleichs . . . . . 3.1.13 setspace – Ändern des Zeilenvorschubs . . . . . . . 3.1.14 picinpar – Rechteckige Löcher in Absätzen . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
86 86 87 89 90 92 93 94 99 103 106 108 112 114 115
3.2
Fußnoten, Endnoten und Marginalien . . . . . . . . . . . . . . . . . . 3.2.1 Verwenden von Standardfußnoten . . . . . . . . . . 3.2.2 Anpassen von Fußnoten . . . . . . . . . . . . . . . 3.2.3 ftnright – Rechte Fußnoten im Zweispaltensatz . . . . 3.2.4 footmisc – Verschiedene Fußnotenstile . . . . . . . . 3.2.5 perpage – Zurücksetzen des Zählers auf Seitenbasis . 3.2.6 manyfoot – Unabhängige Fußnoten . . . . . . . . . . 3.2.7 endnotes – Eine Alternative zu Fußnoten . . . . . . . 3.2.8 Marginalien . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
116 117 119 121 121 127 129 132 134
3.3
Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Ändern der Standardlisten . . . . . . . . 3.3.2 paralist – Erweiterte Listenumgebungen . 3.3.3 amsthm – Theoremähnliche Strukturen . . 3.3.4 Erstellen eigener Listen . . . . . . . . . .
. . . . .
. . . . .
135 135 139 146 152
3.4
Wortwörtlicher Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 3.4.1 Einfache Verbatim-Erweiterungen . . . . . . . . . . . . . 160 3.4.2 upquote – Anführungsstriche in Programmlistings . . . . 161
Kapitel 3
viii
. . . . . . .
Formatierungswerkzeuge
85
. . . . .
... . . . . . . . .
. . . . .
... . . . . . . . .
Inhaltsverzeichnis
3.4.3 3.4.4 3.5
fancyvrb – Anpassungsfähige Verbatim-Umgebungen . . 163 listings – Schön gesetzter Programmcode . . . . . . . . 177
Zeilen und Spalten . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 lineno – Nummerieren von Textzeilen . . . . . 3.5.2 parallel – Zwei synchronisierte Textstränge. . . 3.5.3 multicol – Setzen in mehreren Spalten . . . . . 3.5.4 changebar – Hinzufügen von Revisionsbalken .
Kapitel 4
. . . . .
... . . . . . . . .
. . . . .
. . . . .
Das Seitenlayout
185 185 190 193 198 201
4.1
Geometrische Dimensionen des Layouts. . . . . . . . . . . . . . . . . .
202
4.2
Verändern des Seitenlayouts. . . . . . . . . . . . . . . . . . . . 4.2.1 layouts – Darstellen des Layouts . . . . . . . . 4.2.2 Eine Sammlung von Paketen für Seitenlayouts . 4.2.3 typearea – Ein traditioneller Ansatz . . . . . . . 4.2.4 geometry – Layouts mit Auto-Vervollständigung 4.2.5 lscape – Setzen einzelner Seiten im Querformat 4.2.6 crop – Erzeugen von Beschnittmarken . . . . .
. . . . . . .
... . . . . . . . . . . . .
. . . . . . .
. . . . . . .
205 208 210 211 214 220 220
4.3
Dynamische Seitendaten: Seitenzahlen und Textmarken . . 4.3.1 Seitenzahlen in LATEX . . . . . . . . . . . . . . . 4.3.2 lastpage – Verweise auf die letzte Seite . . . . . . 4.3.3 chappg – Kapitelweise Nummerierung der Seiten . 4.3.4 Textmarkenbefehle . . . . . . . . . . . . . . . . 4.3.5 extramarks – Eine neue Art von Marken . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
223 223 224 225 226 228
4.4
Layouts 4.4.1 4.4.2 4.4.3
für Kolumnentitel . . . . . . . . . . . . . . . . . . . . . . . . . Die Low-Level-Schnittstelle . . . . . . . . . . . . . . fancyhdr – Anpassen von Kolumnentitel-Layouts . . . truncate – Texte auf eine bestimmte Länge kürzen . .
. . . .
. . . .
230 231 232 240
4.5
Visuelle Formatierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 4.5.1 nextpage – Erweiterungen für \clearpage . . . . . . . . 243
4.6
Layouts mit Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 4.6.1 KOMA - Script – Ein Ersatz für article et al. . . . . . . . . 244 4.6.2 memoir – Setzen komplexer Werke . . . . . . . . . . . . 245
Kapitel 5
Tabellen
247
5.1
LATEX-Standardumgebungen . . . . . . . . . . . . . . . . . . . . . . . . . . 248 5.1.1 Die tabbing-Umgebung . . . . . . . . . . . . . . . . . 249 5.1.2 Die tabular-Umgebung . . . . . . . . . . . . . . . . . 250
5.2
array – Erweiterung von tabular & Co. . . . . . . . . . . . . . . . . . . 252 5.2.1 Einige Beispiele für Präambelbefehle . . . . . . . . . . . 252 5.2.2 Definieren neuer Spaltenformatkürzel . . . . . . . . . . 256
5.3
Errechnen von Spaltenbreiten . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Explizites Berechnen der Spaltenbreiten . . . . . . . 5.3.2 tabularx – Spaltenbreiten automatisch berechnen . . 5.3.3 tabulary – Am Inhalt orientierte Spaltenbreiten . . . . 5.3.4 tabular* , tabularx und tabulary – Ein Vergleich .
5.4
Mehrseitige Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 5.4.1 supertabular – Erstellen mehrseitiger Tabellen . . . . . . 264 5.4.2 longtable – Alternative mehrseitige Tabellen . . . . . . . 267
. . . . .
. . . . .
257 258 259 261 263
ix
INHALTSVERZEICHNIS
5.5
Farbige Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
272
5.6
Anpassen von Linien und Abständen . . . . . . . . . . . . . . . . . . . 5.6.1 Farbige Tabellenlinien . . . . . . . . . . . . . . . . . 5.6.2 Linien variabler Stärke . . . . . . . . . . . . . . . . . 5.6.3 hhline – Kombinieren horizontaler und vertikaler Linien 5.6.4 arydshln – Gestrichelte Linien . . . . . . . . . . . . . 5.6.5 tabls – Einstellen von Zeilenabständen . . . . . . . . . 5.6.6 booktabs – Formale Linien in Tabellen . . . . . . . . .
273 273 274 274 275 277 277
5.7
Sonstige Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 5.7.1 multirow – Vertikale Ausrichtung in Tabellen . . . . . . . 281 5.7.2 dcolumn – Ausrichtung am Dezimalpunkt . . . . . . . . 282
5.8
Tabellenfußnoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 5.8.1 minipage-Fußnoten in Tabellen . . . . . . . . . . . . . 285 5.8.2 threeparttable – Tabellen und Fußnoten vereint . . . . . 285
5.9
Verwendungsmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 287 5.9.1 Tabellen mit breiten Einträgen . . . . . . . . . . . . . . 287 5.9.2 Tabellen in Tabellen . . . . . . . . . . . . . . . . . . . 288
Kapitel 6
Gleitobjekte
291
6.1
Parameter für Gleitobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . .
292
6.2
Positionieren von Gleitobjekten. . . . . . . . . . . . . . . . . . 6.2.1 placeins – Gleitobjekte in Schranken . . . . . . 6.2.2 afterpage – Kontrolle am Seitenende . . . . . . 6.2.3 endfloat – Gleitobjekte am Ende positionieren .
... . . . . . .
. . . .
. . . .
295 297 297 298
6.3
Erweiterungen für LATEXs Gleitobjektkonzept . . . . . . . . . . . . . 6.3.1 float – Erstellen eigener Gleitobjektumgebungen . . . 6.3.2 caption – Nicht gleitende Abbildungen und Tabellen . 6.3.3 rotating – Drehen von Gleitobjekten . . . . . . . . . 6.3.4 rotfloat – float und rotating kombinieren . . . . . . .
. . . . .
. . . . .
300 300 304 305 306
6.4
Im Fließtext eingebettete Gleitobjekte . . . . . . . . . . . . . . . . . . . 307 6.4.1 wrapfig – Text um ein Bild fließen lassen . . . . . . . . . 308 6.4.2 picins – Bilder im Fließtext positionieren . . . . . . . . . 311
6.5
Gleitobjektlegenden . . . . . . . . . . . . . . . . . . . . . . 6.5.1 caption – Anpassen von Legenden . . . . . 6.5.2 subfig – Gleitobjekte weiter strukturieren . 6.5.3 subfloat – Serien von Gleitobjekten . . . . . 6.5.4 sidecap – Legenden seitlich setzen . . . . . 6.5.5 fltpage – Legenden auf einer eigenen Seite .
Kapitel 7
x
. . . . . . .
Zeichensätze und Kodierungen
... . . . . . . . . . .
. . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
315 317 325 331 333 335 337
7.1
Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 7.1.1 Die Geschichte des LATEX-Fontauswahlverfahrens (New Font Selection Scheme – NFSS) . . . . . . . . . . . 338 7.1.2 Eingabe- und Ausgabekodierungen . . . . . . . . . . . . 339
7.2
Fontcharakteristika – Zeichensatzmerkmale . . . . . . . . . . . . . . . 342 7.2.1 Dicktengleiche und Proportionalschriften. . . . . . . . . 342 7.2.2 Schriften mit und ohne Serifen . . . . . . . . . . . . . . 343
Inhaltsverzeichnis
7.2.3 7.2.4
Schriftfamilien und ihre Attribute . . . . . . . . . . . . . 343 Fontkodierungen . . . . . . . . . . . . . . . . . . . . . 347
7.3
Zeichensätze im Text . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Standardfontbefehle in LATEX . . . . . . . . . . 7.3.2 Kombinieren von Standardfontbefehlen . . . . 7.3.3 Fontbefehle und Deklarationen im Vergleich . . 7.3.4 Zugriff auf alle Zeichen eines Fonts. . . . . . . 7.3.5 Ändern der voreingestellten Textfonts . . . . . 7.3.6 LATEX 2.09-Fontbefehle . . . . . . . . . . . . .
. . . . . . .
... . . . . . . . . . . . .
. . . . . . .
. . . . . . .
348 349 354 355 356 357 358
7.4
Fonts in mathematischen Formeln . . . . . . . . . . . . 7.4.1 Besondere Alphabetbefehle für Formeln . 7.4.2 Textfontbefehle in Formeln . . . . . . . . 7.4.3 Formellayouts . . . . . . . . . . . . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
. . . .
359 360 363 363
7.5
Die Standardfontunterstützung in LATEX . . . . . . . . . . . . 7.5.1 Computer Modern – Die LATEX-Standardfonts . . 7.5.2 inputenc – Auswählen der Eingabekodierung . . 7.5.3 fontenc – Auswählen von Fontkodierungen . . . 7.5.4 textcomp – Zusätzliche Textsymbole . . . . . . 7.5.5 exscale – Skalieren großer Operatoren . . . . . 7.5.6 tracefnt – Überwachen der Fontauswahl . . . . 7.5.7 nfssfont.tex – Anzeigen von Glyphentabellen. .
. . . . . . . .
... . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
364 365 369 372 373 379 379 380
7.6
PSNFSS 7.6.1 7.6.2 7.6.3 7.6.4
. . . . .
... . . . . . . . .
. . . . .
. . . . .
381 385 387 389 390
7.7
Eine Sammlung von Fontpaketen. . . . . . . . . . . . . . . . . . . . . 7.7.1 eco – Mediävalziffern in Computer Modern . . . . . . 7.7.2 ccfonts, concmath – Die Concrete Fonts . . . . . . . 7.7.3 cmbright – Die Computer Modern Bright Fonts . . . . 7.7.4 luximono – Ein vielseitiger Schreibmaschinenfont . . 7.7.5 txfonts – Alternative Unterstützung für Times Roman 7.7.6 pxfonts – Alternative Unterstützung für Palatino . . . 7.7.7 Die Fourier-GUTenberg Fonts . . . . . . . . . . . . . 7.7.8 Die URW Antiqua und Grotesk Fonts . . . . . . . . . 7.7.9 yfonts – Altdeutsche Schriften . . . . . . . . . . . . 7.7.10 euler, eulervm – Zugriff auf die Euler Fonts . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
393 394 395 396 398 399 401 402 404 405 407
7.8
Die LATEX-Welt der Symbole . . . . . . . . . . . . . . . . . . . . . . . . . 7.8.1 dingbat – Eine Auswahl von Händen . . . . . . . . . 7.8.2 wasysym – Waldis Symbolfont . . . . . . . . . . . . 7.8.3 marvosym – Die Schnittstelle zum MarVoSym Font . . 7.8.4 bbding – METAFONT-Alternative zu Zapf Dingbats . 7.8.5 ifsym – Uhren, Wolken, Berge und andere Symbole . . 7.8.6 tipa – Symbole für das Internationale Phonetische Alphabet . . . . . . . . . . . . . . . . . . . . . . . 7.8.7 Das Euro-Zeichen (€) . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
411 411 411 412 414 414
. . . .
– PostScript Fonts in LATEX . . . . . . . . . . . . . . . . Schriftproben von PSNFSS-unterstützten Fonts . mathptmx – Times Roman in Formeln und Text mathpazo – Palatino in Formeln und Text . . . pifont – Zugriff auf Pi- und Symbolfonts . . . .
. . 416 . . 418
xi
INHALTSVERZEICHNIS
7.9
Die Low-Level-Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . 7.9.1 Setzen einzelner Zeichensatzattribute . . . . . . . . 7.9.2 Setzen mehrerer Zeichensatzattribute . . . . . . . . 7.9.3 Automatische Fontersetzung . . . . . . . . . . . . . 7.9.4 Verwendung von Low-Level-Befehlen im Dokument . .
. . . . .
. . . . .
423 424 428 429 430
7.10 Einbinden neuer Zeichensätze . . . . . . . . . . . . . . . . . . . . . . 7.10.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . 7.10.2 Wie man Tausende von Fonts benennt . . . . . . . . 7.10.3 Deklarieren neuer Schriftfamilien und Gruppen von Schriftformen . . . . . . . . . . . . . . . . . . . . . 7.10.4 Verändern von Schriftfamilien und Schriftschnitten . . 7.10.5 Einbindung neuer Kodierschemata . . . . . . . . . . 7.10.6 Interne Dateistruktur . . . . . . . . . . . . . . . . . 7.10.7 Deklarieren neuer Fonts für Formeln . . . . . . . . . 7.10.8 Beispiel: Definieren eigener .fd-Dateien . . . . . . . 7.10.9 Die Reihenfolge der Deklarationen . . . . . . . . . .
. . . . . . .
. . . . . . .
432 441 442 443 444 449 451
7.11 Kodierungsmodelle in LATEX . . . . . . . . . . . . . . . . . 7.11.1 Zeichendaten im LATEX-System . . . . . . . 7.11.2 Die LATEX-interne Zeichendarstellung (LICR) . 7.11.3 Eingabekodierungen . . . . . . . . . . . . 7.11.4 Fontkodierungen . . . . . . . . . . . . . .
. . . . .
. . . . .
452 453 454 456 460
... . . . . . . . .
. . . . .
... . . . . . . . .
. . 430 . . 430 . . 431
7.12 Dokumente aus dem letzten Jahrtausend . . . . . . . . . . . . . . . . . 475 7.12.1 oldlfont, rawfonts, newlfont – Kompatibilitätspakete . . . 475 7.12.2 latexsym – Zugriff auf LATEX 2.09 Lasy Fonts . . . . . . . 476 Kapitel 8 8.1 8.2
8.3
xii
Höhere Mathematik
477
Eine Einführung in AMS-LATEX . . . . . . . . . . . . . . . . . . . . . . . Umgebungen für abgesetzte Formeln . . . . . . . . . . . . . . . . . 8.2.1 Ein Vergleich mit Standard-LATEX . . . . . . . . . . . 8.2.2 Eine Formel in einer Zeile . . . . . . . . . . . . . . . 8.2.3 Eine Formel in mehreren Zeilen: ohne Ausrichtung . . 8.2.4 Eine Formel in mehreren Zeilen: mit Ausrichtung . . . 8.2.5 Formelgruppen ohne Ausrichtung . . . . . . . . . . 8.2.6 Formelgruppen mit einfacher Ausrichtung . . . . . . 8.2.7 Mehrfache Ausrichtung: align und flalign . . . . 8.2.8 Formelumgebungen, die Miniseiten erzeugen . . . . 8.2.9 Unterbrechen abgesetzter Formeln: \intertext. . . 8.2.10 Vertikale Abstände und Seitenumbrüche in und um abgesetzte Formeln . . . . . . . . . . . . . . . . . 8.2.11 Formelnummern und Tags . . . . . . . . . . . . . . 8.2.12 Feinpositionierung von Tags . . . . . . . . . . . . . 8.2.13 Untersequenzen in der Nummerierung . . . . . . . . 8.2.14 Zurücksetzen des Formelzählers . . . . . . . . . . .
..
478
. . . . . . . . . .
. . . . . . . . . .
481 482 483 483 485 487 487 487 489 491
. . . . .
. . . . .
491 494 495 497 497
Matrixähnliche Umgebungen . . . . . . . . . . . . 8.3.1 Die cases-Umgebung . . . . . . . . 8.3.2 Die Matrixumgebungen. . . . . . . . 8.3.3 Mehrzeilige Tief- und Hochstellungen 8.3.4 Kommutative Diagramme. . . . . . .
. . . . .
. . . . .
498 498 498 500 500
... . . . . . . . .
. . . . .
... . . . . . . . .
. . . . .
... . . . . . . . .
Inhaltsverzeichnis
8.3.5
delarray – Begrenzungszeichen für Arrays . . . . . . . . 502
8.4
Komplexere Gebilde und Beschriftungen . . . . . . . . . . . 8.4.1 Beschriftete Pfeile . . . . . . . . . . . . . . . 8.4.2 Kettenbrüche . . . . . . . . . . . . . . . . . . 8.4.3 Eingerahmte Formeln . . . . . . . . . . . . . . 8.4.4 Grenzpositionen . . . . . . . . . . . . . . . . 8.4.5 Mehrfachintegrale . . . . . . . . . . . . . . . 8.4.6 Modulo-Operationen . . . . . . . . . . . . . . 8.4.7 Brüche und ähnliche Gebilde . . . . . . . . . . 8.4.8 Punkte als Akzente . . . . . . . . . . . . . . . 8.4.9 amsxtra – Akzente als hochgestellte Zeichen . . 8.4.10 Zusätzliche Beschriftungen . . . . . . . . . . .
. . . . . . . . . . .
... . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
502 502 503 503 503 504 505 505 507 507 507
8.5
Symbole mit variablen Formen . . . . . . 8.5.1 Auslassungspunkte . . . . . . . 8.5.2 Horizontale Erweiterungen . . 8.5.3 Vertikale Erweiterungen . . .
. . . .
... . . . . . .
. . . .
. . . .
508 508 509 510
8.6
Text in Formeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 8.6.1 Der \text-Befehl . . . . . . . . . . . . . . . . . . . . . 512 8.6.2 Operator- und Funktionsnamen. . . . . . . . . . . . . . 512
8.7
Feinabstimmung des Formellayouts. . . . . . . . . . . 8.7.1 Automatische Skalierung und Abstände . 8.7.2 Unterformeln . . . . . . . . . . . . . . . 8.7.3 Big-g (große) Begrenzungssymbole . . . . 8.7.4 Verschieben von Wurzelexponenten . . . 8.7.5 Ghostbusters™: Gestauchte Phantome . . 8.7.6 Horizontale Abstände. . . . . . . . . . .
. . . . . . .
... . . . . . . . . . . . .
. . . . . . .
. . . . . . .
514 515 516 517 517 518 521
8.8
Fonts in Formeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.8.1 Zusätzliche Mathematikfont-Befehle . . . . . . . 8.8.2 bm – Fette Zeichen . . . . . . . . . . . . . . . . 8.8.3 Verschiedene Einstellungen für Mathematikfonts .
... . . . . . .
. . . .
. . . .
522 523 524 528
8.9
Symbole in Formeln . . . . . . . . . . . . . . . . . . . . . . . . . . 8.9.1 Mathematik-Symbolklassen . . . . . . . . . . . . 8.9.2 Buchstaben, Ziffern und andere reguläre Zeichen. 8.9.3 Mathematische Akzente . . . . . . . . . . . . . 8.9.4 Binäre Operatorzeichen. . . . . . . . . . . . . . 8.9.5 Relationssymbole . . . . . . . . . . . . . . . . . 8.9.6 Interpunktion . . . . . . . . . . . . . . . . . . . 8.9.7 Operatorzeichen . . . . . . . . . . . . . . . . . 8.9.8 Öffnende und schließende Zeichen . . . . . . . .
... . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
540 540 542 545 547 547 552 553 553
... . . . . . .
. . . .
. . . .
Kapitel 9
. . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
. . . . . . .
... . . . . . .
... . . . . . . . . . . . .
LATEX in einem mehrsprachigen Umfeld nicht englische Sprachen . . . . . . . . . . . . . . . . Sprachspezifische Aspekte der Formatierung . . Kulturspezifische Aspekte der Formatierung . . Babel – LATEX spricht mehrere Sprachen . . . . .
555
9.1
TEX und 9.1.1 9.1.2 9.1.3
. . . .
555 557 558 558
9.2
Die babel-Benutzerschnittstelle . . . . . . . . . . . . . . . . . . . . . . . . 560 9.2.1 Einstellen oder Abfragen der aktuellen Sprache. . . . . . 560
xiii
INHALTSVERZEICHNIS
9.2.2 9.2.3
Vom Umgang mit Kurzformen . . . . . . . . . . . . . . 563 Sprachattribute . . . . . . . . . . . . . . . . . . . . . . 565
9.3
Sprachspezifische Benutzerbefehle . . . . . . . . 9.3.1 Übersetzungen . . . . . . . . . . . . 9.3.2 Verfügbare Kurzformen . . . . . . . 9.3.3 Sprachspezifische Befehle . . . . . . 9.3.4 Erwägungen zum Layout . . . . . . . 9.3.5 Sprachoptionen und Fontkodierungen
... . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
566 566 568 574 580 582
9.4
Unterstützung nicht lateinischer Alphabete. . 9.4.1 Das kyrillische Alphabet . . . . . . 9.4.2 Das griechische Alphabet . . . . . . 9.4.3 Das hebräische Alphabet . . . . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
. . . .
585 585 590 591
9.5
Anpassen des babel-Systems . . . . . . . . . . . . . . . . . . . 9.5.1 Silbentrennung für verschiedene Sprachen . . . 9.5.2 Die Paketdatei . . . . . . . . . . . . . . . . . 9.5.3 Der Aufbau der babel-Sprachdefinitionsdatei . .
. . . .
... . . . . . .
. . . .
. . . .
596 596 598 598
9.6
Andere Ansätze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 9.6.1 Komplexere Sprachen . . . . . . . . . . . . . . . . . . 608 9.6.2 Omega . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Kapitel 10
. . . .
Graphikgenerierung und -bearbeitung
611
10.1 Portable Graphiken und Zierrahmen . . . . . . . . . . . 10.1.1 boxedminipage – Gerahmte Boxen . . . . . 10.1.2 shadow – Schattierte Boxen. . . . . . . . . 10.1.3 fancybox – Zierrahmen . . . . . . . . . . . 10.1.4 epic – Eine erweiterte picture-Umgebung . 10.1.5 eepic – Erweiterung des epic-Paketes . . . . 10.1.6 Sprachen für besondere Zwecke . . . . . .
xiv
... . . . . . . . . . . . .
. . . . . . .
. . . . . . .
613 613 613 614 619 625 629
10.2 Geräteabhängige Graphikunterstützung . . . . . . . . . . . . . . . . 10.2.1 Optionen für graphics und graphicx . . . . . . . . . 10.2.2 Die \includegraphics-Syntax im graphics-Paket . . 10.2.3 Die \includegraphics-Syntax im graphicx-Paket . . 10.2.4 Ändern der Voreinstellungen des graphicx-Paketes. . 10.2.5 Deklarationen zum Einbinden von Bildern . . . . . . 10.2.6 Eine Vorsichtsmaßnahme: Kapselung ist wichtig . . .
. . . . . . .
. . . . . . .
631 632 634 636 641 642 645
10.3 Manipulieren von graphischen Objekten . . . . 10.3.1 Skalieren einer LATEX-Box . . . . . . 10.3.2 Skalieren auf eine bestimmte Größe 10.3.3 Drehen einer LATEX-Box . . . . . . . 10.3.4 Wiedersehen mit dem rotating-Paket
... . . . . . . . .
. . . . .
. . . . .
646 646 647 648 651
10.4 Seitenbeschreibungssprachen – PostScript, PDF und SVG . . . . 10.4.1 Die PostScript-Sprache . . . . . . . . . . . . . . . . 10.4.2 Der PostScript-Treiber dvips . . . . . . . . . . . . . 10.4.3 pspicture – Erweiterte picture-Umgebung für dvips . 10.4.4 Das Portable Document Format. . . . . . . . . . . . 10.4.5 Skalierbare Vektorgraphiken . . . . . . . . . . . . .
. . . . . .
. . . . . .
652 653 655 657 660 662
. . . . .
... . . . . . . . .
. . . . .
... . . . . . . . . . . . .
... . . . . . . . .
. . . . . . .
. . . . .
Inhaltsverzeichnis
Kapitel 11
Indexerstellung
11.1 Syntax der Indexeinträge . . . . . . . . . . . . . . 11.1.1 Einfache Indexeinträge . . . . . . . 11.1.2 Erstellen von Untereinträgen . . . . 11.1.3 Seitenbereiche und Querverweise. . 11.1.4 Steuern der Darstellungsform . . . 11.1.5 Ausgeben von Sonderzeichen . . . 11.1.6 Erstellen eines Glossars. . . . . . . 11.1.7 Definieren eigener Indexbefehle . . 11.1.8 Besondere Erwägungen . . . . . . .
667 . . . . . . . . .
... . . . . . . . . . . . . . . . .
. . . . . . . . .
... . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
669 670 671 671 672 673 673 673 674
11.2 makeindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.1 Erstellen eines formatierten Index . . . . . . . 11.2.2 Einzelne Optionen des MakeIndex-Programms . 11.2.3 Fehlermeldungen . . . . . . . . . . . . . . . . 11.2.4 Anpassen des Index mit MakeIndex . . . . . . 11.2.5 MakeIndex-Fallstricke. . . . . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
675 675 678 679 681 687
11.3 xindy – 11.3.1 11.3.2 11.3.3 11.3.4
... . . . . . . . .
. . . . .
... . . . . . . . .
. . . . .
. . . . .
688 690 691 693 695
. . . . . . . . .
... . . . . . .
. . . .
... . . . . . .
. . . .
. . . .
702 702 703 704
12.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1 Verweisschemata für Bibliographien . . . . . . 12.1.2 Markup für Quellenverweise und Bibliographie . 12.1.3 Erzeugen bibliographischer Daten mit BIBTEX . .
. . . .
... . . . . . .
. . . .
. . . .
707 708 710 711
12.2 Das numerische Schema . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.1 Standard-LATEX – Numerische Verweise . . . . . . . . 12.2.2 cite – Bessere numerische Verweise . . . . . . . . . 12.2.3 notoccite – Unsortierte Quellenverweise, aber richtig .
. . . .
. . . .
715 715 718 722
12.3 Das Autor-Jahr-Schema . . . . . . . . . . . . . . . . . . . . . . . 12.3.1 Frühe Versuche . . . . . . . . . . . . . . . . . 12.3.2 natbib – Anpassungsfähige Autor-Jahr-Verweise 12.3.3 bibentry – Bibliographieeinträge im Fließtext . .
. . . .
. . . .
722 724 725 736
Eine Alternative zu MakeIndex . . . . . . . . . . Erzeugen des formatierten Index mit xindy. Internationale Indexierung mit xindy . . . . Module für alltägliche Aufgaben . . . . . . Stildateien für individuelle Lösungen . . . .
11.4 Beeinflussung des Index mit LATEX-Funktionen . 11.4.1 Ändern des Layouts . . . . . . . . . 11.4.2 Kleine Helfer . . . . . . . . . . . . . 11.4.3 index – Erzeugen mehrerer Indexe . . Kapitel 12
... . . . . . . . . . . . . . . . .
... . . . . . .
. . . .
Quellenverweise
707
. . . .
... . . . . . .
12.4 Das Autor-Nummer-Schema . . . . . . . . . . . . . . . . . . . . . . . . . . 737 12.4.1 Wiedersehen mit dem natbib-Paket . . . . . . . . . . . . 737 12.5 Das Kurztitelschema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741 12.5.1 jurabib – Anpassungsfähige Kurztitelverweise . . . . . . 741 12.5.2 camel – Unterstützung für Gesetzestexte . . . . . . . . . 769 12.6 Mehrere Bibliographien in einem Dokument . . . . . . . . . . . . . . . 771 12.6.1 chapterbib – Eine Bibliographie je \include-Datei . . . . 773 12.6.2 bibunits – Bibliographien für beliebige Einheiten . . . . . 776
xv
INHALTSVERZEICHNIS
12.6.3 12.6.4 Kapitel 13
bibtopic – Nach Themen sortierte Literaturhinweise . . . 779 multibib – Separate globale Bibliographien . . . . . . . . 782 Erzeugen von Literaturverzeichnissen
785
13.1 Das BIBTEX-Programm und seine Varianten. . . . . . . . . . . . . . . . . 786 13.1.1 bibtex8 – Eine 8-Bit-Implementierung von BIBTEX . . . . . 787 13.1.2 Neuere Entwicklungen . . . . . . . . . . . . . . . . . . 788 13.2 Das BIBTEX-Datenbankformat . . . . . . . . . . . . 13.2.1 Publikationstypen und Felder . . . . 13.2.2 Der Textteil der Felder . . . . . . . 13.2.3 Kurzformen in BIBTEX . . . . . . . . 13.2.4 Die BIBTEX-Präambel . . . . . . . . . 13.2.5 Querverweise zwischen Einträgen .
. . . . . .
... . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
789 790 794 798 800 801
13.3 Online-Bibliographien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
802
13.4 Werkzeuge für Bibliographiedatenbanken . . . . . . . . . . . . . . . 13.4.1 biblist – BIBTEX-Datenbankdateien drucken . . . . . . 13.4.2 bibtools – Ein Werkzeugset . . . . . . . . . . . . . 13.4.3 bibclean usw. – Noch ein Werkzeugset . . . . . . . 13.4.4 bibtool – Ein Multifunktionswerkzeug . . . . . . . . 13.4.5 pybliographer – Eine erweiterbare Bibliographieverwaltung . . . . . . . . . . . . . . . 13.4.6 JBibtexManager – Datenbankverwaltung in Java. . . . 13.4.7 BibTexMng – Ein Datenbankmanager für Windows . .
803 803 804 806 808
. . . . .
. . . . .
. . 813 . . 817 . . 819
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen . . . . . . . . . . . . 820 13.5.1 Eine Sammlung von BIBTEX-Stildateien . . . . . . . . . . . 820 13.5.2 custom-bib – BIBTEX-Stile leicht gemacht . . . . . . . . . 828 13.6 Die BIBTEX-Programmiersprache . . . . . . . . . . . . . . . . . . . 13.6.1 BIBTEX-Befehle und systemimmanente Funktionen. 13.6.2 Der Dokumentationsstil btxbst.doc . . . . . . . 13.6.3 Kleine Änderungen an Stildateien. . . . . . . . . Kapitel 14
... . . . . . .
. . . .
. . . .
Dokumentieren eigener LATEX-Pakete
835 836 837 840 845
14.1 doc – Dokumentieren von Programmcode. . . . . . . . . . . 14.1.1 Allgemeine Konventionen für Quelldateien . . . 14.1.2 Beschreibung neuer Makros und Umgebungen . 14.1.3 Indexieren aller verwendeten Makros . . . . . . 14.1.4 Der Dokumentationstreiber. . . . . . . . . . . 14.1.5 Bedingter Code in der Quelldatei . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
845 846 847 849 850 851
14.2 docstrip.tex – Lauffähigen Code erzeugen . . . . . . . . . . 14.2.1 Aufrufen des docstrip-Programms . . . . . . . 14.2.2 docstrip-Skriptbefehle . . . . . . . . . . . . . 14.2.3 Installationsunterstützung und Konfiguration . 14.2.4 Verwendung mit anderen Programmiersprachen
. . . . .
... . . . . . . . .
. . . . .
. . . . .
857 858 858 863 866
14.3 ltxdoc – Eine einfache Dokumentationsklasse . . . . . . . . . . . . . . 867 14.3.1 Von ltxdoc bereitgestellte Erweiterungen . . . . . . . . . 867 14.3.2 Konfiguration der ltxdoc-Ausgabe . . . . . . . . . . . . 868
xvi
Inhaltsverzeichnis
14.4 Werkzeuge für die Versionsverwaltung. . . . . . . . . . . . . . . . . . . 869 14.4.1 rcs – Zugriff auf einzelne Schlüsselwörter . . . . . . . . 870 14.4.2 rcsinfo – Parsen des Schlüsselwortes $Id$ . . . . . . . . 872 Anhang A
Präambeln, Pakete und Klassen – Ein Überblick
873
A.1
Verknüpfen von Markup und Formatierung . . . . . . . . . . A.1.1 Befehls- und Umgebungsnamen . . . . . . . . A.1.2 Definieren neuer Befehle . . . . . . . . . . . . A.1.3 Definieren neuer Umgebungen . . . . . . . . . A.1.4 Definieren und Ändern von Zählern. . . . . . . A.1.5 Definieren und Ändern von Längenparametern .
. . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
873 874 875 880 883 887
A.2
Seiten-Markup – Boxen und Linien . A.2.1 LR-Boxen . . . . . . . . . A.2.2 Absatzboxen . . . . . . . A.2.3 Linienboxen . . . . . . . A.2.4 Arbeiten mit Boxregistern A.2.5 Boxbefehle und Farben . .
. . . . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
893 893 896 899 901 903
A.3
Erweiterte Steuerfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . 904 A.3.1 calc – Arithmetische Funktionen . . . . . . . . . . . . . 904 A.3.2 ifthen – Verbesserte Steuerfunktionen . . . . . . . . . . 905
A.4
Aufbau A.4.1 A.4.2 A.4.3 A.4.4 A.4.5 A.4.6 A.4.7 A.4.8 A.4.9
Anhang B
... . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
. . . . . .
... . . . . . . . . . .
von Paket- und Klassendateien . . . . . . . . . . . . . Die Kenndaten . . . . . . . . . . . . . . . . . Der Initialisierungsteil . . . . . . . . . . . . . Deklarieren von Optionen . . . . . . . . . . . Ausführen von Optionen . . . . . . . . . . . . Laden von Paketen . . . . . . . . . . . . . . . Der Hauptteil . . . . . . . . . . . . . . . . . . Sonderbefehle für Paket- und Klassendateien . . Sonderbefehle Klassendateien . . . . . . . . . Eine minimalistische Klassendatei . . . . . . .
. . . . . . . . . .
... . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
Finden und Lösen von Problemen
910 910 913 913 914 916 916 917 919 922 923
B.1
Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924 B.1.1 Tod durch zu wenig Speicher . . . . . . . . . . . . . . . 956
B.2
Warnungen und informelle Meldungen . . . . . . . . . . . . . . . . . . .
961
B.3
TEX und B.3.1 B.3.2 B.3.3 B.3.4 B.3.5
977 977 980 985 989 992
Anhang C
LATEX-Tracingbefehle . . . . . . . . . . . . . . . . . . . . Befehlsdefinitionen und Registerwerte anzeigen . Diagnose bei problematischen Seitenumbrüchen . Diagnose und Lösung von Absatzproblemen . . . Weitere Low-Level-Überwachungsfunktionen . . . trace – Selektives Überwachen von Befehlen . . .
... . . . . . . . . . .
. . . . . .
. . . . . .
LATEX-Software und Usergroups
995
C.1
Wie erhält man Hilfe?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
995
C.2
Wo bekommt man diese TEX-Dateien? . . . . . . . . . . . . . Wie verwendet man CTAN? . . . . . . . . . . . . . . . . . . . . . C.3.1 Verwenden des TEX-Dateikatalogs . . . . . . . C.3.2 Suchen und Herunterladen von Archivdateien .
996
C.3
......
. . . . . . 998 . . . . . 998 . . . . . 998
xvii
INHALTSVERZEICHNIS
C.3.3
Dateien über die Kommandozeile herunterladen . . . . . 1000
C.4
Dokumentation auf dem eigenen System . . . . . . . . . . . . . . . . . 1002 C.4.1 texdoc – Kommandozeilesuche nach Namen . . . . . . . 1002 C.4.2 texdoctk – Themensuche mit graphischer Oberfläche . . 1003
C.5
TEX-Usergroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
Anhang D
LB2 TEX-CD 1007 Der Ursprung – Das TEX-Live-System . . . . . . . . . . . . . . . . . . . . 1007 LATEX von der CD-ROM installieren . . . . . . . . . . . . . . . . . . . . . . 1008 LATEX direkt von der CD-ROM ausführen . . . . . . . . . . . . . . . . . . 1008 Die Beispiele zum LATEX-Begleiter . . . . . . . . . . . . . . . . . . . . . . . 1008 Lizenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
xviii
Literaturverzeichnis
1011
Befehls- und Begriffsindex
1033
Personenverzeichnis
1126
Biographien
1129
Entstehungsgeschichte
1135
Abbildungsverzeichnis
1.1
Datenfluss im LaTEX-System . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.1 2.2 2.3
Layout einer abgesetzten Überschrift . . . . . . . . . . . . . . . . . . . . Layout einer eingebetteten Überschrift . . . . . . . . . . . . . . . . . . . Layoutparameter für Inhaltsverzeichnisse. . . . . . . . . . . . . . . . .
30 31 54
3.1 3.2 3.3
Schematische Darstellung einer Fußnote. . . . . . . . . . . . . . . . . . Platzieren von Text und Fußnoten mit dem Paket ftnright . . . . . . Parameter der list-Umgebung . . . . . . . . . . . . . . . . . . . . . . . .
120 122 153
4.1 4.2
Seitenlayoutparameter und ihre Darstellung . . . . . . . . . . . . . . . Arbeitsweise des Textmarkenmechanismus von LaTEX . . . . . . . . .
203 227
6.1
Layout der Abstände des subfig-Paketes . . . . . . . . . . . . . . . . . .
327
7.1 7.2 7.3 7.4 7.5 7.6
Wichtige Fontcharakteristika. . . . . . . . . . . . . . . . . . . Buchstaben mit und ohne Serifen im Vergleich . . . . . . Aufrechte und kursive Zeichen im Vergleich . . . . . . . . Echte und falsche Kapitälchen im Vergleich . . . . . . . . Outline- und schattierte Schriftformen . . . . . . . . . . . . Skalierte und entworfene Schriften (Computer Modern)
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
342 343 344 345 345 347
8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8
In Computer Modern gesetzte Beispielseite . . . . . . Quelltext für die Beispielseiten . . . . . . . . . . . . . . In Concrete Fonts gesetzte Beispielseite . . . . . . . . In Concrete und Euler gesetzte Beispielseite . . . . . In Fourier gesetzte Beispielseite . . . . . . . . . . . . . In Times und Symbol gesetzte Beispielseite. . . . . . In Times und TX Fonts gesetzte Beispielseite. . . . . In Times und TM Math Fonts gesetzte Beispielseite
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
528 529 530 530 531 532 532 533
. . . . . . . .
. . . . . . . .
. . . . . . . .
ABBILDUNGSVERZEICHNIS
8.9 8.10 8.11 8.12 8.13 8.14 8.15 8.16 8.17
In In In In In In In In In
Palatino und Math Pazo gesetzte Beispielseite Palatino und PX Fonts gesetzte Beispielseite . Palatino und PA Math gesetzte Beispielseite. . Baskerville gesetzte Beispielseite . . . . . . . . . Charter gesetzte Beispielseite . . . . . . . . . . . Lucida Bright gesetzte Beispielseite . . . . . . . CM Bright gesetzte Beispielseite. . . . . . . . . . Helvetica Math gesetzte Beispielseite . . . . . . Informal Math gesetzte Beispielseite. . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
534 534 535 536 536 537 538 538 539
9.1
Ein hebräisch-englisches Dokument . . . . . . . . . . . . . . . . . . . . .
594
10.1 Inhalt der Datei w.eps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Eine LaTEX-Box und mögliche origin-Bezugspunkte . . . . . . . . . . 10.3 SVG aus einer dvi-Datei generiert . . . . . . . . . . . . . . . . . . . . . .
635 650 665
11.1 11.2 11.3 11.4
. . . . . . . . . . . . . . . . . . . . .
668 669 676
. . . .
. . . .
677 685 685 696
12.1 Flussdiagramm des Zusammenspiels von BIBTEX und LaTEX . . . . . . 12.2 BIBTEX-Beispieldatenbank tex.bib . . . . . . . . . . . . . . . . . . . . . . 12.3 BIBTEX-Beispieldatenbank jura.bib . . . . . . . . . . . . . . . . . . . . .
712 714 742
13.1 13.2 13.3 13.4 13.5 13.6
Ausgabe des Programms printbib . . . . . . . . . . . . . . . . . . Ausgabe des Programms bib2html . . . . . . . . . . . . . . . . . . Die pybliographic-Benutzeroberfläche . . . . . . . . . . . . . . . Native Editing in pybliographic . . . . . . . . . . . . . . . . . . . . Die JBibtexManager-Benutzeroberfläche (deutsche Version) . Die BibTexMng-Benutzeroberfläche . . . . . . . . . . . . . . . . .
. . . . . .
805 806 814 816 818 819
A.1
Eine Klassendatei, die article erweitert . . . . . . . . . . . . . . . . . . .
920
C.1 C.2 C.3 C.4
Die Homepage der TEX Users Group im Internet . . . . CTAN-Homepage und TEX-Katalogeintrag . . . . . . . . Verwenden der CTAN-Webschnittstelle. . . . . . . . . . Dokumentation mit dem texdoctk-Programm suchen
Flussdiagramm für die Indexerstellung. . . . . . . . . . . . Schrittweise Entwicklung der Indexerstellung . . . . . . . Einsatz von \index-Befehlen und des showidx-Paketes Einsatz von \index-Befehlen und des showidx-Paketes (Ausgabe). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.5 Anpassen des Ausgabeformats . . . . . . . . . . . . . . . . . 11.6 Leitpunkte im Index hinzufügen . . . . . . . . . . . . . . . . 11.7 xindy-Verarbeitungsmodell. . . . . . . . . . . . . . . . . . . .
xx
. . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . .
. . . . . . . . .
. . . .
. . . .
. . . . . . . . .
. . . .
. . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . .
. . . .
. 997 . 999 . 1000 . 1003
Tabellenverzeichnis
1.1
Wichtige von TEX und LaTEX verwendete Dateitypen. . . . . . . . . . .
9
2.1 2.2 2.3
Standardgliederungsbefehle in LaTEX. . . . . . . . . . . . . . . . . . . . . Sprachspezifische Texte für Überschriften . . . . . . . . . . . . . . . . Die minitoc-Parameter im Überblick . . . . . . . . . . . . . . . . . . . . .
25 37 60
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9
ISO-Währungscodes des Euros und der 12 Euro-Zonen-Länder . . Von ragged2e verwendete Parameter . . . . . . . . . . . . . . . . . . . Werte für \baselinestretch bei verschiedenen Schriftgrößen . Von footmisc vordefinierte Listen von Fußnotensymbolen . . . . . Befehle zum Steuern der Listenumgebung itemize . . . . . . . . . Befehle zum Steuern der Listenumgebung enumerate . . . . . . . Von listings unterstützte Sprachen (Winter 2003). . . . . . . . . . . Von multicols verwendete Längenparameter . . . . . . . . . . . . Von multicols verwendete Zähler . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
103 113 115 124 136 137 178 194 195
4.1 4.2 4.3
Standardoptionen für Papierformate in LaTEX . . . . . . . . . . . . . . . Voreinstellungen der Seitenlayoutparameter (letterpaper) . . . . Layout-Befehle für Kolumnentitel in LaTEX . . . . . . . . . . . . . . . . .
204 205 231
5.1 5.2 5.3
Präambel-Formatkürzel der tabular-Umgebung . . . . . . . . . . . . Zusätzliche Formatkürzel des array-Paketes . . . . . . . . . . . . . . . Zusätzliche Formatkürzel des tabulary-Paketes . . . . . . . . . . . . .
251 252 262
7.1 7.2 7.3 7.4 7.5 7.6
Standardbefehle für Schriftgrade . . . . . . . . . . . . . Standard-Fontwechselbefehle und Deklarationen . . Voreingestellte Fontattribute . . . . . . . . . . . . . . . Vordefinierte Alphabetbefehle in LaTEX . . . . . . . . . Klassifizierung der Computer Modern Fontfamilien Durch das Paket textcomp bereitgestellte Befehle .
353 355 357 361 365 374
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
TABELLENVERZEICHNIS
7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 7.21 7.22 7.23 7.24 7.25 7.26 7.27 7.28 7.29 7.30 7.31 7.32 7.33
Durch das Paket textcomp bereitgestellte Befehle (Forts.) . . . Von PSNFSS-Paketen verwendete Fonts . . . . . . . . . . . . . . . . Klassifizierung der Fontfamilien der PSNFSS-Distribution . . . Glyphen des PostScript-Fonts Zapf Dingbats . . . . . . . . . . . . Glyphen des PostScript-Fonts Symbol . . . . . . . . . . . . . . . . . Klassifizierung der Concrete Fontfamilien. . . . . . . . . . . . . . Klassifizierung der Computer Modern Bright Fontfamilien. . . Klassifizierung der LuxiMono Fontfamilien . . . . . . . . . . . . . Klassifizierung der TX Fontfamilien . . . . . . . . . . . . . . . . . . Klassifizierung der PX Fontfamilien . . . . . . . . . . . . . . . . . . Klassifizierung der Fourier-GUTenberg Fontfamilien. . . . . . . Klassifizierung der URW Antiqua und Grotesk Fonts. . . . . . . Klassifizierung der Euler Mathematikfont-Familien. . . . . . . . Glyphen des wasy Fonts. . . . . . . . . . . . . . . . . . . . . . . . . . Glyphen des MarVoSym Fonts . . . . . . . . . . . . . . . . . . . . . . Glyphen des METAFONT-Fonts bbding . . . . . . . . . . . . . . . TIPA-Kürzel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Klassifizierung der EuroSym Fontfamilie. . . . . . . . . . . . . . . Klassifizierung der Adobe Euro Fontfamilien . . . . . . . . . . . . Klassifizierung von Schriftstärken und -breiten . . . . . . . . . . Klassifizierung der Schriftformen . . . . . . . . . . . . . . . . . . . Standardfontkodierungen unter LaTEX . . . . . . . . . . . . . . . . . Karl Berrys Klassifizierungsschema für Fontdateinamen . . . . Glyphen des msbm10 Fonts . . . . . . . . . . . . . . . . . . . . . . . . Klassifizierung mathematischer Symbole . . . . . . . . . . . . . . LICR-Objekte, die durch einzelne Zeichen dargestellt werden . Glyphentabelle eines T1-kodierten Fonts (ecrm1000) . . . . . . Standard LICR-Objekte. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
375 382 384 391 392 394 397 398 400 401 402 404 408 412 413 415 417 420 421 425 426 428 431 446 447 452 462 468
8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8
Formel-Umgebungen des amsmath-Paketes . . . . . . . . . . . . . . . . Voreingestellte Linienstärke der verschiedenen Formelstile . . . . . Vertikal erweiterbare Symbole. . . . . . . . . . . . . . . . . . . . . . . . . Vordefinierte Operatoren und Funktionen. . . . . . . . . . . . . . . . . Formelstile in Unterformeln . . . . . . . . . . . . . . . . . . . . . . . . . . Abstandsbefehle in Formeln . . . . . . . . . . . . . . . . . . . . . . . . . . Abstände zwischen Symbolen . . . . . . . . . . . . . . . . . . . . . . . . . Symbole der Klasse \mathord (lateinische Buchstaben und arabische Ziffern) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Symbole der Klasse \mathord (griechische) . . . . . . . . . . . . . . . Symbole der Klasse \mathord (buchstabenförmige) . . . . . . . . . . Symbole der Klasse \mathord (verschiedene) . . . . . . . . . . . . . . Akzente, die \mathord-Unterformeln erzeugen . . . . . . . . . . . . . Symbole der Klasse \mathbin (verschiedene) . . . . . . . . . . . . . . Symbole der Klasse \mathbin (Kästen). . . . . . . . . . . . . . . . . . . Symbole der Klasse \mathbin (Kreise) . . . . . . . . . . . . . . . . . . . Symbole der Klasse \mathrel (Gleichheit und Ordnung). . . . . . . Symbole der Klasse \mathrel (Gleichheit und Ordnung – negiert). Symbole der Klasse \mathrel (Mengenoperatoren) . . . . . . . . . . Symbole der Klasse \mathrel (Mengenoperatoren – negiert) . . . .
481 507 511 513 515 522 541
8.9 8.10 8.11 8.12 8.13 8.14 8.15 8.16 8.17 8.18 8.19
xxii
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
543 543 544 544 545 546 546 547 548 548 549 549
Tabellenverzeichnis
8.20 Symbole der Klasse \mathord (Pfeile) . . . . . . . . . . . . . . . 8.21 Symbole der Klasse \mathord (Pfeile – negiert) . . . . . . . . . 8.22 Symbole der Klasse \mathrel (Negationen und Pfeilerweiterungen) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.23 Symbole der Klasse \mathrel (verschiedene) . . . . . . . . . . 8.24 Symbole der Klassen \mathpunct , \mathord , \mathinner (Interpunktion) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.25 Symbole der Klasse \mathop . . . . . . . . . . . . . . . . . . . . . 8.26 Symbolpaare der Klassen \mathopen und \mathclose (erweiterbar). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.27 Symbolpaare der Klassen \mathopen und \mathclose (nicht erweiterbar). . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
550 551
. . . . . . . .
551 551
. . . . . . . .
552 552
. . . .
553
. . . .
554
Vom babel-System unterstützte Sprachoptionen . . . . . . . . . . Sprachspezifische Texte in babel (Englische Voreinstellungen) . Sprachspezifische Texte in babel (Deutsch, Französisch, Polnisch, Russisch) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4 Darstellen von Nummern durch Buchstaben . . . . . . . . . . . . . 9.5 Mathematische Operatoren in osteuropäischen Sprachen . . . . 9.6 Glyphentabelle eines T2A-kodierten Fonts (larm1000) . . . . . . 9.7 Glyphentabelle eines LGR-kodierten Fonts (grmn1000) . . . . . . 9.8 Griechische Transliteration mit lateinischen Buchstaben (LGR) . 9.9 LGR-Ligaturen, die Glyphen mit einem Akzent erzeugen . . . . . 9.10 Verfügbare Kombinationen aus Spiritus- und Akzentzeichen . . 9.11 Glyphentabelle eines LHE-kodierten Fonts (shold10) . . . . . . . 9.12 Fontwechselbefehle für hebräische Texte . . . . . . . . . . . . . . . 9.1 9.2 9.3
. . . .
559 561
. . . . . . . . . .
. . . . . . . . . .
567 577 580 588 592 593 593 593 595 595
10.1 Überblick über Farb- und Graphikfunktionen der Gerätetreiber . . 10.2 Argumente von \DeclareGraphicsRule . . . . . . . . . . . . . . . . . 10.3 Die wichtigsten Optionen des dvips-Programms. . . . . . . . . . . . .
633 644 656
11.1 11.2 11.3 11.4
. . . .
680 682 692 694
12.1 Geschlechtsangaben in jurabib (gender-Feld) . . . . . . . . . . . . . . 12.2 Vergleich der Pakete für mehrfache Bibliographien. . . . . . . . . . .
760 772
13.1 13.2 13.2 13.3 13.4 13.5 13.6 13.7 13.8
791 792 793 800 821 828 830 838 839
Stilparameter für MakeIndex (Eingabe) . Stilparameter für MakeIndex (Ausgabe). Von texindy unterstützte Sprachen . . . xindy-Standardmodule . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Standardpublikationstypen von BIBTEX . . . . . . . . . . . . . . . . . Standardeingabefelder in BIBTEX. . . . . . . . . . . . . . . . . . . . . . Standardeingabefelder in BIBTEX (Forts.) . . . . . . . . . . . . . . . . Vordefinierte Zeitschriftenkürzel in BIBTEX-Stilen . . . . . . . . . . Eine Auswahl von BIBTEX-Stildateien . . . . . . . . . . . . . . . . . . . Anforderungen an die Namensdarstellung . . . . . . . . . . . . . . In custom-bib unterstützte Sprachen (Sommer 2003) . . . . . . Befehle der BIBTEX-Programmiersprache . . . . . . . . . . . . . . . . Systemimmanente Funktionen der BIBTEX-Programmiersprache
. . . .
. . . . . . . . .
. . . . . . . . .
xxiii
TABELLENVERZEICHNIS
14.1 Überblick über Befehle des doc-Paketes . . . . . . . . . . . . . . . . . . A.1 A.2 A.3 A.4 A.5 A.6
xxiv
LaTEX-Längenmaße . . . . . . . . . . . . . . . . . . . . Vordefinierte horizontale Abstände . . . . . . . . Vordefinierte vertikale Abstände . . . . . . . . . . Voreinstellungen für Linienbasisbefehle in TEX Interne \boolean-Schalter in LaTEX . . . . . . . . Befehle für Paket- und Klassendateien . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
853 888 889 891 901 908 911
Vorwort zur deutschen Ausgabe
Seitdem ich das Vorwort zur ersten deutschen Ausgabe des LaTEX-Begleiters geschrieben habe, ist mittlerweile ein Jahrzehnt vergangen. Zehn Jahre sind eine lange Zeit für ein Fachbuch über ein sich weiterentwickelndes System, und obwohl sich das Buch über den ganzen Zeitraum stetiger Beliebtheit erfreute, lässt sich nicht abstreiten, dass seine Informationen und Ratschläge langsam anfingen, in Teilen altbacken zu wirken. Umso mehr freut es mich, den deutschen Lesern mit der nun vorliegenden zweiten Auflage ein radikal erneuertes Buch vorlegen zu können, in das mehrere Jahre Entwicklungsarbeit und nahezu ein Jahr Übersetzung und Anpassung an die Belange der deutschen Sprache eingeflossen sind. Wie im Vorwort zur englischen Ausgabe geschildert, ist dies keine zweite Auflage im üblichen Sinne, sondern ein neues Buch, in das die in den letzten zehn Jahren gewonnene Erfahrung der Autoren und alle wichtigen Neuerungen aus dieser Zeit Eingang gefunden haben. Die deutsche Übersetzung basiert auf dem zweiten korrigierten Nachdruck der englischen Originalausgabe, wurde aber inhaltlich an vielen Stellen an die Gegebenheiten des deutschen Sprachraums angepasst. Mein Dank geht an dieser Stelle an die beiden Übersetzerinnen Claudia Krysztofiak und Rebecca Stiels, die sich mit Akribie und Einsatz (oft bis in die frühen Morgenstunden) in die Tiefen der TEXnischen Details eingearbeitet haben und unsere englische Prosa in leicht verständliches und gut lesbares Deutsch verwandelten. Dank auch an die Mitarbeiter von Pearson Studium, die unkompliziert halfen, alle Stolpersteine aus dem Weg zu räumen.
VORWORT ZUR DEUTSCHEN AUSGABE
Irren ist menschlich
Last but not least ein immenses Dankeschön an Hubert Gäßlein für seinen großartigen Einsatz beim Korrektorat. Er war es, der den Löwenanteil aller Fehler im ersten Druck der englischen Ausgabe meldete – umso glücklicher war ich, als er seine direkte Mitarbeit bei der deutschen Ausgabe anbot. Was sich jetzt noch an Fehlern finden lässt, geht vermutlich darauf zurück, dass wir den einen oder anderen seiner Korrekturvorschläge missachtet haben oder nachträglich, beim endgültigen Satz, neue Fehler eingebaut haben. Jeder gefundene und gemeldete Fehler ist ein Gewinn für alle Leser dieses Buches. Daher schon im Voraus vielen Dank an alle Leser, die uns auf Fehler aufmerksam machen. Die aktuelle Version der Fehlerdatei für den LaTEX-Begleiter befindet sich auf der LaTEX-Projektsite unter der Internetadresse http://www.latex-project.org/guides/lb2.err, zusammen mit einer Onlineversion des Index und weiteren Auszügen aus diesem Buch. ∗
∗
∗
Die deutsche Ausgabe wurde aber nicht nur inhaltlich, sondern auch visuell an die Gepflogenheiten im deutschen Sprachraum angepasst; ein paar Einzelheiten zur Entstehungsgeschichte finden sich im Nachwort. Während ich im Vorwort der ersten Auflage noch schrieb, dass der optische Randausgleich mithilfe einer Reihe komplizierter Makros erzeugt wurde, und ich hoffte, dass sie eines Tages vielleicht als stabil funktionierendes Paket zur Verfügung stehen würden, lässt sich ein Jahrzehnt später sagen, dass diese Aufgabe nun elegant durch die Satz-Engine selbst (pdfTEX) erledigt wird. Bei der Entstehung dieses Buches mitzuwirken, hat allen Beteiligten viel Spaß bereitet – selbst wenn es uns manchmal an den Rand unserer Leistungsfähigkeit gebracht hat. Bleibt zu hoffen, dass sich dies für den Leser in vergleichsweise hohem Nutzen widerspiegelt.
Frank Mittelbach Rügen, August 2005
xxvi
Vorwort zur englischen Originalausgabe
Seit dem Erscheinen der ersten Auflage des LATEX Companion ist mittlerweile ein Jahrzehnt verstrichen – ein Jahrzehnt, in dem einige den Niedergang von TEX und LaTEX prophezeiten und ankündigten, dass andere Programme die Welt regieren würden. Es gab tatsächlich viele Veränderungen, doch keine der Prophezeiungen ist eingetreten: TEX ist nicht verschwunden und das Interesse an LaTEX ist ungebrochen; nur die Art und Weise, sich mit beiden zu befassen, hat sich im Laufe der Zeit verändert. Als wir 1993 den ersten Companion [57] verfassten, sollte er alles beschreiben, was an Nützlichem in der LaTEX-Welt zur Verfügung stand (obwohl er letztendlich nur das beschrieb, was damals bei CERN vorlag). Das hatte den unbeabsichtigten Nebeneffekt, dass die erste Auflage nach Verständnis der meisten Leser festlegte, wie eine zu jener Zeit moderne LaTEX-Distribution zusammengestellt sein sollte. Glücklicherweise hatten wir in den meisten Fällen eine sinnvolle Auswahl getroffen und der Großteil (wenn auch nicht alle) der in der ersten Auflage beschriebenen Pakete sind auch heute noch weit verbreitet. Oder, um es mit den kürzlich verfassten Worten eines Rezensenten auszudrücken: Obwohl „das Buch in die Jahre gekommen ist, bleibt es größtenteils ein immer noch zuverlässiges Referenzwerk“. Nichtsdestotrotz hat sich vieles verändert und im Laufe der letzten zehn Jahre wurde LaTEX um viele neue und interessante Funktionen erweitert. Die Überarbeitung des LATEX Companion endete deshalb damit, dass 90% der ursprünglichen Seiten umgeschrieben wurden und über 600 zusätzliche Seiten mit beeindruckenden neuen Entwicklungen hinzukamen. Was Sie nun in Händen halten, ist im Grunde ein ganz neues Buch – ein Buch, von dem wir hoffen, dass es die positiven Aspekte der ersten Auflage aufnimmt und erheblich verbessert und gleichzeitig die damals in Inhalt und Darstellung gemachten Fehler nicht mehr zeigt (obgleich wir hier sicherlich
VORWORT ZUR ENGLISCHEN ORIGINALAUSGABE
wieder andere Fehler gemacht haben). Als Grundlage für dieses Buch dienten uns die CTAN-Archive. Darüber hinaus durchforsteten wir die Archive der comp.text.tex-Newsgroup, um die dringendsten Fragen und Probleme ausfindig zu machen. Neben den Erläuterungen zu einer guten Auswahl der in den CTANArchiven beigesteuerten Pakete beschreibt das Buch viele Aspekte des grundlegenden LaTEX-Systems, die im offiziellen LaTEX-Manual, dem Buch LATEX: A Document Preparation System [106] von Leslie Lamport nicht erschöpfend behandelt werden. Dieses Buch soll das LATEX-Manual jedoch nicht ersetzen, sondern eher ergänzen: Wer es liest, sollte zumindest bereits den ersten Teil des LATEX-Manual (oder eines vergleichbaren Einführungswerkes, wie etwa Guide to LATEX [103]) gelesen und einige praktische Erfahrung mit dem Erstellen von LaTEX-Dokumenten gesammelt haben. Mit dieser Ausgabe ging auch eine größere Änderung im Feld der Autoren einher: Frank ist nun der federführende Verfasser (so dass er auch für alle Fehler verantwortlich zeichnet) und mehrere Mitglieder des LaTEX3-Projektes haben sich an diesem Buch beteiligt und es durch ihr Wissen und ihre Erfahrung in bestimmten Themengebieten bereichert. Ein Dankeschön an Die Arbeiten an diesem Buch wurden durch den plötzlichen Tod unseres einen großartigen guten Freundes, Kollegen und geplanten Mitautors Michael Downes überschatMenschen! tet, dessen bedeutende Beiträge zu LaT X und besonders zu A S-LaT X vielen E E M gut bekannt sind. Dieses Buch ist ihm und seinem Gedenken gewidmet. ∗
∗
∗
Wir möchten uns vor allem bei Peter Gordon bedanken, unserem Lektor bei Addison-Wesley, der dieses Buch nicht nur ermöglichte, sondern uns durch seinen unermüdlichen Ansporn immer auf dem richtigen Weg hielt (nur ein paar Jahre zu spät). Als das Manuskript endlich fertig war, zeigte Elizabeth Ryan unendliche Geduld mit unseren Eigenarten und führte uns sicher zum Abschluss. Unser besonderer Dank gebührt Barbara Beeton, David Rhead, Lars Hellström und Walter Schmidt für das sorgfältige Korrekturlesen einzelner Teile des Manuskriptes. Ihre zahlreichen Kommentare, Vorschläge, Korrekturen und Hinweise haben den Text erheblich verbessert. Ein ganz besonderes Dankeschön auch an unsere Mitautoren Christine Detig und Joachim Schrod für ihre wertvolle Unterstützung bei Kapitel 11 über die Indexerstellung. Wer seine Hand nahe am Puls des LaTEX-Geschehens hat, dem ist vielleicht Verfolgte nicht entgangen, dass es 2002 und 2003 eine erhöhte Anzahl neuer Versionen Paketentwickler bewährter LaTEX-Pakete gab. Einige dieser Versionen wurden durch die Fragen und Kommentare ausgelöst, die wir bei der Vorbereitung des Manuskriptes für diese zweite Ausgabe an die Paketentwickler richteten. Nahezu alle Paketentwickler reagierten positiv auf unsere Anfragen nach Aktualisierungen, Änderungen und Klärungen und alle investierten ein beträchtliches Maß an Zeit, um uns bei unserer Aufgabe zu unterstützen. Wir möchten uns besonders bei folgenden Personen bedanken: Jens Berger (jurabib), Axel Sommerfeldt (caption), Steven Cochran (subfig), Melchior Franz (soul, euro) und Carsten Heinz (listings) . Sie mussten sich um den größten Teil der etwa 6000 E-Mails kümmern, die wir mit den verschiedenen Paketentwicklern austauschten.
xxviii
Vorwort zur englischen Originalausgabe
Aus ähnlichen Gründen auch ein herzliches Dankeschön an Alexander Rozhenko (manyfoot), Bernd Schandl (paralist), David Kastrup (perpage), Donald Arseneau (cite, relsize, threeparttable, url), Fabrice Popineau (TEX Live CD), Frank Bennett, Jr. (camel), Gerd Neugebauer (bibtool), Harald Harders (subfloat), Hideo Umeki (geometry), Hubert Gäßlein (sidecap, pict2e), Javier Bezos (titlesec, titletoc), Jean-Pierre Drucbert (minitoc), Jeffrey Goldberg (endfloat, lastpage), John Lavagnino (endnotes), Markus Kohm (typearea), Martin Schröder (ragged2e), Matthias Eckermann (parallel), Michael Covington (upquote), Michel Bovani (fourier), Patrick Daly (custom-bib, natbib), Peter Heslin (ellipsis), Peter Wilson (layouts), Piet van Oostrum (extramarks, fancyhdr), Rei Fukui (tipa), Robin Fairbairns (footmisc), Rolf Niepraschk (sidecap, pict2e), Stephan Böttcher (lineno), Thomas Esser (teTEX distribution), Thomas Henlich (marvosym), Thorsten Hansen (bibunits, multibib) und Walter Schmidt (fix-cm, PSNFSS). Entschuldigung, falls wir jemanden vergessen haben sollten. Wir danken unseren zahlreichen Kollegen in der (LA)TEX-Welt, welche all diese Pakete entwickelt haben, – nicht nur die hier beschriebenen, sondern auch Hunderte von anderen – damit die Anwender ihre Dokumente so setzen können, wie sie es wünschen oder es von ihnen verlangt wird. Ohne die unermüdlichen Anstrengungen dieser Enthusiasten wäre LaTEX nicht das großartige und flexible Werkzeug, das es heute ist. Wir möchten auch Blenda Horn von Y&Y und Michael Vulis von MicroPress für die in diesem Buch verwendeten Schriften danken. Das Bild von Chris Rowley, das nach einem guten Mittagessen am Hong Kong International Airport aufgenommen wurde, erscheint mit freundlicher Genehmigung von Wai Wong. Das Photo von Michael Downes von der TEX 2000-Konferenz in Oxford wurde mit freundlicher Genehmigung von Alan Wetmore abgedruckt. ∗ ∗ ∗ Wir möchten auch unseren Familien und Freunden für ihre Unterstützung während der Arbeit an diesem Buch danken. Dies mag für manche vielleicht wie ein Alibisatz klingen, er war jedoch bestimmt kaum jemals ernster gemeint als hier. Chris möchte außerdem der Open University, UK, für ihre Unterstützung bei seiner Arbeit an LaTEX danken, und der School of Computer Science and Engineering, University of New South Wales, dafür, dass er seine Arbeiten an diesem Buch in einer so angenehmen Umgebung abschließen durfte.
Frank Mittelbach Michel Goossens Johannes Braams David Carlisle Chris Rowley August 2004
xxix
K A P I T E L
1
Einleitung 1.1 Ein kurzer Blick in die Vergangenheit . . . . . . . . . . . . . . . . . . . . 1 1.2 Das heutige System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Wie man dieses Buch verwendet . . . . . . . . . . . . . . . . . . . . . . 11
LaTEX ist nicht nur ein Satzsystem für mathematische Formeln. Es wird sowohl für kurze Mitteilungen, geschäftliche oder persönliche Korrespondenzen und Newsletter verwendet, als auch zum Verfassen von Artikeln und Büchern natur- und geisteswissenschaftlicher Art. Selbst umfassende Handbücher und Referenzwerke zu den verschiedensten Themen werden mit LaTEX erstellt. Inzwischen gibt es für praktisch jede Art von Computer und Betriebssystem eine eigene LaTEX-Version. Dieses Buch enthält einen wahren Schatz an Informationen über die vielfältigen gegenwärtigen Einsatzmöglichkeiten des Systems, doch zunächst sollen hier die Hintergründe seiner Entwicklung beleuchtet werden. Der erste Abschnitt dieses Kapitels blickt auf die Ursprünge und die Entwicklung von LaTEX zurück.1 Im zweiten Abschnitt erhält man einen Überblick über die typischen Dateiarten, mit denen ein modernes LaTEX-System arbeitet, und ihre Funktion. Das Kapitel schließt mit einigen Hinweisen dazu, wie man dieses Buch benutzen kann.
1.1 Ein kurzer Blick in die Vergangenheit Im Mai 1977 begann Donald Knuth von der Stanford University [98] mit seiner Arbeit an dem Textverarbeitungssystem, das heute unter dem Na- Am Anfang . . . men „TEX und METAFONT“ [87–91] bekannt ist. Im Vorwort des Buches The TE Xbook [87] schreibt Knuth: „TEX ist ein neues Satzsystem, das zum Gestalten schöner Bücher gedacht ist – insbesondere solcher, die sehr viele mathematische Formeln enthalten. Beim Erstellen eines TEX-Manuskriptes gibt man 1 Der Artikel The LAT X legacy: 2.09 and all that [150] vermittelt einen etwas persönlicheE ren Eindruck der Geschichte.
1
EINLEITUNG
dem Computer genaue Anweisungen, wie er dieses Manuskript in Seiten umzusetzen hat, deren typographische Qualität sich mit denjenigen der weltweit besten Setzer vergleichen lässt.“ 1979 schrieb Gordon Bell im Vorwort zu einem früheren Buch, TE X and METAFONT, New Directions in Typesetting [85]: „Das System Tau Epsilon Chi (TEX) von Don Knuth ist die vielleicht bedeutendste Erfindung dieses Jahrhunderts auf dem Gebiet der Satztechnik. Es führt eine Standardsprache in die Computertypographie ein und kann von seiner Bedeutung her nahe der Einführung der Gutenberg-Presse angesiedelt werden.“ Anfang der 90er Jahre verkündete Donald Knuth offiziell, dass TEX zugunsten der Stabilität des Systems nicht weiter entwickelt werde [100]. Es ist wohl nicht weiter überraschend, dass TEX daraufhin durch viele experimentelle Projekte in verschiedene Richtungen erweitert wurde. Einige dieser Projekte tragen nun, zu Beginn des 21. Jahrhunderts, Früchte, so dass alle, die sich mit automatisierter Typographie befassen, eine spannende Zeit erleben. Donald Knuth hat TEX ursprünglich nur entwickelt, um damit seine damals laufenden Arbeiten an dem Buch The Art of Computer Programming [93] zügig und in hoher typographischer Qualität abzuschließen. Die Weiterentwicklung des Systems, nach seiner Entstehung als Knuths „persönliche Arbeitshilfe“, wurde stark durch die American Mathematical Society beeinflusst und gefördert. Während Knuth TEX entwickelte, begann Leslie Lamport Anfang der 80er . . . und Lamport sah, Jahre mit seiner Arbeit an dem System zum Formatieren von Dokumenten, dass es gut war. das heute unter dem Namen LaTEX bekannt ist. Auf Basis der Satzengine und des Makrosystems von TEX implementierte er eine deklarative Dokumentenbeschreibungssprache, die auf einem System namens Scribe fußt, das von Brian Reid [144] entwickelt wurde. Der Anreiz eines solchen Systems besteht darin, dass man in LaTEX mit wenigen High-Level-Deklarationen oder -Befehlen auf einfache Weise eine große Bandbreite an Dokumenten erzeugen kann, ohne dass man sich um ihr typographisches Erscheinungsbild sorgen muss. Zumindest im Prinzip kann man es dem Dokumentengestalter überlassen, das Layout an anderer Stelle festzulegen. Die zweite Auflage von LATEX: A Document Preparation System [106] beginnt mit den folgenden Worten: „LaTEX ist ein System zum Setzen von Dokumenten. Seine erste auf breiter Ebene verfügbare Version erschien 1985, rätselhafterweise unter der Versionsnummer 2.09.“ Dieses stabile und gut dokumentierte LaTEX-Release führte unmittelbar zu einer rasanten Ausbreitung der auf TEX basierenden Textverarbeitung über die Gemeinschaft der nordamerikanischen Mathematiker hinaus. LaTEX war die erste in großem Rahmen eingesetzte Sprache zum Beschreiben der logischen Struktur einer Vielzahl von Dokumenten und verbreitete so die Philosophie der logischen Gestaltung, wie sie in Scribe verwendet wurde. Die „logische Gestaltung“ folgt dem Grundsatz, dass Autoren sich nur mit dem logischen Inhalt ihrer Werke befassen sollten und nicht mit deren Erscheinungsbild. Zu dieser Zeit wurde LaTEX abwechselnd mal als „TEX für die Massen“ und mal als ein „von seiner unflexiblen Formatierungssteuerung befreites Scribe“ bezeichnet. Im Laufe des nächsten Jahrzehnts fand es so schnelle Verbreitung, dass Leslie bereits 1994 schreiben konnte: „LaTEX ist nun in wissenschaftlichen und akademischen Kreisen sehr beliebt und wird auch
2
1.1
Ein kurzer Blick in die Vergangenheit
im gewerblichen Bereich großflächig eingesetzt.“ Dieser Grad der Verbreitung erscheint jedoch immer noch gering, gemessen an der heutigen Situation, in der das System für viele Fachleute überall auf der Welt zu einem so selbstverständlichen und unentbehrlichen Arbeitspferd geworden ist, wie die Workstation, auf der es betrieben wird. Die weltweite Verfügbarkeit von LaTEX ließ schnell das internationale Interesse an TEX und seiner Verwendung zum Setzen einer Vielzahl von Sprachen steigen. LaTEX 2.09 wurde (absichtlich) nicht globalisiert, aber es eignete sich dazu. Darüber hinaus war die beiliegende Dokumentation, aufgrund ihrer klaren Struktur und Geradlinigkeit, durchaus wert übersetzt zu werden. Auf zwei entscheidenden Konferenzen (Exeter, UK, 1988, und Karlsruhe, Deutschland, 1989) wurde die weite Verbreitung von LaTEX in Europa klar herausgestellt. Sie führten unmittelbar zu International LaTEX [152] und dazu, dass unter Anleitung von Johannes Braams [25] an einer generelleren Unterstützung für viele verschiedene Sprachen und den Wechsel zwischen ihnen gearbeitet wurde (siehe Kapitel 9). Man beachte, dass sich der Begriff der „Sprache“ im Zusammenhang mit Typographie nicht ausschließlich auf die Vielfalt natürlicher Sprachen und Dialekte im Universum bezieht – er hat dort auch eine weiter gefasste Bedeutung. In der Typographie versteht man unter „Sprache“ weit mehr, als nur eine Auswahl an „Zeichen zum Bilden von Wörtern“, da viele wichtige Unterscheidungen von anderen kulturellen Unterschieden herrühren, die sich auf die Traditionen der geschriebenen Kommunikation auswirken. Daher orientieren sich wichtige typographische Unterschiede nicht notwendigerweise an nationalen Grenzen, sondern ergeben sich eher aus verschiedenen Arten von Dokumenten und unterschiedlichen typographischen Schulen. Einen weiteren wichtigen Beitrag zur Ausbreitung von LaTEX leisteten Frank Mittelbach und Rainer Schöpf mit ihrer Pionierarbeit an einer völlig neuen LaTEX-Schnittstelle zum Einbinden von Schriften, dem New Font Selection Scheme (NFSS) (siehe Kapitel 7). Sie waren außerdem stark an der Entwicklung des AMS-LaTEX-Systems beteiligt, das LaTEX um fortgeschrittene Funktionen zum Setzen mathematischer Formeln erweiterte (siehe Kapitel 8). Als Lohn für ihre Mühen, die unter anderem aus einem ständigen Strom von Fehlermeldungen (und Lösungen) für Leslie bestanden, wurde Frank und Rainer „gestattet“, die technische Unterstützung und Pflege von LaTEX zu übernehmen. Als eine ihrer ersten Aktionen konsolidierten sie International LaTEX, den in Europa entwickelten Standard, als Teil des Systemkernels1 . Sehr bald wurde Version 2.09 formell eingefroren und obwohl die Logeinträge für Änderungen noch einige Monate bis ins Jahr 1992 weiterliefen, stand bereits weitgehend fest, dass das alte System nicht mehr unterstützt werden sollte, da dringend etwas Neues benötigt wurde. Der weltweite Siegeszug von LaTEX führte in den frühen 1990ern in gewissem Sinne zu einem übertriebenen Wildwuchs: Viele TEXniker hatten sich darum bemüht, unter der Haube von Leslies „Volkswagen“ solche Extras wie Supermotoren mit Turbolader und -einspritzer in Mehrventilausführung zusammen mit jeglicher Art von „Aussehen ist alles“-Automatik einzubauen – und die wenigsten passten zusammen. Daher wurde die Existenz des neuen 1 Kernel
In die weite Welt
Die nächste Generation
Zu viel des Guten
bedeutet hier Kern oder Herzstück des Systems.
3
1
EINLEITUNG
Standard-LaTEX, das auf den Namen LaTEX 2ε getauft wurde, in seiner Ankündigung 1994 folgendermaßen erklärt: „Im Laufe der Jahre wurden viele Erweiterungen für LaTEX entwickelt. Das zeigt natürlich, wie beliebt das System ist, allerdings mit einem weniger schönen Resultat: An verschiedenen Orten kamen LaTEXFormate zum Einsatz, die nicht mehr zueinander kompatibel waren. Um Dokumente von verschiedenen Stellen verarbeiten zu können, waren Systembetreuer daher gezwungen, neben LaTEX (mit und ohne NFSS) auch SLITEX, AMS-LaTEX und so weiter bereitzustellen. Darüber hinaus ging auch nicht aus jedem Quelldokument eindeutig hervor, in welchem Format es geschrieben war. Um diese unbefriedigende Situation zu beenden, wurde ein neues LaTEX-Release erstellt. Es führt alle derartigen Erweiterungen wieder unter einem Dach zusammen und verhindert so den weiteren Wildwuchs gegenseitig nicht kompatibler Dialekte von LaTEX 2.09.“ Die Entwicklung von „New Standard LaTEX“ und der Umgebung zur Pflege des Systems begann 1993, mit etwas Ermutigung und sanftem Nachdruck von Leslie, durch das LaTEX3-Projektteam [122], das damals aus Frank Mittelbach, Rainer Schöpf, Chris Rowley, Johannes Braams, Michael Downes, David Carlisle, Alan Jeffrey und Denys Duchier bestand. Zwar waren die größten Änderungen am LaTEX-Basissystem (dem Kernel) und den Standarddokumentenklassen (Stile in 2.09) bereits 1994 abgeschlossen, die zusätzliche Unterstützung für „Typographie in Farbe“, generische Graphiken und Positionierungskontrolle wurden jedoch erst später, weitgehend von David Carlisle, hinzugefügt. Der Zugriff auf Schriften für das neue System umfasste auch Arbeiten von Mark Purtill über NFSS-Erweiterungen zur besseren Unterstützung von variablen Fontkodierungen und skalierbaren Fonts [32–34]. Eigentlich wurde diese neue Version ursprünglich mit dem Ziel erstellt, Das 21. Jahrhundert die vielen verschiedenen LaTEX-Modelle zu konsolidieren. Dadurch trat jedoch ein wesentlich leistungsfähigeres System zutage, das sowohl über einen robusten Erweiterungsmechanismus (durch Pakete) verfügte, als auch – was wichtig ist – über ein solides Fundament zur technischen Unterstützung und Pflege. So ergab sich durch die Standardisierung und durch die Pflegbarkeit des Quellcodes und der unterstützenden Systeme ein robustes Programm. Dieses System ist denn auch das aktuelle Standard-LaTEX, das in diesem Buch beschrieben wird. Es hat die meisten der Ziele erreicht oder übertroffen, die 1989 für „ein neues LaTEX für das 21. Jahrhundert“ formuliert worden waren [125, 127]. Die besonderen Ansprüche für das aktuelle System lauten: „. . . bessere Unterstützung von Schriften, Graphiken und Farben; aktiv durch das LaTEX3Projektteam in Stand gehalten“. Wie diese Ziele im Einzelnen erreicht wurden und die daraus resultierenden Teilsysteme, welche dazu beigetragen haben, dass man den Ansprüchen weitgehend gerecht werden konnte, ergeben ein aufschlussreiches Beispiel für dezentralen Softwaresupport: Die Hauptarbeit wurde in mindestens fünf Ländern bewältigt, und wie die Fehlerdatenbank [112] zeigt, ist die Gesamtzahl derjenigen, die aktive technische Unterstützung leisten, weiterhin hoch. Standard-LATEX
4
1.1
Ein kurzer Blick in die Vergangenheit
Obwohl der LaTEX-Kern ein wenig an der schleichenden Inflation neu eingebauter Funktionen Ende der 1990er Jahre zu leiden hatte, sorgen nun das Paketsystem gemeinsam mit den klaren Entwicklungsrichtlinien und im rechtlichen Rahmen der LaTEX Project Public License (LPPL) [111] dafür, dass LaTEX nahezu immer stabil läuft und dabei eine Vielzahl verschiedener Erweiterungen unterstützt. Diese wurden von vielen verschiedenen Leuten beigesteuert, welche, wie das Projektteam freudig bestätigt und der Online-Katalog [171] bezeugt, die verfügbaren Funktionen auf einer breiten Palette verschiedener Bereiche wesentlich verbessert haben. Alle wichtigen Weiterentwicklungen des Basissystems wurden in den regelmäßigen Ausgaben der LATEX News [113] aufgeführt. Zur Jahrtausendwende konzentrierten sich die Entwicklungsaktivitäten des LaTEX3-Projektteams auf die folgenden Bereiche: Unterstützung für mehrsprachige Dokumente [131], eine „LaTEX-Schnittstelle für Buchdesigner“ [120], wichtige Verbesserungen der Ausgaberoutine [132], bessere Handhabung der Formatierung von Absatzzwischenräumen und eine Lösung für die komplexen Anforderungen an den Vorspann von Zeitschriftenartikeln. Der Programmcode für die Prototypen wurde bereits zur Verfügung gestellt (siehe [119]). Das Projektteam hat sich jedoch standhaft geweigert, den Kernel unnötigerweise durch die Integration zusätzlicher Funktionen zu „verbessern“, um nicht in die gleiche Falle zu tappen wie LaTEX 2.09 Anfang der 1990er Jahre: den Zerfall in zueinander nicht kompatible Dialekte, bei dem Dokumente, die an einem Ort geschrieben wurden, an einem anderen nicht mehr verarbeitet werden konnten. Man sollte an dieser Stelle nicht vergessen, dass LaTEX nicht nur als Satzsystem für Dokumente hoher Qualität dient, sondern als „Lingua franca“ auch die Zusammenarbeit und den Austausch zwischen unterschiedlichen Forschungsgemeinschaften fördert. Durch den LaTEX 2ε -Standard lassen sich Dokumente, die 19961 geschrieben wurden, auch mit dem heutigen LaTEX noch immer verarbeiten. Neue Dokumente laufen auch auf älteren Kernel-Releases, sofern man die Zusatzpakete aktualisiert. Das ist eine Aufgabe, die, im Gegensatz zur Aktualisierung des Kernels, auch Anwender in einer Mehrbenutzerumgebung (etwa an Universitäten oder in Unternehmen) leicht bewältigen können. Ein stabiler Kernel bedeutet in der Softwareentwicklung jedoch keinen Stillstand: Für die weitere Bedeutung und Beliebtheit von LaTEX ist die facettenreiche Sammlung beigesteuerter Pakete ebenso unerlässlich wie der stabile Kern, auf dem diese aufbauen. Der Erfolg des Paketsystems für Erweiterungen außerhalb des Kernels spiegelt sich in der Begeisterung all derer wider, die Pakete dazu beigetragen haben – vielen Dank dafür! Wie man leicht nachvollziehen kann, wenn man das hochverfügbare und stabile Comprehensive TEX Archive Network (siehe Anhang C) besucht oder dieses Buch liest (in dem auf Seite 1126 mehr als 250 dieser „netten Jungs“2 genannt werden), wurde hier ein wahrer Schatz an LaTEX-Paketen und zugehöriger Software geschaffen.
Das Paketsystem
Entwicklungsarbeiten
Keine neuen Funktionen . . .
. . . aber kein Stillstand
1 Die Zeit zwischen 1994 und 1996 war eine Phase der Konsolidierung für LaT X 2 , in der E ε noch größere Fehler behoben und Verbesserungen vorgenommen werden mussten, bis das System wirklich stabil lief. 2 Leider ist das fast wörtlich zu nehmen: Man muss schon sehr genau hinschauen, um die neun aufgeführten Damen zu finden.
5
1
EINLEITUNG
Allein schon das Bereitstellen der Serviceleistungen, der Werkzeuge und des Supports auf Systemebene für ein so dezentrales Pflege- und Entwicklungssystem stellte eine große intellektuelle Herausforderung dar. Viele der Standardmethoden und Softwaretools für diese Aufgaben gehen davon aus, dass sich die Kollegen hinter der nächsten Tür und nicht auf dem nächsten Kontinent befinden. Zudem waren am Anfang der Entwicklung E-Mail und FTP die einzig zuverlässigen Kommunikationswege. Sowohl die technische Findigkeit als auch die Persönlichkeit aller Beteiligten waren unabdingbare Voraussetzung für ein solches Beispiel an freundlicher „Open Software“-Pflege. Besonders zu erwähnen sind hier jedoch Alan Jeffrey und Rainer Schöpf, die „immer alles repariert haben“. Ein zentraler Bestandteil dieses Systems, das für die meisten im Verborgenen bleibt, ist das Regressionstestsystem mit seiner riesigen Sammlung von Testdateien [130]. Es wurde von Frank und Rainer in Zusammenarbeit mit Daniel Flipo entworfen und aufgesetzt und hat in der endlosen Fehde mit den Fehlern schon unzählige Male seinen Wert bewiesen. Einige Mitglieder des Projektteams haben auf Basis der Teamerfahrungen Forschung ihre eigenen Forschungsarbeiten auf dem Gebiet der Dokumentationswissenschaften über die Grenzen der aktuellen LaTEX-Strukturen und -Paradigmen hinaus erweitert. Die folgenden Quellen enthalten einige Beispiele ihrer bis 2003 verfassten Abhandlungen: [30, 31, 35, 36, 123, 128, 139, 148, 149]. Bis auf Weiteres hat das Standard-LaTEX-System zwei entscheidende VorBis 2020? teile gegenüber allen anderen vollautomatischen Textverarbeitungssystemen, die in den nächsten 10 Jahren auf der Bildfläche erscheinen werden: Zum einen kann es eine Vielzahl von Elementen in sehr komplexen Dokumenten beliebiger Größe qualitativ hochwertig formatieren; zum zweiten ist es robust in Pflege und Anwendung, so dass es potentiell für mindestens weitere 15 Jahre großflächig im Einsatz bleiben kann.1 Ein wichtiges Nebenprodukt der Forschungsarbeiten waren einige Schnitt. . . und in die Zukunft stellen und Erweiterungen, die sich unmittelbar mit Standard-LaTEX verwenden lassen. Angesichts des in dieser Weise wachsenden Funktionsumfangs muss man sich früher oder später der Frage stellen, inwieweit ein bloßes Erweitern von LaTEX in dieser Form das System noch leistungsfähiger macht, ohne dass es an Robustheit verliert und sich irgendwann nicht mehr pflegen lässt. Dies ist nicht der richtige Ort, um über die Zukunft von LaTEX zu spekulieren. Man kann jedoch sicher sein, dass sich das System weiter entwickeln und seinen Einflussbereich ausdehnen wird, sei es im traditionellen Verlagsbereich oder in elektronischen Systemen des Bildungswesens und der Geschäftswelt. Das Back Office
1.2 Das heutige System Dieser Abschnitt bietet einen Überblick über die große Vielzahl an Dateien, die ein typisches LaTEX-System mit all seinen Komponenten verwendet. Ergänzend wird beschrieben, wie die verschiedenen Programmbestandteile zusammenarbeiten. Die meisten Anwender müssen sich eigentlich niemals näher mit der Softwareumgebung, die ihre Arbeit unterstützt, befassen. Dieser Abschnitt ist 1 Einer der Autoren hat öffentlich eine bescheidene Menge Bier darauf gewettet, dass T X E bis mindestens 2010 weiterhin allgemein verwendet wird (zumindest von Mathematikern).
6
1.2 Das heutige System
jedoch eine nützliche allgemeine Referenz und hilft, einige eher technische Teile dieses Buches besser zu verstehen. Auch wenn moderne LaTEX-Systeme meistens in eine projektorientierte, menügesteuerte Oberfläche integriert sind, hat sich hinter den Kulissen nur wenig gegenüber der hier gegebenen dateibasierten Beschreibung geändert. Die langfristige Stabilität von LaTEX ist auch der Grund, warum ein Artikel von Joachim Schrod mit dem Titel The Components of TE X [154] immer noch die beste Quelle für umfassendere Erläuterungen zu einem auf TEX basierenden Satzsystem ist. Die folgende Beschreibung setzt voraus, dass man mit einem Standarddateisystem vertraut ist, in dem der „Dateityp“ durch eine „Dateierweiterung“ angegeben wird. Beim Verarbeiten eines Dokumentes liest und schreibt LaTEX verschiedene Dateien, von denen einige in anderen Anwendungen weiterverarbeitet werden. Die entsprechenden Dateitypen sind in Tabelle 1.1 aufgelistet und die schematische Darstellung in Abbildung 1.1 zeigt den Informationsfluss hinter den Kulissen (auf den Seiten 9 und 10). Die offensichtlichsten wichtigen Dateien in jedem auf LaTEX basierenden Dokumentationsprojekt sind die Quelldateien für die Eingabe. Dabei handelt es sich typischerweise um eine Masterdatei, die auf weitere untergeordnete Dateien zugreift (siehe Abschnitt 2.1). Diese Dateien haben meistens die Erweiterung .tex (Programmdokumentationen für LaTEX verwenden üblicherweise die Erweiterung .dtx; siehe Kapitel 14). Sie sind im Allgemeinen als „reine Textdateien“ bekannt, da sie mit jedem einfachen Texteditor erstellt werden können. Häufig werden mithilfe der in Abschnitt 10.2 beschriebenen graphicsSchnittstelle externe Graphikdateien in ein gesetztes Dokument eingebunden. LaTEX benötigt zudem verschiedene Dateien mit Struktur- und Layoutdefinitionen: Klassendateien mit der Erweiterung .cls; Optionsdateien mit der Erweiterung .clo; Paketdateien mit der Erweiterung .sty (siehe Anhang A). Viele von ihnen werden bei der grundlegenden Einrichtung des Systems installiert, andere können jedoch auch von einzelnen Anwendern zur Verfügung gestellt werden. Zu LaTEX gehören fünf Standarddokumentenklassen: article, report, book, slides und letter. Diese Dokumentenklassen lassen sich durch die Inhalte anderer Dateien anpassen, die entweder in Klassenoptionen oder durch das Laden zusätzlicher Pakete festgelegt werden. Das Verfahren wird im Abschnitt 2.1 beschrieben. Außerdem verwenden viele LaTEX-Dokumente implizit Sprachdefinitionsdateien des babel-Systems mit der Erweiterung .ldf (für „language definition file“, siehe Kapitel 9) und Kodierungsdefinitionsdateien der Pakete inputenc und fontenc mit der Erweiterung .def (siehe Kapitel 7). Die Informationen, die LaTEX über die zu setzenden Glyphen benötigt, befinden sich in TE X-Fontmetrikdateien (Erweiterung .tfm). Sie enthalten jedoch nicht die Formen der Glyphen, nur ihre Maße. Welche Fontdateien von LaTEX benötigt werden, wird in Fontdefinitionsdateien (Erweiterung .fd) gespeichert. Beide Dateiarten werden im Bedarfsfalle automatisch geladen. Kapitel 7 enthält nähere Informationen zu Fontressourcen. TEX benötigt noch einige weitere Dateien, denen man mit noch größerer Wahrscheinlichkeit niemals direkt begegnen wird. Eine solche Datei ist zum Beispiel die LaTEX-Formatdatei latex.fmt, welche die zentralen LaTEXAnweisungen enthält, die bereits zur Verarbeitung mit dem TEX-Formatie-
Dokumenteingabe
Struktur und Layout
Fontressourcen
Das LATEX-Format
7
1
EINLEITUNG
Formatierte Ausgabe
Querverweise
Fehler, Warnungen und informelle Meldungen
Indexieren
Literaturverweise und Bibliographie
8
rungsprogramm vorkompiliert sind. In einigen Situationen muss dieses Format neu kompiliert werden – etwa wenn die Silbentrennungsregeln für LaTEX geändert wurden (die mit der Datei language.dat konfiguriert werden; siehe Abschnitt 9.5.1), und natürlich, wenn ein neuer LaTEX-Kernel eingesetzt wird. Wie ein solches Format im Einzelnen generiert wird, ist von der jeweiligen TEX-Installation abhängig, so dass in diesem Buch keine näheren Einzelheiten dazu beschrieben werden. LaTEX selbst erzeugt eine Reihe interner Dateien (siehe unten) sowie eine sehr wichtige Datei, die alle von TEX erzeugten Informationen über das Dokument in seiner gesetzten Form enthält. Diese letztendlich von TEX, generierte Datei stellt das formatierte Dokument in einem geräteunabhängigen Format („device-independent“, Erweiterung .dvi) dar. TEX positioniert Glyphen und Linien mit einer wesentlich größeren Genauigkeit als 0,01µm (1/4.000.000 Zoll). Aus diesem Grund kann das von TEX ausgegebene Material definitiv als unabhängig von den Fähigkeiten jedes physikalischen Ausgabegerätes angesehen werden – daher der Name. Einige TEX-Varianten, wie etwa pdfTEX [159, 161] und VTEX [169], können andere geräteunabhängige Dateiformate erzeugen; unter anderem das Portable Document Format (PDF), der Adobe Acrobat-Familie. Das Dateiformat .dvi gibt nur die Namen von Zeichensätzen und die Positionen ihrer Glyphen an – es enthält keine Daten über die Form der Glyphen. Das Dateiformat .pdf kann auch Informationen zu ihrer Gestalt enthalten. Einige der internen Dateien enthalten Code, der dazu dient, Informationen von einem LaTEX-Lauf für den nächsten zur Verfügung zu stellen, wie zum Beispiel für Querverweise (Hilfsdateien mit der Erweiterung .aux für „auxiliary“; siehe Abschnitt 2.3) und zum Setzen bestimmter Elemente eines Dokumentes wie etwa des Inhaltsverzeichnisses (Erweiterung .toc für „table of contents“), des Abbildungs- (.lof, „list of figures“) und des Tabellenverzeichnisses (.lot, „list of tables“). Andere Dateien gehören zu bestimmten Paketen (wie etwa minitoc, Abschnitt 2.3.6, oder endnotes, Abschnitt 3.2.7) oder zu anderen Teilen des Systems (siehe unten). Abschließend erzeugt TEX eine Protokolldatei mit der Erweiterung .log, in der all seine Aktivitäten aufgeführt sind. Diese Datei enthält eine Unmenge an Informationen, wie zum Beispiel die Namen der gelesenen Dateien, die Seitenzahlen der verarbeiteten Seiten, Warn- und Fehlermeldungen sowie weitere relevante Daten, die insbesondere für die Fehlersuche nützlich sind (siehe Anhang B). Eine Datei mit der Erweiterung .idx enthält einzelne, unsortierte Einträge, die zu einem Index verarbeitet werden sollen. Diese Einträge müssen mit einem Programm wie MakeIndex oder xindy (siehe Kapitel 11) sortiert, zusammengestellt und vereinheitlicht werden. Die sortierte Version wird typischerweise als Datei (mit der Erweiterung .ind) gespeichert, die wiederum als Eingabedatei für LaTEX dient. Die Indexstildatei für das Programm makeindex hat die Erweiterung .ist und seine Protokolldatei die Erweiterung .ilg. Bei xindy haben die Stildateien die Erweiterung .xdy, für die Protokolldatei gibt es keine impliziten Namenskonventionen. Daten für Literaturverweise (siehe Kapitel 12) in einem Dokument werden von LaTEX normalerweise in die Hilfsdatei (.aux) geschrieben. Anhand dieser Daten werden zunächst die erforderlichen Informationen aus einer
1.2 Das heutige System
Dateityp Dokumenteingabe
Übliche Dateierweiterung(en)
.tex .dtx .ltx .bbl .ind / .gnd
Text Bibliographie Index / Glossar
Graphiken
interne externe
Weitere Eingabedaten
.tex .ps .eps .tif .png .jpg .gif .pdf
Layout und Struktur Kodierungsdefinitionen Sprachdefinitionen Fontzugriffsdefinitionen Konfigurationsdaten
Interne Kommunikation (Ein- und Ausgabe)
Hilfsdaten Inhaltsverzeichnis Abbildungs- / Tabellenverzeichnis
Low-Level TE X-Eingabe
Format Fontmetriken
Ausgabe
formatiertes Ergebnis Protokoll
Bibliographie (BIBTE X)
Eingabe / Ausgabe Datenbank / Stil / Protokoll
Index (MakeIndex)
Eingabe / Ausgabe Stil / Protokoll
.clo .cls .sty .def .ldf .fd .cfg .aux .toc .lof / .lot .fmt .tfm .dvi .pdf .log .aux / .bbl .bib / .bst / .blg .idx / .ind .ist / .ilg
Tabelle 1.1: Übersicht über die von TEX und LATEX verwendeten Dateitypen
Literaturdatenbank extrahiert und sortiert. Die sortierte Version wird dann als Bibliographiedatei mit der Erweiterung .bbl gespeichert und wieder an LaTEX übergeben. Arbeitet das System zu diesem Zweck mit BIBTEX (siehe Kapitel 13), dann haben die Literaturdatenbankdateien die Erweiterung .bib und die Verarbeitungsinformationen sind in einer Bibliographiestildatei (Erweiterung .bst) gespeichert. Die entsprechende Protokolldatei hat die Erweiterung .blg. Da TEX gewissen Einschränkungen unterliegt und insbesondere nicht mit Graphiken umgehen kann, ist es häufig notwendig, die Formatierung einiger Elemente des gesetzten Dokumentes erst dann abzuschließen, wenn TEX bereits alles positioniert und diese Informationen in die .dvi-Datei geschrieben \special-Befehle hat. Dies geschieht normalerweise, indem man zusätzliche Informationen und verwenden Anweisungen für externe Programme an der richtigen „geometrischen Position im gesetzten Dokument“ platziert, und zwar mithilfe des TEX-Basisbefehls \special, der einfach nur dafür sorgt, dass die jeweilige Information an der richtigen Stelle in der .dvi-Datei vorliegt (siehe Kapitel 10). Bei dieser Information kann es sich ganz schlicht um den Namen einer Graphikdatei
9
1
EINLEITUNG
Dokumenteingabe (tex)
aux toc lof ...
LaTEX-Format (fmt)
TEX verarbeitet ein LaTEX-Dokument
Interne Dateien
bbl ind ...
Kernelcode (latex.ltx) Trennmuster (language.dat) . . . Sonstiges
Struktur, Layout, Sprache (cls sty ldf) Fontmetriken (tfm) Fontdefinitionen (fd) Eingabekodierungsdefinitionen (def)
Zugehörige Anwendungen
Protokoll (log)
Formatierte Ausgabe (dvi pdf)
PostScript (ps)
Bildschirm
Drucker
Online
Abbildung 1.1: Datenfluss im LATEX-System
handeln oder es können Anweisungen in einer Graphikbeschreibungssprache sein. Das zurzeit gängigste sekundäre Formatierungsprogramm ist ein PostScript PostScript-Interpreter. Um diese Methode verwenden zu können, müssen alle von TEX in die .dvi-Datei geschriebenen Daten, einschließlich derjenigen in \special-Befehlen, in PostScript umgewandelt werden. Alle LaTEX-Systeme verfügen über Anwendungen, die dies können. Sobald das Dokument von TEX erfolgreich verarbeitet (und möglicherweiSehen heißt glauben se in PostScript umgewandelt) wurde, möchte man sich den formatierten Text wahrscheinlich ansehen. Das geschieht normalerweise auf dem Bildschirm. Eine genaue Überprüfung der gedruckten Ausgabe sollte jedoch immer anhand eines Papierausdrucks in höchstmöglicher Auflösung erfolgen. Die Anwendungen zur Darstellung auf dem Bildschirm sind immer noch (Stand Ende 2003) von System zu System recht unterschiedlich. Einige benötigen eine .dvi-Datei, andere verwenden .ps-Dateien. Zurzeit ist es besonders beliebt, mit .pdf-Dateien zu arbeiten, vor allem, wenn das formatierte Dokument elektronisch verbreitet werden soll. Hin und wieder lässt sich feststellen, dass einige Anwendungen wesentlich bessere Bildschirmausgaben erzeugen als andere. Das liegt oft an den Qualitätsgrenzen der jeweils eingesetzten Technologie und an der Verfügbarkeit geeigneter Schriften.
10
1.3
Wie man dieses Buch verwendet
1.3 Wie man dieses Buch verwendet Der letzte Abschnitt dieses Kapitels zeigt, wie dieses Buch aufgebaut ist, welchen typographischen Konventionen es folgt und wie man am besten mit den Beispielen in diesem Buch arbeiten kann.
1.3.1 Was steht wo? Es folgt eine Zusammenfassung der Themengebiete, die in den einzelnen Kapiteln und Anhängen behandelt werden. Im Prinzip kann man alle Kapitel unabhängig voneinander lesen, da gegebenenfalls überall Verweise auf zusätzliche Informationen an anderen Stellen des Buches erfolgen. Kapitel 1
gibt eine kurze Einführung in das LaTEX-System und seine Geschichte und erläutert auf den noch folgenden Seiten die in diesem Buch verwendeten typographischen Konventionen.
Kapitel 2
erklärt durch welche Befehle (Markup) der Aufbau eines Dokumentes festgelegt wird, einschließlich der Gliederungsbefehle und Querverweise.
Kapitel 3
beschreibt die grundlegenden Textsatzbefehle in LaTEX.
Kapitel 4
erklärt, wie man das visuelle Layout der Seiten auf verschiedene Weise beeinflussen kann.
Kapitel 5
zeigt, wie man Material auf einzelnen und mehreren Seiten in Spalten und Zeilen anordnet – kurz gesagt, es behandelt Tabellen aller Art.
Kapitel 6
befasst sich mit Gleitobjekten und der Formatierung ihrer Legenden.
Kapitel 7
erläutert das LaTEX-Fontauswahlschema in allen Einzelheiten und zeigt, wie man neue Schriften einbindet.
Kapitel 8
beschäftigt sich mit dem Setzen von Formeln, besonders mit den von der American Mathematical Society unterstützten Paketen.
Kapitel 9
beschreibt die LaTEX-Unterstützung für mehrsprachige Texte und besonders das babel-System.
Kapitel 10 behandelt die einfacheren Graphikerweiterungen für LaTEX und die Verwendung von PostScript. Kapitel 11 erklärt, wie man einen Index vorbereitet und setzt. Dabei werden die Programme makeindex und xindy beschrieben. Kapitel 12 beschreibt, wie LaTEX die verschiedenen gebräuchlichen Verweisschemata für Bibliographien unterstützt. Kapitel 13 erläutert, wie man Literaturdatenbanken zusammen mit LaTEX verwendet und wie man den Wünschen der Verleger entsprechende Bibliographien erzeugt.
11
1
EINLEITUNG
Kapitel 14 legt dar, wie man LaTEX-Dateien dokumentiert und wie man solche von anderen bereitgestellte Dateien benutzt. Anhang A
befasst sich damit, wie man mit den grundlegenden Programmierstrukturen von LaTEX umgeht und diese manipuliert, und wie man Klassen- und Paketdateien erzeugt.
Anhang B
erklärt, wie man Probleme aufspürt und löst.
Anhang C
zeigt, wie man die in diesem Buch beschriebenen Pakete und Systeme erhält und welche Supportsysteme verfügbar sind.
Anhang D
stellt kurz die LB2 TEX-CD-ROM (am Ende des Buches) vor.
An einigen Stellen befasst sich dieses Buch auch mit „Low-Level“-TEX, das eigentlich nichts in einem Buch über LaTEX zu suchen hat. Nach Kenntnis der Autoren wurden viele dieser Informationen jedoch noch nie im „LaTEX-Kontext“ behandelt, obwohl sie sehr wichtig sind. Außerdem wird hier davon ausgegangen, dass es nicht besonders sinnvoll ist, die Leser einfach auf andere Bücher wie The TE Xbook zu verweisen, da die meisten dort gegebenen Ratschläge zu Plain-TEX sich entweder nicht direkt auf LaTEX übertragen lassen oder sogar zu unterschwelligen Fehlern führen. In einigen Abschnitten wurde daher versucht, die Themen durch zusätzliche, im Zusammenhang mit LaTEX relevante und nützliche Informationen über die zugrunde liegende TEX-Engine zu in sich geschlossenen Einheiten abzurunden.
1.3.2 Typographische Konventionen Es ist wichtig, dass Informationen bereits durch ihre Darstellungsform ihre Funktion im Rahmen des Textes vermitteln. Daher werden hier die in diesem Buch verwendeten typographischen Konventionen erläutert. Befehle, Umgebungen, Im gesamten Text werden LaTEX-Befehle und -Umgebungsnamen in eiPakete . . . ner dicktengleichen (nicht proportionalen) Schrift gesetzt (z.B. \caption , enumerate, \begin{tabular}), während Namen von Paket- und Klassendateien in serifenloser Schrift erscheinen (z.B. article). Befehle, die an einem Computer vom Anwender eingegeben werden sollen, werden in einer dicktengleichen Schrift gezeigt und sind unterstrichen (z.B. Bitte eingeben). Syntaxbeschreibungen Die Syntax komplexerer LaTEX-Befehle wird in einem rechteckigen Kasten wiedergegeben. Die Befehlsargumente sind kleingeschrieben und werden kursiv gesetzt:
\titlespacing*{befehl }{links }{oberhalb}{unterhalb}[rechts] Optionale Argumente in LaTEX werden durch eckige Klammern angezeigt und der Stern deutet auf eine Variante hin (ist also auch optional). Entsprechend besagt der vorige Kasten, dass der Befehl \titlespacing in vier verschiedenen Formen auftreten kann:
\titlespacing{befehl }{links }{oberhalb}{unterhalb} \titlespacing{befehl }{links }{oberhalb}{unterhalb}[rechts ] \titlespacing*{befehl }{links }{oberhalb}{unterhalb} \titlespacing*{befehl }{links }{oberhalb}{unterhalb}[rechts ]
12
1.3
Wie man dieses Buch verwendet
Bei manchen Befehlen sind nicht alle Kombinationen optionaler Argumente und/oder Sternformen gültig. In diesem Falle werden alle gültigen Alternativen explizit zusammen aufgeführt, wie z.B. die LaTEX-Gliederungsbefehle:
\section*{titel }
\section[toc-eintrag]{titel }
Hier darf das optionale Argument toc-eintrag nicht in der Sternform verwendet werden; dadurch ergeben sich die folgenden gültigen Formen:
\section*{titel } \section{titel } \section[toc-eintrag]{titel } Zeilen, die Beispiele mit LaTEX-Befehlen enthalten, werden leicht einge- Codebeispiele . . . rückt und in einer dicktengleichen Schrift gesetzt, die etwas kleiner ist, als der übrige Text:
\addtocontents{lof}{\protect\addvspace{10pt}} \addtocontents{lot}{\protect\addvspace{10pt}} Meistens erfolgen jedoch vollständige Beispiele, die Seite an Seite mit der von . . . mit Ausgabe . . . ihnen erzeugten Ausgabe erscheinen:
Bsp. 1-3-1
Die rechte Spalte enthält den von LATEX zu verarbeitenden Quelltext, wobei Präambelmaterial blau dargestellt wird. In der linken Spalte sieht man das gesetzte Resultat.
\usepackage{ragged2e} Die rechte Spalte enthält den von \LaTeX{} zu verarbeitenden Quelltext, wobei Präambelmaterial blau dargestellt wird. In der linken Spalte sieht man das gesetzte Resultat.
Man beachte, dass alle Präambelbefehle im Quelltext der Beispiele immer blau abgedruckt sind. Für den Fall, dass zum Verdeutlichen eines Sachverhaltes mehrere Seiten . . . für mehrere Seiten erforderlich sind, werden (Teile von) „Doppelseiten“ angezeigt, die normaler- . . . weise eingerahmt sind, um zu zeigen, dass es sich um mehrere Seiten handelt.
1 EIN TEST
Bsp. 1-3-2
1 EIN TEST
1 Ein Test
wird.
Text für unsere Seite, der immer und immer wieder verwendet
Text für unsere Seite, der immer und immer wieder
Seite 6 von 8
Seite 7 von 8
\usepackage{fancyhdr,lastpage} \pagestyle{fancy} \fancyhf{} % -- alle Bereiche leeren \fancyhead[RO,LE]{\leftmark} \fancyfoot[C]{Seite \thepage\ von \pageref{LastPage}} % \sample definiert wie zuvor \section{Ein Test} \sample \par \sample
Hier sollten einige Dinge beachtet werden: • Die Beispiele sind normalerweise so angeordnet, dass sie die Seiten 6 und 7 zeigen, also eine Doppelseite.
13
1
EINLEITUNG
• Um das Beispiel kurz zu halten, wird normalerweise der Befehl \sample mit einem kurzen Text verwendet. Die Definition dieses Befehls ist entweder Teil des Beispiels oder wird, wie hier angedeutet, aus einem früheren Beispiel wiederholt (was an dieser Stelle einfach gelogen ist, da \sample noch nicht definiert wurde). • Die Ausgabe kann Kolumnentitel am Kopf und am Fuß der „Seiten“ enthalten. Im vorigen Beispiel sind beide vorhanden. . . . mit umfangreicher Ausgabe . . .
In langen Beispielen, bei denen Quelltext und Ausgabe nicht in geeigneter Weise nebeneinander stehen können, wird das folgende Layout verwendet:
\usepackage{ragged2e} Diese lange Zeile wird unansehnlich, wenn man Ein- und Ausgabe zweispaltig nebeneinander setzt. Je nach Inhalt des Beispiels können zwischen Quelltext und Ausgabe noch Erläuterungen stehen (wie hier).
Diese lange Zeile wird unansehnlich, wenn man Ein- und Ausgabe zweispaltig nebeneinander setzt. . . . oder mit Linien zum Andeuten der Ränder
In Kapitel 8 taucht noch ein weiteres Beispielformat auf, in dem die Ränder des Beispiels explizit durch zwei dünne blaue vertikale Linien angezeigt werden. Auf diese Weise soll die genaue Positionierung abgesetzter Formeln und ihrer Tags im Verhältnis zum Textrand besser verdeutlicht werden.
(a + b)3 = (a + b)(a + b)2 = (a + b)(a2 + 2ab + b2 ) = a3 + 3a2 b + 3ab2 + b3
(1)
\usepackage[tbtags]{amsmath} \begin{equation} \begin{split} (a + b)^3 &= (a + b) (a + b)^2 \\ &= (a + b)(a^2 + 2ab + b^2) \\ &= a^3 + 3a^2b + 3ab^2 + b^3 \end{split} \end{equation}
Alle diese Beispiele sind „vollständig“, wenn man in Gedanken eine
\documentclass-Zeile (mit der Klasse article1 als Argument) hinzufügt und den Hauptteil des Beispiels in eine document-Umgebung setzt. Im Buch wurden die einzelnen Beispiele normalerweise zusätzlich mit folgendem Präambelcode gesetzt:
\usepackage[T1]{fontenc} \usepackage{times} \usepackage[scaled]{helvet} \usepackage[ngerman]{babel} \usepackage[ansinew]{inputenc} \addto\captionsngerman {\renewcommand\figurename{Abb.\@}% \renewcommand\listfigurename{Abbildungen}}} 1 Außer bei Beispielen zum \chapter-Befehl, welche die Klassen report oder book erfordern.
14
Bsp. 1-3-3
Bsp. 1-3-4
1.3
Wie man dieses Buch verwendet
Die Fontpakete erzwingen Times Roman und Helvetica, das babel-Paket wird für korrekte Silbentrennung benötigt und das inputenc-Paket, um Umlaute in der Eingabe zu verarbeiten. Die letzten Zeilen sorgen dafür, dass die Beispiele in Kapitel 6 weniger Text erzeugen und so in den schmalen Satzspiegel der Beispiele passen, selbst wenn zwei „Seiten“ nebeneinander gezeigt werden. Auf diese Weise wurden tatsächlich alle (der fast 1000) Beispiele in diesem Buch hergestellt. Beim Verarbeiten des Buches lesen besondere LaTEXBefehle den Quellcode jedes Beispiels und schreiben ihn jeweils in eine externe Datei, wobei automatisch die Zeilen mit der \documentclass und der document-Umgebung hinzugefügt werden. Dadurch wird jedes Beispiel zu einem kleinen aber vollständigen LaTEX-Dokument. Diese Dokumente werden dann extern verarbeitet (mithilfe eines besonderen Mechanismus, der jedes Beispiel so oft wie nötig ausführt, einschließlich des Erzeugens einer Bibliographie durch BIBTEX). Die Ergebnisse werden in kleine EPS-Graphiken konvertiert, die dann beim nächsten Mal, wenn LaTEX das ganze Buch verarbeitet, an den entsprechenden Stellen geladen werden. In Abschnitt 3.4.3 auf Seite 171 ist näher beschrieben, wie dieses Verfahren im Einzelnen umgesetzt wurde. Überall im Buch sind blaue Marginalien im Rand verteilt, damit man bestimmte Informationen, die sonst schwieriger auszumachen wären, leichter ! Obacht / Achtung und aufgepasst! finden kann. In einigen Fällen sind die Marginalien mit einem Warnzeichen versehen, das darauf hinweist, dass man diese Informationen besser lesen sollte, auch wenn man den entsprechenden Abschnitt ansonsten nur überfliegt.
1.3.3 Arbeiten mit den Beispielen Dieses Buch wurde mit der Absicht geschrieben, es für die Leser so nützlich wie möglich zu machen. Aus diesem Grunde enthält es fast 1000 vollständige, in sich abgeschlossene Beispiele zu allen Bereichen des Setzens, die in diesem Buch behandelt werden. Diese Beispiele sind als Quellcode auf CTAN unter der Adresse info/ examples/lb2 erhältlich und zudem im Verzeichnis Books/lb2/examples auf der Begleit-CD-ROM zu diesem Buch enthalten. Die Beispiele sind nach Abschnitten durchnummeriert und die jeweilige Nummer wird in einem kleinen Kasten im inneren Rand angezeigt (wie etwa 1-3-4 für das Beispiel auf der vorherigen Seite). Die Namen der externen Dateien setzen sich aus eben diesen Nummern und der Erweiterung .ltx für einseitige bzw. .ltx2 für doppelseitige Beispiele zusammen. Um die Beispiele weiterzuverwenden, reicht es normalerweise, den Präambelcode (blau) in die Präambel des eigenen Dokumentes zu kopieren, und falls nötig, den Text des Dokumentes wie gezeigt anzupassen. In manchen Fällen ist es vielleicht auch besser, den Präambelcode in sein eigenes Paket (oder die eigene Klassendatei) aufzunehmen, so dass man dieses Paket mittels \usepackage in mehreren Dokumenten laden kann. Will man Letzteres tun, so muss man zwei Dinge beachten: • Jeder \usepackage-Befehl im Präambelcode muss durch den für Paketund Klassendateien geeigneten Befehl \RequirePackage ersetzt werden (siehe Abschnitt A.4.5).
15
1
EINLEITUNG
• Alle \makeatletter- und \makeatother-Befehle müssen aus dem Präambelcode entfernt werden. Das ist sehr wichtig, da eine solche Datei ansonsten nach \makeatother nicht mehr richtig gelesen werden kann. Angenommen man möchte den Quellcode des folgenden Beispiels weiterverwenden (was besonders für mathematisch interessierte Leser nützlich sein könnte):
1 Gleichungen. . . (a + b)2 = a2 + 2ab + b2 (.) (a − b)2 = a2 − 2ab + b2 (.)
2 . . . abschnittsweise (a + b)(a − b) = a2 − b2 (.)
\makeatletter % ‘@’ jetzt normaler "Buchstabe" \@addtoreset{equation}{section} \makeatother % ‘@’ wieder als Sonderzeichen \renewcommand\theequation{\oldstylenums{\thesection}% .\oldstylenums{\arabic{equation}}} \section{Gleichungen\ldots} \begin{equation} (a+b)^2 = a^2 + 2ab + b^2\end{equation} \begin{equation} (a-b)^2 = a^2 - 2ab + b^2\end{equation} \section{\ldots abschnittsweise} \begin{equation} (a+b)(a-b) = a^2 -
b^2
\end{equation}
In diesem Fall gibt es zwei Möglichkeiten: Man kann den Präambelcode (also den blauen Quellcode) in die eigene Dokumentenpräambel kopieren, oder man kann diesen Code – ohne \makeatletter und \makeatother – in eine Paketdatei (z.B. reseteqn.sty) aufnehmen und dieses „Paket“ dann mit \usepackage{reseteqn} in der Präambel der eigenen Dokumente laden.
16
Bsp. 1-3-5
2
K A P I T E L
Die Struktur eines LATEX-Dokumentes 2.1 2.2 2.3 2.4
Der Aufbau der Quelldateien . . Gliederungsbefehle . . . . . . . . . Der Aufbau von Verzeichnissen. Verweise in Dokumenten . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
17 24 48 69
Hinter LaTEX steht unter anderem die Idee, das Layout eines Dokumentes so weit wie möglich von seiner Struktur zu trennen, so dass sich der Autor auf den Inhalt konzentrieren kann und sich keine Gedanken über das spätere Aussehen des Dokumentes machen muss [106]. In diesem Kapitel wird erklärt, wie dieses grundlegende Prinzip in LaTEX umgesetzt wird. Im ersten Abschnitt dieses Kapitels wird gezeigt, wie sich Dokumentenklassen, Pakete, Optionen und Präambelbefehle auf die Struktur und das Layout eines Dokumentes auswirken. Zunächst werden die logischen Elemente eines Dokumentes insgesamt betrachtet. Dann wird genauer dargelegt, wie Gliederungsbefehle und ihre Argumente die hierarchische Struktur festlegen und Gliederungsnummern sowie automatisch generierte Kopf- oder Fußzeilen (lebende Kolumnentitel) erzeugen. Anhand von Beispielen werden verschiedene Wege zum Setzen von Überschriften gezeigt. Ebenso wird erklärt, wie man ein Inhaltsverzeichnis zusammenstellt und die Form von Inhalts-, Tabellenund Abbildungsverzeichnissen seinen eigenen Vorstellungen anpassen kann. Der letzte Abschnitt schließlich gibt eine Einführung in LaTEX-Befehle, mit denen sich Querverweise organisieren lassen, sowie deren Geltungsbereiche.
2.1 Der Aufbau der Quelldateien Mit LaTEX lassen sich sehr unterschiedliche Dokumente erzeugen, wie z.B. Artikel, Briefe oder Overheadfolien. Dabei wird schnell deutlich, dass für verschiedene Dokumente auch unterschiedliche logische Strukturen notwendig
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
sind. Diese wiederum erfordern verschiedene Befehle und Umgebungen. Deshalb werden Dokumente in Klassen gleicher Struktur eingeteilt, die allerdings nicht notwendigerweise das gleiche typographische Erscheinungsbild aufweisen. Die Klasse, zu der ein Dokument gehört, wird am Anfang einer LaTEX-Datei durch den Befehl \documentclass festgelegt, dessen obligatorisches Argument den Namen der Dokumentenklasse angibt. Die Dokumentenklasse legt die verfügbaren logischen Befehle und Umgebungen sowie deren Standardformatierung fest (z.B. \chapter in der Klasse report). Mithilfe einer Liste von Klassenoptionen im optionalen Argument lässt sich diese Formatierung verändern. Die Klassenoption 11pt wird z.B. von den meisten Dokumentenklassen erkannt und bewirkt, dass LaTEX elf Punkt als Standardschriftgröße für ein Dokument wählt. Viele der LaTEX-Befehle, die in diesem Buch beschrieben werden, sind nicht nur für eine bestimmte Klasse vorgesehen, sondern können zusammen mit verschiedenen Klassen verwendet werden. Eine Sammlung solcher Befehle ist ein Paket. Die Verwendung bestimmter Pakete in einem LaTEX-Dokument wird durch einen oder mehrere \usepackage-Befehle hinter \documentclass angegeben. Genau wie die Deklaration \documentclass hat \usepackage ein obligatorisches Argument, das den Namen des Paketes angibt, und ein optionales Argument, das eine Liste von Paketoptionen enthalten kann. Die Paketoptionen beeinflussen das Verhalten des Paketes. Die Dokumentenklassen und Pakete sind externe Dateien mit den Erweiterungen .cls bzw. .sty. Der Code für Optionen wird manchmal in separaten Dateien gespeichert (im Falle von Klassenoptionen mit der Erweiterung .clo). Normalerweise wird er jedoch direkt in die Klassen- oder Paketdatei integriert (Anhang A enthält weitere Informationen über das Deklarieren von Optionen in Klassen und Paketen). Datei- und Optionsname müssen bei Optionen nicht identisch sein. So gehören z.B. in der Klasse article die Datei size11.clo und in der Klasse book die Datei bk11.clo zu der Option 11pt. Befehle, die im Bereich zwischen der \documentclass-Deklaration und Die \begin{document} stehen, befinden sich in der so genannten DokumentenDokumentenpräambel präambel. In diesem Bereich müssen alle Stilparameter definiert werden, entweder in Paket- oder Klassendateien oder direkt im Dokument, und zwar vor dem Befehl \begin{document}, der einige der globalen Parameter initialisiert. Eine typische Dokumentenpräambel könnte folgendermaßen aussehen:
\documentclass[twocolumn,a4paper]{article} \usepackage{multicol} \usepackage[ngerman,french]{babel} \addtolength\textheight{3\baselineskip} \begin{document} Diese Dokumentenpräambel weist dem Dokument die Klasse article zu und legt fest, dass das Layout durch den Formatierungsbefehl twocolumn (zweispaltig setzen) und die Option a4paper (Papierformat A4) beeinflusst wird. Der erste \usepackage-Befehl informiert LaTEX darüber, dass dieses Dokument Befehle und Strukturen aus dem Paket multicol enthält. Außerdem wird das Paket babel mit den Optionen ngerman (Unterstützung der deutschen
18
2.1 Der Aufbau der Quelldateien
Sprache, neue Rechtschreibung) und french (Unterstützung der französischen Sprache) geladen. Und schließlich wurde die Standardtexthöhe des Dokumentes um drei Zeilen vergrößert. Nicht zum Standard gehörige LaTEX-Pakete enthalten in der Regel Veränderungen, Erweiterungen oder Verbesserungen1 gegenüber Standard-LaTEX, während Befehle in der Präambel nur Änderungen für das aktuelle Dokument definieren. Dadurch ergeben sich mehrere Möglichkeiten, das Layout eines Dokumentes zu verändern: • Änderung der voreingestellten Parameterwerte einer Klasse durch Optionen für diese Klasse. • Verwendung von einem oder mehreren Paketen in einem Dokument. • Änderung der Parametereinstellungen in einem Paket durch Optionen für dieses Paket. • Definieren von eigenen, lokalen Paketen mit speziellen Parametereinstellungen und Laden dieser Pakete mit dem Befehl \usepackage nach dem Paket oder der Klasse, die sie verändern sollen (wie im nächsten Abschnitt erklärt). • Änderung von Einstellungen in der Präambel zur Feineinstellung. Wenn man sich intensiver mit LaTEX auseinandersetzen möchte, gibt es darüber hinaus natürlich die Möglichkeit, zu verschiedenen Zwecken eigene Pakete zu definieren, welche wiederum über Optionen gesteuert werden können. Nähere Informationen hierzu befinden sich in Anhang A.
2.1.1 Verwenden von Paketen und Optionen Das heutige LaTEX unterscheidet klar zwischen deklarierten Optionen (für Klassen oder Pakete) und allgemeinen Paketdateien. Letztere müssen mit dem Befehl \usepackage angegeben werden. Optionen sind Eigenschaften eines gesamten Dokumentes (wenn sie mit \documentclass verwendet werden) oder eines einzelnen Paketes (wenn sie mit \usepackage verwendet werden). Eine Option kann nur dann mit \usepackage verwendet werden, wenn diese Option auch von dem jeweiligen Paket deklariert wird. Andernfalls gibt LaTEX die Fehlermeldung aus, dass die fragliche Option dem gegebenen Paket unbekannt ist. Optionen für \documentclass werden etwas anders gehandhabt. Eine Option, die nicht von der jeweiligen Klasse deklariert wird, gilt als „globale Option“. Alle Optionen von \documentclass (deklarierte und globale) werden automatisch als Klassenoptionen an die \usepackage-Befehle übergeben. Wenn 1 Viele dieser Pakete sind mittlerweile de facto zu Standards geworden und werden in diesem Buch beschrieben. Das bedeutet jedoch nicht zwangsläufig, dass Pakete, die hier nicht beschrieben werden, weniger wichtig, nützlich oder von geringerer Qualität sind, oder dass sie nicht verwendet werden sollten. Die Autoren konzentrieren sich lediglich auf einige der gängigeren Pakete und erklären zu den anderen, welche Funktionalität in einem gegebenen Bereich möglich ist.
19
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
also ein Paket, das mit \usepackage geladen wurde, eine dieser Klassenoptionen kennt (d.h. deklariert), kann es entsprechend reagieren. Nicht deklarierte Klassenoptionen werden während der Abarbeitung des jeweiligen Paketes ignoriert. Da alle Optionen in Klassen- oder Paketdateien definiert sein müssen, sind auch ihre Auswirkungen, vom Einstellen interner Schalter bis zum Lesen externer Dateien, durch diese festgelegt. Aus diesem Grund ist ihre Reihenfolge im optionalen Argument von \documentclass oder \usepackage (normalerweise) unwichtig. Mehrere Pakete mit den gleichen Optionen (zum Beispiel auch ganz ohne Optionen) lassen sich mit einem einzigen \usepackage-Befehl laden, indem die Pakete nacheinander, durch Komma getrennt, im obligatorischen Argument angegeben werden. So ist zum Beispiel
\usepackage[german]{babel} \usepackage{multicol}
\usepackage[german]{varioref} \usepackage{epic}
identisch mit
\usepackage[german]{babel,varioref} \usepackage{multicol,epic} Wenn man german als globale Klassenoption angibt, wird der \usepackageBefehl noch einmal verkürzt. In diesem Falle wird die Option german an alle verwendeten Pakete übergeben und dadurch von all den Paketen verarbeitet, die über diese Option verfügen.
\documentclass[german]{book} \usepackage{babel,varioref,multicol,epic} Das setzt natürlich voraus, dass weder multicol noch epic ihr Verhalten ändern, wenn german als Klassenoption angegeben wird. Wenn \begin{document} erreicht ist, werden alle globalen Optionen dahingehend überprüft, ob sie von irgendeinem Paket genutzt wurden. Für nicht genutzte Optionen wird eine Warnung ausgegeben. Wenn eine Option an keiner Stelle genutzt wird, liegt es meistens daran, dass ein Optionsname falsch geschrieben oder ein \usepackage-Befehl, der ein Paket mit dieser Option lädt, gelöscht wurde. Um eine Dokumentenklasse oder ein Paket selbst zu verändern (z.B. indem man Parameter ändert oder einige Befehle neu definiert), sollte der relevante Code in einer separaten Datei mit der Erweiterung .sty gespeichert werden. Diese Datei wird dann mit \usepackage nach dem Paket geladen, dessen Verhalten beeinflusst werden soll (oder, im Falle von Klasseneinstellungen, nach der Dokumentenklasse). Die Veränderungen können statt dessen auch direkt in die Präambel des jeweiligen Dokumentes eingefügt werden. Wenn der eingefügte Code interne LaTEX-Befehle enthält, wie z.B. solche mit einem @-Zeichen im Namen, muss er zwischen den Befehlen \makeatletter und \makeatother stehen. Die Verwendung interner Befehle in der Präambel wird auf Seite 875 ausführlicher besprochen.
20
2.1 Der Aufbau der Quelldateien
2.1.2 Aufteilen von Quelldateien LaTEX-Quelldateien lassen sich mit dem Befehl \include bequem in mehrere Dateien aufteilen. Dadurch können Dokumente in Teilen neu formatiert werden, indem als Argument für den Befehl \includeonly nur die Namen der Dokumente in Teilen Dateien eingesetzt werden, die LaTEX neu formatieren soll. Bei allen anderen neu formatieren mit \include-Befehlen geladenen Dateien liest LaTEX nur die Querverweisinformationen und die aktuellen Werte der Zähler (page, chapter, table, figure, equation. . . ) aus den entsprechenden .aux-Dateien ein, sofern diese bereits in einem früheren Lauf erzeugt wurden. Im folgenden Beispiel will der Anwender nur die Dateien kap1.tex und anh1.tex neu formatieren:
\documentclass{book}
% Dokumentenklasse ‘‘book’’
\includeonly{kap1,anh1} % nur kap1 und anh1 einschließen \begin{document} \include{kap1} \include{kap2} \include{kap3} \include{anh1} \include{anh2} \end{document}
% % % % %
kap1.tex kap2.tex kap3.tex anh1.tex anh2.tex
laden laden laden laden laden
Dabei ist zu beachten, dass LaTEX, wenn es eine mit \include eingebundene Datei nicht findet, lediglich eine Warnung wie "No file anh2.tex" ausgibt und anschließend mit der Formatierung fortfährt. Wenn die Informationen in den .aux-Dateien aktuell sind, ist es somit möglich, nur einen Teil eines Dokumentes zu formatieren und trotzdem im neu formatierten Teil die korrekten Zähler, Querverweise und Seitennummern zu erhalten. Wenn sich jedoch ein Zähler (auch die Seitenzahl für einen Querverweis) im neu formatierten Teil ändert, kann es sein, dass das gesamte Dokument erneut formatiert werden muss, um fortlaufende und korrekte Index-, Verzeichnis- und Literaturverweise zu erhalten. Dokumententeile, die mit \include geladen werden, beginnen auf einer neuen Seite und rufen am Ende den Befehl \clearpage auf. Dadurch bleiben in ihnen enthaltene Gleitobjekte in dem Seitenbereich, der von dem jeweiligen Teil erzeugt wurde. Geeignete Kandidaten für das \include-Verfahren sind damit eher ganze Kapitel eines Buches und nicht so sehr kleine Abschnitte eines Textes. Es ist zwar einerseits von Vorteil, ein längeres Dokument in überschaubare Dateien aufzuteilen, die dann mit einem Texteditor bearbeitet werden können; das teilweise Formatieren sollte jedoch nur mit größter Sorgfalt angewendet werden, und nur als Probelauf für ein oder zwei Kapitel, wenn diese noch nicht fertiggestellt sind. Es gibt letztlich keine andere sichere Methode, eine völlig fehlerfreie Endversion zu erstellen, als das ganze Dokument neu zu formatieren. Dokumente, die sich wegen ihrer Größe nicht in einem einzigen Lauf formatieren lassen, können in mehrere Teile zerlegt werden, um sie dann getrennt voneinander zu verarbeiten. In diesem Falle müssen die einzelnen Teile in der richtigen Reihenfolge und wenn nötig mehrmals formatiert werden, um überall korrekte Querverweise und Seitenzahlen zu erhalten.
21
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Wer mit \include-Befehlen arbeitet, sollte sich einmal das kleine Paket askinclude von Pablo Straub ansehen. Es fragt interaktiv, welche Dateien eingebunden werden sollen. Die entsprechenden Dateien können dann durch Kommas getrennt aufgelistet werden, so wie sie im Argument des Befehls \includeonly erscheinen müssten. Wenn nur die Eingabetaste betätigt wird, dann werden erneut automatisch die Dateien des vorhergehenden Formatierungslaufes verwendet; im ersten Lauf werden durch dieses Vorgehen alle Dateien eingebunden. Bei Eingabe von * werden alle Dateien, durch Eingabe von - wird keine Datei eingebunden. Dadurch muss die zentrale Quelldatei nicht verändert werden, wenn man unterschiedliche Teile eines Dokumentes formatieren möchte; eine Funktionalität, die sich beim Schreiben dieses Buches als ausgesprochen hilfreich erwiesen hat. Das Paket excludeonly von Dan Luecking und Donald Arseneau stellt Ausschließen statt eine Erweiterung der \include-Funktion dar. Es unterstützt den Befehl einbinden \excludeonly , der als Argument eine durch Komma getrennte Liste von \include-Dateinamen erhält und das Einbinden dieser Dateien verhindert. Wenn sowohl \includeonly als auch \excludeonly eingesetzt werden, verbleiben nur noch die Dateien in Verwendung, die von beiden zugelassen werden. In dem Beispiel
Interaktives Einbinden
\includeonly{kap1,kap2,kap3,anh1} \excludeonly{kap2,kap3,anh2} werden nur die Dateien kap1 und anh1 eingebunden. Dieses Verhalten widerspricht eigentlich dem Namen des Paketes, der darauf schließen lässt, dass nur („only“) die in der Liste angegebenen Dateien ausgeschlossen werden. Dieser Effekt wird mithilfe der Option only erzielt, die bewirkt, dass die Angaben von \includeonly ignoriert werden. Das Paket definiert den internen Befehl \@include neu, so dass es nicht zusammen mit anderen Paketen oder Klassen funktioniert, die diesen Befehl ebenfalls modifizieren. So treten z.B. in Kombination mit den Dokumentenklassen paper oder thesis von Wenzel Matiaske Konflikte auf.
2.1.3 Kombinieren mehrerer Dateien Beim Versenden von LaTEX-Dokumenten an andere Personen, ist es häufig erforderlich, lokale oder weniger verbreitete Paketdateien, (z.B. Pakete mit eigenen Änderungen) zusammen mit der Quelldatei zu verschicken. Dabei ist es oft hilfreich, wenn alle zur Formatierung des Dokumentes benötigten Informationen in einer einzelnen Datei zusammengefasst werden können. Zu diesem Zweck verfügt LaTEX über die Umgebung filecontents. Diese Umgebung erhält als einziges Argument den Namen einer Datei1 ; ihr Text ist der Inhalt dieser Datei. Diese Umgebung kann nur vor einer \documentclassDeklaration stehen. Die Tags \begin und \end sollten in der Quelldatei jeweils in einer eigenen Zeile stehen. Es sollte vor allen Dingen nichts direkt dahinter stehen, da ansonsten LaTEX-Fehler auftreten. 1 Wenn keine Erweiterung angegeben wird, entspricht der tatsächliche Name der externen Datei demjenigen, den LaTEX einlesen würde, wenn man die Eingabe als Argument zu \input benutzt, d.h. normalerweise wird die Endung .tex angefügt.
22
2.1 Der Aufbau der Quelldateien
Wenn LaTEX auf diese Umgebung stößt, überprüft es, ob bereits eine Datei mit diesem Namen existiert. Wenn dies nicht der Fall ist, schreibt LaTEX den Inhalt der Umgebung wortgetreu in eine Datei dieses Namens im aktuellen Verzeichnis und gibt eine entsprechende Meldung aus. Wenn die Datei bereits existiert, meldet LaTEX, dass die Umgebung filecontents in diesem Falle ignoriert wurde, weil die Datei schon vorhanden ist. Die so erzeugte Datei wird durch einige Kommentarzeilen (mit % als Kommentarzeichen) eingeleitet, in denen erklärt wird, dass sie von einer filecontents-Umgebung generiert wurde:
%% LaTeX2e file ‘foo.txt’ %% generated by the ‘filecontents’ environment %% from source ‘test’ on 2003/04/16. Für den Fall, dass der Dateiinhalt nicht verändert werden darf – zum Beispiel weil es sich nicht um eine LaTeX-Datei handelt – ist die filecontents*Umgebung besser geeignet, da sie keine zusätzlichen Kommentarzeilen erzeugt. Um eine Liste (fast) aller Dateien zu erhalten, die in einem Dokument verwendet wurden, kann der Befehl \listfiles in der Präambel angegeben werden. So lässt sich auf einfache Weise festhalten, welche Dateien zusammengehören.
2.1.4 optional – Variationen über ein Dokument Manchmal ist es sinnvoll, verschiedene Versionen eines Dokumentes in der gleichen Quelldatei vorzuhalten, besonders dann, wenn der größte Teil des Textes für alle Versionen identisch ist. Das Paket optional von Donald Arseneau stellt die hierzu erforderlichen Funktionen bereit. Die variierenden Textteile werden in der Quelle mit dem Befehl \opt gekennzeichnet. Beim Formatieren werden einige von ihnen ausgewählt. Der Befehl besitzt zwei Argumente: Ein Label oder eine durch Kommas getrennte Liste von Labels, die beschreiben, zu welcher Textvariante ein Abschnitt gehört, sowie den entsprechenden Text, der fallweise gedruckt wird. Da der Text als Argument angegeben wird, darf er keine \verb-Befehle enthalten und alle öffnenden geschweiften Klammern müssen auch wieder geschlossen werden. Dieses Verfahren eignet sich besonders für kürzere Texte. Längere optionale Textteile werden besser in externen Dateien gespeichert, um sie dann, wie in dem folgenden Beispiel, mit den Befehlen \opt und \input fallweise einzubinden. Die zu druckenden Teile können auf verschiedene Weise ausgewählt werden. Das folgende Beispiel zeigt die statische Methode, bei der die gewünschten Varianten als Optionen der \usepackage-Deklaration angegeben werden.
Bsp. 2-1-1
\usepackage[code]{optional} \opt{doc}{Bei Option doc ausgeben.} \opt{code}{Bei Option code ausgeben.} Bei Option code ausgeben. Bei Op- \opt{doc,code}{Bei Option doc oder code ausgeben.} tion doc oder code ausgeben. Immer Immer ausgeben. \opt{}{und diesen Teil nie!} \opt{doc}{\input{examples}} ausgeben. 23
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Alternativ kann man \AskOptions in der Präambel angeben. Dann wird der Anwender jedesmal nach einer Liste von Optionen gefragt. Dieses Verfahren kann jedoch sehr mühsam werden, wenn das Dokument häufig formatiert werden muss. Um die Auswahl der geeigneten Optionen zu erleichtern, kann der Befehl \ExplainOptions definiert werden. In diesem Fall wird vor jeder Abfrage der Optionen der dazugehörige Text angezeigt. Bei LaTEX-Installationen, die anstelle des Dateinamens LaTEX-Code an das Programm durchreichen können, gibt es noch eine dritte Möglichkeit Varianten auszuwählen. Wenn man LaTEX mit der Zeile
latex "\newcommand\UseOption{doc,code}\input{file}" aufruft, werden die Varianten mit den Labels doc und code verwendet, und zwar zusätzlich zu denjenigen, die gegebenenfalls mit \usepackage angegeben wurden. Die Befehlszeile in dem oben angeführten Beispiel eignet sich für UNIX-Systeme. Auf anderen Plattformen benötigt man möglicherweise eine andere Syntax. Das Paket optional wählt die Varianten während der Formatierung mit LaTEX aus. Je nach Anwendung kann ein anderes Verfahren mit einem Präprozessor, der die jeweiligen Varianten aus der zentralen Quelldatei ausliest, besser geeignet sein. Das Programm docstrip eignet sich hier zum Beispiel sehr gut. Im Gegensatz zu anderen Präprozessoren hat es den Vorteil, dass es überall eingesetzt werden kann, wo ein LaTEX-System installiert ist (siehe auch Abschnitt 14.2).
2.2 Gliederungsbefehle Die LaTEX-Standardklassen (d.h. article, report und book) enthalten Befehle und Umgebungen, mit denen die verschiedenen Elemente der hierarchischen Struktur eines Dokumentes definiert werden (z.B. Kapitel, Abschnitte, Anhänge). Jeder dieser Befehle definiert eine Gliederungsebene innerhalb einer Hierarchie und jedes Strukturelement gehört zu einer Ebene. Ein typisches Dokument (wie zum Beispiel ein Artikel) besteht aus einem Titel, einigen Abschnitten, die wahrscheinlich in viele weitere Ebenen untergliedert sind, und einem Literaturverzeichnis. Eine solche Struktur wird mithilfe verschiedener Befehle beschrieben: \maketitle (erzeugt Dokumententitel), Gliederungsbefehlen wie \section und \subsection , sowie der Umgebung thebibliography. Dabei sollten die Gliederungsebenen beachtet werden. Einen \subsection-Befehl sollte man z.B. immer nur innerhalb einer \section verwenden. Umfangreichere Werke (wie Berichte, Anleitungen und Bücher) beginnen mit einer Titelei, sind in Kapitel (und Teile) gegliedert, enthalten Querverweisinformationen (Inhalts-, Abbildungs-, Tabellenverzeichnis und Index) und haben wahrscheinlich Anhänge. In solchen Dokumenten lassen sich Vorspann, Hauptteil und Nachspann leicht voneinander unterscheiden. In der LaTEXKlasse book können diese drei Bereiche mit den Befehlen \frontmatter , \mainmatter und \backmatter explizit gekennzeichnet werden. In anderen Klassen findet man häufig nur den Befehl \appendix , der den Hauptteil vom Nachspann absetzt.
24
2.2
\part (in book und report) \chapter (nur in book und report) \subsection \paragraph
Ebene Ebene Ebene Ebene
−1 0 2 4
Gliederungsbefehle
\part (in article) \section \subsubsection \subparagraph
Ebene Ebene Ebene Ebene
0 1 3 5
Tabelle 2.1: Standardgliederungsbefehle in LATEX
Im Vorspann wird normalerweise die so genannte Sternform der Gliederungsbefehle \section oder \chapter verwendet. Diese Form unterdrückt die Nummerierung von Überschriften. Abschnitte mit vorgegebenen Namen, wie „Einleitung“, „Stichwortverzeichnis“ und „Vorwort“ werden gewöhnlich nicht nummeriert. In den Standardklassen rufen die Befehle \tableofcontents , \listoftables , \listoffigures sowie die Umgebungen theindex und thebibliography intern die Sternform der Befehle \section oder \chapter auf. Standard-LaTEX verwendet die in Tabelle 2.1 aufgeführten Gliederungsbefehle. Der Befehl \chapter definiert die Gliederungsebene null in der hierarchischen Struktur eines Dokumentes, der Befehl \section Ebene eins und so fort. Der optionale Befehl \part definiert die Ebene minus eins (oder null in Klassen, die den Befehl \chapter nicht verwenden). Nicht alle diese Befehle werden in allen Dokumentenklassen definiert. Die Klasse article kennt keinen \chapter-Befehl und die Klasse letter unterstützt überhaupt keine Gliederungsbefehle. Darüber hinaus können Pakete weitere Gliederungsbefehle für zusätzliche Ebenen oder Varianten der vorhandenen Ebenen definieren. Im Allgemeinen führen die Gliederungsbefehle automatisch eine oder mehrere der folgenden Aktionen aus: • Erzeugen der Gliederungsnummer entsprechend der aktuellen hierarchischen Ebene. • Speichern der Überschrift als Eintrag für das Inhaltsverzeichnis (in einer .toc-Datei). • Speichern der Überschrift für die (mögliche) Verwendung in lebenden Kolumnentiteln. • Formatieren der Überschrift. Alle Gliederungsbefehle, die Überschriften erzeugen, haben eine einheitliche Syntax, die hier anhand des Befehls \section dargestellt wird:
\section*{titel }
\section[toc-eintrag]{titel }
Die Sternform (z.B. \section*{...}) unterdrückt die Nummerierung von Überschriften und erzeugt keinen Eintrag im Inhaltsverzeichnis oder im Kolumnentitel. In der zweiten Form wird das optionale Argument toc-eintrag verwendet, wenn der Text für Inhaltsverzeichnis und Kolumnentitel von der gedruckten Überschrift abweicht. Bei dieser Variante richtet sich die Nummerierung nach dem aktuellen Wert des Zählers secnumdepth, der im nächsten Abschnitt ausführlicher besprochen wird.
25
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Probleme beim manuellen Formatieren
Wenn man versucht TEX mit dem „~“-Symbol oder dem Befehl \\ anzuweisen, wie eine bestimmte Überschrift über mehrere Zeilen umbrochen werden soll, können dabei Nebenwirkungen auftreten, wenn das Inhaltsverzeichnis formatiert oder der lebende Kolumnentitel erzeugt wird. In diesem Falle ist die einfachste Lösung, die Überschrift ohne Formatierungsbefehle im optionalen Argument des Gliederungsbefehls zu wiederholen. Der verbleibende Teil dieses Abschnitts befasst sich dann mit der Frage, in welcher Weise das Erscheinungsbild von Überschriften verändert werden kann. Es wird z.B. gezeigt, wie man einen Befehl, etwa \section , mit der oben beschriebenen Syntax so definiert, dass er, falls gewünscht, einen Eintrag im Inhaltsverzeichnis erzeugt, gleichzeitig eine breite Linie über die Überschrift setzt oder kursiv gesetzte Zeichen normaler Größe anstatt einer größeren fetten Schrift verwendet. Zunächst zeigen einige Beispiele, wie die Nummerierung von Überschriften verändert werden kann. Weitere Beispiele demonstrieren dann, wie Informationen zu Überschriften ins Inhaltsverzeichnis eingetragen werden. Und schließlich werden Änderungen des allgemeinen Überschriftenlayouts diskutiert, sowie die Möglichkeiten, diese mit LaTEX zu definieren.
2.2.1 Nummerieren von Überschriften
Überschriften nicht nummerieren
Alle Überschriften nummerieren
26
Beim Nummerieren verwendet LaTEX einen eigenen Zähler für jede Gliederungsebene und stellt daraus die Nummer für die jeweilige Überschrift zusammen. Eine der am häufigsten gewünschten Änderungen bei der Nummerierung von Überschriften bezieht sich wohl auf die Gliederungsebene, bis zu welcher eine Nummerierung erfolgen soll. Die entsprechende Ebene wird durch einen Zähler namens secnumdepth festgelegt. Je höher der Wert des Zählers ist, desto mehr Gliederungsebenen werden nummeriert. In manchen Dokumenten werden z.B. gar keine Überschriften nummeriert. Anstatt in diesem Falle immer die Sternform der Gliederungsbefehle zu verwenden, ist es viel einfacher, den Zähler secnumdepth in der Präambel auf -2 zu setzen. Dieses Verfahren hat den Vorteil, dass weiterhin ein Eintrag im Inhaltsverzeichnis erfolgen kann und dass die Argumente der Gliederungsbefehle in lebenden Kolumnentiteln erscheinen können. Wie bereits zuvor erwähnt, werden diese Funktionen bei der Sternform unterdrückt. Um alle Überschriften bis herunter zu \subparagraph, oder wie auch immer die tiefste Gliederungsebene einer Klasse heißen mag, zu nummerieren, sollte es normalerweise reichen, den Zähler auf einen genügend hohen Wert zu setzen (zum Beispiel sollte im Allgemeinen eine Deklaration wie \setcounter{secnumdepth}{10} ausreichend sein). Der Befehl \addtocounter schließlich, eröffnet eine einfache Methode, einige Ebenen mehr oder weniger zu nummerieren, ungeachtet der Ebenennummer der entsprechenden Gliederungsbefehle. Wenn man zum Beispiel eine weitere nummerierte Ebene benötigt, dann kann man einfach \addtocounter{secnumdepth}{1} in die Dokumentenpräambel schreiben, ohne dass man den richtigen Wert nachschlagen muss. Zu jedem Gliederungsbefehl gehört ein eigener, (normalerweise) gleichnamiger Zähler (so hat z.B. der Befehl \subsection den Zähler subsection). Dieser Zähler enthält die aktuelle (formatierte) Nummer des entsprechenden Gliederungsbefehls. So repräsentieren zum Beispiel in der Klasse report die
2.2
Gliederungsbefehle
Befehle \chapter , \section , \subsection , usw. die hierarchische Struktur des Dokumentes, während ein Zähler wie subsection festhält, wie häufig \subsection im aktuellen Abschnitt (\section) verwendet wurde. Normalerweise gilt: Wird ein Zähler einer gegebenen hierarchischen Ebene um eins erhöht, so wird der Zähler der jeweils nachgeordneten Ebene (d.h. mit der nächsthöheren Ebenennummer) wieder auf null gesetzt. In der Klassendatei report befinden sich z.B. folgende Deklarationen:
\newcounter{part} % \newcounter{chapter} % \newcounter{section}[chapter] % \newcounter{subsection}[section] % \newcounter{subsubsection}[subsection]% \newcounter{paragraph}[subsubsection] % \newcounter{subparagraph}[paragraph] %
(-1) (0) (1) (2) (3) (4) (5)
Teile Kapitel Abschnitte Unterabschnitte ... weitere Ebenen ...
Diese Befehle legen das Verhältnis der verschiedenen Zähler zueinander fest. Der Zähler der Ebene eins (section, Abschnitt) wird zurückgesetzt, wenn der Zähler der Ebene null (chapter, Kapitel) hochgesetzt wird. Entsprechend wird der Zähler der Ebene zwei (subsection, Unterabschnitt) zurückgesetzt, wenn der Zähler von Ebene eins (section, Abschnitt) hochgesetzt wird. Das gleiche Verfahren wird bis hinunter zu dem Befehl \subparagraph angewendet. Dabei ist zu beachten, dass der Zähler part bei Standardklassen völlig von den anderen Zählern getrennt ist und keine Auswirkungen auf Gliederungsbefehle niedrigerer Ebenen hat. Dadurch werden Kapitel (\chapter) in den Klassen book oder report oder Abschnitte (\section) in der Klasse article fortlaufend nummeriert, selbst wenn zwischen ihnen ein \part-Befehl vorkommt. Dies lässt sich leicht ändern, indem man die Deklaration für den entsprechenden Zähler durch folgenden Ausdruck ersetzt:
\newcounter{chapter}[part] Das Verhalten eines bereits existierenden Zählers kann analog mit dem Befehl \@addtoreset verändert werden (siehe Anhang A.1.4), z.B.:
\@addtoreset{chapter}{part} Da diese Anweisung ein @-Zeichen enthält, kann sie nur innerhalb einer Paketdatei oder in der Dokumentenpräambel zwischen den Befehlen \makeatletter und \makeatother gegeben werden (vgl. die Erklärung auf Seite 875). Zu jedem Zähler in LaTEX, einschließlich der Abschnittszähler, gibt es einen Befehl aus dem Namen des Zählers und dem Präfix \the , der den Wert des jeweiligen Zählers in formatierter Fassung ausgibt. Im Falle der Gliederungsbefehle wird er wie in der nachfolgenden Definition dazu verwendet, die vollständige Nummerierung zu erzeugen:
\renewcommand\thechapter{\arabic{chapter}} \renewcommand\thesection{\thechapter.\arabic{section}} \renewcommand\thesubsection{\thesection.\arabic{subsection}} 27
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
In diesem Beispiel gibt \thesubsection den Befehl \thesection, gefolgt von einem Punkt und dem Zähler subsection in arabischen Ziffern aus. Diese Art der aufeinander aufbauenden Definition vereinfacht die Änderung der Zählerdarstellung, da Änderungen lediglich an einem Ort vorgenommen werden müssen. Wenn zum Beispiel Abschnitte mit Großbuchstaben nummeriert werden sollen, muss nur der Befehl \thesection neu definiert werden:
A Anders als sonst \renewcommand\thesection{\Alph{section}}
A.1 Auch hier Aufgrund der Standardeinstellungen verändert sich nicht nur die Abschnittsnummerierung; auch Gliederungsbefehle niedrigerer Ebenen übernehmen dieses Format der Abschnittsnummer.
\section{Anders als sonst} \subsection{Auch hier} Aufgrund der Standardeinstellungen verändert sich nicht nur die Abschnittsnummerierung; auch Gliederungsbefehle niedrigerer Ebenen übernehmen dieses Format der Abschnittsnummer.
Bsp. 2-2-1
Indem man also die Befehle ändert, die festlegen, wie ein Zähler dargestellt wird, verändert man die Nummer, die von dem entsprechenden Gliederungsbefehl generiert wird. Das Format lässt sich auf diese Weise jedoch nicht beliebig ändern. Angenommen, man möchte die Nummerierung einer Abschnittsüberschrift eingerahmt darstellen, dann könnte man als direkten Lösungsansatz, ausgehend von dem oben gezeigten Beispiel, \thesubsection neu definieren, z.B.:
\renewcommand\thesubsection {\fbox{\thesection.\arabic{subsection}}} Dieser Weg ist jedoch nicht korrekt, wie man sieht, wenn man auf einen solchen Abschnitt verweisen will.
3.1
Ein Fehler
Ein Querverweis in diesem Format erzeugt ein lustiges Ergebnis, wie man mit einem Blick auf Unterabschnitt 3.1 sieht. Man erhält einen eingerahmten Verweis.
\renewcommand\thesubsection {\fbox{\thesection.\arabic{subsection}}} \setcounter{section}{3} \subsection{Ein Fehler}\label{falsch} Ein Querverweis in diesem Format erzeugt ein lustiges Ergebnis, wie man mit einem Blick auf Unterabschnitt~\ref{falsch} sieht. Man erhält einen eingerahmten Verweis.
Mit anderen Worten: Die Befehle, die das Erscheinungsbild der Zähler bestimmen, werden von LaTEX auch für Querverweise herangezogen (zu den Befehlen \label , \ref siehe Abschnitt 2.4). Sie dürfen also nur leicht verändert werden, damit sie auch im Zusammenhang mit dem Befehl \ref ein sinnvolles Ergebnis erzeugen. Um Gliederungsnummern zu umrahmen ohne dabei die Ausgabe von \ref zu beeinträchtigen, muss der interne LaTEX-Befehl \@seccntformat neu definiert werden. Dieser bestimmt das Format des Zählers in einer Abschnittsüberschrift. Die Standarddefinition von \@seccntformat setzt die \the-Entsprechung eines Abschnittszählers (d.h. im oben genannten Beispiel verwendet sie den Befehl \thesection), gefolgt
28
Bsp. 2-2-2
2.2
Gliederungsbefehle
von einem festen horizontalen Abstand von 1em. Um das Problem zu lösen, sollte also das oben gezeigte Beispiel folgendermaßen umformuliert werden:
1 So ist es richtig Bsp. 2-2-3
Ein Querverweis auf einen Abschnitt erzeugt mithilfe dieser Definition einen korrekten Verweis auf Abschnitt 1.
\makeatletter \renewcommand\@seccntformat[1]{\fbox {\csname the#1\endcsname}\hspace{0.5em}} \makeatother \section{So ist es richtig}\label{sec:OK} Ein Querverweis auf einen Abschnitt erzeugt mithilfe dieser Definition einen korrekten Verweis auf Abschnitt~\ref{sec:OK}.
Durch den Befehl \@seccntformat wird nun ausschließlich die Nummer in der Abschnittsüberschrift mit einem Rahmen versehen, so dass die Querverweise richtig dargestellt werden.1 Gleichzeitig wurde der Abstand zwischen Rahmen und Text auf 0.5em reduziert (anstatt der Standardeinstellung von 1em). Die Definition von \@seccntformat wirkt sich auf alle Überschriften aus, die mit dem Befehl \@startsection definiert werden. Dieser wird im nächsten Abschnitt erklärt. Wenn man also mit unterschiedlichen Definitionen von \@seccntformat für unterschiedliche Überschriften arbeiten will, muss man jede Überschriftendefinition entsprechend anpassen.
2.2.2 Formatieren von Überschriften LaTEX verfügt über den generischen Befehl \@startsection, mit dem sich eine Vielzahl von Überschriftenlayouts definieren lassen. Um einen Gliederungsbefehl zu erstellen oder zu verändern, sollte man zunächst prüfen, ob dies mithilfe von \@startsection möglich ist. Wenn das gewünschte Layout nicht auf diesem Wege erzielt werden kann, lassen sich mit \secdef Abschnittsformate mit beliebigem Layout erzeugen. Man kann Überschriften grob in zwei große Gruppen unterteilen: abgesetzte und eingebettete Überschriften. Abgesetzte Überschriften sind durch vertikale Zwischenräume vom vorhergehenden und vom nachfolgenden Text getrennt – die meisten Überschriften in diesem Buch haben diese Form. Eingebettete Überschriften sind ebenfalls durch einen vertikalen Zwischenraum vom vorhergehenden Text getrennt, der nachfolgende Text beginnt jedoch in der gleichen Zeile wie die Überschrift selbst und ist nur durch einen horizontalen Zwischenraum abgetrennt.
Bsp. 2-2-4
Eingebettete Überschriften. Dieses Beispiel zeigt, wie eine eingebettete Überschrift aussieht. Der Absatztext, der auf die Überschrift folgt, setzt die gleiche Zeile fort.
\paragraph{Eingebettete Überschriften.} Dieses Beispiel zeigt, wie eine eingebettete Überschrift aussieht. Der Absatztext, der auf die Überschrift folgt, setzt die gleiche Zeile fort.
1 Der Befehl \@seccntformat verwendet als Argument die Kennung der Gliederungsebene. Diese wird an das Präfix the angefügt, und daraus erzeugen \csname und \endcsname, die zum Generieren von Befehlen dienen, den benötigten Darstellungsbefehl. In dem gezeigten Beispiel wird der Befehl \@seccntformat mit dem Argument section aufgerufen und so der Ersetzungstext \fbox{\csname thesection\endcsname}\hspace{0.5em} generiert. Weitere Informationen über den Befehl \csname bietet das TE Xbook [87].
29
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
. . . end of last line of preceding text. !beforeskip! + \parskip (of text font) + \baselineskip (of heading font)
!
indent
3.5 Heading Title
"
afterskip + \parskip (of heading font) + \baselineskip (of text font)
! is the start of the after-heading text, which continues on . . . This second line of text following the heading . . . Abbildung 2.1: Layout einer abgesetzten Überschrift (mit layouts erstellt)
Mit dem generischen Befehl \@startsection können beide Überschriftenarten definiert werden. Er hat folgende Syntax:
\@startsection{name}{ebene}{einzug}{vor-abst }{nach-abst }{layout } name Der Name verweist auf den Überschriftenzähler1 und ist Bestandteil des Befehlsnamens zur Generierung von lebenden Kolumnentiteln (siehe Seite 227). Wenn der Name des Zählers zum Beispiel name ist, dann wäre \thename der Befehl, der die aktuelle Nummer der Überschrift generiert und \name mark wäre der Befehl für den lebenden Kolumnentitel. Meistens ist name der Name des entsprechenden Gliederungsbefehls ohne den vorangestellten Backslash – das ist jedoch nicht zwingend erforderlich. ebene Dieses Argument enthält die Ebenennummer des Gliederungsbefehls. Anhand dieser Zahl wird entschieden, ob die Überschrift nummeriert wird (wenn die Zahl kleiner oder gleich secnumdepth ist, siehe Abschnitt 2.2.1 auf Seite 26) und ob sie im Inhaltsverzeichnis erscheint (wenn der Wert kleiner oder gleich tocdepth ist, siehe Abschnitt 2.3.2 auf Seite 52). Sie sollte daher die Position in der Hierarchie der Gliederungsbefehle widerspiegeln, wobei der höchste Gliederungsbefehl der Ebene null entspricht.2 einzug Der Einzug der Überschrift gemessen vom linken Rand; bei einem negativen Wert beginnt die Überschrift im äußeren Rand. Ein positiver Wert rückt alle Zeilen der Überschrift um diesen Abstand ein. vor-abst Der absolute Wert dieses Argumentes legt den vertikalen Abstand vor der Überschrift fest. Bei einem negativen Wert wird der Einzug des nachfolgenden Absatzes unterdrückt. Diese Größe ist elastisch, d.h. sie kann eine Dehn- und Schrumpfkomponente enthalten. Es ist zu beachten, 1 Dieser
Zähler muss existieren; er wird nicht automatisch definiert. hat der Befehl \part in den Klassen book und report die Ebenennummer −1 (siehe Tabelle 2.1). 2 Tatsächlich
30
Bsp. 2-2-5
2.2
Gliederungsbefehle
. . . end of last line of preceding text. !beforeskip! + \parskip (of text font) + \baselineskip (of heading font) indent
Bsp. 2-2-6
afterskip (< 0)
! "3.5 Heading Title second line of text following the heading . . .
"Start of text . . .
Abbildung 2.2: Layout einer eingebetteten Überschrift (mit layouts erstellt)
dass LaTEX vor der Überschrift einen neuen Absatz beginnt, so dass der Wert von \parskip zu diesem Abstand hinzuaddiert wird. nach-abst Dieses Argument gibt den Abstand nach einer Überschrift an. Bei einer abgesetzten Überschrift ist es der vertikale Abstand, bei einer eingebetteten Überschrift der horizontale Abstand. Das Vorzeichen von nachabst legt fest, ob eine abgesetzte (nach-abst > 0) oder eine eingebettete Überschrift (nach-abst ≤ 0) erzeugt wird. Im ersten Fall beginnt ein neuer Absatz, so dass der Wert von \parskip zu diesem Abstand hinzuaddiert wird. Ein unangenehmer Nebeneffekt dieser mehrfachen Verwendung der Werte ist, dass man mithilfe des Befehls \@startsection keine abgesetzte Überschrift erzeugen kann, die zum nachfolgenden Text einen kleineren Abstand als \parskip hat. Wenn man versucht, einen positiven \parskip-Wert durch einen negativen nach-abst zu kompensieren, wird aus der abgesetzten eine eingebettete Überschrift. layout Dieses Argument bestimmt das Textlayout der Überschrift. Es kann beliebige Anweisungen zur Textformatierung enthalten, z.B. \bfseries , \Large oder \raggedright (vgl. die nachfolgenden Beispiele). Die Abbildungen 2.1 und 2.2 zeigen durch das Paket layouts generierte graphische Darstellungen dieser Argumente (Texte auf Englisch) für abgesetzte bzw. für eingebettete Überschriften. Im Folgenden wird anhand praktischer Beispiele gezeigt, wie man mithilfe Eine Hand voll des Befehls \@startsection und seiner Argumente neue Gliederungsbefeh- Beispiele le definieren kann. Angenommen, man möchte den Befehl \subsection der Klasse article so verändern, dass man etwa folgendes Ergebnis erhält:
. . . etwas Text oberhalb. 4.1 Eine Abschnittsüberschrift
Bsp. 2-2-7
Die Überschrift ist in normaler Größe kursiv gesetzt und der Abstand zum vorangehenden Text beträgt genau eine Zeile. Der Abstand zum nachfolgenden Text beträgt eine halbe Zeile und der Text ist nicht eingerückt.
% neue Definition von \subsection siehe unten \setcounter{section}{4}% vorhergehende Abschnitte % simulieren \ldots\ etwas Text oberhalb. \subsection{Eine Abschnittsüberschrift} Die Überschrift ist in normaler Größe kursiv gesetzt und der Abstand zum vorangehenden Text beträgt genau eine Zeile. Der Abstand zum nachfolgenden Text beträgt eine halbe Zeile und der Text ist nicht eingerückt. 31
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Dazu muss \subsection wie folgt definiert werden:
\makeatletter \renewcommand\subsection{\@startsection {subsection}{2}{0mm}% % name, ebene, einzug {-\baselineskip}% % vor-abst {0.5\baselineskip}% % nach-abst {\normalfont\normalsize\itshape}}% % layout \makeatother Das erste Argument ist die Zeichenkette subsection. Es gibt an, dass der entsprechende Zähler für Gliederungsnummern verwendet wird. In der Gliederungshierarchie entspricht dies Ebene zwei. Das dritte Argument ist 0mm, da die Überschrift am linken Rand beginnen soll. Der absolute Wert des vierten Argumentes (vor-abst) gibt an, dass ein Abstand von einer Zeile vor der Überschrift gelassen werden muss. Da der Wert negativ ist, wird der Einzug des nachfolgenden Absatzes unterdrückt. Der absolute Wert des fünften Argumentes (nach-abst) gibt an, dass nach der Überschrift ein Abstand von einer halben Zeile gelassen werden muss. Da der Wert positiv ist, wird eine abgesetzte Überschrift erzeugt. Schließlich wird, entsprechend dem sechsten Argument, die Überschrift kursiv gesetzt und in der gleichen Größe wie der übrige Text des Dokumentes. Diese neue Definition ist eigentlich zu stark vereinfacht: Wie bereits erwähnt, wird der aktuelle Wert von \parskip jeweils zu dem absoluten Betrag von vor-abst und nach-abst hinzuaddiert. In Layouts, in denen dieser Wert nicht null ist, muss er also abgezogen werden, um den gewünschten Abstand zu erhalten. Ein weiteres Layout, das manchmal in Romanen verwendet wird, hat folgende Definition:
\makeatletter \renewcommand\section{\@startsection {section}{1}{1em}% % name, ebene, einzug {\baselineskip}% % vor-abst {-\fontdimen2\font % nach-abst plus -\fontdimen3\font minus -\fontdimen4\font }% {\normalfont\normalsize\scshape}}% % layout \makeatother Diese Definition erzeugt eine eingebettete Überschrift in Kapitälchen. Die Definition des horizontalen Abstandes nach-abst nach der Überschrift verdient eine Erklärung: Es handelt sich dabei um den Wert des dehnbaren Wortzwischenraums, der vom aktuellen Zeichensatz abhängig ist. Der Wert ist negativ gewählt, um eine eingebettete Überschrift zu erzeugen. Der Befehl \fontdimen wird in Abschnitt 7.10.3 auf Seite 439 näher erläutert. Das Ergebnis ist im nächsten Beispiel dargestellt.
. . . etwas Text oberhalb. D ER M ANN rannte von dem Truck weg. Er sah, dass er verfolgt wurde, nämlich von 32
% neue Definition von \section siehe oben \setcounter{secnumdepth}{-2} \ldots\ etwas Text oberhalb. \section{Der Mann} rannte von dem Truck weg. Er sah, dass er verfolgt wurde, nämlich von
Bsp. 2-2-8
2.2
Gliederungsbefehle
Für diese Art von Überschriften sollte natürlich die Nummerierung ausgeschaltet werden, indem man den Zähler secnumdepth auf den Wert -2 setzt. Welche Anweisungen kann man im layout-Argument des Befehls Einfache \@startsection verwenden, um das Überschriftenlayout zu ändern? Abgese- Layoutänderungen für hen von den Fontwechselanweisungen (siehe Kapitel 7), gibt es hier nur wenig Überschriften Auswahl. Der Befehl \centering erzeugt eine zentrierte, abgesetzte Überschrift und die Deklaration \raggedright richtet den Text linksbündig aus. Ebenso lässt sich \raggedleft verwenden, kann aber zu seltsamen Ergebnissen führen. Man kann auch mit \hrule , \medskip , \newpage oder ähnlichen Befehlen arbeiten, um lokale Änderungen vorzunehmen. Das nächste Beispiel zeigt einige mögliche Varianten.
1 Ein sehr langer Titel, der sich im Blocksatz über mehrere Zeilen erstreckt (Voreinstellung) 1.1 Unterabschnitt Die Überschrift ist zentriert und kursiv. 1.2
Unterabschnitt
Die Überschrift ist linksbündig und in serifenloser Schrift gesetzt. 1.3 UNTERABSCHNITT Die Überschrift ist rechtsbündig und in Großbuchstaben gesetzt.
Bsp. 2-2-9
1.4 Unterabschnitt Eine Überschrift mit horizontaler Linie oberhalb.
\makeatletter \newcommand\Csub{\@startsection{subsection}% {2}{0pt}{-\baselineskip}{.2\baselineskip}% {\centering\itshape}} \newcommand\Lsub{\@startsection{subsection}% {2}{0pt}{-\baselineskip}{.2\baselineskip}% {\raggedright\sffamily}} \newcommand\Rsub{\@startsection{subsection}% {2}{0pt}{-\baselineskip}{.2\baselineskip}% {\raggedleft\MakeUppercase}} \newcommand\Hsub{\@startsection{subsection}% {2}{0pt}{-\baselineskip}{.2\baselineskip}% {\hrule\medskip\itshape}} \makeatother \section{Ein sehr langer Titel, der sich im Blocksatz über mehrere Zeilen erstreckt (Voreinstellung)} \Csub{Unterabschnitt} Die Überschrift ist zentriert und kursiv. \Lsub{Unterabschnitt} Die Überschrift ist linksbündig und in serifenloser Schrift gesetzt. \Rsub{Unterabschnitt} Die Überschrift ist rechtsbündig und in Großbuchstaben gesetzt. \Hsub{Unterabschnitt} Eine Überschrift mit horizontaler Linie oberhalb.
In den LaTEX-Standardklassen werden Wörter in langen Überschriften im Blocksatz ausgerichtet und können, falls erforderlich, getrennt werden (siehe Silbentrennung voriges Beispiel). Wenn das nicht erwünscht ist, kann der Randausgleich mit und Zeilenumbrüche der Anweisung \raggedright im layout-Argument des \@startsection- in Überschriften Befehls ausgeschaltet werden. Wenn mit \\ manuelle Zeilenumbrüche erfolgen, muss der Text der Überschrift im optionalen Argument noch einmal ohne Formatierungsanweisungen wiederholt werden. Andernfalls werden die Zeilenumbrüche auch im Inhaltsverzeichnis gesetzt.
33
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
1 Ein sehr langer Titel, der sich im Flattersatz über mehrere Zeilen erstreckt Einzug nach einer Überschrift
Komplexe Überschriftenlayouts
\makeatletter \renewcommand\section{\@startsection{section}% {1}{0pt}{-\baselineskip}{.2\baselineskip}% {\normalfont\Large\bfseries\raggedright}} \makeatother \section{Ein sehr langer Titel, der sich im Flattersatz über mehrere Zeilen erstreckt}
Abschließend einige Worte über den Einzug des ersten Absatzes nach einer abgesetzten Überschrift. Die Standardklassen von LaTEX folgen der angloamerikanischen Tradition und unterdrücken diese Einzüge. Alle Absätze, die unmittelbar auf eine abgesetzte Überschrift folgen, können mithilfe des Paketes indentfirst (David Carlisle) mit einem Einzug versehen werden. In den LaTEX-Standardklassen erzeugen die Gliederungsbefehle der höchsten Ebenen \part und \chapter ihre Überschriften ohne \@startsection, da deren Layout mit diesem Befehl nicht erzeugt werden kann. Ebenso möchte man vielleicht selbst Gliederungsbefehle ohne Einschränkungen konstruieren. Dabei sind jedoch einige Konventionen zu beachten, damit LaTEX beim Ausführen der Befehle alle zum Setzen erforderlichen Schritte vornehmen kann. Der Befehl \secdef bietet beim Definieren solcher Befehle eine einfach zu handhabende Schnittstelle zu den drei möglichen Formen von Abschnittsüberschriften, wie hier anhand des Befehls \headcmd dargestellt wird. Die Definition
\newcommand\headcmd{\secdef\cmda\cmdb} bewirkt folgende Schritte:
\headcmd{titel } aufrufen von \cmda[titel ]{titel } \headcmd[toc-Eintrag]{titel } aufrufen von \cmda[toc-Eintrag]{titel } \headcmd*{titel } aufrufen von \cmdb{titel } Dazu müssen die Befehle \headcmd, \cmda oder \cmdb definiert bzw. umdefiniert1 werden. \cmda besitzt ein optionales Argument, welches den Text für das Inhaltsverzeichnis (.toc-Datei) enthält, während das zweite (obligatorische) Argument, genau wie das einzige Argument von \cmdb, den zu setzenden Überschriftentext enthält. Die Definitionen müssen also die folgende Struktur aufweisen:
\newcommand\headcmd{ ... \secdef \cmda \cmdb } \newcommand\cmda[2][default]{ ... } \newcommand\cmdb[1]{ ... } Ein Beispiel für dieses Verfahren zeigt die nachfolgende vereinfachte Variante des Befehls \appendix . Sie definiert den Befehl \section neu, um Anhangsüberschriften zu erzeugen (durch Aufrufen der Befehle \Appendix oder \sAppendix mittels \secdef). Zudem verändert sie die Darstellung des 1 Umdefiniert für den Fall, dass ein vorhandener Gliederungsbefehl wie \part in der Präambel des Dokumentes geändert wird.
34
Bsp. 2-2-10
2.2
Gliederungsbefehle
Zählers section und setzt diesen auf null zurück. Der veränderte \sectionBefehl beginnt außerdem eine neue Seite mit einem besonderen Seitenlayout (siehe Kapitel 4) und verhindert, dass Gleitobjekte am Kopf der Seite erscheinen. Außerdem wird der Einzug des ersten Absatzes in einem Abschnitt unterdrückt. Dazu wird der Low-Level-Befehl \@afterheading verwendet und die boolesche Variable @afterindent auf false gesetzt. Weiteren Aufschluss zu diesem Thema gibt die \chapter-Implementierung in den Standardklassen (Datei classes.dtx).
\makeatletter \renewcommand\appendix{% \renewcommand\section{% % \section wird neu definiert... \newpage % neue Seite \thispagestyle{plain}% % Seitenzahlen unten \suppressfloats[t]% % keine Gleitobjekte oben \@afterindentfalse % kein Einzug \secdef\Appendix\sAppendix}% % rufe \Appendix oder \sAppendix auf \setcounter{section}{0}% % Abschnittsnummer zurücksetzen \renewcommand\thesection{\Alph{section}}% und alphabetisch nummerieren } Die folgende Definition zeigt, wie \Appendix den Zähler section mithilfe des Befehls \refstepcounter hochsetzt. Letzterer setzt gleichzeitig alle untergeordneten Zähler zurück und definiert den „aktuellen Bezugswert“ für Querverweise (siehe Abschnitt 2.4). Mithilfe des Befehls \addcontentsline wird eine Zeile in die .toc-Datei geschrieben. Außerdem wird die Überschrift formatiert und durch Aufrufen von \sectionmark für lebende Kolumnentitel gespeichert. Der Befehl \@afterheading steuert den Einzug des nachfolgenden Absatzes.
\newcommand\Appendix[2][?]{% % \refstepcounter{section}% % \addcontentsline{toc}{appendix}% % {\protect\numberline {\appendixname~\thesection}#1}% {\raggedleft\large\bfseries \appendixname\ % \thesection\par \centering#2\par}% % \sectionmark{#1}% % \@afterheading % \addvspace{\baselineskip}} %
Komplexe Form: Zähler erhöhen/ Label setzen toc-Eintrag erzeugen
Formatieren des Titels und der Nummer in Kolumnentitel einfügen Steuerung des Einzugs nach-abst
Der Befehl \sAppendix (Sternform) führt lediglich die Formatierung aus.
\newcommand\sAppendix[1]{% {\raggedleft\large\bfseries\appendixname\par \centering#1\par}% \@afterheading \addvspace{\baselineskip}} \makeatother
% Vereinfachte (Stern-) Form
35
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Wenn man diese Definitionen verwendet, erhält man folgendes Ergebnis:
Anhang A Die Liste aller Befehle Dann folgt der Text des ersten Absatzes im Anhang. Und weiterer Text des Anhangs. Und weiterer Text des Anhangs.
% Beispiel benötigt die soeben eingeführten % Befehle! \appendix \section{Die Liste aller Befehle} Dann folgt der Text des ersten Absatzes im Anhang. Und weiterer Text des Anhangs. Und weiterer Text des Anhangs.
Bsp. 2-2-11
Man sollte nicht vergessen, dass das oben gezeigte Beispiel nur die vereinfachte Version des umdefinierten Befehls \section ist. Unter anderem wurde der Zähler secnumdepth, der die Nummerierungstiefe angibt, dabei nicht berücksichtigt. Unter Umständen muss man auch speziellen Code für Mehrspaltenformatierung oder für ein- und zweiseitigen Ausdruck vorsehen.
2.2.3 Ändern von vorgegebenen Überschriften Einige der Standardbefehle für Überschriften erzeugen vordefinierte Texte. Der Befehl \chapter erzeugt z.B. normalerweise die Zeichenfolge „Chapter“ vor dem Überschriftentext, der vom Anwender eingegeben wurde. Ebenso erzeugen einige Umgebungen vorgegebene Überschriften. Die Umgebung abstract fügt z.B. über dem Text des Anwenders das Wort „Abstract“ ein. Diese Zeichenketten werden in LaTEX über Befehle gesteuert (siehe Tabelle 2.2 auf der nächsten Seite), so dass sie auf einfache Weise durch andere bevorzugte Titel ersetzt werden können. Dieses Anpassen wird im folgenden Beispiel gezeigt, wo die Standardbezeichnung „Abstract“ der Dokumentenklasse article gegen das Wort „Zusammenfassung“ ausgetauscht wird.
Zusammenfassung Dieses Buch beschreibt, wie sich das Erscheinungsbild von Dokumenten unter LATEX ändern lässt.
\renewcommand\abstractname{Zusammenfassung} \begin{abstract} Dieses Buch beschreibt, wie sich das Erscheinungsbild von Dokumenten unter \LaTeX{} ändern lässt. \end{abstract}
Bei Verwendung des babel-Systems muss das Umdefinieren nicht wie oben mit \renewcommand , sondern mithilfe des \addto-Befehls geschehen, siehe Beispiel 9-3-2 auf Seite 567. Die Standardklassendateien von LaTEX erzeugen einige weitere Zeichenfolgen. Eine komplette Liste dieser Befehle sowie Erläuterungen zum babelSystem, das diese Texte in über zwanzig Sprachen übersetzt, befindet sich in Abschnitt 9.1.3, insbesondere in Tabelle 9.2 auf Seite 561.
2.2.4 fncychap – Fertige Layouts für Kapitelüberschriften Wer ohne großen Mehraufwand originelle Kapitelüberschriften einsetzen möchte, der kann das Paket fncychap von Ulf Lindgren nutzen. Es enthält sechs verschiedene Layouts für den Befehl \chapter, die sich jeweils mit einer der folgenden Paketoptionen aktivieren lassen: Sonny, Lenny, Glenn,
36
Bsp. 2-2-12
2.2
Befehl
\abstractname \appendixname \bibname \chaptername \contentsname \indexname \listfigurename \listtablename \partname \refname
Gliederungsbefehle
Standard
babel (Option ngerman)
Abstract Appendix Bibliography Chapter Contents Index List of Figures List of Tables Part References
Zusammenfassung Anhang Literaturverzeichnis Kapitel Inhaltsverzeichnis Index Abbildungsverzeichnis Tabellenverzeichnis Teil Literatur
Tabelle 2.2: Sprachspezifische Texte für Überschriften
Conny, Rejne oder Bjarne. Da dieses Paket den Befehl \chapter verändert, kann es nur in Dokumentenklassen eingesetzt werden, die diesen Befehl unterstützen (z.B. mit report und book, nicht aber mit der Klasse article und ihren Derivaten). Im Beispiel werden hier die Ergebnisse der Option Lenny dargestellt.
Kapitel Bsp. 2-2-13
1
Ein Paket-Test
\usepackage[Lenny]{fncychap} \chapter{Ein Paket-Test}
Das Paket bietet auch verschiedene Befehle, mit deren Hilfe die Layouts unterschiedlich abgewandelt werden können. Außerdem enthält es eine kurze Anleitung zum Erstellen eigener Layouts.
2.2.5 quotchap – Mottos für Kapitel Das Paket quotchap von Karsten Tinnefeld stellt eine weitere Möglichkeit dar, Kapitelüberschriften ansprechend zu gestalten. Mit seiner Hilfe kann der Anwender Zitate angeben, die dann oben links im Bereich des Titels für das Kapitel erscheinen. Ein oder mehrere Zitate für das nächste Kapitel werden in der Umgebung savequote vorgehalten. Die Breite des Zitates kann als optionales Argument angegeben werden, wobei der Standardwert 10cm beträgt. Jedes Zitat sollte mit dem Befehl \qauthor enden, das die Quelle angibt. Es ist aber auch möglich, manuell ein eigenes Format festzulegen. Das Paket erzeugt das folgende Standardlayout: Die Zitate sind linksbündig gesetzt, gefolgt von einem vertikalen Abstand, dessen Wert in dem Befehl \chapterheadstartvskip gespeichert ist. Danach folgt eine sehr große Kapitelnummer, die rechtsbündig und in Graustufen (60%) gesetzt
37
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
ist, gefolgt von dem Text der Kapitelüberschrift, der ebenfalls rechtsbündig erscheint. Nach einem weiteren vertikalen Abstand, der mit dem Befehl \chapterheadendvskip festgelegt wird, beginnt der erste Absatz des Kapitels ohne Einzug. Durch Angabe der Paketoption nogrey kann die Nummer in schwarz gesetzt werden. Andere Optionen erlauben es, anstelle der Standardschrift Adobe Bookman einen der frei erhältlichen PostScript-Fonts einzusetzen, wie z.B. Bitstream Charter BT (Option charter) oder Adobe Times (Option times). Stattdessen kann man auch den Befehl \chapnumfont umdefinieren, der den Font für die Kapitelnummer bestimmt. Und schließlich kann man den Font der Kapitelüberschrift beeinflussen, indem man den Befehl \sectfont, wie im Beispiel gezeigt, umdefiniert. Zusammen mit den Änderungsmöglichkeiten durch Umdefinieren der Befehle \chapterheadstartvskip und \chapterheadendvskip lassen sich somit eine Reihe interessanter Layouts erzeugen. Das folgende Beispiel platziert das Zitat durch einen negativen vertikalen Abstand auf gleicher Höhe mit der Kapitelnummer (in Avantgarde) und setzt den Titel und das Zitat in Helvetica. Kekse! Ich will Kekse! Das Krümelmonster
1
Ein Paket-Test Dieses Paket verändert die Kapitelüberschrift radikal.
\usepackage[avantgarde]{quotchap} \renewcommand\chapterheadstartvskip {\vspace*{-5\baselineskip}} % Helvetica für Titel und Zitat wählen \usepackage{helvet} \renewcommand\sectfont{\sffamily\bfseries} \begin{savequote}[10pc] \sffamily Kekse! Ich will Kekse! \qauthor{Das Krümelmonster} \end{savequote} \chapter{Ein Paket-Test} Dieses Paket verändert die Kapitelüberschrift radikal.
Wer seine Kapitelüberschriften mit Zitaten versehen will, aber dabei die Layouts des Paketes fncychap bevorzugt, kann versuchen, beide miteinander zu kombinieren. Dazu muss fncychap nach dem Paket quotchap geladen werden. Die zuvor beschriebenen Einstellungsmöglichkeiten sind dann zwar nicht mehr verfügbar, aber savequote funktioniert weiterhin, auch wenn die Zitate stets in einer festen Position über der Überschrift erscheinen.
2.2.6 titlesec – Ein neuer Ansatz für Überschriften Dieses Kapitel konzentrierte sich bisher auf die Werkzeuge und Mechanismen, die der LaTEX-Kern bereitstellt, um Überschriften zu definieren und zu verändern. Außerdem behandelte es einige Pakete, welche zusätzlich zu den Standardwerkzeugen weitere Funktionen, wie etwa vordefinierte Layouts, bereitstellen. Das Paket titlesec von Javier Bezos verfolgt einen völlig anderen Ansatz, indem es die Gliederungsbefehle, die Überschriften erzeugen, vollständig neu 38
Bsp. 2-2-14
2.2
Gliederungsbefehle
aufsetzt. Javier hebt mit seinem Paket einige der Einschränkungen des ursprünglichen Funktionsumfangs auf und bietet eine klare und generische Schnittstelle. Der Nachteil des Paketes liegt darin, dass es möglicherweise mit einigen Erweiterungen der Originalschnittstellen nicht kompatibel ist. Die Relevanz dieses Punktes hängt eindeutig von der zu bewältigenden Aufgabe ab. Sobald diese Schnittstelle weiter verbreitet ist, dürfte sich die Frage ohnehin erübrigen. Das Paket unterstützt zwei Schnittstellen: Eine einfache für kleinere Veränderungen, die hauptsächlich durch Paketoptionen erzielt werden, und eine erweiterte für umfangreichere Modifikationen. Die Basisschnittstelle Mithilfe der Basisschnittstelle können die Fontcharakteristika aller Überschriften abgewandelt werden. Das geschieht durch Angabe einer oder mehrerer Optionen, Festlegen einer Schriftfamilie (rm, sf, tt), einer Schriftserie (md, bf) oder eines Schriftschnitts (up, it, sl, sc). Die Größe des Titels lässt sich durch eine der folgenden Optionen beeinflussen: big (gleiche Größe wie bei den LaTEX-Standardklassen), tiny (alle, außer Kapitelüberschriften, in normaler Textgröße) oder medium oder small, die Layouts zwischen diesen beiden Extremen erzeugen. Die Ausrichtung wird durch raggedleft, center oder raggedright gesteuert, während die vertikalen Abstände mithilfe der Option compact reduziert werden können. Der Befehl \titlelabel dient zur Formatierung der Gliederungsnummer einer Überschrift. Dabei bezieht sich \thetitle auf den Darstellungsbefehl der aktuellen Gliederungsnummer, wie z.B. \thesection oder \thesubsection . Die Deklaration wird, wie im nächsten Beispiel ersichtlich, auf alle Überschriften angewendet.
1. Ein Abschnitt
Bsp. 2-2-15
\usepackage[sf,bf,tiny,center]{titlesec} \titlelabel{\thetitle.\enspace} 1.1. Ein Unterabschnitt \section{Ein Abschnitt} \subsection{Ein Unterabschnitt} 1.1.1. Eine Passage \subsubsection{Eine Passage} Drei direkt aufeinander folgende Überschrif- Drei direkt aufeinander folgende Überschriften sieht man nicht so häufig \ldots ten sieht man nicht so häufig . . .
\titleformat*{befehl }{layout } Die Basisschnittstelle verwendet eine weitere Deklaration, und zwar \titleformat* , die zwei Argumente besitzt. Das erste Argument (befehl) ist ein Gliederungsbefehl, der hier geändert werden soll. Das zweite Argument (layout) enthält die Formatierungsanweisung für die jeweilige Überschrift. Diese Deklaration bearbeitet individuelle Gliederungsbefehle und überschreibt dabei alle über Optionen des Paketes bestimmten Font- oder Ausrichtungsangaben, wie im folgenden Beispiel die Optionen rm, it und raggedleft. Der letzte Befehl im layout-Argument kann ein Befehl mit einem Argument sein, welcher dann den Text der Überschrift enthält. Im nächsten Beispiel wird diese Funktion verwendet, um den \subsubsection-Titel in Kapitälchen zu 39
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
setzen (auch wenn das in Kombination mit Ziffern normaler Größe ziemlich hässlich aussieht).
1 Ein Abschnitt 1.1 Ein Unterabschnitt 1.1.1
EINE PASSAGE
Drei direkt aufeinander folgende Überschriften sieht man nicht so häufig . . .
\usepackage[rm,it,raggedleft,tiny,compact]{titlesec} \titleformat*{\subsubsection}{\scshape\MakeLowercase} \section{Ein Abschnitt} \subsection{Ein Unterabschnitt} \subsubsection{Eine Passage} Drei direkt aufeinander folgende Überschriften sieht man nicht so häufig \ldots
Die von \part erzeugten Überschriften werden nicht von den Einstellungen an der Basisschnittstelle beeinflusst. Diese lassen sich nur mithilfe der erweiterten Schnittstelle, die im Folgenden beschrieben wird, verändern. Die erweiterte Schnittstelle Die erweiterte Schnittstelle umfasst die zwei Befehle \titleformat und \titlespacing . Mit ihrer Hilfe lassen sich das „innere“ Format (d.h. Fonts, Label, Ausrichtung, . . . ) bzw. das „äußere“ Format (d.h. Abstände, Einzüge, usw.) festlegen. Dies entspricht der Arbeitsweise vieler Anwender, die entweder den einen oder den anderen Aspekt des Layouts verändern wollen.
\titleformat{befehl }[form]{layout }{label-layout }{abstand } {davor-code}[danach-code] Das erste Argument (befehl) ist der Name des Gliederungsbefehls (zum Beispiel \section), dessen Layout geändert werden soll. Anders als beim Befehl \@startsection erwartet dieses Argument den ganzen Befehlsnamen, also mit führendem Backslash. Die anderen Argumente haben folgende Bedeutung: form Die grundlegende Gestaltung der Überschrift. Es gibt eine Reihe vordefinierter Formen: hang, die Standardeinstellung, erzeugt ein hängendes Label (d.h. bei langen Überschriften werden die folgenden Textzeilen um die Breite der Gliederungsnummer eingerückt; wie \section in den Standardklassen), display setzt das Label und den Text der Überschrift in getrennte Zeilen (wie der Standardbefehl \chapter) und runin erzeugt eine eingebettete Überschrift (wie der Standardbefehl \paragraph). Außerdem stehen folgende Formen zur Verfügung, zu denen es in Standard-LaTEX keine Entsprechungen gibt: frame ähnelt display, rahmt jedoch den Titel ein; leftmargin setzt den Titel in den linken Rand und rightmargin setzt ihn in den rechten Rand. Die letzten beiden Formen können Konflikte mit \marginpar-Befehlen erzeugen, d.h. es kann zu Überlappungen kommen. Bei block handelt es sich um eine vielseitig verwendbare Form, welche die Überschrift als einen einzelnen Block setzt. Bei zentrierten Layouts sollte sie hang vorgezogen werden. Bei drop und wrap umfließt der erste Absatz die Überschrift. Während drop die Überschrift in einer Box mit fester Breite setzt (links-Argument
40
Bsp. 2-2-16
2.2
Gliederungsbefehle
von \titlespacing) und dabei falls nötig umbricht, reduziert wrap die Breite dieser Box automatisch auf die längste resultierende Überschriftszeile nach Umbruch. Da die Schnittstelle (für Programmierer) erweiterbar ist, können neuere Versionen des Paketes zusätzliche Formen enthalten. layout Deklarationen, die auf den ganzen Titel, also sowohl Label als auch Text, angewendet werden. Sie können nur im vertikalen Modus erlaubte Befehle enthalten, die ausgeführt werden, nachdem der Leeraum oberhalb der Überschrift erzeugt wurde. Befehle, die nur im horizontalen Modus erlaubt sind, sollten in den Argumenten label-layout oder davor-code verwendet werden. label-layout Die Formatierung des Labels, also der Gliederungsnummer. Die Nummer selbst wird mit \thesection oder dem jeweils entsprechenden Befehl adressiert. Für die Definition von Kapitelüberschriften bietet das Paket den Befehl \chaptertitlename , der, je nach Lage der Überschrift im Dokument, \chaptername oder \appendixname erzeugt. abstand Länge, die den Abstand zwischen Label und Überschriftstext festlegt. Je nach Inhalt des form-Argumentes kann es sich dabei um einen vertikalen oder horizontalen Abstand handeln. Im Falle der Form frame bestimmt es z.B. den Abstand zwischen dem Rahmen und dem Text der Überschrift. davor-code Code, der direkt vor dem Text der Überschrift ausgeführt wird. Sein letzter Befehl kann ein Argument besitzen, das den Text der Überschrift aufnimmt. Dadurch werden auch komplexere Arten der Gestaltung möglich (siehe Beispiel 2-2-19). danach-code Optionaler Code, der nach dem Formatieren des Textes der Überschrift ausgeführt wird (noch im Geltungsbereich der formatDeklarationen). Bei hang, block und display wird er im vertikalen Modus ausgeführt, bei runin im horizontalen Modus. Bei anderen Formen hat er keine Auswirkungen. In der Sternform eines Gliederungsbefehls werden die Argumente label-layout und abstand ignoriert, da keine Nummerierung erfolgt. Das nächste Beispiel zeigt eine eher altmodische, eingebettete Überschrift, für die nur das Format definiert wird und nicht die Abstände um die Überschrift. Letztere werden mit dem Befehl \titlespacing bearbeitet.
Bsp. 2-2-17
§ . Der Titel. Die Überschrift ist durch einen Punkt und einen Abstand von einem Geviert vom Text getrennt.
\usepackage{titlesec} \titleformat{\section}[runin]{\normalfont\scshape} {\S\,\oldstylenums{\thesection}.}{.5em}{}[.\quad] \section{Der Titel} Die Überschrift ist durch einen Punkt und einen Abstand von einem Geviert vom Text getrennt.
Die \section-Überschriften in LaTEX sind standardmäßig nicht eingerückt. (Sie entsprechen normalerweise der form hang). Wenn man bei einer solchen Überschrift einen normalen Absatzeinzug bevorzugt, kann man vor dem \S-Zeichen \indent einfügen oder den Einzug über die \titlespacingDeklaration festlegen, die im Folgenden erklärt wird.
41
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
\titlespacing*{befehl }{links }{oberhalb}{unterhalb}[rechts] Die Sternform des Befehls unterdrückt den Absatzeinzug für den auf die Überschrift folgenden Absatz. Dies gilt nicht für Formen, bei denen Überschrift und Absatztext kombiniert werden, wie z.B. runin und drop. Das Argument befehl beinhaltet den Namen des Gliederungsbefehls, der geändert werden soll. Die weiteren Argumente haben folgende Bedeutung: links Diese Länge gibt an, um wie viel der linke Rand einer Überschrift bei den Formen block, display, hang oder frame vergrößert wird. Im Zusammenhang mit einer ...margin- oder drop-Form bestimmt sie die Breite der Überschrift, bei wrap die maximale Breite des Titels und bei runin den Einzug vor dem Titel (bei einem negativen Wert läuft die Überschrift in den linken Rand hinein). oberhalb Diese Länge gibt den zusätzlichen vertikalen Abstand oberhalb der Überschrift an. unterhalb Diese Länge gibt den Abstand zwischen der Überschrift und dem nachfolgenden Absatz an. Je nach verwendeter Form kann es sich dabei um einen vertikalen oder einen horizontalen Abstand handeln. rechts Diese Länge gibt an, um wie viel der rechte Rand einer Überschrift bei den Formen block, display, hang oder frame vergrößert wird. Die Argumente oberhalb und unterhalb erhalten normalerweise elastische Längen um ein flexibles Layout zu erzielen. Zur Vereinfachung der Deklaration kann man alternativ *f angeben, wobei f ein dezimaler Faktor ist. Diese Angabe entspricht f ex mit einer gewissen Dehnbarkeit sowie einer geringen erlaubten Stauchung im Bereich oberhalb und mit einer noch geringeren Dehnbarkeit und ohne Stauchung im Bereich unterhalb.
. . . etwas Text oberhalb . . . SECTION 1
Ein Titel-Test Dieser Text zeigt, dass der Absatz nicht eingezogen ist und der Titel beidseitig einen Rand von 1 pc aufweist. Werkzeuge für den Randausgleich
42
\usepackage{titlesec} \titleformat{\section}[frame]{\normalfont} {\footnotesize \enspace SECTION \thesection \enspace}{6pt}{\large\bfseries\filcenter} \titlespacing*{\section}{1pc}{*4}{*2.3}[1pc] \ldots etwas Text oberhalb \ldots \section{Ein Titel-Test} Dieser Text zeigt, dass der Absatz nicht eingezogen ist und der Titel beidseitig einen Rand von 1\,pc aufweist.
Das vorige Beispiel stellte den Befehl \filcenter vor. Außerdem gibt es die Befehle \filleft , \filright und \fillast , wobei letzterer einen Absatz im Blocksatz erzeugt, dessen letzte Zeile zentriert ist. Im Zusammenhang mit \titleformat sollten diese Befehle \raggedleft oder \raggedright vorgezogen werden, denn letztere heben die Einstellungen des \titlespacing-Befehls für links oder rechts auf. Man kann stattdessen auch \filinner oder \filouter verwenden, die je nach aktueller Seite zu \filleft oder \filright aufgelöst werden. Da jedoch TEXs Algorithmus zum Erstellen von Seiten asynchron angelegt ist, werden sie nur bei Gliederungsbefehlen unterstützt, die eine neue Seite beginnen, wie z.B. \chapter
Bsp. 2-2-18
2.2
Gliederungsbefehle
in den meisten Layouts. Das Beispiel 2-2-21 auf Seite 46 zeigt eine Lösung für dieses Problem bei anderen Überschriften. Der Befehl \wordsep ist ebenfalls nützlich, um Abstände zu steuern. Er kann in Abhängigkeit von der Größe der Wortzwischenräume (inklusive dehnen und stauchen) für den aktuellen Font Längen festlegen. Der Einzug für den ersten Absatz nach einer Überschrift kann über die Paketoptionen indentafter oder noindentafter global festgelegt werden. In diesem Falle werden die Einstellungen über \titlespacing (Sternform oder nicht) umgangen. Der Standardabstand zwischen zwei aufeinander folgenden Überschriften ist als Wert des Argumentes unterhalb der ersten Überschrift festgelegt. Diese Einstellung lässt sich mit der Option largestsep ändern, welche das Maximum von unterhalb der ersten Überschrift und oberhalb der zweiten Überschrift als Abstand setzt. LaTEX versucht einer Überschrift immer mindestens zwei Zeilen des nächsten Absatzes auf der gleichen Seite folgen zu lassen. Wenn das nicht möglich ist, wird die Überschrift erst auf der nächsten Seite gesetzt. Wem zwei Zeilen nicht ausreichen, der kann mithilfe der Optionen nobottomtitles oder nobottomtitles* festlegen, dass die Überschrift immer dann auf die nächste Seite verschoben wird, wenn der verbleibende Platz auf der Seite kleiner ist als der aktuelle Wert von \bottomtitlespace . Der Standardwert ist ein Fünftel der Texthöhe (.2\textheight). Diese Variable muss mit \renewcommand und nicht mit \setlength eingestellt werden. Die Sternform der Option ist hier zu bevorzugen, da sie den verbleibenden Platz genauer berechnet. Dies gilt allerdings nicht für mit den Formen drop, margin oder wrap erstellte Überschriften, da diese in Zusammenhang mit der Sternform ungünstig positioniert werden können. Bei den meisten Layouts steht die Gliederungsnummer entweder oberhalb oder links der Überschrift. Diese Positionierung kann nicht mithilfe des label-layout-Argumentes von \titleformat geändert werden. Stattdessen muss man sich die Tatsache zunutze machen, dass davor-code den Text der Überschrift aufnehmen kann. Im nächsten Beispiel hat der Befehl \secformat ein Argument, das die Formatierung der Überschrift (Text und Nummer) festlegt. Dieser Befehl wird dann im davor-code-Parameter von \titleformat aufgerufen. Dabei ist zu beachten, dass sich der Fontwechsel für die Nummer nur lokal auswirkt, wenn man sie in geschweifte Klammern setzt. Ohne die Klammern könnte sich die geänderte Schriftgröße unter gewissen Umständen auf die Abstände im Bereich des Titels auswirken.
Ein Titel auf zwei Zeilen Bsp. 2-2-19
1
Hier erscheint die Gliederungsnummer rechts vom Text der Überschrift.
Einzug nach einer Überschrift
Abstand zwischen mehreren Überschriften
Überschriften am Fuß einer Seite
Handhabung besonderer Layouts
\usepackage{titlesec} \newcommand\secformat[1]{% \parbox[b]{.5\textwidth}{\filleft\bfseries #1}% \quad\rule[-12pt]{2pt}{70pt}\quad {\fontsize{60}{60}\selectfont\thesection}} \titleformat{\section}[block] {\filleft\normalfont\sffamily}{}{0pt}{\secformat} \titlespacing*{\section}{0pt}{*3}{*2}[1pc] \section{Ein Titel\\ auf zwei Zeilen} Hier erscheint die Gliederungsnummer rechts vom Text der Überschrift.
43
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Mit dem gleichen Verfahren lassen sich auch noch andere Änderungen am Text der Überschrift herbeiführen. Ein Punkt nach der Überschrift könnte z.B. folgendermaßen erzeugt werden:
\newcommand\secformat[1]{#1.} Er wird dann, wie im vorherigen Beispiel mit dem Befehl \secformat im Argument davor-code der \titleformat-Deklaration aufgerufen. Breite der Überschrift Die Form wrap verfügt über die Möglichkeit, die Breite der einzelnen messen Textzeilen eines Titels zu messen. Sie gibt die Breite der längsten Zeile als \titlewidth aus. Diese Funktionalität kann auf die Formen block, display und hang ausgedehnt werden, indem man das Paket mit der Option calcwidth lädt und \titlewidth nach Bedarf in den \titleformatArgumenten verwendet. Linien und Leitpunkte Für Linien und Leitpunkte stellt das Paket den Befehl \titlerule bereit. Ohne Argumente erzeugt er eine Linie der Dicke .4pt, die sich über die ganze Spalte erstreckt. Dabei werden geänderte Randbereiche aus der \titlespacing-Deklaration berücksichtigt. Mithilfe eines optionalen Argumentes kann man die Dicke der erzeugten Linie festlegen. Mit der Sternform von \titlerule können anstelle von Linien Leitpunkte (d.h. wiederholte Elemente) verwendet werden. Dieser Befehl verwendet ein optionales Argument für die Breite (breite) und ein obligatorisches für den Text (text). Sofern das optionale Argument breite keine andere Breite angibt, wird der Inhalt von text wiederholt gesetzt, und zwar in Boxen mit seiner natürlichen Breite. Andernfalls behalten nur die erste und letzte Box ihre natürliche Breite, um auf beiden Seiten einen sauberen Blocksatz zu gewährleisten. Mithilfe des Befehls \titleline können den \titleformat-Argumenten, die vertikale Inhalte erwarten, horizontale Inhalte hinzugefügt werden. Der Befehl verfügt über ein optionales Argument, das die Ausrichtung festlegt, und ein obligatorisches Argument, das das zu setzende Material enthält. Er erzeugt eine Box mit fester Breite und berücksichtigt durch die \titlespacingDeklaration geänderte Randbereiche. Daher sollte das Material entweder elastische Längen enthalten, oder im optionalen Argument muss eine Ausrichtung angegeben sein (erlaubte Werte sind l, r und c). Die Variante \titleline* setzt zunächst das Material aus seinem obligatorischen Argument in einer Box der Breite \titlewidth (daher müssen hier möglicherweise elastische Abstände eingefügt werden) und verwendet diese Box dann als Eingabe für \titleline , das heißt, sie richtet sie gemäß der Einstellungen im optionalen Argument aus. Gegebenenfalls muss hier die Option calcwidth verwendet werden, damit \titlewidth einen vernünftigen Wert enthält. Das nächste Beispiel ist etwas konstruiert und, obwohl für Übungszwecke hilfreich, für einen tatsächlichen Einsatz nicht zu empfehlen. Hier werden alle Werkzeuge gemeinsam eingesetzt:
\usepackage[noindentafter,calcwidth]{titlesec} \titleformat{\section}[display] {\filright\normalfont\bfseries\sffamily} {\titleline[r]{Abschnitt \Huge\thesection}}
44
% form % layout % label-layout
2.2
{1ex} {\titleline*[l]{\titlerule[1pt]}\vspace{1pt} \titleline*[l]{\titlerule[2pt]}\vspace{2pt}} [{\titleline*[l]{\titlerule*{\tiny\LaTeX}}}] \titlespacing{\section}{1pc}{*3}{*2}
Gliederungsbefehle
% abstand % davor-code % danach-code
Mit diesen Einstellungen erhält man folgende Ausgabe:
Abschnitt
1
Linien und Leitpunkte LATEX LATEX LATEX LATEX LATEX LATEX LATEX LATEX
Bsp. 2-2-20
Die letzte Instanz von \titleline* ist in Klammern gesetzt. Ohne diese Klammern würde das zugehörige optionale Argument frühzeitig das äußere optionale Argument von \titleformat beenden.
% Code wie oben \section{Linien und Leitpunkte} Die letzte Instanz von \verb=\titleline*= ist in Klammern gesetzt. Ohne diese Klammern würde das zugehörige optionale Argument frühzeitig das äußere optionale Argument von \verb=\titleformat= beenden.
Standard-LaTEX betrachtet den Freiraum vor einer Überschrift als gute Position für einen Seitenumbruch, sofern diese Überschrift nicht unmittelbar Umbruch vor einer auf eine andere Überschrift folgt. Der so genannte „Penalty-Wert“, d.h. der Überschrift Wert um den ein Umbruch an dieser Stelle erschwert ist, wird in dem internen Zähler \@secpenalty gespeichert. In vielen Klassen beträgt er -300 (negative Werte geben einen Bonus für den Seitenumbruch an der jeweiligen Stelle). Da für die Überschriften aller Gliederungsebenen der gleiche Penalty-Wert gilt, macht es nur selten Sinn, diese Einstellung zu ändern. Mit titlesec hat man jedoch genauere Steuerungsmöglichkeiten: Falls ein Befehl \namebreak definiert wurde, also etwa \sectionbreak (wobei \name der Name eines Gliederungsbefehls ist), wird letzterer ausgeführt, anstatt die Standard-Penalty hinzuzufügen. So würde
\newcommand\sectionbreak{\clearpage} dazu führen, dass Abschnitte immer am Kopf der Seite erscheinen und zunächst alle aufgelaufenen Gleitobjekte gesetzt werden. Manche Layouts erfordern, dass der Abstand oberhalb einer Überschrift Abstände oberhalb entgegen der Standardeinstellungen auch am Kopf einer neuen Seite erhalten einer Überschrift immer beibehalten bleibt. Dies lässt sich mithilfe einer Definition wie der folgenden erreichen:
\newcommand\sectionbreak{\addpenalty{-300}\vspace*{0pt}} Der Befehl \addpenalty weist auf einen (guten) Platz für einen Seitenumbruch hin. Danach folgt ein Element ohne vertikale Ausdehnung, das nicht verschwinden kann. Dadurch bleibt der Leerraum oberhalb der Überschrift erhalten, selbst wenn der Seitenumbruch an der Penalty erfolgt und die Überschrift damit am Kopf der Seite erscheint.
45
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Bedingte Überschriftenlayouts Bisher wurde besprochen, wie man mit \titleformat und \titlespacing unveränderliche Layouts für Gliederungsbefehle definieren kann. Mithilfe des Paketes titlesec lässt sich das Layout für gerade und ungerade Seiten auch fallweise ändern. Außerdem können spezielle Layouts für nicht nummerierte Überschriften, wie sie die Sternformen der Gliederungsbefehle erzeugen, definiert werden. Dies wird durch eine Kombination von Schlüsselwörtern und entsprechenden Werten für das erste Argument von \titleformat und \titlespacing erreicht. Als Schlüsselwörter sind name, page (mit den Werten odd oder even) und numberless (mit den Werten true oder false) verfügbar. Die Syntax, die bisher verwendet wurde,
\titleformat{\section}{..}... ist eigentlich nur eine Abkürzung der allgemeinen Form
\titleformat{name=\section}{..}... Im Gegensatz zu den Abstandsbefehlen \filinner und \filouter , die nur bei Überschriften am Anfang einer neuen Seite verwendet werden können, lassen sich mit dem Schlüsselwort page Layouts definieren, die sich ohne Einschränkung auf die aktuelle Seite beziehen. Layouts für linke Seiten erfordern den Wert even, solche für rechte Seiten den Wert odd. Diese Einstellungen wirken sich jedoch nur auf Dokumente aus, die mit der Option twoside zweiseitig gesetzt werden. Andernfalls betrachtet LaTEX alle Seiten als rechte Seiten. Im folgenden Beispiel wird die Form block eingesetzt und die Überschrift je nach aktueller Seite nach links oder rechts verschoben. In ganz ähnlicher Weise kann man Überschriften einrichten, die mithilfe der Formen leftmargin und rightmargin im Seitenrand platziert werden.
1. Verso Fülltext auf der aktuellen Seite. Mehr Text auf der Seite.
Fülltext dieser Seite.
auf
2. Recto Mehr Fülltext auf der aktuellen Seite.
\usepackage{titlesec} \titleformat{name=\section,page=odd}[block] {\normalfont}{\thesection.}{6pt} {\bfseries\filleft} \titleformat{name=\section,page=even}[block] {\normalfont}{\thesection.}{6pt} {\bfseries\filright} \section{Verso} Fülltext auf der aktuellen Seite. Mehr Text auf der Seite. \newpage Fülltext auf dieser Seite. \section{Recto} Mehr Fülltext auf der aktuellen Seite.
Auf die gleiche Weise kann man mit dem Schlüsselwort numberless angeben, dass eine bestimmte \titleformat- oder \titlespacing-Deklaration nur für Überschriften mit (bzw. ohne) Nummerierung gilt. Ohne das Schlüsselwort gilt eine Deklaration immer für beide Fälle. Daher überschreibt im nachfolgenden Beispiel die zweite Deklaration einen Teil der ersten. Die recht
46
Bsp. 2-2-21
2.2
Gliederungsbefehle
unterschiedliche Gestaltung der beiden Fälle soll einen Eindruck von der Bandbreite der Möglichkeiten geben. Sie ist nicht als Orientierung für gutes Design gedacht. Es ist wichtig zu wissen, dass weder das label-layout- noch das abstand-Argument ignoriert wird, wenn man numberless, wie im Beispiel zu sehen, auf true setzt. Normalerweise würde man wahrscheinlich {}{0pt} als Werte verwenden.
1. Ein Titel Fülltext auf der Seite. Mehr Fülltext auf der Seite. *** Bsp. 2-2-22
Noch einer
Fülltext auf der Seite.
\usepackage{titlesec} \titleformat{name=\section}[block] {\normalfont}{\thesection.}{6pt}{\bfseries\filright} \titleformat{name=\section,numberless=true}[block] {\normalfont}{***}{12pt}{\itshape\filcenter} \section{Ein Titel} Fülltext auf der Seite. Mehr Fülltext auf der Seite. \section*{Noch einer} Fülltext auf der Seite.
Verändern der Gliederungshierarchie Mit den bisher behandelten Befehlen lassen sich das Format und die Abstände für existierende Gliederungsbefehle einstellen. Mithilfe der \titleclassDeklaration kann man ganz neue Gliederungsbefehle definieren.
\titleclass{befehl }{klasse} \titleclass{befehl }{klasse}[ebene-oberhalb] \titleclass{befehl }[start-ebene]{klasse} (mit der Option loadonly) Es gibt drei Klassen von Überschriften: Die Klasse page enthält Überschriften, die eine ganze Seite füllen (wie etwa \part in den LaTEX-Dokumentenklassen report und book). Die Klasse top enthält Überschriften, die eine neue Seite beginnen und dadurch am Kopf der Seite erscheinen; alle anderen Überschriften werden der Klasse straight zugeordnet. Ohne optionales Argument verändert die Deklaration \titleclass einfach die Klasse für einen existierenden Gliederungs-befehl. So würde z.B.
\titleclass\section{top} dazu führen, dass jeder Abschnitt auf einer neuen Seite beginnt. Wird diese Deklaration jedoch mit dem optionalen Argument ebeneoberhalb verwendet, so führt man damit eine neue Gliederungsebene unterhalb von ebene-oberhalb ein. Alle Gliederungsbefehle, die auf dieser Ebene existieren, werden in der Hierarchie entsprechend eine Ebene heruntergestuft. So führt zum Beispiel
\titleclass\subchapter{straight}[\chapter] die neue Gliederungsebene \subchapter zwischen \chapter und \section ein. Die Deklaration definiert weder ein Layout für diese Überschrift noch
47
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
initialisiert sie den erforderlichen Zähler. Das Layout muss mit einem zusätzlichen \titleformat- und \titlespacing-Befehl definiert werden. Die Zählerdarstellung für \section soll sicherlich ebenfalls aktualisiert werden:
\titleformat{\subchapter}{..}... \titlespacing{\subchapter}{..}... \newcounter{subchapter} \renewcommand\thesubchapter{\thechapter.\arabic{subchapter}} \renewcommand\thesection{\thesubchapter.\arabic{section}} Die dritte Variante von \titleclass wird nur benötigt, wenn man eine vollständig neue Gliederungsstruktur entwerfen möchte, wie z.B. eine Dokumentenklasse, die nicht auf den Standardklassen basiert. In diesem Falle wird das Paket mit der Option loadonly geladen, so dass es nicht versucht, bestehende Gliederungsbefehle mit ihrem aktuellen Layout zu interpretieren. Dann kann man, wie im folgenden Beispiel, mit dem Schreiben von Gliederungsbefehlen beginnen:
\titleclass\EbeneA[0]{top} \titleclass\EbeneB{straight}[\EbeneA] \titleclass\EbeneC{straight}[\EbeneB] \newcounter{EbeneA} \newcounter{EbeneB} \newcounter{EbeneC} \renewcommand\theEbeneB{\theEbeneA-\arabic{EbeneB} \renewcommand\theEbeneC{\theEbeneB-\arabic{EbeneC} \titleformat{name=\EbeneA}{..}... \titlespacing {name=\EbeneA}{..}... \titleformat{name=\EbeneB}{..}... \titlespacing {name=\EbeneB}{..}... Die start-ebene ist normalerweise 0 oder -1. Die Bedeutung dieser Werte ist in der Einleitung zu Abschnitt 2.2 erklärt. Es sollte genau eine \titleclassDeklaration geben, die eben dieses optionale Argument verwendet. Wer auf diese Weise seine eigenen Dokumentenklassen aufbauen möchte, dem sei ein Blick in die Dokumentation des titlesec-Paketes empfohlen. Dort sind weitere Beispiele, sowie nützliche Tipps und Tricks zu finden.
2.3 Der Aufbau von Verzeichnissen Ein Inhaltsverzeichnis (engl. „table of contents“, kurz TOC) ist eine besondere Liste, in der die Titel aller Abschnitte zusammen mit den Zahlen der Seiten, auf denen sie beginnen, ausgegeben werden. Diese Liste kann sehr komplex ausfallen, wenn sie Elemente mehrerer Gliederungsebenen enthält und sie sollte sorgfältig formatiert werden, da sie eine wichtige Navigationshilfe für die Leser darstellt. Ähnliche Listen, jedoch mit Querverweisen zu den Gleitobjekten in einem Dokument sind das Tabellenverzeichnis und das Abbildungsverzeichnis. Der Aufbau dieser Verzeichnisse ist einfacher, da ihre Elemente, die Beschriftungen der Gleitobjekte, normalerweise alle zu einer Ebene gehören (siehe jedoch auch Abschnitt 6.5.2).
48
2.3
Der Aufbau von Verzeichnissen
LaTEX kann diese drei Standardverzeichnisse automatisch erzeugen. Dazu wird Text, der durch eines der Argumente der Gliederungsbefehle generiert wurde, in die .toc-Datei eingetragen. In ähnlicher Weise pflegt LaTEX zwei weitere Dateien, eine für das Abbildungsverzeichnis (.lof) und eine für das Tabellenverzeichnis (.lot), die jeweils den Text aus dem Argument des \caption-Befehls für Abbildungen bzw. Tabellen enthalten. Die Informationen, die LaTEX in einem vorhergehenden Lauf in diese Dateien geschrieben hat, werden in einem weiteren Lauf gelesen und gesetzt (normalerweise an den Anfang eines Dokumentes). Dies geschieht mithilfe folgender Befehle: \tableofcontents , \listoffigures und \listoftables . Um diese Verzeichnisse zu erzeugen, benötigt LaTEX immer mindestens zwei Durchläufe: einen, um die relevanten Informationen zu sammeln und Ein TOC wird in zwei den zweiten um die Informationen wieder einzulesen und an der richtigen oder drei LATEX-Läufen Stelle im Dokument zu setzen. Da somit im zweiten Lauf neues Material ge- erzeugt setzt wird, können sich die Querverweise ändern, so dass ein dritter LaTEX-Lauf erforderlich wird. Das ist einer der Gründe, warum traditionellerweise unterschiedliche Nummerierungen für den Vorspann und den Haupttext verwendet werden: In den Tagen des manuellen Setzens bedeutete jeder zusätzliche Durchlauf eine erhebliche Verteuerung für das Endprodukt. Die folgenden Abschnitte erläutern, wie diese Verzeichnisse gesetzt und generiert werden. Darüber hinaus wird gezeigt, wie man Informationen direkt in die Hilfsdateien eingeben kann, oder wie man sogar eine Zusatzdatei, die völlig unter der Kontrolle des Anwenders steht, öffnet und in diese schreibt.
2.3.1 Eintragen von Daten in Verzeichnisdateien Normalerweise werden die Verzeichnisdateien automatisch von LaTEX generiert. Diese Schnittstelle, die aus den Befehlen \addcontentsline und \addtocontents besteht, kann mit einiger Sorgfalt auch zur direkten Eingabe von Daten genutzt werden.
\addcontentsline{ext }{typ}{text } Der Befehl \addcontentsline schreibt den text mit einigen zusätzlichen Informationen, wie z.B. der Nummer der aktuellen Seite, in eine Datei mit der Endung ext (normalerweise .toc, .lof oder .lot). Zerbrechliche Befehle im Argument text müssen mit \protect geschützt werden. Das typ-Argument ist eine Zeichenfolge, die angibt, welche Art von Verzeichniseintrag vorgenommen wird. Beim Inhaltsverzeichnis (.toc) handelt es sich normalerweise um den Namen des Gliederungsbefehls ohne Backslash, bei .lof- oder .lotDateien wird im Allgemeinen figure oder table angegeben. Die Anweisung \addcontentsline wird normalerweise automatisch durch die Gliederungsbefehle eines Dokumentes oder durch die \captionBefehle der Gleitumgebungen aufgerufen. Leider verfügt die Schnittstelle nur über ein Argument für den variablen Text, so dass es schwierig ist, eine gegebenenfalls vorhandene Objektnummer korrekt zu identifizieren. Da diese Nummern (z.B. die Gliederungsnummern) in einem Inhaltsverzeichnis typischerweise ein besonderes Format benötigen, ist ihre Identifizierung unverzichtbar. Der aktuelle LaTEX-Kern erreicht dieses Ziel mit einem Trick: Er
49
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
umschließt die Nummer im Argument text folgendermaßen mit dem Befehl \numberline:
\protect\numberline{nummer }überschriftstext Ein \caption-Befehl innerhalb einer figure-Umgebung speichert den Text der Bildunterschrift einer Abbildung beispielsweise mit der folgenden Befehlszeile:
\addcontentsline{lof}{figure} {\protect\numberline{\thefigure}bildunterschrift } Aufgrund des \protect-Befehls wird \numberline unverändert in die externe Datei geschrieben, während \thefigure zwischenzeitlich expandiert wird, so dass letztendlich die tatsächliche Zahl für die Nummerierung in die Datei gelangt. Später, beim Formatieren des Verzeichnisses, kann dann die Nummer mit \numberline umformatiert werden, zum Beispiel mit zusätzlichen Abständen oder einer anderen Schrift. Der Nachteil dieser Methode ist, dass sie weniger vielseitig nutzbar ist, als eine Version, die über ein eigenes Argument für die Nummer verfügt. So kann die Nummer z.B. nicht so einfach beliebig manipuliert werden. Außerdem benötigt sie eine geeignete \numberlineDefinition, die leider auch nicht immer verfügbar ist (siehe die Betrachtung in Abschnitt 2.3.2 auf Seite 52). Manchmal wird \addcontentsline in der Quelldatei verwendet, um die Standardfunktionen von LaTEX zu ergänzen. Bei der Sternform eines Gliederungsbefehls erfolgt z.B. kein Eintrag in der .toc-Datei. Wenn man also keine nummerierte Überschrift wünscht (Sternform), wohl aber einen Eintrag in der .toc-Datei, kann man wie im folgenden Beispiel \addcontentsline mit oder ohne \numberline verwenden.
Inhaltsverzeichnis 1 Gedanken Vorwort
1
Wir finden sie alle in [1].
1 Gedanken 1.1 Kontaktdaten
2 2
1.1 Kontaktdaten
Literatur
2
E-Mail an Ben unter [2].
Literatur
Vorwort Eine Überschrift mit manuellem Verzeichniseintrag. Vergleiche mit dem Bibliographieeintrag. 1
[1] Ben User, Später wann ist das?, 2010 [2]
[email protected] 2
50
\tableofcontents \section*{Vorwort} \addcontentsline{toc}{section} {\protect\numberline{}Vorwort} Eine Überschrift mit manuellem Verzeichniseintrag. Vergleiche mit dem Bibliographieeintrag. \section{Gedanken} Wir finden sie alle in \cite{k1}. \subsection{Kontaktdaten} E-Mail an Ben unter \cite{k2}. \begin{thebibliography}{9} \addcontentsline{toc} {section}{\refname} \bibitem{k1} Ben User, Später wann ist das?, 2010 \bibitem{k2}
[email protected] Bsp. \end{thebibliography} 2-3-1
2.3
Der Aufbau von Verzeichnissen
Wenn man \numberline wie im „Vorwort“ einsetzt, erhält man einen eingerückten „section“-Eintrag im Inhaltsverzeichnis. Der Platz, an dem normalerweise die Nummer stehen würde, bleibt dabei frei. Wenn man den \numberline-Befehl, wie beim Bibliographieeintrag, weglässt, wird die Überschrift stattdessen direkt an den linken Rand gesetzt. Wenn man nach dem Beginn von theindex eine ähnliche Zeile hinzufügt, wird dadurch auch der „Index“ im Inhaltsverzeichnis aufgeführt. Leider kann man mit diesem Ansatz nicht die Abbildungs- oder Tabellenverzeichnisse im Inhaltsverzeichnis auflisten, da die Befehle \listoffigures bzw. \listoftables möglicherweise mehrseitige Verzeichnisse generieren und dadurch die Seitenzahl in \addcontentsline falsch sein könnte. Es hilft auch nicht, den Code vor den Befehl zu setzen, da diese Verzeichnisbefehle häufig eine neue Seite beginnen. Eine mögliche Lösung wäre, die Befehlsdefinition aus der Klassendatei zu kopieren und \addcontentsline direkt dort einzufügen. Im Verbund mit Standardklassen oder sehr ähnlichen Derivaten kann man das Paket tocbibind von Peter Wilson einsetzen, um die Abschnitte Bibliographie oder „. . . -verzeichnis“, „Index“, oder „Bibliographie“ ohne weitere Änderungen der Index im Quelldatei im Inhaltsverzeichnis aufzuführen. Das Paket bietet eine Reihe Inhaltsverzeichnis von Optionen, wie z.B. notbib, notindex, nottoc, notlof und notlot (den entsprechenden Eintrag nicht ins Inhaltsverzeichnis einfügen) sowie numbib und numindex (den entsprechenden Abschnitt nummerieren). Standardmäßig wird der Abschnitt „Inhalt“ ebenfalls im Inhaltsverzeichnis aufgeführt, was nur selten wünschenswert ist. Dieses Verhalten lässt sich mithilfe der Option nottoc abstellen.
\addtocontents{ext }{text } Der Befehl \addtocontents besitzt kein typ-Argument und ist dazu gedacht, besondere Formatierungsdaten, die sich nicht direkt auf eine Inhaltszeile beziehen, zu übergeben. Der Standardklassenbefehl \chapter setzt zusätzliche Leerräume in die .lof- und .lot-Dateien, um die Einträge verschiedener Kapitel voneinander abzusetzen:
\addtocontents{lof}{\protect\addvspace{10pt}} \addtocontents{lot}{\protect\addvspace{10pt}} Durch den Einsatz von \addvspace werden Einträge aus unterschiedlichen Kapiteln um genau 10pt von einander abgesetzt, ohne dass unschöne Lücken entstehen, wenn ein Kapitel keine Zeichnungen oder Tabellen enthält. Aus diesem Beispiel ist jedoch auch ein gewisses Risiko der Schnittstelle ersichtlich: Auch wenn die Befehle \addcontentsline , \addtocontents Mögliche Probleme und \addvspace scheinbar normale Anwenderbefehle sind (sie enthalten mit \addvspace kein @-Zeichen in ihren Namen), so können sie doch sehr leicht seltsame Fehler produzieren.1 Es ist besonders zu beachten, dass \addvspace nur im vertikalen Modus verwendet werden kann. Daher kann eine Zeile wie die oben aufgeführte nur funktionieren, wenn ein vorhergehender \addcontentslineBefehl bereits im vertikalen Modus endet. 1 In
Anhang A.1.5 auf Seite 891 wird \addvspace ausführlicher behandelt.
51
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Mögliche Probleme mit \include
Man muss also verstehen, wie solche Verzeichniseinträge eigentlich erzeugt werden, bevor man beliebige Formatierungsanweisungen dazwischen setzen kann. Das ist Thema des nächsten Abschnitts. Wenn entweder \addcontentsline oder \addtocontents in der Quelldatei eines Dokumentes verwendet werden, gilt eine wichtige Einschränkung: Keiner der Befehle kann auf der gleichen Ebene eingesetzt werden, wie eine \include-Anweisung. Das heißt, dass beispielsweise die Befehlsfolge
\addtocontents{toc}{\protect\setcounter{tocdepth}{1}} \include{sect1} für den Fall, dass sect1.tex einen \section-Befehl enthält, überraschenderweise eine .toc-Datei mit folgendem Inhalt erzeugen würde:
\contentsline {section}{\numberline {1}Section from sect1}{2} \setcounter {tocdepth}{1} wobei die Zeilen nicht in der richtigen Reihenfolge erscheinen. Dieses Problem lässt sich lösen, indem man die \addtocontents- oder \addcontentslineAnweisung in die Datei verlagert, die mit \include geladen wird, oder indem man gänzlich auf \include verzichtet.
2.3.2 Formatieren von Verzeichnissen Wie bereits angesprochen werden Inhaltsverzeichnisse durch den impliziten oder expliziten Einsatz der Befehle \addcontentsline und \addtocontents erzeugt. Genau betrachtet bewirkt
\addcontentsline{ext }{typ}{text } dass die Zeile
\contentsline{typ}{text }{seite} in eine Hilfsdatei mit der Erweiterung ext geschrieben wird, wobei seite der aktuellen Seitenzahl im Dokument entspricht. Die Befehlszeile \addtocontents{ext }{text } ist einfacher: Sie schreibt lediglich text in die Hilfsdatei. Eine typische Verzeichnisdatei besteht also aus einer Reihe von \contentsline-Befehlen, in die möglicherweise weitere Formatierungsanweisungen eingestreut sind, die durch Aufrufe von \addtocontents hinzugefügt wurden. Mithilfe des Befehls \contentsline kann jeder Anwender ein Inhaltsverzeichnis manuell erzeugen. Weiter unten befindet sich ein typisches Beispiel dazu. Die meisten (wenn auch nicht alle) Gliederungsnummern erscheinen dabei als Argumente des Befehls \numberline, damit die Einträge mit einem geeigneten Einzug forUnvereinbarkeit ! matiert werden können. LaTEX ist hier leider nicht konsistent. Die Standardmit \part klassen verwenden für \part-Überschriften nicht \numberline, sondern geben stattdessen den Abstand zwischen Nummer und Text explizit an. Seit
52
2.3
Der Aufbau von Verzeichnissen
dem 2001/06/01-Release von LaTEX kann \numberline auch an dieser Stelle eingesetzt werden, bei älteren Releases führt dies jedoch möglicherweise zu Fehlern.
I Teil
Bsp. 2-3-2
1 A-Ebene 1.1 B-Ebene . . . . . . . . 1.1.1 C-Ebene . . . . Leere Nummer C-Ebene ohne Nummer
2 . . . .
2 3 4 5 6
\setcounter{tocdepth}{3} \contentsline {part}{I\hspace{1em}Teil}{2} \contentsline{chapter}{\numberline{1}A-Ebene}{2} \contentsline{section}% {\numberline{1.1}B-Ebene}{3} \contentsline{subsection}% {\numberline{1.1.1}C-Ebene}{4} \contentsline{subsection}% {\numberline{}Leere Nummer}{5} \contentsline{subsection}{C-Ebene ohne Nummer}{6}
Der Befehl \contentsline erhält als erstes Argument typ und ruft mit dieser Information den entsprechenden Befehl \l@typ auf, der die eigentliche Formatierung vornimmt. In der Klassendatei muss deshalb für jeden Typ je ein Befehl definiert sein. Die Klassendatei report enthält zum Beispiel die folgenden Definitionen:
\newcommand\l@section {\@dottedtocline{1}{1.5em}{2.3em}} \newcommand\l@subsection {\@dottedtocline{2}{3.8em}{3.2em}} \newcommand\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} \newcommand\l@paragraph {\@dottedtocline{4}{10em}{5em}} \newcommand\l@subparagraph {\@dottedtocline{5}{12em}{6em}} \newcommand\l@figure {\@dottedtocline{1}{1.5em}{2.3em}} \newcommand\l@table {\l@figure} Wenn man in \l@typ den Befehl \@dottedtocline aufruft, der fünf Argumente besitzt, und die drei Argumente ebene, einzug und num-breite angibt, werden die verbleibenden Argumente text und seite des \contentslineBefehls als Argumente 4 und 5 von \@dottedtocline übernommen. Einige Gliederungsebenen erstellen ihre Verzeichniseinträge allerdings auf einem komplizierteren Wege, so dass die Standardklassen für \l@part und \l@chapter (oder \l@section in der Klasse article) Definitionen enthalten, die nicht den Befehl \@dottedtocline verwenden. Im Allgemeinen benutzen sie spezielle Formatierungsbefehle. So lassen sie etwa die Punkte aus und wählen eine größere Schrift. Um das Layout für ein Inhaltsverzeichnis zu definieren, müssen also die geeigneten \l@typ-Befehle deklariert werden. Das lässt sich, wie bereits zuvor gezeigt, auf einfache Weise mithilfe des Befehls \@dottedtocline erreichen, einem internen Befehl, der nun im Folgenden genauer betrachtet wird.
\@dottedtocline{ebene}{einzug}{num-breite}{text }{seite} Die letzten beiden Argumente von \@dottedtocline stimmen mit den letzten Argumenten des Befehls \contentsline überein, der normalerweise
53
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
\linewidth einzug
num-breite
Der Text der Überschrift erzeugt
\@tocrmarg
einen dreizeiligen Eintrag im Inhaltsverzeichnis
\@pnumwidth
Abbildung 2.3: Layoutparameter für Inhaltsverzeichnisse
selbst einen \@dottedtocline-Befehl aufruft. Die anderen Argumente haben folgende Funktionen: ebene Die Gliederungsebene des Befehls \contentsline für einen Eintrag. Mithilfe des Zählers tocdepth kann der Anwender steuern, wie viele Gliederungsebenen angezeigt werden. Ebenen mit einer höheren Nummer als dem in tocdepth angegebenen Wert erscheinen nicht im Inhaltsverzeichnis. einzug Der gesamte Einzug vom linken Rand. num-breite Die Breite der Box, welche die Gliederungsnummer der Überschrift enthält, wenn das Argument text mit dem Befehl \numberline versehen ist. Dieser Wert dient bei mehrzeiligen Einträgen gleichzeitig als zusätzlicher Einzug für die zweite und alle weiteren Zeilen. Zusätzlich verwendet der Befehl \@dottedtocline drei Formatierungsparameter, um das Erscheinungsbild aller Einträge festzulegen. Obwohl diese Parameter Längenwerte speichern, müssen sie alle mit \renewcommand geändert werden!
\@pnumwidth Die Breite der Box, welche die Seitenzahl enthält. \@tocrmarg Der Einzug vom rechten Rand für alle Zeilen, außer der letzten (d.h. nur relevant bei mehrzeiligen Einträgen). Der Parameter kann eine elastische Länge enthalten. Dann wird das Verzeichnis im Flattersatz formatiert.
\@dotsep Der Punktabstand in mu (math units, mathematischen Einheiten).1 Angegeben wird hier nur die Zahl (etwa 1.7 oder 2) ohne Einheit. Wenn diese groß genug gewählt wird, lassen sich die Punkte völlig unterdrücken. Wird mit dem Befehl \renewcommand geändert! Eine bildliche Darstellung der beschriebenen Effekte wird in Abbildung 2.3 gezeigt. Wenn die Box, die durch num-breite definiert wird, eine Gliederungsnummer enthält, ist diese linksbündig. Den richtigen Einzug für Einträge niedrige1 18 mu bilden ein em, wobei Letzteres sich auf \fontdimen2 des mathematischen Symbolfonts symbols bezieht. Nähere Erläuterungen zu den Dimensionsparametern \fontdimen werden in Abschnitt 7.10.3 auf Seite 439 gegeben.
54
2.3
Der Aufbau von Verzeichnissen
rer Gliederungsebenen erhält man, indem man die Werte für die Argumente einzug und num-breite variiert. Wenn man mit den Standardklassen (article, report oder book) arbeitet, ist dieses Vorgehen notwendig, sobald zehn oder mehr Abschnitte auftreten, Problem bei vielen von denen die letzten mehr als neun Unterabschnitte haben. Wie man am Titeln auf einer Ebene nächsten Beispiel sehen kann, geraten die Nummern und der Text zu nahe aneinander oder überlappen sogar, wenn das Argument num-breite in den entsprechenden Aufrufen von \@dottedtocline nicht vergrößert wird.
Bsp. 2-3-3
10 A-Ebene 10.9 B-Ebene . . . . 10.10B-Ebene . . . .
3 4 4
\contentsline{section}{\numberline{10}A-Ebene}{3} \contentsline{subsection}{\numberline{10.9}B-Ebene}{4} \contentsline{subsection}{\numberline{10.10}B-Ebene}{4}
Hier erhält man ein besseres Resultat, wenn man \l@subsection so umdefiniert, dass mehr Platz für die Gliederungsnummer (das dritte Argument von \@dottedtocline) bleibt. Wahrscheinlich müssen auch die anderen Befehle, wie etwa \l@subsubsection , angepasst werden, damit das Verzeichnis ein ausgewogenes Erscheinungsbild erhält.
Bsp. 2-3-4
10 A-Ebene 10.9 B-Ebene . . . 10.10 B-Ebene . . .
3 4 4
\makeatletter \renewcommand\l@subsection{\@dottedtocline{2}{1.5em}{3em}} \makeatother \contentsline{section}{\numberline{10}A-Ebene}{3} \contentsline{subsection}{\numberline{10.9}B-Ebene}{4} \contentsline{subsection}{\numberline{10.10}B-Ebene}{4}
Ein weiterer Fall, der Anpassungen erforderlich macht, ist eine ungewöhnliche Seitennummerierung. Wenn die Seiten zum Beispiel innerhalb der einzelnen Teile als „A–78“, „B–328“, usw. formatiert werden, ist der Platz für die Seitenzahl wahrscheinlich zu schmal. Dies führt zumindest zu einer Menge lästiger „Overfull hbox“-Warnungen, sehr wahrscheinlich aber auch zu einer schlechten Verteilung der Abstände um sie herum. In diesem Fall hilft es, \@pnumwidth einen für den breitesten Eintrag ausreichenden Wert zuzuweisen, z.B. folgendermaßen:
\makeatletter \renewcommand\@pnumwidth{2cm} \makeatother Wenn man \@pnumwidth auf diese Weise anpasst, muss sehr wahrscheinlich auch der Wert von \@tocrmarg geändert werden, damit das Layout des Inhaltsverzeichnisses stimmig bleibt. Die Gliederungsebene, bis zu welcher Überschriften noch im Inhaltsverzeichnis erscheinen, wird durch den Zähler tocdepth festgelegt. Er kann z.B. mit folgender Deklaration geändert werden:
\setcounter{tocdepth}{1} In diesem Fall werden die Abschnittsüberschriften bis hinunter zur ersten Ebene angezeigt, wie z.B. Teile, Kapitel und Abschnitte in der Klasse report.
55
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
2.3.3 Kombinieren von Verzeichnissen Standardmäßig erzeugt LaTEX getrennte Listen für das Inhalts-, das Abbildungs- und das Tabellenverzeichnis, die entsprechend über die Befehle \tableofcontents , \listoffigures und \listoftables verfügbar sind. Keine der Standardklassen unterstützt eine Kombination dieser Listen, so dass man, wie manchmal gewünscht, alle Tabellen und Abbildungen, oder sogar alle drei Listen in einem einzigen Verzeichnis abbilden könnte. Wie könnte man eine solche Aufgabe lösen? Zunächst muss LaTEX dazu gebracht werden, in die entsprechende Hilfsdatei zu schreiben, wenn es intern \addcontentsline verwendet. So müssen zum Beispiel alle \captionBefehle in eine einzige Datei geschrieben werden, wenn man Abbildungen und Tabellen zu einer gemeinsamen Liste kombinieren will. Ein Blick auf die LaTEXQuelldateien zeigt, dass dieses Ziel leicht zu erreichen ist: Bildunterschriften werden in eine Datei geschrieben, deren Erweiterung in \ext@figure angegeben wird, während Tabellenunterschriften zu diesem Zweck \ext@table verwenden. Mit einer geeigneten neuen Definition, etwa von \ext@table, kann man LaTEX zwingen, alle Verweise auf Abbildungen und Tabellen in die .lof-Datei zu schreiben. Aber reicht das? Das Beispiel zeigt, dass es wahrscheinlich nicht reicht, die Einträge einfach nur in eine Datei zu zwingen. Das Verzeichnis lässt nicht erkennen, welche Einträge sich auf Abbildungen beziehen und welche auf Tabellen. Der einzige Hinweis, dass etwas nicht stimmt, ergibt sich aus den identischen Nummern auf der linken Seite.
Eine Abbildung
Abb. 1: Bildunterschrift
Abbildungen und Tabellen 1 1
1
Bildunterschrift . . . . . . . . . . Tabellenunterschrift . . . . . . . .
Ein Abschnitt
Etwas Text . . . Verweistext zu Abbildung 1 . . .
Eine Tabelle
Tabelle 1: Tabellenunterschrift
1 1
\makeatletter \renewcommand\ext@table{lof} \makeatother \addto\captionsngerman{% \renewcommand\listfigurename {Abbildungen und Tabellen}} \listoffigures \section{Ein Abschnitt} Etwas Text \ldots \begin{table}[b] \centering \fbox{\scriptsize Eine Tabelle} \caption{Tabellenunterschrift} \end{table} Verweistext zu Abbildung~\ref{fig} \ldots \begin{figure} \centering \fbox{\scriptsize Eine Abbildung} \caption{Bildunterschrift}\label{fig} \end{figure}
Da in den Buchbeispielen das babel-System benutzt wird, wurde die Textänderung von \listfigurename mittels \addto in \captionsngerman vorgenommen. Das genaue Verfahren wird in Abschnitt 9.5 erklärt.
56
Bsp. 2-3-5
2.3
Der Aufbau von Verzeichnissen
Die Situation wäre ein wenig besser, wenn alle Abbildungen und Tabellen den gleichen Zähler verwenden würden, so dass die Nummern in der linken Spalte nicht identisch wären. Ein solches Ergebnis lässt sich jedoch leider nur schwer erzielen, da man dazu die Low-Level-Definitionen für die Gleitobjekte verändern muss. Eine weitere mögliche Lösung besteht darin, \l@figure und \l@table so zu definieren, dass die entsprechenden Informationen vorliegen. Das Beispiel below zeigt eine mögliche Lösung: Jedem Eintrag wird die Zeichenfolge „(Abbildung)“ oder „(Tabelle)“ angefügt. Theoretisch wäre es auch möglich, den Typ des Gleitobjektes an die Nummer anzufügen. Dazu müssen jedoch viele interne LaTEX-Befehle wie etwa \numberline umdefiniert werden. Was geschieht, wenn alle Einträge in eine einzige Liste, also das Inhaltsverzeichnis, gezwungen werden? In diesem Falle erhalten wir eine Liste, die entsprechend dem endgültigen Erscheinungsbild der Objekte im Dokument sortiert ist, und die wohl anders aussieht, als erwartet. Im nächsten Beispiel erscheint die Abbildung, die in der Quelldatei an letzter Stelle stand, vor dem Abschnitt, in dem auf sie verwiesen wird, da der Algorithmus zum Positionieren von Gleitobjekten sie an den Kopf der Seite setzt. Dieses Ergebnis mag für Bücher oder Berichte akzeptabel sein, in denen die Hauptüberschriften eine neue Seite beginnen und Gleitobjekte am Kopf dieser Seiten vermieden werden. In anderen Fällen ist es jedoch wahrscheinlich nicht wünschenswert.
Eine Abbildung
Abb. 1: Bildunterschrift
Inhaltsverzeichnis 1
Bildunterschrift (Abbildung) . .
1
1 Ein Abschnitt 1 Tabellenunterschrift (Tabelle) . .
1 1
1
Ein Abschnitt
Etwas Text . . . Verweistext zu Abbildung 1 . . .
Eine Tabelle Bsp. 2-3-6
Tabelle 1: Tabellenunterschrift
\makeatletter \renewcommand\ext@figure{toc} \renewcommand\ext@table{toc} \renewcommand\l@figure[2]{\@dottedtocline {1}{1.5em}{2.3em}{#1~(Abbildung)}{#2}} \renewcommand\l@table [2]{\@dottedtocline {1}{1.5em}{2.3em}{#1~(Tabelle)}{#2}} \makeatother \tableofcontents \section{Ein Abschnitt} Etwas Text \ldots \begin{table}[b] \centering \fbox{\scriptsize Eine Tabelle} \caption{Tabellenunterschrift} \end{table} Verweistext zu Abbildung~\ref{fig} \ldots \begin{figure} \centering \fbox{\scriptsize Eine Abbildung} \caption{Bildunterschrift}\label{fig} \end{figure}
Zusammenfassend lässt sich sagen, dass es zwar möglich ist, mehrere Verzeichnistypen zu kombinieren, das Ergebnis dabei jedoch wahrscheinlich nicht wie erwartet ausfällt. Auf jeden Fall erfordert ein solcher Ansatz, dass alle \l@typ-Befehle sorgfältig umgeschrieben werden, damit das Endergebnis für den Leser von Nutzen ist.
57
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
2.3.4 Erstellen weiterer Verzeichnisse Wenn man ein Verzeichnis aller Beispiele in einem Buch erstellen möchte, muss man zunächst eine neue Verzeichnisdatei erstellen und dann die oben beschriebenen Funktionen verwenden. Zuerst müssen zwei neue Befehle definiert werden. Der erste Befehl, \ecaption im nächsten Beispiel, verknüpft eine Beschriftung mit der aktuellen Position im Dokument, indem er sein Argument und die aktuelle Seitenzahl in die Verzeichnisdatei schreibt. Der zweite Befehl, \listofexamples , liest die Daten, die im vorigen Lauf in die Verzeichnisdatei geschrieben wurden und fügt sie an der Stelle im Dokument ein, an welcher der Befehl aufgerufen wird. Der Befehl \listofexamples ruft \@starttoc{ext } auf, der die externe Datei (mit der Erweiterung ext) liest, und sie dann erneut zum Schreiben öffnet. Letzterer wird ebenfalls von den Befehlen \tableofcontents , \listoffigures und \listoftables verwendet Die Zusatzdatei kann z.B. die Erweiterung xmp erhalten. Für die Überschrift des Verzeichnisses kann ein Befehl wie \chapter*{Verzeichnis der Beispiele} direkt vor oder in \listofexamples gesetzt werden. Falls gewünscht, kann man dem Leser durch Hinzufügen des Befehls \addcontentsline außerdem die Existenz dieses Verzeichnisses im Inhaltsverzeichnis anzeigen. Die tatsächliche Formatierung der individuellen Einträge in der .xmpDatei wird durch den Befehl \l@example gesteuert, der auch noch definiert werden muss. Im folgenden Beispiel werden die Bildunterschriften als Absätze formatiert, gefolgt von einer kursiven Seitenzahl.
1
Ausgewählte Aufnahmen
Ravels Boléro von Jacques Loussier Trio. Davis’ Blue in Green von Cassandra Wilson.
Kommentare Loussier: Ein seltsames Erlebnis, 1 Wilson: Eine wunderbare Version, 1
\newcommand\ecaption[1] {\addcontentsline{xmp}{example}{#1}} \makeatletter \newcommand\listofexamples {\section*{Kommentare}\@starttoc{xmp}} \newcommand\l@example[2] {\par\noindent#1,~\textit{#2}\par} \makeatother \section{Ausgewählte Aufnahmen} Ravels Bol\’ero von Jacques Loussier Trio.\ecaption{Loussier: Ein seltsames Erlebnis} Davis’ Blue in Green von Cassandra Wilson.\ecaption{Wilson: Eine wunderbare Version} \listofexamples
Das in Abschnitt 6.3.1 auf Seite 300 beschriebene Paket float implementiert den oben vorgestellten Mechanismus mit dem Befehl \listof{"typ#} , der die Liste aller Gleitobjekte des Typs "typ# erzeugt.
2.3.5 shorttoc – Kompakte Inhaltsverzeichnisse Bei sehr umfangreichen Dokumenten ist es manchmal hilfreich, neben dem normalen Inhaltsverzeichnis eine kompaktere Übersicht, die nur die Hauptabschnitte auflistet, zur Verfügung zu stellen. Ein solches kompaktes Inhaltsverzeichnis lässt sich mithilfe des Paketes shorttoc von Jean-Pierre Drucbert erzeugen.
58
Bsp. 2-3-7
2.3
Der Aufbau von Verzeichnissen
\shorttableofcontents{titel }{tiefe} Der Befehl \shorttableofcontents (bzw. die Kurzform \shorttoc) muss vor dem Befehl \tableofcontents stehen. Andernfalls bleibt das kompakte Inhaltsverzeichnis leer. Das erste Argument titel enthält die Überschrift für das Verzeichnis und das zweite Argument tiefe gibt an, bis zu welcher Gliederungsebene Einträge angezeigt werden sollen. Ein kompaktes Verzeichnis, das nur Kapitel und Abschnitte enthält, während die gesamte Gliederungsstruktur bis zu den Passagen im ausführlichen Inhaltsverzeichnis aufgeführt wird, würde man wie folgt definieren:
\shorttableofcontents{Inhaltsübersicht}{1} \setcounter{tocdepth}{3} \tableofcontents Das Paket unterstützt zwei Optionen, loose (Standard) und tight, über die sich die vertikalen Abstände im kompakten Verzeichnis einstellen lassen.
2.3.6 minitoc – Mehrfache Inhaltsverzeichnisse Das Paket minitoc wurde ursprünglich von Nigel Ward und Dan Jurafsky geschrieben und von Jean-Pierre Drucbert vollständig überarbeitet. Mit seiner Hilfe lassen sich Teilverzeichnisse (sogenannte „minitoc“s) für Kapitel, Abschnitte oder Teile erzeugen. Es kann auch Mini-Verzeichnisse für Abbildungen und Tabellen generieren, die in einem Kapitel, einem Abschnitt oder einem Teil vorkommen. Das Paket titletoc, das in Abschnitt 2.3.7 behandelt wird, stellt ähnliche Funktionen zur Verfügung. Dabei folgt es jedoch einem völlig anderen Ansatz. Im Folgenden wird genauer beschrieben, wie man mit dem Paket minitoc kapitelweise Verzeichnisse erstellt. Das Vorgehen gilt analog für Verzeichnisse je Abschnitt oder Teil, lediglich mit anderen Befehlsnamen. Am Ende dieses Abschnitts befindet sich eine entsprechende Übersicht. Das Paket unterstützt nahezu alle Sprachoptionen des babel-Systems (siehe Abschnitt 9.1.3), welche die verwendeten Überschriften voreinstellen. Das Layout der generierten Verzeichnisse lässt sich außerdem mit den Optionen loose (Standard) oder tight sowie dotted (Standard) oder undotted beeinflussen. Eine Reihe von Parametern, die in der Präambel gesetzt werden können (siehe Tabelle 2.3 auf der nächsten Seite), bieten weitere Gestaltungsmöglichkeiten. Um das minitoc-System zu initialisieren, muss ein \dominitoc-Befehl vor \tableofcontents ausgeführt werden. Sind nur Teilverzeichnisse erwünscht (ohne ein Gesamtverzeichnis), dann muss letzterer Befehl durch \faketableofcontents ersetzt werden. Teilverzeichnisse für Abbildungen und Tabellen werden durch ähnliche Befehle (\dominilof bzw. \dominilot) initialisiert, gegebenenfalls in Kombination mit \fakelistoffigures oder \fakelistoftables . Die \domini...-Befehle verwenden ein optionales Argument, um die Position der Verzeichnisüberschrift festzulegen: l für links (Standard), c für zentriert, r für rechts und n oder e für keinen Titel. Die Deklaration ist global und gilt für alle Verzeichnisse im ganzen Dokument.
59
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
minitocdepth
Dieser LaTEX-Zähler gibt an, wie viele Gliederungsebenen im Teilverzeichnis angezeigt werden. Der Wert ist auf 2 voreingestellt.
\mtcindent
Die Breite des linken/rechten Einzugs des Teilverzeichnisses (voreingestellt auf 24pt).
\mtcfont
Dieser Befehl legt den Standardfont für die Verzeichniseinträge fest (voreingestellt auf einen Roman Font kleiner Schriftgröße).
\mtcSfont
Dieser Befehl legt den Font für die \section-Einträge fest (voreingestellt auf einen kleinen, fett gedruckten Roman Font).
\mtcSSfont
Falls angegeben, der Font für \subsection-Einträge. Diese und alle weiteren Gliederungsebenen sind auf \mtcfont voreingestellt.
\mtcSSSfont \mtcPfont \mtcSPfont \mtctitle
Falls angegeben, der Font für \subsubsection-Einträge.
\nomtcrule
Diese Deklaration verhindert Linien ober- und unterhalb der Teilverzeichnisse (\mtcrule ermöglicht sie).
\nomtcpagenumbers
Diese Deklaration blendet Seitenzahlen in den Teilverzeichnissen aus (\mtcpagenumbers blendet sie ein).
Falls angegeben, der Font für \paragraph-Einträge. Falls angegeben, der Font für \subparagraph-Einträge. Titeltext für Teilverzeichnisse (voreingestellt durch die Sprachenoption).
Tabelle 2.3: Die minitoc-Parameter im Überblick
Die eigentlichen Teilverzeichnisse werden dann mit dem \minitocBefehl an geeigneten Stellen im Dokument platziert, normalerweise direkt nach einem \chapter-Befehl. Die tatsächliche Platzierung bleibt jedoch dem Anwender überlassen. So kann man z.B. Text davor setzen oder sie einrahmen. Wenn eines der Verzeichnisse leer ist, unterdrückt das Paket die Überschrift und gibt eine Warnung aus, um auf mögliche Formatierungsprobleme durch das Material in der Umgebung des Befehls hinzuweisen. Zum Generieren von Teilverzeichnissen für Abbildungen oder Tabellen verwendet man die Befehle \minilof oder \minilot, nachdem das System wie zuvor beschrieben initialisiert wurde. Für jedes Teilverzeichnis wird eine Hilfsdatei mit der Erweiterung .mtc"n# erstellt, wobei "n# die Kapitelnummer ist.1 Bei Teilverzeichnissen für Abbildungen und Tabellen werden entsprechend die Endungen .mlf"n# und .mlt"n# erzeugt. Normalerweise enthalten Teilverzeichnisse nur Verweise zu Abschnitten und Unterabschnitten. Dies lässt sich mithilfe des Zählers minitocdepth, ähnlich wie bei tocdepth, ändern. Außerdem kann man andere Fonts für die einzelnen Einträge einstellen, indem man den Befehl \mtcfont bzw. die verwandten Befehle aus der Tabelle 2.3 entsprechend bearbeitet. Die um ein 1 Für Betriebssysteme, die nur Dateierweiterungen mit drei Zeichen unterstützen, wie z.B. MS-DOS, wird automatisch eine andere Bezeichnung gewählt. Diese kann über die Option shortext des Befehls \usepackage auch erzwungen werden.
60
2.3
Der Aufbau von Verzeichnissen
Teilverzeichnis erzeugten Rahmenlinien werden durch Angabe von \mtcrule (Standard) oder \nomtcrule in der Präambel oder vor den einzelnen Verzeichnissen eingestellt. In ähnlicher Weise lassen sich Seitenzahlen in den Teilverzeichnissen mit \mtcpagenumbers einblenden (Standard) oder mit \nomtcpagenumbers ausblenden. Da die Teilverzeichnisse zusätzlichen Platz im Dokument einnehmen, wirken sie sich auf die Seitenzahlen aus. Daher sind normalerweise mindestens drei Läufe erforderlich, damit die Verzeichnisse wirklich korrekte Informationen enthalten. Für Teilverzeichnisse für die Gliederungsebene \part existieren ähnliche Befehle, wie die in Tabelle 2.3 auf der gegenüberliegenden Seite dargestell- Teilverzeichnisse für ten. Der einzige Unterschied besteht darin, dass sie statt mini die Zeichen- Teile oder Abschnitte folge part im Namen führen, und statt mtc die Folge ptc. Das System wird hier also mit \doparttoc initialisiert, \parttoc druckt das Teilverzeichnis, mit \noptcrules werden die Rahmenlinien ausgeblendet und so fort. Hinzu kommt lediglich die Deklaration \ptcCfont , welche den Font für die Kapiteleinträge festlegt und damit natürlich keine Entsprechung hat. Bei Teilverzeichnissen auf der \section-Ebene stellt sich die Situation wiederum ähnlich dar: mini wird durch sect ersetzt und mtc durch stc – also z.B. \dosecttoc , \secttoc und \stcfont. Im Zusammenhang mit den Befehlen \sectlof oder \sectlot kann man auch die Option placeins testen, die Gleitobjekte mithilfe des Paketes placeins innerhalb ihrer jeweiligen Abschnitte belässt. Die zugehörigen Optionen sind below und section (siehe Abschnitt 6.2.1 auf Seite 297).
1
Afghanistan
1.2 Geschichte
\usepackage{minitoc} \setlength\stcindent{0pt} \renewcommand\stctitle{} \renewcommand\stcfont {\footnotesize} \setcounter{secttocdepth}{3}
... 1.1
1.2
Geographie .
1
1.1.1
Gesamtfläche
1
1.1.2
Landfläche .
1
Geschichte .
2 Albanien
2 2.1
1.1
Geographie
1.1.1
Gesamtfläche
647,500 km2 1.1.2
Landfläche
2.1.1
Gesamtfläche
2
2.1.2
Landfläche .
3
Geschichte .
Gesamtfläche
28,750 km2 1
2
2.1.1
2.1 Geographie
647,500 km2 Bsp. 2-3-8
2.2
Geographie .
2
3
\dosecttoc \faketableofcontents \section{Afghanistan}\secttoc \subsection{Geographie} \subsubsection{Gesamtfläche} 647,500 km\textsuperscript{2} \subsubsection{Landfläche} 647,500 km\textsuperscript{2} \subsection{Geschichte} \ldots \section{Albanien} \secttoc \subsection{Geographie} \subsubsection{Gesamtfläche} 28,750 km\textsuperscript{2} \subsubsection{Landfläche} 27,400 km\textsuperscript{2} \subsection{Geschichte} \ldots
61
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Zum Deaktivieren der \minitoc-Befehle muss nur das Paket minitoc im \usepackage-Befehl gegen mtcoff ausgetauscht werden. Dadurch werden alle minitoc-bezogenen Befehle im Quelltext ignoriert.
2.3.7 titletoc – Ein anderer Ansatz für Inhaltsverzeichnisse Das Paket titletoc von Javier Bezos wurde ursprünglich als Begleitpaket zu titlesec entwickelt. Es kann jedoch auch eigenständig eingesetzt werden. Es verwendet eine eigene Schnittstelle zum Abbilden von Gliederungsstrukturen und umgeht dadurch einige der Einschränkungen des LaTEX-Systems. Das tatsächliche Erstellen der externen Verzeichnisdateien und deren SynVerhältnis zu tax sind unverändert, so dass dieses Paket sehr gut zusammen mit anderen Standard-LATEX Paketen funktioniert, die derartige Dateien generieren. Es gibt jedoch eine Ausnahme: Die Verzeichnisdateien sollten mit dem Befehl \contentsfinish enden. Bei Standarddateien mit den Erweiterungen .toc, .lof und .lot geschieht dies automatisch. Wenn man jedoch eigene Verzeichnisdateien erstellt (siehe Abschnitt 2.3.4), muss man diese wie im folgenden Beispiel dem Paket titletoc bekannt machen:
\contentsuse{example}{xmp} Wie in Abschnitt 2.3.2 erklärt, besteht eine Verzeichnisdatei aus
\contentsline-Befehlen, die manchmal durch beliebigen Code getrennt sein können, der mit \addtocontents hinzugefügt wurde. Um solche Verzeich-
niszeilen mit Standard-LaTEX formatieren zu können, musste man zunächst Befehle der Form \l@typ definieren. Bei dem Paket titletoc ist dieser Schritt nicht mehr notwendig. Stattdessen wird die gewünschte Formatierung mithilfe der \titlecontents-Deklaration (für vertikal abgesetzte Einträge) oder ihrer Sternform (für eingebettete Einträge) vorgenommen.
\titlecontents{typ}[einzug-links]{code-oberhalb}{nummeriert-format } {nicht-nummeriert-format }{h-code}[code-unterhalb] Das erste Argument von \titlecontents spezifiziert den typ der Verzeichniszeile, die formatiert wird. Es entspricht damit dem ersten Argument von \contentsline . Anders ausgedrückt benötigt man für jeden typ von Gliederungsbefehl, der im Dokument auftreten kann, eine \titlecontentsDeklaration.1 Die anderen Argumente haben folgende Bedeutung: einzug-links Dieses Argument gibt den Einzug vom linken Rand für alle Einträge an. In diesen Raum kann man Material hineinsetzen, wie etwa Gliederungsnummern. Auch wenn das Argument in eckigen Klammern angegeben wird, ist es in der aktuellen Paketversion nicht optional! code-oberhalb Dieser Code wird ausgeführt, bevor der Eintrag gesetzt wird. Er kann dazu verwendet werden, vertikale Abstände einzufügen, etwa mit \addvspace, oder um Formatierungsanweisungen, wie z.B. Fontwechsel, 1 Das Paket berücksichtigt bestehende \l@typ-Deklarationen, die z.B. von der Dokumentenklasse stammen. Daher kann es nur zum Ändern des Layouts einiger Typen verwendet werden.
62
2.3
Der Aufbau von Verzeichnissen
für den ganzen Eintrag vorzugeben. An dieser Stelle kann man außerdem mit \filleft , \filright , \filcenter oder \fillast arbeiten, die bereits aus dem Paket titlesec bekannt sind. nummeriert-format Dieser Code formatiert den Eintrag mitsamt seiner Nummer. Er wird im horizontalen Modus ausgeführt, nachdem der Einzug gesetzt wurde. Das letzte Element kann ein Befehl mit einem Argument sein, das den Eintrags-text als Wert erhält. Die unformatierte Gliederungsnummer ist über den Befehl \thecontentslabel verfügbar. Weiter unten werden noch andere Möglichkeiten aufgezeigt, wie man sie ansprechen und positionieren kann. nicht-nummeriert-format Dieser Code dient dazu, den Eintrag zu formatieren, wenn er keine Nummer enthält. Auch hier kann das letzte Element ein Befehl mit einem Argument sein. h-code Dieser Code wird noch im horizontalen Modus ausgeführt, nachdem der Eintrag bereits formatiert wurde. Er wird normalerweise verwendet, um Füllmaterial, wie etwa eine gepunktete Linie, einzusetzen, und um die in \thecontentspage gespeicherte Seitenzahl anzufügen. Mithilfe des Befehls \titlerule, der auf Seite 44 besprochen wird, kann man Leitpunkte erzeugen. code-unterhalb Dieses (optionale) Argument dient dazu Code anzugeben, der im vertikalen Modus ausgeführt wird, nachdem der Eintrag gesetzt wurde, z.B. um nach dem Eintrag einen vertikalen Abstand einzufügen. Das Paket titletoc enthält zwei nützliche Werkzeuge zum Positionieren und Formatieren der Überschriften und Seitenzahlen: \contentslabel und \contentspage .
\contentslabel[text ]{größe} Der Befehl \contentslabel dient dazu, den Inhalt des Argumentes text, das normalerweise \thecontentslabel enthält, linksbündig in einer Box der Breite größe zu setzen und diese Box dann links der aktuellen Position zu platzieren. Wenn man diesen Befehl im nummeriert-format-Argument von \titlecontents verwendet, wird die Nummer in den Rand vor den Eintragstext gesetzt, oder in den Einzug, der mit einzug-links erzeugt wurde. Wer ein individuelleres Layout wünscht, kann im optionalen Argument seine eigenen Formate festlegen, im Allgemeinen unter Verwendung des Befehls \thecontentslabel . Das Paket bietet drei Optionen, um die Voreinstellungen des Befehls \contentslabel in Verbindung mit dem Argument text zu beeinflussen. Mit Paketoptionen rightlabels wird die Gliederungsnummer in dem entsprechenden Bereich rechtsbündig ausgerichtet. Die voreingestellte Ausrichtung leftlabels ist linksbündig. Die Option dotinlabels setzt einen Punkt nach der Nummer.
\contentspage[text ] In ähnlicher Weise setzt \contentspage den Inhalt des optionalen Argumentes text (Voreinstellung \thecontentspage) rechtsbündig in eine Box vorgegebener Breite und sorgt dann dafür, dass diese Box rechts der aktuellen
63
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Position platziert wird, ohne jedoch Raum einzunehmen. Wenn sie an das Ende einer Zeile gesetzt wird, läuft die Box damit in den Rand hinein. In diesem Fall legt jedoch kein obligatorisches Argument die Größe der Box fest: Sie ist für alle Einträge identisch. Ihre Breite entspricht dem Freiraum, der rechts von allen Einträgen verbleibt und kann mit dem Befehl \contentsmargin, der weiter unten beschrieben wird, eingestellt werden. Für die Beispiele in diesem Abschnitt wurden einige Teile der OriginalZu den Beispielen ! .toc-Dateien, die LaTEX für dieses Buch erzeugt hat (Kapitel 2 und Teile von in diesem Abschnitt Kapitel 3) in die Datei partial.toc kopiert. Innerhalb der Beispiele wurde diese Datei dann mit \input geladen und \contentsfinish manuell hinzugefügt. In einem echten Dokument verwendet man stattdessen den Befehl \tableofcontents, um die .toc-Datei für das eigene Dokument zu laden und zu verarbeiten. Im ersten Beispiel erhalten die Kapiteleinträge eine neue Formatierung, während die Abschnittseinträge weiterhin dem LaTEX-Standard entsprechen. Die Kapiteleinträge sind im Flattersatz (mit \filright) und fett gesetzt. Sie erhalten einen Abstand von einem Pica oberhalb, gefolgt von einer breiten Linie. Der eigentliche Eintrag ist um sechs Pica eingerückt. In diesem Leerraum wird das Wort „Kapitel“ in Kapitälchen gesetzt, gefolgt von einem Leerzeichen und der Kapitelnummer (\thecontentslabel). Dies geschieht mithilfe der Anweisung \contentslabel und ihrem optionalen Argument. Überschriften ohne Nummerierung erhalten keine spezielle Formatierung, so dass sie einfach um sechs Pica eingerückt werden. Der verbleibende Leerraum wird mit \hfill gefüllt und die Seitenzahlen werden mit dem Befehl \contentspage in den Rand gesetzt. Nach dem Eintrag folgt ein weiterer Abstand von zwei Pica-Punkten, so dass er leicht von einem gegebenenfalls folgenden Abschnittseintrag abgesetzt wäre.
K APITEL 2 2.1. 2.2. 2.3. 2.4.
Die Struktur eines LATEX-Dokumentes Der Aufbau der Quelldateien . . Gliederungsbefehle . . . . . . . Der Aufbau von Verzeichnissen Verweise in Dokumenten . . . .
. . . .
. . . .
. . . .
K APITEL 3 Formatierungswerkzeuge 3.1. Textfragmente und Absätze . . . . . . 3.2. Fußnoten, Endnoten und Marginalien 3.3. Listen . . . . . . . . . . . . . . . . . 3.4. Wortwörtlicher Text . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
17 17 24 48 69
. . . .
85 86 116 135 159
\usepackage[dotinlabels]{titletoc} \titlecontents{chapter} [6pc] {\addvspace{1pc}\bfseries \titlerule[2pt]\filright} {\contentslabel [\textsc{\chaptername}\ \thecontentslabel]{6pc}} {}{\hfill\contentspage} [\addvspace{2pt}] % Nur Level 0 + 1 zeigen: \setcounter{tocdepth}{1} \input{partial.toc} \contentsfinish
Anstatt den ganzen Eintrag einzurücken und dann einen Teil mithilfe von \contentslabel in den linken Rand zu verschieben, kann man auch mit \contentspush einen ganz ähnlichen Effekt erzielen.
\contentspush{text } Dieser Befehl formatiert den Inhalt des Argumentes text und addiert dann gegebenenfalls dessen Breite zu dem Wert von einzug-links für alle weiteren
64
Bsp. 2-3-9
2.3
Der Aufbau von Verzeichnissen
Zeilen des Eintrags. Daher verändert sich der Einzug mit der Breite von text. Ein solcher Wechsel ist oftmals unerwünscht, aber in manchen Fällen ergeben andere Lösungen noch schlechtere Ergebnisse. Als Beispiel kann man ein Dokument mit vielen Kapiteln betrachten, die jeweils Dutzende von Abschnitten enthalten. Ein fester Abstand für einzug-links müsste die breiteste Nummer enthalten können, die aus fünf oder sechs Ziffern bestehen kann. Dadurch erhält eine Gliederungsnummer wie „1.1“ einen unangemessen weiten Abstand von ihrem Eintragstext. Im Folgenden ist eine Lösung aufgeführt, die mit der Länge der Gliederungsnummer wächst.
Bsp. 2-3-10
12.8 Ein Abschnitt, der im TOC umbrochen wird 12.9 Abschnitt . . . . . . 12.10 Ein weiterer Abschnitt, der umbrochen wird . . . 12.11 Letzter . . . . . . . .
. 87 . 88
. 90 . 92
\usepackage{titletoc} \titlecontents{section}[0pt]{\addvspace{2pt}\filright} {\contentspush{\thecontentslabel\ }} {}{\titlerule*[8pt]{.}\contentspage} \contentsline{section}{\numberline{12.8}Ein Abschnitt, der im TOC umbrochen wird}{87} \contentsline{section}{\numberline{12.9}Abschnitt}{88} \contentsline{section}{\numberline{12.10}Ein weiterer Abschnitt, der umbrochen wird}{90} \contentsline{section}{\numberline{12.11}Letzter}{92} \contentsfinish
\contentsmargin[korrektur ]{abstand-rechts} Der rechte Rand kann mithilfe der \contentsmargin-Deklaration für alle Einträge auf den Wert von abstand-rechts gesetzt werden. Die Voreinstellung für diesen Rand entspricht \@pnumwidth , und ist damit in den Standardklassen breit genug für drei Ziffern. Das optionale Argument korrektur wird an alle Zeilen eines Eintrags, außer der letzten, angefügt. Mit diesem Argument kann man Details für das Verzeichnislayout einstellen. So lassen sich z.B. die Leitpunkte in einem mehrzeiligen Eintrag so ausrichten, dass sie sich am Text der vorhergehenden Zeilen dieses Eintrags orientieren. In einem Absatz kombinierte Verzeichniseinträge Standard-LaTEX unterstützt nur die zeilenweise Formatierung von Verzeichniseinträgen. In manchen Fällen ist es jedoch ökonomischer, die Einträge für eine niedrigere Gliederungsebene in einem Absatz aneinander zu reihen. Das Paket titletoc ermöglicht diese Art der Formatierung.
\titlecontents*{typ}[einzug-links]{davor-code}{nummeriert-format } {nicht-nummeriert-format }{h-code}[mittel-code] \titlecontents*{typ}. . . {h-code}[mittel-code][end-code] \titlecontents*{typ}. . . {h-code}[anfangs-code][mittel-code][end-code] Die Deklaration \titlecontents* wird für Einträge verwendet, die zusammen mit anderen Einträgen der gleichen oder einer niedrigeren Gliederungsebene in einem Absatz formatiert werden sollen. Die ersten sechs Argumente entsprechen denjenigen des Befehls \titlecontents, der auf Seite 62 beschrieben ist. Anstelle eines vertikal orientierten code-unterhalb-Argumentes
65
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
stellt \titlecontents* ein bis drei optionale Argumente bereit. Diese behandeln die unterschiedlichen Situationen, die auftreten, wenn Einträge horizontal aneinander gereiht werden. Alle drei optionalen Argumente sind zunächst leer. Der Ablauf ist rekursiv, nach folgendem Verfahren: • Ist der aktuelle Eintrag der erste, der Teil des Absatzes werden soll, dann wird vor dem Setzen des Eintrags der Inhalt des Argumentes anfangscode ausgeführt. • Andernfalls gibt es bereits einen früheren Eintrag in diesem Absatz. – Wenn beide Einträge zur gleichen Ebene gehören, wird der mittel-code eingefügt. – Andernfalls, wenn der aktuelle Eintrag zu einer niedrigeren Ebene gehört, wird sein anfangs-code eingefügt und das Verfahren beginnt von vorne. – Andernfalls gehört der aktuelle Eintrag zu einer höheren Gliederungsebene. Dann wird zunächst für jede beendete Ebene ihr end-code (in umgekehrter Reihenfolge) ausgeführt. Wenn der aktuelle Eintrag nicht zum gleichen Absatz gehört, ist das Verfahren damit abgeschlossen. Ansonsten wird der mittel-code für den Eintrag ausgeführt, da es bereits einen früheren Eintrag der gleichen Gliederungsebene geben muss (vorausgesetzt es handelt sich um ein hierarchisch strukturiertes Dokument). Wenn verschiedene Gliederungsebenen in einem Absatz kombiniert werden sollen, muss das gesamte Absatzlayout im Argument davor-code der höchsten Ebene angegeben werden, die in einem solchen Absatz vertreten sein kann. Andernfalls haben die Einstellungen für das Ende des Absatzes keine Gültigkeit und werden daher nicht angewandt. Im folgenden Beispiel bezieht sich \footnotesize nur auf die Abschnittseinträge – der Wert von \baselineskip für den ganzen Absatz entspricht immer noch der Größe \normalsize . Dieses künstliche Beispiel zeigt, wie man mithilfe der drei optionalen Argumente zwei verschiedene Ebenen kombinieren kann. Hier sind insbesondere die Leerzeichen am Anfang einiger Argumente zu beachten, die bei der Aneinanderreihung zum richtigen Ergebnis beitragen.
Erstes, 1 • Zweites, 4 {Abschn-A; Abschn-B} • Drittes, 8 {Abschn-C} ¶ 66
\usepackage{titletoc} \contentsmargin{0pt} \titlecontents*{chapter}[0pt]{\sffamily} {}{}{, \thecontentspage}[ \textbullet\ ][~\P] \titlecontents*{section}[0pt]{\footnotesize\slshape} {}{}{}[ \{][; ][\}] \contentsline{chapter}{\numberline{1}Erstes}{1} \contentsline{chapter}{\numberline{2}Zweites}{4} \contentsline{section}{\numberline{2.1}Abschn-A}{5} \contentsline{section}{\numberline{2.2}Abschn-B}{6} \contentsline{chapter}{\numberline{3}Drittes}{8} \contentsline{section}{\numberline{3.1}Abschn-C}{8} \contentsfinish
Bsp. 2-3-11
2.3
Der Aufbau von Verzeichnissen
Wie lässt sich dieses Verfahren praktisch anwenden? Im nächsten Beispiel wird die Abschnittsebene kombiniert. Dabei werden die Einträge durch Aufzählungszeichen getrennt, die von dehnbaren Abständen (\xquad) umgeben sind. Das Verzeichnis endet mit einem Punkt. Die Kapiteleinträge sind ebenfalls interessant, da die Seitennummer links erscheint. In diesem Design gibt es keine Gliederungsnummern. Da auf der rechten Seite keine Seitenzahl steht, wird der rechte Rand auf null gesetzt.
17
Die Struktur eines LATEX-Dokumentes
85
Formatierungswerkzeuge
Der Aufbau der Quelldateien, 17 • Gliederungsbefehle, 24 • Der Aufbau von Verzeichnissen, 48 • Verweise in Dokumenten, 69.
Bsp. 2-3-12
Textfragmente und Absätze, 86 • Fußnoten, Endnoten und Marginalien, 116 • Listen, 135 • Wortwörtlicher Text, 159.
\usepackage{titletoc} \contentsmargin{0pt} \titlecontents{chapter}[0pt] {\addvspace{1.4pc}\bfseries} {{\Huge\thecontentspage\quad}}{}{} \newcommand\xquad {\hspace{1em plus.4em minus.4em}} \titlecontents*{section}[0pt] {\small}{}{} {,~\thecontentspage} [\xquad\textbullet\xquad][.] \setcounter{tocdepth}{1} \input{partial.toc}\contentsfinish
Das zweite Beispiel zeigt ein Layout, das der Gestaltung in dem Buch Methods of Book Design [170] sehr ähnelt. Das Design verwendet Mediävalziffern, die das Paket eco bereitstellt. Die Titel der Kapitel (\chapter) sind als Kapitälchen formatiert. Das geschieht mithilfe von \scshape, wobei alle Buchstaben des Titels mit \MakeLowercase in Kleinbuchstaben umgewandelt werden. (Wie bereits erwähnt, kann das letzte Element der Argumente nummeriert-format und nicht-nummeriert-format ein Befehl mit einem Argument sein, das den Text der Überschrift erhält.) Die Abschnitte werden alle in einem Absatz zusammengefasst, wobei den Abschnittsnummern jeweils ein §-Zeichen vorangestellt wird. Die Einträge sind durch einen Punkt, gefolgt von einem Leerzeichen, getrennt und der letzte Abschnitt wird ebenfalls mit einem Punkt beendet.
die struktur eines LATEX-dokumentes §. Der Aufbau der Quelldateien, . §. Gliederungsbefehle, . §. Der Aufbau von Verzeichnissen, . §. Verweise in Dokumenten, .
Bsp. 2-3-13
formatierungswerkzeuge
§. Textfragmente und Absätze, . §. Fußnoten, Endnoten und Marginalien, . §. Listen, . §. Wortwörtlicher Text, .
\usepackage{eco,titletoc} \contentsmargin{0pt} \titlecontents{chapter}[1.5pc] {\addvspace{2pc}\large} {\contentslabel{2pc}% \scshape\MakeLowercase} {\scshape\MakeLowercase} {\hfill\thecontentspage} [\vspace{2pt}] \titlecontents*{section}[1.5pc] {\small}{\S\thecontentslabel\ } {}{,~\thecontentspage}[. ][.] \setcounter{tocdepth}{1} \input{partial.toc} \contentsfinish
67
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Erstellen von partiellen Inhaltsverzeichnissen Mithilfe des Paketes titletoc lassen sich partielle Inhaltsverzeichnisse erzeugen. Es stellt für diesen Zweck vier Befehle zur Verfügung.
\startcontents[name] Ein partielles Verzeichnis beginnt mit \startcontents . Es ist möglich, parallel Daten für mehrere partielle Verzeichnisse zu sammeln, etwa für den aktuellen Teil (\part) und für das aktuelle Kapitel (\chapter). Sie lassen sich durch das optionale Argument name unterscheiden. Sein Standardwert ist die Zeichenfolge default. Gleichzeitig geschriebene partielle Verzeichnisse dürfen sich überlappen, obwohl sie normalerweise verschachtelt sind. Alle Daten für diese Verzeichnisse werden in einer einzigen Datei mit der Erweiterung .ptc gespeichert. Diese Datei wird mit dem ersten \startcontents-Befehl erzeugt.
\printcontents[name]{präfix }{start-ebene}{toc-code} Dieser Befehl schreibt das aktuelle partielle Verzeichnis, das zuvor mit \startcontents erzeugt wurde. Wenn das optionale Argument name verwendet wird, muss ein partielles Verzeichnis mit diesem namen bereits erzeugt worden sein.1 Sehr wahrscheinlich soll das partielle Verzeichnis abweichend vom Hauptinhaltsverzeichnis formatiert werden. Um dies zu ermöglichen, wird das Argument präfix jedem Eintrag typ vorangestellt, wenn nach einer durch \titlecontents oder seiner Sternform bereitgestellten Layoutdefinition gesucht wird. Im Beispiel wird p- als präfix verwendet. Dann wird eine Formatierung für p-subsection definiert, um damit \subsection-Einträge im partiellen Verzeichnis zu formatieren. Das Argument start-ebene legt fest, ab welcher Gliederungsebene Einträge im partiellen Inhaltsverzeichnis erscheinen. Im Beispiel wurde der Wert auf 2 eingestellt, damit alle Unterabschnitte und die darunter liegenden Ebenen angezeigt werden. Die Gliederungsebene, bis zu welcher Einträge aufgenommen werden sollen, wird über toc-code gesteuert, indem man den Zähler tocdepth auf einen geeigneten Wert setzt. An dieser Stelle können noch weitere Einstellungen für die Initialisierung des partiellen Verzeichnisses vorgenommen werden. Im Beispiel wird jeder rechte Rand gelöscht, da das partielle Verzeichnis insgesamt als ein Absatz formatiert wird. Wenn man die Pakete titletoc und titlesec gemeinsam verwendet, kann man sehr leicht partielle Verzeichnisse in Definitionen für Überschriften integrieren, ohne dass man dazu das eigentliche Dokument verändern muss. Im Folgenden wird Beispiel 2-2-18 von Seite 42 so erweitert, dass der Befehl \section automatisch ein partielles Verzeichnis all seiner Unterabschnitte ausgibt. Dies wird mithilfe des optionalen Argumentes danachcode der \titleformat-Deklaration erreicht. Zunächst wird ein vertikaler 1 Zurzeit (Stand 2003) ist das Paket ziemlich intolerant, wenn man versucht eine Verzeichnisliste zu schreiben, die man nicht erst erzeugt hat: In diesem Fall tritt ein unspezifischer TEX-Low-Level-Fehler auf.
68
2.4 Verweise in Dokumenten
Abstand hinzugefügt, der dafür sorgt, dass an dieser Stelle kein Seitenumbruch erfolgen kann. Dann wird das partielle Verzeichnis mit seinen defaultEinstellungen von \startcontents (erneut) aufgerufen. Danach wird es über den Befehl \printcontents sofort formatiert. Die entsprechenden Argumente wurden zuvor bereits erläutert. Schließlich formatiert \titlecontents* die Unterabschnitte im partiellen Inhaltsverzeichnis als einen zusammenhängenden Absatz. Dieser ist im Blocksatz gesetzt, mit zentrierter letzter Zeile (\fillast). Reiht man diese Vorgänge aneinander, so erhält man das gewünschte Ergebnis, ohne das Quelldokument in irgendeiner Weise verändern zu müssen. Ein echtes Design würde natürlich auch das Erscheinungsbild der Überschriften für die Unterabschnitte mit jenem der Abschnittsüberschriften harmonisieren.
ABSCHNITT 1
Ein Titel-Test Titel Eins – Längerer Titel Zwei – Noch längerer Titel Vier.
Dieser Text zeigt, dass der Absatz nicht eingezogen ist.
1.1 Titel Eins Bsp. 2-3-14
Etwas Text . . .
\usepackage{titlesec,titletoc} \titleformat{\section}[frame]{\normalfont} {\footnotesize \enspace ABSCHNITT \thesection \enspace}{6pt}{\large\bfseries\filcenter} [\vspace*{5pt}\startcontents \printcontents{p-}{2}{\contentsmargin{0pt}}] \titlespacing*{\section}{1pc}{*4}{*2.3}[1pc] \titlecontents*{p-subsection}[0pt] {\small\itshape\fillast}{}{}{}[ -- ][.] \section{Ein Titel-Test} Dieser Text zeigt, dass der Absatz nicht eingezogen ist. \subsection{Titel Eins} Etwas Text \ldots \newpage \subsection{Längerer Titel Zwei} Noch etwas Text. \stopcontents \subsection{Titel Drei} \resumecontents \subsection{Noch längerer Titel Vier}
Falls erforderlich, kann man das Sammeln von Einträgen für ein partielles Verzeichnis zeitweise (oder endgültig) einstellen. Im vorigen Beispiel wurde der dritte Unterabschnitt mithilfe der entsprechenden Funktion unterdrückt.
\stopcontents[name]
\resumecontents[name]
Der Befehl \stopcontents unterbindet das Sammeln der Einträge für das partielle Standardverzeichnis, oder für das partielle Verzeichnis, dessen Name gegebenenfalls im optionalen Argument name angegeben wurde. Zu einem späteren Zeitpunkt kann man das Sammeln von Einträgen mit dem Befehl \resumecontents wieder aufnehmen. Dieser Befehl ist nicht zu verwechseln mit \startcontents, welcher ein neues partielles Inhaltsverzeichnis anlegt und die alten Einträge damit unzugänglich macht.
2.4 Verweise in Dokumenten LaTEX verfügt über Befehle, die das Verwalten von Verweisen in einem Dokument vereinfachen. Dabei werden insbesondere Querverweise (interne Verweise zwischen Elementen innerhalb eines Dokumentes), Literaturverweise (Verweise auf externe Dokumente) und Indexeinträge von ausgewählten Worten
69
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
oder Ausdrücken unterstützt. Die Funktionen zum Erstellen von Stichwortverzeichnissen werden in Kapitel 11 erläutert, die Funktionen für Literaturverweise in Kapiteln 12 und 13. Um Querverweise zu Elementen innerhalb eines Dokumentes zu ermöglichen, wird dem jeweiligen Strukturelement zunächst ein „Schlüssel“ (aus einer Folge von ASCII-Zeichen, Zahlen und Punkten) zugewiesen. Dieser Schlüssel wird dann an anderer Stelle verwendet, um auf das Element zu verweisen
\label{schlüssel }
\ref{schlüssel }
\pageref{schlüssel }
Der Befehl \label weist dem aktuellen „aktiven“ Element eines Dokumentes den im Argument schlüssel angegebenen Schlüssel zu. (Welches Element an einem gegebenen Punkt gerade aktiv ist, wird im Folgenden erklärt.) Der Befehl \ref erzeugt eine Zeichenfolge, die das gegebene Element identifiziert – wie z.B. die Abschnitts-, Gleichungs- oder Abbildungsnummer – je nachdem welches Strukturelement aktiv war, als der Befehl \label gegeben wurde. Der Befehl \pageref erzeugt die Seitenzahl der Seite, auf welcher der Befehl \label gesetzt wurde. Die Zeichenfolge schlüssel muss dabei natürlich eindeutig sein. Ein Präfix mit einer Zeichenfolge, welche die Struktur des fraglichen Elementes identifiziert, ist dabei eine einfache aber wirkungsvolle Hilfe. So kann zum Beispiel sec für Abschnitte (sections) verwendet werden, fig für Abbildungen (figures), und so fort.
4 Abschnitt Ein Querverweis auf diesen Abschnitt sieht folgendermaßen aus: „siehe Abschnitt 4 auf Seite 6“.
\section{Abschnitt} \label{sec:hier} Ein Querverweis auf diesen Abschnitt sieht folgendermaßen aus: "‘siehe Abschnitt~\ref{sec:hier} auf Seite~\pageref{sec:hier}"’.
In Schlüsseln ! den. In bestimmten Sprachen-Formatvorlagen des babel-Paketes (siehe Kapibedingt zulässige tel 9) haben einige dieser Zeichen eine besondere Bedeutung und verhalten Zeichen sich grundlegend wie Befehle. Zwar bemüht sich das Paket, solche Zeichen
Es kann riskant sein, Satzzeichen wie etwa einen Doppelpunkt zu verwen-
als Teile von \label-Schlüsseln zuzulassen, aber diese Toleranz stößt gelegentlich an ihre Grenzen. Auch Zeichen, die nicht zum ASCII-Bereich gehören, und über Pakete wie inputenc verfügbar sind, werden in solchen Schlüsseln offiziell nicht unterstützt. Ihre Verwendung führt wahrscheinlich zu Fehlern. Das „zurzeit aktive“ Strukturelement, mit dem ein Querverweislabel erstellt wird, ist folgendermaßen festgelegt: Die Gliederungsbefehle (\chapter , \section , . . . ), die Umgebungen equation, figure, table und die theoremFamilie sowie die verschiedenen Ebenen der Umgebung enumerate und \footnote setzen den aktuellen Bezug, der die Nummer enthält, die LaTEX für das gegebene Element generiert. Dieser Bezug wird normalerweise am Anfang eines Elementes gesetzt, und zurückgesetzt, wenn der Geltungsbereich dieses Elementes verlassen wird Probleme bei ! Ausnahmen von dieser Regel sind die Umgebungen table und figure, Querverweisen auf bei denen der aktuelle Bezug durch den Befehl \caption gesetzt wird. DaGleitobjekte durch werden mehrere Paare von \caption und \label-Befehlen innerhalb
70
Bsp. 2-4-1
2.4 Verweise in Dokumenten
einer Umgebung ermöglicht.1 Da \caption die Nummerierung des Bezugs setzt, muss der zugehörige \label-Befehl auf \caption folgen. Andernfalls wird eine falsche Bezugsnummer gesetzt. Wenn der \label-Befehl früher im Gleitobjekt auftaucht, nimmt er den aktuellen Bezug eines vorhergehenden Elementes auf, normalerweise, den des Gliederungselementes. Dies wird anhand des folgenden Beispiels deutlich, wo nur die Label „fig:in2“ und „fig:in3“ richtig gesetzt sind, um die erforderlichen Bezugsnummern für die Abbildungen zu erzeugen. Im Falle des Labels „fig:in4“ zeigt sich, dass Umgebungen (hier center) den Geltungsbereich von Bezügen beenden, da dieses Label die Nummer des aktuellen Abschnitts ergibt und nicht die Nummer der Abbildung.
3 Ein Abschnitt 3.1 Ein Unterabschnitt Vorhergehender Text siehe ‘3.1’. . . . Abbildung . . . Abb. 1: Bildunterschrift 1 . . . Abbildung . . . Abb. 2: Bildunterschrift 2
Bsp. 2-4-2
Verwendete Label: ‘vorher’ (3.1), ‘fig:in1’ (3.1), ‘fig:in2’ (1), ‘fig:in3’ (2), ‘fig:in4’ (3.1), ‘danach’ (3.1).
\section{Ein Abschnitt} \subsection{Ein Unterabschnitt}\label{sec:before} Vorhergehender Text siehe ‘\ref{sec:before}’. \begin{figure}[ht] \label{fig:in1} \begin{center} \fbox{\ldots{} Abbildung \ldots} \caption{Bildunterschrift 1} \label{fig:in2} \bigskip \fbox{\ldots{} Abbildung \ldots} \caption{Bildunterschrift 2} \label{fig:in3} \end{center} \label{fig:in4} \end{figure} \label{sec:after} \raggedright Verwendete Label: ‘vorher’ ‘fig:in1’ (\ref{fig:in1}), (\ref{fig:in2}), ‘fig:in3’ ‘fig:in4’ (\ref{fig:in4}), (\ref{sec:after}).
(\ref{sec:before}), ‘fig:in2’ (\ref{fig:in3}), ‘danach’
Für jedes Argument schlüssel, das mit \label{schlüssel } deklariert wird, speichert LaTEX den aktuellen Bezug und die Seitenzahl. Mehrere \labelBefehle (mit verschiedenen Schlüsseln) innerhalb eines Abschnitts erzeugen also die gleiche Bezugszahl für das Strukturelement, möglicherweise jedoch mit unterschiedlichen Seitenzahlen
2.4.1 showkeys – Anzeigen der Querverweisschlüssel Viele Anwender drucken Zwischenentwürfe aus, wenn sie längere Dokumente schreiben. Es wäre hilfreich, wenn in solchen Zwischenentwürfen die \labelBefehle und ihre Schlüssel sichtbar wären. Das Paket showkeys von David Carlisle unterstützt diese Funktion. 1 Es gibt jedoch gute Gründe, warum man nicht mehr als einen \caption-Befehl in einer Gleitobjektumgebung verwenden sollte. Es erschwert die korrekte räumliche Gestaltung, und, was noch wichtiger ist, zukünftige Versionen von LaTEX könnten diese Syntax nicht mehr akzeptieren.
71
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Wenn das Paket geladen wird, verändert es die Befehle \label , \ref , \pageref , \cite und \bibitem so, dass die verwendeten Schlüssel mit ausgegeben werden. Die Befehle \label und \bibitem setzen Schlüssel normalerweise in den Rand in eine Box. Die Befehle, die auf die Schlüssel verweisen, schreiben sie in kleiner Schriftgröße über den formatierten Verweistext (wobei sie möglicherweise den vorhandenen Text zum Teil überschreiben). Das Paket versucht die Schlüssel so anzuzeigen, dass die Formatierung des übrigen Textes nicht verändert wird. Dafür gibt es jedoch keine Garantie. Daher sollte man das Paket showkeys entfernen oder deaktivieren, bevor man die endgültige Formatierung für ein Dokument vornimmt.
1 Ein Beispiel sec
sec
Abschnitt 1 zeigt den Einsatz des showkeyseq Paketes durch Verweis auf Gleichung (1). a=b
(1)
eq
\usepackage{showkeys} \section{Ein Beispiel}\label{sec} Abschnitt~\ref{sec} zeigt den Einsatz des \texttt{showkeys}-Paketes durch Verweis auf Gleichung~(\ref{eq}). \begin{equation} a = b \label{eq} \end{equation}
Das Paket unterstützt die Option fleqn der Standardklassen und arbeitet mit AMS-LaTEX, varioref, natbib und vielen weiteren Paketen zusammen. Es ist jedoch fast unmöglich ein fehlerloses Zusammenspiel mit allen Paketen, die mit den Querverweismechanismen arbeiten, zu gewährleisten. Wer nur die Schlüssel des \label-Befehls am Rand sehen möchte, kann die anderen Anzeigen mit der Paketoption notref unterdrücken. Sie deaktiviert das Umdefinieren von \ref , \pageref und verwandten Befehlen. Die Option notcite hat die gleichen Auswirkungen auf \cite und die entsprechenden Befehle der Pakete natbib und harvard. Alternativ dazu kann man die Label mit der Option color weniger störend gestalten. Außerdem unterstützt das Paket noch die Optionen draft (Standard) und final. Letztere Option ist auf Paketebene nutzlos, da es dort ebensogut ausreicht, das Paket showkeys gar nicht erst einzubinden. Als globale Option einer Klasse ist final jedoch sehr praktisch.
2.4.2 varioref – Flexiblere Querverweise In vielen Fällen ist es hilfreich, einen Verweis auf eine Abbildung oder Tabelle sowohl mit \ref als auch \pageref zu bilden, insbesondere, wenn eine oder mehrere Seiten zwischen Verweis und Objekt liegen. Daher verwenden manche Anwender einen Befehl wie
\newcommand\fullref[1]{\ref{#1} auf Seite~\pageref{#1}} um die Länge der Eingabe, die ein vollständiger Verweis erfordert, zu reduzieren. Da man aber niemals genau weiß, wo das Objekt eines Verweises letztendlich platziert wird, kann diese Methode auch einen Verweis auf die aktuelle Seite erzeugen. Dies wäre eher störend und sollte daher vermieden werden. Das Paket varioref von Frank Mittelbach versucht, dieses Problem zu lösen. Für Einzelverweise stellt es die Befehle \vref und \vpageref zur Verfügung.
72
Bsp. 2-4-3
2.4 Verweise in Dokumenten
Mehrfache Verweise werden mit \vrefrange und \vpagerefrange behandelt. In Abhängigkeit von dem Zähler, der für einen Verweis verwendet wird, kann man Querverweise außerdem mit der Deklaration \labelformat unterschiedlich formatieren.
\vref*{schlüssel } Der Befehl \vref entspricht \ref, wenn sich Verweis und \label auf der gleichen Seite befinden. Liegen sie eine Seite auseinander, erzeugt \vref eine dieser Zeichenfolgen: „on the facing page“ (auf der gegenüberliegenden Seite)1 , „on the preceding page“ (auf der vorherigen Seite) oder „on the following page“ (auf der nächsten Seite). Das Wort „facing“ (gegenüberliegend) wird verwendet, wenn Label und Verweis auf eine Doppelseite fallen. Ist der Abstand größer als eine Seite, stellt \vref den Verweis aus \ref und \pageref zusammen. Wenn allerdings anstatt der herkömmlichen Seitennummerierung mit arabischen Ziffern ein anderes Nummerierungssytem verwendet wird (z.B. \pagenumbering{roman}), wird nicht zwischen einer oder mehreren Seiten Abstand unterschieden. Es gibt einen weiteren Unterschied zwischen \ref und \vref: Letzterer ersetzt alle vorhergehenden Abstände durch seine eigenen Einstellungen. An einigen Stellen, wie z.B. direkt nach einer öffnenden Klammer, ist dies jedoch unerwünscht. In solchen Fällen empfiehlt es sich, \vref* zu verwenden. Er verhält sich genau wie \vref, fügt jedoch keine Leerräume vor dem erzeugten Text ein.
\vpageref*[diese-seite][andere-seite]{schlüssel } Manchmal möchte man nur auf eine Seitenzahl verweisen. Dann sollte der Verweis unterdrückt werden, sofern er sich auf die aktuelle Seite bezieht. Zu diesem Zweck wurde der Befehl \vpageref definiert. Er erzeugt die gleichen Ausdrücke wie \vref, beginnt jedoch nicht mit \ref. Wenn sich Bezug und Label auf der gleichen Seite befinden, verwendet er den Ausdruck, der unter \reftextcurrent gespeichert ist. Wenn man für \reftextcurrent einen Ausdruck wie „on this page“ (auf dieser Seite) definiert, kann man vermeiden, dass eine Formulierung wie
... see the diagram \vpageref{ex:foo} which shows ... den Text „. . . see the diagram which shows . . . “ (siehe das Diagramm, welches zeigt, wie) erzeugt, was irreführend sein könnte. Gleiches gilt in anderen Sprachen, wenn man varioref mit einer Sprachoption lädt oder die erzeugten Texte anpasst. Siehe dazu Seite 77. Man kann ein Leerzeichen vor \vpageref platzieren. Wenn der Befehl keinen Text erzeugt, wird das Leerzeichen ignoriert. Wenn Text eingefügt wird, fügt der Befehl automatisch einen geeigneten Abstand vor dem Text ein. Die 1 Das Paket erzeugt im Standardmodus englische Texte. Diese können jedoch mithilfe von LaTEX-Funktionen für die Unterstützung anderer Sprachen geändert werden. Weitere Informationen hierzu befinden sich im Abschnitt Sprachenunterstützung auf Seite 77. In den folgenden Beispielen werden zunächst die englischen Verweistexte verwendet.
73
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Variante \vpageref* entfernt Weißraum vor dem erzeugten Text, ohne eigenen einzufügen. Sie lässt sich also sehr gut verwenden, wenn das Einfügen eines Abstandes Probleme bereiten würde. Mit den zwei optionalen Argumenten der Befehle \vpageref und \vpageref* kann man Verweise sogar noch genauer steuern. Das erste Argument gibt den Text an, der eingesetzt werden soll, wenn sich Bezug und Label auf der gleichen Seite befinden. Das ist besonders hilfreich, wenn beide so nahe beieinander liegen, dass sie nur eventuell durch einen Seitenumbruch getrennt werden. In einem solchen Fall weiß man normalerweise, ob der Verweis vor oder nach dem Label erscheint, so dass man eine Formulierung, wie die folgende erzeugen kann:
... see the diagram \vpageref[above]{ex:foo} which shows ... Der Ergebnistext ist in diesem Fall: „. . . see the diagram above which shows . . . “, wenn beide auf der gleichen Seite erscheinen, oder „. . . see the diagram on the page before which shows . . . “, wenn sie durch einen Seitenumbruch getrennt sind (oder ähnlich, je nachdem welcher Text für die Befehle \reftext..before und \reftext..after definiert wurde). Wenn man die optionalen Argumente von \vpageref für Gleitobjekte, wie Abbildungen oder Tabellen, verwendet, ist dabei jedoch Folgendes zu beachten: Je nach Einstellung der Parameter zum Positionieren von Gleitobjekten kann das entsprechende Objekt am Anfang der aktuellen Seite, also vor dem Verweis, erscheinen, obwohl sich das Label im Quelltext hinter dem Verweis befindet.1 Vielleicht zieht man sogar die Formulierung „. . . see the above diagram“, also eine geänderte Wortwahl und Reihenfolge, vor, wenn Diagramm und Verweis auf der gleichen Seite erscheinen. Tatsächlich ist eine solche Umformulierung in einigen Sprachen sogar erforderlich. Für diese Abwandlung kann das zweite Argument andere-seite verwendet werden. Es gibt den Text an, der dem erzeugten Verweis vorangeht, wenn Objekt und Verweis nicht auf der gleichen Seite erscheinen. Um den gewünschten Effekt zu erzielen würde man in diesem Falle also schreiben:
... see the \vpageref[above diagram][diagram]{ex:foo} which shows ... Das Paket amsmath stellt den Befehl \eqref für Verweise auf Gleichungen bereit. Es versieht die Formelnummer automatisch mit Klammern. Mit der folgenden Definition könnte man außerdem automatisch eine Seitenreferenz hinzufügen:
\newcommand\eqvref[1]{\eqref{#1}\ \vpageref{#1}}
\vrefrange[text-hier ]{start-schlüssel }{end-schlüssel } Dieser Befehl ähnelt \vref. Er hat jedoch zwei obligatorische Argumente, die sich auf einen Objektbereich beziehen (z.B. eine Reihe von Abbildungen oder 1 Um sicherzustellen, dass Gleitobjekte immer erst hinter ihrer Position im Quelltext gesetzt werden, kann man das Paket flafter verwenden, das in Abschnitt 6.2 beschrieben wird.
74
2.4 Verweise in Dokumenten
eine Abfolge von Gleichungen). Er verwendet den Verweistext in Abhängigkeit davon, wie die beiden Label zueinander positioniert sind und bezieht seine Funktionalität hauptsächlich über den Befehl \vpagerefrange (der im Folgenden noch beschrieben wird). Das optionale Argument des Befehls enthält den Text, der eingesetzt werden soll, wenn beide Label auf der gleichen Seite liegen. Für diesen Zweck ist die in \reftextcurrent gespeicherte Zeichenfolge voreingestellt.
1 Test Man beachte Gleichungen 1.1 bis 1.3 auf Seiten 6–7 und auch Gleichungen 1.2 bis 1.3 auf der nächsten Seite. a=b+c Bsp. 2-4-4
6
Eine zweite chung. . .
Glei-
b=a+c
(1.2)
. . . und noch eine Gleichung: c=a+b
(1.3)
(1.1) 7
\usepackage[ngerman]{varioref} \renewcommand\theequation {\thesection.\arabic{equation}} \section{Test} Man beachte Gleichungen~\vrefrange{A}{C} und auch Gleichungen~\vrefrange{B}{C}. \begin{equation} a=b+c\label{A} \end{equation} Eine zweite Gleichung\ldots \begin{equation} b=a+c\label{B} \end{equation} \ldots und noch eine Gleichung: \begin{equation} c=a+b\label{C} \end{equation}
\vpagerefrange*[text-hier ]{start-schlüssel }{end-schlüssel } Dieser Befehl ähnelt \vpageref, besitzt jedoch zwei obligatorische Argumente und zwar zwei Label, die einen Bereich festlegen. Wenn beide Label auf der gleichen Seite liegen, verhält sich der Befehl genauso wie \vpageref mit nur einem Label. Andernfalls erzeugt er einen Verweis wie etwa „on pages 15–18“ („auf den Seiten 15–18“; vgl. die Anpassungsmöglichkeiten, die im Folgenden beschrieben werden). Genau wie \vrefrange verfügt er über ein optionales Argument, das auf den Text von \reftextcurrent voreingestellt ist und eingesetzt wird, wenn sich beide Label auf der gleichen Seite befinden. Auch hier existiert eine Sternform, \vpagerefrange* , die dem erzeugten Text vorangehenden Weißraum entfernt, ohne dafür einen eigenen Abstand einzufügen. Die Standardverweise, die mit \ref erzeugt werden, bestehen aus den Daten des entsprechenden \label-Befehls (üblicherweise eine Nummer). Ihre Zierlabel weitere Formatierung liegt beim Anwender. Ein Verweis auf Gleichungen, der immer in der Form „Gleichung (nummer)“ erscheinen soll, muss jedes Mal folgendermaßen geschrieben werden: „Gleichung (\ref{key })“.
\labelformat{zähler }{formatierungs-code} Das Paket varioref bietet mit dem Befehl \labelformat eine Möglichkeit, solches Beiwerk automatisch zu erzeugen.1 Der Befehl besitzt zwei Argumente: Den Namen eines Zählers und seine Darstellung, wenn auf ihn Bezug genommen wird. Man muss also den Namen des Zählers kennen, um ihn einsetzen 1 Dieser
Befehl ist auch separat über das Paket fncylab von Robin Fairbairns verfügbar.
75
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
zu können. Das sollte in der Praxis kein Problem sein. Der aktuelle Zähler, genauer gesagt seine Darstellung, wird als Argument übernommen, so dass das zweite Argument #1 enthalten sollte. Als Nebeneffekt von \labelformat kann man \ref , je nach Formatierung, nicht am Anfang eines Satzes verwenden, wenn der eingesetzte Text klein geschrieben ist. Um diesem Problem entgegenzuwirken, stellt varioref die Befehle \Ref und \Vref (inklusive ihrer Sternformen) zur Verfügung, die sich wie \ref und \vref verhalten, jedoch das erste Zeichen der erzeugten Zeichenfolge groß schreiben. Im folgenden Beispiel kann man dieses Verhalten beobachten, wenn „in Abschnitt“ als „In Abschnitt“ erscheint.
1 Ein Beispiel In Abschnitt 1 sieht man die \labelformatDeklaration mit einem Verweis auf Informationen in Gleichung (1). a=b
(1)
\usepackage{varioref} \labelformat{section}{in Abschnitt~#1} \labelformat{equation}{in Gleichung~(#1)} \section{Ein Beispiel}\label{sec} \Ref{sec} sieht man die \verb=\labelformat=-Deklaration mit einem Verweis auf Informationen \ref{eq}. \begin{equation}a = b\label{eq}\end{equation}
\Ref und \Vref funktionieren nur dann korrekt, wenn das erste Zeichen in \labelformat ein einfaches ASCII-Zeichen ist. Andernfalls führt der Befehl nicht zur Großschreibung sondern schlimmstenfalls zu einigen Fehlermeldungen. Wenn an dieser Stelle ein komplexes Zeichen (z.B. ein Buchstabe mit Akzent) steht, muss dieses explizit in Klammern gesetzt werden, um den Teil zu kennzeichnen, der in Großschreibung gesetzt werden soll. Für VerAktuelle ! weise auf Abbildungen im Ungarischen könnte man z.B. folgenden Ausdruck babel-Version nötig! formulieren: \labelformat{figure}{{\’a}bra~\thefigure}. Man beachte auch, dass die beiden Befehle mit älteren Versionen von babel nicht korrekt zusammenarbeiten. Als zweites Beispiel für den Einsatz von \labelformat soll folgende Situation betrachtet werden: In den Dokumentenklassen report und book werden Fußnoten kapitelweise nummeriert. Dadurch werden Querverweise auf Fußnoten zweideutig, da nicht klar ist, ob sie sich auf einen Eintrag im aktuellen oder in einem anderen Kapitel beziehen. Diese Zweideutigkeit kann man auflösen, indem man im Verweis immer die Kapitelnummer nennt, oder indem man die Kapitelnummer des \labels mit der aktuellen vergleicht und erstere nur hinzufügt, wenn beide voneinander abweichen. Dieses Verhalten wird durch folgenden Code erzeugt: \usepackage{ifthen,varioref} \labelformat{footnote}{#1\protect\iscurrentchapter{\thechapter}} \newcommand\iscurrentchapter[1]{% \ifthenelse{\equal{#1}{\thechapter}}{}{ in Kapitel~#1}} Der Trick besteht darin, mit einem \protect-Befehl zu verhindern, dass der Befehl \iscurrentchapter beim Erzeugen des Labels ausgewertet wird. Wenn dann der Befehl \ref ausgeführt wird, vergleicht \iscurrentchapter sein Argument (also die Kapitelnummer des Labels) mit der aktuellen Kapitelnummer, und setzt, sofern sie sich unterscheiden, den passenden Text.
76
Bsp. 2-4-5
2.4 Verweise in Dokumenten
Das Paket stellt außerdem den Befehl \vrefpagenum bereit, mit dem man eigene kleine Befehle schreiben kann. Damit lassen sich Funktionen wie die Eigene Befehle für beiden zuletzt beschriebenen realisieren. Der Befehl verfügt über zwei Argu- Querverweise mente: Das zweite ist ein Label (wie es in \label oder \ref verwendet wird) formulieren und das erste ist ein beliebiger Befehlsname (es muss ein eigener Name sein), der die Seitenzahl für das Label erhält. Wenn man also zwei (oder mehr) Label hat, kann man ihre Seitenzahlen auslesen, vergleichen und dann entscheiden, was gesetzt werden soll. Das nächste Beispiel zeigt ein nicht allzu ernst gemeintes Verfahren, das die Label von zwei Formeln miteinander vergleicht und entsprechend ihrer Position zueinander einen bestimmten Text ausgibt. Dabei sollte man die Ergebnisse auf der ersten Seite mit denen der zweiten Seite vergleichen.
Test: die Gleichungen 1 und 2 auf dieser Seite Test: die Gleichung 1 auf dieser Seite und 3 auf Seite 8
Bsp. 2-4-6
a=b+c
(1)
b=a+c
(2)
6
Test: die Gleichungen 1 und 2 auf der vorherigen Seite Test: die Gleichung 1 auf der vorherigen Seite und 3 auf der nächsten Seite
7
\usepackage[ngerman]{varioref} \usepackage{ifthen} \newcommand\veqns[2]{% \vrefpagenum\firstnum{#1}% \vrefpagenum\secondnum{#2}% die Gleichung% \ifthenelse{\equal\firstnum\secondnum}% {en \ref{#1}}% { \ref{#1}\vpageref{#1}}% \space und \ref{#2}\vpageref{#2}} Test: \veqns{A}{B} \par Test: \veqns{A}{C} \begin{equation} a=b+c \label{A}\end{equation} \begin{equation} b=a+c \label{B}\end{equation} \newpage Test: \veqns{A}{B} \par Test: \veqns{A}{C} \newpage \begin{equation} c=a+b \label{C}\end{equation}
Das Paket unterstützt die Optionen des babel-Systems (siehe Abschnitt 9.1.3). Die Deklaration \usepackage[ngerman]{varioref} erzeugt Paketoptionen somit passende Texte für die deutsche Sprache. Außerdem unterstützt das Paket die Optionen final (voreingestellt) und draft. Letztere ändert bestimmte Fehlermeldungen (wie beschrieben auf Seite 79) in Warnungen. Diese Funktion kann beim Schreiben eines Dokumentes hilfreich sein. Um eine weitere Anpassung zu ermöglichen, sind alle Zeichenfolgen Individuelle durch Makros festgelegt (welche durch die Sprachenoptionen vordefiniert wer- Anpassungen den). Rückbezüge verwenden \reftextbefore, wenn sich das Label auf der nicht sichtbaren, vorherigen Seite befindet und \reftextfacebefore, wenn es auf der vorherigen, gegenüberliegenden Seite erscheint (wenn also die Seitenzahl ungerade ist). Ebenso wird \reftextafter verwendet, wenn das Label auf der nächsten Seite, zu der man umblättern muss, erscheint, und \reftextfaceafter, wenn es sich auf der nächsten, gegenüberliegenden Seite befindet. Diese vier Formulierungen können mit \renewcommand verändert werden. Der Befehl \reftextfaraway wird verwendet, wenn Label und Verweis mehr als eine Seite auseinanderliegen oder nicht numerisch sind. Dieses Makro unterscheidet sich von den bisherigen darin, dass es über ein Argument,
77
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
das symbolische Label, verfügt, so dass man in seinem Ersetzungstext den Befehl \pageref verwenden kann. Wenn man diese Makros z.B. in deutschen Dokumenten einsetzen möchte, würde man eine Formulierung wie die folgende verwenden:
\renewcommand\reftextfaraway[1]{auf Seite~\pageref{#1}} Der Befehl \reftextpagerange hat zwei Argumente und erzeugt Text, der auf einen Seitenbereich verweist (die Argumente sind Schlüssel für \pageref). Weiter unten folgt eine Auflistung der deutschen Standardtexte. Auch \reftextlabelrange verfügt über zwei Argumente. Dieser Befehl beschreibt eine Serie von Abbildungen, Tabellen oder anderen Elementen, auf die sich die Label beziehen. Der englische Standardtext ist hier „\ref{#1} to~\ref{#2}“ (\ref{#1} bis~\ref{#2}). Um zufällige Variationen der generierten Texte zu erhalten, kann man innerhalb der Makros für die Verweistexte den Befehl \reftextvario verwenden. Der Befehl hat zwei Argumente, von denen er mal das eine und mal das andere für den Ausdruck einsetzt, je nachdem, wie häufig die Befehle \vref oder \vpageref bereits in einem Dokument verwendet wurden. In diesem Buch wurden folgende Einstellungen für die verschiedenen Makros verwendet:
\renewcommand\reftextfaceafter {auf der \reftextvario{nächsten}{gegenüberliegenden} Seite} \renewcommand\reftextfacebefore{auf der \reftextvario{vorherigen}{gegenüberliegenden} Seite} \renewcommand\reftextafter{auf der nächsten Seite} \renewcommand\reftextbefore{auf der vorherigen Seite} \renewcommand\reftextcurrent{auf dieser Seite} \renewcommand\reftextfaraway[1]{auf Seite~\pageref{#1}} \renewcommand\reftextpagerange[2]{auf den Seiten~\pageref{#1}--\pageref{#2}} \renewcommand\reftextlabelrange[2]{\ref{#1} bis~\ref{#2}} Wenn man also das Paket seinen eigenen Vorlieben anpassen möchte, braucht man nur die entsprechenden neuen Definitionen für die oben aufgeführten Befehle in eine Datei mit der Erweiterung .sty (z.B. vrflocal.sty) zu schreiben. Wenn man außerdem die Anweisung \RequirePackage{varioref} (siehe Abschnitt A.4 auf Seite 910) an den Beginn der Datei setzt, lädt dieses lokale Paket automatisch das Paket varioref. Bei Verwendung des babel-Systems sollten neue Definitionen für einzelne Sprachen mit \addto hinzugefügt werden. Dieses Verfahren wird in Abschnitt 9.5 erklärt. Manch einer mag vielleicht keine textuellen Querverweise, möchte jedoch Intelligente Seitenverweise unterdrücken, wenn Label und Bezug auf der gleichen Seite lienumerische Verweise gen. Dies lässt sich folgendermaßen, mithilfe des Befehls \thevpagerefnum, erreichen:
\renewcommand\reftextfaceafter {auf Seite~\thevpagerefnum} \renewcommand\reftextfacebefore{auf Seite~\thevpagerefnum}
78
2.4 Verweise in Dokumenten
\renewcommand\reftextafter \renewcommand\reftextbefore
{auf Seite~\thevpagerefnum} {auf Seite~\thevpagerefnum}
Innerhalb eines \reftext...-Befehls ergibt \thevpagerefnum die aktuelle Seitenzahl, sofern diese bekannt ist, oder sonst zwei Fragezeichen. Eine andere interessante Konfiguration besteht darin, die Verweise dann Kein Verweis bei zu unterdrücken, wenn das Ziel des Verweises auf einer gegenüberliegenden sichtbarem Ziel Seite liegt, also sichtbar ist. Dazu muss das von \vpageref normalerweise eingefügte Leerzeichen wieder entfernt werden:
\renewcommand\reftextfaceafter {\unskip} \renewcommand\reftextfacebefore{\unskip} Wenn man Befehle wie die zuvor beschriebenen definiert, wird man mit einigen interessanten Problemen konfrontiert. Ein generierter Text wie „auf " Einige Warnungen der nächsten Seite“ könnte z.B. über zwei Seiten umbrochen werden. Dieses Problem lässt sich durch einen Algorithmus kaum befriedigend lösen; eine solche Situation kann sogar dazu führen, dass ein Dokument ständig von einem Status in den anderen wechselt (d.h. ein Verweistext wird eingefügt; dieser erweist sich als falsch; im nächsten Lauf wird ein anderer eingefügt, wodurch der erste wieder richtig wird; ein Text wird. . . ). Die aktuelle Version des Paketes varioref orientiert sich am Ende des erzeugten Verweistextes. Das Beispiel Tabelle 5 auf dieser "Seitenumbruch# Seite wäre also korrekt, wenn sich Tabelle 5 auf der gleichen Seite wie das Wort „Seite“ befindet, nicht wie das Wort „dieser“. Dieses Verhalten ist jedoch nicht immer wirklich zufriedenstellend und kann in manchen Fällen zu einer Schleife führen, so dass LaTEX immer wieder einen zusätzlichen Lauf benötigt. Daher erzeugen derartige Situationen immer eine LaTEX-Fehlermeldung, damit man das Problem untersuchen und entscheiden kann, ob man an dieser Stelle nicht besser den Befehl \ref verwendet. Man sollte sich auch der Probleme bewusst sein, die entstehen können, wenn man \reftextvario verwendet: Wenn man an mehreren nahe beieinander liegenden Stellen auf das gleiche Objekt verweist, kann die jedesmal wechselnde Wortwahl seltsam wirken. Eine abschließende Warnung: Jeder Einsatz von \vref oder \vpageref erzeugt intern zwei Makronamen. Wenn man diesen Befehl sehr häufig verwendet, kann das bei kleineren TEX-Installationen dazu führen, dass man für neue Namen („string pool“ oder „multiletter control sequences“) keinen Raum mehr hat, oder dass kein Hauptspeicher mehr zur Verfügung steht. Aus diesem Grund gibt es zusätzlich den Befehl \fullref. Er kann immer dann verwendet werden, wenn man sicher ist, dass Label und Verweis nicht auf nahe beieinander liegenden Seiten erscheinen.
2.4.3 prettyref – Ausschmücken von Querverweisen Die Querverweismechanismen von LaTEX erzeugen zwar die Elementnummer (oder die Seitennummer), aber leider lassen sie den Anwender mit der dazugehörigen Gestaltung völlig allein. Daher ist es schwierig, einheitliche Verweise
79
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
zu erzielen. Wenn z.B. ein Verlagshaus fordert, dass auf Abbildungen immer mit „Abb.xx“ verwiesen wird, muss man diese Einträge im ganzen Quelldokument manuell ändern. Das Paket prettyref von Kevin Ruland unterstützt automatische Formatierungen mit zusätzlichen Zeichenfolgen, sofern die schlüssel der \labelBefehle einer bestimmten Struktur folgen. Diese Zeichenfolgen müssen die Form „"Präfix#:"name#“ (wie z.B. fig:main) haben, wobei weder präfix noch name einen Doppelpunkt enthalten dürfen. Diese Form wird bereits von vielen Anwendern benutzt. Die zusätzlichen Texte werden mit dem Befehl \prettyref erzeugt, ohne dass das Paket die Standardbefehle \ref und \pageref beeinflusst. Im Unterschied hierzu ändert die \labelformatDeklaration des Paketes varioref überall die Darstellung der Verweislabel.
\newrefformat{präfix }{code} Dieser Befehl formatiert Querverweise, in deren Schlüssel das Argument präfix als Präfix erscheint. Das Argument code verweist mit #1 auf den verwendeten Schlüssel, so dass er an \ref , \vref , und so weiter übergeben werden kann. Dieses Format wird verwendet, wenn man den Schlüssel mit dem Befehl \prettyref einsetzt.
4 Abschnitt Ein Verweis auf die Gleichung in diesem Abschnitt sieht aus wie folgt: „siehe (1) in Abschnitt 4“. a=b
(1)
\usepackage{prettyref} \newrefformat{sec}{Abschnitt~\ref{#1}} \section{Abschnitt} \label{sec:hier} Ein Verweis auf die Gleichung in diesem Abschnitt sieht aus wie folgt: "‘siehe \prettyref{eq:a} in \prettyref{sec:hier}"’. \begin{equation} a = b \label{eq:a} \end{equation}
Das Beispiel zeigt, dass die Formatierung für das "präfix# „eq“ bereits in dem Paket prettyref enthalten ist. Es kennt einige weitere vordefinierte Formate, aber da die meisten von ihnen zwischen dem erzeugten Text und der Nummer einen Umbruch erlauben, sollte man wohl besser eigene definieren. Da das Paket nicht zwischen Verweisen am Anfang und in der Mitte eines Satzes unterscheidet, ist es wahrscheinlich nicht in allen Fällen geeignet. Auch kann man den Doppelpunkt zwischen "präfix# und "name# nicht ersetzen, so dass es nicht mit Sprachen kombiniert werden kann, in denen der Doppelpunkt bereits eine besondere Bedeutung hat. In einem solchen Fall bietet sich gegebenenfalls das Paket fancyref von Axel Reichert an, das ähnliche Funktionen bereitstellt aber intern mit komplexeren Einstellungen arbeitet.
2.4.4 titleref – Nicht numerische Verweise In manchen Dokumenten muss man auf die Titel der Abschnitte verweisen, anstatt auf ihre Nummern. Vielleicht weil sie nicht nummeriert sind, oder auch weil ein bestimmter Stil gefordert ist. Das Paket titleref von Donald Arseneau stellt die hierzu erforderlichen Funktionen zur Verfügung. Es enthält den Befehl \titleref, mit dem auf die Titel von Abschnitten und Gleitobjekten verwiesen werden kann.
80
Bsp. 2-4-7
2.4 Verweise in Dokumenten
Nummerierte Abschnitte und Gleitobjekte werden im Querverweis genauso dargestellt, wie sie im Inhaltsverzeichnis erscheinen würden (egal ob ein " Nicht nummerierte Abschnitte Verzeichnis gedruckt wird oder nicht). Wenn also das optionale Argument eines Gliederungsbefehls oder einer Bildunterschrift einen Kurztitel nennt, bekommen bewegte Argumente dann wird dieser Titel von \titleref gesetzt. Der Verweistitel für nicht nummerierte Abschnitte entspricht dem gesetzten Titel. Folglich verwandeln sich die Argumente nicht nummerierter Abschnitte in bewegte Argumente, die sehr seltsame Fehler erzeugen, wenn sie zerbrechliche Befehle enthalten, die nicht mit \protect geschützt sind. Ein \titleref-Verweis auf ein Label ohne Titel (z.B. ein Label in einer Fußnote oder eine Nummerierung) übernimmt einfach irgendeinen vorhergehenden Titel, normalerweise den des aktuellen Abschnitts. Wie im nächsten Beispiel dargestellt, ist der Titel des aktuellen Abschnitts über \currenttitle verfügbar, egal ob er mit einem \label-Schlüssel versehen ist oder nicht. Das Beispiel zeigt auch, dass \titleref und \ref nebeneinander existieren können.
1 Textuelle Verweise In Abschnitt „Textuelle Verweise“ zeigt der Verweis auf Abschnitt „Beispiel“, dass man auf nicht nummerierte Abschnitte verweisen kann.
Ein Beispiel Bsp. 2-4-8
Der aktuelle Abschnitt wird in Abschnitt 1 erwähnt.
\usepackage{titleref} \setcounter{secnumdepth}{1} \section{Textuelle Verweise}\label{num} In Abschnitt "‘\currenttitle{}"’ zeigt der Verweis auf Abschnitt "‘\titleref{ex}"’, dass man auf nicht nummerierte Abschnitte verweisen kann. \subsection[Beispiel]{Ein Beispiel}\label{ex} Der aktuelle Abschnitt wird in Abschnitt~\ref{num} erwähnt.
Das Format des Verweises auf den Titel wird durch Umdefinieren des Befehls \theTitleReference gesteuert. Er verfügt über zwei Argumente: Eine nummer, wie sie von \ref dargestellt würde, und einen titel. Enthält ein Dokument Verweise auf nicht nummerierte Titel, dann sollte das Argument nummer nicht verwendet werden, da es einfach eine beliebige Nummer enthält. So zeigt der Befehl \titleref im nächsten Beispiel die Zahl „1“, obwohl er auf einen nicht nummerierten Abschnitt verweist.
1 Textuelle Verweise In Abschnitt 1 Textuelle Verweise zeigt der Verweis auf Abschnitt 1 Beispiel, dass man auf nicht nummerierte Abschnitte verweisen kann.
Ein Beispiel Bsp. 2-4-9
Der aktuelle Abschnitt wird in Abschnitt 1 erwähnt.
\usepackage{titleref} \renewcommand\theTitleReference[2] {\emph{#1\ #2}} \setcounter{secnumdepth}{1} \section{Textuelle Verweise}\label{num} In Abschnitt \currenttitle{} zeigt der Verweis auf Abschnitt \titleref{ex}, dass man auf nicht nummerierte Abschnitte verweisen kann. \subsection[Beispiel]{Ein Beispiel}\label{ex} Der aktuelle Abschnitt wird in Abschnitt~\ref{num} erwähnt.
81
2
DIE STRUKTUR EINES LATEX-DOKUMENTES
Konflikte mit anderen Paketen
Das Paket ist so voreingestellt, dass es zusätzlichen Code in Befehle einfügt, die üblicherweise für Überschriften, Bildunterschriften und entsprechende Elemente verwendet werden. Im Zusammenspiel mit anderen Paketen, die Titel nach einer eigenen Methode setzen, kann es daher zu Konflikten kommen. In diesem Fall kann man das Paket mit der Option usetoc anweisen, einen völlig anderen Ansatz zu verwenden. Wie der Name schon verrät, zeichnet das Paket dann die Daten des Inhaltsverzeichnisses auf, indem es \addcontentsline neu definiert. Als Konsequenz darf der Befehl \label nicht mehr im Argument titel erscheinen, sondern muss diesem folgen. Außerdem darf zwischen Überschrift und Label kein \addcontentsline-Befehl auftauchen, der zu einer anderen Überschrift gehört. Da die Sternformen von Gliederungsbefehlen keine Verzeichniseinträge erzeugen, werden diese weiterhin umdefiniert. Dies kann durch Hinzufügen der Option nostar verhindert werden. Dann kann man allerdings auch nicht mehr auf ihre Titel verweisen.
2.4.5 hyperref – Dynamische Querverweise Sebastian Rahtz hat (mit Beiträgen von Heiko Oberdiek und David Carlisle) das Paket hyperref entwickelt, mit dem man alle Querverweise (Zitate, Inhaltsverzeichnisse, usw.) in Hyperlinks verwandeln kann. Es erweitert existierende Befehle um Funktionen, die \special-Befehle erzeugen, mit deren Hilfe entsprechend ausgerüstete Treiber Querverweise in Hyperlinks umwandeln können. Das Paket wird in [59, S. 35–67] ausführlich erläutert. Es verfügt über ein eigenes Handbuch, das selbst Hyperlinks enthält, die mit dem Paket erzeugt wurden. Das Paket hyperref lässt sich relativ einfach bedienen. Wenn man es als Letztes in die Liste der geladenen Pakete aufnimmt, werden alle Querverweise im Dokument in Hyperlinks umgesetzt. Es verfügt über einige Optionen, mit denen man einstellen kann, wie die Hyperlinks aussehen oder funktionieren. Die wichtigsten Optionen sind colorlinks, um Links einzufärben anstatt einzurahmen, und backref, um Links in die Bibliographie einzufügen, die auf die Stellen verweisen, an denen die jeweiligen Einträge zitiert wurden. Das Paket bietet eine Reihe von Einstellungsmöglichkeiten, um das Verhalten von PDF-Dateien, die aus einem Dokument erzeugt wurden, und von PDF-Betrachtern, wie z.B. Adobe Reader, zu beeinflussen, siehe etwa [59].
2.4.6 xr – Verweise auf externe Dokumente Auf Basis der Arbeit von Jean-Pierre Drucbert entwickelte David Carlisle das Paket xr, ein System für Verweise auf externe Dokumente. Wenn ein Dokument z.B. auf Abschnitte in einem anderen Dokument namens other.tex verweisen muss, dann kann man das Paket xr in der Hauptdatei angeben und den Befehl \externaldocument{other} in die Präambel schreiben. Danach kann man mit \ref und \pageref auf alles verweisen, was entweder im Hauptdokument oder im Dokument other.tex mit dem Befehl \label versehen wurde. Man kann eine beliebige Anzahl solcher externer Dokumente deklarieren.
82
2.4 Verweise in Dokumenten
Wenn eines der externen Dokumente oder das Hauptdokument den gleichen \label-Schlüssel verwendet, erzeugt dies einen Konflikt, da der gleiche Schlüssel mehrmals definiert wird. Um dieses Problem zu vermeiden, verfügt \externaldocument über ein optionales Argument. Wenn man den Befehl in der Form \externaldocument[A-]{other} deklariert, erhalten alle Verweise in die Datei other.tex das Präfix A- . Wenn also ein Abschnitt in der Datei other.tex das Label \label{intro} erhält, kann darauf mit \ref{A-intro} verwiesen werden. Das Präfix muss nicht unbedingt A- sein; es kann eine beliebige Zeichenfolge sein, die sicherstellt, dass alle Label, die aus externen Dateien importiert werden, eindeutig sind. Wenn im Gebrauch befindliche Pakete bestimmte aktive Zeichen (wie zum Beispiel : im Französischen oder " im Deutschen) deklarieren, sollten diese jedoch nicht in \label-Befehlen verwendet werden. Ebenso sollten sie nicht im optionalen Argument von \externaldocument erscheinen. Das Paket kann nicht mit hyperref kombiniert werden, da beide den internen Mechanismus für Querverweise verändern. Stattdessen kann man das Paket xr-hyper einsetzen, das speziell auf die Zusammenarbeit mit hyperref zugeschnitten ist.
83
K A P I T E L
3
Formatierungswerkzeuge 3.1 Textfragmente und Absätze . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.2 Fußnoten, Endnoten und Marginalien . . . . . . . . . . . . . . . . . .
116
3.3 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
3.4 Wortwörtlicher Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159
3.5 Zeilen und Spalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
185
Die Art und Weise, in der Informationen visuell präsentiert werden, kann das Verständnis einer Aussage durch den Leser stark beeinflussen. Darum ist es wichtig, die besten verfügbaren Werkzeuge zu verwenden, um die genaue Bedeutung der eigenen Worte zu vermitteln. Gleichzeitig gilt jedoch, dass Formen der visuellen Darstellung dem Benutzer immer nur das Verständnis eines Textes erleichtern dürfen, nicht aber seine Aufmerksamkeit ablenken. Daher sind eine einheitliche Darstellung und einheitliche Konventionen für die visuellen Merkmale ein absolutes Muss. Ebenso sollte die Art und Weise, in der gegebene Strukturelemente hervorgehoben werden, im gesamten Dokument immer gleich sein. Diese Regeln lassen sich leicht festschreiben, indem man für jedes Dokumentenelement, das besonders behandelt werden soll, einen eigenen Befehl oder eine Umgebung definiert und diese Befehle und Umgebungen in einer Paketdatei oder in der Dokumentenpräambel zusammenfasst. Indem man dann ausschließlich diese Befehle verwendet, ist eine einheitliche Präsentationsform gewährleistet. Das vorliegende Kapitel erklärt verschiedene Wege, Teile eines Dokumentes hervorzuheben. Der erste Abschnitt befasst sich mit der Hervorhebung kurzer Textfragmente oder Absätze und beschreibt Werkzeuge, mit denen diese verändert werden können. Der zweite Abschnitt wirft einen Blick auf die verschiedenen Arten von Anmerkungen, wie z.B. Fußnoten, Marginalien und Endnoten, und erläutert, wie ihr Layout angepasst werden kann. Der dritte Abschnitt behandelt dann das Formatieren von Listen. Zunächst werden die verschiedenen Parameter und Befehle untersucht, mit denen die LaTEX-Listenumgebungen enumerate, itemize und description
3
FORMATIERUNGSWERKZEUGE
gesteuert werden. Anschließend werden die Erweiterungen, die durch das paralist-Paket bereitgestellt werden, sowie das Konzept der „theoremähnlichen Strukturen“ am Beispiel des amsthm-Paketes besprochen. Für die Struktur- und Layoutanforderungen der meisten Leser sind diese Erweiterungen ausreichend. Für alle anderen wird im restlichen Teil des Abschnitts die allgemeine Listenumgebung list vorgestellt. Es wird gezeigt, wie sich durch Variieren der Parameterwerte, mit denen die Umgebung list gesteuert wird, Layouts anpassen lassen. Der vierte Teil beschreibt, wie die wortwörtliche Ausgabe von Text (englisch: verbatim) simuliert werden kann. In diesem Zusammenhang gilt ein spezielles Augenmerk den leistungsfähigen Paketen fancyvrb und listings. Das Kapitel schließt mit der Betrachtung von Paketen, die sich mit der Zeilennummerierung, Handhabung von Spalten (etwa von parallelem Text in zwei Spalten) oder den Problemen beim mehrspaltigen Satz beschäftigen.
3.1 Textfragmente und Absätze Dieser Abschnitt befasst sich mit Textfragmenten und erläutert, wie sie bearbeitet und hervorgehoben werden können, indem man ihnen ein anderes Erscheinungsbild zuweist als dem übrigen Text. Zunächst wird besprochen, wie man Befehle definiert, die automatisch korrekten Leerraum nach ihrer Anwendung erzeugen. Anschließend wird gezeigt, wie professionelle Auslassungspunkte erzeugt werden. Zur Hervorhebung von Text können Parameter wie Schriftform, -stärke und -grad angepasst werden (siehe Abschnitt 7.3.1 auf Seite 349). Genauso kann Text unterstrichen oder die Laufweite einer Schrift verändert werden. Mittel, mit denen sich diese Effekte erzielen lassen, werden durch die Pakete relsize, textcase, ulem und soul angeboten. Der Rest des Abschnitts wendet sich absatzbezogenen Fragen zu, wie etwa der Erzeugung von großen Anfangsbuchstaben zu Beginn eines Absatzes, der Änderung der Absatzausrichtung oder Einstellung des Zeilenvorschubs innerhalb eines Absatzes sowie dem Einfügen von rechteckigen Löchern in einem Absatz, die unter anderem mit kleinen Bildern gefüllt werden können.
3.1.1 xspace – Korrekte Leerräume nach Makros Das kleine Paket xspace (von David Carlisle) definiert den Befehl \xspace , der am Ende von Makros verwendet werden sollte, die hauptsächlich zur Textproduktion dienen. Er fügt ein Leerzeichen ein, sofern dem Makro nicht bestimmte Satzzeichen folgen. Durch die Verwendung von \xspace müssen Befehle ohne Argument nicht mehr mit \! oder {} abgeschlossen werden, damit nach ihnen ein Leerzeichen ausgegeben wird. Wenn jedoch eine dieser Konstruktionen auf \xspace folgt, fügt \xspace kein zusätzliches Leerzeichen ein. Das bedeutet, dass man \xspace ohne Risiko an das Ende eines bereits existierenden Makros anfügen kann, ohne dass man Änderungen in seinem Dokument vornehmen müsste. Mögliche Kandidaten für die Verwendung von \xspace sind
86
3.1 Textfragmente und Absätze
Befehle für Abkürzungen, wie „z.B.“ oder „d.h.“.
\newcommand\zB{}{z.B.,\xspace} \newcommand\xdh{}{d.h.,\xspace} \newcommand\usw{}{usw.\@\xspace} Wichtig ist die richtige Verwendung des Befehls \@ zur Erzeugung der richtigen Art von Leerraum: Rechts von einem Punkt verhindert er, dass zusätzlicher Abstand eingefügt wird, da der Punkt in diesem Fall nicht als ein Satzendezeichen gewertet wird. Links von einem Punkt bewirkt er, dass LaTEX den Punkt immer als Satzendezeichen interpretiert. Unter Umständen kann es vorkommen, dass \xspace an der falschen Stelle einen Leerraum einfügt. In solchen Fällen kann man an das Makro einfach {} anschließen, wodurch der Leerraum unterdrückt wird.
Bsp. 3-1-1
Die Bundesrepublik Deutschland hat 16 Länder. Großbritannien, die Bundesrepublik Deutschland und Frankreich haben enge kulturelle Verbindungen.
\usepackage{xspace} \newcommand\BRD{Bundesrepublik Deutschland\xspace} \newcommand\GB {Großbritannien\xspace} Die \BRD hat 16 Länder.\\ \GB, die \BRD und Frankreich haben enge kulturelle Verbindungen.
3.1.2 ellipsis, lips – Auslassungspunkte Auslassungspunkte werden im Allgemeinen durch drei aufeinander folgende Punkte dargestellt (auch als Ellipse bekannt). Der Abstand der Punkte untereinander hängt von typographischen und verlagsspezifischen Konventionen ab. Hier sind deutliche Unterschiede zu beobachten. Im Französischen werden nach Hart [65] oder dem Chicago Manual of Style [38], „points de suspension“ dicht aneinander gesetzt und sie folgen dem vorangegangenen Wort mit einem Leerraum auf der rechten Seite: C’est une chose. . . bien difficile. Im Deutschen haben Auslassungspunkte gemäß Duden [45] einen Leerraum auf der linken und rechten Seite, es sei denn, sie stellen ausgelassene Buchstaben innerhalb eines Wortes dar oder ein Satzzeichen folgt: Du E. . . du! Scher dich zum . . .! In der britischen oder amerikanischen Typographie dagegen werden die Punkte mit vollem Wortabstand gesetzt und recht komplizierte Regeln legen fest, wie andere Satzzeichen an beiden Enden behandelt werden. LaTEX bietet die Befehle \dots und \textellipsis , um Auslassungspunkte mit kleinem Abstand zu erzeugen. Leider produziert die Standarddefinition (die aus Plain-TEX stammt) einen ungleichmäßigen Abstand auf der linken und rechten Seite – dies ist für den korrekten Satz von einigen der obigen Beispiele völlig ungeeignet. Der zusätzliche kleine Abstand rechts der Auslassungspunkte ist in manchen Situationen richtig (z.B. wenn ein Satzzeichen folgt). Wenn den Auslassungspunkten ein Leerzeichen folgt, sieht dieser
87
3
FORMATIERUNGSWERKZEUGE
Abstand jedoch recht unpassend aus und sollte am besten weggelassen werden, wie das Beispiel unten zeigt (auch wenn durch Auslassen des Abstandes im zweiten Fall das Ausrufezeichen ein wenig zu nah an die Auslassungspunkte rutscht).
Ein Beispiel zum Vergleich: Du E. . . du! Scher dich zum . . . ! Du E. . . du! Scher dich zum . . .!
\newcommand\lips{\dots\unkern} Ein Beispiel zum Vergleich:\\ Du E\dots\ du! Scher dich zum \dots!\\ Du E\lips\ du! Scher dich zum \lips!
Bsp. 3-1-2
Dieses Problem wird mit dem Paket ellipsis von Peter Heslin angepackt. Es definiert den Befehl \dots neu. Für die Entscheidung, ob ein Nachabstand gesetzt werden soll, wird das auf die Auslassungspunkte folgende Zeichen herangezogen. Ein zusätzlicher Leerraum wird nur eingefügt, wenn das folgende Zeichen im Befehl \ellipsispunctuation aufgelistet ist, der standardmäßig den Wert „,.:;!?“ hat. Bei einigen Sprachunterstützungspaketen werden bestimmte Zeichen aktiviert. Werden diese in der Liste verwendet, muss sie neu deklariert werden, damit das Paket die Zeichen weiterhin erkennt. Der Abstand zwischen den Punkten sowie der hinter den Auslassungspunkten gegebenenfalls eingefügte Leerraum kann über den Befehl \ellipsisgap festgelegt werden. Automatische Anpassungen, die vom Schriftgrad abhängen, lassen sich über fontabhängige Einheiten, wie em, oder einen Bruchteil eines \fontdimen-Befehls steuern (siehe Seite 439).
Ein Beispiel zum Vergleich: Du E. . . du! Scher dich zum . . . ! Du E. . . du! Scher dich zum . . . ! Du E. . . du! Scher dich zum . . . !
\usepackage{ellipsis} Ein Beispiel zum Vergleich:\\ Du E\dots\ du! Scher dich zum \dots!\\ \renewcommand\ellipsisgap{1.5\fontdimen3\font} Du E\dots\ du! Scher dich zum \dots!\\ \renewcommand\ellipsisgap{0.3em} Du E\dots\ du! Scher dich zum \dots!
Für den Spezialfall, dass Auslassungspunkte mitten im Wort benötigt werden (oder aus anderen Gründen nur ein kleiner Abstand auf beiden Seiten gewünscht ist), bietet das Paket den Befehl \midwordellipsis . Wenn das Paket mit der Option mla (Modern Language Association Style) geladen wurde, werden die Auslassungspunkte automatisch eingeklammert und hinter dem letzten Punkt folgt kein zusätzlicher Abstand. Gemäß dem Chicago Manual of Style [38] werden Auslassungspunkte mit vollem Wortabstand zwischen den Punkten gesetzt. Dieses Erscheinungsbild erreicht man mit dem Paket lips1 von Matt Swift. Es implementiert den Befehl \lips , der den Empfehlungen in diesem Referenzbuch folgt. Auslassungspunkte, die beispielsweise das Fehlen des Satzendes markieren, sollten nach [38, §10.48–63] aus vier Punkten bestehen, wobei der erste Punkt das Satzendezeichen darstellt.2 Der Befehl \lips realisiert dies, indem er „\lips.“ als „.\lips“ interpretiert, wie das nächste Beispiel zeigt. 1 lips ist, genaugenommen, Teil einer größeren Paketsammlung. Wenn nur dieses Paket verwendet werden soll, muss auch das Paket moredefs desselben Autors geladen werden. 2 Nicht, dass die Autoren dieses Buches irgendeine Logik darin sehen könnten . . .
88
Bsp. 3-1-3
3.1 Textfragmente und Absätze
Bsp. 3-1-4
In . . . werden Auslassungspunkte normalerweise mit vollem Wortabstand gesetzt. . . . Ein Beispiel hierfür ist dieser Absatz.
\usepackage{moredefs,lips} In \lips werden Auslassungspunkte normalerweise mit vollem Wortabstand gesetzt \lips. Ein Beispiel hierfür ist dieser Absatz.
Der Befehl \lips sucht nach Satzzeichen, die auf den Befehl folgen, und sorgt dafür, dass Auslassungspunkte und Satzzeichen im Fall von „,:;?!)’]/“ nicht durch einen Zeilenumbruch getrennt werden. In anderen Fällen (z.B. einer öffnenden Klammer) ist ein Zeilenumbruch zugelassen. Die obige Liste wird in \LPNobreakList gespeichert und kann bei Bedarf angepasst werden. Um einen umbruchgeschützten Leerraum nach \lips zu erzwingen, muss der Befehl durch eine Tilde ergänzt werden (~). Bei Verwendung der Option mla werden die erzeugten Auslassungspunkte automatisch eingeklammert und ein Punkt nach dem Befehl \lips wird nicht an den Anfang verschoben. Wenn erforderlich, erzeugt \olips die ursprüngliche Version ohne Klammern.
Bsp. 3-1-5
In . . . werden Auslassungspunkte mit vollem Wortabstand zwischen den Punkten gesetzt [. . .]. Ein Beispiel hierfür ist dieser Absatz.
\usepackage{moredefs}\usepackage[mla]{lips} In \olips werden Auslassungspunkte mit vollem Wortabstand zwischen den Punkten gesetzt \lips. Ein Beispiel hierfür ist dieser Absatz.
3.1.3 amsmath – Geschützte Bindestriche Das amsmath-Paket, das ausführlich in Kapitel 8 besprochen wird, bietet ebenfalls einen Befehl zur Verwendung in Absätzen. Der Befehl \nobreakdash unterdrückt jede Möglichkeit, nach dem Bindestrich einen Zeilenumbruch vorzunehmen. Eine sehr verbreitete Verwendung von \nobreakdash ist die Unterdrückung von unerwünschten Zeilenumbrüchen in Fällen wie „p-adic“, aber es gibt noch ein weiteres Beispiel: Wenn „Seite 3–9“ als Seite 3\nobreakdash--9 kodiert ist, wird zwischen dem Bindestrich und der 9 kein Zeilenumbruch eingefügt. Dieser Befehl muss unmittelbar vor dem Bindestrich (- , -- oder ---) angegeben werden. Das folgende Beispiel zeigt, wie ein Zeilenumbruch nach einem Bindestrich unterdrückt wird, aber die normalen Bindestriche im folgenden Wort zugelassen werden (es reicht, nach dem Bindestrich einen Leerraum ohne horizontale Ausdehnung einzufügen). Bei häufiger Verwendung empfiehlt es sich, Abkürzungen wie \p zu definieren. Danach wird das Wort „dimensionalen“ umbrochen, während ein Umbruch nach „p-“ verhindert (was im Beispiel zur überlaufenden Zeile führt) und dann „3–9“ auf die nächste Zeile verschoben wird.
Bsp. 3-1-6
Die Verallgemeinerung des n-dimensionalen Falls (mittels Standard p-adicTopologie) kann man auf den Seiten 3–9 von Band IV finden.
\usepackage{amsmath} \newcommand\p{$p$\nobreakdash} \newcommand\Ndash{\nobreakdash--} \newcommand\n[1]{$n$\nobreakdash-\hspace{0pt}} Die Verallgemeinerung des \n-dimensionalen Falls (mittels Standard \p-adic{}-Topologie) kann man auf den Seiten 3\Ndash 9 von Band IV finden.
89
3
FORMATIERUNGSWERKZEUGE
3.1.4 relsize – Relative Skalierung der Schriftgröße Standard-LaTEX bietet zehn vordefinierte Befehle zur Änderung der Schriftgröße (siehe Tabelle 7.1 auf Seite 353). Die von ihnen erzeugten Schriftgrade werden jeweils von der Dokumentenklasse festgelegt, bleiben aber innerhalb eines Dokumentes vom Wert unverändert. Dies bedeutet, dass z.B. \small in einem Dokument immer denselben Wert wählt, ungeachtet der umgebenden Bedingungen. In vielen Fällen ist es jedoch wünschenswert, die Schriftgröße relativ zur aktuellen Größe zu ändern. Dies lässt sich durch das Paket relsize bewerkstelligen, das ursprünglich von Bernie Cosell entwickelt und später für LaTEX 2ε von Donald Arseneau und Matt Swift aktualisiert und erweitert wurde. Das Paket enthält den deklarativen Befehl \relsize , der als Argument eine Zahl erwartet. Diese gibt die Anzahl an Schritten an, um welche die Schriftgröße geändert werden soll. Wenn z.B. die aktuelle Schriftgröße \Large ist, ändert \relsize{-2} die Schriftgröße auf \normalsize . Wenn die gewünschte Anzahl an Schritten nicht verfügbar ist, wird die kleinste (d.h. \tiny) bzw. größte (d.h. \Huge) Schriftgröße gewählt. Eine Umkehr der Skalierung durch Negation des Argumentwertes muss also nicht notwendigerweise wieder zur Ausgangsgröße führen. Besser ist es, nur lokale Veränderungen vorzunehmen (etwa innerhalb einer Gruppe geschweifter Klammern) und LaTEX die Rückänderungen selbst zu überlassen. Das Paket definiert außerdem \smaller und \larger , welche einfach Abkürzungen für den Befehl \relsize mit den Argumenten -1 bzw. 1 sind. Weitere bequeme Alternativen sind \textsmaller und \textlarger , die als Argument den zu verkleinernden oder zu vergrößernden Text haben. Diesen vier Befehlen kann als optionales Argument die Anzahl der Skalierungsschritte mitgegeben werden, wenn ein anderer Wert als der voreingestellte Wert 1 benötigt wird.
Großer Text mit ein paar kleinen Worten integriert. KAPITÄLCHEN (gefälscht) Kapitälchen (echt; vgl. Lauflänge und Strichstärke zur vorherigen Zeile).
\usepackage{relsize} \Large Großer Text mit ein paar \\ {\relsize{-2}kleinen Worten} integriert. \par\medskip \normalsize\noindent K\textsmaller[2]{APITÄLCHEN} (gefälscht)\\ \textsc{Kapitälchen} (echt; vgl.\ Lauf\/länge und \\ Strichstärke zur vorherigen Zeile).
Die obige Beschreibung für \relsize ist nicht ganz korrekt: Bei jedem Schritt versucht der Befehl, die Schriftgröße um 20% zu vergrößern oder zu verkleinern, und wählt dann den Schriftgrößenbefehl von LaTEX, welcher der gewünschten Zielgröße am nächsten kommt. Anschließend werden die gewünschte Schriftgröße und die Zielgröße verglichen. Wenn sie um mehr als den aktuellen Wert von \RSpercentTolerance (angegeben in Prozent) differieren, ruft das Paket den Befehl \fontsize mit der Zielgröße als einem der Parameter auf. Bei diesem Prozess versucht LaTEXs ZeichensatzAuswahlschema, einen Font zu finden, welcher der Anforderung am nächsten kommt. Standardmäßig ist \RSpercentTolerance ein leeres Makro, das als 30 (Prozent) interpretiert wird, wenn die aktuelle Schriftformgruppe nur
90
Bsp. 3-1-7
3.1 Textfragmente und Absätze
aus separaten Größen besteht (siehe Abschnitt 7.10.3), und als 5, wenn die Schriftformdefinition einen Bereich von Schriftgrößen umfasst. In einigen Fällen kann ein fester Faktor von 1.2 für jeden Schritt eine zu große Einschränkung darstellen. Aus diesem Grund bietet das Paket zusätzlich den allgemeineren deklarativen Befehl \relscale{faktor } und seine Variante \textscale{faktor }{text } , mit denen die Schriftgröße basierend auf dem gegebenen faktor, wie etwa 1.3 (Vergrößerung um 30%), ausgewählt werden kann. Zwei weitere Befehle dienen zur Skalierung im mathematischen Modus: \mathsmaller und \mathlarger . LaTEX erkennt nur vier verschiedene mathematische Schriftgrößen, von denen zwei (\displaystyle und \textstyle) für die meisten Symbole nahezu identisch sind; dadurch ist das Anwendungsgebiet dieser Befehle etwas begrenzt. Die Situation verbessert sich geringfügig, wenn zusätzlich exscale geladen wird: Der Befehl \mathlarger schaltet dann, bei Verwendung in \displaystyle , intern auf eine größere Textschriftgröße um und wählt anschließend den zu dieser Schriftgröße gehörenden \displaystyle.
Bsp. 3-1-8
und
1 2
!
!=
!= 12 aber N = N
!
\usepackage{exscale,relsize} \[ \sum \neq \mathlarger{\sum} \] und $\frac{1}{2} \neq \frac{\mathlarger 1} {2}$ aber $N = \mathlarger {N}$
Diese Befehle versuchen, bei großen Operatoren die hoch- und tiefgestellten Indizes richtig zu positionieren. Zum Beispiel:
Bsp. 3-1-9
"n
i=1
!=
n ! i=1
!=
n ! i=1
#∞ 0
!=
$
0
∞
!=
$
0
∞
\usepackage{exscale,relsize} \[ \mathsmaller\sum_{i=1}^n \neq \sum_{i=1}^n \neq \mathlarger\sum_{i=1}^n \qquad \mathsmaller\int_0^\infty \neq \int_0^\infty \neq \mathlarger\int_0^\infty \]
Zu beachten ist, dass die Verwendung dieser Befehle innerhalb von Formeln die wahre Natur der mathematischen Objekte in ihrem Argument verbergen, so dass die Abstände in der Formel ohne zusätzliche Hilfe missraten können. Wie das folgende Beispiel zeigt, muss man deshalb möglicherweise explizit \mathrel , \mathbin oder \mathop verwenden, um korrekte Abstände zu erhalten.
Bsp. 3-1-10
a × b != a×b != a × b
\usepackage{exscale,relsize} \[ a \times b \neq a \mathlarger{\times} b \neq a \mathbin{\mathlarger\times} b \]
Aufgrund dieser Unwägbarkeiten sollten die Befehle \mathlarger und \mathsmaller nicht blindlings eingesetzt werden, sie sind nicht in jedem Fall empfehlenswert.
91
3
FORMATIERUNGSWERKZEUGE
3.1.5 textcase – Intelligente Groß- und Kleinschreibung Die LaTEX-Standardbefehle \MakeUppercase und \MakeLowercase ändern die Schreibweise der Zeichen ihrer Argumente in Groß- bzw. Kleinschreibung, wodurch die Makros nach Bedarf expandiert werden. Beispielsweise ergibt
\MakeUppercase{Am \today} „AM 29. MÄRZ 2005“. Manchmal werden dadurch mehr Zeichen als gewünscht geändert. Wenn der Text z.B. eine mathematische Formel enthält, ist die Umsetzung in Großbuchstaben nicht so empfehlenswert, weil sich damit die Bedeutung ändert. Auf ähnliche Weise stellen die Argumente der Befehle \label , \ref und \cite semantische Informationen dar, die bei Änderung der Schreibweise zu falschen oder fehlenden Querverweisen führen, weil LaTEX nach den falschen Einträgen sucht.
\MakeTextUppercase{text }
\MakeTextLowercase{text }
Das Paket textcase von David Carlisle löst die oben angesprochenen Probleme, indem es \MakeTextUppercase und \MakeTextLowercase als Alternativbefehle bereitstellt, die mathematische Formeln und Querverweise erkennen und diese unberücksichtigt lassen.
1 Groß-/Kleinschreibung TEXT IM ABSCHNITT 1, ÜBER a = b UND α != a
\usepackage{textcase} \section{Groß-/Kleinschreibung}\label{exa} \MakeTextUppercase{Text im Abschnitt~\ref{exa}, über $a=b$ und \(\alpha \neq a \) }
Bsp. 3-1-11
Manchmal sollten Teile des Textes aus dem einen oder anderen Grund unverändert bleiben. Mit \NoCaseChange bietet das Paket eine allgemeine Vorgehensweise, um solche Teile zu markieren. Ein Beispiel:
EIN BISSCHEN TEXT Noch mehr TEXT
\usepackage{textcase} \MakeTextUppercase{Ein bisschen Text \NoCaseChange{Noch mehr} Text}
Bsp. 3-1-12
Wenn notwendig, kann dieses Verfahren verwendet werden, um syntaktische Informationen zu verbergen, wie in
\NoCaseChange{\begin{tabular}{ll}}...\NoCaseChange{\end{tabular}} Dadurch wird verhindert, dass tabular und ll fälschlicherweise großgeschrieben werden. Dies alles funktioniert nur, wenn sich der betreffende Text auf der obersten Ebene befindet. Alles, was in geschweiften Klammern steht (mit Ausnahme der Argumentklammern von \label , \ref , \cite oder \NoCaseChange), wird in Groß- bzw. Kleinschreibung umgewandelt, ungeachtet dessen, um was es sich handelt.
DIESE BEIDEN SCHLAGEN IMMER FEHL A + B = C , LEIDER 92
\usepackage{textcase} \MakeTextUppercase{Diese beiden schlagen immer \textbf{fehl $a+b=c$} \emph{\NoCaseChange{, leider}}}
Bsp. 3-1-13
3.1 Textfragmente und Absätze
Im obigen Fall lässt sich diese Stolperfalle umgehen, indem man die Formel aus dem Argument von \textbf herausnimmt und \emph in das Argument von \NoCaseChange einsetzt. In anderen Fällen ist diese Art der Korrektur möglicherweise nicht machbar. Dann besteht die (etwas mühselige) Lösung darin, den problematischen Teil in einem gesonderten Makro zu verbergen und dieses beim Wechsel der Groß- und Kleinschreibung mit \protect zu schützen. Diese Methode funktioniert auch für die LaTEX-Standardbefehle, wie das nächste Beispiel zeigt.
Bsp. 3-1-14
DIES FUNKTIONIERT a + b = c IMMER
\newcommand\mymath{$a+b=c$} \MakeUppercase{Dies \textbf{funktioniert \protect\mymath} immer}
Einige Klassen und Pakete verwenden intern \MakeUppercase , zum Beispiel in Kopfzeilen. Wenn stattdessen \MakeTextUppercase verwendet werden soll, muss das textcase-Paket mit der Option overload geladen werden. Diese Option ersetzt die LaTEX-Standardbefehle durch die vom Paket definierten Varianten.
3.1.6 ulem – Betonen durch Unterstreichen LaTEX ermutigt dazu, einzelne Elemente nicht durch explizite Befehle für den Fontwechsel, wie \bfseries oder \itshape , zu betonen, sondern eher mit dem Befehl \emph oder der Deklaration \em hervorzuheben. Das Paket ulem (von Donald Arseneau) definiert den Befehl \emph neu, so dass er anstelle von kursivem Text unterstrichenen Text erzeugt. Innerhalb des unterstrichenen Textes können Zeilenumbrüche und sogar eine einfache Silbentrennung vorgenommen werden. Jedes Wort wird in einer unterstrichenen Box gesetzt, wodurch die automatische Silbentrennung ausgeschaltet wird. Weiche Trennstriche (\-) können aber trotzdem explizit eingesetzt werden. Die Unterstreichung setzt sich zwischen den Worten fort und wird wie normale Leerzeichen gedehnt. Da Leerzeichen normalerweise Wörter begrenzen, können bei syntaktischen Leerzeichen (z.B. „2.3 pt“) Schwierigkeiten auftreten. Es wird einiger Aufwand betrieben, um solche Leerzeichen zu handhaben. Wenn Probleme auftreten, kann man versuchen, den störenden Befehl in Klammern zu setzen, da alle Einträge in Klammern in eine \mbox gesetzt werden. Dadurch unterdrücken Klammern die Dehnung und den Umbruch des Textes, den sie einschließen. Konstruktionen, die in mehreren Abstufungen hervorgehoben werden sollen, werden von diesem Paket nicht immer korrekt behandelt. (Man beachte den Aufwand, der im folgenden Beispiel betrieben wurde, um korrekte Wortzwischenräume zu erhalten: Jedes einzelne weiter hervorgehobene Wort wurde mit einem eigenen \emph-Befehl versehen.)
Bsp. 3-1-15
Nein, ich habe nicht in dem Film Die Verfolgung und Ermordung des Jean-Paul Marat, vorgeführt von den Insassen des Asylum of Charenton unter Leitung des Marquis de Sade, mitgespielt! Aber ich habe ihn gesehen.
\usepackage{ulem} Nein, ich habe \emph{nicht} in dem Film \emph{\emph{Die} \emph{Verfolgung} \emph{und} \emph{Ermordung} \emph{des} \emph{Jean-Paul} \emph{Marat}, vorgeführt von den Insassen des Asylum of Charenton unter Leitung des Marquis de~Sade,} mitgespielt! Aber ich \emph{habe} ihn gesehen. 93
3
FORMATIERUNGSWERKZEUGE
Alternativ kann eine Unterstreichung explizit über den Befehl \uline erzeugt werden. Außerdem gibt es einige weitere Varianten, die in der Satztechnik üblich sind. Diese sind im nächsten Beispiel zu sehen.
Doppelt unterstrichen, mit Wellenlinie unterschlängelt, einfach (durchgestrichen) !!!!!!!!!!!! oder vollständig /////////// ausge-x-t.
\usepackage{ulem} Doppelt \uuline{unterstrichen}, mit Wellenlinie \uwave{unterschlängelt}, einfach (\sout{durchgestrichen}) oder vollständig \xout{ausge-x-t}.
Die Neudefinition von \emph kann mit \normalem und \ULforem ein- und ausgeschaltet werden. Alternativ kann das Paket mit der Option normalem geladen werden, wodurch diese Neudefinition unterdrückt wird. Eine weitere Paketoption ist UWforbf, die, wo immer möglich, \textbf und \bfseries durch \uwave ersetzt. Die Position der Linie, die durch \uline erzeugt wird, kann explizit durch Angabe eines Wertes für die Länge \ULdepth gesetzt werden. Der Standardwert ist fontabhängig und wird durch den ansonsten unsinnigen (da viel zu großen) Wert \maxdimen ausgedrückt. Auf ähnliche Weise kann die Dicke der Linie über den Befehl \ULthickness gesteuert werden; er muss aus historischen Gründen mithilfe von \renewcommand geändert werden.
3.1.7 soul – Sperren oder Schafe stehlen Frederic Goudy soll gesagt haben „Jeder, der Frakturschrift sperrt, stiehlt auch Schafe.“ Egal, ob die Aussage wahr oder erfunden ist – das Thema „Sperren“ ruft heftige Diskussionen unter Typographen hervor und wird in den meisten Fällen als Unart betrachtet, weil es den „Grauwert“ des Textes ändert und damit den Lesefluss stört. Trotzdem gibt es durchaus Gründe für eine Sperrung. Layoutschriften benötigen beispielsweise häufig einen lockeren Satz und in den meisten Schriftarten wird großgeschriebener Text auf diese Weise aufgewertet. Manchmal wird Sperrung auch zur Betonung eingesetzt, dabei tritt das Grauwertproblem jedoch besonders deutlich hervor. TEX bietet nur wenige Möglichkeiten zum Sperren von Text. Theoretisch ist es am besten, speziell dafür vorgesehene Zeichensätze zu verwenden, anstatt zu versuchen, das Problem mithilfe eines Makropaketes zu lösen. Da dies jedoch voraussetzt, dass ein solcher Zeichensatz verfügbar ist, müssen sich die meisten Benutzer anders behelfen. In der Praxis ist daher eine makrobasierte Lösung viel einfacher umzusetzen, auch wenn dies bedeutet, dass man einige Beschränkungen hinnehmen muss. Einige Informationen über den Lösungsansatz mit Fonts sind in der Dokumentation des fontinst-Paketes [74,75] aufgeführt. Das soul-Paket von Melchior Franz bietet Möglichkeiten zur Sperrung und zur Unterstreichung, erhält dabei aber die TEX-Funktion der automatischen Silbentrennung. Diese Funktion ist im ulem-Paket nicht verfügbar. Bei soul wird der Text Zeichen für Zeichen syntaktisch analysiert, was zu einer Reihe von Eigenheiten und Einschränkungen führt. Benutzer, die nur ein paar Wörter unterstreichen möchten und keine automatische Silbentrennung benötigen, sind daher besser mit ulem bedient, das bei der Eingabe weniger pingelig ist.
94
Bsp. 3-1-16
3.1 Textfragmente und Absätze
\caps{text }
\hl{text }
\so{text }
\st{text }
\ul{text }
Die Verwendung der fünf wichtigsten Anwenderbefehle des soul-Paketes zeigt das nächste Beispiel. In den Fällen, in denen es der Silbentrennungsalgorithmus von TEX nicht schafft, die richtige Trennstelle zu finden, kann man wie gewohnt die Stelle mit dem Befehl \- markieren. Wenn das color-Paket geladen ist, funktioniert \hl wie ein Textmarker, wobei er standardmäßig den Hintergrund gelb einfärbt; ansonsten verhält er sich wie \ul und unterstreicht sein Argument.
Bsp. 3-1-17
Mit dem soul-Paket können W ö r t e r u n d P h r a s e n g e s p e r r t werden. Großbuchstaben werden mit einem anderen Befehl GESPERRT. Auch zum Unterstreichen, Durchstreichen und Hervorheben gibt es eigene Befehle.
\usepackage{soul,color} Mit dem \texttt{soul}-Paket können \so{Wörter und Phrasen gesperrt} werden. Großbuchstaben werden mit einem anderen Befehl \caps{GESPERRT}. Auch zum \ul{Unterstreichen}, \st{Durchstreichen} und \hl{Hervorheben} gibt es eigene Befehle.
Normalerweise interpretiert das soul-Paket den Text im Argument von
\so , \st usw. Buchstabe für Buchstabe. Wenn Buchstaben jedoch durch mehr als ein Zeichen dargestellt werden (z.B. akzentuierte Zeichen), kann diese Vorgehensweise mit hässlichen TEX-Fehlermeldungen fehlschlagen. Glücklicherweise kennt das Paket bereits alle üblichen Akzentbefehle, so dass diese richtig behandelt werden. Alle anderen, z.B. diejenigen, die vom Paket textcomp bereitgestellt werden, können mithilfe einer \soulaccent-Deklaration dem soul-Paket bekannt gemacht werden. Eine andere Möglichkeit ist, die Zeichen einzuklammern.
Bsp. 3-1-18
Y " äùÕX
\usepackage{soul} \usepackage{textcomp} \soulaccent{\capitalgrave} \Huge \st{\"a \‘u \~O \capitalgrave X {\capitalbreve Y}}
Das soul-Paket weiß bereits, dass Anführungsstriche, Gedankenstriche und Geviertstriche aus mehreren Zeichen bestehen, und behandelt diese richtig. Andere syntaktische Ligaturen, wie das spanische Ausrufezeichen, müssen zur korrekten Bearbeitung in Klammern eingefasst werden.
Bsp. 3-1-19
„ A l s o “, sagte er. ¡H OLA – MEIN F REUND !
\usepackage{soul} \so{"‘Also"’}, sagte er. \\ \caps{{!‘}Hola -- mein \textbf{Freund}!}
Das soul-Paket erkennt auch Formeln, solange diese in $-Zeichen eingeschlossen sind (die Form \(. . .\) wird nicht unterstützt), sowie alle Fontbefehle mit Argument, wie \textbf . Ein selbstdefinierter Fontbefehl oder solche, die von einem Paket bereitgestellt werden, müssen allerdings mit der Deklaration \soulregister im soul-Paket registriert werden. Bei dieser Deklaration wird der Fontbefehl als erstes Argument und die Anzahl der Argumente (d.h. 0 oder 1) für diesen Befehl als zweites Argument angegeben. Innerhalb des soul-Paketes bietet keiner der Fontbefehle Kursivkorrekturen. Wenn eine solche erforderlich ist, muss sie manuell per \/ durchgeführt werden.
95
3
FORMATIERUNGSWERKZEUGE
Hier sehen wir soul i n A k t i o n: x != y O K ?
\newcommand\textsfbf[1]{\textsf{\bfseries#1}} \usepackage{soul} \soulregister{\textsfbf}{1} \so{Hier sehen wir \textsfbf{soul} in \emph{Aktion}: $x\neq y$ OK?}
Bsp. 3-1-20
Bei genauerer Betrachtung sieht man, dass die Fontbefehle eine direkt vorangehende und nachfolgende Sperrung unterdrücken, wie zwischen „Aktion“ und dem Doppelpunkt. Dies lässt sich korrigieren, indem man den Befehl \> hinzufügt, der einen größeren Abstand erzeugt.
le id e n d v s . l e i d e n d
\usepackage{soul} \so{l\textbf{ei}dend
vs. l\>\textbf{ei}\>dend}
Bsp. 3-1-21
Eingeklammerter Text wird während der syntaktischen Analyse als ein Objekt betrachtet und daher nicht gesperrt. Dies ist ein sehr willkommener Effekt, wenn bestimmte Ligaturen innerhalb eines gesperrten Textes zusammengehalten werden sollen. Diese Methode funktioniert jedoch nur, wenn der Text innerhalb der Klammern keine Trennstellen zur Silbentrennung enthält. Wenn Trennstellen vorhanden sind, wird die Paketfehlermeldung „Reconstruction failed“ ausgegeben. Um die Trennstellen zu verbergen, muss der Text in eine \mbox eingefügt werden, wie die zweite Textzeile des nächsten Beispiels zeigt. (TEX würde hier in „Es-cher“ trennen – mitten im „sch“, das stets zusammengehalten werden sollte.) Dieser Effekt lässt sich auch durch \soulomit erreichen, aber dann lässt sich der Text nur kompilieren, wenn das soul-Paket geladen ist.
SĚuŃvorriĚtung G ö d e l , E sch e r , B a c h Da lässt sich trefflich streiten!
\usepackage{soul,yfonts} \usepackage[ansinew]{inputenc} \textfrak{\so{S{ch}u{tz}vorri{ch}tung}} \par \so{Gödel, E\mbox{sch}er, Bach} \par \ul{Da lässt sich tre\soulomit{ffl}ich streiten!}
Bsp. 3-1-22
Eine der größten Einschränkungen der obigen Befehle ist, dass sie nicht verschachtelt werden können. Jegliche Versuche, soul-Befehle zu verschachteln, führen unweigerlich zu systemnahen TEX-Fehlern. Wenn wirklich eine Verschachtelung erforderlich ist, muss der innere Teil in einer Box platziert werden. Dies bedeutet aber, dass er nicht mehr am Zeilenende umbrochen werden kann.
Dies ist e i n e Q u a l
\usepackage{soul} \newsavebox\soulbox \sbox\soulbox{\so{ eine Qual }} für uns alle! \ul{Dies ist \mbox{\usebox{\soulbox}} für uns alle!}
Einige andere Befehle zeigen innerhalb des Argumentes von \so und Co. ein besonderes Verhalten. Wie oben zu sehen war, kann eine Sperrung an bestimmten Punkten mit \< unterdrückt oder mit \> erzwungen werden. Wie bei LaTEX üblich, erzeugt ~ ein geschütztes Leerzeichen. Der Befehl \\ wird zwar unterstützt, allerdings nur in seiner Grundform – d.h. ohne Stern und ohne optionales Argument. Mit \linebreak kann an bestimmten Punkten eine Zeile umbrochen werden, doch auch hier wird das optionale Argument nicht unterstützt. Andere LaTEX-Befehle werden das Paket wahrscheinlich eher sprengen
96
Bsp. 3-1-23
3.1 Textfragmente und Absätze
– hier hilft nur auszuprobieren, um herauszufinden, was sicher funktioniert und was zur Katastrophe führt. Das nächste Beispiel zeigt ein paar Anwendungen für diese besonderen Fälle.
Bsp. 3-1-24
„A l s o“ , s a g t e e r . D a n n w o l len wir mal eine kurze und eine gesperrte Zeile produzieren, OK?
\usepackage{soul} \so{{"‘}\ \labelwidth}}% {\parbox[b]{\labelwidth}% Term > Labelbreite {\makebox[0pt][l]{\textsf{#1:}}\\\mbox{}}}% {\textsf{#1:}}% Term
?
@
A
´04x
B
C
D
E
F
G
H
I
´05x
J
K
L
M
∦
O
P
Q
´06x
R Z b H P
S [ A I Q
T \ B J R
U ] C K S
V ^ D L T
W _ E M U
X ` F N V
Y ∅ G O W
X g k s {
Y h l t |
Z
c
d
e
ג u }
n ∼ κ
o ≈ k
p x !
f i q y
ð r z
˝8
˝9
˝A
˝B
˝C
˝D
˝E
˝F
´07x ´10x ´11x ´12x ´13x ´14x ´15x ´16x ´17x
˝0x
˝1x ˝2x ˝3x ˝4x ˝5x ˝6x ˝7x
Tabelle 7.29: Glyphen des msbm10 Fonts
Schriftfamilie eine fette Schriftserie vorhanden wäre (was leider nicht der Fall ist), könnte man danach die Einstellung für das Formellayout bold auf folgende Weise ändern:
\SetSymbolFont{AMSb}{bold}{U}{msb}{b}{n} Nachdem der Symbolfont deklariert wurde, kann er in Formeln verwendet werden. Wie aber teilt man NFSS mit, dass beispielsweise $a\lessdot b$ die Formel a o b erzeugen soll? Dazu muss man in NFSS über den Befehl \DeclareMathSymbol eigene Symbolnamen festlegen.
\DeclareMathSymbol{befehl }{typ}{symbol-font }{slot } Das erste Argument des Befehls \DeclareMathSymbol ist der gewählte Befehlsname. Das zweite Argument enthält einen der Befehle aus Tabelle 7.30 auf der nächsten Seite, der die Art des Symbols beschreibt, also ob es sich um einen binären Operator, eine Relation usw. handelt. (LA)TEX bestimmt anhand dieser Information, wie viel umgebenden Leerraum das Symbol in einer Formel benötigt. Diese Befehle können (mit Ausnahme von \mathalpha) auch direkt in Formeln als Funktionen mit einem Argument verwendet werden. In diesem Falle wird für das (möglicherweise recht komplexe) Argument soviel
446
7.10 Einbinden neuer Zeichensätze
Typ
Bedeutung
\mathord \mathop \mathbin \mathrel
Einfaches Symbol Großer Operator Binärer Operator Relation
Beispiel
/ \sum + =
Typ
Bedeutung
\mathopen \mathclose \mathpunct \mathalpha
Öffnendes Symbol Schließendes Symbol Interpunktion Alphabetzeichen
Beispiel
Tabelle 7.30: Klassifizierung mathematischer Symbole
Zwischenraum eingefügt, als würde es zu der entsprechenden Kategorie gehören (siehe Abschnitt 8.9 auf Seite 540). Das dritte Argument bestimmt den Symbolfont, aus dem das Zeichen geladen werden soll, d.h. es enthält den symbolischen Namen, der mit dem Befehl \DeclareSymbolFont festgelegt wurde. Das vierte und letzte Argument gibt die Position des Zeichens in der Fontkodierung an, und zwar entweder als Dezimal-, Oktal- oder Hexadezimalzahl. Oktal- (Basis 8) und Hexadezimalzahlen (Basis 16) werden durch ’ bzw. " eingeleitet. Tabelle 7.29 auf der vorherigen Seite gibt einen Überblick über die Positionen aller Zeichen dieses Zeichensatzes. Solche Tabellen lassen sich mit dem LaTEX-Programm nfssfont.tex ausdrucken, das Bestandteil der LaTEX-Distribution ist; siehe dazu Abschnitt 7.5.7 auf Seite 380. \lessdot würde z.B. folgendermaßen deklariert:
\DeclareMathSymbol{\lessdot}{\mathbin}{AMSb}{"6C} Anstelle eines Befehlsnamens kann im ersten Argument aber auch ein einzelnes Zeichen angegeben werden. Im eulervm-Paket gibt es beispielsweise mehrere Deklarationen der Form
\DeclareMathSymbol{0}{\mathalpha}{letters}{"30} die festlegen, von wo die Ziffern geladen werden sollen. Da \DeclareMathSymbol eine bestimmte Position innerhalb eines Symbolfonts adressiert, muss man darauf achten, dass alle externen Fonts, die über die Deklarationen \DeclareSymbolFont und \SetSymbolFont mit diesem Symbolfont verknüpft sind, das gleiche Zeichen an der gleichen Position aufweisen. Diese Einheitlichkeit lässt sich am einfachsten garantieren, wenn man nur Fonts mit der gleichen Kodierung einsetzt (es sei denn, es handelt sich um die Kodierung U, also die unbekannte Kodierung, die von Zeichensatz zu Zeichensatz verschieden sein kann). Neben \DeclareMathSymbol kennt LaTEX auch \DeclareMathAccent , \DeclareMathDelimiter sowie \DeclareMathRadical zum Einrichten der Unterstützung für Mathematikfonts. Nähere Einzelheiten zu diesen etwas spezielleren Deklarationen finden sich in LATEX 2ε font selection [109], das Bestandteil jeder LaTEX-Distribution ist. Wer sich die Zeichentabelle für msbm10 (Tabelle 7.29 auf der vorherigen Seite) noch einmal genau anschaut, sieht, dass dieser Font auch über „Blackboard Bold“-Buchstaben wie z.B. ABC verfügt. Wenn man diese Buchstaben als Mathematikalphabet verwenden will, kann man sie mithilfe des Befehls \DeclareMathAlphabet definieren; ist dieser Symbolfont für den Zugriff auf
447
( ) , A
7
ZEICHENSÄTZE UND KODIERUNGEN
einzelne Symbole jedoch bereits geladen, verwendet man besser eine Abkürzung:
\DeclareSymbolFontAlphabet{\mathbb}{AMSb} Hier wird der Name des Alphabetbefehls und der symbolische Name des zuvor deklarierten Symbolfonts angegeben. Ein wichtiger Grund, Symbolfonts nicht unnötig doppelt zu laden, ist die Obergrenze von 16 Mathematikfonts, die gleichzeitig in (LA)TEX aktiv sein können. In diese Summe fließen alle Symbolfonts ein; Mathematikalphabete zählen nur, wenn sie im Dokument tatsächlich verwendet werden, und sie zählen lokal in jedem Formellayout. Wenn also z.B. acht Symbolfonts deklariert wurden, kann man in jedem Formellayout maximal noch acht (durchaus verschiedene) Alphabetbefehle verwenden. Zusammenfassend lässt sich Folgendes sagen: Zum Einführen neuer Symbolfonts benötigt man eine geringe Anzahl von \DeclareSymbolFont- und \SetSymbolFont-Deklarationen sowie eine möglicherweise größere Anzahl von \DeclareMathSymbol-Deklarationen. Daher sollten derartige Fonts am besten durch ein Paket hinzugefügt werden. Definieren neuer Formellayouts Wie bereits erwähnt, richtet das Standard-Setup automatisch zwei Formellayouts ein – ein normales (normal) und ein fettes (bold). Weitere Layouts lassen sich mithilfe der Deklaration \DeclareMathVersion einführen, die als Argument den Namen des neuen Formellayouts besitzt. Sämtliche Symbolfonts und Alphabetbefehle, die zuvor deklariert wurden, sind in diesem Formellayout automatisch verfügbar. Für sie werden die voreingestellten Schriftschnitte benutzt, die ihnen bei der Definition mit \DeclareMathAlphabet oder \DeclareSymbolFont zugewiesen wurden. Wie in den vorangegangenen Abschnitten (Seiten 364 und 446) anhand des Formellayouts „bold“ bereits gezeigt, können die Einstellungen des neuen Formellayouts dann mit geeigneten \SetMathAlphabet- und \SetSymbolFont-Befehlen geändert werden. Auch die Einführung neuer Formellayouts wird normalerweise mithilfe einer Paketdatei vorgenommen. Ändern der Symbolfonteinstellung Die soeben besprochenen Befehle dienen nicht nur dem Laden neuer Symbolfonts, um zusätzliche Zeichen einzubinden, sondern können auch verwendet werden, um existierende Einstellungen zu ändern. Diese Möglichkeit ist besonders interessant, wenn man in einigen oder allen Formellayouts besondere Fonts einsetzen möchte. LaTEX verfügt über die folgenden Voreinstellungen:
\DeclareMathVersion{normal}
\DeclareMathVersion{bold}
\DeclareSymbolFont{operators} \DeclareSymbolFont{letters} \DeclareSymbolFont{symbols} \DeclareSymbolFont{largesymbols}
448
{OT1}{cmr}{m} {n} {OML}{cmm}{m}{it} {OMS}{cmsy}{m}{n} {OMX}{cmex}{m}{n}
7.10 Einbinden neuer Zeichensätze
% Besondere fettdruckende Fonts nur für: \SetSymbolFont {operators}{bold}{OT1}{cmr}{bx}{n} \SetSymbolFont {letters} {bold}{OML}{cmm}{b}{it} Im Standard-Setup werden Ziffern und Texte, die von Befehlen wie \log oder \max erzeugt werden, aus dem Symbolfont operators entnommen. Um diese Elemente an die Grundschrift anzupassen, also z.B. Computer Modern Sans anstelle von Computer Modern Roman zu verwenden, kann man die folgenden Befehle formulieren:
\SetSymbolFont{operators}{normal}{OT1}{cmss}{m} {n} \SetSymbolFont{operators}{bold} {OT1}{cmss}{bx}{n} Die Symbolfonts symbols und largesymbols haben in TEX eine Sonderstellung, und benötigen eine Reihe zusätzlicher \fontdimen-Parameter. Deshalb können für sie nur speziell ausgearbeitete Fonts verwendet werden. Prinzipiell können jedem beliebigen Zeichensatz während des Ladevorgangs solche zusätzlichen Parameter zugewiesen werden und zwar mithilfe des dritten Argumentes von \DeclareFontFamily oder des sechsten Argumentes von \DeclareFontShape . Informationen zu den speziellen Parametern für diese Symbolfonts befinden sich in Anhang G von [87].
7.10.8 Beispiel: Definieren eigener .fd-Dateien Wer neue Fonts und die dafür notwendigen .fd-Dateien erstellen möchte, sollte dafür das in diesem Abschnitt bereits erläuterte Verfahren anwenden. Wenn man die erforderlichen Fontmetrikdateien mithilfe des fontinstPaketes [74] erzeugt, dann werden die entsprechenden .fd-Dateien automatisch ebenfalls generiert. Eine .fd-Datei für eine einzelne Schriftfamilie lässt sich jedoch auch leicht von Hand erstellen, sofern man die Zeichensatzkodierung kennt. Als Beispiel soll hier die Deklarationsdatei t1bch.fd für die Schrift Bitstream Charter in der T1-Kodierung untersucht werden:
\ProvidesFile{t1bch.fd}[2001/06/04 font definitions for T1/bch.] % Primäre Deklarationen \DeclareFontFamily{T1}{bch}{} \DeclareFontShape{T1}{bch}{m}{n}{ bchr8t}{} \DeclareFontShape{T1}{bch}{m}{sc}{ bchrc8t}{} \DeclareFontShape{T1}{bch}{m}{sl}{ bchro8t}{} \DeclareFontShape{T1}{bch}{m}{it}{ bchri8t}{} \DeclareFontShape{T1}{bch}{b}{n}{ bchb8t}{} \DeclareFontShape{T1}{bch}{b}{sc}{ bchbc8t}{} \DeclareFontShape{T1}{bch}{b}{sl}{ bchbo8t}{} \DeclareFontShape{T1}{bch}{b}{it}{ bchbi8t}{} % Ersetzungen \DeclareFontShape{T1}{bch}{bx}{n}{ssub * bch/b/n}{} \DeclareFontShape{T1}{bch}{bx}{sc}{ssub * bch/b/sc}{} \DeclareFontShape{T1}{bch}{bx}{sl}{ssub * bch/b/sl}{} \DeclareFontShape{T1}{bch}{bx}{it}{ssub * bch/b/it}{} \endinput
449
7
ZEICHENSÄTZE UND KODIERUNGEN
Die Datei beginnt mit einer Identifikationszeile und deklariert danach mithilfe von \DeclareFontFamily die Schriftfamilie und -kodierung (also bch in T1). Die Argumente dieses Befehls sollten dabei dem Namen der .fd-Datei entsprechen, außer dass dort die Kodierung den Konventionen entsprechend klein geschrieben wird. Als nächstes wird jede Kombination von Schriftserie und -form einer .tfm-Datei zugewiesen. Diese Fonts sind beliebig skalierbar, so dass ihre \DeclareFontShape-Befehle die Deklaration enthalten. Im zweiten Teil der Datei wird festgelegt, welcher Ersatz verwendet werden soll, wenn eine Kombination nicht verfügbar ist (d.h. Ersetzen der breitfetten Serie durch die fett gedruckte). Sofern man die zusätzlichen Charter Fonts (Black und BlackItalic) erworben hat, die nicht kostenlos erhältlich sind, möchte man die .fd-Datei vielleicht um die entsprechenden Deklarationen ergänzen. Zunächst muss man allerdings (z.B. mithilfe von fontinst) geeignete virtuelle Fonts bereitstellen, um die T1-Kodierung nachzubilden. Glücklicherweise können diese für eine Vielzahl von Schriften aus dem Internet heruntergeladen werden.1 Im Gegensatz zu den meisten anderen Dateien in der LaTEX-Welt, darf man Besondere .fd-Dateien gemäß der für sie üblichen Lizenz verändern, ohne sie umbenenLizenzbedingungen nen zu müssen. Allerdings darf man diese veränderten Dateien normalerweise für .fd-Dateien nicht in Umlauf bringen! Ein weiterer möglicher Grund zum Erstellen eigener .fd-Dateien kann darin liegen, dass man Schriften mehrerer Familien kombinieren und LaTEX als eine einzige neue Schriftfamilie vorstellen möchte. So entwarf Hermann Zapf beispielsweise 1954 die Schriftfamilie Aldus als Begleitung für seine Palatino-Schrift (die ursprünglich als reine Plakatschrift gestaltet worden war). Da Aldus nicht über eine fett gedruckte Serie verfügt, ist Palatino ein nahe liegender Ersatz für die fette Variante. Im nächsten Beispiel wird Aldus (mit Mediävalziffern) in normaler Serie mit Palatino in fetter Serie kombiniert. Das Ergebnis ist die „Schriftfamilie“ zasj. Hier nur ein Ausschnitt der vollständigen .fd-Datei, mit deren Hilfe Beispiel 7-10-1 auf der gegenüberliegenden Seite gesetzt wurde:
\ProvidesFile{t1zasj.fd}[2003/10/12 Fontdefinitionen für die T1 Aldus/Palatino-Kombination] \DeclareFontFamily{T1}{zasj}{} % Normale Schriftserie \DeclareFontShape{T1}{zasj}{m}{n} {pasr9d}{} \DeclareFontShape{T1}{zasj}{m}{sc}{pasrc9d}{} \DeclareFontShape{T1}{zasj}{m}{it}{pasri9d}{} \DeclareFontShape{T1}{zasj}{m}{sl}{ssub * pasj/m/it}{} % Fette Schriftserie \DeclareFontShape{T1}{zasj}{b}{n}{ pplb8t}{} \DeclareFontShape{T1}{zasj}{b}{sc}{pplbc8t}{} \DeclareFontShape{T1}{zasj}{b}{sl}{pplbo8t}{} \DeclareFontShape{T1}{zasj}{b}{it}{pplbi8t}{} 1 Eine
gute Quelle für diesen Zweck ist die Homepage von Walter Schmidt: http://home.
vr-web.de/~was/fonts.html .
450
7.10 Einbinden neuer Zeichensätze
Um auf diese „Pseudofamilie“ zugreifen zu können, muss man zasj in der T1-Kodierung auswählen. Außerdem muss garantiert sein, dass \textbf zur fetten und nicht zur breitfetten Serie wechselt, da diese .fd-Datei keine Ersetzungen vorsieht. All das lässt sich automatisch über ein kleines Paket wie das folgende (namens fontmix.sty) bewirken:
\ProvidesPackage{fontmix}[2003/10/12 T1 Aldus/Palatino-Kombination.] \RequirePackage[T1]{fontenc} \renewcommand\rmdefault{zasj} \renewcommand\bfdefault{b} Durch Laden von fontmix erhält man nun also Aldus mit Überschriften in Palatino Bold. In vielen Fällen stellt eine solche Kombination keine Verbesserung für den Text dar. Dieses Beispiel sollte daher nicht als Ermutigung verstanden werden, beliebige Schriften miteinander zu mischen.
Palatino und Aldus von Zapf
Bsp. 7-10-1
Dieser Text ist in der Schrift Aldus mit passenden Mediävalziffern gesetzt „1234567890“. Als begleitende fette Schrift wurde die Palatino von Zapf gewählt.
\usepackage{fontmix} % t1zasj.fd und fontmix.sty wie definiert \section*{Palatino und Aldus von Zapf} Dieser Text ist in der Schrift Aldus mit passenden \emph{Mediävalziffern} gesetzt "‘1234567890"’. Als begleitende \textbf{fette Schrift} wurde die Palatino von Zapf gewählt.
7.10.9 Die Reihenfolge der Deklarationen NFSS schreibt für alle Deklarationen eine bestimmte Reihenfolge vor, so dass das System prüfen kann, ob alle erforderlichen Angaben gemacht wurden. Wird die Reihenfolge nicht eingehalten, so erfolgt eine Fehlermeldung. Die folgenden Beziehungen der Deklarationen zueinander müssen beachtet werden: • \DeclareFontFamily überprüft, ob das Kodierschema zuvor mit dem Befehl \DeclareFontEncoding deklariert wurde. • \DeclareFontShape überprüft, ob die verwendete Schriftfamilie so deklariert wurde, dass sie in der angeforderten Kodierung verfügbar ist (\DeclareFontFamily). • \DeclareSymbolFont überprüft, ob das Kodierschema gültig ist. • \SetSymbolFont stellt zusätzlich sicher, dass sowohl das angeforderte Formellayout (\DeclareMathVersion) als auch der angeforderte Symbolfont (\DeclareSymbolFont) bereits deklariert sind. • \DeclareSymbolFontAlphabet überprüft, ob der Befehlsname für den Alphabetbefehl verwendet werden kann und ob der Symbolfont zuvor deklariert wurde. • \DeclareMathAlphabet überprüft, ob der ausgewählte Befehlsname verwendet werden kann und ob das Kodierschema bereits deklariert wurde.
451
7
ZEICHENSÄTZE UND KODIERUNGEN
• \SetMathAlphabet überprüft, ob der verwendete Alphabetbefehl zuvor mit \DeclareMathAlphabet oder \DeclareSymbolFontAlphabet deklariert wurde und ob das Formellayout und das Kodierschema bekannt sind. • \DeclareMathSymbol stellt sicher, dass der Befehlsname verwendet werden kann (d.h. dass er entweder noch nicht definiert ist oder vorher als mathematisches Symbol deklariert war) und dass der Symbolfont zuvor deklariert wurde. • Bei Erreichen des Befehls \begin{document} führt NFSS schließlich noch einige zusätzliche Überprüfungen durch, z.B. ob die Voreinstellungen zur Fontersetzung für jedes Kodierschema auch tatsächlich auf bekannte Deklarationen von Schriftformgruppen verweisen.
7.11 Kodierungsmodelle in LATEX Den meisten Anwendern wird wahrscheinlich das Wissen genügen, dass es bestimmte Eingabe- und Fontkodierungen gibt und wie man im Allgemeinen, entsprechend der Beschreibungen in den vorherigen Abschnitten, mit ihnen arbeiten kann. Manchmal ist es jedoch hilfreich, sich intensiver mit der Materie zu beschäftigen, um beispielsweise eine eigene Kodierung einrichten zu können oder besser zu verstehen, wie besondere Funktionen in Pakete oder Klassen umgesetzt sind. Darum erklärt dieser Abschnitt alles, was man schon immer über Kodierungen in LaTEX wissen wollte. Zunächst wird der generelle Datenfluss der Zeichen im LaTEX-System beschrieben, aus dem die grundlegenden Anforderungen für verschiedene Kodierungen und ihre Zuordnung zueinander abgeleitet werden. Dann wird das interne Darstellungsmodell für die Zeichendaten in LaTEX genauer betrachtet, gefolgt von einer Besprechung der Mechanismen, mit deren Hilfe eintreffende Daten durch Eingabekodierungen ihren internen Darstellungen zugeordnet werden. Und schließlich wird erklärt, wie die internen Darstellungen mittels der Fontkodierungen in die Form übersetzt werden, die schließlich für die eigentliche Ausgabe benötigt wird.
Dargestellte Zeichen Ziffern: Kleinbuchstaben: Großbuchstaben: Satzzeichen: Verschiedene Symbole:
0 a A . *
1 b B , +
2 c C ; -
3 d D : =
4 e E ? (
5 f F ! )
6 g G ‘ [
7 h H ’ ]
8 9 i j k l m n o p q r s t u v w x y z I J K L M N O P Q R S T U V W X Y Z / @
Nicht dargestellte Zeichen TEX-Syntaxzeichen: In (einigen) OT1-Fonts fehlen
$ ^ _ { } # & % \ ~ < > | "
Tabelle 7.31: LICR-Objekte, die durch einzelne Zeichen dargestellt werden
452
7.11 Kodierungsmodelle in LATEX
7.11.1 Zeichendaten im LATEX-System Die Verarbeitung eines Dokumentes im LaTEX-System beginnt mit der Auswertung von Daten aus einer oder mehreren Quelldateien. Diese Daten, die den Inhalt des Dokumentes repräsentieren, sind in den Dateien in Form von Oktetten gespeichert, welche die jeweiligen Zeichen darstellen. Um diese Oktette richtig interpretieren zu können, muss LaTEX (oder jedes andere Programm, mit dem die Datei verarbeitet wird, wie etwa ein Editor) wissen, mit welcher Kodierung die Datei erstellt wurde. In anderen Worten: Es muss die Zuordnung zwischen den abstrakten Zeichen und den sie repräsentierenden Oktetten kennen. Bei einer fehlerhaften Zuordnung erfolgt die weitere Verarbeitung mehr oder weniger fehlerhaft, es sei denn, die Datei verwendet nur einen Zeichenvorrat, der in beiden Kodierungen identisch ist.1 An diesem Punkt geht LaTEX grundsätzlich von der Annahme aus, dass (fast) alle sichtbaren ASCII-Zeichen (Dezimal 32–126) durch ihre Nummer in der ASCII-Zeichensatztabelle dargestellt werden (siehe Tabelle 7.31 auf der vorherigen Seite). Für diese Annahme gibt es sowohl einen praktischen als auch einen TEXnischen Grund. Der praktische Grund ist, dass die meisten heutzutage gebräuchlichen 8-Bit-Kodierungen eine gemeinsame 7-Bit-Ebene haben. Der TEXnische Grund liegt darin, dass für eine effektive Nutzung von TEX2 der Großteil des sichtbaren ASCII-Bereiches entweder als Zeichen der Kategorie „letter“ (Buchstaben) verarbeitet werden muss, da nur Zeichen dieser Kategorie in mehrbuchstabigen TEX-Befehlsnamen verwendet werden dürfen; oder sie müssen zur Kategorie „other“ (andere) gehören, da TEX z.B. dezimale Ziffern nicht als Teil einer Zahl erkennt, wenn sie nicht diese Kategorie haben. Wird ein Zeichen – genauer gesagt eine 8-Bit-Zahl – in TEX mit der Kategorie „letter“ oder „other“ deklariert, so wird diese 8-Bit-Ziffer einfach transparent durchgereicht. TEX setzt also in der Ausgabe jedes beliebige Zeichen, das gerade im Zeichensatz unter dieser Nummer geführt wird. Als Konsequenz dieser zuvor erwähnten Annahme müssen Zeichensätze für allgemeinen Text die (meisten) sichtbaren ASCII-Zeichen enthalten und diese müssen der ASCII-Kodierung entsprechend positioniert sein. Die genaue Liste ist in Tabelle 7.31 auf der gegenüberliegenden Seite dargestellt. Allen anderen 8-Bit-Zahlen (also denjenigen außerhalb des sichtbaren LATEX-interne ASCII-Bereiches), die sich in der Eingabedatei befinden können, wird die Ka- Zeichendarstellung tegorie „active“ (aktiv) zugewiesen, so dass sie sich innerhalb von TEX wie (LICR) Befehle verhalten. Dadurch kann LaTEX sie mithilfe der Eingabekodierung in ei1 Da die meisten westlichen Kodierungen einen Großteil der ASCII-Zeichen (d.h. weitgehend die 7-Bit-Ebene) gemeinsam haben, sind Dokumente, die hauptsächlich aus akzentlosen, lateinischen Buchstaben bestehen, auch dann noch verständlich, wenn sie mit einer anderen als ihrer ursprünglichen Kodierung betrachtet oder verarbeitet werden. Je mehr Zeichen jedoch außerhalb der sichtbaren ASCII-Kodierung verwendet werden, desto unverständlicher wird der Text. Ein Text kann völlig sinnlos werden, wenn z.B. griechische oder russische Dokumente in der Annahme verarbeitet werden, sie verwendeten die Kodierung für das US-amerikanische Windows. 2 Das traf zumindest zu, als diese Schnittstelle gestaltet wurde. Mit den heutigen, wesentlich schnelleren Computern könnte man das Eingabeverfahren in TEX radikal verändern, indem man es im Prinzip komplett abschaltet und die Eingabedaten manuell, also Zeichen für Zeichen verarbeitet.
453
7
ZEICHENSÄTZE UND KODIERUNGEN
ne Form überführen, die LaTEX Internal Character Representation (LICR, LaTEXinterne Zeichendarstellung) genannt wird. Die Unicode UTF-8-Kodierung wird ebenso gehandhabt: Die ASCIIZeichen repräsentieren sich selbst und die Anfangsoktette der MehrbyteEntsprechungen suchen als aktive Zeichen die Eingabedaten nach den verbleibenden Oktetten ab. Das Ergebnis wird in ein LICR-Objekt umgewandelt, sofern eine Zuordnung existiert, oder es erzeugt eine Fehlermeldung, wenn das entsprechende Unicode-Zeichen nicht zugeordnet ist. Die wichtigste Eigenschaft aller LICR-Objekte ist, dass ihre Darstellung in 7-Bit-ASCII erfolgt (typischerweise als Befehle) und damit von jeder Änderung der Kodierung unabhängig ist, da sich alle Eingabekodierungen hinsichtlich der sichtbaren ASCII-Zeichen transparent verhalten sollen. Dadurch kann LaTEX beispielsweise Hilfsdateien (z.B. .toc-Dateien) in der LICR-Darstellung verfassen, und sie in einem anderen Kontext (möglicherweise sogar einer anderen Kodierung) zurück übertragen, ohne dass dabei Fehlinterpretationen auftreten. Aufgabe der Font- (oder Ausgabe-) Kodierung ist es dann, die internen Zeichendarstellungen den Glyphenpositionen des aktuellen Zeichensatzes für die Ausgabe zuzuordnen, oder in einigen Fällen auch komplexere Vorgänge auszulösen. Sie könnte z.B. ein Akzentzeichen (von einer Position im aktuellen Font) über einer Glyphe (von einer anderen Position im aktuellen Font) platzieren, um damit ein gedrucktes Bild des abstrakten Zeichens zu erhalten, das durch den oder die Befehle der internen Zeichenkodierung dargestellt wurde. Da die LICR alle Zeichen kodiert, die in LaTEX adressiert werden können, ist sie wesentlich umfangreicher als ein einzelner TEX-Font (der maximal 256 Glyphen enthalten kann). In einigen Fällen lassen sich Zeichen der internen Kodierung durch Kombinationen von Glyphen eines Fonts nachbilden, wie etwa die zuvor erwähnten Akzentbuchstaben. Wenn dieses interne Zeichen jedoch eine besondere Form benötigt (wie z.B. das Währungssymbol „¤“), lässt es sich auch nicht imitieren, wenn es im Zeichensatz nicht vorhanden ist. Das LaTEX-Modell für die Zeichenkodierung unterstützt jedoch auch automatische Abläufe, in denen Glyphen aus anderen Fonts herangezogen werden, damit selbst ein im aktuellen Font fehlendes Zeichen gesetzt werden kann – natürlich vorausgesetzt, es ist ein geeigneter zusätzlicher Font mit dem betreffenden Zeichen verfügbar.
7.11.2 Die LATEX-interne Zeichendarstellung (LICR) Technisch ausgedrückt, werden Textzeichen LaTEX-intern auf eine von drei Arten dargestellt. Diese Arten werden in den folgenden Abschnitten besprochen. Darstellung als Zeichen Eine kleine Gruppe von Zeichen wird durch „sich selbst“ dargestellt, das lateinische A z.B. durch das Zeichen „A“. Die auf diese Art dargestellten Zeichen sind in Tabelle 7.31 auf Seite 452 aufgeführt. Sie bilden eine Untergruppe der ASCII-Zeichen und sind in TEX alle der Kategorie „letter“ oder „other“ zugeordnet. Einige der sichtbaren ASCII-Zeichen werden nicht auf diese Art dargestellt,
454
7.11 Kodierungsmodelle in LATEX
entweder weil es sich um Zeichen der TEX-Syntax handelt1 , oder weil sie nicht in allen Zeichensätzen vorkommen. Wenn man beispielsweise das Zeichen „ 0 \end{cases} \end{gather}
Hier wurde eine gather-Umgebung mit einer einzelnen Zeile verwendet, da der \raisetag-Befehl (nur) in der equation-Umgebung unglücklicherweise keine Auswirkungen zeigt (er ist in Low-Level-TEX programmiert). Solche Korrekturen gehören zum „letzten Schliff“, genau wie das Einfügen von Zeilen- und Seitenumbrüchen in normalen Texten. Sie sollten daher 1 Die Beschreibung in der Datei amsmath.dtx lässt annehmen, dass ein positiver Wert das Tag immer seiner „normalen Position“ annähert, also nach unten für linksseitige Tags. Das ist in der derzeitigen Version jedoch nicht der Fall.
496
Bsp. 8-2-29
8.2
Umgebungen für abgesetzte Formeln
auch erst durchgeführt werden, wenn das Dokument so gut wie fertig ist. Andernfalls kann es passieren, dass man immer und immer wieder nachbessern muss, sobald sich der Inhalt des Dokumentes ändert.
8.2.13 Untersequenzen in der Nummerierung Das amsmath-Paket verfügt über die Umgebung subequations, welche die „Unternummerierung von Formeln“ mit Tags der Form (2a), (2b), (2c) usw. unterstützt. Alle mit Tags versehenen Formeln dieser Umgebung werden mithilfe der folgenden zwei normalen LaTEX-Zähler nummeriert: parentequation und equation . Das nächste Beispiel zeigt, dass sich das Tag bis zu einem gewissen Grad umdefinieren lässt. Dabei ist zu beachten, dass die geänderte Definition für \theequation innerhalb der subequations-Umgebung stehen muss! (Veränderungen an Zählern werden in Anhang A.1.4 besprochen.)
Bsp. 8-2-30
f =g f " = g" Lf = Lg
(1a) (1b) (1c)
f =g f " = g" Lf = Lg + K
(2i) (2ii) (2iii)
Man beachte die Beziehung zwischen (1) und (2): nur 1c und 2iii sind verschieden.
\usepackage{amsmath} \begin{subequations} \label{eq:1} \begin{align} f &= g \label{eq:1A} \\ f’ &= g’ \label{eq:1B} \\ \mathcal{L}f &= \mathcal{L}g \label{eq:1C} \end{align} \end{subequations} \begin{subequations} \label{eq:2} \renewcommand\theequation{\theparentequation\roman{equation}} \begin{align} f &= g \label{eq:2A} \\ f’ &= g’ \label{eq:2B} \\ \mathcal{L}f &= \mathcal{L}g + K \label{eq:2C} \end{align} \end{subequations} Man beachte die Beziehung zwischen~\eqref{eq:1} und~\eqref{eq:2}: nur~\ref{eq:1C} und~\ref{eq:2C} sind verschieden.
Die Umgebung subequations muss die abgesetzten Formeln, auf die sie sich auswirkt, umschließen. Sie selbst sollte außerdem nicht in sich selbst verschachtelt sein. Jede subequations-Umgebung erhöht den „Hauptzähler“ um eins. Ein \label-Befehl innerhalb der Umgebung, aber außerhalb der einzelnen (logischen) Formeln, erzeugt einen \ref-Verweis auf die Hauptnummer (z.B. auf 2 und nicht auf 2i).
8.2.14 Zurücksetzen des Formelzählers Es ist üblich, Formeln innerhalb von Abschnitten oder Kapiteln mit Tags wie (1.1), (1.2), (1.3) . . . , (2.1), (2.2) . . . zu nummerieren. Diese Art der Nummerierung lässt sich in amsmath leicht mithilfe der \numberwithin-Deklaration erzielen.1 So ergibt beispielsweise \numberwithin{equation}{section} aus 1 Wie der Name andeutet, kann \numberwithin auf jedes Zählerpaar angewendet werden, wobei das Ergebnis aufgrund möglicher Komplikationen nicht immer zufrieden stellend ist. Man vergleiche die Informationen zum Befehl \@addtoreset in Anhang A.1.4.
497
8
HÖHERE MATHEMATIK
mehreren Elementen zusammengesetzte Formeltags, welche die Abschnittsnummer enthalten, wobei gleichzeitig der Formelzähler am Anfang jedes neuen Abschnitts zurückgesetzt wird.
8.3 Matrixähnliche Umgebungen Das amsmath-Paket bietet eine Reihe von matrixähnlichen Umgebungen, die alle der Umgebung array in Syntax und Layout gleichen. Komplexe mathematische Layouts auf diese Weise zu betrachten ist eine gute Übung, da sich recht viele zweidimensionale mathematische Strukturen und tabellenähnliche Anordnungen so beschreiben lassen. Drei dieser Umgebungen ersetzen alte Befehle, die tief in Standard-LaTEX Deaktivierte alte verborgen liegen: die Umgebungen cases (im nächsten Abschnitt erläutert) Befehle sowie matrix und pmatrix (im darauf folgenden Abschnitt erläutert). Da die alten Befehlsformen eine völlig andere Schreibweise benutzen, gehören sie nicht wirklich zu LaTEX und können auch nicht gemeinsam mit den hier beschriebenen Umgebungen verwendet werden. Das amsmath-Paket erzeugt sogar eine ausführliche Fehlermeldung, wenn einer der alten Befehle benutzt wird (siehe Seite 946). Wenn man andererseits den Fehler begeht, die Umgebungen des amsmath-Paketes zu verwenden, ohne dieses zuvor geladen zu haben, erhält man wahrscheinlich die folgende Fehlermeldung: „Misplaced alignment tab character &“ (falsch platziertes Ausrichtungszeichen &).
8.3.1 Die cases-Umgebung Konstruktionen wie die folgende, wo eine einzige Gleichung einige Varianten hat, kommen in der Mathematik häufig vor. Für solche Konstruktionen stellt amsmath die cases-Umgebung bereit. Sie erzeugt ein beschriftetes Array mit zwei linksbündigen Spalten.
Pr−j
0 = r! (−1)(r−j)/2
für r − j ungerade, für r − j gerade. (1)
\usepackage{amsmath} \begin{equation} P_{r - j} = \begin{cases} 0 & \text{für $r - j$ ungerade,} \\ r! \, (-1)^{(r - j)/2} & \text{für $r - j$ gerade.} \end{cases} \end{equation}
Man beachte den \text-Befehl und den in den Text „eingebetteten Formelmodus“. Mithilfe der Umgebung aligned lassen sich weitere cases-ähnliche Umgebungen definieren, wie etwa in Beispiel 8-2-20 auf Seite 490.
8.3.2 Die Matrixumgebungen Die Matrixumgebungen ähneln den array-Umgebungen von LaTEX. Im Unterschied zu diesen besitzen sie jedoch kein Argument, in dem das Format der Spalten bestimmt wird. Stattdessen wird ein Standardformat mit bis zu 10 zentrierten Spalten vorgegeben. Auch die Abstände unterscheiden sich leicht
498
Bsp. 8-3-1
8.3
Matrixähnliche Umgebungen
von den Voreinstellungen der array-Umgebung. Das folgende Beispiel veranschaulicht die Matrixumgebungen matrix , pmatrix , bmatrix , Bmatrix , vmatrix und Vmatrix .1
Bsp. 8-3-2
\usepackage{amsmath} \begin{gather*} \begin{matrix} 0 & 1 \\ 1 & 0 \begin{pmatrix} 0 & -i \\ i & 0 \begin{bmatrix} 0 & -1 \\ 1 & 0 \begin{Bmatrix} 1 & 0 \\ 0 & -1 \begin{vmatrix} a & b \\ c & d \begin{Vmatrix} i & 0 \\ 0 & -i \end{gather*}
&
' 0 −i i 0 % ( # $ 0 −1 1 0 1 0 0 −1 , , 3 3 ,a b , 3 i 0 3 , , 3 3 , c d, 30 −i3 0 1 1 0
\end{matrix} \end{pmatrix} \end{bmatrix} \end{Bmatrix} \end{vmatrix} \end{Vmatrix}
\quad \\ \quad \\ \quad
Die maximale Anzahl der Spalten in einer Matrixumgebung wird durch den Zähler MaxMatrixCols festgelegt, der mithilfe der Standardzählerbefehle von LaTEX verändert werden kann. Wie in der Standard-array-Umgebung wird der Spaltenzwischenraum durch den Wert von \arraycolsep bestimmt, jedoch ohne an den Seiten des Arrays Freiraum hinzuzufügen. Mit mehr Spalten hat LaTEX auch etwas mehr Arbeit und benötigt geringfügig größere Ressourcen. Für die heutzutage üblichen TEX-Installationen sind diese Einschränkungen jedoch kaum von Bedeutung, so dass man den Wert ohne merkliche Einbußen in der Verarbeitungsgeschwindigkeit auf 20 oder sogar noch höher einstellen kann.
Bsp. 8-3-3
3 3a b 3 3 a 3 3 3 3 3 3 3
c b a
d c b a
e d c b .. .
f e d c .. .
g f e d
h g f e
i h g f
··· ··· ··· ···
..........
3 3 3 3 3 3 3 3 3 3 3
\usepackage{amsmath} \setcounter{MaxMatrixCols}{20} \[ \begin{Vmatrix} \,a&b&c&d&e&f&g&h&i &\cdots\,{} &a&b&c&d&e&f&g&h &\cdots\,{} & &a&b&c&d&e&f&g &\cdots\,{} & & &a&b&c&d&e&f &\cdots\,{} & & & & \ddots & \ddots & \hdotsfor[2]{4}\,{} \end{Vmatrix} \]
Dieses Beispiel zeigt auch, wie man den Befehl \hdotsfor verwendet, um eine Reihe von Punkten in einer Matrix zu erzeugen, die sich über eine vorgegebene Anzahl von Spalten (hier 4) erstreckt. Der Punktabstand lässt sich über das optionale Argument (hier 2) variieren, das als Multiplikator für den voreingestellten Zwischenraum dient; dieser beträgt 3 mathematische Einheiten (math units, siehe Anhang A.1.5). Der schmale Leerraum und die Klammergruppe \,{} am Ende jeder Zeile verschönern lediglich das Layout. Gemeinsam erzeugen sie zwei schmale Leerräume einer Breite von ungefähr 6mu bzw. 1/3em. (Abstände in Formeln werden in Abschnitt 8.7.6 auf Seite 521 ausführlicher besprochen.) Für die Darstellung einer kleinen Matrix innerhalb von Texten ist die smallmatrix-Umgebung am besten geeignet. Man beachte, dass sie den Zei1 Man beachte die zuvor erfolgten Warnungen über mögliche Probleme im Zusammenhang mit matrix und pmatrix.
499
\\ \\ \\ \\
8
HÖHERE MATHEMATIK
lenabstand nicht vergrößert, obwohl die Zeile vor der kleinen Matrix Wörter mit Unterlängen enthält.
\usepackage{amsmath}
Um den Einfluss einer Matrix auf Um den Einfluss einer Matrix auf die sie umgebenden die sie umgebenden Zeilen in einem 4 0Ab5 Zeilen in einem Absatz zu zeigen, steht sie hier: satz zu zeigen, steht sie hier: 10 −1 $ \left( \begin{smallmatrix} 1 & 0 \\ 0 & -1 und danach folgt genug Text, dass zu\end{smallmatrix} \right) $ mindest eine ganze Zeile unterhalb der und danach folgt genug Text, dass zumindest eine Matrix verläuft.
Bsp. 8-3-4
ganze Zeile unterhalb der Matrix verläuft.
8.3.3 Mehrzeilige Tief- und Hochstellungen Der Befehl \substack wird meistens dazu benutzt, um innerhalb einer Tiefoder Hochstellung mehrere Zeilen zu erzeugen, wobei \\ als Zeilenbegrenzung dient. Die subarray-Umgebung bietet eine etwas allgemeinere Anordnungsmöglichkeit, in der man die Zeilen auch links- oder rechtsbündig anordnen kann, anstatt zentriert. Sowohl bei der Umgebung wie auch beim \substackBefehl ist jedoch zu beachten, dass sie bei Hoch- oder Tiefstellung in geschweiften Klammern stehen müssen.
!
P (i, j)
(1)
0≤i≤m 0> \non (K) @>>> \cf (K) \\ @VVV @AAA @AAA \\ \add (L) @>>> \add (K) @>>> \cov (K) \\ \end{CD} \]
Die Pfeile werden nach folgendem Verfahren beschriftet: Bei horizontalen Pfeilen wird das Material zwischen dem ersten und zweiten >- oder j>> T \\ @VVV @VV{\End P}V \\ (S \otimes T)/I @= (Z\otimes T)/J \end{CD} \]
In Standard-LaTEX lässt sich ein ähnliches Layout erzeugen, das jedoch nicht annähernd so gut aussieht:
Bsp. 8-3-8
S WΛ⊗ T 7 (S ⊗ T )/I
j
−→ =
T 7End P (Z ⊗ T )/J
\[\begin{array}{ccc} S^{\mathcal{W}_\Lambda}\otimes T & \stackrel{j}{\longrightarrow} & T \\ \Big\downarrow & & \Big\downarrow\vcenter{% \rlap{$\scriptstyle{\mathrm{End}}\,P$}} \\ (S\otimes T)/I & = & (Z\otimes T)/J \end{array}\]
Das Beispiel zeigt deutlich, wie viel bessere Ergebnisse das amscd-Paket erzeugt: Die Notation ist sehr viel einfacher und das Paket setzt z.B. längere horizontale Pfeile und verteilt die Abstände zwischen den Elementen des Diagramms passender. Mithilfe der spezialisierteren Pakete kann man sogar noch ansprechendere Ergebnisse erzielen.
501
8
HÖHERE MATHEMATIK
8.3.5 delarray – Begrenzungszeichen für Arrays In diesem Abschnitt wird eine nützliche allgemeine Erweiterung für das array-Paket (vgl. Abschnitt 5.2 auf Seite 252) beschrieben, mit deren Hilfe man öffnende und schließende erweiterbare Begrenzungssymbole (vgl. Abschnitt 8.5.3) um eine mathematische array-Umgebung setzen kann. Das Paket delarray wurde von David Carlisle geschrieben und sein Nutzen wird anhand des nächsten, etwas seltsam aussehenden Beispiels veranschaulicht. (Man beachte, dass dieses Paket unabhängig vom amsmath-Paket eingesetzt werden kann, wobei es, falls erforderlich, automatisch das array-Paket lädt.)
\usepackage{delarray}
4
X
Y
5%
A C
L \[ ( \begin{array}[t] ( {cc} ) X & Y \end{array} B M \begin{array}[t] [ {cc} ] A & B \\ C & D \end{array} D
Bsp. 8-3-9
\begin{array}[b] \lgroup{cc}\rgroup L \\ M \end{array}
\]
Die Begrenzungszeichen werden links und rechts der „Präambeldeklaration“ (hier {cc}) platziert. Es muss sich um Begrenzungszeichen handeln, die in Tabelle 8.3 auf Seite 511 aufgeführt sind. Das vorige Beispiel zeigt auch die nützlichste Funktion dieses Paketes: Es verwendet die optionalen Argumente [t] und [b], die nicht in den Matrixumgebungen des amsmath-Paketes verfügbar sind. Sie zeigen, dass die delarraySyntax anders wirkt als das Umschließen der array-Umgebung mit \left und \right, wodurch sowohl die Begrenzungszeichen als auch das Array selbst angehoben werden.
8.4 Komplexere Gebilde und Beschriftungen Dieser Abschnitt erläutert einige Befehle, die eine Vielzahl mittelgroßer mathematischer Gebilde erzeugen, einschließlich beschrifteter Symbole und bruchähnlicher Objekte.
8.4.1 Beschriftete Pfeile Die Befehle \xleftarrow und \xrightarrow erzeugen horizontale Beziehungspfeile ähnlich denjenigen für kommutative Diagramme in Abschnitt 8.3.4; sie können ober- und/oder unterhalb beschriftet werden, wobei sich die Länge der Pfeile automatisch nach dem Text richtet. Diese Pfeile sind normalerweise nur in einer Größe verfügbar. Dadurch eignen sie sich wahrscheinlich nicht für beispielsweise Brüche, Tief- oder Hochstellungen. Die Beschriftungen unter- und oberhalb der Pfeile werden über ein optionales und ein obligatorisches Argument des Befehls festgelegt.
∂0 α(b)
0← − F ×∆(n−1) −−−−→ E ∂0 b ζ
502
\usepackage{amsmath} \[ 0 \xleftarrow [\zeta]{} F \times \Delta (n - 1) \xrightarrow {\partial_0 \alpha(b)} E^{\partial_0 b} \]
Bsp. 8-4-1
8.4
Komplexere Gebilde und Beschriftungen
8.4.2 Kettenbrüche Der Befehl \cfrac erzeugt Reihen von Brüchen, die als „Kettenbrüche“ bekannt sind. Per Voreinstellung sind alle Zähler zentriert; mithilfe der optionalen Argumente [l] oder [r] lassen sie sich nach links oder rechts ausrichten.
1 Bsp. 8-4-2
√
2+
1 √
1
3+
√
4+
1 √
1 5+ √
6 + ···
\usepackage{amsmath} \begin{equation*} \cfrac {1}{\sqrt{2} + \cfrac {1}{\sqrt{3} + \cfrac {1}{\sqrt{4} + \cfrac[r] {1}{\sqrt{5} + \cfrac[l] {1}{\sqrt{6} + \dotsb }}}}} \end{equation*}
8.4.3 Eingerahmte Formeln Der Befehl \boxed setzt einen Rahmen um sein Argument; er funktioniert wie der Befehl \fbox , nur dass sein Inhalt im Formelmodus erscheint (vgl. die in Abschnitt 10.1 beschriebenen Befehle).
Bsp. 8-4-3
Wt − F ⊆ V (Pi ) ⊆ Wt
(1)
\usepackage{amsmath} \begin{equation} \boxed { W_t - F \subseteq V(P_i) \subseteq W_t } \end{equation}
8.4.4 Grenzpositionen Tief- und Hochstellungen an Integralen, Summen oder anderen Operatoren können entweder direkt über und unter den mathematischen Operatoren positioniert werden oder an den normalen Stellen für Tief-/Hochstellungen rechts der Operatoren. Man sagt, sie „zeigen Grenzen“, wenn das hoch- bzw. tiefgestellte Material (d.h. „die Grenzen“) an hervorgehobener Stelle über und unter und nicht neben dem jeweiligen Symbol oder Operatornamen platziert wird. Typischerweise werden im laufenden Text „keine Grenzen gezeigt“ (um zu vermeiden, dass die Zeilen auseinander gezogen werden); in abgesetzten Formeln hängt ihre Position vom jeweiligen Operator ab. Das nächste Beispiel veranschaulicht die in LaTEX voreingestellten Positionen.
Bsp. 8-4-4
"
n !
0
i=1
Text:
∞
;n
i=1 ,
? @ Diese Option betrifft auch weitere große Operatoren – , , , usw. – jedoch nicht die verschiedenen Integrale.
namelimits, nonamelimits Wie sumlimits oder nosumlimits, jedoch für bestimmte „Operatornamen“ wie z.B. det, inf , lim, und max, min,
deren Tiefstellungen normalerweise direkt unterhalb erscheinen, zumindest in abgesetzten Formeln. Die Positionierung an einzelnen Symbolen oder Namen lässt sich auch direkt steuern, und zwar mithilfe eines der folgenden TEX-Basisbefehle nach dem Symbol oder Operatornamen: \limits , \nolimits oder \displaylimits . Der letzte Befehl bestimmt, dass der Operator nur dann „Grenzen zeigt“, wenn ein Formelstil für abgesetzte Formeln verwendet wird. Er ist die Voreinstellung für alle Symbole der Klasse Operator1 und für \mathop-Konstruktionen. Wenn ein Operator außerhalb einer abgesetzten Formel „Grenzen zeigen“ soll, muss dies einzeln mit dem \limits-Befehl deklariert werden. Vergleicht man das nächste Beispiel mit Beispiel 8-4-4, so fällt auf, dass einige Befehle keine Wirkung zeigen, da sie lediglich die Voreinstellung bestätigen.
"∞
!n
i=1
Text:
lim
n→0
0
\gneq
? \gneqq
@ \gnsim
A \gvertneqq
! \lnapprox
B \lneq
C \lneqq
D \lnsim
E \lvertneqq
F \ncong
!= \neq
G \ngeq
H \ngeqq
!= \ne
≯ \ngtr
K \nleq
L \nleqq
M \nleqslant
≮ \nless
⊀ \nprec
P \npreceq
Q \nsim
R \nsucc
S \nsucceq
T \precnapprox
U \precneqq
V \precnsim
W \succnapprox
X \succneqq
Y \succnsim
I \ngeqslant
Blaue Symbole erfordern das amssymb-Paket oder, wenn sie mit (StM ) gekennzeichnet sind, das stmaryrd-Paket. Synonyme:
'= \ne, \neq
Tabelle 8.17: Symbole der Klasse \mathrel (Gleichheit und Ordnung – negiert)
548
8.9 Symbole in Formeln
g Y [ i _ ⊆ ^ ⊇ ` o q
\blacktriangleleft \inplus (StM ) \ntrianglelefteqslant (StM ) \sqsubset \sqsupseteq \subseteq \subsetpluseq (StM ) \supseteq \supsetpluseq (StM ) \trianglerighteq \vartriangleleft
h \blacktriangleright ] \ni \ \ntrianglerighteqslant (StM ) ^ \sqsubseteq " \Subset k \subseteqq l \Supset m \supseteqq n \trianglelefteq b \trianglerighteqslant (StM ) r \vartriangleright
∈ \in Z \niplus (StM ) ] \owns j \sqsupset ⊂ \subset ] \subsetplus (StM ) ⊃ \supset _ \supsetplus (StM ) a \trianglelefteqslant (StM ) p \vartriangle
Blaue Symbole erfordern das amssymb-Paket oder, wenn sie mit (StM ) gekennzeichnet sind, das stmaryrd-Paket. Synonyme:
( \owns, \ni
Tabelle 8.18: Symbole der Klasse \mathrel (Mengenoperatoren)
∉
\ _ b e h
\notin \nsupseteq \ntrianglelefteq \subsetneq \supsetneqq \varsupsetneq
Z ] ` c f i
[ ^ a d g
\nsubseteq \nsupseteqq \ntriangleright \subsetneqq \varsubsetneq \varsupsetneqq
\nsubseteqq \ntriangleleft \ntrianglerighteq \supsetneq \varsubsetneqq
Blaue Symbole erfordern das amssymb-Paket.
Tabelle 8.19: Symbole der Klasse \mathrel (Mengenoperatoren – negiert)
Daher sind auch einige eigens gestaltete „negierte Symbole“ verfügbar (siehe Tabelle 8.17 auf der vorherigen Seite). Wenn man die Wahl hat, sollte man normalerweise den eigens gestalteten Glyphen den Vorzug geben. Warum wird durch einen Vergleich der Symbole im folgenden Beispiel deutlich. Bsp. 8-9-7
!≤ !\ !∼ KSQ
\usepackage{amssymb} $ \not\leq \ \not\succeq \ \not\sim $ $ \nleq \ \nsucceq \ \nsim $
\par
Als nächstes folgen die Symbole der Klasse Relation, die als Mengenoperatoren dienen, sowie ihre Negationen (siehe die Tabellen 8.18 und 8.19). Ihnen folgen pfeilförmige Relationszeichen (in den Tabellen 8.20 und 8.21). Einige erweiterbare Pfeilkonstruktionen, die zusammengesetzte Relationszeichen erzeugen, wurden in Abschnitt 8.5.2 auf Seite 509 beschrieben.
549
8 s c e j uuv uuv ↓ y ←H ⇐ z h K #
| ~ ⇐= ⇐⇒ ⇐=i k=⇒ =⇒ ←j f→ g m → n M o q s j ⇑ m
HÖHERE MATHEMATIK
\circlearrowleft \curlyveedownarrow (StM ) \curlywedgedownarrow (StM ) \curvearrowleft \dasharrow \dashrightarrow \downarrow \downharpoonright \hookleftarrow \Leftarrow \leftarrowtail \leftrightarrowtriangle (StM ) \leftharpoonup \Leftrightarrow \leftrightarrows \leftrightsquigarrow \Longleftarrow \Longleftrightarrow \Longmapsfrom (StM ) \Longmapsto (StM ) \Longrightarrow \looparrowleft \Lsh \mapsfrom (StM ) \mapsto \nearrow \nnwarrow (StM ) \restriction \rightarrow \rightarrowtriangle (StM ) \rightharpoonup \rightleftharpoons \rightsquigarrow \Rsh \shortdownarrow (StM ) \shortrightarrow (StM ) \ssearrow (StM ) \swarrow \twoheadleftarrow \Uparrow \Updownarrow \upharpoonleft \upuparrows
t d f k wuu ⇓ x ← I→ ← g J ⇔ ↔ } ←− ←→ ←−j f−→ −→ ⇐i k⇒ l h ⇒
L ⇒ i p r t → ↑ n
\circlearrowright \curlyveeuparrow (StM ) \curlywedgeuparrow (StM ) \curvearrowright \dashleftarrow \Downarrow \downdownarrows \gets \hookrightarrow \leftarrow \leftarrowtriangle (StM ) \leftharpoondown \leftleftarrows \leftrightarrow \leftrightharpoons \Lleftarrow \longleftarrow \longleftrightarrow \longmapsfrom (StM ) \longmapsto \longrightarrow \looparrowright \Mapsfrom (StM ) \Mapsto (StM ) \multimap \nnearrow (StM ) \nwarrow \Rightarrow \rightarrowtail \rightharpoondown \rightleftarrows \rightrightarrows \Rrightarrow \searrow \shortleftarrow (StM ) \shortuparrow (StM ) \sswarrow (StM ) \to \twoheadrightarrow \uparrow \updownarrow \upharpoonright
Blaue Symbole erfordern das amssymb-Paket oder, wenn sie mit (StM ) gekennzeichnet sind, das stmaryrd-Paket. Synonyme:
← \gets, \leftarrow
→ \to, \rightarrow
**+ \dashrightarrow, \dasharrow
) \restriction, \upharpoonright
Tabelle 8.20: Symbole der Klasse \mathord (Pfeile) 550
8.9 Symbole in Formeln
l o
\nLeftarrow \nleftrightarrow
m p
\nleftarrow \nRightarrow
n q
\nLeftrightarrow \nrightarrow
Blaue Symbole erfordern das amssymb-Paket.
Tabelle 8.21: Symbole der Klasse \mathord (Pfeile – negiert)
u \Arrownot (StM ) v \arrownot (StM ) I \lhook u \Longarrownot (StM ) (StM ) (StM ) (StM ) v \longarrownot i \Mapsfromchar j \mapsfromchar k \Mapstochar (StM ) f \mapstochar ! \not H \rhook Blaue Symbole erfordern das stmaryrd-Paket.
Diese Symbole sind zur Kombination mit Pfeilen gedacht; z.B. ergibt \longarrownot\longleftarrow das Zeichen ←− ! .
Mit \joinrel lassen sich Relationszeichen „zusammenkleben“; z.B. ergibt \lhook\joinrel\longrightarrow das Zeichen "−→. Die Abmessungen dieser Symbole machen sie für andere Zwecke ungeeignet.
Tabelle 8.22: Symbole der Klasse \mathrel (Negationen und Pfeilerweiterungen)
: GF | u y ∝
: \bowtie \mid \nshortmid \nvDash \pitchfork \smallfrown \varpropto \Vvdash
r o |= v z ∝
\backepsilon \dashv \models \nshortparallel \nvdash \propto \smallsmile \Vdash
∵ N s w 1 { O
\because \frown \nmid \nVDash \parallel \shortmid \smile \vDash
! ∦ x ⊥ | ∴ q
\between \Join \nparallel \nVdash \perp \shortparallel \therefore \vdash
Blaue Relationssymbole erfordern das amssymb-Paket. Da \therefore ein Relationszeichen ist, hat es andere Abstände als vielleicht im Allgemeinen erwartet.
Tabelle 8.23: Symbole der Klasse \mathrel (verschiedene)
Zusätzlich zu dem Befehl \not , der zur Negation allgemeiner Relationszeichen verwendet wird, wurden eigens weitere Bausteine gestaltet, um pfeilförmige Zeichen zu negieren oder zu erweitern. Sie sind in Tabelle 8.22 zusammengestellt. Bsp. 8-9-8
←→ u
v←H
\usepackage{stmaryrd} $\Longarrownot\longleftrightarrow \qquad
\arrownot\hookleftarrow$
In Tabelle 8.23 findet sich abschließend noch eine Sammlung verschiedenster Relationszeichen.
551
8
HÖHERE MATHEMATIK
,
, ;
···
\cdots
:
\colon
;
... ..
.
\hdots
...
\ldots
\ddots
.. .
\vdots
...
\mathellipsis
Blaue Interpunktionszeichen erfordern das amsmath-Paket. Die logischen amsmath-Befehle, mit denen man normalerweise auf \cdots und \ldots zugreift, sind in Abschnitt 8.5.1 beschrieben. Der \colon-Befehl wird in amsmath umdefiniert, so dass er sich nicht mehr als allgemeines Interpunktionszeichen eignet. Synonyme:
. . . \hdots, \ldots
. . . \mathellipsis, \ldots
Tabelle 8.24: Symbole der Klassen \mathpunct , \mathord , \mathinner (Interpunktion)
8.9.6 Interpunktion Die Zeichen der Klasse Punctuation sind in Tabelle 8.24 dargestellt, zusammen mit einigen anderen, den Interpunktionen ähnlichen Zeichen. Man beachte, dass einige der typischen Interpunktionszeichen (und zwar „. ! ?“) nicht der Symbolklasse Punctuation, sondern Ordinary (reguläre Zeichen) zugeordnet sind. Dadurch verhalten sich diese Symbole, insbesondere ! und ?, beim üblichen Gebrauch möglicherweise anders als erwartet. Einige der hier aufgeführten Punktsymbole gehören zur Klasse Inner; Abschnitt 8.5.1 auf Seite 508 bietet nähere Informationen dazu, wie man Punkte als mathematische Auslassungszeichen verwendet.
"
<
kl {|
no
uv
F=
^
\int \bigcap \bigcurlywedge (StM )
\bigparallel (StM ) \bigtriangledown (StM )
\prod
)m }~
p@
\bigodot
\bigvee
j
wx ∫∫
\oint \bigcup \biginterleave (StM ) \bigoplus \bigsqcap (StM ) \bigtriangleup (StM ) \bigwedge \smallint
Blaue Operatorsymbole erfordern das stmaryrd-Paket.
wx yz
q? rs _t
y>
!;
\bigbox (StM ) \bigcurlyvee (StM ) \bignplus (StM ) \bigotimes \bigsqcup \biguplus \coprod \sum
Das Paket stmaryrd verwandelt die binären Zeichen \bigtriangleup und \bigtriangledown verwirrenderweise in Zeichen der Klasse Operator, es gibt jedoch Alternativbefehle für die binären Operatoren. Man beachte, dass \smallint gleich groß bleibt.
Tabelle 8.25: Symbole der Klasse \mathop
552
8.9 Symbole in Formeln
Das Zeichen : erzeugt einen Doppelpunkt der Klasse Relation und kein Interpunktionszeichen. Als Alternative verfügt Standard-LaTEX über den Befehl \colon für das Zeichen der Klasse Punctuation. Leider nimmt das amsmathPaket ziemlich unglückliche, deutliche Änderungen an den Abständen für den Befehl \colon vor, so dass er sich nur noch für ein spezielles Layout in Konstruktionen wie f\colon A\to B eignet, wo er f : A → B erzeugt. Daher empfiehlt es sich für den einfachen Doppelpunkt in Formeln immer \mathpunct{:} zu verwenden.
8.9.7 Operatorzeichen Die Zeichen der Klasse Operator liegen normalerweise in zwei Größen vor, für die Verwendung in eingebetteten und in abgesetzten Formeln. Die meisten von ihnen sind mit ähnlichen binären Operatoren verwandt. Ob ein Operatorzeichen in abgesetzten Formeln Grenzen zeigt, hängt von verschiedenen Faktoren ab (siehe Abschnitt 8.4.4). Die verfügbare Sammlung ist in Tabelle 8.25 auf der vorherigen Seite abgebildet.
8.9.8 Öffnende und schließende Zeichen Die Paare der erweiterbaren Begrenzungszeichen erzeugen Symbole der Klassen Opening bzw. Closing, wenn sie allein verwendet werden (also nicht nach einem \left , \right oder \middle-Befehl stehen). Sie sind in Tabelle 8.26 aufgelistet. Abschnitt 8.5.3 auf Seite 510 enthält weitere Informationen zu den erweiterbaren Symbolen. Um die Schreibweise vertikaler Striche flexibler zu gestalten, werden im amsmath-Paket zwei neue Paare erweiterbarer Begrenzungszeichen definiert: \lvert , \rvert , \lVert und \rVert . Diese Befehle sind mit den StandardLaTEX-Befehlen \langle und \rangle vergleichbar.
%( %(
PQ ST
!"
#$
[]
#$
\lbrack \rbrack
&'
\lceil \rceil
LM
\lfloor \rfloor
\{ \} \lbrace \rbrace () \langle \rangle
\llbracket \rrbracket (StM )
33 33 3 3 \lVert \rVert 33 ,, ,, , , \lvert \rvert ,, \lgroup \rgroup
\lmoustache \rmoustache
Blaue Symbole erfordern das amsmath-Paket oder, wenn sie mit (StM ) gekennzeichnet sind, das stmaryrd-Paket. Synonyme:
[ \lbrack, [
] \rbrack, ]
{ \lbrace, \{
} \rbrace, \}
Tabelle 8.26: Symbolpaare der Klassen \mathopen und \mathclose (erweiterbar)
553
8
HÖHERE MATHEMATIK
\llcorner \lrcorner
\ulcorner \urcorner
\llceil \rrceil (StM )
\binampersand \bindnasrepma (StM )
\llfloor \rrfloor (StM )
\llparenthesis \rrparenthesis (StM )
\Lbag \Rbag (StM )
Symbole der ersten Zeile erfordern das amssymb-Paket, alle andren das stmaryrd-Paket. Sie sind nicht erweiterbar.
Tabelle 8.27: Symbolpaare der Klassen \mathopen und \mathclose (nicht erweiterbar)
Die Pakete amssymb und stmaryrd fügen noch eine Zusammenstellung nicht erweiterbarer Symbolpaare der Klassen Opening und Closing hinzu, die in Tabelle 8.27 aufgelistet sind.
554
K A P I T E L
9
LATEX in einem mehrsprachigen Umfeld 9.1 9.2 9.3 9.4 9.5 9.6
TEX und nicht englische Sprachen . . . . . . . Die babel-Benutzerschnittstelle . . . . . . . . . Sprachspezifische Benutzerbefehle . . . . . . Unterstützung nicht lateinischer Alphabete. Anpassen des babel-Systems . . . . . . . . . . Andere Ansätze . . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. 555 . 560 . 566 . 585 . 596 . 607
Dieses Kapitel beginnt mit einer kurzen Erläuterung, welche technischen Probleme zu bewältigen sind, damit LaTEX Texte nicht englischer Sprachen verarbeiten kann. Der Großteil des verbleibenden Kapitels behandelt dann das babel-System, mit dessen Hilfe sich Texte verschiedenster Sprachen komfortabel verarbeiten lassen. Dabei liegt ein besonderes Augenmerk auf französischen, deutschen, russischen, griechischen und hebräischen Texten, da sich anhand dieser Sprachen sehr gut die unterschiedlichen Problematiken darstellen lassen, mit denen man beim Setzen von Texten in einer nicht englischen Umgebung konfrontiert wird. In Abschnitt 9.5 wird der Aufbau der Sprachdefinitionsdateien des babel-Systems für die verschiedenen Sprachoptionen erläutert. Abschließend folgen noch einige Hinweise zum Umgang mit anderen Sprachen wie z.B. Arabisch und Chinesisch, die nicht von babel unterstützt werden.
9.1 TEX und nicht englische Sprachen Aufgrund seiner Beliebtheit im akademischen Bereich hat TEX schnell weltweit Fuß gefasst und wird heute nicht nur für Sprachen verwendet, die auf dem lateinischen Alphabet beruhen, sondern auch für nicht lateinische Schriften, wie etwa Russisch, Griechisch, Arabisch, Persisch, Hebräisch, Thai, Vietnamesisch und einige indische Sprachen. Es existieren außerdem Lösungen für die
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
chinesische, japanische und koreanische Sprache, die auf Kanji basierende, ideographische Schriften verwenden. Mit Einführung der 8-Bit-Versionen von TEX und METAFONT, die Donald Knuth offiziell im März 1990 veröffentlichte, wurden zum ersten Mal einfachere Lösungen zur Unterstützung anderer Sprachen ermöglicht. Diese Versionen allein können jedoch auch nicht all die Probleme lösen, die auftreten, wenn man eine komfortable LaTEX-Umgebung anstrebt, mit der sich verschiedene und/oder nicht englische Sprachen verarbeiten lassen. Um dieses Ziel zu erreichen, müssten TEX und seine Partnerprogramme von Grund auf international aufgesetzt werden. Dabei sind die folgenden Punkte zu berücksichtigen: 1. Programme müssen auf die entsprechende(n) Sprache(n) anpassbar sein: • Unterstützen des Setzens in unterschiedlichen Schreibrichtungen. Diese Funktion wird von mehreren Programmen angeboten (z.B. eTEX und Omega) [27, 82]. • Erstellen passender Zeichensätze mit den landesüblichen Symbolen [140]. • Definieren von Standards für Fontkodierungen.
• Generieren von Trennmustern für den Silbentrennungsalgorithmus. 2. Übersetzen der sprachspezifischen Zeichenfolgen, Erstellen landesspezifischer Layouts für Standarddokumente und Programmieren sprachspezifischer Regeln zum automatischen Setzen der Texte mit TEX [131]. 3. Unterstützen der Verarbeitung mehrsprachiger Dokumente (mit mehr als einer Sprache innerhalb eines Dokumentes) und der Arbeit im internationalen Umfeld (eine Sprache je Dokument mit Auswahl unter mehreren Möglichkeiten). So sollte sich z.B. die Sortierung von Stichwörtern (im Index) und Literaturverweisen am Alphabet und der Sortierfolge der jeweiligen Sprache orientieren (vgl. die Erläuterungen zu xindy in Abschnitt 11.3). Gleichzeitig sollte es möglich sein, Dokumente komfortabel in verschieden Eingabekodierungen zu bearbeiten, zu betrachten und auszudrucken, wobei LaTEX die so erzeugten Dokumente ohne Probleme verarbeiten sollte. Es gibt jedoch nahezu genauso viele unterschiedliche Eingabekodierungen wie Sprachen (IBM-PCs z.B. verfügen über Dutzende verschiedener Kodiertabellen). Zusätzlich existieren noch unterschiedliche nationale und internationale Standards, wie z.B. die ISO 8859-x-Serie [72]. Darum sollte man auch der Kompatibilität und der Portabilität einige Aufmerksamkeit widmen. Wenn ein Dokument in verschiedensten Umgebungen reproduzierbar sein soll, gewinnt die Standardisierung an Bedeutung. So konnte man z.B. eine Zeit lang 8-Bitkodierte Dokumente nicht per E-Mail versenden, weil einige Mail-Gateways das Bit höherer Ordnung einfach unterschlugen, so dass sich die Dokumente nicht mehr verarbeiten ließen. Dieses Problem ist mittlerweile mehr oder weniger behoben, da fast alle Mail-Versender sich nach dem MIME-Standard (Multipart Internet Mail Extensions) richten, bei dem die jeweilige Kodierung (z.B. ISO 8859-x) explizit im Header der E-Mail angegeben wird. Es bleibt
556
9.1 TEX und nicht englische Sprachen
jedoch dabei, dass man wissen muss, mit welcher Kodierung ein Dokument erstellt wurde. LaTEX bewältigt diese Aufgabe mithilfe des inputenc-Paketes, das in Abschnitt 7.11.3 auf Seite 456 beschrieben wurde. Die Probleme der Dokumentenkodierung werden erst dann endgültig behoben sein, wenn neue Standards gelten, mit deren Hilfe sich nicht nur alphabetorientierte Sprachen, sondern auch ideographische Schriften wie Chinesisch, Japanisch und Koreanisch kodieren lassen. Zur Darstellung der Zeichen dieser Schriften reichen 8 Bit natürlich bei weitem nicht aus. Daher wurden bereits Mehrbyte-Standards für die elektronische Kodierung entwickelt, insbesondere „16-Bit“-Unicode, das eine Untermenge des Mehrbyte-Standards ISO 10646 [69, 70] bildet. Unicode wird höchstwahrscheinlich sehr bald die Standardkodierung der meisten Betriebssysteme sein. Darüber hinaus ist es auch das Herzstück der XML-Metasprache [26], auf der alle in letzter Zeit entwickelten Internet-Markup-Sprachen basieren. Dadurch lässt sich die Integrität elektronischer Dokumente sowohl hinsichtlich ihres Aufbaus als auch ihres Inhaltes in vollem Umfang garantieren. LaTEX unterstützt mit der Option utf8 für das inputenc-Paket eine eingeschränkte Version der UTF-8Darstellung von Unicode. Diese Option wurde in Abschnitt 7.5.2 besprochen. Auf dem Treffen in Portland, Oregon, im Jahre 1992 richtete das Technical Council der TUG unter dem Namen Technical Working Group on Multiple Language Coordination (TWGMLC) eine Arbeitsgruppe zur Koordinierung der verschiedenen Sprachen ein, die von Yannis Haralambous geleitet wird. Diese Gruppe erhielt den Auftrag, die Standardisierung und Entwicklung von sprachspezifischer TEX-Software zu fördern und zu koordinieren. Sie hatte das Ziel, für jede Sprache oder Sprachgruppe ein Paket herauszubringen, mit dem sich das Setzen von Dokumenten erleichtern ließ. Ein solches Paket sollte Einzelheiten über Zeichensätze, Eingabekonventionen und Trennmuster enthalten, sowie eine LaTEX-Optionsdatei, die mit dem babel-Konzept kompatibel ist, und unter Umständen einen Präprozessor; und natürlich sollte eine Dokumentation in Englisch und in der Zielsprache vorhanden sein.
9.1.1 Sprachspezifische Aspekte der Formatierung Um die Formatierung von Dokumenten in nicht englischen Sprachen zu unterstützen, muss man einige Aspekte berücksichtigen. An allererster Stelle steht hier, dass in verschiedenen Sprachen die Silbentrennung unterschiedlich geregelt ist. Dieser Tatsache wird TEX gerecht, indem es die Verwendung mehrerer Trennmuster unterstützt. In manchen Sprachen verändern sich jedoch bestimmte Buchstabenkombinationen an den Trennstellen. Diese Funktion wird von TEX nicht automatisch unterstützt. Manche Sprachen benötigen spezielle Zeichensätze zur korrekten Formatierung ihrer Texte. Dabei kann es sich um zusätzliche „Akzentbuchstaben“ handeln (wie es bei vielen europäischen Sprachen der Fall ist) oder gar um ein völlig anderes Alphabet (wie z.B. bei Sprachen, die das kyrillische oder griechische Alphabet verwenden). Bei außereuropäischen Sprachen kann zudem die Schreibrichtung abweichen (wie z.B. von rechts nach links bei arabischen und hebräischen Texten) oder es können so viele Zeichen erforderlich sein, dass die TEX-Standardmechanismen damit nicht mehr zurecht kommen (wie im Falle der Kanji-Schrift).
557
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
Ein eher „unterschwelliges“ Problem zeigt sich angesichts der Standarddokumentenklassen, die Bestandteil jeder LaTEX-Distribution sind: Sie wurden für den angloamerikanischen Raum gestaltet. Ein besonderes Beispiel, bei dem Konflikte mit anderen Sprachen auftreten, ist der Kapitelanfang. In manchen Sprachen reicht es nicht, einfach nur das Wort „Chapter“ zu übersetzen. Zusätzlich erscheinen die Elemente der Bezeichnung in anderer Reihenfolge und auch die Nummerierung muss, einzig aufgrund der grammatischen Regeln, geändert werden. Wo der englische Leser den Text „Chapter 1“ erwartet, möchte der französische Leser „1er Chapitre“ sehen.
9.1.2 Kulturspezifische Aspekte der Formatierung Noch unangenehmer für die Unterstützung verschiedener Sprachen ist die Tatsache, dass es, selbst in Ländern mit gleicher Sprache, unterschiedliche Formatierungsregeln gibt. So unterscheiden sich z.B. die Regeln für die Silbentrennung in britischem und amerikanischem Englisch. Englische Begriffe können von Land zu Land unterschiedlich zu übersetzen sein, wie es z.B. für das in Deutschland gesprochene Deutsch und das in Österreich gesprochene (und geschriebene) Deutsch gilt. Und auch die typographischen Regeln können sich von Land zu Land unterscheiden. Es gibt keine weltweiten Standards zur Formatierung verschachtelter Listen – ganz im Gegenteil, sie können sich je nach Sprache, nach Land und sogar nach Verlag unterschieden. Diese Gesichtspunkte führen zu der fließenden Grenze zwischen sprachlichen und kulturellen Aspekten der Formatierung. Diese Grenze lässt sich nicht eindeutig bestimmen. Wenn man jedoch Lösungen für die Formatierung von Dokumenten einer bestimmten Sprache entwickelt, muss man diesen Unterschied berücksichtigen. Die sprachspezifischen Aspekte lassen sich auf einer allgemeinen Ebene unterstützen, kulturellen Aspekten dagegen wird man meistens besser (und einfacher) durch spezielle Dokumentenklassen gerecht.
9.1.3 Babel – LATEX spricht mehrere Sprachen Die LaTEX-Distribution enthält ein paar Standarddokumentenklassen, die von den meisten Anwendern benutzt werden. Diese Klassen (article, report, book und letter) haben einen gewissen amerikanischen Charakter, der nicht jedem zusagt. Außerdem werden sprachspezifische Zeichenfolgen, wie etwa „Chapter“ und „Table of Contents“ entsprechend der Voreinstellungen immer in englischer Sprache ausgegeben (Tabelle 9.2 auf Seite 561 enthält eine Liste von Befehlen mit sprachspezifischen Texten). Das babel-Paket von Johannes Braams [25] bietet eine Reihe von Optionen, mit deren Hilfe man die Sprache oder Sprachen wählen kann, in denen ein Dokument gesetzt wird. Das Paket hat die folgenden Eigenschaften: • Es können gleichzeitig mehrere Sprachen verwendet werden. • Die Trennmuster, die geladen werden, wenn INITEX das LaTEX-Format erzeugt, lassen sich dynamisch über eine externe Datei definieren.
558
9.1 TEX und nicht englische Sprachen
Sprache
Option
Sprache
Option
Bahasa
bahasa basque breton bulgarian danish german (germanb), ngerman, austrian, naustrian english, USenglish, (american , canadian ), UKenglish (british ), australian (newzealand ) esperanto estonian finnish french (frenchb, francais, acadian , canadien ) galician greek, polutonikogreek hebrew interlingua irish icelandic italian catalan
Kroatisch
croatian latin dutch, afrikaans lowersorbian samin norsk, nynorsk uppersorbian polish portuges (portuguese ), brazilian (brazil) romanian russian scottish swedish serbian slovak slovene spanish czech turkish ukrainian magyar (hungarian ) welsh
Baskisch Bretonisch Bulgarisch Dänisch Deutsch Englisch
Esperanto Estnisch Finnisch Französisch Galizisch Griechisch Hebräisch Interlingua Irisch-Gälisch Isländisch Italienisch Katalanisch
Latein Niederländisch Niedersorbisch Nordsamisch Norwegisch Obersorbisch Polnisch Portugiesisch Rumänisch Russisch Schottisch-Gälisch Schwedisch Serbisch Slowakisch Slowenisch Spanisch Tschechisch Türkisch Ukrainisch Ungarisch Walisisch
Optionen in Klammern sind Alternativbezeichnungen für die vorhergehende Option. Optionen für die gleiche Sprache unterscheiden sich typischerweise in ihren Regeln für die Silbentrennung, in Datumskonventionen oder sprachspezifischen Zeichenfolgen. Die Option english kombiniert amerikanische Trennmuster mit einem britischen Datumsformat.
Tabelle 9.1: Vom babel-System unterstützte Sprachoptionen
• Für mehr als 40 Sprachen werden übersetzte sprachspezifische Zeichenfolgen und Befehle bereitgestellt, um die Texteingabe zu erleichtern (siehe Tabelle 9.1). Im nächsten Abschnitt folgt eine Beschreibung der Benutzerschnittstelle des babel-Systems. Danach werden die zusätzlichen Befehle für verschiedene Sprachen behandelt, sowie die Unterstützung für das Setzen von Sprachen, die nicht das lateinische Alphabet nutzen. Abschließend wird besprochen, wie man babel an seine eigenen Bedürfnisse anpassen kann, und wie die Sprachdefinitionsdateien (.ldf), welche die sprachspezifischen Befehle für babel einrichten, im Einzelnen aufgebaut sind. In allen Abschnitten veranschaulichen ausführliche Beispiele den Umgang mit den verschiedenen Sprachen, die von babel unterstützt werden.
559
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
9.2 Die babel-Benutzerschnittstelle Beim Laden des babel-Paketes sollte jede Sprache, die in dem betreffenden Dokument vorkommt, als Option deklariert werden. Alternativ dazu lassen sich die Sprachen, weil sie eine generelle Eigenschaft des Dokumentes darstellen, auch als globale Optionen des Befehls \documentclass festlegen. Dadurch werden sie jedem Paket zur Verfügung gestellt, das mit den Spracheinstellungen des Dokumentes sein Verhalten ändert. Die zurzeit unterstützten Optionen sind in Tabelle 9.1 auf der vorherigen Seite aufgezählt. Die folgende Deklaration z.B. bereitet das Setzen eines Dokumentes in den Sprachen Deutsch (Option ngerman für die neuen Regeln der Silbentrennung) und Italienisch (Option italian) vor:
\usepackage[ngerman,italian]{babel} Die letzte Sprache in der Befehlszeile des \usepackage-Befehls wird am Anfang des Dokumentes verwendet. Das Dokument im vorigen Beispiel beginnt mit den italienischen Einstellungen für sprachspezifische Texte, Trennmuster und gegebenenfalls einige sprachspezifische Befehle (wie etwa das Datum). Sie gelten bis zu dem Punkt, an dem eine andere Sprache ausgewählt wird. Die Trennmuster werden allerdings nur aktiviert, wenn sie beim Erzeugen des LaTEX-Formats durch INITEX für die jeweilige Sprache geladen wurden (vgl. die Erläuterungen auf Seite 596). Wenn man ngerman und italian als globale Optionen verwendet, erhalten auch andere Pakete diese Information. Durch die folgenden Codezeilen z.B. kann das Paket varioref (das in Abschnitt 2.4.2 auf Seite 72 beschrieben wurde) die Optionen des \documentclass-Befehls wahrnehmen und nutzen:
\documentclass[ngerman,italian]{article} \usepackage{babel} \usepackage{varioref} Wer ein Dokument mit mehr als einer Sprache erstellt und eigene sprachspezifische Zeichenfolgen für die varioref-Befehle definieren möchte, sollte dies nach den in Abschnitt 9.5 auf Seite 596 beschriebenen Methoden tun und nicht mithilfe der in Abschnitt 2.4.2 besprochenen. Die meisten in LaTEX verfügbaren Dokumentenklassen definieren eine ReiSprachspezifische he von Befehlen zum Speichern von sprachspezifischen Texten. Tabelle 9.2 Zeichenfolgen auf der nächsten Seite zeigt eine Übersicht über diese Befehle und ihre voreingestellten Textinhalte.
9.2.1 Einstellen oder Abfragen der aktuellen Sprache Innerhalb eines Dokumentes kann man die aktuelle Sprache auf verschiedene Weise ändern. So lassen sich z.B. alle sprachabhängigen Einstellungen einschließlich der Übersetzungen generierter Texte, wie etwa „Chapter“, die Formatierungskonventionen und die Konfiguration der Kurzformen ändern. Oder man behält die Übersetzungen bei und ändert alles andere (wenn man z.B. nur kurze Passagen des Haupttextes in einer anderen Sprache setzt). Und schließlich kann man auch einfach nur die Regeln für die Silbentrennung ändern.
560
9.2
Die babel-Benutzerschnittstelle
Befehl
Voreinstellung
Befehl
Voreinstellung
\abstractname \alsoname \appendixname \bibname \ccname \chaptername \contentsname \enclname \figurename \glossaryname \headtoname
Abstract
\indexname \listfigurename \listtablename \pagename \partname \prefacename \proofname \refname \seename \tablename
Index
see also Appendix Bibliography cc Chapter Contents encl Figure Glossary
List of Figures List of Tables Page Part Preface Proof References see Table
To (letter class)
Tabelle 9.2: Sprachspezifische Texte in babel (Englische Voreinstellungen)
\selectlanguage{sprache} Alle sprachspezifischen Einstellungen lassen sich in einem Schritt mithilfe des Befehls \selectlanguage ändern. Wenn man z.B. ins Deutsche wechseln möchte, würde man den Befehl \selectlanguage{ngerman} verwenden. Auf die gleiche Weise kann man auch auf andere Sprachen umschalten. Dazu muss, wie bereits erklärt, jede der gewählten Sprachen zuvor in der Präambel als Sprachoption deklariert worden sein. Der Befehl \selectlanguage ruft die Makros der Sprachdefinitionsdatei auf (siehe Abschnitt 9.5) und aktiviert die spezifischen Definitionen für die besagte Sprache. Außerdem aktualisiert er die Einstellung des TEX-Basisbefehls \language, der für die Silbentrennung benutzt wird.
\begin{otherlanguage}{sprache} Die Umgebung otherlanguage funktioniert genauso wie die Deklaration \selectlanguage , mit dem Unterschied, dass der Sprachwechsel nur innerhalb der Umgebung gilt. Zum Kombinieren wechselnder Schreibrichtungen von links nach rechts und von rechts nach links ist diese Umgebung eine zwingende Voraussetzung. Das Argument sprache gibt die Sprache an, zu der man umschalten möchte.
\foreignlanguage{sprache}{phrase} \begin{otherlanguage*}{sprache} text \end{otherlanguage*} Der Befehl \foreignlanguage formatiert den Inhalt des Argumentes phrase nach den Regeln der festgelegten sprache. Er wechselt zur Silbentrennung der Sprache und aktiviert ihre Spezialdefinitionen; die Datumskonventionen
561
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
und die sprachspezifischen Texte werden nicht geändert. Die entsprechende Umgebung ist otherlanguage*.
Die festen Bezeichnungen für Dokumentenelemente sind von der jeweiligen Sprache abhängig: in Deutsch erhalten wir “Literatur” oder “Kapitel”. In English we get “References” or “Chapter”. Voici en français : “Références” ou “Chapitre”. But in short phrases “Références” does not change!
\usepackage[english,french,ngerman]{babel} \raggedright Die festen Bezeichnungen für Dokumentenelemente sind von der jeweiligen Sprache abhängig: in Deutsch erhalten wir ‘‘\refname’’ oder ‘‘\chaptername’’. \par \selectlanguage{english} In English we get ‘‘\refname’’ or ‘‘\chaptername’’. \par \begin{otherlanguage}{french} Voici en fran\c cais: ‘‘\refname’’ ou ‘‘\chaptername’’. \foreignlanguage{english}{But in short phrases ‘‘\refname’’ does not change!} \end{otherlanguage}
Bsp. 9-2-1
\begin{hyphenrules}{sprache} Für den Inhalt der Umgebung hyphenrules ändern sich nur die Regeln für die Silbentrennung entsprechend der angegebenen sprache; \languagename und alle anderen Einstellungen werden beibehalten. Wenn im Format keine Trennmuster für die sprache geladen wurden, hat die Umgebung keinerlei Auswirkungen. Mithilfe dieser Umgebung kann man auch jegliche Silbentrennung vermeiden, sofern in der Datei language.dat die „Sprache“ nohyphenation definiert ist. Dies geschieht, wie in Abschnitt 9.5.1 auf Seite 596 erklärt, durch Laden der Datei zerohyph.tex.
Dieser Text zeigt Auswirkungen der Silbentrennung. Dieser Text zeigt Auswirkungen der Silbentrennung.
\usepackage[ngerman]{babel} \begin{minipage}{4cm} Dieser Text zeigt Auswirkungen der Silbentrennung.\par \begin{hyphenrules}{nohyphenation} Dieser Text zeigt Auswirkungen der Silbentrennung. \end{hyphenrules} \end{minipage}
Man beachte, dass dieses Verfahren auch funktioniert, wenn die „Sprache“ nohyphenation dem babel-Paket nicht als Option mitgegeben wurde. Beim Einsatz mehrerer Sprachen muss man manchmal wissen, welche Sprache an einer bestimmten Position im Dokument gerade aktiv ist. Das lässt sich durch Aufrufen von \iflanguage überprüfen:
\iflanguage{sprache}{wahr-anweisung}{falsch-anweisung} Zunächst wird anhand des ersten Argumentes (sprache) überprüft, ob die angegebene Sprache überhaupt für babel deklariert wurde. Ist sie bekannt, so vergleicht der Befehl sie mit der aktuellen Sprache. Wenn beide übereinstimmen, werden die Befehle der wahr-anweisung ausgeführt. Ansonsten werden die Befehle im dritten Argument, der falsch-anweisung, ausgeführt.
562
Bsp. 9-2-2
9.2
Die babel-Benutzerschnittstelle
Dieser Schritt vergleicht eigentlich die \l@!sprache"-Befehle miteinander, die auf die Trennmuster für die beiden Sprachen verweisen (siehe Abschnitt 9.5.1 auf Seite 596). Daher werden zwei „Sprachen“ dann als identisch angesehen, wenn sie die gleichen Muster verwenden (zum Beispiel Dialekte1 einer Sprache, wie etwa austrian), insbesondere Sprachen, für die keine Muster geladen sind.
Bsp. 9-2-3
Deutsch und Österreichisch verwenden die gleichen und Englisch und Österreichisch verschiedene Trennmuster.
\usepackage[english,naustrian,ngerman]{babel} Deutsch und Österreichisch verwenden \iflanguage{naustrian}{die gleichen}{verschiedene} und \foreignlanguage{english}{Englisch und Österreichisch \iflanguage{naustrian}{die gleichen}{verschiedene}} Trennmuster.
\languagename Der Befehl \languagename gibt den Namen der aktuellen Sprache aus.
Bsp. 9-2-4
(1) Die Sprache ist english. (2) Die Sprache ist german. (3) Die Sprache ist french. (4) Die Sprache ist english. (5) Pas en français. (6) Die Sprache ist german.
\usepackage[german,french,english]{babel} \par(1) Die Sprache ist \languagename. \par(2) \selectlanguage{german}% Die Sprache ist \languagename. \par(3) \begin{otherlanguage}{french} Die Sprache ist \languagename. \end{otherlanguage} \par(4) \foreignlanguage{english}{% Die Sprache ist \languagename.} \par(5) \iflanguage{french}{En fran\c cais.} {Pas en fran\c cais.} \par(6) Die Sprache ist \languagename.
9.2.2 Vom Umgang mit Kurzformen Autoren, die nicht in englischer Sprache schreiben, müssen die Buchstaben für die Sprache ihres Dokumentes oftmals auf recht umständliche Weise eingeben. Sie benötigen relativ häufig Buchstaben mit Akzenten ober- oder unterhalb – manchmal sogar mit mehreren gleichzeitig. Wenn man solche Glyphen erzeugen muss und nicht mit einer 8-Bit- sondern nur mit einer 7-BitKodierung arbeiten kann, ist eine Vereinfachung für die Eingabe der Zeichenbefehle höchst willkommen. Darum (und aus weiteren Gründen, die später noch besprochen werden) unterstützt babel das Konzept von „Kurzformen“. Eine „Kurzform“ besteht aus einer Eingabe von ein oder zwei Zeichen, wobei das erste Zeichen, das so genannte „Kurzformzeichen“, die Kurzform einleitet. Bei einer Kurzform, die aus zwei Zeichen besteht, legt das zweite Zeichen das Verhalten der Kurzform fest. Babel kennt drei Arten von Kurzformen: „system“-, „sprach“- und „anwender“-spezifische. Eine systemspezifische Kurzform kann durch eine 1 Nur hinsichtlich ihrer babel-Umsetzung! Dort werden aus rein T Xnischen Gründen eiE nige Sprachen als „Dialekte“ anderer Sprachen behandelt; das ist in keiner Weise als Diskriminierung gedacht.
563
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
andere für die jeweilige Sprache außer Kraft gesetzt werden; eine sprachspezifische Kurzform wiederum kann durch eine vom Anwender definierte Kurzform übergangen werden. Befehle für Kurzformen auf Dokumentenebene Dieser Abschnitt beschäftigt sich mit Kurzformbefehlen, die im Dokument verwendet werden können, sowie verschiedenen Gesichtspunkten des Kurzformkonzeptes. Kurzformen auf Sprach- oder Systemebene werden in Sprachdefinitionsdateien deklariert (siehe Abschnitt 9.5 auf Seite 596).
\useshorthands{zeichen} Der Befehl \useshorthands leitet die Definition von anwenderspezifischen Kurzformen ein. Das Argument zeichen ist das Zeichen, mit dem die Kurzform beginnt.
\defineshorthand{kurzform}{langform} Mit dem Befehl \defineshorthand wird eine Kurzform definiert. Sein erstes Argument, kurzform, besteht aus ein oder zwei Zeichen, und das zweite Argument, langform, ist der Code, den die Kurzform erzeugen soll.
\aliasshorthand{zeichen1}{zeichen2} Mithilfe des Befehls \aliasshorthand kann man das Zeichen zeichen2 als Alternative für ein existierendes Kurzformzeichen zeichen1 festlegen. Wenn man z.B. anstelle von " lieber das Zeichen | verwendet, kann man dies über den Befehl \aliasshorthand{"}{|} angeben. Im nächsten Beispiel werden obige Deklarationen benutzt um einige Kurzformen zur englischen Sprachoption hinzuzufügen.
Use and effect of "a: ä and "i: ï. Use and effect of |a: ä and |i: ï.
\usepackage[english]{babel} \useshorthands{"} \defineshorthand{"a}{\"{a}} \defineshorthand{"i}{\"{\i}} \aliasshorthand{"}{|} Use and effect of \verb="a=: "a and \verb="i=: "i. Use and effect of \verb=|a=: |a and \verb=|i=: |i.
\languageshorthands{sprache} Mithilfe des Befehls \languageshorthands kann man auf die Kurzformen der als Argument angegebenen sprache umschalten. Dabei muss die sprache für babel im aktuellen Dokument deklariert sein. Beim Wechsel von einer Sprache zur anderen geben die Sprachdefinitionsdateien normalerweise diesen Befehl für die entsprechende Sprache aus. Die Datei frenchb.ldf z.B. enthält z.B. die Deklaration \languageshorthands{french}. Hin und wieder muss man die Kurzformfunktion eines bestimmten Zeichens vorübergehend abschalten, da es in seiner ursprünglichen Bedeutung benötigt wird. Dafür existieren zwei Deklarationen.
564
Bsp. 9-2-5
9.2
\shorthandon{zeichen}
Die babel-Benutzerschnittstelle
\shorthandoff{zeichen}
Der Befehl \shorthandoff setzt den \catcode für jedes Zeichen seines Argumentes zeichen auf „other“ (Sonstige, 12). Der Befehl \shorthandon hingegen setzt den \catcode für die Zeichen seines Argumentes zeichen auf „active“ (13). Beide Befehle wirken sich nur auf „bekannte“ Kurzzeichen aus. Ist ein Zeichen nicht als Kurzzeichen bekannt, so bleibt seine Kategorie unverändert. Die Sprachdefinitionsdatei german.ldf kennt z.B. die beiden Befehle \mdqoff und \mdqon, die das Kurzformverhalten des Zeichens " aus- bzw. einschalten. Sie sind folgendermaßen definiert:
\newcommand\mdqon{\shorthandon{"}} \newcommand\mdqoff{\shorthandoff{"}} Die Sprachdefinitionsdatei für die französische Sprache (frenchb.ldf) aktiviert die „doppelten“ Satzzeichen „?“, „!“, „:“ und „;“. Dieses Verhalten lässt sich abschalten, indem man die Zeichen dem Befehl \shorthandoff im Argument übergibt. Dieser Schritt ist bei manchen Paketen erforderlich, in denen diese Zeichen eine besondere Bedeutung erhalten. Im nächsten Beispiel, in Kombination mit dem xy-Paket, werden die Zeichen „;“ und „?“ als Kurzzeichen deaktiviert, da sie in der xy-Umgebung des Paketes [58, Kapitel 5] eine besondere Funktion ausüben.
Bsp. 9-2-6
Voici un exemple avec xypic : !x • Quelle belle flèche !
\usepackage{xy} \usepackage[french]{babel} Voici un exemple avec \emph{xypic}: \[ \shorthandoff{;?} \begin{xy} (0,0)*{\bullet}, (0,0) ; (10,0), **\dir {-} ?>* \dir {>}, (12,0)*{x}, \end{xy} \] Quelle belle fl\‘eche !
9.2.3 Sprachattribute Hin und wieder müssen sprachspezifische Lösungen an unterschiedliche Bedingungen angepasst werden. In diesem Fall lassen sich Attribute für die jeweilige Sprache definieren. Bei der Unterstützung zum Setzen lateinischer Texte finden sich zwei solche Beispiele. Bei Auswahl des Attributes medieval werden die Bezeichnungen bestimmter Dokumentenelemente anders geschrieben und die Buchstaben „u“ und „V“ werden zu einem Klein- und Großbuchstabenpaar zusammengefasst. Das Attribut withprosodicmarks findet in Grammatiken, Wörterbüchern, Lehrtexten und ähnlichen Werken Verwendung, in denen Betonungszeichen für eine vollständige Beschreibung von Wörtern oder Versen unerlässlich sind. Es stellt besondere Kurzformen für die Akzente Brevis und Macron bereit, die in Kombination mit anderen Paketen zu Konflikten führen können.
\languageattribute{sprache}{sprachattr } Der Befehl \languageattribute legt fest, welche Attribute für die jeweilige Sprache gelten. Er muss in der Dokumentenpräambel nach dem Befehl
565
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
\usepackage[...]{babel} stehen, der das babel-Paket lädt. Der Befehl besitzt zwei Argumente: Das Argument sprache enthält den Namen der Sprache und sprachattr enthält eine durch Kommas unterteilte Liste von Attributen für diese Sprache. Der Befehl überprüft, ob die gegebene Sprache im aktuellen Dokument bekannt ist und ob die Attribute für diese Sprache zur Verfügung stehen. So verfügt babel z.B. über zwei Varianten für die griechische Sprache: monotoniko (nur ein Akzent), die Voreinstellung, und polutoniko (mit verschiedenen Akzenten). Die Variante polutoniko wird in der Dokumentenpräambel mit dem Befehl \languageattribute ausgewählt. Die nächsten beiden Beispiele machen den Unterschied deutlich.
Das griechische Wort für „Index“ ist Ευρετήριο.
\usepackage[greek,ngerman]{babel} Das griechische Wort für "‘Index"’ ist \begin{otherlanguage}{greek}\indexname\end{otherlanguage}.
Bsp. 9-2-7
Mit dem Attribut polutoniko erhält man ein anderes Ergebnis:
Das griechische Wort für „Index“ ist Ε)ρετήριο.
\usepackage[greek,ngerman]{babel} \languageattribute{greek}{polutoniko} Das griechische Wort für "‘Index"’ ist \begin{otherlanguage}{greek}\indexname\end{otherlanguage}.
9.3 Sprachspezifische Benutzerbefehle Dieser Abschnitt bietet einen allgemeinen Überblick darüber, welche Funktionen üblicherweise von den verschiedenen Sprachoptionen angeboten werden. Dazu gehören Übersetzungen für sprachspezifische Texte sowie eine Übersicht über typische Kurzformen zur Erleichterung der Eingabe oder zur Erfüllung besonderer Formatierungsaufgaben. Einige Sprachoptionen definieren überdies zusätzliche Befehle für spezielle Datums- oder Zahlenformate. Des Weiteren werden Layoutanpassungen besprochen, wie sie für französische und hebräische Texte erfolgen, sowie Schnittstellen zur Handhabung unterschiedlicher Schriften (z.B. der lateinischen und der kyrillischen) im gleichen Dokument.
9.3.1 Übersetzungen Wie bereits zuvor besprochen, stellt babel Übersetzungen für die Bezeichnungen von Dokumentelementen zur Verfügung, die LaTEX in seinen Dokumentenklassen verwendet. Die englischen Versionen dieser Texte sind in Tabelle 9.2 auf Seite 561 aufgeführt. Die Tabelle 9.3 auf Seite 567 zeigt die entsprechenden Übersetzungen für eine Reihe weiterer Sprachen, von denen eine nicht auf der lateinischen Schrift basiert. Will man einzelne Übersetzungen für eine Sprache ändern, geschieht dies mit dem \addto-Befehl. Die zu ändernden sprachspezifischen Texte werden
566
Bsp. 9-2-8
9.3 Sprachspezifische Benutzerbefehle
Bsp. 9-3-1
Befehl
Deutsch
Französisch
\abstractname \alsoname \appendixname \bibname \ccname \chaptername \contentsname \enclname \figurename \glossaryname \headtoname \indexname \listfigurename \listtablename \pagename \partname \prefacename \proofname \refname \seename \tablename
Zusammenfassung siehe auch Anhang Literaturverzeichnis Verteiler Kapitel Inhaltsverzeichnis Anlage(n) Abbildung Glossar An Index Abbildungsverzeichnis Tabellenverzeichnis Seite Teil Vorwort Beweis Literatur siehe Tabelle
Résumé voir aussi Annexe Bibliographie Copie à Chapitre Table des matières P. J. F IG . Glossaire
Polnisch
Streszczenie Porównaj tak˙ze Dodatek Bibliografia Kopie: Rozdział Spis tre´sci Załacznik ˛ Rysunek Glossary Do Index Indeks Table des figures Spis rysunków Liste des tableaux Spis tablic page Strona Deuxième partie Cz˛es´c´ Préface Przedmowa Démonstration Dowód Références Literatura voir Porównaj TAB . Tablica
Russisch Аннотация см. также Приложение Литература исх. Глава Содержание вкл. Рис. Glossary вх. Предметный указатель Список иллюстраций Список таблиц с. Часть Предисловие Доказательство Список литературы см. Таблица
Im Französischen gibt \partname auch die Nummern der Teile als Wörter aus, wie z.B. „Première, Deuxième, . . . “
Tabelle 9.3: Sprachspezifische Texte in babel (Deutsch, Französisch, Polnisch, Russisch)
damit dem Parameter \captions!sprache" hinzugefügt, siehe auch Seite 605.
Bsp. 9-3-2
\tablename erzeugt jetzt im Deutschen das Wort Tafel, aber im Österreichischen immer noch Tabelle.
\usepackage[austrian,ngerman]{babel} \addto\captionsngerman{\renewcommand\tablename{Tafel}} \verb=\tablename= erzeugt jetzt im Deutschen das Wort \tablename{}, aber im \selectlanguage{austrian}% Österreichischen immer noch \tablename.
Abgesehen von den übersetzten Texten in Tabelle 9.3 verfügen die Sprachdefinitionsdateien, wie im nächsten Beispiel gezeigt wird, normalerweise auch über alternative Versionen des Befehls \today .
Bsp. 9-3-3
Das Datum „29. Februar 2004“, wird in Amerika „February 29, 2004“ in England „29th February 2004“ und in Bulgarien „29 февруари 2004 г.“ geschrieben. In Katalonien schreibt man „29 de febrer de 2004“.
\usepackage[catalan,bulgarian, american,british,ngerman]{babel} \raggedright Das Datum "‘\today"’, wird in Amerika "‘{\selectlanguage{american}\today}"’ in England "‘{\selectlanguage{british}\today}"’ und in Bulgarien "‘{\selectlanguage{bulgarian}\today}"’ geschrieben. In Katalonien schreibt man "‘{\selectlanguage{catalan}\today}"’.
567
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
9.3.2 Verfügbare Kurzformen Viele Sprachdefinitionsdateien stellen Kurzformen zur Verfügung. Einige sollen die Eingabe erleichtern, andere hingegen dienen dem Erzeugen recht aufwendiger Spezialeffekte. Viele Anwender sind sich vielleicht gar nicht bewusst, dass LaTEX selbst auch eine Kurzform definiert (die allerdings nicht so genannt wird) und die sie sicherlich recht häufig verwenden: Es ist das Tilde-Zeichen (~), mit dem ein „geschützter“ Leerschritt eingegeben wird. Viele Kurzformdefinitionen beziehen sich auf „Akzentbuchstaben“. Sie wurden zu jener Zeit erfunden, als TEX weder 8-Bit-Eingaben noch 8-BitTrennmuster unterstützte. Sofern echte 8-Bit-Trennmuster zur Verfügung stehen, sind diese normalerweise zu bevorzugen. Mithilfe des inputencPaketes lässt sich dazu die passende Eingabekodierung auswählen (siehe Abschnitt 7.1.2 auf Seite 339). Sind jedoch bei Trennung direkt an einem Akzentbuchstaben besondere Verarbeitungsschritte erforderlich (wie etwa bei der Silbentrennung im Niederländischen), so kommt man nicht mehr ohne Kurzformen aus.1 Anführungszeichen Das beliebteste Kurzzeichen ist das Anführungszeichen ("). Es wird als solches in folgenden Sprachen verwendet: Baskisch, Bulgarisch, Dänisch, Deutsch, Estnisch, Finnisch, Galizisch, Isländisch, Italienisch, Katalanisch, Latein, Niederländisch, Norwegisch, Obersorbisch, Polnisch, Portugiesisch, Russisch, Schwedisch, Serbisch, Slowenisch, Spanisch und Ukrainisch. Es würde zu weit führen, alle Fälle zu beschreiben, in denen das Anführungszeichen als Kurzzeichen verwendet wird. Stattdessen empfiehlt es sich, die Einzelheiten zu den gewünschten Sprachen in der Dokumentation des babel-Paketes nachzulesen. An dieser Stelle lässt sich nur sagen, dass man die Verwendung der Zeichen verschiedenen Kategorien zuordnen kann, die alle im Folgenden anhand einiger Beispiele beschrieben werden. Einfügen von Akzentbuchstaben Bei verschiedenen Sprachen wurden Kurzzeichen eingeführt um die Eingabe von Akzentbuchstaben zu erleichtern. Mit der Verbreitung der 8-Bit-Eingabe- und Ausgabekodierungen scheint dieser Bedarf nicht mehr zu bestehen, was jedoch nicht immer zutrifft. Im Niederländischen z.B. muss ein Akzent entfernt werden, wenn an dem entsprechenden Akzentbuchstaben eine Trennung erfolgt.
Den Koning van Hispaniën heb ik altijd geeerd! Den Koning van Hispaniën heb ik altijd geëerd!
\usepackage[dutch]{babel} Den Koning van Hispani"en heb ik altijd ge"eerd! Den Koning van Hispani"en heb ik altijd ge"eerd!
Einfügen von Sonderzeichen Im Katalanischen benötigt man eine besondere Glyphe, das „Doppel-l“, zum korrekten Formatieren von Texten [168]. 1 Das trifft nur zu, wenn T X als Formatierungsprogramm im Hintergrund eingesetzt wird. E Omega z.B. verfügt über zusätzliche Funktionen, die solche Fälle automatisch verarbeiten können.
568
Bsp. 9-3-4
9.3 Sprachspezifische Benutzerbefehle
Im Falle einer Trennung fällt der Punkt zwischen den beiden „l“ weg.
Bsp. 9-3-5
Das „Doppel-l“ kommt in \usepackage[catalan,ngerman]{babel} Wörtern wie intel.ligència, il- Das "‘Doppel-l"’ kommt in Wörtern wie \foreignlanguage{catalan}{inte"lig\‘encia, i"lusi\’o} vor. lusió vor. Dieses Zeichen lässt sich auch durch die Befehle \lgem und \Lgem erzeugen, oder mit den Kombinationen „\l.“ und „\L.“, sobald die Option catalan ausgewählt ist. Einfügen von besonderen Anführungszeichen LaTEX unterstützt entsprechend seiner Voreinstellung einzelne und doppelte Anführungsstriche: ‘Zitat’ und “Zitat”. Diese Versionen eignen sich nur für wenige europäische Sprachen, denn viele von ihnen haben ihre eigenen Richtlinien und benötigen meistens andere Zeichen. Die setzerische Tradition der Niederlande erfordert z.B., dass die öffnenden Anführungszeichen an der Grundlinie stehen, im Deutschen sind die schließenden Anführungszeichen umgekehrt und in Frankreich werden Guillemets (doppelte spitze Klammern) verwendet. Auch im Isländischen finden sich die Guillemets, allerdings seitenverkehrt, also mit den Spitzen nach „innen“ anstatt nach „außen“ (eine Schreibweise, die manchmal auch in der deutschen Typographie vorkommt).
Bsp. 9-3-6
Englische “Zitate” haben andere Anführungszeichen als niederländische „Zitate” oder deutsche „Zitate“ oder französische « Zitate ».
\usepackage[dutch,french,ngerman]{babel} Englische ‘‘Zitate’’ haben andere Anführungszeichen als \selectlanguage{dutch}niederländische "‘Zitate"’ oder \selectlanguage{ngerman}deutsche "‘Zitate"’ oder \selectlanguage{french}französische \og Zitate\fg.
Die Fontkodierung T1 enthält zwar Guillemets (siehe Tabelle 7.32 auf Seite 462), in französischen Texten werden sie jedoch mithilfe der Befehle \og und \fg erzeugt. Diese Befehle setzen die Guillemets nicht nur, sondern erzeugen auch die passenden Abstände zum eingeschlossenen Text. Einfügen bei Sonderfällen der Silbentrennung In einigen Sprachen gelten besondere Regeln, wenn Zeilen an bestimmten Buchstaben umbrochen werden. So wurde z.B. in der alten deutschen Rechtschreibung die Buchstabenkombination ..ck.. als ..k-k.. getrennt und ein dreifaches f in einem zusammengesetzten Wort wurde normalerweise zu ff zusammengefasst, bei Trennungen jedoch wieder um das dritte f erweitert, wie im nächsten Beispiel zu sehen ist.
Bsp. 9-3-7
Brote bakken
Farbstofffabrik
\usepackage[german]{babel} \fbox{\parbox[t]{1,5cm}{Brote ba"cken}} \quad \fbox{\parbox[t]{1,5cm}{Farbsto"ffabrik}}
Einfügen besonderer Hinweise zu Trennungen Einige Kurzformen lassen sich verwenden, um LaTEX auf Besonderheiten bei der Kopplung von Buchstaben hinzuweisen. In manchen Sprachen muss man LaTEX z.B. am Setzen einer Ligatur hindern, etwa bei zusammengesetzten Wörtern. Das lässt sich mithilfe einer kleinen Unterschneidung erreichen, die zwischen den
569
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
Buchstaben, die normalerweise eine Ligatur bilden, eingefügt wird. Das entsprechende Kurzzeichen "| ist in vielen Sprachdefinitionen verfügbar.
\usepackage[ngerman]{babel} Das deutsche Wort „Auflage“ sollte nicht Das deutsche Wort "‘Auflage"’ sollte nicht so, sondern als ">Auf"|lage"< gesetzt werden. so, sondern als »Auflage« gesetzt werden.
Bsp. 9-3-8
Ein weiteres beliebtes Kurzzeichen ist "-, das (genau wie \-) darauf hinweist, dass an dieser Stelle getrennt werden darf, ohne dass dadurch jedoch Trennungen im übrigen Wort (Silbenrätsel) unterdrückt werden:
letter- letter- lettergreepraadsel greep- greepraadsel raadsel
\usepackage[dutch]{babel} \fbox{\parbox[t]{1cm}{letter"-greepraadsel}} \fbox{\parbox[t]{1cm}{letter\-greepraadsel}} \fbox{\parbox[t]{1cm}{lettergreepraadsel}}
Bsp. 9-3-9
Außerdem gibt es noch die folgenden Kurzformen: "" gleicht "-, ohne jedoch ein Divis-Zeichen auszugeben; "= fügt einen expliziten Trennstrich ein, an dem umbrochen werden darf, während die verbundenen Wörter weiterhin separat getrennt werden können; und "~ fügt einen geschützten Bindestrich ein, an dem nicht umbrochen werden darf. Das nächste Beispiel demonstriert die Auswirkungen dieser Kurzzeichen anhand eines einzelnen Wortes.
1. GutenbergUniversität 2. GutenbergUniversität
GutenbergUniversität GutenbergUniversität 3. GutenbergUniversität Gutenberg Universität 4. Gutenberg-Universi- Gutenbergtät Universität 5. Gutenberg-Universität Gutenberg-Universität
\usepackage[german]{babel} \newcommand\present[1]{% \fbox{\parbox[t]{31mm}{#1}} \fbox{\parbox[t]{16mm}{#1}} \par} 1. \present{Gutenberg-Universit"at} 2. \present{Gutenberg"-Universit"at} 3. \present{Gutenberg""Universit"at} 4. \present{Gutenberg"=Universit"at} 5. \present{Gutenberg"~Universit"at}
Die Tilde In den Sprachen Baskisch, Estnisch, Galizisch, Griechisch und Spanisch wird die Tilde nicht für ein geschütztes Leerzeichen, sondern für andere Zwecke verwendet. • In der estnischen Typographie muss der Tilde-Akzent etwas niedriger gesetzt werden, als dies normalerweise durch LaTEX geschieht. • Im griechischen Textsatz mit verschiedenen Akzenten muss die Tilde wie ein normaler Buchstabe behandelt werden, damit die Ligaturen der griechischen Zeichensätze fehlerfrei funktionieren. • Im Baskischen, Galizischen und Spanischen kommt die Tilde in den Kurzzeichen ~n (ñ), ~N (Ñ) und ~- (besonderer Bindestrich) vor. Die Konstruktion ~- erzeugt (genau wie ~-- und ~---) einen Bindestrich, an dem kein
570
Bsp. 9-3-10
9.3 Sprachspezifische Benutzerbefehle
Zeilenumbruch erfolgen darf. Wenn der Tilde irgendein anderes Zeichen folgt, behält sie ihre eigentliche Funktion als „geschützter Leerschritt“ (der zum Überlaufen der ersten Zeile im nächsten Beispiel führt). Wenn ein solcher Leerschritt vor einem „n“ benötigt wird, kann man dazu eine leere Gruppe einfügen (wie in der zweiten Zeile des Beispiels).
Bsp. 9-3-11
\usepackage[spanish,activeacute]{babel} La e~ne est’a presente en La eñe está presente en \alph y \Alph. \verb|\alph|~y~\verb|\Alph|. Como en Como en castellano no se usan números castellano~{}no se usan n’umeros romanos en romanos en minúscula, \roman se rede- min’uscula, \verb|\roman| se redefine para que los d’e en versalitas. fine para que los dé en versalitas. Doppelpunkt, Semikolon, Ausrufezeichen und Fragezeichen In den Sprachen Bretonisch, Französisch, Russisch und Ukrainisch dienen diese vier Zeichen als Kurzformen, mit deren Hilfe die korrekte Umsetzung typographischer Konventionen erleichtert wird. In der türkischen Typographie wird diese Funktion nur bei Doppelpunkt und Semikolon benötigt. Gemäß den jeweils gültigen Konventionen sollten diese Zeichen mit einem kleinen Abstand zum vorhergehenden Zeichen gesetzt werden.
Bsp. 9-3-12
En français on doit mettre un « petit espace » devant la ponctuation double : comme cela ! Wie hier zu sehen: Das gilt nicht für die deutsche Sprache!
\usepackage[ngerman,french]{babel} En fran\c{c}ais on doit mettre un \og petit espace\fg\ devant la ponctuation double: comme cela! \selectlanguage{ngerman}Wie hier zu sehen: Das gilt nicht für die deutsche Sprache!
Der Abstand wird entsprechend der Voreinstellungen automatisch gesetzt. Diese Einstellungen lassen sich jedoch in einer Konfigurationsdatei ändern. Die Verwendung des Doppelpunktes als Kurzzeichen kann zu Konflikten mit anderen Paketen oder im Dokument eingebundenen PostScriptDateien führen. In diesen Fällen muss man das Kurzzeichen gegebenenfalls (zeitweise) mithilfe des Befehls \shorthandoff deaktivieren, wie es in Beispiel 9-2-6 auf Seite 565 erklärt wurde. Der Gravis-Akzent Die Lösungen für die katalanische und die ungarische Sprache ermöglichen, den Gravis-Akzent (‘) als Kurzzeichen zu verwenden. • Im Katalanischen wird das Gravis-Zeichen nur unterstützt, wenn man babel mit der Option activegrave lädt. Das Kurzzeichen erleichtert die Eingabe von Akzentbuchstaben, welche die Silbentrennung nicht unterdrücken. Es lässt sich mit den Buchstaben a, e, o und A, E, O kombinieren.
Bsp. 9-3-13
„Pàgina, Apèndix, Pròleg“ sind katalanische Entsprechungen für „Seite, Anhang und Vorwort“.
\usepackage[catalan,activegrave,ngerman]{babel} "‘\foreignlanguage{catalan}{P‘agina, Ap‘endix, Pr‘oleg}"’ sind katalanische Entsprechungen für "‘Seite, Anhang und Vorwort"’.
571
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
• Im Ungarischen lässt sich dieses Kurzzeichen mit den groß- und kleingeschriebenen Versionen der Buchstaben c, d, g, l, n, s, t und z kombinieren. Es markiert bestimmte Stellen, an denen getrennt werden darf, um dort ein besonderes Verfahren für die korrekte Silbentrennung einzuleiten.
loccsan
locscsan
eddzünk
edzdzünk
poggyász
pogygyász
Kodállya
Kodálylya
mennyei
menynyei
vissza
viszsza
pottyan
potytyan
rizzsel
rizszsel
\usepackage[hungarian]{babel} \newcommand\present[1]{% \fbox{\parbox[t]{20mm}{#1}} \fbox{\parbox[t]{8,5mm}{#1}}\quad} \present{lo‘ccsan} \present{e‘ddz\"unk} \par \present{po‘ggy\’asz} \present{Kod\’a‘llya}\par \present{me‘nnyei} \present{vi‘ssza} \par \present{po‘ttyan} \present{ri‘zzsel}
Bsp. 9-3-14
Der Akut-Akzent Die Lösungen für die Sprachen Galizisch, Katalanisch und Spanisch ermöglichen, den Akut-Akzent (’) als Kurzzeichen zu verwenden. • Zum Formatieren katalanischer Texte lässt sich das Kurzzeichen mit den Vokalen (a, e, i, o, u), sowohl in Groß- als auch in Kleinschreibung, kombinieren. Es fügt den Akzent hinzu, ohne die Silbentrennung zu unterdrücken. • In galizischen Texten funktioniert das Zeichen analog zum Katalanischen, nur dass außerdem die Kombination ’n das Zeichen ñ erzeugt.
„Páxina, Capítulo, Apéndice“ sind galizische Entsprechungen für „Seite, Kapitel und Anhang“.
\usepackage[galician,activeacute,ngerman]{babel} "‘\foreignlanguage{galician}{P’axina, Cap’itulo, Ap’endice}"’ sind galizische Entsprechungen für "‘Seite, Kapitel und Anhang"’.
• Bei der Unterstützung von Texten in spanischer Sprache bietet das Kurzzeichen die gleichen Funktionen wie im Katalanischen und Galizischen. Die beschriebenen Funktionen werden durch die Option activeacute aktiviert. Diese Wahlmöglichkeit wird der Tatsache gerecht, dass der Akut-Akzent in LaTEX noch andere Funktionen hat, die nicht mehr zur Verfügung stehen, sobald das Zeichen als Kurzzeichen dient. Der Zirkumflex Die Lösungen für die Sprachen Esperanto und Latein ermöglichen, den Zirkumflex-Akzent (^) als Kurzzeichen zu verwenden. • Zum Setzen von Texten in Esperanto sind zwei Akzente erforderlich: der Zirkumflex- und der Brevis-Akzent. Der Zirkumflex erscheint über den Buchstaben c, g, h, j und s, der Brevis über dem Buchstaben u. Beide
572
Bsp. 9-3-15
9.3 Sprachspezifische Benutzerbefehle
lassen sich mit Groß- und Kleinbuchstaben kombinieren. Der Zirkumflex ist als Kurzzeichen definiert, das die Silbentrennung bewahrt und den Zirkumflex-Akzent über dem Buchstaben „h“ etwas tiefer setzt (h ˆ). In Kombination mit dem Buchstaben u setzt das Kurzzeichen einen Brevis˘); zusammen mit dem vertikalen Strich fügt es einen Akzent (^u wird zu u expliziten Trennstrich ein, der die Silbentrennung im übrigen Wort nicht unterdrückt.
Bsp. 9-3-16
ˆ „Paˆgo, Capitro, Citaˆoj“ sind Esperanto-Entsprechungen für „Seite, Kapitel und Quellen/Zitate“.
\usepackage[esperanto,ngerman]{babel} "‘\foreignlanguage{esperanto}{Pa^go, ^Capitro, Cita^joj}"’ sind Esperanto"=Entsprechungen für "‘Seite, Kapitel und Quellen/Zitate"’.
• Wird ein lateinischer Text gesetzt und das Attribut withprosodicmarks ist ausgewählt, dann erzeugt der Zirkumflex als Kurzzeichen einen BrevisAkzent über kleingeschriebenen Vokalen (außer über den Ligaturen æ und œ). Die Silbentrennung bleibt davon unbeeinträchtigt. Bsp. 9-3-17
a˘ e˘ ˘ı o˘ u˘
\usepackage[latin]{babel} \languageattribute{latin}{withprosodicmarks} \ProsodicMarksOn ^a ^e ^i ^o ^u
Das Gleichheitszeichen Die Lösungen für die Sprachen Latein (mit ausgewähltem withprosodicmarksAttribut) und Türkisch erlauben es, das Gleichheitszeichen (=) als Kurzzeichen zu verwenden. • Wird ein lateinischer Text gesetzt und das Attribut withprosodicmarks ist ausgewählt, dann erzeugt das Gleichheitszeichen als Kurzzeichen einen Macron-Akzent über kleingeschriebenen Vokalen (außer über den Ligaturen æ und œ). Die Silbentrennung wird nicht beeinträchtigt. Bsp. 9-3-18
a¯ e¯ ¯ı o¯ u¯
\usepackage[latin]{babel} \languageattribute{latin}{withprosodicmarks} \ProsodicMarksOn =a =e =i =o =u
• Entsprechend der Regeln zum Formatieren türkischer Texte muss das Gleichheitszeichen mit einem kleinen Abstand zum vorhergehenden Zeichen gesetzt werden. Das wird automatisch erreicht, indem man es als Kurzzeichen definiert, das ein vorausgehendes Leerzeichen durch einen kleinen Abstand ersetzt. Bsp. 9-3-19
a =b a=b
\usepackage[english,turkish]{babel} \selectlanguage{english} a =b \par \selectlanguage{turkish} a =b
Die Verwendung des Gleichheitszeichen als Kurzformzeichen ist problematisch, da viele Pakete dann nicht mehr einwandfrei funktionieren, einschließlich der Einbindung von PostScript-Graphiken. In diesen Fällen muss das Kurzzeichen mit dem Befehl \shorthandoff abgeschaltet werden.
573
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
Die Größer- und Kleinerzeichen Die Lösung für die spanische Sprache erlaubt, die Größer- und Kleinerzeichen (< und >) als Kurzzeichen für eine besondere Zitatumgebung zu verwenden. Diese Umgebung erzeugt unterschiedliche Anführungszeichen, wenn sie in sich selbst eingebettet wird. Sie unterstützt maximal drei Ebenen verschachtelter Zitate. Außerdem erzeugt sie automatisch zusätzliche „fortsetzende“ Anführungszeichen, wenn innerhalb eines Zitates ein neuer Absatz beginnt.
La regla es: «dentro de las comillas latinas se usan las “inglesas y dentro de éstas las ‘sencillas’”. »Las comillas de seguir son como las de cerrar.»
\usepackage[spanish]{babel} La regla es:
Bsp. 9-3-20
Man beachte, dass in Kurzzeichen umgewandelte Zeichen nicht mehr vom Ligaturmechanismus der Zeichensätze verarbeitet werden. In Zeichensätzen der T1-Kodierung sind beispielsweise zwei aufeinander folgende „Kleinerzeichen“ als Ligatur definiert, die Guillemets erzeugt. Die inneren Zitate im vorigen Beispiel zeigen deutlich, dass keine solche Ligatur erscheint. Der Punkt Die Lösung für die spanische Sprache erlaubt außerdem, den Punkt (.) im Formelmodus als Kurzzeichen zu verwenden. Er steuert, ob Dezimalzahlen mit einem Komma (\decimalcomma) oder einem Punkt (\decimalpoint) als Dezimalzeichen geschrieben werden.
1000,10 1000.10
\usepackage[spanish]{babel} \decimalcomma $1000.10$ \par \decimalpoint $1000.10$
Bsp. 9-3-21
9.3.3 Sprachspezifische Befehle Neben den bereits besprochenen Übersetzungen und Kurzformen verfügen einige Sprachdefinitionsdateien noch über zusätzliche Befehle. Manche davon dienen der Arbeitserleichterung beim Erstellen von regelkonform gesetzten Texten. Andere bieten zusätzliche Funktionen, die von Standard-LaTEX normalerweise nicht zur Verfügung gestellt werden. Einige dieser Befehle werden in diesem Abschnitt beschrieben. Datumsformate In einigen Sprachen gibt es mehrere Konventionen Datumsangaben zu formatieren. In diesen Fällen helfen zusätzliche Befehle dabei, ein Datum unterschiedlich auszugeben. In Bulgarien etwa ist es üblich, Monate in Ziffern aus römischen Großbuchstaben anzugeben; dazu steht der Befehle \todayRoman zur Verfügung.
29 февруари 2004 г. 29. II. 2004 г.
574
\usepackage[bulgarian]{babel} \today \par \todayRoman
Bsp. 9-3-22
9.3 Sprachspezifische Benutzerbefehle
Für Esperanto stellen die Befehle \hodiau und \hodiaun zwei leicht voneinander abweichende Möglichkeiten der Datumsformatierung bereit.
Bsp. 9-3-23
29–a de februaro, 2004 la 29–a de februaro, 2004 la 29–an de februaro, 2004
\usepackage[esperanto]{babel} \today \par \hodiau \par \hodiaun
In griechischen Dokumenten lässt sich das Datum auch in griechischen anstelle der arabischen Zahlen darstellen. Dies geschieht mithilfe des Befehls \Grtoday . Bsp. 9-3-24
29 Φεβρουαρίου 2004 ΚΘ0 Φεβρουαρίου 1Β∆0
\usepackage[greek]{babel} \today \par \Grtoday
Die Lösung zum Setzen hebräischer Texte verfügt über den Befehl
\hebdate, der ein beliebiges gregorianisches Datum im Format „Tag, Monat, Jahr“ in ein gregorianisches Datum in hebräischer Sprache umwandelt. Er ersetzt den herkömmlichen LaTEX-Befehl \today . Zum Erzeugen „gewöhnlicher“ hebräischer Datumsangaben benötigt man das Paket hebcal mit dem Befehl \Hebrewtoday . Außerhalb der hebräischen Umgebung erzeugt er ein hebräisches Datum in englischer Sprache.
Bsp. 9-3-25
29th February 2004: Adar 7, 5764
\usepackage[english,hebrew]{babel} \usepackage{hebcal} \hebday \par \Hebrewtoday \par \selectlanguage{english} \today: \Hebrewtoday \selectlanguage{hebrew} \hebdate{8}{11}{1997}
Die Lösung für die ungarische Sprache erzeugt mithilfe des Befehls
\ontoday ein Datumsformat für Redewendungen wie „am 10. Februar“. Für die ober- und niedersorbische Sprache gibt es zwei unterschiedliche Sätze von Monatsnamen. Die Lösungen für diese Sprachen sind auf ein „modernes“ Datumsformat voreingestellt, können jedoch auch Datumsangaben „im alten Stil“ erzeugen. Der „alte Stil“ wird für das Niedersorbische mit dem Befehl \olddatelsorbian aufgerufen; \newdatelsorbian wechselt (zurück) zur modernen Form. Wie im folgenden Beispiel zu sehen ist, existieren für das Obersorbische entsprechende Befehle.
Bsp. 9-3-26
29. februara 2004 29. małego rožka 2004 29. februara 2004 29. małeho róžka 2004
\usepackage[usorbian,lsorbian]{babel} \newdatelsorbian \today \par \olddatelsorbian \today \par \newdateusorbian \today \par \olddateusorbian \today
In schwedischen Dokumenten werden Datumsangaben üblicherweise nur als Zahlen wiedergegeben. Sie können in zwei Formaten erscheinen: yyyymm-dd und dd/mm yyyy. Der Befehl \datesymd ändert die Definition des Befehls \today so, dass er ein Datum in der ersten numerischen Schreibweise
575
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
ausgibt, der Befehl \datesdmy definiert \today so um, dass er die zweite Schreibweise erzeugt.
Voreinstellung: 29 februari 2004 \datesymd ergibt: 2004-02-29 \datesdmy ergibt: 29/2 2004
\usepackage[swedish]{babel} Voreinstellung: \today\\ \verb|\datesymd| ergibt: \datesymd \today \\ \verb|\datesdmy| ergibt: \datesdmy \today
Bsp. 9-3-27
Nummerierung Für manche Sprachen gibt es zusätzliche Befehle für eine Nummerierung mit Buchstaben. LaTEX stellt zu diesem Zweck die Befehle \alph und \Alph zur Verfügung. Für Esperanto existieren die Befehle \esper und \Esper . Die Lösung für die griechische Sprache definiert \alph und \Alph so um, dass sie griechische Buchstaben erzeugen, für die bulgarische Sprache sind es entsprechend kyrillische Buchstaben. Die Lösungen für die russische und die ukrainische Sprache enthalten die Befehle \asbuk und \Asbuk als Alternativen zu den LaTEX-Befehlen. In hebräischen Texten erzeugt der Befehl \alph Buchstabenfolgen nach dem Schema der „Gimatria“. Da es keine Großbuchstaben gibt, setzt \Alph die gleichen Buchstabenfolgen, jedoch mit einem vorangestellten Apostroph. Zusätzlich ergibt der Befehl \Alphfinal hebräische Buchstaben als Endbuchstaben mit Apostroph. Diese werden für hebräische Jahresbezeichnungen benötigt. In Tabelle 9.4 auf der gegenüberliegenden Seite werden die verschiedenen Nummerierungen miteinander verglichen. In französischen Texten werden Zahlen nach anderen Regeln gesetzt als in englischen Texten. Anstelle des Kommas als Tausendertrennzeichen wird ein kleines Leerzeichen benutzt. Diese Art der Darstellung erreicht man mithilfe des Befehls \nombre. Er lässt sich auch außerhalb der französischen Sprachumgebung nutzen, wo er Nummern dann nach den englischen Regeln formatiert. Der Befehl \nombre verfügt über ein optionales Argument, mit dem sich ein anderes Dezimalzeichen (als das in \decimalsep voreingestellte) festlegen lässt. Diese Funktion kann sich in Kombination mit dem dcolumnPaket, in dem man das optionale Argument für eine korrekte Ausrichtung benötigt (siehe Abschnitt 5.7.2), als hilfreich erweisen.
12,34567 12,345 67 12,345 67 9 876 543,21
12.345,67 9,876,543.21
576
\usepackage[english,french]{babel} \usepackage{dcolumn} % an explizitem ‘,’ ausrichten % aber \decimalsep ausgeben : \newcolumntype{d}{D{,}{\decimalsep}{-1}} \begin{tabular}{|d|} \hline 12,34567 \\ % korrekte Pos., falsch formatiert \nombre{12,34567} \\ % falsche Pos., korrekt formatiert \nombre[,]{12,34567} \\ \nombre[,]{9876543,21} \\ \hline \end{tabular} \par\vspace{1cm} \selectlanguage{english} % Sprachwechsel \begin{tabular}{|d|} \hline \nombre[,]{12,34567} \\ \nombre[,]{9876543,21} \\ \hline \end{tabular}
Bsp. 9-3-29
9.3 Sprachspezifische Benutzerbefehle
Voreinstellung Esperanto Griechisch Russisch Bulgarisch Hebräisch Wert \alph\Alph \esper\Esper \alph\Alph \asbuk\Asbuk \alph\Alph \alph\Alph\Alphfinal
Bsp. 9-3-28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 40 50 100 250 500
a b c d e f g h i j k l m n o p q r s t u v w x y z -
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z -
a b c ˆc d e f g ˆ g h h ˆ i j ˆ k l m n o p s ˆs t u u ˘ v z -
A B C ˆ C D E F G ˆ G H ˆ H I J ˆ J K L M N O P S ˆ S T U ˘ U V Z -
aþ bþ gþ dþ eþ ˚þ zþ hþ jþ iþ iaþ ibþ igþ idþ ieþ i˚þ izþ ihþ ijþ kþ kaþ kbþ kgþ kdþ keþ k˚þ kzþ khþ kjþ lþ mþ nþ rþ svnþ fþ
Aþ Bþ Gþ Dþ Eþ ˚þ Zþ Hþ Jþ Iþ IAþ IBþ IGþ IDþ IEþ I˚þ IZþ IHþ IJþ Kþ KAþ KBþ KGþ KDþ KEþ K˚þ KZþ KHþ KJþ Lþ Mþ Nþ Rþ SVNþ Fþ
а б в г д е ж з и к л м н о п р с т у ф х ц ч ш щ э ю я -
А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я -
а б в г д е ж з и к л м н о п р с т у ф х ц ч ш щ ю я -
А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ю Я -
Tabelle 9.4: Darstellen von Nummern durch Buchstaben
Im Griechischen existiert eine alternative Art Zahlen darzustellen. Sie basiert darauf, dass man Zahlenbereiche durch Buchstaben wiedergibt. Dieses System wurde gegen Ende des 19. und Anfang des 20. Jahrhunderts in amtlichen Veröffentlichungen benutzt. Heutzutage verwenden es die meisten Griechen für kleine Zahlen. Das Wissen, wie man Zahlen über 20 oder 30 schreibt, ist nicht sehr weit verbreitet und wird hauptsächlich von der östlichorthodoxen Kirche und Gelehrten angewandt. Sie benutzen diesen Ansatz um Zahlen bis 999999 nach folgendem System zu notieren: • Es lassen sich nur Zahlen größer null schreiben. 577
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
• Für die Einer von 1 bis einschließlich 9 werden die Buchstaben Alpha, Beta, Gamma, Delta, Epsilon, Stigma, Zeta, Eta und Theta verwendet, gefolgt von der so genannten „numerischen Markierung“, die dem mathematischen Ableitungssymbol (\prime) ähnelt. Da der Buchstabe Stigma nicht in jedem Zeichensatz verfügbar ist, wird er alternativ häufig durch die ersten zwei Buchstaben seines Namens ersetzt. Die babel-Lösung erzeugt den Buchstaben Stigma und nicht das Digramm Sigma Tau. • Für die Zehner 10 bis einschließlich 90 werden die Buchstaben Iota, Kappa, Lambda, My, Ny, Xi, Omikron, Pi und Qoppa verwendet, wiederum gefolgt von der numerischen Markierung. Das Qoppa in griechischen Zahlen hat eine deutliche Zickzackform, in der es sich vom normalen Qoppa unterscheidet, das eher dem lateinischen „q“ ähnelt. • Die Hunderter 100 bis einschließlich 900 werden durch die Buchstaben Rho, Sigma, Tau, Ypsilon, Phi, Chi, Psi, Omega und Sampi dargestellt, wiederum gefolgt von einer numerischen Markierung. • Nach diesen Regeln lässt sich jede Zahl zwischen 1 und 999 als Buchstabengruppe aus Hunderter, Zehner und Einer, gefolgt von einer numerischen Markierung, darstellen. • Bei den Zahlen von 1000 bis einschließlich 999000 werden die Vielfachen der Tausender entsprechend durch die zuvor genannten Buchstaben ausgedrückt, denen in diesem Falle eine numerische Markierung vorangeht. Diese Markierung ist um 180 Grad gedreht und wird unter der Grundlinie positioniert. Wie im nächsten Beispiel zu sehen, werden in Kombinationen aus zwei Buchstabengruppen beide numerischen Markierungen verwendet.
123456 in griechischer Schreibweise: 1ρ1κ1γυν70 987654 in griechischer Schreibweise: 181Π1ΖΧΝ∆0
\usepackage[ngerman,greek]{babel} \newcommand\de[1]{\foreignlanguage{ngerman}{#1}} 123456 \de{in griechischer Schreibweise:} \greeknumeral{123456} \par 987654 \de{in griechischer Schreibweise:} \Greeknumeral{987654}
Im alten Griechenland gab es noch ein weiteres Zahlensystem, das dem römischen insofern ähnelt, dass es für gewisse Zahlen Buchstaben verwendet. Mehrfach vorhandene Buchstaben bedeuten ein Mehrfaches der Grundzahl; der Buchstabe I z.B. bedeutet 1, also steht III für 3. Das athenische Zahlensystem verwendete die folgenden Grundziffern: • I steht für die Zahl eins (1).
• Π steht für die Zahl fünf (5).
• ∆ steht für die Zahl zehn (10).
• H steht für die Zahl einhundert (100).
• X steht für die Zahl eintausend (1000).
• M steht für die Zahl zehntausend (10000).
Darüber hinaus bedeuten die Buchstaben ∆, H, X und M das Fünffache ihres ursprünglichen Wertes, wenn sie unter dem Buchstaben Π stehen: Das Symbol
578
Bsp. 9-3-30
9.3 Sprachspezifische Benutzerbefehle
X steht also für die Zahl 5000, das Symbol ∆ für die Zahl 50. Man beachte, dass dieses Zahlensystem keine negativen Zahlen und kein Symbol für die Zahl Null kennt. Das athenische Zahlensystem sowie einige weitere werden in einem Ar´ beschrieben (Band 2, 7. Auflage, Seite 280, tikel in der Enzyklopädie ∆oµ η Athen, 2. Oktober 1975). Es wird über den Befehl \athnum des Paketes athnum unterstützt, das zum babel-System gehört.
Bsp. 9-3-31
\usepackage[ngerman,greek]{babel} \usepackage{athnum} \newcommand\de[1]{\foreignlanguage{ngerman}{#1}} 6284 in griechischer Schreibwei6284 \de{in griechischer Schreibweise:} \athnum{6284} se: =ΧΗΗ?∆∆∆ΙΙΙΙ In isländischen Dokumenten müssen Zahlen nach den isländischen Regeln gesetzt werden. Zu diesem Zweck steht der Befehl \tala zur Verfügung. Wie der Befehl \nombre verfügt er über ein optionales Argument zum Austausch des Dezimalzeichens, beispielsweise bei Verwendung in Kombination mit dem dcolumn-Paket.
3 141,592 653 3,141.592,653
Bsp. 9-3-32
3,14 123,456 7 9 876,543
\usepackage[english,icelandic]{babel} \usepackage{dcolumn} \newcolumntype{d}{D{,}{\decimalsep}{-1}} \tala{3141,592653} \par \foreignlanguage{english}{\tala{3141,592653}}\par \bigskip \begin{tabular}{|d|} \hline 3,14 \\ \tala[,]{123,4567} \\ \tala[,]{9876,543} \\ \hline \end{tabular}
Verschiedene Extras Im Französischen ist es üblich, Familiennamen in Kapitälchen ohne Trennung zu setzen. Dies geschieht mithilfe des Befehls \bsc (boxed small caps, Kapitäl- . . . für französische chen in einer Box). Abkürzungen des französischen Wortes „numéro“ sollten Texte nach bestimmten Regeln gesetzt werden. Diese wurden in den Befehlen \no und \No umgesetzt. Und schließlich gibt es für bestimmte Aufzählungen in französischen Texten die Befehle \primo , \secundo , \tertio und \quarto . Bsp. 9-3-33
Leslie L AMPORT
No 9 1o 3o
\usepackage[french]{babel} Leslie~\bsc{Lamport} \quad \No9 \ \primo \ \tertio
Im Italienischen ist es üblich, den Artikel und das darauf folgende Substantiv zusammen zu schreiben, wie etwa in „nell’altezza“. Für die Silbentrennung bei solchen Konstruktionen wird das Zeichen ’ so eingestellt, dass es sich wie ein normaler Buchstabe verhält. Im Ungarischen kann der bestimmte Artikel je nach Kontext „a“ oder „az“ lauten. Besonders bei Quer- und Quellenverweisen ist nicht immer von vornherein zu erkennen, welche Form gerade verwendet werden muss. Die Lösung für die ungarische Sprache enthält Befehle, welche die Fälle, in denen dem Artikel ein „z“ angefügt werden muss, erkennen können. Sie verfügen alle über ein Argument, dessen Text analysiert wird, um zu bestimmen, welche Form des bestimmten Artikels vor diesem Text gesetzt werden muss.
. . . für italienische Texte
. . . für ungarische Texte
579
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
LATEX \tan \cot \sinh \cosh \tanh \coth \csc
\arctan
tan cot sinh cosh tanh coth csc arctan
Serbisch \tg tg \ctg ctg \sh sh \ch ch \th th \cth cth \arsh \arch \arctg \arcctg
arsh arch arctg arcctg
Russisch \tg tg \ctg ctg \sh sh \ch ch \th th \cth cth \cosec cosec
\arctg \arcctg
arctg arcctg
Man beachte, dass die geänderte Definition von \th zu Konflikten mit seiner Standardeigenschaft als LICR-Befehl für þ (Thorn) führt, so dass babel diese Änderung auf den Formelmodus in kyrillischen Texten beschränkt.
Tabelle 9.5: Mathematische Operatoren in osteuropäischen Sprachen
\az{text }
\Az{text }
Diese Befehle geben den Artikel und das Argument aus. Ist das Argument ein Stern (wie in \az*), so wird nur der Artikel gesetzt. Die Form \Az ist für den Satzanfang gedacht.
\aref{text }
\Aref{text }
\apageref{text }
\Apageref{text }
Die ersten beiden Befehle sollten anstelle von a(z)~\ref{label } verwendet werden. Wird auf eine Formel verwiesen, so kann das Argument in runden anstatt in geschweiften Klammern stehen. Bei Seitenverweisen sollte man den Befehl \apageref (bzw. \Apageref) verwenden, damit LaTEX automatisch den passenden bestimmten Artikel erzeugen kann.
\acite{text } \Acite{text } Für Quellenverweise sollte der Befehl \acite verwendet werden. Sein Argument kann eine Liste von Quellenverweisen enthalten, von denen dann der erste bestimmt, welche Form des Artikels gesetzt wird. In Osteuropa haben einige mathematische Operatoren in Formeln ein an. . . und speziell für deres Erscheinungsbild als in der „westlichen Welt“. Tabelle 9.5 zeigt die entFormeln sprechenden Befehle für die verschiedenen Sprachen. Die Befehle für die russische Sprache gelten auch für Bulgarisch und Ukrainisch. Das in der babelDistribution enthaltene Paket grmath definiert diese Operatoren so um, dass sie Abkürzungen ihrer griechischen Bezeichnungen erzeugen. Dieses Paket kann nur zusammen mit der babel-Option greek genutzt werden.
9.3.4 Erwägungen zum Layout Einige der Dateien zur Sprachunterstützung im babel-Paket enthalten Befehle, die das Layout eines Dokumentes automatisch verändern können. Einige än-
580
Bsp. 9-3-34
9.3 Sprachspezifische Benutzerbefehle
dern nur die Gestaltung der Abstände nach Interpunktionszeichen, oder sorgen dafür, dass der erste Absatz nach einer Abschnittsüberschrift eingerückt wird. Andere haben viel weiter reichende Auswirkungen. In dem Buch The TE Xbook [87, S. 72–74] wird das Konzept zusätzlicher Leerräume nach Interpunktionszeichen besprochen. In gut formatierten Texten müssen sich die Abstände zwischen Sätzen beim Dehnen und Stauchen (für den Randausgleich) etwas anders verhalten als die Wortzwischenräume. Dieses Verfahren wird jedoch nicht immer als hilfreich angesehen, so dass die entsprechende Funktion in folgenden Sprachen mithilfe des Befehls \frenchspacing abgeschaltet wird: Bretonisch, Bulgarisch, Dänisch, Deutsch, Estnisch, Finnisch, Französisch, Norwegisch, Russisch, Spanisch, Tschechisch, Türkisch und Ukrainisch. Ein weiterer Gestaltungsaspekt der meisten LaTEX-Klassen ist die Unterdrückung des Absatzeinzuges für den ersten Absatz nach einer Abschnittsüberschrift. Auch dieses Verfahren passt nicht immer. Die Lösungen für die französische, die serbokroatische und die spanische Sprache sind so abgewandelt, dass alle Absätze eingezogen werden. Dieses Verhalten lässt sich durch Laden des Paketes indentfirst für alle Dokumente einstellen. Die Lösung für französische Texte (und die für bretonische Texte, welche aus der französischen Lösung abgeleitet wurde) ist noch weiter an die in Frankreich üblichen Formatierungsregeln angepasst. Sie ändert allgemein die Formatierung von Listen durch Reduzierung der in ihnen enthaltenen vertikalen Weißräume. In der itemize-Umgebung entfernt sie alle vertikalen Abstände zwischen den Listenelementen und ändert deren Erscheinungsbild, indem sie „•“ durch „–“ ersetzt.
Etwas Text mit einer Liste. Bsp. 9-3-35
• Punkt 1 • Punkt 2
Un peu de texte précédant la liste. – premier élément ; – deuxième élément. Et quelques mots suivant la liste.
Und noch etwas Text danach.
\FrenchLayout
Abstände nach Interpunktionszeichen
Absatzeinzug nach Überschriften
Listenlayout
\usepackage[french,english]{babel} \begin{minipage}[t]{3cm} Etwas Text mit einer Liste. \begin{itemize} \item Punkt 1 \item Punkt 2 \end{itemize} Und noch etwas Text danach. \end{minipage} \quad \selectlanguage{french} \begin{minipage}[t]{3cm} Un peu de texte précédant la liste. \begin{itemize} \item premier élément; \item deuxième élément. \end{itemize} Et quelques mots suivant la liste. \end{minipage}
\StandardLayout
Für Dokumente, die in mehreren Sprachen erstellt werden, bietet die Lösung für französische Texte die Möglichkeit, alle Listen einheitlich entweder im „französischen Layout“ oder im „LaTEX-Layout“ zu formatieren. Dazu verwendet man den Befehl \FrenchLayout bzw. \StandardLayout in der Dokumentenpräambel. Wenn ein Dokument allerdings nicht mit den Standard-LaTEXDokumentenklassen formatiert wird, oder wenn man Erweiterungspakete wie paralist benutzt, können solche Layoutänderungen zu überraschenden und
581
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
unerwünschten Effekten führen. In diesen Fällen empfiehlt sich die Verwendung des Befehls \StandardLayout .
\AddThinSpaceBeforeFootnotes
In der französischen Setzertradition werden Fußnoten anders gehandhabt als in der angloamerikanischen. Im Fließtext soll vor dem Fußnotenzeichen ein kleiner Leerraum eingefügt werden. Dieses Verhalten ist optional und wird über den Befehl \AddThinSpaceBeforeFootnotes in der Dokumentenpräambel ausgewählt. Auch der Fußnotentext kann nach französischen Regeln gesetzt werden, und zwar mithilfe des Befehls \FrenchFootnotes .
Fußnotenlayout
Un peu de texte a . a avec
une note de bas de page
\FrenchFootnotes
Un peu de texte a . a. avec une note de bas de page
Legendenlayout
Umdefinierte ! interne Befehle für
magyar
Schreibweise von rechts nach links
\usepackage[french,english]{babel} \AddThinSpaceBeforeFootnotes \begin{minipage}{70pt} Un peu de texte\footnote{avec une note de bas de page}. \end{minipage} \quad \FrenchFootnotes \begin{minipage}{70pt} Un peu de texte\footnote{avec une note de bas de page}. \end{minipage}
Als letzte Layoutänderung ersetzt die babel-Lösung für französische Texte den Doppelpunkt in Tabellen- und Abbildungslegenden durch einen Strich in Halbgeviertbreite, wenn eine der Dokumentenklassen von StandardLaTEX benutzt wird. Die Lösung für ungarische Dokumente geht sogar noch einen Schritt weiter: Sie definiert einige interne LaTEX-Befehle so um, dass sie korrekte Legenden für Abbildungen und Tabellen erzeugen. Nach derselben Methode verändert sie auch das Layout von Abschnittsüberschriften. Auch einige der Befehle, auf denen die theoremähnlichen Umgebungen beruhen, werden verändert. Wie bereits erwähnt, können solche Abwandlungen unerwartete und sogar unerwünschte Auswirkungen haben, daher sollte man damit vorsichtig sein. Zur Unterstützung hebräischer Texte sind noch drastischere Änderungen erforderlich, da die hebräische Sprache von rechts nach links geschrieben wird. Daher benötigt man in diesem Falle eine Erweiterung zu TEX (etwa eTEX mit einem LaTEX-Format), um hebräische Dokumente korrekt setzen zu können.
9.3.5 Sprachoptionen und Fontkodierungen Wie bereits einige der früheren Beispiele zeigten, reicht es für manche Sprachen nicht aus, einfach nur z.B. einige Texte zu übersetzen und besondere Ansprüche der Silbentrennung zu unterstützen. Viele Sprachen benötigen Zeichen, die nicht in der LaTEX-T1-Kodierung enthalten sind. Für einige dieser Sprachen fehlen nur wenige Zeichen, die aus dem vorhandenen Zeichenvorrat zusammengesetzt werden können, andere Sprachen werden normalerweise gar nicht in lateinischer Schrift geschrieben. Einige von ihnen werden vom babel-System unterstützt.
582
Bsp. 9-3-36
9.3 Sprachspezifische Benutzerbefehle
Erweiterungen für die Kodierungen OT1 und T1 Für manche Sprachen fehlen nur einzelne Zeichen in der OT1-Kodierung, und manchmal auch in der T1-Kodierung. Wenn sich die fehlenden Zeichen aus dem vorhandenen Zeichenvorrat zusammensetzen lassen, kann man dieses Problem relativ einfach beheben. Das gilt z.B. für Altisländisch. Es benötigt einige Zeichen, die durch eine Kombination vorhandener Glyphen mit dem „Ogonek“-Akzent dargestellt werden können. Sie lassen sich über die im nächsten Beispiel verwendeten Kurzzeichen aufrufen. Man beachte, dass jedes dieser Kurzzeichen aus " und einem 8-Bit-Zeichen besteht, so dass man das inputenc-Paket benötigt.
Bsp. 9-3-37
o˛ O ˛ ó˛ Ó ˛ e˛ E˛ é˛ É˛ aber: "é "É
\usepackage[icelandic]{babel} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} "o "O "ó "Ó "e "E "é "É aber: "\’e "\’E
Altisländisch ist vielleicht keine alltägliche Sprache, Polnisch hingegen schon. Auch für diese Sprache fehlen der OT1-Kodierung einige Zeichen (man beachte, dass sie in T1 jedoch alle enthalten sind). Auch hier können die fehlenden Zeichen zusammengesetzt werden und Kurzformen erleichtern ihre Eingabe. Wie im folgenden Beispiel dargestellt, werden zwei Arten der Eingabe für die Buchstaben „z mit Punkt“ und „z mit Akzent“ unterstützt. Diese Dualität hat geschichtliche Hintergründe.
Bsp. 9-3-38
´ ó Ó s´ S´ a˛ A˛ c´ C´ e˛ E˛ ł n´ N ˙ ´ z˙ Z z´ Z "x "X "r "R z˙ Z˙ z´ Z´
\usepackage[polish]{babel} "a "A "c "C "e "E "l "n "N "o "O \polishrz "r "R "z "Z "x "X \polishzx "r "R "z "Z "x "X
"s "S \par \par \par
Alle diese Kurzformen wurden entwickelt, als 7-Bit-Fontkodierungen noch die Norm waren und die Erstellung einer Glyphe wie „A“ ˛ einiger interner Makros bedurfte (wenn sie überhaupt möglich war). Die heutigen 8-Bit-Kodierungen benötigen diese Kurzformen nicht mehr. Bei T1-kodierten Fonts z.B. kann man stattdessen auf Standard-Eingabemethoden zurückgreifen.
Bsp. 9-3-39
´ ó Ó s´ S´ z˙ a˛ A˛ c´ C´ e˛ E˛ ł n´ N ˙Z z´ Z´
\usepackage[T1]{fontenc} \k a \k A \’c \’C \k e \k E \l{} \’n \’N \’o \’O \’s \’S \.z \.Z \’z \’Z
Umschalten zwischen Fontkodierungen Wenn das Zusammensetzen einiger zusätzlicher Zeichen zum Setzen von Texten in einer bestimmten Sprache nicht mehr ausreicht, muss man auf eine andere Fontkodierung wechseln. Dieser Abschnitt beschreibt die entsprechenden babel-Befehle und -Dateien für die Sprachunterstützung. Man beachte, dass diese Befehle normalerweise in der babel-Benutzerschnittstelle „verborgen“ sind.
\latinencoding
\cyrillicencoding
\hebrewencoding
Das babel-Paket verwendet den Befehl \latinencoding um die verwendete lateinische Kodierung eines Dokumentes (OT1 oder T1) zu speichern. Zum
583
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
Bestimmen der benutzten Kodierung testet babel während der Ausführung von \begin{document}, ob diese T1 ist; ist dies nicht der Fall, geht es (vielleicht fälschlicherweise) von der OT1-Kodierung aus. Auf dem kyrillischen Alphabet basierende Sprachen definieren den Befehl \cyrillicencoding um den Namen der kyrillischen Kodierung zu speichern. Für die hebräische Fontkodierung gibt es entsprechend den Befehl \hebrewencoding . Als dieses Buch geschrieben wurde, gab es keinen Befehl \greekencoding , da babel nur eine einzige Kodierung für die griechische Sprache (LGR) unterstützte.
\textlatin{text } Dieser Befehl setzt sein Argument in einem Font mit lateinischer Kodierung, unabhängig davon, auf welcher Kodierung der umgebende Text basiert.
\textcyrillic{text } Dieser Befehl wird nur bei Verwendung der Optionen bulgarian, russian oder ukrainian definiert. Er setzt sein Argument in einem Font mit der kyrillischen Kodierung, die in dem Befehl \cyrillicencoding gespeichert ist.
\textgreek{text }
\textol{text }
Diese Befehle werden von der Sprachoption greek definiert. Beide setzen ihr Argument in einem Font mit der griechischen Kodierung. Der Befehl \textol verwendet eine Umrissschrift (Outline). Zu diesen \text...-Befehlen gibt es auch die deklarativen Varianten \latintext , \greektext , \outlfamily und \cyrillictext . Umschalten zwischen Schreibrichtungen Um das Setzen hebräischer Texte zu unterstützen, muss auch die Schreibrichtung geändert werden. Zu diesem Zweck wurden eine Reihe von Befehlen mit unterschiedlichen Namen definiert.
\sethebrew
\unsethebrew
Der Befehl \sethebrew schaltet die Schreibrichtung auf „von rechts nach links“ um, wechselt die Fontkodierung zu einer hebräischen Kodierung und verschiebt den „Punkt des Schreibbeginns“ an den rechten Rand. Der Befehl \unsethebrew schaltet die Schreibrichtung auf „von links nach rechts“ um, wechselt die Fontkodierung zurück zu derjenigen, die vor \sethebrew gültig war, und verschiebt den „Punkt des Schreibbeginns“ an den linken Rand.
\R{text }
\L{text }
Die Befehle \R und \L sollten benutzt werden, um kleine Textpassagen in hebräischer Sprache in den Fließtext einzubetten. Ihre Verwendung wird im
584
9.4 Unterstützung nicht lateinischer Alphabete
nächsten Beispiel demonstriert. Man beachte die Position des zweiten Textes in hebräischen Zeichen.
\usepackage[X2,T1]{fontenc} \usepackage[greek,russian,hebrew,ngerman]{babel} Text in Deutsch, \R{in Hebräisch,} \textgreek{in Griechisch,} \textcyrillic{in Kyrillisch,} \sethebrew erneut in Hebräisch,\unsethebrew{} wieder in Deutsch. Bsp. 9-3-40
Text in Deutsch, .іѕћ1, wieder in Deutsch.
ιν ΓριεBηισBη, іҩ Љѫҭі.-
9.4 Unterstützung nicht lateinischer Alphabete Die babel-Distribution unterstützt drei nicht lateinische Alphabete: das kyrillische, das griechische und das hebräische. Sie werden in den folgenden Abschnitten besprochen.
9.4.1 Das kyrillische Alphabet Das kyrillische Alphabet wird in einigen slawischen Sprachen Osteuropas und in Dutzenden weiterer Sprachen auf dem Gebiet der früheren Sowjetunion verwendet. Vladimir Volovich und Werner Lemberg haben in Zusammenarbeit mit dem LaTEX-Team eine grundlegende Unterstützung für die kyrillische Sprache in LaTEX integriert. Dieser Abschnitt befasst sich mit den kyrillischen Zeichensätzen und der Kodierungsschnittstelle sowie ihrer Integration in babel. Geschichtlich gesehen bietet die American Mathematical Society [14] schon seit längerer Zeit Unterstützung für die russische Sprache in TEX an. Das AMS-System bedient sich der wncyr-Fonts und basiert auf einer Transliterationstabelle, die ursprünglich für Namen russischer Journale und Titel russischer Artikel in der Zeitschrift Mathematical Reviews entwickelt wurde. In dieser Zeitschrift legt die AMS Wert darauf, dass die elektronischen Dateien entweder den russischen Text in russischen Zeichen erzeugen, oder seine Transliteration in englischen Zeichen ohne jede Mehrdeutigkeit. Mit der zunehmenden Verbreitung von TEX in Russland wuchs jedoch auch der Bedarf an geeigneter Unterstützung für die russische Sprache (sowie später für andere Sprachen, die das kyrillische Alphabet verwenden). Im Laufe der Jahre wurden sowohl zahlreiche 7- und 8-Bit-Kodierungen als auch viele Fontkodierungen entwickelt. Das kyrillische System ist so gestaltet, dass es jede 8-Bit-Eingabekodierung unterstützt und all diese Kodierungen einigen wenigen kyrillischen Zeichensätzen zuordnen kann, von denen jeder wiederum eine Reihe von Sprachen unterstützt. Fonts und Fontkodierungen Aus Gründen der Kompatibilität stehen für neue Glyphen im Wesentlichen nur die oberen 128 Zeichen eines 8-Bit-Zeichensatzes für TEX zur Verfügung. Im 20. Jahrhundert bedienten sich die Sprachen, die auf dem kyrillischen Alphabet basieren, jedoch weit mehr als 128 verschiedener Glyphen. Daher wurden vier „kyrillische Fontkodierungen“ entwickelt [17]. Drei von ihnen – T2A,
585
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
T2B und T2C – entsprechen den LaTEX-Anforderungen für T*-Kodierungen und lassen sich daher in mehrsprachigen Dokumenten mit anderen Sprachen kombinieren.1 Die Arbeit an den T2*-Kodierungen wurde von Alexander Berdnikov in Zusammenarbeit mit Mikhail Kolodin und Andrew Janishevsky durchgeführt. Vladimir Volovich nahm die Integration in LaTEX vor. Es gibt darüber hinaus noch zwei weitere LaTEX-Fontkodierungen für die kyrillische Sprache: zum einen die 7-Bit-Kodierung OT2 der American Mathematical Society für kurze kyrillische Texte und zum anderen die 8-BitKodierung LCY, die zu den T*-Kodierungen von LaTEX inkompatibel ist und sich daher nicht eignet, um mehrsprachige Dokumente damit zu setzen. Die OT2-Kodierung ist so gestaltet, dass ein und dieselbe Quelldatei Texte in kyrillischen Zeichen oder als entsprechende Transliteration erzeugen kann. Kyrillische Computer Modern Fonts Die in LaTEX voreingestellte Schriftfamilie sind die Computer Modern Fonts von Donald Knuth in ihrer 7- oder 8-Bit-Variante, als OT1-kodierte CM Fonts bzw. T1-kodierte EC Fonts. Olga Lapko und Andrey Khodulev entwickelten die LH Fonts, deren Glyphen zur Computer Modern Fontfamilie passen und alle kyrillischen Fontkodierungen abdecken. Sie verfügen über die gleichen Schriftformen und -grade wie ihre lateinische Entsprechung, die EC Fonts. Diese Schriften sind bei CTAN im Verzeichnis fonts/cyrillic/lh zu finden. Die Installationsanleitung ist in der Datei INSTALL der Distribution enthalten.2 Mit der ruhyphen-Distribution (language/hyphenation/ruhyphen) ist bei CTAN eine Sammlung von Trennmustern für die russische Sprache verfügbar, welche die T2*-Kodierungen sowie andere beliebte Fontkodierungen für russische Texte unterstützt, einschließlich der internen Kodierung von Omega. Die Muster für andere kyrillische Sprachen sollten an die T2*-Kodierungen angepasst werden. Kyrillische Sprache in Dokumenten Die Unterstützung für die kyrillische Sprache in LaTEX basiert auf den Standardpaketen fontenc und inputenc sowie auf dem babel-Paket. Man kann beispielsweise folgende Anweisungen in die Dokumentenpräambel aufnehmen:
\usepackage[T2A]{fontenc} \usepackage[russian]{babel}
\usepackage[koi8-r]{inputenc}
Die Eingabekodierung koi8-r (KOI8 optimiert für die russische Sprache) lässt sich durch eine der nachfolgenden kyrillischen Eingabekodierungen ersetzen. 1 Bei der vierten kyrillischen Kodierung, X2, sind alle 256 Zeichenpositionen mit kyrillische Glyphen besetzt, so dass sie sich nur für besondere, rein kyrillische Anwendungen eignet. Sie wird hier nicht näher besprochen. 2 Es können auch andere Schriften, einschließlich Type1-Fonts, verwendet werden, sofern ihre TEX-Fontkodierung zu den T2*-Kodierungen kompatibel ist. Besonders die CM-SuperSchriften decken die gesamte Bandbreite der kyrillischen Kodierungen ab. Nähere Erläuterungen hierzu befinden sich in Abschnitt 7.5.1 auf Seite 365.
586
9.4 Unterstützung nicht lateinischer Alphabete
cp855 MS-DOS-Standardcodepage für Kyrillisch. cp866 MS-DOS-Standardcodepage für die russische Sprache. Es gibt mehrere Varianten, die sich in den Zeichenpositionen 242–254 unterscheiden: cp866av (Alternative für Kyrillisch), cp866mav (Modifizierte Alternative Variante), cp866nav (Neue Alternative Variante) und cp866tat (für die tatarische Sprache).
cp1251 MS Windows-Standardcodepage für Kyrillisch. koi8-r Kyrillische Standardcodepage, die in vielen UNIX-ähnlichen Systemen zur Unterstützung der russischen Sprache eingesetzt wird. Varianten für die ukrainische Sprache sind koi8-u und koi8-ru. Eine ECMAVariante (ISO-IR 111 ECMA) ist isoir111.
iso88595 ISO-Standard ISO 8859-5 (auch bekannt als ISO-IR 144). maccyr Apple Macintosh-Codepage für Kyrillisch (auch bekannt als Microsoft cp10007) und macukr, die Apple Macintosh-Codepage für die ukrainische Sprache.
ctt, dbk, mnk, mos, ncc Mongolische Codepage-Varianten. Nicht alle diese Codepage-Varianten gehören zur Standarddistribution von inputenc, einige von ihnen sind nur separat erhältlich. Wenn in einem Dokument mehr als eine Eingabekodierung verwendet wird, kann man mit dem Befehl \inputencoding zwischen ihnen umschalten. Die automatische Groß- oder Kleinschreibung lässt sich über zwei LaTEX-Standardbefehle erzeugen, und zwar \MakeUppercase bzw. \MakeLowercase . Die TEX-Low-Level-Befehle \uppercase und \lowercase sollten nie in LaTEX verwendet werden und funktionieren nicht in kyrillischen Texten. Im letzten Präambelbeispiel wurde die zu verwendende Fontkodierung (T2A) explizit deklariert. In mehrsprachigen Dokumenten sollten alle benötigten Kodierungen mithilfe des Befehls \usepackage[...]{fontenc} aufgelistet werden. Man kann zwar mit dem Befehl \fontencoding von einer Fontkodierung auf die andere umschalten, es empfiehlt sich jedoch solche Änderungen mithilfe einer höher angesiedelten Schnittstelle wie z.B. dem Befehl \selectlanguage vorzunehmen. Sofern man babel verwendet, kann man etwa Folgendes deklarieren:
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
Das babel-System wählt dann automatisch die voreingestellte Fontkodierung für die russische Sprache (T2A), soweit diese verfügbar ist. Tabelle 9.6 auf der nächsten Seite zeigt den Aufbau der T2A-Kodierung. Fontkodierungen für kyrillische Sprachen Die kyrillischen Fontkodierungen unterstützen die nachfolgend aufgelisteten Sprachen. Man beachte, dass sich einige Sprachen, wie z.B. Bulgarisch und Russisch, mit mehr als einer Kodierung richtig setzen lassen.
587
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
´0
´1
´2
´3
´4
´5
´6
´7
´ ¯ ” ı ! ) 1 9 A I Q Y a i q y
ˆ ˙ " * 2 : B J R Z b j r z
˜ ¸ ff # + 3 ; C K S [ c k s {
¨ ˛ fi $ , 4 D L T \ d l t |
˝ Ӏ – fl % 5 = E M U ] e m u }
˚ 〈 — ffi & . 6
´17x
` ˘ “ : ␣ ( 0 8 @ H P X ‘ h p x
F N V ^ f n v ~
ˇ 〉 ffl ’ / 7 ? G O W _ g o w -
´20x
Ґ
Ғ
Ђ
Ћ
Һ
Җ
Ҙ
Љ
´21x
Ї
Қ
Ҡ
Ҝ
Ӕ
Ң
Ҥ
Ѕ
´22x
Ө
Ҫ
Ў
Ү
Ұ
Ҳ
Џ
Ҹ
´23x
Ҷ ґ ї ө ҷ А
Є ғ қ ҫ є Б
Ә ђ ҡ ў ә В
Њ ћ ҝ ү њ Г
Ё һ ӕ ұ ё Д
№ җ ң ҳ „ Е
¤ ҙ ҥ џ « Ж
§ љ ѕ ҹ » З
И Р Ш а и р ш
Й С Щ б й с щ
К Т Ъ в к т ъ
Л У Ы г л у ы
М Ф Ь д м ф ь
Н Х Э е н х э
О Ц Ю ж о ц ю
П Ч Я з п ч я
˝8
˝9
˝A
˝B
˝C
˝D
˝E
˝F
´00x ´01x ´02x ´03x ´04x ´05x ´06x ´07x ´10x ´11x ´12x ´13x ´14x ´15x ´16x
´24x ´25x ´26x ´27x ´30x ´31x ´32x ´33x ´34x ´35x ´36x ´37x
<
>
˝0x ˝1x ˝2x ˝3x ˝4x ˝5x ˝6x ˝7x ˝8x ˝9x ˝Ax ˝Bx ˝Cx ˝Dx ˝Ex ˝Fx
Blau dargestellte Zeichen müssen in jeder Textkodierung (an ihren angegebenen Positionen) vorhanden sein, da sie transparent durch TE X hindurchgereicht werden.
Tabelle 9.6: Glyphentabelle eines T2A-kodierten Fonts (larm1000)
588
9.4 Unterstützung nicht lateinischer Alphabete
T2A: Abasinisch, Awarisch, Agulisch, Adygeisch, Aserbaidschanisch, Altaisch, Balkarisch, Baschkirisch, Bulgarisch, Burjatisch, Weißrussisch, Gagausisch, Darginisch, Dunganisch, Inguschisch, Kabardino-Tscherkessisch, Kasachisch, Kalmückisch, Karakalpakisch, Karatschaisch, Karelisch, Kirgisisch, Komi-Syrjänisch, Komi-Permjakisch, Kumükisch, Lakkisch, Lesgisch, Mazedonisch, Berg-Mari, Wiesen-Mari, Moldauisch, Mongolisch, Mokscha-Mordwinisch, Ersa-Mordwinisch, Nogaisch, Orotschisch, Ossetisch, Russisch, Rutulisch, Serbisch, Tabassaranisch, Tadschikisch, Tatarisch, Tatisch, Teleutisch, Tofalarisch, Tuwinisch, Turkmenisch, Udmurtisch, Usbekisch, Ukrainisch, Mittel-Ob-Chantisch, Surgut-Chantisch, Romani (Gipsi), Tschetschenisch, Tschuwaschisch, Krimtatarisch
T2B: Abasinisch, Awarisch, Agulisch, Adygeisch, Aleutisch, Altaisch, Balkarisch, Weißrussisch, Bulgarisch, Burjatisch, Gagausisch, Darginisch, Dolganisch, Dunganisch, Inguschisch, Itelmenisch, Kabardino-Tscherkessisch, Kalmückisch, Karakalpakisch, Karatschaisch, Karelisch, Ketisch, Kirgisisch, Komi-Syrjänisch, Komi-Permjakisch, Korjakisch, Kumükisch, Kurdisch, Lakkisch, Lesgisch, Mansisch, Wiesen-Mari, Moldauisch, Mongolisch, Mokscha-Mordwinisch, Ersa-Mordwinisch, Nanaisch, Nganasanisch, Negidalisch, Nenzisch, Niwchisch, Nogaisch, Orotschisch, Russisch, Rutulisch, Selkupisch, Tabassaranisch, Tadschikisch, Tatarisch, Tatisch, Teleutisch, Tofalarisch, Tuwinisch, Turkmenisch, Udeheisch, Uigurisch, Ultschaisch, Chakassisch, Wach-Chantisch, Kasym-Chantisch, Mittel-Ob-Chantisch, Surgut-Chantisch, Schuryschkary-Chantisch, Romani (Gipsi), Tschetschenisch, Tschuktschisch, Schorisch, Ewenkisch, Ewenisch, Enezisch, Eskimo, Jukagirisch, Krimtatarisch, Jakutisch
T2C: Abchasisch, Bulgarisch, Gagausisch, Karelisch, Komi-Syrjänisch, Komi-Permjakisch, Kumükisch, Mansisch, Moldauisch, Mokscha-Mordwinisch, Ersa-Mordwinisch, Nanaisch, Orokisch (Uilta), Negidalisch, Nogaisch, Orotschisch, Russisch, Samisch, Altbulgarisch, Altrussisch, Tatisch, Teleutisch, Mittel-Ob-Chantisch, Surgut-Chantisch, Ewenkisch, Krimtatarisch Die grundlegende LaTEX-Distribution enthält bereits alle Kodierungs- und Fontdefinitionsdateien für kyrillische Texte. Das babel-Paket unterstützt die Sprachen Bulgarisch, Russisch und Ukrainisch. In Kombination mit den Fontdateien, die extra installiert werden müssen, kann LaTEX mithilfe dieses Paketes alle Sprachen unterstützen, die auf dem kyrillischen Alphabet basieren. MakeIndex und BIBTEX Angesichts der Tatsache, dass die Programme MakeIndex und BIBTEX von sich aus nicht mit 8-Bit-Eingabekodierungen umgehen können, enthält die T2Sammlung einige Hilfsmittel, die eine korrekte Verarbeitung von kyrillischen 8-Bit-Daten durch diese Programme ermöglichen.
589
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
Das Programm rumakeindex unterstützt MakeIndex bei der Erstellung von Stichwortverzeichnissen mit kyrillischen Buchstaben, indem es für eine korrekte Sortierung sorgt. Es benötigt zusätzlich das Programm sed.1 Wenn man einen Index mit kyrillischen Buchstaben erstellt, sollte man anstelle von MakeIndex dieses Hilfsprogramm verwenden. Man beachte, dass das rumakeindex-Script unter UNIX die koi8-r-Kodierung verwendet, während die entsprechende Batch-Datei rumkidxd.bat für MS-DOS die cp866-Kodierung und die Batch-Datei rumkidxw.bat für MS Windows die cp1251-Kodierung benutzt. Wenn man eine andere Kodierung benötigt, müssen die jeweiligen Dateien entsprechend angepasst werden. Als Alternative kann man auch das Programm xindy in Betracht ziehen, ein neueres Programm zum Generieren von Stichwortverzeichnissen, das in Abschnitt 11.3 beschrieben wird. Das Programm rubibtex unterstützt BIBTEX bei der Erstellung von Literaturverweisen mit kyrillischen Buchstaben, die den Verweisschlüsseln entsprechen, sofern eine BIBTEX-Literaturdatenbank verwendet wird. In diesem Falle sollte man außerdem das Programm citehack aus der T2-Sammlung installieren. Die installierte Version des BIBTEX-Programms sollte überdies fähig sein, 8-Bit-Daten zu verarbeiten (wie z.B. das in Abschnitt 13.1.1 beschriebene Programm BIBTEX8). Auch das rubibtex-Script und die entsprechenden Batch-Dateien benötigen das sed-Programm, welches bereits zuvor im Falle von MakeIndex beschrieben wurde. Man beachte, dass das rubibtex-Script unter UNIX die koi8-r-Kodierung verwendet, während die entsprechende Batch-Datei rubibtex.bat für MS-DOS die cp866-Kodierung benutzt. Wenn man eine andere Kodierung benötigt, sollten die jeweiligen Dateien entsprechend angepasst werden.
9.4.2 Das griechische Alphabet Die griechische Sprache wird von babel in zwei Varianten unterstützt: in der Variante monotoniko mit einem Akzent (der Voreinstellung), die in Griechenland heutzutage meistens für Belange der alltäglichen Kommunikation genutzt wird, und der Variante polutoniko mit mehreren Akzenten, die, wie in Abschnitt 9.2.3 beschrieben, als Attribut angegeben werden muss. Die erste griechische Schriftfamilie für TEX wurde Mitte der 1980er Jahre von Silvio Levy [116] gestaltet. Andere Entwickler verbesserten oder erweiterten diese Fonts oder erschufen ihre eigenen griechischen Schriften. Die Lösung für die griechische Sprache in babel basiert auf der Zusammenarbeit von Claudio Beccari mit Apostolos Syropoulos, der die griechische cb-Schriftfamilie [12] entwickelt hat. In ihrer Abhandlung besprechen die Autoren recht ausführlich frühere Versuche, die griechische Sprache in TEX zu unterstützen. Die Quellen der cb-Fonts sind bei CTAN im Verzeichnis languages/greek/cb oder auf der TEX Live-CD im Verzeichnis texmf/fonts/source/public/cbgreek verfügbar. Die zu dieser Schriftfamilie passenden Muster für die Silbentrennung finden sich in der Datei grhyph.tex oder grphyph.tex im gleichen Verzeichnis bei CTAN bzw. unter texmf/tex/generic/hyphen auf der TEX Live-CD. 1 Dieses ist Bestandteil jedes UNIX-Systems und wird von GNU für Microsoft Betriebssysteme angeboten (z.B. unter http://www.simtel.net).
590
9.4 Unterstützung nicht lateinischer Alphabete
Die cb-Fonts verwenden die LGR-Fontkodierung. Als dieses Buch geschrieben wurde, befand sich eine zu den LaTEX-Standards kompatible Fontkodierung in Arbeit. Nach ihrer Fertigstellung wird sie als T7-Kodierung zur Verfügung stehen. Tabelle 9.7 auf der nächsten Seite zeigt den Aufbau der gesamten LGR-Kodierung. Man kann griechische Texte entsprechend der Transliterationstabelle 9.8 auf Seite 593 mit lateinischen Buchstaben eingeben. Die Tabelle zeigt, dass es für das lateinische „v“-Zeichen in der griechischen Transkription keine direkte Entsprechung gibt. Es wird stattdessen verwendet, um anzuzeigen, dass man kein End-Sigma setzen möchte. Die Kombination „sv“ erzeugt beispielsweise auch dann ein normales Sigma, wenn sie am Ende eines Wortes steht. Die babel-Option für die griechische Sprache verwendet in ihrer Voreinstellung die monotoniko-Variante der griechischen Schrift. Mit dem Sprachattribut polutoniko für die Option greek lässt sich die Variante mit mehreren Akzenten aufrufen:
\usepackage[greek]{babel} \languageattribute{greek}{polutoniko} Für beide Modi wurden einige selten verwendete Zeichen so definiert, dass sie sich wie Buchstaben verhalten (\catcode 11). In der monotoniko-Variante handelt es sich um die Zeichen ’ und " . In der polutoniko-Variante verhalten sich auch die Zeichen , ~, ‘ und | wie Buchstaben. Das ist erforderlich, damit die LGR-Kodierung für die zahlreichen Ligaturen mit diesen Zeichen die richtigen Glyphen darstellen kann (vgl. Tabelle 9.9 auf Seite 593). In Tabelle 9.10 sind die verfügbaren Kombinationen von Akzent- und Spirituszeichen aufgeführt.
9.4.3 Das hebräische Alphabet Die erste Lösung für hebräische Texte, die in die babel-Distribution aufgenommen wurde, ist eine Entwicklung von Boris Lavva und Alon Ziv, die auf früheren Arbeiten basiert, mit denen das Setzen hebräischer Texte in LaTEX 2.09 und TEX--XET unterstützt wurde. Diese Unterstützung wurde von den beiden Autoren in Zusammenarbeit mit Rama Porrat weiterentwickelt. Als dieses Buch entstand, rief Tzafrir Cohen gerade ein SourceForge-Projekt namens „ivritex“ (http://ivritex.sf.net) ins Leben, das die Bemühungen auf eine noch breitere Basis stellen soll. Die aktuelle Lösung für hebräische Texte basiert auf Fonts der Hebrew University of Jerusalem. Diese Zeichensätze verfügen über eine besondere 7-Bit-Kodierung, für welche die Kodierung „Local Hebrew“ (LHE) entwickelt wurde. Abbildung 9.1 auf Seite 594 wurde mithilfe des Jerusalem-Fonts gesetzt. In Tabelle 9.11 auf Seite 595 ist die Kodierung der Fonts dargestellt. Die babel-Lösung verwendet den Jerusalem-Font als reguläre Schrift, Old Jaffa als Kursivschrift und den Dead Sea-Font zum Setzen fetter Buchstaben. Als serifenlose Schrift wird der Tel Aviv-Font benutzt, der gleichzeitig als Ersatz für eine Schreibmaschinenschrift dient.
591
9
LATEX IN EINEM MEHRSPRACHIGEN UMFELD
´00x ´01x ´02x ´03x ´04x ´05x ´06x ´07x ´10x ´11x ´12x ´13x ´14x ´15x ´16x ´17x ´20x ´21x ´22x ´23x ´24x ´25x ´26x ´27x ´30x ´31x ´32x ´33x ´34x ´35x ´36x ´37x
´0
´1
´2
´3
´4
´5
´6
´7
— I Q € _ ( 0 8 f Η Π r w η π ξ ά ή ® ¶ ώ Æ Í ί Û ã έ ó û
E J R Z ! ) 1 9 Α Ι Χ Ψ α ι χ ψ ¡ § ¯ · ¿ Ç Î Ô Ü ä ì ô ü
? K S ə ] * 2 : Β Θ Ρ Ζ β θ ρ ζ ¢ ¨ ° ¸ À È Ï Õ Ý å í õ ý
F L T 8 ΅ + 3 · h Κ Σ [ B κ B
= M U \ a , 4
7 O W ^ b . 6
© ± ¹ Á É Ð Ö Þ æ î ö þ
∆ i Τ t δ { τ ͺ £ ª ² º Â Ê Ñ ύ ß ç ό ÷ ÿ
G N V ] % 5 = Ε Μ Υ ] ε µ υ
¤ « ³ » Ã Ë ) Ø à è ð ø
H P X ¯ ΄ / 7 e Γ Ο Ω v γ ο ω ― ¦ µ ½ Å
˝8
˝9
˝A
˝B
˝C
˝D
˝E
<
>
Φ Ν p u φ ν ~ ¥ ¬ ´ ¼ Ä Ì Ò Ù á é ñ ù 0
Ó Ú â ê ò ú 1
˝0x ˝1x ˝2x ˝3x ˝4x ˝5x ˝6x ˝7x ˝8x ˝9x ˝Ax ˝Bx ˝Cx ˝Dx ˝Ex ˝Fx
˝F
Die blau dargestellten Zeichen müssen eigentlich in jeder LATEX-Textkodierung ASCIIZeichen sein (vgl. Tabelle 9.6 auf Seite 588), da sie transparent durch TE X hindurchgereicht werden. Dies trifft bei der LGR-Kodierung für A–Z und a–z nicht zu, so dass sie in mehrsprachigen Dokumenten zu Problemen führen kann.
Tabelle 9.7: Glyphentabelle eines LGR-kodierten Fonts (grmn1000)
592
9.4 Unterstützung nicht lateinischer Alphabete
a b c d e f g h i j k l m n o p q r s t u v w x y z α β B δ ε φ γ η ι θ κ { µ ν ο π χ ρ B τ υ ω ξ ψ ζ Bsp. 9-4-1
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Α Β h ∆ Ε Φ Γ Η Ι Θ Κ iΜΝ Ο Π Χ Ρ Σ Τ Υ Ω r Ψ Ζ Tabelle 9.8: Griechische Transliteration mit lateinischen Buchstaben (LGR)
Bsp. 9-4-2
Akut Trema Behaucht Unbehaucht Gravis Zirkumflex Punkt darunter
Eingabe ’i ’o "U r ‘i ‘o ~u ~w
’a ’e ’h "i "u "I h ‘a ‘e ‘h ~a ~h ~i a| h| w| ‘w| ’w| >‘w| >’w|
’u ’w w ‘u ‘w
‘w >‘W >’w >’W dvi2svg.sh Usage: dvi2svg.sh [options] [DVIFILE] Options: -o [FILENAME] : Specify an output filename prefix. If not set, dvi2svg will take the input filename. -d : set the debug mode to on(1)/off(0 default) Ein Beispiel für die Verwendung des dvi2svg-Programms ist die Übersetzung von zwei Beispielen aus diesem Kapitel nach SVG. Die LaTEX-Datei svgexa.tex wird zunächst kompiliert. Danach wird die erzeugte dvi-Datei mit dvi2svg.sh verarbeitet, um die SVG-Datei svgexa1 zu erzeugen. (Wenn die dvi-Datei mehr als eine Seite enthält, werden mehrere Ausgabeseiten generiert.)
> dvi2svg.sh svgexa.dvi -o svgexa DEBUG from converter.DviToSvg => Converting file: svgexa.dvi DEBUG from converter.DviToSvg => Writing result to: svgexa DEBUG from converter.DviToSvg => Reader has been created DEBUG from converter.DviToSvg => Writer has been created Converting ................FINISHED > ls -l svgexa*.svg -rw-rw-r-1 goossens 23792 Jun 25 19:44 svgexa1.svg Abbildung 10.3 zeigt die generierte SVG-Datei, so wie sie mit dem squiggle-Programm angezeigt wird.2 Bei komplexeren LaTEX-Dateien (insbesondere jenen, in denen EPS- oder PDF-Daten eingebunden sind) kann man zunächst 1 Siehe http://www.activemath.org/˜adrianf/dvi2svg/. Das dvi2svg-Programm enthält auch SVG-Fontkonturen für Zeichen, die in der dvi-Datei referenziert sind. Für alle Standard Computer Modern und LaTEX-Fonts wurden SVG-Fontinstanzen generiert, die mit der dvi2svg-Distribution verteilt werden. 2 Der SVG-Browser squiggle ist Teil der Apache Batik-Distribution (http://xml.apache. org/batik). SVG kann auch mit Adobes Browser-Plug-In svgview betrachtet werden (http: //www.adobe.com/svg).
664
10.4
Seitenbeschreibungssprachen – PostScript, PDF und SVG
mit dvips eine PostScript-Datei generieren und dann das pstoedit-Programm von Wolfgang Glunz verwenden (eine Erläuterung zur Funktionsweise dieses Befehls findet man in [60]).
Abbildung 10.3: SVG aus einer dvi-Datei generiert
665
11
K A P I T E L
Indexerstellung 11.1 11.2 11.3 11.4
Syntax der Indexeinträge . . . . . . . . . . . . . . makeindex. . . . . . . . . . . . . . . . . . . . . . . . xindy – Eine Alternative zu MakeIndex . . . . . Beeinflussung des Index mit LATEX-Funktionen
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. 669 . 675 . 688 . 702
Um Informationen zu einem bestimmten Thema in einem großen Dokument, Buch oder Nachschlagewerk zu erhalten, schlägt man normalerweise das Inhaltsverzeichnis oder, noch häufiger, den Index auf. Aus diesem Grund bildet das Stichwortverzeichnis einen sehr wichtigen Teil eines Dokumentes, nicht zuletzt deshalb, weil die meisten Anwender erst einmal den Index konsultieren, wenn sie Informationen zu einem bestimmten Thema suchen. Man sollte deshalb einen Index planen und ihn zusammen mit dem Haupttext anlegen [38]. Aus Gründen der Einheitlichkeit ist es sinnvoll, mit den nachfolgend beschriebenen Verfahren im Text spezielle Befehle zu verwenden, um ein bestimmtes Schlüsselwort im gesamten Dokument stets in der gleichen Weise im Text und im Index erscheinen zu lassen. Dieses Kapitel gibt zunächst einen Überblick über die grundlegenden Befehle zur Indexerstellung, die Standard-LaTEX bietet. Außerdem erläutert es, welche Werkzeuge zur Verfügung stehen, um ein gut durchdachtes Indexregister zu erzeugen. Das LATEX-Manual selbst geht nicht sehr detailliert auf die Syntax der \index-Einträge ein. Im TUGboat sind jedoch bereits verschiedene Artikel erschienen, die sich mit der Frage der Indexerstellung mit TEX oder LaTEX auseinander setzen. [49, 163, 164]. Die Syntax, die in Abschnitt 11.1 beschrieben ist, wird von MakeIndex [37, 105] und xindy [71, 78, 153] erkannt, den am häufigsten zur Indexerstellung verwendeten Programmen. Abschnitt 11.2 beschreibt, wie der MakeIndex-Prozessor verwendet wird. Die Interpretation der Eingabedatei und das Format der Ausgabedatei werden durch Stilparameter gesteuert. Abschnitt 11.2.4 gibt einen Überblick über diese Parameter und führt mehrere einfache Beispiele an, die zeigen, wie sich die Veränderung der Parameter auf das ausgegebene Ergebnis auswirkt. Abschnitt 11.3 stellt xindy vor, eine Alternative zu MakeIndex. Es empfiehlt sich, dieses Programm immer dann einzusetzen, wenn nicht englischsprachige Dokumente erstellt werden oder andere spezielle Anforderungen
11
INDEXERSTELLUNG
tex ① Im ersten LaTEX-Lauf wird ein Rohindex (.idx-Datei) erstellt. ② Der Rohindex wird zusammen mit optionalen Stilinformationen (.ist-Datei) als Eingabe für den Indexprozessor verwendet, der einen alphabetisch sortierten Index (.ind-Datei) und eine Protokolldatei (.ilg-Datei) generiert.
①
LaTEX
idx MakeIndex xindy
② tex
ind
③ Der Index (.ind-Datei) wird von LaTEX eingelesen und bekommt sein endgültiges Erscheinungsbild.
ist
③
LaTEX
ilg
Abbildung 11.1: Flussdiagramm für die Indexerstellung mit den verschiedenen Hilfsdateien, die LATEX und externe Indexprozessoren verwenden
vorliegen, wie etwa die Erstellung von technischen Stichwortverzeichnissen. Das xindy-Programm bietet vollkommene Flexibilität in Hinblick auf Vereinheitlichung und Sortierung von Indexeinträgen und ermöglicht eine beliebige Formatierung von Verweisen. Der letzte Abschnitt geht auf verschiedene LaTEX-Pakete ein, die den Index erweitern und die Erstellung von mehreren Stichwortverzeichnissen ermöglichen. Zur Illustration wird dazu ein Beispiel angeführt. Der Prozess der Indexerstellung wird schematisch in Abbildung 11.1 dargestellt. Es zeigt die einzelnen Schritte für die Erstellung eines Index mit LaTEX und MakeIndex oder xindy. Abbildung 11.2 auf der gegenüberliegenden Seite zeigt anhand eines Beispiels die verschiedenen Stufen von der Eingabedatei bis hin zum endgültigen Index. Hier erkennt man sehr deutlich, welche Dateien in den Indexerstellungsprozess einbezogen sind. Abbildung 11.2(a) enthält einige Indexbefehle (\index), die in der Quelldatei eines Dokumentes vorkommen, wobei links der Befehle die zugehörigen Seitennummern stehen. In Abbildung 11.2(b) ist die von LaTEX daraus erstellte Rohindexdatei .idx zu sehen. Bei Erstellung mehrerer Stichwortverzeichnisse oder Glossare kann die Dateierweiterung differieren. Nach der Bearbeitung mit dem Indexprozessor wird aus der .idx-Datei eine alphabetisch sortierte Indexdatei .ind erzeugt, die LaTEX-Befehle zur Festlegung des Ausgabeformats enthält (Abbildung 11.2(c)). Das Endergebnis nach der Formatierung mit LaTEX ist in Abbildung 11.2(d) dargestellt. Für die gemeinsame Nutzung von LaTEX und MakeIndex stehen eine Reihe von Markup-Konventionen zur Verfügung, die dem Benutzer die volle Kontrolle über das Ausgabeformat ermöglichen. Das xindy-Programm hat einen MakeIndex-Kompatibilitätsmodus, der dasselbe Format unterstützt. In Abschnitt 11.1, der die Syntax und Semantik des \index-Befehls beschreibt, werden stets die Standardeinstellungen verwendet.
668
11.1
Seite Seite Seite Seite Seite Seite
vi: 5: 6: 7: 11: 17:
Seite 26: Seite 32:
\index{Tier} \index{Tier} \index{Tier} \index{Tier} \index{Tierarten|see{Tier}} \index{Tier@\emph{Tier}} \index{Haustier|textbf} \index{Tier!Haustier!Katze} \index{Tier!Insekt} (a) Die Eingabedatei
\begin{theindex} \item Haustier, \textbf{17} \item Tier, vi, 5-7 \subitem Haustier \subsubitem Katze, 26 \subitem Insekt, 32 \item \emph{Tier}, 17 \item Tierarten, \see{Tier}{11} \indexspace \end{theindex} (c) Die .ind-Datei
Syntax der Indexeinträge
\indexentry{Tier}{vi} \indexentry{Tier}{5} \indexentry{Tier}{6} \indexentry{Tier}{7} \indexentry{Tierarten|see{Tier}}{11} \indexentry{Tier@\emph{Tier}}{17} \indexentry{Haustier|textbf}{17} \indexentry{Tier!Haustier!Katze}{26} \indexentry{Tier!Insekt}{32} (b) Die .idx-Datei
Haustier, 17 Tier, vi, 5–7 Haustier Katze, 26 Insekt, 32 Tier, 17 Tierarten, siehe Tier (d) Der formatierte Index
Abbildung 11.2: Schrittweise Entwicklung der Indexerstellung
11.1 Syntax der Indexeinträge Dieser Abschnitt befasst sich mit der Syntax, die standardmäßig zur Erstellung der Indexeinträge mit LaTEX und MakeIndex oder xindy verwendet wird. Nach und nach werden Register mit immer komplexeren Elementen vorgestellt, wobei für jeden Fall sowohl die Eingabedatei als auch das aus ihr erstellte gesetzte Ergebnis zu sehen sind. Die Abbildungen 11.3 bis 11.4 auf den Seiten 676–677 zeigen die Eingabe und die erzeugte Ausgabe eines kleinen LaTEX-Dokumentes, in denen verschiedene einfache Verwendungsmöglichkeiten des \index-Befehls zu sehen sind. Außerdem wird demonstriert, wie sich die Einbindung des showidx-Paketes auswirkt (siehe Abschnitt 11.4.2). Um einheitliche Indexeinträge zu erzeugen (siehe Abschnitt 11.1.7), wurden die Befehle \Com und \Prog definiert und eingesetzt. Die indexerstellende Umgebung theindex wurde neu definiert, so dass der Index auf eine Seite passt (Abschnitt 11.4.1 erläutert, wie dieses Ergebnis erzielt werden kann). Nachdem die notwendigen \index-Befehle im Dokument eingeführt wor- Rohindex erstellen den sind, soll der Index erzeugt werden, damit er im darauf folgenden Lauf wieder in das LaTEX-Dokument eingefügt werden kann. Wenn die Hauptdatei des Dokumentes z.B. main.tex heißt, sollten folgende Änderungen in dieser Datei vorgenommen werden: • das makeidx-Paket mit einem \usepackage-Befehl einbetten, • einen \makeindex-Befehl in der Dokumentenpräambel einfügen, 669
11
INDEXERSTELLUNG
• einen \printindex-Befehl dort einfügen, wo der Index erscheinen soll – normalerweise am Ende, direkt vor dem Befehl \end{document}. Danach kann das gesamte Dokument erneut mit LaTEX bearbeitet werden, wodurch die Datei main.idx erzeugt wird, die im Folgenden als .idx-Datei bezeichnet wird.
11.1.1 Einfache Indexeinträge Jeder \index-Befehl bewirkt, dass LaTEX einen Eintrag in die .idx-Datei schreibt. Das folgende Beispiel zeigt einige einfache \index-Befehle, zusammen mit den Indexeinträgen, die sie generieren. Die Seitenzahl bezieht sich auf die Seite, die den Text enthält, in dem der \index-Befehl auftaucht. Wie in untenstehendem Beispiel gezeigt, führen mehrere gleiche Befehle auf derselben Seite (wie etwa \index{stylistic} auf Seite 23) nur zu einem Eintrag „23“ im Index. style, 14 style , 16 style, iii, 12 style , 15 style file, 34 styles, 12 Stylist, xi stylist, 34 stylistic, 23
Seite iii: Seite xi: Seite 12: Seite Seite Seite Seite
14: 15: 16: 23:
Seite 34:
\index{style} \index{Stylist} \index{style} \index{styles} \index{ style} \index{style } \index{ style } \index{stylistic} \index{stylistic} \index{style file} \index{stylist}
Leerzeichen ! chen in diesem Beispiel behandelt werden. Innerhalb der \index-Befehle werkönnen schaden den Leerzeichen wortwörtlich in die .idx-Datei übernommen und von Make-
Ein besonderes Augenmerk richtet sich auf die Art und Weise, wie Leerzei-
Index standardmäßig als normale Zeichen betrachtet, die den Buchstaben vorangestellt werden. Man achte im obigen Beispiel auf die style-Einträge auf den Seiten 14 und 16. Die Einträge mit führenden Leerzeichen werden an den Anfang des Index platziert, und zwar auf zwei verschiedene Zeilen, da das nachgestellte Leerzeichen auf Seite 16 die Zeichenkette um ein Zeichen verlängert. Durch diese Schreibweise entstehen vier verschiedene Einträge für denselben Begriff, ein Effekt, der wahrscheinlich nicht beabsichtigt war. Daher ist es wichtig, diese unerwünschten Leerzeichen aus den \index-Befehlen zu beseitigen, wenn MakeIndex verwendet wird. Als Alternative kann man beim Aufruf des Indexprozessors die Option -c angeben. Diese Option unterdrückt die Wirkung von führenden und angehängten Leerzeichen (siehe Abschnitte 11.2.2 und 11.3.1). Ein weiterer, zumindest in Sprachen wie Englisch häufig auftretender Fehler ist die uneinheitliche Schreibweise eines Wortes, etwa wechselweise mit kleinem und großem Anfangsbuchstaben (wie bei Stylist auf Seite xi), die zu zwei verschiedenen Indexeinträgen führt. In Sprachen wie Deutsch, in der „Arm“ (Körperteil) und „arm“ (mittellos) tatsächlich zwei verschiedene Einträge sind, ist dies durchaus beabsichtigt. Im Englischen sollten diese unerwünschten Doppeleinträge normalerweise beseitigt werden.
670
11.1
Syntax der Indexeinträge
Bei Verwendung von xindy werden Leerzeichen automatisch komprimiert. Darüber hinaus unterstützt xindy die internationale Indexierung und behandelt damit Groß- und Kleinschreibung korrekt und automatisch auf länderspezifische Weise. Daher werden mit xindy die oben erwähnten Probleme nicht auftreten.
11.1.2 Erstellen von Untereinträgen Für Indexeinträge sind bis zu drei Ebenen möglich (Haupt-, Unter- und Untereinträge zweiter Ordnung). Um solche Einträge zu erstellen, gibt man im Argument des \index-Befehls sowohl Haupt- als auch Untereinträge durch ein !-Zeichen getrennt an. Dieses Zeichen kann in der MakeIndex-Stildatei umdefiniert werden (siehe Tabelle 11.1 auf Seite 680). Box, 21 Dimension der, 33 Parameter, 5 Dimension Abbildung, 17 Linie Breite, 3 Tiefe, 12 Tabelle, 9
Seite Seite Seite Seite Seite Seite Seite
3: 5: 9: 12: 17: 21: 33:
\index{Dimension!Linie!Breite} \index{Box!Parameter} \index{Dimension!Tabelle} \index{Dimension!Linie!Tiefe} \index{Dimension!Abbildung} \index{Box} \index{Box!Dimension der}
11.1.3 Seitenbereiche und Querverweise Einen Seitenbereich für einen Indexeintrag kann man definieren, indem man den Befehl \index{...|(} an den Anfang des Bereiches und den Befehl \index{...|)} an das Ende des Bereiches platziert. Seitenbereiche sollten innerhalb einer homogenen Seitennummerierung liegen (d.h. römische und arabische Seitenzahlen sollten nicht in denselben Bereich fallen). Wenn beide Enden eines Bereiches auf dieselbe Seite fallen, generieren MakeIndex und xindy übrigens nur eine Seitenzahl. Einzelne Einträge innerhalb eines Bereiches erzeugen keinen zusätzlichen Indexeintrag. Auch für den Index können Querverweise erstellt werden. Hierfür wird die Kapselungsfunktion see verwendet. Da der „see“-Eintrag keine Seitennummern im Index erzeugt, kann der Befehl \index{...|see{...}} an einer beliebigen Stelle der Eingabedatei nach dem \begin{document}-Befehl platziert werden. Aus praktischen Erwägungen bietet es sich an, solche Querverweisbefehle an einer Stelle zusammenzufassen. Der erzeugte Text (voreingestellt see) ist in \seename gespeichert; verwendet man das babel-Paket wird dieser automatisch angepasst. Fonts Computer Modern, 13–25 PostScript, 5 Text, siehe Textfonts Tabelle, ii–xi, 14
Seite ii: Seite xi: Seite 5: Seite Seite Seite Seite Seite
13: 14: 17: 21: 25:
\index{Tabelle|(} \index{Tabelle|)} \index{Fonts!PostScript|(} \index{Fonts!PostScript|)} \index{Fonts!Computer Modern|(} \index{Tabelle} \index{Fonts!Text|see{Textfonts}} \index{Fonts!Computer Modern} \index{Fonts!Computer Modern|)} 671
11
INDEXERSTELLUNG
11.1.4 Steuern der Darstellungsform Es kann vorkommen, dass ein Eintrag nach einem bestimmten Schlüsselwort sortiert werden soll, im Ausdruck aber eine andere visuelle Repräsentation gewählt werden soll, wie z.B. bei griechischen Buchstaben, mathematischen Zeichen oder besonderen typographischen Zeichen. Dies wird durch die Syntax schlüssel@darstellung ermöglicht. Der schlüssel legt dabei die Position im Index fest, während die Zeichenkette darstellung den formatierten Text des Eintrags generiert. Delta, 14 δ, 23 Delta-Flügler, 16 Flora, 19 neunzig, 26 xc, 28 neunundneunzig, 5 tabular-Umgebung, 23
Seite Seite Seite Seite Seite
5: 14: 16: 19: 23:
Seite 26: Seite 28:
\index{neunundneunzig} \index{Delta} \index{Delta-Fluegler@Delta-Flügler} \index{Flora@\textbf{Flora}} \index{Delta@$\delta$} \index{tabular@\texttt{tabular}-Umgebung} \index{neunzig} \index{neunzig@xc}
Verwendet man die Voreinstellungen von MakeIndex, werden Wörter mit Umlauten unter Umständen falsch einsortiert, weshalb im obigen Beispiel ein expliziter schlüssel angegeben wurde. Später werden noch einfachere Eingabemöglichkeiten diskutiert. Bei einigen Stichwortverzeichnissen sollen bestimmte Seitenzahlen in besonderer Weise formatiert werden, so dass z.B. eine kursive Seitenzahl angibt, dass sich dieser Indexeintrag auf die wichtigste Textstelle zu diesem Begriff bezieht. Ein n kann nach einer Seitenzahl beispielsweise angeben, dass der Begriff auf den angegebenen Seiten in einer Fußnote steht. Mit MakeIndex kann eine einzelne Seitenzahl nach Belieben individuell formatiert werden, indem man die Syntax der Kapselungsfunktion ausnutzt, die durch das |-Zeichen gekennzeichnet ist. Alles, was nach dem |-Zeichen angegeben wird, wandelt MakeIndex in einen Befehl um, der als Argument die Seitenzahl bekommt, die zu dem Indexeintrag gehört. Der Befehl \index{schlüssel|xxx} erzeugt z.B. eine Seitenzahl in der Form \xxx{n} , wobei n die betreffende Seitenzahl darstellt. Auf ähnliche Weise erzeugen die Befehle \index{schlüssel|(xxx} und \index{schlüssel|)xxx} einen Seitenbereich der Form \xxx{n–m}. Bereits existierende Befehle (wie im nachfolgenden Beispiel \textit) oder selbstdefinierte Befehle können zur Kapselung von Seitenzahlen verwendet werden. Ein Dokument mit der Befehlsdefinition
\newcommand\nn[1]{#1n} würde beispielsweise den folgenden Ausdruck erzeugen: tabular, ii, 21, 22n Tabulator, 7, 34–37
Seite Seite Seite Seite Seite Seite
ii: 7: 21: 22: 34: 37:
\index{tabular|textbf} \index{Tabulator} \index{tabular|textit} \index{tabular|nn} \index{Tabulator|(textit} \index{Tabulator|)textit}
Die Kapselungsfunktion see stellt einen Spezialfall dieser Funktion dar. Der \see-Befehl wir dabei durch das makeidx-Paket vordefiniert.
672
11.1
Syntax der Indexeinträge
11.1.5 Ausgeben von Sonderzeichen Um eines der Zeichen, die für MakeIndex oder xindy eine besondere Bedeutung haben (!, ", @ oder |)1 im Index zu setzen, muss diesem ein "-Zeichen vorangestellt werden. Genauer gesagt, wird jedes Zeichen maskiert, das einem unmaskierten " folgt, das nicht Teil des \"-Befehls ist. Letzterer ermöglicht die Eingabe von Umlauten. Maskierte !, @, " und | werden wie normale Zeichen behandelt und verlieren ihre besondere Bedeutung. Bevor die Einträge alphabetisch sortiert werden, wird ein ", das maskierten Zeichen vorangestellt ist, gelöscht.
"-Zeichen, 1 @-Zeichen, 2 |, siehe vertikaler Balken Ausruf (!), 4 Ah!, 5 Klammeraffe (@), 2 Mädchen, 3 maskieren ("), 1
Seite 1: Seite 2: Seite 3: Seite 4: Seite 5:
\index{"|@\texttt{"|}|see{vertikaler Balken}} \index{maskieren (\verb+""+)} \index{""-Zeichen@\texttt{""}-Zeichen} \index{Klammeraffe (\texttt{"@})} \index{"@-Zeichen@\texttt{"@}-Zeichen} \index{Maedchen@M\"{a}dchen} \index{Ausruf ("!)} \index{Ausruf ("!)!Ah"!}
11.1.6 Erstellen eines Glossars Zur Erstellung von Glossaren bietet LaTEX einen Befehl namens \glossary. Der \makeglossary-Befehl erzeugt eine Datei mit der Erweiterung .glo, die der .idx-Datei für \index-Befehle ähnelt. In der gleichen Weise, wie LaTEX \index-Befehle in \indexentry-Einträge umwandelt, übersetzt LaTEX die \glossary-Befehle in \glossaryentry-Einträge. MakeIndex kann diese Glossarbefehle ebenfalls handhaben; jedoch müssen die Werte einiger Schlüsselwörter in einer Stildatei geändert werden (siehe hierzu die Stildatei myglossary.ist).
% MakeIndex style file myglossary.ist keyword "\\glossaryentry" preamble "\n \\begin{theglossary}\n" postamble "\n\n \\end{theglossary}\n"
% Schlüsselwort für Glossareinträge % Beginn des Glossars % Ende des Glossars
Zusätzlich muss man eine passende theglossary-Umgebung definieren.
11.1.7 Definieren eigener Indexbefehle Wie in der Einführung erwähnt, ist es sehr wichtig, bei identischen Namen oder Befehlen im gesamten Dokument, einschließlich Index, dieselbe visuelle Darstellung zu verwenden. Um dies sicherzustellen, kann man Anwenderbefehle definieren, die ähnliche Konstrukte stets auf dieselbe Weise in den Text und den Index einfügen. 1 Wie bereits erwähnt, können in MakeIndex die voreingestellten Zeichen, die normalerweise eine besondere Bedeutung haben, auch durch andere Zeichen ersetzt werden. Die Vorgehensweise hierfür ist auf Seite 683 erläutert.
673
11
INDEXERSTELLUNG
Man kann z.B. den Befehl \Index definieren, dessen Argument gleichzeitig in den Text und in den Index eingefügt wird.
\newcommand\Index[1]{#1\index{#1}} Wie unten ausführlicher erläutert wird, ist darauf zu achten, dass das Argument solch eines Befehls kein expandierbares Material (Makros) oder überflüssige Leerzeichen enthält. Im Allgemeinen gibt es bei einfachen Begriffen wie Wörtern keine Probleme, und dieses Verfahren kann verwendet werden. Man kann sogar einen Schritt weitergehen und einem Eintrag ein bestimmtes optisches Erscheinungsbild verleihen – z.B. ihn in einer Schreibmaschinenschrift setzen.
\newcommand\Indextt[1]{\texttt{#1}\index{#1@\texttt{#1}} Schließlich kann man bestimmte Begriffe gruppieren, indem man Befehle definiert, die eine generische Bedeutung haben. Beispielsweise könnten, wie in den folgenden Beispielen, LaTEX-Befehle und -Programmnamen durch spezielle Befehle verarbeitet werden:
\newcommand\bs{\symbol{’134}} % Backslash in Typewriter % OT1/T1 ausgeben \newcommand\Com[1]{\texttt{\bs#1}\index{#1@\texttt{\bs#1}}} \newcommand\Prog[1]{\texttt{#1}\index{#1@\texttt{#1}-Programm}} Der \Com-Befehl hängt sowohl im Text als auch im Index einen Backslash an den Befehlsnamen an und erleichtert damit die Arbeit des Eingebenden. Die Definition des \bs-Befehls ist notwendig, weil \textbackslash, wie in Abschnitt 7.3.5 auf Seite 357 erläutert, bei OT1-Fontkodierung ersetzt würde. Zur selben Zeit werden Befehle im Index namentlich sortiert, wobei das \-Zeichen während der Sortierung ignoriert wird. Auf ähnliche Weise lässt der \ProgBefehl während der alphabetischen Sortierung den \texttt-Befehl außer Acht, weil Einträge wie \index{\texttt{schlüssel }} und \index{schlüssel } zu verschiedenen Einträgen im Index führen würden.
11.1.8 Besondere Erwägungen Wenn ein \index-Befehl direkt im Text verwendet wird, wird sein Argument nicht bereits bei der Erstellung der .idx-Datei, sondern erst bei der Formatierung des Index expandiert. Wenn der \index-Befehl jedoch im Argument eines anderen Befehls steht, müssen Zeichen, die für TEX eine besondere Bedeutung haben, wie etwa das \-Zeichen, vor Expansion geschützt werden. Dieses Problem tritt am ehesten bei der Indexierung von Begriffen in Fußnoten auf oder wenn Befehle verwendet werden, deren Argument gleichzeitig in den Text und in den Index eingefügt wird (siehe Besprechung in Abschnitt 11.1.7). Selbst in diesem Fall können robuste Befehle in den „@“-Teil eines Eintrags eingefügt werden, wie bei \index{Rose@\textit{Rose}}. Zerbrechliche Befehle müssen jedoch mit dem Befehl \protect geschützt werden. Wie bei jedem Argument eines Befehls muss die gleiche Anzahl an öffnenden und schließenden Klammern angegeben werden. Da der \index-Befehl in seinem Argument Sonderzeichen wie % oder \ zulässt, wenn der Befehl im 674
11.2 makeindex
Haupttext verwendet wird, gibt es allerdings eine Anomalie, was die Klammerung betrifft: geschweifte Klammern in den Befehlen \{ und \} zählen mit. Eine Eingabe wie \index{\{} oder ähnlich wäre demnach falsch.
11.2 makeindex – Ein Programm zur Formatierung und Sortierung des Index Im vorangegangenen Abschnitt wurden Beispiele vorgestellt, in denen das MakeIndex-Programm mit Standardeinstellungen verwendet wurde. Dieser Abschnitt geht zunächst näher auf das MakeIndex-Programm ein, bevor Verfahren besprochen werden, die das Verhalten des Programms ändern.
11.2.1 Erstellen eines formatierten Index Um einen formatierten Index zu erstellen, sollte man das MakeIndexProgramm durch Eingabe des folgenden Befehls aufrufen (main ist hierbei der Name der Eingabedatei):
makeindex main.idx Dies erzeugt die Datei main.ind, die im Folgenden .ind-Datei genannt wird. Sofern MakeIndex keine Fehlermeldungen ausgegeben hat, kann LaTEX für das Dokument erneut aufgerufen werden. Danach erscheint im Dokument das fertig erstellte Indexregister. (Wenn der Index nicht erneut generiert werden soll, kann der \makeindex-Befehl jetzt wieder aus der Präambel entfernt werden.) Beim Auftreten von Fehlermeldungen siehe Seite 679. Wenn man beim Durchlesen des Index Fehler findet, sollte man diese beheben, indem man die betreffenden \index-Befehle im Dokument ändert und die .ind-Datei ein zweites Mal erstellt. Dafür muss LaTEX vor und nach dem letzten Schritt aufgerufen werden. Im Folgenden ist ein Beispiel für einen MakeIndex-Lauf dargestellt. Zunächst wird die .idx-Datei main.idx erzeugt, indem LaTEX die Eingabedatei bearbeitet, die in Abbildung 11.3 auf der nächsten Seite zu sehen ist. Wie im Beispiel deutlich zu erkennen ist, werden zwei Dateien erstellt, und zwar die sortierte .ind-Indexdatei main.ind, die als Eingabedatei für LaTEX dient, und die Indexprotokolldatei .ilg namens main.ilg, die (in diesem Fall) mit der Bildschirmausgabe übereinstimmt. Beim Auftreten von Fehlern sind in der Protokolldatei alle Fehlermeldungen sowie die Nummern der Zeilen aufgeführt, in denen die Fehler in der Eingabedatei aufgetreten sind. Abbildung 11.4 auf Seite 677 zeigt das Ergebnis des nachfolgenden LaTEX-Laufs. Die Beispiele verwenden das showidx-Paket, um die Indexeinträge im Rand anzuzeigen (siehe Abschnitt 11.4.2).
> makeindex main This is makeindex, version 2.13 [07-Mar-1997] (using kpathsea). Scanning input file 11-2-1.idx....done (11 entries accepted, 0 rejected). Sorting entries....done (37 comparisons). Generating output file 11-2-1.ind....done (24 lines written, 0 warnings). Output written in 11-2-1.ind. Transcript written in 11-2-1.ilg. 675
11
INDEXERSTELLUNG
\usepackage{makeidx,showidx,multicol} \usepackage[ngerman]{babel} \usepackage[ansinew]{inputenc} \newcommand\bs{\symbol{’134}}% Backslash drucken \newcommand\Com[1]{\texttt{\bs#1}\index{#1@\texttt{\bs#1}}} \newcommand\Prog[1]{\texttt{#1}\index{#1@\texttt{#1}-Programm}} \makeatletter \renewenvironment{theindex} {\begin{multicols}{2}[\section*{\indexname}]% \setlength\parindent{0pt}\let\item\@idxitem} {\end{multicols}} \makeatother \makeindex \section{Erzeugen eines Index} Mithilfe des \textsf{showidx}-Paketes können Anwender die Erstellung der Indexeinträge\index{Index!Einträge!anzeigen} direkt dort überprüfen, wo sie erstellt werden. Die Einträge\index{Index!Einträge!erstellen} werden mit dem \Com{index}-Befehl in das Stichwortverzeichnis übernommen. Genauer gesagt wird das Argument des \Com{index}-Befehls unverändert in die Hilfsdatei \texttt{idx} geschrieben. Dies geschieht jedoch nur, wenn der \Com{makeindex}-Befehl in der Dokumentenpräambel angegeben wurde. \section{Aufbereiten des Index} Um einen Index\index{Index!aufbereiten} auszugeben, muss zuvor die \texttt{idx}-Datei mithilfe eines externen Programms wie \Prog{makeindex} in eine \texttt{ind}-Datei umgewandelt werden. \begin{verbatim} makeindex filename \end{verbatim} \section{Ausgabe des Index}\index{Enddurchlauf} Während des Enddurchlaufs kann der Index in das Dokument \index{Index!einfügen} eingefügt werden, indem an der Textstelle, an welcher der Index erscheinen soll (normalerweise am Ende des Dokumentes), ein \Com{printindex}-Befehl gesetzt wird. Dieser Befehl fügt die von \Prog{makeindex} bearbeitete \texttt{ind}-Datei ein, woraufhin \LaTeX{} die in ihr enthaltenen Daten setzt. \printindex Abbildung 11.3: Beispiel für den Einsatz von \index-Befehlen und des showidx-Paketes. Diese Datei wird zunächst mit LATEX bearbeitet, danach wird der Indexprozessor ausgeführt, bevor LATEX ein zweites Mal aufgerufen wird.
676
11.2 makeindex
Bsp. 11-2-1
1
Erzeugen eines Index
Mithilfe des showidx-Paketes können Anwender die Erstellung der Indexeinträge direkt dort überprüfen, wo sie erstellt werden. Die Einträge werden mit dem \index-Befehl in das Stichwortverzeichnis übernommen. Genauer gesagt wird das Argument des \index-Befehls unverändert in die Hilfsdatei idx geschrieben. Dies geschieht jedoch nur, wenn der \makeindexBefehl in der Dokumentenpräambel angegeben wurde.
2
Aufbereiten des Index
Index!Einträge!anzeigen Index!Einträge!erstellen index@\index index@\index makeindex@\makeindex Index!aufbereiten makeindex@makeindexProgramm Enddurchlauf Index!einfügen printindex@\printindex makeindex@makeindexProgramm
Um einen Index auszugeben, muss zuvor die idx-Datei mithilfe eines externen Programms wie makeindex in eine ind-Datei umgewandelt werden. makeindex filename
3
Ausgabe des Index
Während des Enddurchlaufs kann der Index in das Dokument eingefügt werden, indem an der Textstelle, an welcher der Index erscheinen soll (normalerweise am Ende des Dokumentes), ein \printindex-Befehl gesetzt wird. Dieser Befehl fügt die von makeindex bearbeitete ind-Datei ein, woraufhin LATEX die in ihr enthaltenen Daten setzt.
Index Enddurchlauf, 1
erstellen, 1 \index, 1
Index aufbereiten, 1 einfügen, 1 Einträge anzeigen, 1
\makeindex, 1 makeindex-Programm, 1 \printindex, 1 1
Abbildung 11.4: Einsatz von \index-Befehlen und des showidx-Paketes (Ausgabe). Diese Abbildung zeigt den Index, der von der Eingabedatei generiert wurde, die in Abbildung 11.3 auf der gegenüberliegenden Seite dargestellt ist. Alle Indexeinträge werden im Rand abgebildet, so dass Fehler und doppelte Einträge leicht zu finden sind. 677
11
INDEXERSTELLUNG
11.2.2 Einzelne Optionen des MakeIndex-Programms Im Folgenden werden die Optionen des MakeIndex-Aufrufs beschrieben:
makeindex [-ciglqr] [-o ind ] [-p nr ] [-s stil ] [-t log] [idx0 ...]
-c
Ermöglicht die Komprimierung von Leerzeichen. Standardmäßig wird im Indexschlüssel jedes Leerzeichen berücksichtigt. Die Option -c ignoriert führende und angehängte Leerzeichen sowie Tabulatorzeichen und behandelt mehrere aufeinanderfolgende Leerzeichen zwischen den Wörtern als eines.
-i
Verwendung der Standardeingabe (stdin) als Eingabedatei. Bei Aktivierung dieser Option ohne gleichzeitige Verwendung von -o wird die Ausgabe in die Standardausgabe (stdout, den voreingestellten Ausgabestrom) geschrieben.
-g
Verwendung der deutschen Sortierreihenfolge gemäß DIN-Norm 5007. In diesem Fall wird die normale Sortierreihenfolge, nach der MakeIndex Wörter einordnet (Symbole, Zahlen, Großbuchstaben, Kleinbuchstaben), durch die deutsche Sortierreihenfolge (Symbole, Kleinbuchstaben, Großbuchstaben, Zahlen) ersetzt. Zusätzlich versetzt diese Option MakeIndex in die Lage, die deutschen TEX-Befehle "a, "o, "u, und "s zur besseren Sortierung als ae, oe, ue bzw. ss einzuordnen. Das Maskierungszeichen muss in einer Stildatei umdefiniert werden (siehe Seite 683); ansonsten wird eine Fehlermeldung ausgegeben, und MakeIndex bricht ab. Allerdings ist diese Option erst ab MakeIndex Version 2.13 korrekt implementiert.
-l
Verwendung der Sortierreihenfolge nach Buchstaben. Bei der voreingestellten Sortierreihenfolge werden Leerzeichen vor den Buchstaben des Alphabets einsortiert. Bei der Sortierreihenfolge nach Buchstaben werden Leerzeichen ignoriert. Dementsprechend werden Indexeinträge wie „Punkt ab Stand“ und „Punktabstand“ in beiden Sortierarten unterschiedlich einsortiert.
-q
Betrieb im stillen Modus. Es werden keine Meldungen auf dem Bildschirm ausgegeben (stderr). Normalerweise werden Arbeits- und Fehlermeldungen sowohl auf den Bildschirm stderr als auch zur Protokolldatei gesandt. Die Option -q deaktiviert die stderr-Meldungen.
-r
Diese Option deaktiviert die automatische Seitenbereichserzeugung. Standardmäßig werden drei oder mehr aufeinanderfolgende Seiten automatisch zu einem Bereich zusammengefasst (z.B. 1–5). Durch Angabe von -r wird die Funktion deaktiviert, wodurch Seitenbereiche nur noch durch explizite Bereichsoperatoren erzeugt werden.
-o ind Verwendung von ind als Indexausgabedatei. Standardmäßig wird der Dateigrundname der ersten Eingabedatei idx0, verknüpft mit der Erweiterung .ind, als Name für die Ausgabedatei verwendet.
-p nr Mit dieser Option wird die Nummer der ersten Seite für die Indexausgabedatei auf nr gesetzt. Dies ist dann nützlich, wenn die Indexdatei separat formatiert werden soll. Außer reinen Zahlen sind für nr drei 678
11.2 makeindex
Spezialfälle zugelassen, nämlich any, odd und even (alle, gerade und ungerade). In diesen Fällen wird die Nummer der ersten Seite festgelegt, indem die letzte Seitenzahl aus der .log-Datei des letzten LaTEX-Laufs ausgelesen wird. Der Name der .log-Datei wird bestimmt, indem der Dateigrundname der ersten Rohindexdatei (idx0) mit der Erweiterung .log verknüpft wird. Die letzte Seite der Quelldatei wird ermittelt, indem in der Protokolldatei von hinten nach vorne nach der ersten in der Datei vorkommenden Zahl gesucht wird, die in eckigen Klammern eingeschlossen ist. Sollte keine Seitenzahl vorhanden sein oder die .logDatei nicht gefunden werden, dann wird die erste Seitenzahl nicht gesetzt. Die drei Spezialfälle haben folgende Bedeutung:
any Die Nummer der ersten Seite ist um eins größer als die letzte Seite der Quelldatei.
odd Die Nummer der ersten Seite ist die erste ungerade Seite, die der letzten Seite der Quelldatei folgt.
even Die Nummer der ersten Seite ist die erste gerade Seite, die der letzten Seite der Quelldatei folgt.
-s stil Verwendung von stil als Stildatei. Für diese Datei gibt es keine Standardeinstellung. Die Umgebungsvariable INDEXSTYLE legt den Suchpfad für die Stildatei fest.
-t log Verwendung von log als Protokolldatei. Standardmäßig wird für den Namen der Protokolldatei der Dateigrundname der ersten Eingabedatei idx0 verknüpft mit der Erweiterung .ilg verwendet.
11.2.3 Fehlermeldungen MakeIndex gibt auf dem Bildschirm die Anzahl der eingelesenen und geschriebenen Zeilen aus und teilt dem Anwender mit, wie viele Fehler gefunden wurden. Gleichzeitig zeichnet die Protokolldatei, die standardmäßig die Erweiterung .ilg hat, Meldungen auf, die über die Art der Fehler informieren. MakeIndex kann Fehlermeldungen erzeugen, wenn es etwas von der .idx-Datei liest oder etwas in die .ind-Datei überträgt. Jede Fehlermeldung gibt Auskunft über die Art des Fehlers und führt die Nummer der Zeile an, in welcher der Fehler in der Datei auftrat. In der Lesephase bezieht sich die Zeilennummer auf die .idx-Datei. Fehler in der
Extra ‘!’ at position ... Das Argument des \index-Befehls enthält mehr als zwei unmaskierte !-Zeichen. Eventuell müssen eines oder mehrere von ihnen maskiert wer-
Lesephase
den.
Extra ‘@’ at position ... Das Argument des \index-Befehls enthält zwei oder mehr unmaskierte @Zeichen ohne trennendes !. Eventuell muss eines der @-Zeichen maskiert werden.
Extra ‘|’ at position ... Das Argument des \index-Befehls enthält mehr als ein unmaskiertes |Zeichen. Eventuell sollten die zusätzlichen Zeichen maskiert werden. 679
11
INDEXERSTELLUNG
Schlüsselwort
keyword (s)
Voreinstellung
Beschreibung
"\\indexentry"
Befehl, der MakeIndex mitteilt, dass sein Argument ein Indexeintrag ist.
arg_open (c) arg_close (c) range_open (c)
’{’ ’}’ ’(’
Öffnendes Begrenzungszeichen des Argumentes
range_close (c)
’)’
Schließendes Begrenzungszeichen, welches das Ende des expliziten Seitenbereiches angibt.
level (c) actual (c)
’!’ ’@’
Begrenzungszeichen für Untereinträge.
encap (c)
’|’
Symbol, das angibt, dass der Rest der Argumentliste als Kapselungsfunktion für die Seitenzahl verwendet werden soll.
quote (c) escape (c)
’"’ ’\\’
Symbol, das das nachfolgende Zeichen maskiert.
page_compositor (s)
"-"
Trennzeichen für Seitenbereiche
Schließendes Begrenzungszeichen des Argumentes Öffnendes Begrenzungszeichen, das den Anfang des expliziten Seitenbereiches angibt.
Symbol, das angibt, dass der nachfolgende Teil des Eintrags in der Indexdatei erscheinen soll.
Symbol, das nur eine Sonderbedeutung besitzt, wenn es direkt vor dem Maskierungszeichen quote verwendet wird. In diesem Fall verliert das Maskierungszeichen seine Sonderbedeutung und beide Zeichen werden in die Ausgabedatei übertragen. Dieses Zeichen wurde einbezogen, weil \" in TEX das Zeichen für Umlaute ist. Die beiden Symbole quote und escape müssen unterschiedlich sein.
(s) Wert vom Typ string (eingeschlossen in Anführungszeichen) (c) Wert vom Typ char (eingeschlossen in Anführungsstriche)
Tabelle 11.1: Stilparameter für MakeIndex (Eingabe)
Illegal null field Das Argument des \index-Befehls ergibt keinen Sinn, weil eine Zeichenkette leer ist, die nicht leer sein sollte. Die Eingabe \index{!komisch} erzeugt diesen Fehler, da sie einen Untereintrag „komisch“ definiert, ohne einen Haupteintrag zu besitzen. Aus dem gleichen Grund ist auch die Eingabe \index{@komisch} inkorrekt, da sie für den Sortiervorgang einen Leerstring definiert.
Argument ... too long (max 1024) Das Dokument enthielt einen \index-Befehl mit einem sehr langen Argument. Wahrscheinlich wurde die rechte geschweifte Klammer vergessen, die das Argument begrenzen sollte. Fehler in der Schreibphase
In der Schreibphase bezieht sich die Zeilennummer in der Fehlermeldung auf die .ind-Datei.
Unmatched range opening operator Zu dem \index{...|(}-Befehl fehlt der zugehörige schließende \index{...|)}-Befehl. Der Text „...“ muss in beiden Befehlen absolut identisch sein. 680
11.2 makeindex
Unmatched range closing operator Zu dem \index{...|)}-Befehl fehlt der zugehörige öffnende \index{...|(}-Befehl. Extra range opening operator Zwei \index{...|(}-Befehle erscheinen im Dokument ohne trennenden \index{...|)}-Befehl. Inconsistent page encapsulator ... within range MakeIndex wurde angewiesen, einen Seitenbereich für einen Eintrag sowie eine einzelne Seitenzahl innerhalb dieses Bereiches einzufügen, die anders formatiert ist – zum Beispiel in einem Befehl wie \index{Katze|see{Tier}} zwischen einem \index{Katze|(}-Befehl und einem \index{Katze|)}-Befehl.
Conflicting entries MakeIndex ist der Meinung, dass es dieselbe Seitenzahl auf zwei verschiedene Arten formatieren soll – z.B. durch die Befehle \index{Katze|see{...}} und \index{Katze}, die sich auf derselben Seite befinden. MakeIndex kann eine Anzahl anderer Meldungen erzeugen, die auf schwerwiegende Fehler in der .idx-Datei hinweisen. Wenn solch ein Fehler ausgegeben wird, bedeutet dies normalerweise, dass die .idx-Datei in irgendeiner Weise defekt ist. Wenn LaTEX bei der Erstellung der .idx-Datei keine Fehlermeldung generiert hat, ist es sehr unwahrscheinlich, dass eine fehlerhafte .idx-Datei erzeugt wurde. Andernfalls sollte die .idx-Datei auf die exakte Fehlerursache hin untersucht werden.
11.2.4 Anpassen des Index mit MakeIndex Bei MakeIndex sind die Formate der Ein- und Ausgabedateien nicht festgelegt, sondern können an die Anforderungen einer bestimmten Anwendung angepasst werden. Um diese Formatunabhängigkeit zu erreichen, wird das MakeIndex-Programm von einer Stildatei gesteuert, die normalerweise mit dem Dateityp .ist gekennzeichnet ist (siehe auch Abbildung 11.1 auf Seite 668). Diese Datei besteht aus einer Reihe von Schlüssel-Wert-Paaren. Die Schlüsselwörter können in Eingabe- bzw. Ausgabe-Stilparameter aufgeteilt werden. Tabelle 11.1 auf der gegenüberliegenden Seite beschreibt die verschiedenen Schlüsselwörter und ihre Voreinstellungen für die Interpretation der Eingabedatei. Sie zeigt beispielsweise, wie man das Trennzeichen zur Kennzeichnung der Indexebene (level, mit ! als Voreinstellung) verändern kann. Tabelle 11.2 auf der nächsten Seite beschreibt die verschiedenen Schlüsselwörter und ihre Voreinstellungen, mit denen die Übersetzung der Eingabedaten in LaTEX-Befehle gelenkt wird. Hier findet man Hinweise, wie die verschiedenen Ebenen (mithilfe diverser item-Schlüsselwörter) formatiert werden. In Beispielen wird näher beschrieben, wie diese verschiedenen Schlüsselwörter der Eingabe- und Ausgabedatei in der Praxis verwendet werden können. MakeIndex-Stildateien verwenden die Syntax von UNIX-Zeichenketten. Um in der Ausgabe ein einzelnes \ zu erhalten, muss man daher \\ eingeben. Die folgenden Abschnitte zeigen, wie man den Index ganz individuell gestalten kann, indem man ein paar Änderungen an den Werten der Parametervoreinstellungen vornimmt, die den Index steuern. 681
11
INDEXERSTELLUNG
Schlüsselwort
Voreinstellung
Beschreibung Kontext
preamble (s) postamble (s)
"\\begin{theindex}\n" "\n\n\\end{theindex}\n"
setpage_prefix (s)
"\n\\setcounter{page}{"
Befehl, der den Index einleitet Befehl, der den Index abschließt
Startseite
setpage_suffix (s) group_skip (s) heading_prefix (s) heading_suffix (s) headings_flag (n)
item_0 (s) item_1 (s) item_2 (s) item_01 (s) item_12 (s) item_x1 (s) item_x2 (s) delim_0 (s) delim_1 delim_2 delim_n delim_r
(s) (s) (s) (s)
encap_prefix (s) encap_infix (s) encap_suffix (s) page_precedence (s)
Start des Befehls, mit dem die Nummer der Seite festgelegt wird "}\n" Zugehöriger Suffix Neue Buchstaben-Symbolgruppe "\n\n\\indexspace\n" Vertikaler Platz zwischen zwei Gruppen "" Präfix für die Überschrift einer neuen Gruppe "" Suffix für die Überschrift einer neuen Gruppe 0 flag != 0: Einfügung des Buchstabens (> 0 Großbuchstaben) oder Symbols, das die neue Gruppe charakterisiert, umgeben von heading_prefix und heading_suffix; flag = 0: keine Einfügung. Haupt- und Untereinträge "\n\\item " Befehl, der einen Haupteintrag einleitet "\n \\subitem " dito für Einträge der Ebene 1 mit Vorgänger auf Ebene ≥ 1 "\n \\subsubitem " dito für Einträge der Ebene 2 mit Vorgänger auf Ebene ≥ 2 "\n \\subitem " Befehl vor Einträgen der Ebene 1 mit Vorgänger auf Ebene 0 "\n \\subsubitem " dito für Einträge der Ebene 2 mit Vorgänger auf Ebene 1 "\n \\subitem " Befehl vor Einträgen der Ebene 1 mit übergeordnetem Eintrag ohne Seitenzahl "\n \\subsubitem " dito für Einträge der Ebene 2 Trennzeichen ", " Trennzeichen zwischen Eintrag und erster Seitenzahl auf Ebene 0 ", " dito für Ebene 1 ", " dito für Ebene 2 ", " Trennzeichen zwischen Seitenzahlen "–" Trennzeichen für einen Seitenbereich Kapselungsfunktion für Seitenzahlen "\\" Präfix vor der Kapselungsfunktion der Seiten "{" Infix für die Kapselungsfunktion der Seiten "}" Suffix für die Kapselungsfunktion der Seiten Reihenfolge der Seiten "rRnaA" Reihenfolge: A, a bedeutet alphabetische Groß-/Kleinschreibung, n Zahlen; r und R klein- und großgeschriebene römische Ziffern Zeilenumbruch 72 maximale Länge einer Zeile der Ausgabedatei "\t\t" Einrückung umbrochener Zeilen 16 Länge der Einrückung umbrochener Zeilen
line_max (n) indent_space (s) indent_length (n) „\n“ und „\t“ erzeugen neue Zeile / ein Tab; (s) Wert vom Typ string; (n) Wert vom Typ number Tabelle 11.2: Stilparameter für MakeIndex (Ausgabe) 682
11.2 makeindex
Unabhängiger Index Die im folgenden dargestellte Stildatei mybook.ist definiert einen unabhängigen Index für ein Buch. Unabhängig bedeutet hier, dass die Datei separat formatiert werden kann. Dies kann sinnvoll sein, wenn der Eingabetext des Buches „eingefroren“ ist (d.h. die Seitenzahlen sich nicht mehr ändern) und man nur den Index neu formatieren möchte.
% MakeIndex style file mybook.ist preamble "\\documentclass[12pt]{book} \n\n \\begin{document} \n \\begin{theindex}\n" postamble "\n\n\\end{theindex} \n \\end{document}\n" Angenommen,
die
Rohindexbefehle
befänden
sich
in
der
Datei
mybook.idx, dann kann man MakeIndex unter Angabe des Namens der Stildatei folgendermaßen aufrufen:
makeindex
-s mybook.ist -o mybookind.tex mybook
Hier wurde bewusst kein Standardname für die Ausgabe der Quelldatei gewählt, um zu vermeiden, dass die Dokumentausgabedatei (wahrscheinlich mybook.dvi) zerstört wird. Wenn sich der Index in der Datei mybook.ind befindet, wird das formatierte Ergebnis ebenfalls in mybook.dvi ausgegeben, womit die originale .dvi-Datei überschrieben wird. Um mit dem Index auf der richtigen Seite zu beginnen, kann man zusätzlich noch die Seitenzahl angeben, auf welcher der Index beginnen soll (z.B. 181 in folgendem Beispiel).
makeindex
-s mybook.ist
-o mybookind.tex -p 181
mybook
MakeIndex kann auch die LaTEX-Protokolldatei mybook.log lesen, um die Seitennummer zu ermitteln, an welcher der Index beginnen soll (siehe dazu die Option -p, die auf Seite 678 beschrieben ist). Ändern der „Sonderzeichen“ Das nächste Beispiel zeigt, wie man die Interpretation von Sonderzeichen in der Eingabedatei verändern kann. Zu diesem Zweck müssen die neuen Sonderzeichen in einer Stildatei festgelegt werden. Mithilfe von Tabelle 11.1 auf Seite 680 wurde im folgenden Beispiel das @-Zeichen (siehe Seite 672) durch das Gleichheitszeichen ersetzt, das Ebenentrennzeichen ! (siehe Seite 671) durch > und das Anführungszeichen " (siehe Seite 673) durch ! (das StandardEbenentrennzeichen).
% MakeIndex style file myinchar.ist actual ’=’ % = anstatt voreingestelltem @ quote ’!’ % ! " level ’>’ % > !
683
11
INDEXERSTELLUNG
Diese Einstellungen lassen sich gut zusammen mit den Optionen german oder ngerman des babel-Paketes verwenden, da man nun die Anführungszeichen (") als Abkürzung für die Umlautkonstruktion \" verwenden kann.
"-Zeichen, 1 =-Zeichen, 2 @-Zeichen, 2 Ausruf (!), 4 Ah!, 5 Brücke, 5 Brücke, V Brücke, v Dimension Linie Breite, 3 Mädchen, c Mädchen, 3
Seite Seite Seite Seite Seite Seite Seite Seite Seite Seite Seite
1: 2: 2: 3: c: v: 5: V: 3: 4: 5:
\index{\texttt{"}-Zeichen} \index{\texttt{@}-Zeichen} \index{\texttt{!=}-Zeichen} \index{Maedchen=M\"{a}dchen} \index{Maedchen=M"adchen} \index{Bruecke=Br"ucke} \index{Br"ucke} \index{Br\"ucke} \index{Dimension>Linie>Breite} \index{Ausruf (!!)} \index{Ausruf (!!)>Ah!!}
Im Beispiel wird eine weitere Eigenschaft für die Sortierung von MakeIndex deutlich: Die Konstruktionen " und \" werden als unterschiedliche Einträge betrachtet (Br"ucke und Br\"ucke, M"adchen und M\"adchen, auch wenn im letzteren Fall der eigentliche Eintrag, nämlich Maedchen, identisch ist). Daher ist es wichtig, dieselbe Eingabekonvention im gesamten Dokument zu verwenden. Ändern des Ausgabeformats Auch das Ausgabeformat des Index kann man selbst gestalten. Als erstes könnte man z.B. einen Index erstellen, in dem jede Buchstabengruppe von der nächsten durch einen großen Buchstaben getrennt ist. Dieses Ergebnis kann man mit der unten aufgeführten Stildatei myhead.ist erreichen (siehe Tabelle 11.2 auf Seite 682 für nähere Angaben). Das Resultat dieser Maßnahme ist in Abbildung 11.5 dargestellt.
% MakeIndex style file myhead.ist heading_prefix "{\\bfseries\\hfil " % vor Zeichen einfügen heading_suffix "\\hfil}\\nopagebreak\n" % nach Zeichen einfügen headings_flag 1 % Überschriften an % (Großbuchstaben) Ein weiterer Schritt könnte die Ausrichtung der Seitenzahlen am rechten Rand sein, wobei zwischen dem Text und der Seitenangabe Punkte eingefügt werden, die das Auge leiten. Ein Beispiel hierfür ist in Abbildung 11.6 auf der gegenüberliegenden Seite zu sehen. Dieser Effekt lässt sich erreichen, indem man folgende Befehle hinzufügt:
% MakeIndex style file myright.ist delim_0 "\\dotfill " delim_1 "\\dotfill " delim_2 "\\dotfill " Der LaTEX-Befehl \dotfill kann durch ausgefallenere Befehle ersetzt werden, aber das Grundprinzip bleibt dasselbe.
684
11.2 makeindex
Symbole
@-Zeichen, 2 B Box, 21 Dimension der, 33 Parameter, 5 D Dimension Abbildung, 17 Linie Breite, 3 Tiefe, 12 Tabelle, 9
Seite 2: Seite 3: Seite 5: Seite Seite Seite Seite
9: 12: 17: 21:
Seite 33: Seite 41: Seite 48:
\index{\texttt{"@}-Zeichen} \index{Dimension!Linie!Breite} \index{Box!Parameter} \index{Fonts!PostScript} \index{Dimension!Tabelle} \index{Dimension!Linie!Tiefe} \index{Dimension!Abbildung} \index{Box} \index{Fonts!Computer Modern} \index{Box!Dimension der} \index{Linie!Tiefe} \index{Linie!Breite} \index{Linie!Tiefe}
F Fonts Computer Modern, 21 PostScript, 5 L Linie Breite, 41 Tiefe, 33, 48
Abbildung 11.5: Beispiel für die Anpassung des Ausgabeformats
@-Zeichen . . . . . . . . . . . . . . . . 2 Box . . . . . . . . . . . . . . . . . . . . . 21 Dimension der . . . 33 Parameter . . . . . . . . . . 5 Dimension Abbildung . . . . . . . . 17 Linie Breite . . . . . . . . . . . . 3 Tiefe . . . . . . . . . . . 12 Tabelle . . . . . . . . . . . . . 9 Fonts Computer Modern 21 PostScript . . . . . . . . . . 5 Linie Breite . . . . . . . . . . . . . 41 Tiefe . . . . . . . . . . 33, 48
Seite 2: Seite 3: Seite 5: Seite Seite Seite Seite
9: 12: 17: 21:
Seite 33: Seite 41: Seite 48:
\index{\texttt{"@}-Zeichen} \index{Dimension!Linie!Breite} \index{Box!Parameter} \index{Fonts!PostScript} \index{Dimension!Tabelle} \index{Dimension!Linie!Tiefe} \index{Dimension!Abbildung} \index{Box} \index{Fonts!Computer Modern} \index{Box!Dimension der} \index{Linie!Tiefe} \index{Linie!Breite} \index{Linie!Tiefe}
Abbildung 11.6: Leitpunkte im Index hinzufügen
Arbeiten mit zusammengesetzten Seitenzahlen Wie bereits beschrieben, akzeptiert MakeIndex fünf elementare Arten von Seitenzahlen: Ziffern, Groß- und Kleinbuchstaben sowie groß- und kleingeschriebene römische Zahlen. Daneben können aber auch zusammengesetzte Seitenzahlen verarbeitet werden. Das Trennzeichen für solche Seitenzahlen wird
685
11
INDEXERSTELLUNG
durch das MakeIndex-Schlüsselwort page_compositor festgelegt. Die Voreinstellung ist der Trennstrich (-); siehe Tabelle 11.1 auf Seite 680. Die Sortierreihenfolge der verschiedenen Arten von Seitenzahlen wird dagegen durch das Schlüsselwort page_precedence bestimmt (die voreingestellte Reihenfolge ist rRnaA; siehe Tabelle 11.2 auf Seite 682). Das erste Beispiel befasst sich zunächst mit einfachen Seitenzahlen. Angenommen die Seiten mit den Nummern ii, iv, 1, 2, 5, a, c, A, C, II und Probleme ! IV enthalten einen \index-Befehl mit dem Inhalt „Stil“. Mit der Standardbei Buchstaben als page_precedence von rRnaA würde dieser Begriff im Index dann wie unten Seitennummern gezeigt gesetzt werden. Die Einträge c und C werden dabei als römische Ziffern betrachtet, und nicht etwa als Buchstaben: Stil, ii, iv, c, II, IV, C, 1, 2, 5, a, A Diese Sortierreihenfolge kann man mithilfe des page_precedenceSchlüsselwortes ändern, wie in der Stildatei mypages.ist zu sehen ist.
% MakeIndex style file mypages.ist page_precedence "rnAaR" Eine erneute Bearbeitung der obigen Indexeinträge mit MakeIndex ergibt nun: Stil, ii, iv, c, 1, 2, 5, A, a, II, IV, C Wie man sieht, werden auch hier Buchstaben wie „c“ als römische Ziffern interpretiert. Solange MakeIndex keine Möglichkeit bietet, dieses Verhalten zu beeinflussen, lassen sich einfache, mit Buchstaben nummerierte Seiten damit leider nur mit bedingt verwenden – entweder akzeptiert man eine potenziell fehlerhafte Reihenfolge innerhalb der Seitenverweise oder man ist gezwungen, diese manuell nachzuarbeiten. Die Situation sieht bei zusammengesetzten Seitenzahlen leicht anders aus, d.h. bei Seiten die Nummerierungen wie „A–3“ tragen (wobei „A“ etwa die Anhangnummer und „3“ die Seite innerhalb dieses Anhangs darstellen). In dieser doch recht häufigen Nummerierungsvariante wird „C“ zu den Buchstaben gezählt – „I“ aber nach wie vor zu den römischen Ziffern. Somit kann man hier acht alphabetisch nummerierte Anhänge verwenden, bevor man in Probleme mit der Reihenfolge läuft. Wie bereits erwähnt, ist der Bindestrich das voreingestellte Separierungszeichen. Angenommen, es gibt einen Verweis auf das Wort Stil auf folgenden Seiten (in unsortierter Reihenfolge): C-3, 1-1, D-1-1, B-7, F-3-5, 2-2, D-2-3, A-1, B-5 und A-2. Nach der Bearbeitung mit MakeIndex wird daraus der folgende sortierte Index erzeugt: Stil, 1-1, 2-2, A-1, A-2, B-5, B-7, C-3, D-1-1, D-2-3, F-3-5 Haben die Verweise stattdessen die Gestalt C--3, 1--1, . . . , dann erhält man lauter Fehlermeldungen und einen leeren Index. In einem solchen Fall muss man das Separierungszeichen mithilfe des Schlüsselwortes
686
11.2 makeindex
page_compositor in einer Stildatei passend abändern: % MakeIndex style file mypagsep.ist page_compositor "--" Verarbeitet man die Indexeinträge mit dieser Stildatei, werden die Seitennummern korrekt erkannt und sortiert: Stil, 1–1, 2–2, A–1, A–2, B–5, B–7, C–3, D–1–1, D–2–3, F–3–5 Da MakeIndex nur ein Separierungzeichen kennt, lassen sich komplexer aufgebaute Seitennummerierungen (wie etwa „A–4.1“) mit dem Programm nicht verarbeiten.
11.2.5 MakeIndex-Fallstricke Der \index-Befehl versucht, wann immer möglich sein Argument unverändert in die .idx-Datei zu schreiben.1 Dieses Verhalten hat eine Reihe verschiedener Konsequenzen. Wenn der Indextext Befehle enthält (wie in \index{\Prog}), ist der Eintrag wahrscheinlich falsch einsortiert, weil dieser Eintrag im Haupttext unter dem Sortierschlüssel \Prog einsortiert wurde (mit dem Sonderzeichen \ als Anfangszeichen für die Sortierung), egal wie die Definition des \Prog-Befehls lautet. Auf der anderen Seite wird \Prog expandiert, wenn er im Argument eines anderen Befehls verwendet wird, bevor er in die .idx-Datei geschrieben wird; die Platzierung im Index hängt dann von der Expansion von \Prog ab. Dasselbe geschieht, wenn man \index innerhalb eigener Definitionen verwendet. Alle Befehle innerhalb des Indexargumentes werden expandiert (es sei denn, es handelt sich um robuste Befehle oder ihnen ist \protect vorangestellt). Bei der Sortierung geht MakeIndex davon aus, dass Seiten, die mit römischen Zahlen nummeriert sind, jenen mit arabischen Zahlen vorangestellt werden. Arabische Zahlen kommen wiederum vor Buchstaben. Diese Reihenfolge lässt sich nur mit gewissen Einschränkungen ändern, und es gibt generelle Probleme bei der Verwendung von Buchstaben als Seitennummern (siehe die Diskussion auf der vorherigen Seite). MakeIndex ordnet Symbole (das heißt Zeichenfolgen, die mit einem nicht alphanumerischen Zeichen beginnen) im Index vor Zahlen und diese vor alphanumerischen Einträgen ein. Die Symbole werden anhand ihres ASCII-Wertes einsortiert (was nicht notwendigerweise der korrekten Sortierreihenfolge der verwendeten Sprache entspricht). Bei der Sortierung von Wörtern werden großund kleingeschriebene Wörter gleich behandelt, aber bei identischen Einträgen kommt die großgeschriebene Variante vor der kleingeschriebenen. Zahlen werden in aufsteigender Reihenfolge sortiert. Leerzeichen werden als normale Zeichen betrachtet. Sie zählen sowohl bei der alphabetischen Sortierung als auch bei der Entscheidung mit, ob zwei Einträge identisch sind (siehe auch das Beispiel auf Seite 670). Wenn z.B. „!“ ein Leerzeichen markiert, dann erzeugen die Befehle \index{Katze}, 1 Die Art, wie LaT X versucht, Expansionen zu verhindern, ist nicht immer erfolgreich. Das E index-Paket (siehe Abschnitt 11.4.3) verwendet einen anderen Ansatz, der in allen Fällen eine Expansion verhindert.
687
11
INDEXERSTELLUNG
\index{!Katze} und \index{Katze!} drei separate Einträge. Im Ausdruck sehen alle drei (fast) gleich aus. Auf ähnliche Weise erzeugen auch \index{ein!Leerzeichen} und \index{ein!!Leerzeichen} zwei verschiedene Einträge, die im Ausdruck identisch aussehen. Aus diesem Grund ist es wichtig, dass man überflüssige Leerzeichen vermeidet. Vorsicht ist z.B. geboten, wenn das Argument eines \index-Befehls in der Eingabedatei am Zeilenende umbrochen wird. Die MakeIndex-Option -c schaltet dieses Verhalten aus, entfernt führende und angehängte Leerzeichen und komprimiert sonstige enthaltene Leerzeichen zu einem. Es ist empfehlenswert, diese Option stets eingeschaltet zu haben.
11.3 xindy – Eine Alternative zu MakeIndex Das Programm xindy von Roger Kehr und Joachim Schrod ist ein flexibles System zur Indexerstellung, das eine Alternative zu MakeIndex darstellt. Es überwindet einige der Beschränkungen von MakeIndex, insbesondere der Erstellung von Indexregistern in nicht englischen Sprachen. Die Verwendung von xindy empfiehlt sich in folgenden Fällen: • Es gibt einen Index mit nicht englischen Wörtern, ansonsten soll alles so wie mit MakeIndex funktionieren. Die Migration aus MakeIndex ist einfach, weil xindy verwendet werden kann, ohne dass die Indexeinträge im Dokument geändert werden müssen. Eine Kompatibilitäts-Stildatei erzeugt Ergebnisse, die den Standardeinstellungen von MakeIndex entsprechen. Der Hauptunterschied besteht darin, dass die Sortierung der Indexeinträge problemlos funktioniert. • Es soll sichergestellt werden, dass der Index konsistenter ist als jener, der mit MakeIndex erzeugt wird. Da MakeIndex alle Begriffe wortwörtlich nimmt, muss die visuelle Darstellung, wie in Abschnitt 11.1.4 auf Seite 672 erläutert, explizit angegeben werden. Dies gilt insbesondere dann, wenn zur Darstellung LaTEXBefehle benötigt werden. Wenn an einer Stelle die Angabe einer speziellen Darstellung vergessen wurde, wird der Index inkonsistent. Das xindyProgramm nimmt übliche LaTEX-Darstellungen und berechnet aus ihnen den Indexschlüssel – damit müssen Unterschiede zwischen Indexschlüssel und visueller Darstellung nicht mehr jedes Mal explizit angegeben werden. (Zum Beispiel sind die unterschiedlichen Definitionen von \Index und \Indextt aus Abschnitt 11.1.7 auf Seite 673 nicht mehr notwendig.) Natürlich kann man trotzdem noch spezielle Darstellungen in den Indexeinträgen angeben. • Der Index soll stärker auf Korrektheit überprüft werden. Wenn im Index Querverweise vorkommen, die mit see eingeleitet werden (vgl. Besprechung in Abschnitt 11.1.3 auf Seite 671), überprüft xindy, ob der Eintrag, auf den verwiesen wird, tatsächlich existiert. Auf diese Weise lassen sich tote Verknüpfungen vermeiden. • Es soll ein technischer Index auf effiziente Weise erstellt werden. Technische Stichwortverzeichnisse enthalten häufig LaTEX-Befehle in den
688
11.3 xindy – Eine Alternative zu MakeIndex
Indexschlüsseln, z.B. um Symbole oder Logos aufzunehmen. xindy ermöglicht es, den eigentlich benötigten Indexschlüssel anhand vorgegebener Regeln zu konstruieren. Dies gibt dem Anwender die Möglichkeit, die eigentlichen Indexeinträge automatisch aus den LaTEX-Befehlen heraus zu generieren, so dass jede Verwendung eines technischen Begriffs im Index aufgenommen wird. Voraussetzung dafür ist das Erstellen der benötigten Konstruktionsregeln. • Es soll ein Index mit „ungewöhnlichen“ Begriffen erstellt werden. Bei einigen Begriffen gelten aus historischen Gründen besondere Sortierregeln. Zum Beispiel werden manchmal die Namen von Orten und Personen anders sortiert, als sie geschrieben werden – „St. Martin“ wird je nach Kontext als „Martin“ oder als „Sankt Martin“ einsortiert, „van Beethoven“ wird als „Beethoven“ eingeordnet usw. Symbole sind ein weiteres Beispiel für eine mehr oder weniger willkürliche Sortierreihenfolge im Index. Wie auch immer diese definiert ist, sie sollte im gesamten Dokument einheitlich sein. Das xindy-Programm bietet diese Vorteile, weil es viele der festen Annahmen von MakeIndex verworfen hat, die in internationalen Dokumenten mit beliebigen Arten von Referenzen keine Gültigkeit haben. Stattdessen bietet xindy einen flexiblen Rahmen, um Regeln zur Indexerstellung aufzustellen, zusammen mit einem einfachen MakeIndex-ähnlichen Skript für Standardaufgaben. Die Leistungsfähigkeit von xindy ergibt sich aus fünf zentralen Eigenschaften: Internationalisierung xindy lässt sich einfach für Sprachen mit verschiedenen Alphabeten und/oder unterschiedlichen Sortierregeln konfigurieren. Es ist möglich, zusätzliche Buchstaben oder komplette Alphabete zu definieren und eine Reihe von Regeln zur Sortierung und Gruppierung dieser Zeichen bereitzustellen. Momentan werden durch die xindy-Distribution etwa 50 Sprachen unterstützt. Modulare Konfiguration xindy wird durch kombinierbare und wiederverwendbare Deklarationen konfiguriert. Für Standard-Indexaufgaben müssen LaTEX-Anwender lediglich die verfügbaren Module benutzen. Normalisierung des Markups Ein ermüdendes Problem, das im Zusammenhang mit technischen oder fremdsprachigen Stichwortverzeichnissen entsteht, betrifft das Markup und nicht textuelles Material. xindy bietet die Möglichkeit, Eingabevarianten und unterschiedliche Kodierungen für dasselbe Objekt zu ignorieren oder Markup-Elemente, wie den Formelmodus, aus dem Eintrag zu entfernen. Benutzerdefinierbare Textreferenzen Ein Indexeintrag verweist auf eine bestimmte Stelle im Text. Ausgefallenere Stichwortverzeichnisse bestehen möglicherweise nicht nur aus Seitenzahlen, sondern auch aus Buchnamen, Gesetzesparagraphen und strukturierten Artikelnummern (z.B. „I-20“, „Genesis 1, 31“). Das xindy-Programm ermöglicht eine beliebige Sortierung und Gruppierung dieser Referenzen.
689
11
INDEXERSTELLUNG
Konfigurierbare Auszeichnung xindy bietet eine vollständige Kontrolle des Markups. Diese Funktion ist in der Regel für LaTEX-Anwender nicht von Bedeutung, aber sie ist sehr praktisch für die Indexierung von Nicht-TEXMaterial.
Verfügbarkeit
Wenn das xindy-Programm nicht Teil der TEX-Distribution ist, bietet die Webseite des Programms (www.xindy.org) Distributionen für viele verschiedene Betriebssysteme und weitere Referenzdokumentationen. CTAN enthält ebenfalls xindy-Distributionsdateien.
11.3.1 Erzeugen des formatierten Index mit xindy Das xindy-Programm enthält den Befehl texindy, mit dem das Programm für Standardaufgaben auf einfache, MakeIndex-ähnliche Weise eingesetzt werden kann. Die Optionen, die äquivalent zu jenen von MakeIndex sind, werden an dieser Stelle nicht mehr im Detail erörtert; hierzu sei auf Abschnitt 11.2.2 verwiesen. Auf die Optionen -M und -L wird in den folgenden Abschnitten näher eingegangen.
texindy [-gilqr] [-o ind ] [-t log] [-L sprache] [-M modul ] [idx0 ...]
-i
Verwendung der Standardeingabe (stdin) als Eingabedatei.
-o ind
Verwendung von ind als Indexausgabedatei.
-t log
Verwendung von log als Protokolldatei.
-q
Betrieb im stillen Modus.
-g
Verwendung des deutschen Modus (äquivalent zu -L german-din -M german-sty).
-l
Sortierreihenfolge nach Buchstaben; voreingestellt ist die Sortierung nach Wörtern (äquivalent zu -M letter-order).
-r
Deaktivierung der automatischen Seitenbereichserzeugung (äquivalent zu -M no-ranges).
-M modul Verwendung der xindy-Stildatei modul.xdy zur Konfigurierung der Bearbeitung.
-L sprache Verwendung von sprache als Sprachkonfiguration für die Sortierung der Wörter. Die Dateien idx0, idx1 usw. enthalten Rohindexeinträge. Bei Angabe von mehreren Ausgabedateien ist es sinnvoll, die Option -o zu verwenden, um die Ausgabedateien mit Namen zu versehen. Standardmäßig wird der Name der Ausgabedatei aus idx0 generiert. Bei Verwendung der Option -c, -p oder -s wird eine Warnung ausgegeben, die darüber informiert, dass diese MakeIndex-Optionen nicht unterstützt werden. Tatsächlich sind xindy-Stildateien selbst geschriebene Module, die mit der Option -M angegeben werden; für Einzelheiten zur Erstellung der Module siehe Abschnitt 11.3.4.
690
11.3 xindy – Eine Alternative zu MakeIndex
Der Befehl texindy komprimiert standardmäßig Leerzeichen, da die Autoren der Meinung sind, dass man dies von einem Indexprozessor erwartet. Tatsächlich arbeitet das gesamte TEX-Programmpaket standardmäßig unter der Annahme, dass mehrere Leerzeichen effektiv nur ein Leerzeichen sind. Wenn sich xindy auch hierin MakeIndex-kompatibel verhalten soll, kann man das Modul keep-blanks verwenden, wie Abschnitt 11.3.3 erläutert. Mit der MakeIndex-Option -p kann ein LaTEX-Befehl in die .ind-Datei geschrieben werden, der den Seitenzähler setzt. Eventuell wird dafür sogar die Protokolldatei von LaTEX analysiert. Das xindy-Programm hat keine solche Option, und dies ist beabsichtigt. Die Autoren von xindy glauben, dass ein separates LaTEX-Dokument für den Index zu fehleranfällig ist und der bessere Ansatz darin besteht, die LaTEX-Datei mit dem Befehl \printindex in das Hauptdokument einzubinden. Der texindy-Befehl ignoriert standardmäßig unbekannte TEX-Befehle, unter der Annahme, dass sie keinen Text erzeugen. Außerdem kennt er typische LATEX-Befehle texterzeugende Befehle, wie \LaTeX und \BibTeX, und handhabt sie korrekt. indexieren Wenn eigene Befehlsdefinitionen erstellt werden, die Text produzieren, oder von einem Paket bereitgestellte Befehle verwendet werden, wird der Eintrag falsch sortiert. Entweder muss im Indexeintrag ein expliziter Sortierschlüssel angegeben werden, wie in \index{prog@\Prog}, oder eine xindy-Stildatei mit einer Vereinheitlichungsregel geschrieben werden, wie in Abschnitt 11.3.4 erläutert. Zu beachten ist, dass die Verwendung von Indexeinträgen in Argumenten von Befehlen seine eigenen Tücken hat, zum Beispiel in einer Überschrift wie \section{Properties of \Prog\index{\Prog}}. In diesem Fall werden Befehle möglicherweise expandiert, bevor sie in die .idx-Datei geschrieben werden, und die Platzierung im Index hängt von der Expansion von \Prog ab.
11.3.2 Internationale Indexierung mit xindy Die meisten nicht englischen Sprachen stellen eine zusätzliche Herausforderung für die Indexbearbeitung dar. Sie haben akzentuierte Zeichen oder sprachspezifische Zeichen, die in Bezug auf die Sortierung speziellen Regeln gehorchen. Normalerweise reicht es nicht aus, die Akzente zu ignorieren, und natürlich kann man die binäre Kodierung der Zeichen in einer bestimmten Sprache nicht für die Sortierung verwenden. Selbst wenn man es wollte, wäre es sogar recht schwierig, die binäre Kodierung zur Sortierung zu verwenden – die meisten LaTEX-Implementierungen geben Nicht-ASCII-Zeichen als LaTEXKommandos aus, z.B. wird „ß“ als „\IeC {\ss }“ ausgegeben. Die Realität sieht anders aus: Entweder werden fremde Zeichen mit Makros eingegeben oder das inputenc-Paket wird verwendet. Zum Beispiel wird ein LaTEX-Anwender in Westeuropa auf einem Linux-System für alle seine Dokumente wahrscheinlich \usepackage[latin1]{inputenc} hinzufügen (oder auf einer neueren Linux-Distribution die Option utf8), während WindowsAnwender die inputenc-Option ansinew oder utf8 nutzen. Damit enthält die Rohindex-Datei plötzlich viele LaTEX-Befehle, da alle sprachspezifischen und akzentuierten Zeichen als Befehle ausgegeben werden. Bei MakeIndex muss der Autor Sortierschlüssel und Schlüssel für den Druck für solche Indexeinträge separat angeben. Bei einigen wenigen Indexeinträgen ist das zu bewältigen,
691
11
INDEXERSTELLUNG
Argument der texindy -L-Option
albanian croatian czech danish dutch dutch-ij-as-ij english esperanto estonian
finnish french general german-din german-duden greek-translit hungarian icelandic kurdish
kurdish-bedirxan kurdish-turkish-i latvian lithuanian lower-sorbian norwegian polish portuguese romanian
slovak-small slovak-large slovenian spanish-modern spanish-traditional swedish turkish upper-sorbian
general ist die voreingestellte Sprachoption, sie bietet Definitionen, die für alle westeuropäischen Sprachen gleichermaßen geeignet sind. Sie unterstützt keine Sonderbehandlung von sprachspezifischen Zeichen. Weitere Sprachoptionen sind für xindy verfügbar, können aber nicht einfach mit texindy verwendet werden.
Tabelle 11.3: Von texindy unterstützte Sprachen
ist jedoch sehr fehleranfällig, wenn es für alle Einträge vorgenommen werden muss, die sprachspezifische Zeichen enthalten. Außerdem funktioniert die automatische Erstellung von Indexeinträgen mithilfe von LaTEX-Befehlen (wie in Abschnitt 11.1.7 empfohlen) nicht mehr. Das xindy-Programm bietet Lösungen für dieses Problem. Es kennt die LaTEX-Makros für sprachspezifische Zeichen und verarbeitet sie wie erforderlich. Damit können neue Alphabete und ihre Sortierreihenfolge sowie komplexere, mehrphasige Sortierregeln definiert werden, die das richtige Sortierschema beschreiben. So können typische reale Anforderungen, wie etwa folgende, bewältigt werden: Deutsch Im Deutschen gibt es zwei verschiedene Sortierschemata, um Umlaute zu handhaben: normalerweise wird ä wie ae sortiert, aber in Telefonbüchern oder Wörterbüchern wird es wie a sortiert. Das erste Schema ist als DIN-Reihenfolge bekannt, das zweite als Duden-Reihenfolge [45]. Spanisch Im Spanischen ist die Ligatur ll eine separate Buchstabengruppe, die nach l und vor m vorkommt. Französisch Im Französischen werden in der ersten Sortierphase diakritische Zeichen ignoriert, so dass cote, côte, coté und côté gleich einsortiert werden. In der nächsten Phase werden akzentuierte Zeichen, die sich nur in den Akzenten unterscheiden, von rechts nach links durchsucht. Buchstaben mit diakritischen Zeichen kommen demzufolge nach Buchstaben ohne diese. cote und côte stehen damit am Anfang (ohne Akzent auf dem e), danach folgen Wörter mit o vor Wörtern mit ô. Das xindy-Programm bietet Sprachmodule für eine wachsende Anzahl von Sprachen. Solch ein Sprachmodul definiert das Alphabet mit allen sprachspezifischen Zeichen, ihren Sortierregeln und auf diese Sprache angepassten Definitionen für Buchstabengruppen. Außerdem werden akzentuierte Zeichen, die üblicherweise in dieser Sprache verwendet werden, korrekt verarbeitet.
692
11.3 xindy – Eine Alternative zu MakeIndex
Die vordefinierten Sprachmodule umfassen west- und osteuropäische Sprachen. Derzeit gibt es keine Unterstützung für asiatische Sprachen. Es gibt etwa 50 vordefinierte Sprachen, wovon 35 sofort mit texindy einsetzbar sind. Sie sind in Tabelle 11.3 auf der vorherigen Seite aufgeführt; ausgewählt werden sie mit der texindy-Option -L. Die anderen vordefinierten Sprachen haben nicht lateinische Schriften, ihre Verwendung wird in der xindy-Dokumentation beschrieben. Es besteht auch die Möglichkeit, sich eigene xindy-Sprachmodule zu schaffen. Das xindy-Hilfsprogramm make-rules vereinfacht dieses Verfahren, wenn die gewünschte Sprache folgende Kriterien erfüllt: • Das Schriftsystem verwendet ein Alphabet mit Buchstaben. • Die Sortierreihenfolge basiert auf diesen Buchstaben (und auf den Akzenten). • Zur Sortierung ist kein spezieller Rückgriff auf den Kontext notwendig; Akzente beeinflussen nur die Sortierreihenfolge der akzentuierten Buchstaben. Weitere Informationen zur Erstellung von Sprachmodulen mit und ohne make-rules sind auf der Webseite von xindy (www.xindy.org) zu finden. Neue Module werden vom xindy-Projekt gern aufgenommen.
11.3.3 Module für alltägliche Aufgaben Wie MakeIndex kann auch xindy konfiguriert werden, indem man eine persönliche Stildatei erstellt, wie in Abschnitt 11.3.4 erläutert. Die meisten Anwender benötigen jedoch nicht den vollen Umfang der xindy-Konfiguration. Ihnen reicht es, die üblichen Probleme mit den existierenden Modulen zu lösen. Zur Vereinfachung der üblichen Aufgaben stellt xindy eine Reihe von Modulen bereit, die in Tabelle 11.4 auf der nächsten Seite aufgeführt sind. Sie bieten Standardlösungen zur Sortierung, Erstellung von Seitenbereichen und Layoutanforderungen. Wenn es keine weiteren Anforderungen gibt, kann man einen internationalen Index ohne persönliche Stildatei erstellen. Dazu muss man nur die gewünschte Sprachoption und die ausgewählten Module auf der texindy-Befehlszeile angeben. Bei Verwendung des texindy-Befehls gibt es drei Kategorien von Modulen: Automatische Module Diese Module stellen Funktionalitäten bereit, die zu MakeIndex konform sind. Sie lassen sich bei Benutzung des Befehls texindy nicht abschalten. Wenn eine solche Funktionalität nicht erwünscht ist, muss der Befehl xindy direkt verwendet werden (siehe Abschnitt 11.3.4). Standardmodule Einige Module werden standardmäßig aktiviert, sie können mit texindy-Optionen abgeschaltet werden. Zusatzmodule Man kann ein oder mehrere Module mit der xindy-Option -M auswählen.
693
11
INDEXERSTELLUNG
xindy-Modul
Kategorie
Beschreibung
word-order
Standard
Leerzeichen kommen vor den Buchstaben des Alphabets: „Computer Modern“ wird vor „Computereingabe“ einsortiert; Wörter mit Präfixen stehen demnach am Anfang. Dieses Verhalten lässt sich mit der texindy-Option -l abschalten.
letter-order
Zusatz
Leerzeichen werden ignoriert: „Computer Modern“ wird nach „Computereingabe“ einsortiert. Dieses Verhalten lässt sich mit der texindy-Option -l einschalten.
keep-blanks
Zusatz
Führender und angehängter Leerraum (Leerzeichen und Tabs) wird nicht ignoriert und Leerraum innerhalb des Begriffs bleibt unverändert.
ignore-hyphen
Zusatz
Bindestriche werden ignoriert: „QED-Zeichen“ wird wie „QEDZeichen“ einsortiert.
ignore-punctuation
Zusatz
Alle Arten von Satzzeichen werden ignoriert: Bindestriche, Punkte, Kommas, Schrägstriche, Klammern usw.
numeric-sort
Auto
Nummern werden nicht wie Zeichen, sondern numerisch einsortiert: „V64“ erscheint vor „V128“.
page-ranges
Standard
Begriffe, die auf mehr als zwei aufeinander folgenden Seiten vorkommen, werden als Bereich angegeben: „1–4“. Dieses Verhalten lässt sich mit -r ausschalten.
ff-ranges
Zusatz
Verwendet die implizite „ff“-Notation für Bereiche bis zu drei Seiten und explizite Bereiche danach: 2f, 2ff, 2–6.
ff-ranges-only book-order
Zusatz
Verwendet nur implizite Bereiche: 2f, 2ff.
Zusatz
Sortiert Seitennummern mit üblichem Buchnummerierungs-Schema korrekt – zuerst römische Zahlen, dann arabische Zahlen, dann andere: i, 1, A-1.
tex latex-loc-fmts
Auto
Stellt grundlegende TEX-Konventionen bereit. Bietet LaTEX-Formatierungsbefehle zur Kapselung von Seitennummern.
latex
Auto
Verwendet LaTEX-Konventionen sowohl in Rohindexeinträgen als auch im ausgegebenen Begriff, beinhaltet auch tex.
makeindex
Auto
Emuliert die Standard-Eingabesyntax und das Maskierungsverhalten von MakeIndex.
latin-lettergroups
Auto
Layout enthält einen einzelnen lateinischen Buchstaben als Überschrift über jedem Block von Wörtern mit gleichem Anfangsbuchstaben.
german-sty
Zusatz
Verwendet die Umlautauszeichnung der babel-Optionen german und ngerman.
Sortierung
Seitennummern
Markup und Layout Auto
Wenn zwei Einträge bis auf die ignorierten Zeichen identisch sind, werden diese Zeichen nicht ignoriert.
Tabelle 11.4: xindy-Standardmodule
694
11.3 xindy – Eine Alternative zu MakeIndex
Das automatische Modul latex-loc-fmts behandelt einen Unterschied zwischen xindy und MakeIndex. In MakeIndex kann man eine allgemeine Schreibweise zur Kapselung verwenden, um Seitenzahlen mit einem beliebigen Befehl einzuklammern (siehe Abschnitt 11.1.4). In xindy muss man für jeden Befehl eine eigene Referenzkategorie mit einer entsprechenden MarkupDefinition bereitstellen (siehe Seite 700). Das Modul latex-loc-fmts stellt Definitionen für die üblichsten Kapselungen (textbf und textit) bereit.
11.3.4 Stildateien für individuelle Lösungen Das xindy-Programm ist ein Werkzeug, das sich sehr gut konfigurieren lässt. Die gewählte Funktionalität wird in einer Stildatei angegeben. Das Programm texindy bietet für die meisten Zwecke einen bequemen Zugriff, indem es aus bestehenden Modulen eine virtuelle Stildatei erstellt. Wenn die angebotenen Funktionen erweitert, die Funktionalität geändert oder ein eigenes Indexierschema erstellt werden soll, muss xindy direkt verwendet und eine neue Stildatei geschrieben werden. Diese wird dann wie ein weiteres Modul behandelt. Die bestehenden xindy-Module können wiederverwendet werden. Dieser Abschnitt demonstriert, wie man xindy mit eigenen Stildateien verwenden kann. Er beschreibt die grundlegenden Konzepte des xindyProgramms und zeigt Beispiele für typische Erweiterungen. xindy-Stildateien können auch genutzt werden, um Stichwortverzeichnisse für Nicht-LaTEX-Dokumente zu erstellen (z.B. XML-Dokumente, andere Unicode-basierte Markup-Systeme). Die Funktionen, die für diesen Zweck erforderlich sind, werden in diesem Abschnitt nicht beschrieben, weil sie den Rahmen dieses Buches sprengen würden. Interessierte Leser finden weitere Informationen hierzu auf der Webseite von xindy. Um das Prinzip der xindy- Stildateien zu verstehen, wird im Folgenden näher auf das Basismodell eingegangen, das xindy verwendet. Abbildung 11.7 Das xindyauf der nächsten Seite zeigt die einzelnen Verarbeitungsschritte. Eine xindy- Verarbeitungsmodell Stildatei enthält Regeln zur Vereinheitlichung, zur Sortierung, zur Erstellung von Referenzbereichen und zur Spezifikation von Markup. Mithilfe dieser Deklarationen definiert sie, wie der Rohindex aus der .idx-Datei in einen getaggten Index in der .ind-Datei umgewandelt wird. • Vereinheitlichungsregeln geben an, wie aus einem Rohschlüssel ein Sortierschlüssel berechnet wird. Im Rohindex können Rohschlüssel, die den gleichen Eintrag repräsentieren, unterschiedlich geschrieben sein. Dies kann dadurch entstehen, dass LaTEX je nach Kontext Befehle expandiert oder auch nicht. Oder der Autor verwendet unterschiedliche Schreibweisen, z.B. ä, \"a oder "a. Durch die Regeln ist keine manuelle Eingabe zur Vereinheitlichung notwendig. Dieser Aspekt ist auch bei der Verwendung von LaTEX-Befehlen für Logos von Bedeutung, da xindy alle Befehle ignoriert. Wenn man z.B. \MF für METAFONT nutzt und in den Index aufnimmt, wird der Eintrag nicht unter “M” einsortiert. Mit einer dokumentspezifischen Vereinheitlichungsregel kann man für die korrekte Einordnung sorgen, ohne dass man jedes Mal \index{METAFONT@\MF} schreiben muss.
695
11
INDEXERSTELLUNG
Rohindex
Vereinheitlichungsregeln
xindy-Eingabe: Indexeinträge mit Schlüssel und Seitenverweis Vereinheitlichung von Indexschlüsseln: Zusammenführung von Eingabevarianten, die aufgrund von Eingabe- oder Markup-Unterschieden entstanden sind
normalisierter Index
Sortierregeln
Sortierung von Indexeinträgen nach Alphabetdefinition; Bildung von Buchstabengruppen
sortierter Index
Verweisregeln
Verweise gruppieren, mischen, bereinigen und zu Bereichen zusammenfassen
konsolidierter Index
Markup-Angaben
Hinzufügen von LaTEX-Markup
getaggter Index
xindy-Ausgabe: LaTEX-Eingabe
Abbildung 11.7: xindy-Verarbeitungsmodell
• Sortierregeln deklarieren Alphabete sowie die Reihenfolge innerhalb der Alphabete. Das Alphabet kann neben einzelnen Zeichen auch aus mehreren Zeichen bestehen, die zu Sortierungszwecken eine Einheit bilden (z.B. ll in spanisch). Diese neuen Zeichen müssen in Bezug zu anderen Zeichen eingeordnet werden. Ein xindy-Sprachmodul besteht aus AlphabetDeklarationen, Sortierregeln und Definitionen von Buchstabengruppen. • Nach der Sortierung werden Einträge mit demselben Sortierschlüssel in einem konsolidierten Indexeintrag zusammengefasst. Er enthält mehrere Seitenangaben und einen Druckschlüssel. Von den Rohschlüsseln wird der erste, der im Dokument auftaucht, als Druckschlüssel ausgewählt. Sortieren, Gruppieren und Mischen der Seitenangaben, aus denen die zu druckenden Seitenangaben zusammengestellt werden, ist eine komplexe Aufgabe, die auf unterschiedlichste Weise beeinflusst werden kann. • Markup-Angaben beschreiben, welche LaTEX-Befehle zu den konsolidierten Indexeinträgen hinzugefügt werden, wodurch ein getaggter Index entsteht, der als Eingabe für LaTEX verwendet werden kann.
696
11.3 xindy – Eine Alternative zu MakeIndex
Direkter Aufruf von xindy Die xindy-Optionen sind jenen, die mit texindy verfügbar sind, sehr ähnlich. Stildateien werden wie jedes andere Modul angegeben.
xindy [-qvV] [-o ind ] [-d magic ] [-t log] [-L sprache] [-C codepage] [-M modul ] [idx0 idx1 ...] -o ind
Verwendung von ind als Indexausgabedatei.
-M modul
Verwendung der xindy-Stildatei modul.xdy zur Konfiguration der Verarbeitung.
-L sprache Verwendung von sprache als Sprachkonfiguration für die Festlegung der Wortreihenfolge.
-C codepage Verwendung von codepage als interne Basiskodierung zur Sortierung. Diese Option wird zur Feinsteuerung der Sprachmodule verwendet. Sie ist nur für nicht lateinische Skripte erforderlich.
-q
Betrieb im stillen Modus.
-v
Betrieb im ausführlichen Modus.
-V
Ausgabe der Versionsnummer und Beendigung.
-d magic
Erzeugung von Debug-Meldungen; magic legt fest, welche xindyKomponente sie ausgeben soll.
Erstellen einer xindy-Stildatei Eine xindy-Stildatei startet in der Regel, indem sie vordefinierte Module lädt, die einen Großteil der gewünschten Funktionen bereitstellen. Es ist zu beachten, dass auch jene Module, die in Tabelle 11.4 auf Seite 694 als automatisch (auto) aufgeführt sind, explizit benannt werden müssen. Danach kann man eigene Definitionen bereitstellen, welche die bereits geladenen Module erweitern oder überschreiben.
;;; xindy Beispiel-Stildatei ;; Klausel für alle vordefinierten Sprachen von texindy (require "tex/inputenc/latin.xdy") ;; Vereinheitlichungsregeln zur Normalisierung des Markups ;; doppelter Backslash erforderlich, weil es eine regexp ist (merge-rule "\\PS *" "PostScript") ;; automatische texindy-Module verwenden (require "texindy.xdy") ;; Standard- und Zusatzmodule müssen angegeben werden (require "page-ranges.xdy") (require "book-order.xdy") ;; Markup-Änderung: ;; Seiten-Listeneinträge durch LaTeX-Befehl abgrenzen (markup-location-list :sep "\page ")
697
11
INDEXERSTELLUNG
Stildatei-Syntax
Das vorherige Beispiel einer xindy-Stildatei zeigte einige der Syntaxelemente, die verfügbar sind. Hier ein paar genauere Definitionen: • Prinzipiell besteht eine Stildatei aus einer Liste von deklarativen Klauseln in Klammern, die mit einem Deklarationsnamen beginnt, gefolgt von mehreren Parametern. • Ein Parameter kann entweder mit einer Zeichenkette oder einer Option beginnen. Eine Option hat ein Schlüsselwort, geschrieben als :opt, und kann einen Parameter haben, üblicherweise eine Zeichenkette, aber auch eine Zahl oder einen festen Wert wie none. Wie der Name andeutet, sind Optionen nicht zwingend erforderlich. Welche Optionen gültig sind, hängt von der Funktion ab. Ein Parameter kann auch aus einer Liste von Parametern in Klammern bestehen, wie einige der nachfolgenden Beispiele zeigen. • Kommentare beginnen mit einem Semikolon und enden am Zeilenende. Die Beispiele zeigen typische Verwendungen für den Einsatz unterschiedlich vieler Semikolons: eines für Kommentare im Absatz (nach xindyKlauseln), zwei für Absatzkommentare vor Programmcode und drei für Kommentare mit „Abschnittsüberschriften“ für die Stildateien. Dies ist jedoch nur eine Konvention – in allen Fällen beginnt der Kommentar nach dem ersten Semikolon. • Zeichenketten werden in Anführungszeichen angegeben. Zeilenumbrüche sind erlaubt. Innerhalb einer Zeichenkette gilt die Tilde als Maskierungszeichen, die dem folgenden Buchstaben eine besondere Bedeutung zuweist. ~n gibt beispielsweise einen Zeilenumbruch an.
Vereinheitlichungs- und Sortierregeln Vereinheitlichungsregeln helfen, Rohindexeinträge anzugleichen, bevor diese sortiert und gruppiert werden. Sie können verwendet werden, um unterschiedliche Notationen zu vereinheitlichen und den Eintrag von den MarkupAngaben zu trennen, die für die Sortierung irrelevant sind. Wenn verschiedene Indexeinträge zusammengeführt werden, erscheinen sie als ein Eintrag und haben folglich dasselbe Aussehen in der Ausgabe. Genauer gesagt sehen alle so aus wie der erste Eintrag, der im Dokument vorkommt. Man kann übrigens nur einzelne Wörter vereinheitlichen, nicht ganze Ausdrücke. Eine Vereinheitlichungsregel hat zwei Parameter. Sie deklariert, dass alle Vorkommen des ersten Parameters innerhalb eines Wortes durch den zweiten Parameter ersetzt werden. Innerhalb des zweiten Parameters können die virtuellen Zeichen ~b und ~e verwendet werden: ~b wird vor allen anderen Zeichen einsortiert, während ~e nach allen Zeichen kommt. Diese beiden virtuellen Zeichen werden nicht ausgegeben, weil Vereinheitlichungsregeln dazu verwendet werden, den Sortierschlüssel aus dem Rohschlüssel zu erzeugen – und Sortierschlüssel sind interne Bezeichner der Einträge. Indexeinträge Zum Beispiel können im Stichwortverzeichnis eines Atlasses Orte, die St vereinheitlichen im Namen haben, auch als Sankt geschrieben werden. Diese unterschiedlichen Schreibweisen sollten trotzdem in einem Indexeintrag vereinheitlicht werden. Mit anderen Worten: Die Indexierung von St Augustin und Sankt
698
11.3 xindy – Eine Alternative zu MakeIndex
Augustin sollte nur einen Indexeintrag ergeben. ( merge-rule "St"
"Sankt" )
In einer Vereinheitlichungsregel kann man auch ein Muster (regulärer Ausdruck) und eine Ersatzzeichenkette angeben. Sogenannte extended Vereinheitlichung mit regexps stellen die Standardeinstellung dar, sie sind im Standard POSIX regulären Ausdrücken 1003.2 definiert. Auf UNIX-Systemen findet man ihre Beschreibung in der Manualseite von egrep. Man kann auch reguläre Basisausdrücke mit der Option :bregexp in der Vereinheitlichungsregel verwenden. Die Ersatzzeichenkette kann sich auf Unterausdrücke beziehen. Dies führt zwar zu leistungsfähigen Definitionen, die aber häufig die Erstellung und die Fehlersuche erschweren. Zu beachten ist außerdem, dass die Verwendung von regulären Ausdrücken die Verarbeitung verlangsamt. Um XML-Tags ohne spitze Klammern zu indexieren, kann man Folgendes schreiben:
( merge-rule "" "\1" ) Dies bewirkt, dass \index{} und \index{HTML} in einem Eintrag zusammengefasst werden, was möglicherweise nicht der gewünschte Effekt ist. Um beide separat, aber nacheinander aufzuführen, kann man in HTML~e umwandeln, und zwar folgendermaßen:
( merge-rule "" "\1~e" ) Sortierregeln geben an, wie Zeichen oder Zeichenfolgen sortiert werden (d.h. an welcher Stelle sie im Alphabet platziert werden sollen). Eine Sortierregel besteht aus zwei Zeichenketten. Die erste Zeichenkette wird wie die zweite sortiert. In der zweiten kann mithilfe von ~b und ~e die Sortierreihenfolge angegeben werden (Erläuterung siehe oben). Buchstabengruppen Das xindy-Programm überprüft jede Buchstabengruppe, um festzustellen, ob sie mit dem Präfix eines Sortierschlüssels in einem Eintrag übereinstimmt. Die längste Übereinstimmung weist den Indexeintrag dieser Buchstabengruppe zu. Wird keine Übereinstimmung gefunden, dann wird der Indexeintrag in die Gruppe default verschoben. Die folgenden Definitionen fügen alle Einträge mit den angegebenen Prä- Buchstabengruppen kombinieren fixen in dieselbe Buchstabengruppe ABC ein:
( define-letter-group "ABC" :prefixes ("a") ) ( define-letter-group "ABC" :prefixes ("b") ) ( define-letter-group "ABC" :prefixes ("c") ) Bei Stichwortverzeichnissen, die etwas unausgewogen sind, z.B. im Buch- Zusätzliche staben X, empfiehlt es sich manchmal, eine zusätzliche Buchstabengruppe Buchstabengruppen einzufügen. Die folgende Definition fügt eine zusätzliche Gruppe namens xsl
699
11
INDEXERSTELLUNG
ein, die alle Einträge enthält, die mit xsl: beginnen. Diese Einträge werden vor allen anderen Einträgen einsortiert, die mit x beginnen.
( define-letter-group "xsl" :before "x" :prefixes ("xsl:") ) Referenzbereiche Die Liste der Verweise hinter einem Indexeintrag kann aus mehreren Arten von Referenzen bestehen, die in einer unter Umständen dokumentabhängigen Reihenfolge angeordnet werden müssen. Möglicherweise kommen römische Zahlen vor arabischen und diese wiederum vor Kombinationen aus Buchstaben und arabischen Zahlen. Dieses Schema tritt üblicherweise in einem Buch auf, das ein Vorwort, Haupttext und Anhänge hat. Auch innerhalb einer Referenzart werden die Verweise geordnet. Die Verweise können in Bereichen wie 10–15 oder 5ff zusammengefasst werden. Wie man sieht, bietet xindy vielfältige Möglichkeiten zur Sortierung und Bereichsbildung. Minimale Um beispielsweise die minimale Länge für automatisch generierte SeitenSeitenbereichslänge bereiche zu ändern, muss man lediglich die Definition für Seitenbereiche ändern:
( define-location-class "pages" ("arabic-numbers") :min-range-length 4 ) Seitenbereiche unterdrücken
Um für römische Zahlen die Generierung von Seitenbereichen zu deaktivieren, muss die Option :min-range-length folgendermaßen geändert werden:
( define-location-class "pages" ("roman-numerals-lowercase") :min-range-length none )
Komplexe Referenzen
Wenn der Rohindex Verweise mit nicht numerischen Elementen und eine ungewöhnliche Syntax enthält (z.B. Pasta::II.4), muss man ein spezielles Alphabet definieren, um xindy mitzuteilen, wie es die Referenzen sortieren soll. Damit kann man dann eine Referenzart definieren, welche die Syntax für Verweise, einschließlich Trennzeichen beschreibt:
( define-alphabet "my-chapters" ("Vorspeisen" "Pasta" "Fleisch" "Dessert") ) ( define-location-class "my-index" ("my-chapters" :sep "::" "roman-numerals-uppercase" :sep "." "arabic-numbers") ) Referenzen mit spezieller Formatierung Das xindy-Programm nutzt ein sehr flexibles Verfahren zur Formatierung, Sortierung und Gruppierung von Ortsangaben mit besonderer Bedeutung. Dazu markiert man im Dokument Indexeinträge, die eine spezielle Formatierung erhalten sollen, wie \index{schlüsselwort |definition}. In xindy definiert man dann ein Attribut mit entsprechenden Markup-Angaben.
700
11.3 xindy – Eine Alternative zu MakeIndex
Man kann auch festlegen, wie verschiedene Referenzarten interagieren sollen: ob sie vermischt oder separat aufgeführt werden, zusammengefasste Bereiche zwischen ihnen zugelassen sind oder Einträge, die Teil eines Bereiches sind, unterdrückt werden oder nicht. Die folgenden Beispiele zeigen verschiedene Variationen, wie Verweise mit spezieller Formatierung verarbeitet werden können. Input: Beispiel 1: mischen, zusammenfassen, unterdrücken Beispiel 2: mischen, zusammenfassen Beispiel 3: nicht mischen, zuerst Definitionen
1 4 5 6 7 7 9 10 1 4-7 9 10 1 4-7 7 9 10 7 9 1 4-7 10
Beispiel 1: Seitenangaben mischen, zusammenfassen und einzelne Seiten unterdrücken.
;; Definition und Standard mischen (define-attributes (("definition" "default"))) ;; zusammenfassende Bereiche zulassen, innerhalb eines Bereiches ;; Verweise auf Definitionen unterdrücken (merge-to "definition" "default" :drop) ;; Markup definieren (markup-location :attr "definition" :open "\textbf{" :close "}" ) Beispiel 2: Seitenangaben mischen und zusammenfassen.
;; Definition und Standard vermischen (define-attributes (("definition" "default"))) ;; zusammenfassende Bereiche zulassen, Verweise auf Definition ;; innerhalb eines Bereiches erhalten (merge-to "definition" "default") ;; Markup definieren (markup-location :attr "definition" :open "\textbf{" :close "}" ) Beispiel 3: Seitenangaben nicht mischen, Definitionen zuerst auflisten.
;; Definition und Standard separat, Definitionen zuerst (define-attributes (("definition") ("default"))) ;; Markup definieren (markup-location :attr "definition" :open "\textbf{" :close "}" ) Zu beachten ist, dass define-attributes einen Parameter in Klammern besitzt. Er besteht entweder aus einer Liste von Attributnamen, die in Klammern eingeschlossen sind, oder einer Liste von Zeichenketten, die jeweils
701
11
INDEXERSTELLUNG
einzeln eingeklammert werden. Alle Attribute, die sich innerhalb eines Klammernpaares befinden, werden gemischt. Bei mehreren Attributen würde ein Ausdruck wie
(("definition" "important") ("default")) angeben, dass Definitionen mit der Gruppe der wichtigen Verweise gemischt werden können, aber nicht mit Standardverweisen.
11.4 Beeinflussung des Index mit LATEX-Funktionen Dieser Abschnitt geht auf LaTEX-Funktionen ein, welche die Indexerstellung unterstützen. Er zeigt Möglichkeiten auf, um das Layout des Stichwortverzeichnisses zu verändern und mehrere Stichwortverzeichnisse zu erzeugen.
11.4.1 Ändern des Layouts Man kann die Umgebung theindex neu definieren, die standardmäßig zum Drucken des Index verwendet wird. Das Layout der theindex-Umgebung und die Definition der Befehle \item , \subitem und \subsubitem werden in den Klassendateien article, book und report festgelegt. In der book-Klasse findet man folgende Definitionen:
\newenvironment{theindex} {\@restonecoltrue\if@twocolumn\@restonecolfalse\fi \columnseprule \z@ \columnsep 35\p@ \twocolumn[\@makeschapterhead{\indexname}]% \@mkboth{\MakeUppercase\indexname}{\MakeUppercase\indexname}% \thispagestyle{plain}\parindent\z@ \parskip \z@\@plus .3\p@\relax \let\item\@idxitem} {\if@restonecol\onecolumn\else\clearpage\fi} \newcommand\@idxitem {\par\hangindent 40\p@} \newcommand\subitem {\par\hangindent 40\p@ \hspace*{20\p@}} \newcommand\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}} Auch wenn dieser Programmcode in einer recht niedrigen internen Sprache programmiert wurde, ist es wahrscheinlich nicht schwer zu entziffern, was er bewirkt. Zunächst prüft er auf zweispaltigen Modus und speichert das Ergebnis. Anschließend setzt er einige Abstandsparameter, setzt den Seitenstil wieder auf plain und ruft \twocolumn auf. Schließlich ändert er \item, um \@idxitem auszuführen. Dieser erzeugt einen Absatz mit hängendem Einzug von 40 Punkten. Eine flexiblere Neuimplementierung (die den Befehl ifthen verwendet) könnte folgendermaßen aussehen:
\renewenvironment{theindex} {\ifthenelse{\boolean{@twocolumn}}% {\setboolean{@restonecol}{false}}% {\setboolean{@restonecol}{true}}% \setlength\columnseprule{0pt}% \setlength\columnsep{35pt}%
702
11.4
Beeinflussung des Index mit LATEX-Funktionen
\twocolumn[\chapter*{\indexname}]% \markboth{\MakeUppercase\indexname}% {\MakeUppercase\indexname}% \setlength\parindent{0pt}% \setlength\parskip{0pt plus 0.3pt}% \thispagestyle{plain}% \let\item\@idxitem } {\ifthenelse{\boolean{@restonecol}}{\onecolumn}{\clearpage}} Durch Anpassung dieser Definition sind kleinere Änderungen möglich, wie etwa die Änderung des Seitenstils oder der Spaltentrennung. Ebenso kann der Index anstatt aus zwei aus drei Spalten bestehen. Dafür lässt sich das multicol-Paket und die multicols-Umgebung verwenden:
\renewenvironment{theindex}{% \begin{multicols}{3}[\chapter*{\indexname}][10\baselineskip]% \addcontentsline{toc}{chapter}{\indexname}% \setlength\parindent{0pt}\pagestyle{plain}\let\item\@idxitem} {\end{multicols}} Auf der aktuellen Seite werden mindestens 10 Zeilen Freiraum benötigt; ansonsten beginnt der Index auf einer neuen Seite. Neben der Erstellung eines Titels an erster Position wird im Inhaltsverzeichnis (.toc) die Überschrift als „Kapitel“ eingegeben und der Seitenstil auf plain geändert. Danach wird der \item-Befehl neu definiert, um die Indexeinträge handhaben zu können (siehe oben). Die Einträge selbst werden mithilfe der multicols-Umgebung in drei Spalten gesetzt.
11.4.2 showidx, repeatindex, tocbibind, indxcite – Kleine Helfer Es gibt verschiedene kleine nützliche LaTEX-Pakete, welche die Indexerstellung unterstützen. Eine Auswahl wird in diesem Abschnitt vorgestellt, weitere sind im Online-Katalog [171] aufgeführt. Das Paket showidx (von Leslie Lamport) kann helfen, die Einträge im Index zu verbessern und mögliche Probleme zu lokalisieren. Es gibt alle \indexBefehle im Rand der ausgedruckten Seite aus. Abbildung 11.3 auf Seite 676 zeigt die Benutzung. Das Paket repeatindex (von Harald Harders) wiederholt die oberste Ebene eines Indexeintrags, wenn die Seite oder die Spalte innerhalb einer Liste von Untereinträgen umbrochen wird. Dies hilft dem Leser, den Untereintrag dem zugehörigen Haupteintrag zuzuordnen. Das Paket tocbibind (von Peter Wilson) kann verwendet werden, um das Inhaltsverzeichnis, die Bibliographie und den Index im Inhaltsverzeichnis hinzuzufügen. Für weitere Informationen zu diesem Paket siehe Seite 51. Das Paket indxcite (von James Ashton) erzeugt automatisch ein Autorenverzeichnis aus den Referenzen, die mit BIBTEX eingetragen wurden. Diese Funktionalität ist auch mit den Bibliographiepaketen natbib und jurabib verfügbar, die beide ausführlich in Kapitel 12 beschrieben werden.
Indexeinträge im Rand darstellen
Seitenumbrüche intelligent steuern
Auf listung im Inhaltsverzeichnis Automatisches Autorenverzeichnis
703
11
INDEXERSTELLUNG
11.4.3 index – Erzeugen mehrerer Indexe Das index-Paket (geschrieben von David Jones und verteilt als Teil des camelPaketes) verbessert die Indexierung durch LaTEX in mehreren Bereichen: • Mehrfachindexe werden unterstützt. • Zur Erstellung der Rohindex-Dateien (wie die Standard-.idx-Datei) wird ein zweistufiger Prozess verwendet, ähnlich dem, der zur Erstellung der .toc-Datei verwendet wird. Zunächst werden die Indexeinträge in die .aux-Datei geschrieben und dann am Ende des Laufs in die .idx-Datei kopiert. Bei diesem Ansatz geht auch bei großen Dokumenten, die aus mehreren Dateien bestehen (die mit dem \include-Befehl eingebunden wurden), der Index nicht mehr verloren, wenn nur ein Teil des Dokumentes mit \includeonly formatiert wird. Dieses Verfahren erschwert jedoch die Erstellung eines Kapitelindex. • Für den \index-Befehl wird eine Sternform eingeführt. Das Argument des Befehls wird nicht nur in den Index eingefügt, sondern auch im laufenden Text gesetzt. • Um die Eingabe zu erleichtern, aktiviert der Befehl \shortindexingon eine Kurzschreibweise. Damit kann man anstelle von \index{foo} die Schreibweise ^{foo} und anstelle von \index*{foo} die Schreibweise _{foo} verwenden. Diese Kurzschreibweisen werden mit dem Befehl \shortindexingoff ausgeschaltet. Da der Unterstrich und der Zirkumflex im Formelmodus eine besondere Bedeutung haben, können diese Kurzschreibweisen dort nicht verwendet werden. • Das Paket umfasst die Funktionalität des showidx-Paketes. Mit dem Befehl \proofmodetrue können Indexeinträge in den Rand geschrieben werden. Stil und Größe der Schrift im Rand können mit dem Befehl \indexproofstyle{stil } angepasst werden. Stilinformationen für diese Randnotizen werden in seinem Argument eingegeben (zum Beispiel \indexproofstyle{\footnotesize\itshape}). • Bei Verwendung des index-Paketes wird das Argument nie expandiert. In Standard-LaTEX wird bei Verwendung von \index{\command} die Expansion von \command manchmal in die .idx-Datei geschrieben (siehe Abschnitt 11.2.5 auf Seite 687). Mit dem index-Paket wird \command selbst stets in die .idx-Datei geschrieben. Das ist in den meisten Fällen hilfreich, aber für Makroentwickler kann es zur Stolperfalle werden. In Abschnitt 11.1.7 wird empfohlen, dass man Befehle definiert, die automatisch Indexeinträge hinzufügen. Diese Befehle erwarten häufig, dass \index ihr Argument expandiert und funktionieren deshalb möglicherweise nicht, wenn das index-Paket verwendet wird. Das Ergebnis der automatischen Indexierung muss auf jeden Fall überprüft werden – dies ist allerdings in jedem Fall empfehlenswert. Ein neuer Index kann mit dem Befehl \newindex deklariert werden. Der Befehl \renewindex , der eine identische Syntax hat, wird zur Neudefinition von bestehenden Indexen verwendet.
704
11.4
Beeinflussung des Index mit LATEX-Funktionen
\newindex{tag}{roh-erw }{verarb-erw }{indextitel } Das erste Argument tag ist ein Kurzbezeichner, das als Verweis auf den Index verwendet wird. Insbesondere die Befehle \index und \printindex werden neu definiert, so dass sie ein optionales Argument annehmen können – nämlich das Tag des Index, auf den sie verweisen. Wenn dieses optionale Argument fehlt, wird der Index mit dem Tag „default“ verwendet. Dies entspricht dem normalen Index. Das zweite Argument roh-erw gibt die Erweiterung der Rohindex-Datei an, in welche LaTEX die unverarbeiteten Einträge für diesen Index schreiben soll (beim Standardindex ist dies .idx). Das dritte Argument verarb-erw gibt die Erweiterung der Indexdatei an, in welcher LaTEX den verarbeiteten Index erwartet (beim Standardindex ist dies .ind). Das vierte Argument indextitel gibt den Titel an, den LaTEX am Anfang des Index ausgibt. Das nächste Beispiel zeigt die Einstellung, die zur Erstellung dieses Buches verwendet wurde. Die Präambel enthielt folgende Einstellung:
\RequirePackage{index} \proofmodetrue % zum Korrekturlesen der Indexeinträge \newindex{xauthor}{adx}{and}{Personen} \newindex{xcmds}{cdx}{cnd}{Index der Befehle und Konzepte} Im hinteren Teil des Buches wurde der Index dann mit den Befehlen \printindex[xcmds] \printindex[xauthor] ausgegeben. Für jede generierte Rohindexdatei (z.B. lb2.adx für die Liste der Autoren) wurden die Einträge mit MakeIndex bearbeitet, um die entsprechende formatierte Indexdatei für LaTEX zu erzeugen:
makeindex -o lb2.and -t lb2.alg lb2.adx All diese Hilfsmittel tragen dazu bei, die richtigen Seitennummern zu ermitteln, aber die eigentliche Schwierigkeit bleibt bestehen: nützliche Indexeinträge für den Leser auszuwählen. Dieses Problem muss der Anwender bisher noch selbst lösen (wenn er Glück hat, mit Hilfe). Auch der Index dieses Buches wurde von einem professionellen Indexgestalter zusammengestellt, nämlich Richard Evans von Infodex Indexing Services in Raleigh, North Carolina. Richard arbeitete eng mit Frank zusammen, um einen umfassenden Index zu erzeugen, der den Lesern nicht nur hilft, Namen von Objekten (Paketen, Programmen, Befehlen usw.) zu finden, sondern auch Aufgaben, Konzepte und Ideen, die in dem Buch beschrieben wurden. Doch hierzu seine eigenen Worte (aus der Infodex FAQ unter http://www.mindspring.com/~infodex): Frage: Warum braucht man einen Indexexperten? Kann der Computer nicht den Index erzeugen? Antwort: Genau so gut, wie ein Textverarbeitungsprogramm das Buch schreiben kann. Indexe sind kreative Schöpfungen, die den Intellekt und die Analyse des Menschen erfordern. LaTEX kann das Index-Markup verarbeiten, aber nur ein menschlicher Indexexperte kann entscheiden, was ausgezeichnet werden soll. Ein großes Dankeschön an Richard für seine hervorragende Arbeit.
705
K A P I T E L
12
Quellenverweise 12.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
707
12.2 Das numerische Schema. . . . . . . . . . . . . . . . . . . . . . . . . .
715
12.3 Das Autor-Jahr-Schema . . . . . . . . . . . . . . . . . . . . . . . . . .
722
12.4 Das Autor-Nummer-Schema . . . . . . . . . . . . . . . . . . . . . . .
737
12.5 Das Kurztitelschema . . . . . . . . . . . . . . . . . . . . . . . . . . . .
741
12.6 Mehrere Bibliographien in einem Dokument . . . . . . . . . . . .
771
12.1 Einleitung Quellenverweise sind Querverweise auf bibliographische Daten, wie z.B. auf Veröffentlichungen mit weiteren Informationen zu einem Thema, sowie Quellenangaben zu angeführten Zitaten. Man muss sicherlich nicht alles durch Quellen belegen, aber Hintergrundinformationen zu strittigen Fragen und Literaturhinweise zu verwendetem Material sollten durchaus angegeben werden. Es gibt viele verschiedene Möglichkeiten, Bibliographien und Quellenverzeichnisse zusammenzustellen. Nötigenfalls lassen sie sich manuell erstellen; normalerweise werden sie jedoch automatisch aus einer Datenbank mit bibliographischen Informationen erzeugt. Dieses Kapitel stellt einige der zahlreichen Darstellungsformen bibliographischer Quellen vor und beleuchtet verschiedene Traditionen, in einem Dokument auf solche Quellen zu verweisen. Zu Beginn erfolgt eine kurze Einführung in die wichtigsten, heute üblichen Zitierschemata. Darauf folgt eine Beschreibung des Standard-Markups für Bibliographien in LaTEX und der Schnittstelle zu dem Programm BIBTEX, mit dessen Hilfe sich solche Listen automatisch aus einer (passend vorbereiteten) Datenbank erzeugen lassen. In Kapitel 13 folgen anschließend noch nähere Einzelheiten zu BIBTEX. Im vorliegenden Kapitel liegt das Augenmerk zunächst darauf, wie man Literaturverzeichnisse mit BIBTEX erzeugen kann. Auf Grundlage dieses Wissens beschäftigt sich das Kapitel dann intensiv mit der Frage, auf welche Weise LaTEX die verschiedenen Zitierschemata unterstützt. Als die erste Auflage dieses Buches geschrieben wurde, unterstützte LaTEX im Wesentlichen das „numerische“ System für Quellenverweise. Ein
12
QUELLENVERWEISE
Jahrzehnt später sieht die Lage völlig anders aus: Heute werden die meisten wichtigen Zitierschemata durch Erweiterungspakete gut unterstützt. Das Kapitel schließt mit einigen Paketen, mit deren Hilfe man in einem Dokument mehrere Literaturverzeichnisse führen kann. Bei manuell erstellten Verzeichnissen ist das nicht weiter schwierig. Es wird jedoch zu einer Herausforderung, wenn man gleichzeitig noch Daten mit BIBTEX austauschen möchte.
12.1.1 Verweisschemata für Bibliographien Es gibt vier gängige Methoden um auf Quellen zu verweisen: per „Kurztitel“, per „Autor und Jahr“, per „Autor und Nummer“ sowie „rein numerisch“. Die erste Form findet sich vornehmlich in geisteswissenschaftlicher Literatur, die zweite wird hauptsächlich in natur- und sozialwissenschaftlichen Werken verwendet. Die anderen beiden Schemata sind weniger verbreitet, obgleich die letzte in der LaTEX-Welt recht üblich ist, da sie von Leslie Lamport aktiv gefördert wurde und ursprünglich die einzige in LaTEX unterstützte Verweisform war. Abseits von LaTEX ist ihre Variante „numerisch nach erstem Vorkommen“ ebenfalls recht beliebt. Im Kurztitelverfahren wird der Verweis auf eine Quelle direkt im Text Das Kurztitelschema aufgeführt, entweder eingebettet oder als Fußnote, oftmals in der Form „Hart, Hart’s Rules, S. 52“. Im Kontext der Veröffentlichung kann auch die Form „Goossens et al., LGC“ auftauchen, wenn sich eine Abkürzung des Titels eingebürgert hat. Es gibt viele Abwandlungen. So kann z.B. ein Werk, wenn es das erste Mal vorkommt, mit sehr detaillierten Daten zur Quelle angeführt werden und spätere Verweise benutzen dann eine kürzere Form, etwa den Namen des Autors und einen Kurztitel oder das Erscheinungsjahr. Bei mehreren, direkt aufeinander folgenden Verweisen auf dieselbe Quelle findet sich auch a.a.O. oder Ebd. (bzw. Ibid. in englischen Texten), anstelle eines wiederholten Verweises. Das jurabib-Paket bietet ein Kurztitelsystem mit verschiedensten Anpassungsmöglichkeiten (siehe Abschnitt 12.5.1). Da in diesem System normalerweise beim ersten Vorkommen einer Quelle ein ausführlicher Literaturhinweis erfolgt, kann man auf ein Quellenverzeichnis oder eine Bibliographie, die alle zitierten Werke an einer Stelle auflisten, verzichten. Im Autor-Jahr-System (häufig auch als Harvard-System bezeichnet, nach Das einer seiner bekannteren setzerischen Varianten) erfolgen die QuellenangaAutor-Jahr-Schema ben ebenfalls direkt im Text. In diesem Fall werden jedoch der Name des Autors (oder der Autoren) und das Erscheinungsjahr aufgeführt. Der ausführliche Literaturhinweis steht in einem Literaturverzeichnis oder einer Bibliographie. Wenn ein Autor in einem Jahr mehr als ein Werk veröffentlicht hat, wird das Jahr durch einen Kleinbuchstaben ergänzt (z.B. 2001a, 2001b). Im Laufe der Jahre gab es viele Versuche, Autor-Jahr-Quellenverweise in LaTEX zu unterstützen. Mit dem natbib-Paket (das in Abschnitt 12.3.2 näher beschrieben wird) liegt nun eine sehr flexible und umfassende Lösung vor. In allen Zitierschemata, die mit Autorennamen arbeiten, wird auf Werke von drei oder mehr Autoren normalerweise mit dem Namen des ersten gefolgt von et al verwiesen. Gerade im Autor-Jahr-Schema kann dieses Verfahren zu mehrdeutigen Verweisen führen, wenn verschiedene Autorengruppen um den
708
12.1
Einleitung
gleichen Hauptautor im gleichen Jahr ein Werk veröffentlicht haben. Dieses Problem1 wird im nächsten Beispiel deutlich.
Einträge mit mehreren Autoren können problematisch sein, z.B. (Goossens et al. 1997) und (Goossens et al. 1997) oder noch schlimmer (Goossens et al. 1997; Goossens et al. 1997). Literatur Goossens, M., S. Rahtz, and F. Mittelbach (1997). The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Tools and Techniques for Computer Typesetting. Reading, MA, USA: Addison-Wesley Longman. Bsp. 12-1-1
Goossens, M., B. User, J. Doe, et al. (1997). Mehrdeutige quellenverweise. Eingereicht bei IBM Journal of Research and Development.
\usepackage{chicago} \bibliographystyle{chicago} Einträge mit mehreren Autoren können problematisch sein, z.B. \shortcite{LGC97} und \shortcite{test97} oder noch schlimmer \shortcite{LGC97,test97}. \bibliography{tex}
Die Bibliographie des vorigen Beispiels wurde aus der BIBTEX-Beispieldatenbank tex.bib erzeugt, die in Abbildung 12.2 auf Seite 714 zu sehen ist. Sie dient als Grundlage für die meisten Beispiele in diesem Kapitel. Hier wurde der BIBTEX-Stil chicago verwendet, welcher Bibliographien und Verweise entsprechend der Vorschläge des Werkes The Chicago Manual of Style [38] gestalten soll. Mehrdeutige Quellenangaben lassen sich in diesem Fall beheben, indem man alle Autoren anführt. Dieser Lösungsansatz erzeugt jedoch sehr lange Verweise und ist ab einer bestimmten Anzahl von Autoren schlichtweg nicht mehr praktikabel. Stattdessen kann man auch Kleinbuchstaben an die Jahreszahl anhängen, auch wenn die Verweise sich eigentlich auf verschiedene Autorengruppen beziehen. Diese Strategie wird z.B. in [29] befürwortet. Ein manuell erstelltes Literaturverzeichnis (vgl. Abschnitt 12.1.2) lässt sich leicht in dieser Weise abwandeln. Für BIBTEX benötigt man jedoch eine BIBTEX-Stildatei, die solche Fälle erkennt und automatisch die passenden Daten erzeugt. Der Stil chicago eignet sich hier z.B. nicht, aber alle BIBTEX-Stile, die mit makebst (siehe Abschnitt 13.5.2) erstellt wurden, verfügen über diese Funktion:
Einträge mit mehreren Autoren könnten problematisch sein, wie z.B. Goossens et al. [1997a] und Goossens et al. [1997b] oder sogar Goossens et al. [1997a,b]. Oder auch nicht. Literatur M. Goossens, S. Rahtz, and F. Mittelbach. The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Tools and Techniques for Computer Typesetting. Addison-Wesley Longman, Reading, MA, USA, 1997a. ISBN 0-201-85469-4. Bsp. 12-1-2
M. Goossens, B. User, J. Doe, et al. Mehrdeutige quellenverweise. Eingereicht bei IBM J. Res. Dev., 1997b.
\usepackage{natbib} \bibliographystyle {abbrvnat} Einträge mit mehreren Autoren könnten problematisch sein, wie z.B. \cite{LGC97} und \cite{test97} oder sogar \cite{LGC97,test97}. Oder auch nicht. \bibliography{tex}
1 Weitere Probleme mit diesem und vielen anderen BIBT X-Stilen sind die Verwendung fest E verdrahteter sprachspezifischer Texte, wie etwa „and“, und die Konvertierung von Titeln in Kleinbuchstaben, was in diesem und einigen weiteren Beispielen zu sichtbar wird. Anpassungsmöglichkeiten werden in diesem und dem nächsten Kapitel diskutiert.
709
12
QUELLENVERWEISE
Das Autor-NummerSchema
Das numerische Schema
Numerisch nach erstem Vorkommen
Im Autor-Nummer-System werden die Verweise aus dem Namen des Autors (oder der Autoren) und einer Nummer, die normalerweise in runden oder eckigen Klammern steht, zusammengesetzt. Die Nummer gibt an, welches der Werke des Autors gerade zitiert wird. Im zugehörigen Literaturverzeichnis werden alle Veröffentlichungen je Autor (oder Autorengruppe) durchnummeriert. In der LaTEX-Welt ist dieses System unüblich, da es sich nur schwer manuell erstellen lässt. Soweit den Autoren dieses Buches bekannt ist, wird dieses Schema zur Zeit nicht von BIBTEX unterstützt, was sich jedoch zukünftig noch ändern kann. Eine Variante dieses Schemas besteht darin, alle Publikationen fortlaufend zu nummerieren. Dazu gibt es auch passende BIBTEX-Stile. Im numerischen System, schließlich, werden alle Werke in der Bibliographie fortlaufend nummeriert. Quellenverweise im Text verweisen auf diese Nummern, die normalerweise in eckigen oder runden Klammern stehen. Manchmal werden stattdessen auch hochgestellte Nummern verwendet. In einer leichten Abwandlung, die als „Alpha“-Stil bekannt ist, bestehen die Verweise aus dem Namen des Autors und dem Erscheinungsjahr des Werkes. Das bibliographische Label und der Quellenverweis würden dann z.B. „[Knu86]“ lauten. Ein Argument gegen dieses System – das z.B. in The Chicago Manual of Style [38] angeführt wird – sind die hohen Publikationskosten, da das nachträgliche Hinzufügen oder Löschen eines Quellenverweises eine neue Nummerierung nach sich ziehen kann, so dass viele Seiten des Manuskriptes auf kostenintensive (und fehleranfällige) Weise geändert werden müssen. Durch automatisch erzeugte Querverweise, wie LaTEX sie erzeugt, verliert dieses Argument teilweise seine Gültigkeit. Tatsächlich ist das nummerierte System in LaTEX die voreingestellte Variante. Eine recht beliebte Form des numerischen Systems nummeriert die Werke fortlaufend nach ihrem ersten Vorkommen im Text (und führt sie auch in dieser Reihenfolge in der Bibliographie auf). Sie lässt sich mit LaTEX ziemlich leicht erzielen. Die nächsten beiden Abschnitte und Abschnitt 12.2.3 erklären, wie man Quellenverweise im Inhaltsverzeichnis vermeidet, damit sie die erwartete Reihenfolge nicht durcheinander bringen.
12.1.2 Markup für Quellenverweise und Bibliographie Die LaTEX-Standardumgebung zum Erzeugen eines Literaturverzeichnisses oder einer Bibliographie heißt thebibliography. Gemäß ihrer Voreinstellung generiert sie automatisch eine passende Überschrift und richtet eine vertikale Liste ein, in der jede Publikation als einzelner Eintrag erscheint.
\begin{thebibliography}{breitestes label } \bibitem[label1]{zitierschlüssel1} bibliographische information \bibitem[label2]{zitierschlüssel2} bibliographische information ... \end{thebibliography} Das Argument breitestes label dient zur Bestimmung des richtigen Einzugs für die einzelnen Einträge. Wenn die Werke fortlaufend nummeriert sind, sollte es z.B. die Anzahl der Einträge enthalten.
710
12.1
Einleitung
Einzelne Publikationen werden mit einem \bibitem-Befehl eingeleitet. Sein obligatorisches Argument ist ein eindeutiger zitierschlüssel, mit dem im Text auf dieses Werk verwiesen wird. Das optionale Argument definiert eine textliche Entsprechung, die im Quellenverweis und als label im Verzeichnis verwendet wird. Sofern dieses Argument nicht angegeben ist, werden die Publikationen entsprechend der Voreinstellung mit arabischen Ziffern nummeriert. Innerhalb einer Publikation kann man mit dem Befehl \newblock umfangreichere Informationen voneinander absetzen. Je nach von der Klasse erzeugtem Layout kann dies durch einen normalen Freiraum, zusätzliche Abstände oder eine neue Zeile geschehen.
Literatur [1] Goossens, M., S. Rahtz und F. Mittelbach (1997). The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Reading, MA, USA: Addison-Wesley Longman. Bsp. 12-1-3
[2] Goossens, M., B. User, J. Doe (1997). Mehrdeutige Quellenverweise.
\begin{thebibliography}{2} \bibitem{LGC97} Goossens, M., S.~Rahtz und F.~Mittelbach (1997). \newblock \emph{The \LaTeX{} Graphics Companion: Illustrating Documents with \TeX{} and PostScript}. \newblock Reading, MA, USA: Ad\-di\-son-Wes\-ley Longman. \bibitem{GUD97} Goossens, M., B.~User, J.~Doe (1997). \newblock Mehrdeutige Quellenverweise. \end{thebibliography}
Das manuelle Erstellen einer derartigen Bibliographie ist auf jeden Fall mühsam und aufwendig, und das Ergebnis lässt sich normalerweise nicht wieder verwenden, da nahezu alle Journale und Verlagshäuser über eigene Layoutrichtlinien mit anderen Formatierungen verfügen. Daher nutzt man im Allgemeinen besser BIBTEX, ein Programm, das aus einer Datenbank mit bibliographischen Informationen fertigen LaTEX-Code erzeugt. Dies wird im nächsten Abschnitt besprochen. Man beachte, dass die Verweise in der Reihenfolge nummeriert werden, wie sie in der Bibliographie erscheinen, sofern \bibitem ohne optionales Ar- Manuelle Sortierung gument verwendet wird. Bei einer manuell erzeugten Bibliographie muss man nach erstem die Einträge dann also selbst nach ihrem ersten Auftreten nummerieren und Vorkommen sortieren. Mit BIBTEX hingegen wird das entsprechende Ergebnis automatisch erzeugt. Innerhalb eines Dokumentes erfolgen die Verweise auf ein Werk mithilfe des \bibitem-Argumentes zitierschlüssel. LaTEX verfügt dazu über den Befehl \cite, der einen solchen Schlüssel als Argument übernimmt. Er kann sogar eine durch Kommas unterteilte Liste solcher Schlüssel enthalten und verfügt zusätzlich über ein optionales Argument für weitere Informationen, wie etwa Seitenzahlen oder Kapitelnummern. Seine Syntax ist in Abschnitt 12.2.1 genau beschrieben. Für Kurztitel- und Autor-Jahr-Schemata gibt es noch weitere Quellenverweisbefehle, sobald die unterstützenden Pakete geladen sind.
12.1.3 Erzeugen bibliographischer Daten mit BIBTEX Das Programm BIBTEX sammelt alle in einem Dokument vorkommenden Zitierschlüssel, schlägt diese in einer bibliographischen Datenbank nach und erzeugt daraus eine vollständige thebibliography-Umgebung, die dann im folgenden Durchlauf von LaTEX geladen werden kann. Je nach verwendetem
711
12
QUELLENVERWEISE
tex ① Aufruf von LaTEX, das eine Reihe von \citation-Verweisen in der Hilfsdatei .aux erzeugt. ② Aufruf von BIBTEX, das die Hilfsdatei einliest, die Literaturverweise in einer Datenbank nachschlägt (eine oder mehrere .bib-Dateien) und dann eine Datei (die .bbl-Datei) erstellt, welche die formatierten Literaturangaben enthält. Ihr Format wird dabei durch die Stildatei (die .bstDatei) festgelegt. Warnungen und Fehlermeldungen werden in der Protokolldatei (der .blg-Datei) aufgezeichnet. Man beachte, dass BIBTEX nie die Original-LaTEXQuelldatei liest.
bib
aux
②
BIBTEX
bst
tex
tex
ten liest.
④
bbl
LaTEX
③
③ Erneuter Aufruf von LaTEX, das nun die .bbl-Datei mit den bibliographischen Da④ Dritter Aufruf von LaTEX zur Auflösung al-
LaTEX
①
blg
aux LaTEX
ler Verweise.
Abbildung 12.1: Flussdiagramm des Zusammenspiels von BIBTEX und LATEX
Mit BIBTE X nach erstem Vorkommen sortieren
BIBTEX-Stil kann BIBTEX die Einträge nach einem bestimmten Schema sortieren (wie z.B. Autornamen, Erscheinungsjahr) oder ein Literaturverzeichnis erzeugen, in dem die Einträge in der Reihenfolge ihres Vorkommens im Text erscheinen. Man beachte, dass ein solcher „nicht sortierender“ Stil automatisch eine Bibliographie in der Reihenfolge des ersten Vorkommens generiert, wie es bei vielen Verlagen üblich ist. Ein Beispiel für einen derartigen BIBTEX-Stil ist unsrt. Das Zusammenspiel von LaTEX und BIBTEX ist in Abbildung 12.1 schematisch dargestellt. Mindestens drei LaTEX-Läufe sind erforderlich: der erste um Daten für BIBTEX zu erzeugen, der nächste um das Ergebnis aus dem BIBTEXLauf zu laden und der letzte um die im vorherigen Lauf hinzugefügten Querverweise zum Literaturverzeichnis aufzulösen.
\bibliography{datei-liste}
\bibliographystyle{format }
Damit BIBTEX weiß, welche Datenbanken durchsucht werden sollen, um Verweise aufzulösen, werden ihre Namen, durch Kommas getrennt (und ohne die Erweiterung .bib), als Argument an den Befehl \bibliography übergeben. Dieser Befehl wird an der Stelle positioniert, an welcher letztlich die Bibliographie erscheinen soll. Außerdem muss man BIBTEX mitteilen, wie die Einträge formatiert werden sollen. Dies geschieht in der Präambel mithilfe des Befehls \bibliographystyle, der als Argument einen geeigneten BIBTEX-Stil erhält. Es ist natürlich wichtig, dass die im Dokument verwendeten zitierschlüssel genau einen Eintrag in der oder den Datenbankdateien identifizieren, damit der Quellenverweis beim Verarbeiten des Dokumentes aufgelöst werden kann.
712
12.1
Einleitung
Damit BIBTEX auch ohne Analyse der LaTEX-Quelldateien auf die Informationen zugreifen kann, schreiben diese Befehle zwei Zeilen in die .aux-Datei. Aus dem gleichen Grund schreiben der Befehl \cite und alle seine Varianten ihre schlüssel in diese Datei. In Beispiel 12-1-2 würde die .aux-Datei beispielsweise (unter anderem) die folgenden Zeilen enthalten:
\bibstyle{abbrvnat} \citation{LGC97} \citation{test97} \bibdata{tex} Diese Befehle dürfen nicht mit den im Dokument zu verwendenden verwechselt werden. Sie dienen einzig dazu, die interne Kommunikation zwischen LaTEX und BIBTEX zu erleichtern. Wenn man fälschlicherweise anstelle von \bibliography den Befehl \bibdata verwendet, wird LaTEX das Dokument zwar problemlos verarbeiten, BIBTEX wird sich jedoch beklagen, dass sich in der .aux-Datei keine Datenbankinformationen befinden. Der genaue Aufbau eines BIBTEX-Eintrags wird in Kapitel 13 beschrieben. Um die Beispiele in den nächsten Abschnitten besser nachvollziehen zu können, sollte man jedoch wissen, dass ein BIBTEX-Eintrag grundlegend aus den folgenden drei Teilen besteht: 1. Einem Publikationstyp (z.B. “book”, “article”, “inproceedings”, “phdthesis”). 2. Einem vom Benutzer gewählten Zitierschlüssel, anhand dessen die Veröffentlichung eindeutig zu identifizieren ist. Will man im Dokument auf den Eintrag verweisen, so muss das Argument zitierschlüssel des \citeBefehls mit diesem Schlüsselwort identisch sein (auch bezüglich seiner Groß-/Kleinschreibung). 3. Einer Reihe von Feldern (bibliographischen Kategorien), die aus einem Feldnamen bestehen, dem in doppelten Anführungsstrichen oder geschweiften Klammern die entsprechenden Angaben folgen (z.B. author, journal und title). In Abbildung 12.2 auf der nächsten Seite ist eine Beispieldatenbank zu sehen. Die meisten Beispiele werden anhand dieser Datenbank erstellt, um zu zeigen, wie sich die Darstellungsformen der einzelnen BIBTEX-Stildateien voneinander unterscheiden. Es gibt verschiedene Konventionen, um aussagekräftige Zitierschlüssel für Datenbankeinträge zu erstellen. Eines der bekanntesten ist das so genannte Harvard-System, in dem der Nachname des Autors (in Kleinbuchstaben) durch einen Doppelpunkt mit dem Erscheinungsjahr verbunden wird (z.B. schmidt:1987). Die BIBTEX-Einträge werden von BIBTEX aus der Literaturdatenbank (der .bib-Datei) eingelesen. Die Formatierung der Einträge wird durch die zugehörige Stilvorlage (die .bst-Datei) festgelegt, die in einer stapelorientierten Sprache geschrieben ist. Diese Sprache wird vom BIBTEX-Programm interpretiert (siehe Abschnitt 13.6).
713
12
QUELLENVERWEISE
@String{ttct @Book{LGC97, author = title = publisher = address = pages = year = ISBN = series =
= "Tools and Techniques for Computer Typesetting" } "Michel Goossens and Sebastian Rahtz and Frank Mittelbach", "The {\LaTeX} Graphics Companion: Illustrating Documents with {\TeX} and {PostScript}", "Ad{\-d}i{\-s}on-Wes{\-l}ey Longman", "Reading, MA, USA", "xxi + 554", "1997", "0-201-85469-4", ttct
} @UNPUBLISHED{test97, author = "Michel Goossens and Ben User and Joe Doe and others", title = "Mehrdeutige Quellenverweise", year = "1997", note = "Eingereicht bei " # ibmjrd } @Book{LWC99, author = "Michel Goossens and Sebastian Rahtz", title = "The {\LaTeX} {Web} companion: integrating {\TeX}, {HTML}, and {XML}", publisher = "Ad{\-d}i{\-s}on-Wes{\-l}ey Longman", address = "Reading, MA, USA", pages = "xxii + 522", year = "1999", ISBN = "0-201-43311-7", note = "With Eitan M. Gurari and Ross Moore and Robert S. Sutor", series = ttct } @Book{Knuth-CT-a, Author = "Donald E. Knuth", Title = "The {\TeX}book", Publisher = "Ad{\-d}i{\-s}on-Wes{\-l}ey", Address = "Reading, MA, USA", Volume = "A", Series = "Computers and Typesetting", pages = "ix + 483", year = 1986, isbn = "0-201-13447-0", } @Article{Knuth:TB10-1, Author = "Donald E. Knuth", Title = "{Typesetting Concrete Mathematics}", Journal = "TUGboat", Volume = "10", Number = "1", Pages = "31--36", year = 1989, month = apr, issn = "0896-3207" }
@Book{vLeunen:92, author = "Mary-Claire van Leunen", gender = "sf", title = "A handbook for scholars", publisher = "Oxford University Press", address = "Walton Street, Oxford OX2 6DP, UK", pages = "xi + 348", year = "92" } @manual{GNUMake, key = {make}, title = {{GNU Make}, A Program for Directing Recompilation}, organization= "Free Software Foundation",address = "Boston, Massachusetts",ISBN={1-882114-80-9},year = 2000} @book{G-G, TITLE = {{Gutenberg Jahrbuch}}, EDITOR = {Hans-Joachim Koppitz}, PUBLISHER = {Gutenberg-Gesellschaft, Internationale Vereinigung f\"ur Geschichte und Gegenwart der Druckkunst e.V.}, ADDRESS = {Mainz, Deutschland}, NOTE = {Enthält Fakten zur Geschichte und Gegenwart der Druckkunst. Gegründet von Aloys Ruppel. Erscheint seit 1926.} } @misc{oddity, title = "{{TUGboat} The Communications of the {\TeX} User Group}", howpublished = "Quarterly published.", year = {1980ff}, } @InProceedings{MR-PQ, author = "Frank Mittelbach and Chris Rowley", title = "The Pursuit of Quality: How can Automated Typesetting achieve the Highest Standards of Craft Typography?", pages = "261--273", crossref = "EP92"} @InProceedings{Southall, Author = "Richard Southall", Title = "Presentation Rules and Rules of Composition in the Formatting of Complex Text", Pages = "275--290", crossref = "EP92"} @Proceedings{EP92, title = "{EP92}---Proceedings of Electronic Publishing, ’92", shorttitle = "{EP92}", editor = "Christine Vanoirbeek and Giovanni Coray", publisher = "Cambridge University Press", address = "Cambridge", year = 1992, booktitle = "{EP92}---Proceedings of Electronic Publishing, ’92" }
Abbildung 12.2: BIBTEX-Beispieldatenbank tex.bib Die Einträge dieser Datenbank folgen bewusst keinen einheitlichen Konventionen, sondern enthalten z.B. klein-, groß- oder gemischt geschriebene Feldnamen und verschiedene Einrückungen, anhand derer sich in späteren Beispielen einige Funktionen und Probleme aufzeigen lassen. Sie lässt sich durch eines der in Abschnitt 13.4 beschriebenen Werkzeuge normalisieren.
714
12.2
Das numerische Schema
BIBTEX weiß, welche Felder für welchen Publikationstyp zwingend oder optional sind und welche ignoriert werden (vgl. Tabelle 13.1 auf Seite 791). Bei fehlenden Daten werden Warnungen, wie etwa „author name required“ (Autorname erforderlich), ausgegeben. Die Stildatei kann sowohl das Aussehen des Verweises im Haupttext als auch des tatsächlichen Bibliographieeintrags in der thebibliography-Umgebung steuern. Man sollte immer im Hinterkopf behalten, dass BIBTEX für die Verwaltung von Quellenverweisen nicht erforderlich ist (außer im Falle des jurabibPaketes und der Pakete für mehrfache Literaturverzeichnisse). Man kann auch ohne BIBTEX eine Bibliographie erzeugen, indem man die Einträge entsprechend der in Abschnitt 12.1.2 beschriebenen Syntax selbst erstellt. Außerdem ist es relativ einfach, in Sonderfällen die von BIBTEX erzeugten Daten manuell nachzubearbeiten. Um ein völlig autarkes LaTEX-Dokument zu erhalten, kann man sogar den Inhalt der .bbl-Datei in das Dokument aufnehmen.
12.2 Das numerische Schema 12.2.1 Standard-LATEX – Numerische Verweise Wie bereits zuvor erwähnt, ist das numerische System die voreingestellte Zitiermethode und sie wird von Standard-LaTEX direkt unterstützt. Damit funktioniert sie als Einzige ohne Laden zusätzlicher Pakete rein mithilfe der verfügbaren Markup-Befehle. Literaturverweise innerhalb des Textes eines LaTEXDokumentes werden dann mit dem Befehl \cite gekennzeichnet.
\cite[text ]{schlüssel }
\cite[text ]{schlüssel1,schlüssel2,. . . }
Der Befehl \cite verknüpft jeden Zitierschlüssel aus der Liste seines obligatorischen Argumentes mit dem Schlüssel im Argument eines \bibitem-Befehls der thebibliography-Umgebung zu einem Quellenverweis. Wie viele andere Feldnamen und sonstige Bezeichnungen in LaTEX werden auch die Zitierschlüssel nach Groß- und Kleinschreibung unterschieden. Die erzeugten Quellennummern entsprechen der Reihenfolge, in der die Schlüssel der \bibitem-Befehle innerhalb der thebibliography-Umgebung auftreten bzw., sofern die \bibitem-Befehle über ein optionales Argument verfügen, den Daten dieses Argumentes. Das optionale Argument text ist ein zusätzlicher Hinweis, der zusammen mit dem vom \cite-Befehl erzeugten Text ausgegeben wird. Dies wird auch im nächsten Beispiel deutlich. Zum Vergleich wurde im ersten Quellenverweis ein geschützter Leerraum (~) eingefügt und im zweiten ein kleiner Leerraum (\,). Solche typographischen Feinheiten sollten natürlich im gesamten Dokument einheitlich gehandhabt werden.
\bibliographystyle{plain} Bsp. 12-2-1
Die Farbunterstützung für LATEX ist Die Farbunterstützung für \LaTeX{} ist in in [2, Kap. 9] und das hyperref-Paket \cite[Kap.~9]{LGC97} und das \texttt{hyperref}-Paket in \cite[S.\,35--67]{LWC99} beschrieben. in [1, S. 35–67] beschrieben. Um Platz zu sparen, entfällt das Literaturverzeichnis in vielen der Beispiele in diesem Kapitel. In diesen Fällen wird der Befehl \bibliography{tex}
715
12
QUELLENVERWEISE
Ein Hinweis zu den ! weiligen Beispieldokumentes platziert. Daher sollte man Beispiele wie 12-2-1 Beispielen in diesem folgendermaßen lesen: Das Ergebnis wird erzeugt, indem BIBTEX unter VerKapitel wendung des Stils plain (angezeigt) und der Datenbank tex.bib (nicht an-
beim automatischen Erzeugen der Beispiele für dieses Buch am Ende des je-
gezeigt; siehe Abbildung 12.2) die Bibliographie generiert. Dazu enthielt das eigentliche Dokument, mit dessen Hilfe das Beispiel erzeugt wurde, gegen Ende die Anweisungen \newpage\bibliography{tex}.
\nocite{schlüssel-liste} Unter BIBTEX kann man auch die \nocite-Variante des \cite-Befehls verwenden. Er dient einzig dem Zweck, die Schlüssel aus dem Argument schlüsselliste in die .aux-Datei zu schreiben, so dass die entsprechenden Quellenangaben im Literaturverzeichnis erscheinen, auch wenn das Werk gar nicht zitiert wird. Aus technischen Gründen muss er nach dem Befehl \begin{document} stehen, obwohl er keine Ausgabe erzeugt und daher eigentlich in der Präambel besser aufgehoben wäre. Er lässt sich beliebig oft verwenden. Als Sonderform überträgt der Befehl \nocite{*} alle Einträge der gewählten BIBTEX-Daten in das Literaturverzeichnis. Wie zuvor bereits erwähnt, wird der \cite-Befehl durch das Argument schlüssel-liste mit einem oder mehreren Bibliographieeinträgen verknüpft. Die Literaturangabe, die dann tatsächlich im formatierten Text erscheint, hängt von der gewählten Stilvorlage für die Bibliographie ab. Anpassen der Literaturhinweise und der Bibliographie Leider ist Standard-LaTEX nicht mit einer einfach einstellbaren Schnittstelle zum Anpassen der Formatierung von Literaturhinweisen ausgerüstet. Um beispielsweise die voreingestellten eckigen in runde Klammern zu ändern, muss man daher den internen LaTEX-Befehl \@cite umdefinieren. Darüber hinaus verwendet der \cite-Befehl auch noch einen internen temporären Schalter @tempswa, um \@cite anzuzeigen, ob ein optionales Argument vorhanden ist. Um mit diesem optionalen Argument zu arbeiten, muss also zunächst der Wert dieses Schalters ermittelt werden. Der Befehl \@cite besitzt zwei obligatorische Argumente: die Liste der erhaltenen Verweise und den Hinweis (sofern vorhanden, sonst ein Leerstring). Im nächsten Beispiel wird zunächst (#1 gesetzt und, wenn @tempswa wahr ist, folgt darauf ein Komma und dann !#2. Danach wird die Klammer geschlossen. Der Befehl \nolinebreak[3] sorgt dafür, dass ein Zeilenumbruch nach dem Komma nur im Notfall in Erwägung gezogen wird.
Die Farbunterstützung für LATEX ist in (2) und das hyperref-Paket in (1, S. 35–67) beschrieben.
716
\bibliographystyle{plain} \usepackage{ifthen} \makeatletter \renewcommand\@cite[2]{({#1\ifthenelse{\boolean{@tempswa}}% {,\nolinebreak[3] #2}{}})} \makeatother Die Farbunterstützung für \LaTeX{} ist in \cite{LGC97} und das \texttt{hyperref}-Paket in \cite[S.~35--67]{LWC99} beschrieben.
Bsp. 12-2-2
12.2
Das numerische Schema
Lädt man das cite-Paket (siehe Abschnitt 12.2.2), dann braucht man den Befehl \@cite nicht mehr für derartige Zwecke umzudefinieren. Bei der thebibliography-Umgebung ist die Lage leider auch nicht viel besser: Die vorgegebene Lösung bietet nur wenige Anpassungsmöglichkeiten. Um die Kurzbezeichnung (Label) vor jeder Publikation umzugestalten (etwa durch Verzicht auf die Klammern) muss man den internen LaTEX-Befehl \@biblabel ändern.
Literatur 1. D. E. Knuth. The TEXbook, volume A of Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. Bsp. 12-2-3
2. D. E. Knuth. Typesetting Concrete Mathematics. TUGboat, 10(1):31–36, Apr. 1989.
\bibliographystyle{abbrv} \makeatletter \renewcommand\@biblabel[1]{#1.} \makeatother \nocite{Knuth-CT-a,Knuth:TB10-1} \bibliography{tex}
Pakete, die eine Variante des Autor-Jahr-Schemas umsetzen (wie z.B. apalike, chicago und natbib), definieren den Befehl \@biblabel normalerweise schlichtweg so um, dass er sein Argument unterschlägt und nichts ausgibt. In dem entsprechenden Literaturverzeichnis schlägt man ja den Namen des Verfassers nach, so dass keine Kurzbezeichnung erforderlich ist. Dabei ist das natbib-Paket jedoch noch relativ vorsichtig: Wenn es entdeckt, dass \@biblabel zuvor umdefiniert wurde, behält es die geänderte Definition bei. Wie bereits erwähnt werden die einzelnen Bestandteile eines \bibitemBefehls, wie etwa die Angabe der Autoren oder des Titels, im Literaturverzeichnis durch \newblock-Befehle voneinander getrennt. Diese Befehle werden auch von den meisten BIBTEX-Stilen automatisch eingefügt. Normalerweise werden die einzelnen Elemente zusammen im gleichen Absatz gesetzt. Bevorzugt man jedoch eine „offene“ Bibliographie, in der jede Information in einer neuen Zeile beginnt und die nachfolgenden Zeilen innerhalb eines Blocks um die Länge \bibindent (voreingestellt auf 1,5em) eingezogen werden, so sollte man die Klassenoption openbib verwenden. Diese Option wird von allen Standardklassen unterstützt. Das Ergebnis ist im nächsten Beispiel zu sehen. Dort werden außerdem mit einer geänderten \@biblabel-Definition hochgestellte Label erzeugt.
Literatur 1
2 Bsp. 12-2-4
M. Goossens and S. Rahtz. The LATEX Web companion: integrating TEX, HTML, and XML. Tools and Techniques for Computer Typesetting. AddisonWesley Longman, Reading, MA, USA, 1999. With Eitan M. Gurari and Ross Moore and Robert S. Sutor. D. E. Knuth. The TEXbook, volume A of Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986.
\documentclass[openbib]{article} \bibliographystyle{abbrv} \setlength\bibindent{24pt} \makeatletter \renewcommand\@biblabel[1] {\textsuperscript{#1}} \makeatother \nocite{LWC99,Knuth-CT-a} \bibliography{tex}
717
12
QUELLENVERWEISE
12.2.2 cite – Bessere numerische Verweise Eine Unzulänglichkeit, die rasch ins Auge fällt, wenn man die in LaTEX vorgegebene Methode für Quellenverweise verwendet, besteht darin, dass es die Reihenfolge der Quellen aus dem Argument schlüssel-liste des \cite-Befehls beibehält. Entsprechend zeigt das nächste Beispiel eine sehr seltsam sortierte Zahlenliste (der nicht aufgelöste Verweis wurde absichtlich hinzugefügt):
In [2, 1, 3, ?, 4] findet man gute Informationen zu TEX und LATEX.
\bibliographystyle{plain} In \cite{LGC97,LWC99,Knuth-CT-a,Knuth:CT-b,Knuth:TB10-1} findet man gute Informationen zu \TeX{} und \LaTeX{}.
Bsp. 12-2-5
Die Situation lässt sich leicht verbessern, indem man, wie im folgenden Beispiel, das cite-Paket von Donald Arseneau lädt:
\usepackage{cite}
\bibliographystyle{plain}
In [?, 1–4] findet man gute In \cite{LGC97,LWC99,Knuth-CT-a,Knuth:CT-b,Knuth:TB10-1} Informationen zu TEX und LATEX. findet man gute Informationen zu \TeX{} und \LaTeX{}.
Anpassen des Layouts der Quellenverweise
Das cite-Paket sortiert die Quellennummern entsprechend seiner Voreinstellung in aufsteigender Reihenfolge und stellt drei oder mehr aufeinander folgende Nummern als Nummernbereich dar. Nicht numerische Label werden an den Anfang gestellt, so wie im vorigen Beispiel das „?“ aus dem nicht aufgelösten Verweis. Wer keine sortierten Einträge wünscht, kann diese mit der Option nosort global abschalten. Die Zusammenfassung zu Bereichen lässt sich durch die Option nocompress unterdrücken. Das cite-Paket bietet eine Reihe von Befehlen zum Anpassen der formatierten Verweise. So kann man z.B. mithilfe der Befehle \citeleft und \citeright festlegen, welche Zeichen links bzw. rechts des Verweistextes erscheinen sollen. Mit ihrer Hilfe kann man, wie im nächsten Beispiel, die eckigen Klammern gegen runde austauschen (vgl. hierzu auch Beispiel 12-2-2 auf Seite 716). Außerdem lässt sich der Befehl \citemid so umdefinieren, dass er den Quellenverweis und die optionalen ergänzenden Angaben etwa durch ein Semikolon und ein Leerzeichen voneinander trennt.
Die Farbunterstützung für LATEX ist in (2) und das hyperref-Paket in (1; S. 35– 67) beschrieben.
\usepackage{cite} \bibliographystyle{plain} \renewcommand\citeleft{(} \renewcommand\citeright{)} \renewcommand\citemid{;\nolinebreak[3] } Die Farbunterstützung für \LaTeX{} ist in \cite{LGC97} und das \texttt{hyperref}-Paket in \cite[S.~35--67]{LWC99} beschrieben.
Ein weiterer wichtiger Gesichtspunkt beim Umgang mit Quellenverweisen Anpassen von ist die Steuerung ihres Verhaltens am Zeilenende. Nimmt man z.B. den Text Umbrüchen in „siehe [2–3,7,13]“, so kann man hier einerseits alle Zeilenumbrüche verbieten, Quellenverweisen oder andererseits einen Umbruch nach dem „siehe“, den Kommas oder dem
Halbgeviertstrich im Nummernbereich erlauben. Das cite-Paket ist so voreingestellt, dass es Zeilenumbrüchen vor einem Quellenverweis mit \nolinebreak[3], und solchen nach einem Komma zwischen Verweis und ergänzenden Angaben mit \nolinebreak[2] entgegenwirkt. Zeilenumbrüche nach Halbgeviertstrichen in Bereichsangaben und nach
718
Bsp. 12-2-6
Bsp. 12-2-7
12.2
Das numerische Schema
Kommas zwischen einzelnen Quellennummern lässt es so gut wie gar nicht zu. Die drei letztgenannten Fälle lassen sich durch Umdefinieren der Befehle \citemid , \citedash und \citepunct steuern. Mit folgenden Zeilen kann man z.B. Umbrüche nach Bindestrichen verhindern, dabei aber solche nach Kommas erleichtern:
\renewcommand\citedash{\mbox{--}\nolinebreak} \renewcommand\citemid{,\nolinebreak[1] } \renewcommand\citepunct{,\nolinebreak[1]\hspace{.13em plus .1em minus .1em}} Hier gilt es einige interessante Punkte zu beachten. Alle drei Definitionen steuern nicht nur den Zeilenumbruch, sondern fügen auch die erforderlichen Satzzeichen hinzu: einen Bindestrich für einen Bereich, ein Komma und ein ganzes Leerzeichen vor den ergänzenden Angaben oder ein Komma und einen kleinen Leerraum zwischen einzelnen Quellenverweisen. Sollen zwischen den Quellenverweisen gar keine Leerzeichen stehen , dann kann man den Befehl \citepunct so umdefinieren, dass er nur ein Komma enthält. Der andere wichtige und vielleicht überraschende Aspekt ist der \mbox-Befehl um den Bindestrich. Diese Box ist erforderlich, um den Zeilenumbruch durch LaTEX an dieser Stelle zu steuern. TEX fügt automatisch nach jedem expliziten Trennoder Bindestrich eine Trennstelle ein. Solange man den Strich also nicht in einer Box versteckt, hat der \nolinebreak-Befehl keinerlei Auswirkungen, da die intern eingefügte Trennstelle weiterhin einen Umbruch an dieser Position zulässt. Und der \hspace-Befehl, schließlich, ermöglicht eine gewisse Dehnung oder Stauchung. Bevorzugt man stattdessen einen festen Leerraum, so muss man die Komponenten plus und minus entfernen. Der hohe Penalty-Wert vor einem Quellenverweis ist fest im Code verankert. Er wird jedoch nur eingefügt, wenn man nicht selbst schon einen entsprechenden Wert im Dokument festgelegt hat. Der Ausdruck „siehe~\cite{..}“ wird zum Beispiel immer beachtet, so dass kein Umbruch zwischen „siehe“ und dem Quellenverweis erfolgt. Mithilfe eines weiteren Formatierungsbefehls, \citeform , kann man die einzelnen Quellennummern umgestalten. Er ist zunächst so eingestellt, dass Anpassen der Quellener nichts bewirkt, so dass die Label nicht verändert werden. Im nächsten Bei- verweisnummern spiel sind sie eingefärbt. Es gibt natürlich auch andere Gestaltungsmöglichkeiten, wie etwa das Hinzufügen von Klammern in Beispiel 12-2-9.
Bsp. 12-2-8
Die Farbunterstützung für LATEX ist in [2] und das hyperref-Paket in [1, S. 35–67] beschrieben.
\usepackage{cite,color} \bibliographystyle{plain} \renewcommand\citeform[1]{\textcolor{blue}{#1}} Die Farbunterstützung für \LaTeX{} ist in \cite{LGC97} und das \texttt{hyperref}-Paket in \cite[S.~35--67]{LWC99} beschrieben.
\citen{schlüssel-liste} Das Paket verfügt über den zusätzlichen Befehl \citen (Alternativnamen \citenum oder \citeonline), mit dessen Hilfe man eine Nummernliste ohne die umgebenden Befehle \citeleft und \citeright erhält (also z.B. ohne die voreingestellten Klammern). Alle anderen Formatierungen bleiben erhalten. Im nächsten Beispiel werden die einzelnen Quellenverweise in Klammern
719
12
QUELLENVERWEISE
gesetzt. Das sieht in Kombination mit den voreingestellten Klammern um den gesamten Verweis zugegebenermaßen recht seltsam aus.
(1)–(3),(5) aber [(4), §5]
\usepackage[nospace]{cite} \bibliographystyle{plain} \renewcommand\citeform[1]{(#1)} \citen{LGC97,LWC99,test97,vLeunen:92} aber \cite[\S5]{Knuth-CT-a}
Das cite-Paket bietet eine Reihe von Optionen für typische Konfigurationswünsche oder um das Verhalten des Paketes anderweitig zu beeinflussen. Einige davon wurden bereits besprochen. Hier folgt nun eine vollständige Aufstellung:
adjust/noadjust Aktiviert (Voreinstellung) bzw. deaktiviert den „intelligenten“ Umgang mit Leerzeichen vor einem \cite- oder einem \citenBefehl. Leerzeichen vor solchen Befehlen werden per Voreinstellung als normaler Wortzwischenraum gestaltet. Wenn man see\cite{..} schreibt, wird automatisch ein Leerzeichen eingefügt.
compress/nocompress Aktiviert (Voreinstellung) bzw. deaktiviert das Zusammenfassen aufeinander folgender Nummern zu Bereichen.
sort/nosort Aktiviert bzw. deaktiviert das Sortieren der Nummern. space Nach Kommas wird ein ganzer Wortzwischenraum eingesetzt und ein Zeilenumbruch an dieser Stelle wird nicht behindert. Per Voreinstellung (Option ist nicht ausgewählt) wird ein kleiner Leerraum eingefügt und der Umbruch erschwert, aber nicht verboten.
nospace Löscht in der Nummernliste die Leerzeichen nach den Kommas, wobei jedoch das Leerzeichen nach dem Komma vor den ergänzenden Angaben erhalten bleibt. Die Auswirkung dieser Option ist in Beispiel 122-9 zu sehen. Sie ist nicht das Gegenteil der Option space!
verbose Normalerweise warnt cite bei Quellenverweisen nur einmal je nicht definierter Quelle. Mit dieser Option wird die Warnung bei jedem Verweis auf die entsprechende Quelle wiederholt.
Quellenverweise mit hochgestellten Nummern
720
Die neueste Version des cite-Paketes kann Quellenverweise auch als hochgestellte Nummern ausgeben, wenn das Paket mit der Option superscript (oder super) geladen wird. Diese Funktion wurde früher durch das eigenständige Paket overcite bereitgestellt (das ebenfalls von Donald Arseneau stammt). Dieses Paket ist aus Gründen der Kompatibilität auch weiterhin verfügbar. Wird der \cite-Befehl mit optionalem Argument verwendet, dann erscheint die gesamte Liste der Quellenverweise so, als wäre das cite-Paket ohne die superscript-Option geladen worden. Unter dem Einfluss der Option superscript oder super wirken sich die Konfigurationsbefehle \citeleft , \citeright und \citemid nur noch auf Quellenverweise aus, die über ein optionales Argument verfügen, während \citedash , \citepunct und \citeform weiterhin alle Verweise betreffen. Nähere Einzelheiten dazu, wie sich diese Befehle verwenden lassen, wurden auf den Seiten 718–719 besprochen.
Bsp. 12-2-9
12.2
Bsp. 12-2-10
In?, 1–4 findet man gute Informationen zu TEX und LATEX. Zu hyperref siehe (1, S. 35– 67).
Das numerische Schema
\usepackage[superscript]{cite} \bibliographystyle{plain} \usepackage{color} \renewcommand\citeform[1]{\textcolor{blue}{#1}} \renewcommand\citeleft{(} \renewcommand\citeright{)} In \cite{LGC97,LWC99,Knuth-CT-a,Knuth:CT-b,Knuth:TB10-1} findet man gute Informationen zu \TeX{} und \LaTeX{}. Zu \texttt{hyperref} siehe \cite[S.~35--67]{LWC99}.
Man muss sein Quelldokument wahrscheinlich nicht ändern, egal ob die
superscript-Option verwendet wird oder nicht. Insbesondere wird der Leerraum vor dem Quellenverweis ignoriert, wenn die Verweise hochgestellt sind. Im Prinzip kann man die Option einfach hinzufügen, ohne die Quelldokumente verändern zu müssen, vorausgesetzt die numerischen Verweise wurden nicht in die Formulierung der Sätze integriert, wie es etwa im vorigen Beispiel der Fall war. Wenn als Label für die Quellenverweise hochgestellte Nummern verwendet werden, muss man besonders auf die Interpunktion um die Verweise herum achten. Das cite-Paket verschiebt entsprechend seiner Voreinstellung Satzzeichen, die auf einen Verweis folgen, vor den Verweis. Alle Satzzeichen, die auf diese Weise wandern, sind in dem Befehl \CiteMoveChars gespeichert. Die Voreinstellung enthält „.,;:“, die Zeichen ! und ? sind nicht enthalten, können jedoch hinzugefügt werden. Durch dieses Verfahren kann es zu einer Verdoppelung von Punkten kommen. Dieser Fall wird vom Paket wahrgenommen und eines der Satzzeichen wird dann unterdrückt (vgl. den zweiten Verweis im nächsten Beispiel).
Bsp. 12-2-11
. . . Buch;2 siehe auch Goossens et al.1
\usepackage[superscript]{cite} \bibliographystyle{plain} \ldots\ Buch~\cite{Knuth-CT-a}; siehe auch Goossens et al.~\cite{LGC97}.
Leider versagt das Unterdrücken doppelter Punkte bei Abkürzungen mit Großbuchstaben oder wenn nach dem Punkt ein \@ steht. Das nächste Beispiel zeigt dazu mögliche Lösungen. Man beachte jedoch, dass die Lösung U.S.A\@. nur für das cite-Paket gilt, wobei man außerdem ohne Verweis einen falschen Abstand erhält (da man eigentlich behauptet, dass der Satz nach der Abkürzung endet)!
Bsp. 12-2-12
et al..1 U.S.A..?
et al.1 U.S.A.?
\usepackage[super]{cite} \bibliographystyle{plain} et al.\@ \cite{LGC97}. \hfil et al.\ \cite{LGC97}.\par U.S.A. \cite{unknown}. \hfil U.S.A\@. \cite{unknown}.
Amerikanische Konventionen erfordern unter Umständen noch eine weitere Besonderheit, die nicht unterstützt wird: In einem direkt vorangehenden Zitat muss das abschließende Satzzeichen integriert werden (wie z.B. in The Chicago Manual of Style [38] befürwortet). Der englische Eingabetext muss dann entsprechend manuell angepasst werden.
Bsp. 12-2-13
For details see “The TEXbook”.1 But wanted is “The TEXbook.”1
\usepackage[super]{cite} \bibliographystyle{plain} For details see ‘‘The \TeX book’’ \cite{Knuth-CT-a}. But wanted is ‘‘The \TeX book.’’ \cite{Knuth-CT-a}
721
12
QUELLENVERWEISE
Die zentralen Optionen des cite-Paketes wurden auf auf Seite 720 besprochen. Zum Hochstellen der Verweisnummern existieren noch drei weitere Möglichkeiten. Durch die Option nomove werden Satzzeichen nicht vor den hochgestellten Verweis verschoben. Die Option ref bewirkt, dass vor Verweisen mit einem optionalen Argument das Wort „Ref.“ steht. Dies wird intern über eine Änderung des \citeleft-Befehls erreicht. Um also einen anderen Text einzustellen oder von eckigen etwa auf runde Klammern zu wechseln, muss man die Konfigurationsbefehle ändern, anstatt diese Option zu wählen.
Die Farbunterstützung für LATEX ist in „LGC“2 und das hyperref-Paket in „LWC“ [Ref. 1, S. 35–67] beschrieben.
\usepackage[super,ref]{cite} \bibliographystyle{plain} Die Farbunterstützung für \LaTeX{} ist in "‘LGC"’ \cite{LGC97} und das \texttt{hyperref}-Paket in "‘LWC"’ \cite[S.~35--67]{LWC99} beschrieben.
Die Option biblabel schließlich stellt auch die Label in der Bibliographie hoch. (Sie behalten normalerweise ihre Position, auch wenn man die Option superscript bzw. ihren Alias super verwendet.)
12.2.3 notoccite – Unsortierte Quellenverweise, aber richtig Damit die Publikationen in der Bibliographie in genau der gleichen Reihenfolge erscheinen, wie sie im Dokument zitiert werden, sollte man Stile für unsortierte Quellenverweise verwenden (wie z.B. den BIBTEX-Stil unsrt). Dieser Ansatz funktioniert jedoch nicht, wenn auch Verweise in Überschriften oder Legenden von Gleitobjekten erscheinen. In diesem Fall tauchen diese Verweise ebenfalls im Inhalts-, Abbildungs- und entsprechenden Verzeichnissen auf. Dadurch werden sie an den Anfang der Bibliographie verschoben, obwohl sie eigentlich erst viel später im Text vorkommen. Dieses Problem lässt sich umgehen, indem man für \caption , \section und ähnliche Befehle ein optionales Argument ohne den Verweis verwendet, so dass die Verweise nicht in den Verzeichnissen auftauchen. Sofern auch an diesen Stellen Verweise verwendet werden müssen, kann man als „manuelle“ Lösung zunächst alle Hilfsdateien vom letzten LaTEX-Lauf löschen, dann einen LaTEX-Lauf durchführen und danach BIBTEX starten. So erhält BIBTEX nur die Quellenverweise aus dem Hauptdokument. Dieses Verfahren ist natürlich fehleranfällig und es kann sein, dass die Reihenfolge der Verweise trotzdem durcheinander gerät, wenn man seinen Artikel schließlich gedruckt sieht. Donald Arseneau hat zur Lösung dieses Problems das kleine Paket notoccite entwickelt, das den internen Befehl \@starttoc so umdefiniert, dass Quellenverweise in Verzeichnissen keine \citation-Befehle für BIBTEX erzeugen. Mit dem einfachen Laden dieses Paketes ist das Problem in jedem Fall behoben, es sei denn man verwendet noch andere Pakete, die den Befehl \@starttoc umdefinieren. So lässt sich notoccite beispielsweise nicht mit dem hyperref-Paket oder den AMS-Dokumentenklassen kombinieren.
12.3 Das Autor-Jahr-Schema Je nach Satzstruktur verwendet das Autor-Jahr-Schema normalerweise eine von zwei verschiedenen Verweisarten: Sofern der Name des Autors sowieso 722
Bsp. 12-2-14
12.3 Das Autor-Jahr-Schema
im Satz vorkommt, wird er nicht innerhalb der Klammern wiederholt. Andernfalls werden sowohl der Autor als auch das Erscheinungsjahr aufgeführt. Dieser Stil erzeugt für die LaTEX-Standardsyntax ein unlösbares Problem, da diese nur über einen einzigen \cite-Befehl verfügt. Daher musste jeder, der eine Unterstützung für das Autor-Jahr-Schema entwickeln wollte, die LaTEX-Syntax zum Zitieren von Quellen erweitern. Das folgende Beispiel zeigt die beiden Formen und ihre Umsetzung (durch zwei neue Befehle) im natbib-System.
Bsp. 12-3-1
Knuth (1989) zeigt . . . Eine Erklärung dazu findet sich im maßgebenden Handbuch über TEX (Knuth, 1986).
\usepackage{natbib} \citet{Knuth:TB10-1} zeigt \ldots\ Eine Erklärung dazu findet sich im maßgebenden Handbuch über \TeX{} \citep{Knuth-CT-a}.
Eine Erweiterung der LaTEX-Syntax für das Zitieren von Veröffentlichungen löst das Problem jedoch nicht vollständig. Um die verschiedenen Arten von Quellenverweisen zu erzeugen, die das Autor-Jahr-Schema benötigt, müssen die Daten, welche das Literaturverzeichnis über das optionale Argument des \bibitem-Befehls zurückgibt, zunächst strukturiert werden. Ohne spezielle Strukturierung können die Daten für die textuellen Querverweise nicht extrahiert werden (z.B. nur das Jahr in Klammern). Aus dem Eintrag
\bibitem[Donald~E. Knuth 1986]{Knuth-CT-a} Donald~E. Knuth. \newblock \emph{The {\TeX}book}, Band~A von \emph{Computers and Typesetting}. \newblock Addison-Wesley, Reading, MA, USA, 1986. kann der \cite-Befehl zwar den Verweis „(Donald E. Knuth 1986)“ erzeugen, nicht aber „Donald E. Knuth (1986)“ oder nur „Knuth“ bzw. „1986“. Man muss auch sichergehen, dass \bibitem nicht das Label anzeigt, aber das ist relativ leicht zu erreichen. Alle Lösungen für Autor-Jahr-Zitierschemata legen zu diesem Zweck für das optionale Argument von \bibitem eine besondere Syntax fest. Bei manchen Lösungen ist diese recht einfach aufgebaut. Das Paket chicago benötigt zum Beispiel nur
\bibitem[\protect\citeauthoryear {Goossens, Rahtz, und Mittelbach} {Goossens et~al.}{1997}]{LGC97} Derartige Daten können im Bedarfsfalle immer noch manuell erzeugt werden. Andere Pakete gehen hier viel weiter und bilden sehr umfangreiche Datenstrukturen. Das Paket jurabib z.B. erfordert den folgenden Aufbau des Argumentes (für das gleiche Werk):
\bibitem[{Goossens\jbbfsasep Rahtz\jbbstasep Mittelbach\jbdy {1997}}{}{{0}{}{book}{1997}{}{}{}{xxi + 554}{Reading, MA, USA\bpubaddr{} Ad{\-d}i{\-s}on-Wes{\-l}ey Longman\bibbdsep{} 1997}}{{The {\LaTeX} Graphics Companion: Illustrating Documents with {\TeX} and {PostScript}}{}{}{}{}{}{}{}{}}]{LGC97}
723
12
QUELLENVERWEISE
Wie noch zu sehen sein wird (Abschnitt 12.5.1), gewährt dieser Ansatz eine große Flexibilität bei der Gestaltung von Literaturhinweisen. Es ist jedoch auch klar, dass niemand eine solche Bibliographieumgebung manuell erstellen möchte. Daher besteht die einzig brauchbare Lösung hier darin, die Einträge mithilfe eines externen Werkzeuges wie BIBTEX automatisch zu erzeugen.
12.3.1 Frühe Versuche Im Laufe der Jahre wurden viele eigenständige Zusatzpakete für das AutorJahr-Zitierschema entwickelt. Leider definierte jedes von ihnen einen anderen Satz von Benutzerbefehlen. Typischerweise bestehen diese Erweiterungen aus einem LaTEX-Paket mit den Benutzerbefehlen und einem oder mehreren BIBTEXStilen zum Erzeugen der thebibliography-Umgebung mit einer passenden Syntax im optionalen Argument des \bibitem-Befehls. Das chicago-Paket etwa, das die Empfehlungen des The Chicago Manual of Style [38] umzusetzen sucht, bietet die folgende Befehlsliste (sowie Variationen ohne Klammern, die alle auf NP enden, wie z.B. \citeNP):
(Goossens, Rahtz, and Mittelbach 1997) (Goossens, Rahtz, and Mittelbach) Goossens, Rahtz, and Mittelbach (1997) (Goossens and Rahtz 1999) (Goossens and Rahtz) Goossens and Rahtz (1999) (1999) 1999
\usepackage{chicago} \bibliographystyle{chicago} \cite{LGC97} \citeA{LGC97} \citeN{LGC97} \shortcite{LWC99} \shortciteA{LWC99} \shortciteN{LWC99} \citeyear{LWC99} \citeyearNP{LWC99}
\\ \\ \\ \\ \\ \\ \\
Bsp. 12-3-2
Zum chicago-Paket gibt es verschiedene kompatible BIBTEX-Stile (chicago, chicagoa, jas99, named und newapa), die sich allerdings nur für englischsprachige Bibliographien eignen, da sie festverdrahtete Texte wie „and“ generieren. Sie sind alle weiterhin im Gebrauch, auch wenn das chicago-Paket heutzutage nur noch in wenigen LaTEX-Distributionen zu finden ist. An seiner Stelle kann das Paket natbib die nötigen Benutzerbefehle zur Verfügung stellen. Das Paket authordate1–4 von David Rhead kennt hingegen nur zwei Benutzerbefehle. Es ist das ursprüngliche Supportpaket zu den BIBTEX-Stilen authordate1 bis authordate4 und setzt die Empfehlungen der Cambridge und der Oxford University Press sowie verschiedener britischer Standards um.
(Goossens et al. , 1997) oder (1997)
\usepackage{authordate1-4} \bibliographystyle{authordate2} \cite{LGC97} oder \shortcite{LGC97}
Als letztes Beispiel sei das harvard-Paket von Peter Williams und Thorsten Schnier aufgeführt. Im Gegensatz zu den beiden erstgenannten wurde das harvard-Paket weiter entwickelt und für LaTEX 2ε überarbeitet. Es verfügt über eine Reihe interessanter Funktionen. So nennt beispielsweise der erste Hinweis auf eine Quelle alle Autoren, während weitere Verweise eine abgekürzte
724
Bsp. 12-3-3
12.3 Das Autor-Jahr-Schema
Aufzählung verwenden, sofern es nicht explizit anders gewünscht wird. Die Benutzerbefehle sind im nächsten Beispiel zu sehen.
Bsp. 12-3-4
(Goossens, Rahtz & Mittelbach 1997) (Goossens et al. 1997) (Goossens, Rahtz & Mittelbach 1997) Goossens et al. (1997) (siehe Goossens et al. 1997) Goossens et al. Knuth’s (1986)
zweiter erzwungen
\usepackage{harvard} \bibliographystyle{agsm} \cite{LGC97} \cite{LGC97} \hfill zweiter \cite*{LGC97}\hfill erzwungen \citeasnoun{LGC97} \citeaffixed{LGC97}{siehe} \citename{LGC97} \possessivecite{Knuth-CT-a}
Das harvard-Paket benötigt eine besonders aufbereitete Bibliographieumgebung, in welcher der Befehl \bibitem durch \harvarditem ersetzt wird, einem Befehl, der durch seine spezielle Syntax alle erforderlichen Daten für Autor-Jahr-Verweise bereitstellt. Einige BIBTEX-Stile (unter anderem agsm, dcu, kluwer und nederlands) machen sich diese besondere Syntax zunutze. Auch hier gilt, dass diese Stile in einigen Aspekten (etwa \possessivecite im obigen Beispiel) von einer englischsprachigen Bibliographie ausgehen. Viele dieser Pakete setzen das Autor-Jahr-Schema recht ordentlich um. Trotzdem blieb die Situation lange unbefriedigend, angesichts verschiedenster Pakete mit eigener Syntax, von denen jedes nur ein halbes Dutzend BIBTEXStile unterstützte. Die Lage besserte sich erst mit der natbib-Lösung von Patrick Daly, die Thema des nächsten Abschnitts ist.
12.3.2 natbib – Anpassungsfähige Autor-Jahr-Verweise Auch wenn die meisten Verlage angeben, welches Format sie für ein Literaturverzeichnis bevorzugen, ist es nicht immer offensichtlich, wie man von einem System zu einem anderen wechseln kann, wenn man Quelltexte für verschiedene Stile aufbereiten muss. Als Lösung für das im letzten Abschnitt beschriebene Problem einer nicht kompatiblen Syntax entwickelte Patrick Daly das Paket natbib (für „NATurwissenschaftliche BIBliographie“). Das Paket akzeptiert unterschiedliche \bibitem-Varianten (auch \harvarditem), wie sie von den verschiedenen BIBTEX-Stilen erzeugt werden. So war es Benutzern zum ersten Mal möglich, (fast) alle Autor-Jahr-Stile von BIBTEX mit einer einheitlichen Befehlssyntax für die Quellenverweise anzusprechen. Das natbib-Paket ist mit Paketen wie babel, chapterbib, hyperref, index und showkeys kompatibel, sowie mit verschiedenen Dokumentenklassen, einschließlich der LaTEX-Standardklassen, amsbook und amsart sowie den Klassen der KOMA-Script-Sammlung und memoir. Es lässt sich nicht mit dem citePaket kombinieren, verfügt jedoch mittels Optionen über ähnliche Funktionen zum Sortieren und Zusammenfassen. Soweit das Autor-Jahr-Schema gefragt ist, bildet das natbib-Paket somit eine einheitliche, flexible Schnittstelle für die meisten bibliographischen Stile. Es kann auch für numerische Verweise verwendet werden, wie noch in Abschnitt 12.4.1 zu sehen sein wird.
725
\\ \\ \\ \\ \\ \\
12
QUELLENVERWEISE
Die Basissyntax Die beiden zentralen Befehle des natbib-Paketes sind \citet für im Text eingebettete Quellenverweise und \citep für Verweise in „parentheses“, also in Klammern.
\citet[nach]{schlüssel-liste} \citep[nach]{schlüssel-liste}
\citet[vor ][nach]{schlüssel-liste} \citep[vor ][nach]{schlüssel-liste}
Beide Befehle verfügen über ein obligatorisches Argument (die schlüssel-liste, die sich auf ein oder mehrere Publikationen bezieht) und ein oder zwei optionale Argumente, durch welche zusätzliche Angaben vor oder nach dem Quellenverweis erfolgen können. Der Standardbefehl von LaTEX, \cite, verfügt über nur ein optionales Argument, das dem nach-Text entspricht. Daher verwenden die Befehle die folgende Syntax: Ist nur ein optionales Argument vorhanden, so entspricht dieses dem nach-Text (also den Angaben, die dem eigentlichen Quellenverweis folgen). Bei zwei optionalen Argumenten ist das erste der vor- und das zweite der nach-Text. Um nur Angaben vor dem Quellenverweis zu erhalten (mit dem vor-Text) muss man ein leeres zweites Argument hinzufügen, wie in Zeile 4 und 8 im nächsten Beispiel zu sehen. Man beachte auch, dass natbib den Befehl \cite so umdefiniert, dass er sich wie \citet verhält.1
Goossens et al. (1997) Goossens et al. (1997, Kap. 2) Goossens et al. (siehe 1997, Kap. 2) nur Vortext: Goossens et al. (siehe 1997) (Goossens et al., 1997) (Goossens et al., 1997, Kap. 2) (siehe Goossens et al., 1997, Kap. 2) nur Vortext: (siehe Goossens et al., 1997)
\usepackage{natbib} \citet{LGC97} \citet[Kap.~2]{LGC97} \citet[siehe][Kap.~2]{LGC97} nur Vortext: \citet[siehe][]{LGC97} \citep{LGC97} \citep[Kap.~2]{LGC97} \citep[siehe][Kap.~2]{LGC97} nur Vortext: \citep[siehe][]{LGC97}
\\ \\ \\ \\[5pt] \\ \\ \\
Bsp. 12-3-5
Beide Befehle verfügen über Sternformen, \citet* und \citep* (mit ansonsten gleicher Syntax), die alle Autoren auflisten, sofern die entsprechenden Daten verfügbar sind.2 Diese Formen funktionieren jedoch nur, wenn die Funktion von dem verwendeten BIBTEX-Stil unterstützt wird. Anders ausgedrückt müssen die Daten im optionalen Argument von \bibitem zur Verfügung stehen, andernfalls wird immer die gekürzte Liste ausgegeben.
Goossens, Rahtz, und Mittelbach (1997) (siehe Goossens, Rahtz, und Mittelbach, 1997) Ein Vorgriff auf Kapitel 13
\usepackage{natbib} \bibliographystyle{lb2exa} \citet*{LGC97} \citep*[siehe][]{LGC97}
\\
Im Unterschied zu den ersten Beispielen in diesem Kapitel, sind die generierten Texte („und“ im aktuellen Fall) diesmal korrekt ins Deutsche übersetzt. 1 Genauer gesagt wird \cite dann zu \citet umdefiniert, wenn man das natbib-Paket im Autor-Jahr-Modus einsetzt, um den es ja in diesem Abschnitt geht. Im Autor-NummerModus (siehe Abschnitt 12.4.1) verhält er sich wie \citep . 2 Wenn man gleichzeitig das jurabib-Paket verwenden möchte (siehe Abschnitt 12.5.1), sollte man die Sternformen meiden, da sie von diesem Paket nicht unterstützt werden.
726
Bsp. 12-3-6
12.3 Das Autor-Jahr-Schema
Dazu wurde lb2exa, ein mit custom-bib (siehe Abschnitt 13.5.2 auf Seite 828) erzeugter und auf die deutsche Sprache angepasster BIBTEX-Stil, verwendet. Dieser Stil kommt auch in den weiteren Beispielen zum Tragen, sofern nichts anderes angegeben ist. Es gibt noch zwei weitere Varianten der Befehle: \citealt funktioniert genau wie \citet, erzeugt jedoch keine Klammern, und \citealp entspricht \citep ohne Klammern. Augenscheinlich sind einige der gesetzten Ergebnisse nahezu identisch.
Bsp. 12-3-7
Goossens et al. 1997 Goossens et al., 1997 Goossens, Rahtz, und Mittelbach 1997 Goossens, Rahtz, und Mittelbach, 1997 Goossens und Rahtz, 1999, S. 236 etc.
\usepackage{natbib} \citealt{LGC97} \citealp{LGC97} \citealt*{LGC97} \citealp*{LGC97} \citealp[S.~236]{LWC99} etc.
\\ \\ \\ \\
Beim Autor-Jahr-Schema möchte man gelegentlich nur den Autor (bzw. die Autoren) oder das Jahr angeben. Dazu verfügt das natbib-Paket über die folgenden zusätzlichen Befehle (\citeauthor* ist mit \citeauthor identisch, wenn keine vollständigen Autorendaten vorliegen):
Bsp. 12-3-8
Goossens et al. Goossens, Rahtz, und Mittelbach 1997 und (1997)
\usepackage{natbib} \citeauthor{LGC97} \\ \citeauthor*{LGC97} \\ \citeyear{LGC97} und \citeyearpar{LGC97}
Mithilfe des Befehls \citetext lassen sich noch komplexere Kombinationen aus Quellenverweisen und Texten zusammenstellen. Er verfügt über ein obligatorisches Argument, das mit den gleichen Klammern umgeben wird, wie sie die anderen Befehle für Quellenverweise verwenden. Durch Kombination dieses Befehls mit \citealp oder anderen Befehlen, die keine Klammern setzen, lassen sich verschiedenste Verweistexte zusammenstellen. Bsp. 12-3-9
(siehe Goossens et al., 1997 \usepackage{natbib} \citetext{siehe \citealp{LGC97} oder \citealp{Knuth-CT-a}} oder Knuth, 1986) Es kann vorkommen, dass ein Quellenverweis am Satzanfang steht und der Name des (ersten) Autors des zitierten Werkes mit einem Kleinbuchsta- " Groß geschriebene Namen erzwingen ben beginnt. Für diesen Fall sind die bisher besprochenen Befehle unbrauchbar. Das natbib-Paket löst dieses Problem, indem es für alle Befehle Varianten bereitstellt, die den ersten Buchstaben immer groß schreiben. Sie sind leicht zu merken: Der Befehlsname entspricht jeweils dem des Originalbefehls, jedoch mit großem Anfangsbuchstaben. So erhält man beispielsweise \Citet* anstelle von \citet* . Es folgen einige weitere Beispiele:
Bsp. 12-3-10
Normaler Quellenverweis: van Leunen (92) Van Leunen (92) oder Van Leunen 92 (Van Leunen, 92) oder Van Leunen, 92 Van Leunen
\usepackage{natbib} Normaler Quellenverweis: \citet{vLeunen:92} \\ \Citet{vLeunen:92} oder \Citealt{vLeunen:92} \\ \Citep{vLeunen:92} oder \Citealp{vLeunen:92} \\ \Citeauthor{vLeunen:92}
727
12
QUELLENVERWEISE
Als letzte Zugabe kann man in natbib Alternativtexte für Quellenverweise formulieren, um diese anstelle der normalen Autor-Jahr-Kombination zu verwenden. Sie werden mit \defcitealias definiert (normalerweise in der Präambel) und über \citetalias oder \citepalias abgerufen.
Goossens et al. (1997) = Dogbook II (Goossens et al., 1997) = (Dogbook II) Alias geändert: (siehe Dogbook II 2.Aufl.)
\usepackage{natbib} \defcitealias{LGC97}{Dogbook~II} \citet{LGC97} = \citetalias{LGC97} \\ \citep{LGC97} = \citepalias{LGC97} \\ \defcitealias{LGC97}{Dogbook~II~2.Auf\/l.} Alias geändert: \citepalias[siehe][]{LGC97}
Bsp. 12-3-11
Mit den in diesem Abschnitt vorgestellten Befehlen bietet das natbibPaket (mit kleinen Abweichungen) den gleichen Funktionsumfang wie andere Lösungen für das Autor-Jahr-Schema (z.B. die in Abschnitt 12.3.1 beschriebenen Pakete). Zusätzlich bietet es Funktionen an, die man sonst nirgendwo findet. Andererseits verfügt natbib in einigen Fällen nicht direkt über genau entsprechende Befehle. So gibt es z.B. für den \possessivecite-Befehl des harvard-Paketes (der in Beispiel 12-3-4 gezeigt wurde) keine unmittelbare Entsprechung im natbib-Paket, er lässt sich jedoch leicht nachbauen. Man kann ihn entweder direkt mit \citeauthor und \citeyearpar nachahmen, wie in der ersten Zeile des nächsten Beispiels geschehen, oder einen eigenen Befehl dafür definieren, wenn diese Konstruktion häufiger benötigt wird (in der deutschen Sprache würde der Apostroph wegfallen).
Knuth’s (1986) Knuth’s (1986)
\usepackage{natbib} \bibliographystyle{agsm} \newcommand\possessivecite[1]{\citeauthor{#1}’s \citeyearpar{#1}} \citeauthor{Knuth-CT-a}’s \citeyearpar{Knuth-CT-a} \\ \possessivecite{Knuth-CT-a}
Bsp. 12-3-12
Mehrfache Quellenverweise In Standard-LaTEX kann man mehrfache Quellenverweise vornehmen, indem man dem \cite-Befehl mehrere Zitierschlüssel im schlüssel-liste-Argument übergibt. Das gleiche Verfahren lässt sich auch für die Befehle \citet und \citep (sowie ihre Varianten) anwenden. Das natbib-Paket prüft dann automatisch, ob benachbarte Verweise in der schlüssel-liste die gleichen Autoren beinhalten. In diesem Fall werden die Namen der Autoren nur einmal ausgegeben. Dazu müssen die Autorennamen natürlich identisch geschrieben sein. Für das natbib-Paket sind z.B. „D. Knuth“ und „Donald Knuth“ zwei verschiedene Autoren.
Goossens et al. (1997); Goossens und Rahtz (1999) (Goossens et al., 1997; Goossens und Rahtz, 1999) (Knuth, 1989, 1986)
\usepackage{natbib} \citet{LGC97,LWC99} \\ \citep{LGC97,LWC99} \\ \citep{Knuth:TB10-1,Knuth-CT-a}
Die letzte Zeile des vorigen Beispiels verdeutlicht ein mögliches Problem, wenn man in einem Verweisbefehl mehrere Schlüssel verwendet: Die Verweise werden in der Reihenfolge gesetzt, wie sie in der schlüssel-liste erscheinen.
728
Bsp. 12-3-13
12.3 Das Autor-Jahr-Schema
Mithilfe der Option sort werden die Quellenverweise nach ihrer Reihenfolge in der Bibliographie sortiert, normalerweise zuerst nach Autor und dann nach dem Erscheinungsjahr. Bsp. 12-3-14
\usepackage[sort]{natbib} \citep{Knuth:TB10-1,Knuth-CT-a}
(Knuth, 1986, 1989)
Auch wenn alle Quellenverweisbefehle mehr als einen Zitierschlüssel im schlüssel-liste-Argument unterstützen, beschränkt man sich hierzu doch besser auf den Befehl \citep . Schon \citet erzeugt eher fragwürdige Ergebnisse. Die Lage verschlimmert sich noch durch die Verwendung der optionalen Argumente: Der Befehl \citet setzt jeden zusätzlichen vor-Text vor jedes Jahr (was man durchaus als Fehler des Paketes bezeichnen könnte). Allgemeiner gesagt wird nicht so richtig deutlich, auf was sich diese ergänzenden Texte eigentlich beziehen sollen. Daher ist es besser die Quellenverweise zu trennen, wenn man noch ergänzenden Text hinzufügen möchte.
Bsp. 12-3-15
(siehe Southall, 1992; Knuth, 1986, S. 55) (siehe Knuth, 1986, 1989, S. 55) Southall (siehe 1992); Knuth (siehe 1986, S. 55) Knuth (siehe 1986, 1989, S. 55)
\usepackage{natbib} \citep[siehe][S.~55]{Southall,Knuth-CT-a} \\ \citep[siehe][S.~55]{Knuth-CT-a,Knuth:TB10-1}\\ \citet[siehe][S.~55]{Southall,Knuth-CT-a} \\ \citet[siehe][S.~55]{Knuth-CT-a,Knuth:TB10-1}
Nur beim ersten Verweis alle Autoren auflisten Das harvard-Paket führt im ersten Quellenverweis zu einem Werk automatisch alle Autoren an, bei nachfolgenden Verweisen dann nur noch eine abgekürzte Liste. Dieser Stil ist in manchen Disziplinen sehr beliebt und wird vom natbib-Paket durch die Option longnamesfirst unterstützt. Man vergleiche das nächste Beispiel mit dem Beispiel 12-3-4 auf Seite 725.
Bsp. 12-3-16
(Goossens, Rahtz & Mittelbach 1997) erster Verweis (Goossens et al. 1997) zweiter (Goossens, Rahtz & Mittelbach 1997) erzwungen Goossens et al. (1997) (e.g., Goossens et al. 1997) Goossens et al.
\usepackage[longnamesfirst]{natbib} \bibliographystyle{agsm} \citep{LGC97} \hfill erster Verweis\\ \citep{LGC97} \hfill zweiter \\ \citep*{LGC97}\hfill erzwungen \\ \citet{LGC97} \\ \citep[e.g.,][]{LGC97} \\ \citeauthor{LGC97}
Einige BIBTEX-Stildateien sind recht ausgeklügelt programmiert. Der BIBTEXStil agsm aus dem letzten Beispiel verweigert z.B. die Abkürzung der Liste, wenn er bemerkt, dass eine verkürzte Autorenliste zu einem mehrdeutigen Verweis führen würde. Nachdem das Beispiel um den Quellenverweis test97 ergänzt wurde, erschienen alle Verweise plötzlich nur noch in der Langform.1 BIBTEX-Stile, die mit makebst erzeugt werden, vermeiden mehrdeutige Verweise, indem sie das Jahr um ein Suffix ergänzen. Andere BIBTEX-Stile, wie 1 Dieses Verhalten verblüffte den Autor ziemlich, als er es beim Vorbereiten der Beispiele zum ersten Mal bemerkte.
729
12
QUELLENVERWEISE
zum Beispiel chicago), erzeugen diese jedoch ohne Bedenken (vergleiche Beispiel 12-3-18 unten).
(Goossens, Rahtz & Mittelbach 1997) erster Verweis (Goossens, Rahtz & Mittelbach 1997) zweiter (Goossens, User, Doe et al. 1997) erster Verweis (Goossens, User, Doe et al. 1997) zweiter
\usepackage[longnamesfirst]{natbib} \bibliographystyle{agsm} \citep{LGC97} \hfill erster Verweis \\ \citep{LGC97} \hfill zweiter \\ \citep{test97}\hfill erster Verweis \\ \citep{test97}\hfill zweiter
Bsp. 12-3-17
Einige Publikationen haben so viele Autoren, dass man sie immer nur mit einer verkürzten Liste zitieren möchte, selbst beim ersten Vorkommen. Dazu muss man ihre Zitierschlüssel durch Kommas getrennt im Argument der \shortcites-Deklaration aufführen. Das nächste Beispiel zeigt auch, dass die Verwendung des chicago-Stils zu mehrdeutigen Quellenverweisen führen kann (vgl. Zeile 1 und 2 mit Zeile 5).
(Goossens et al., 1997) erster Verweis (Goossens et al., 1997) zweiter (Goossens, Rahtz, and Mittelbach, 1997) erzwungen (Goossens, User, Doe, et al., 1997) erster Verweis (Goossens et al., 1997) zweiter
\usepackage[longnamesfirst]{natbib} \bibliographystyle{chicago} \shortcites{LGC97} \citep{LGC97} \hfill erster Verweis \citep{LGC97} \hfill zweiter \citep*{LGC97}\hfill erzwungen \citep{test97}\hfill erster Verweis \citep{test97}\hfill zweiter
\\ \\ \\ \\
Bsp. 12-3-18
Anpassen des Layouts der Quellenverweise Bisher zeigten alle Verweise in den Beispielen runde Klammern. Das ist jedoch bei Weitem nicht die einzige Möglichkeit, die das natbib-Paket bietet. Intern kennt das Paket mehr als 20 verschiedene BIBTEX-Stile. Wird einer davon mit einem \bibliographystyle-Befehl ausgewählt, dann sucht das Paket auch ein dazu passendes Layout für die Quellenverweise aus. Mit dem Stil agu (American Geophysics Union) erhält man beispielsweise folgendes Ergebnis:
Goossens et al. [1997] [Knuth, 1986; Goossens and Rahtz, 1999] [siehe Knuth, 1986, Kap. 2]
\usepackage{natbib} \bibliographystyle{agu} \citet{LGC97} \\ \citep{Knuth-CT-a,LWC99} \\ \citep[siehe][Kap.~2]{Knuth-CT-a}
Gemäß der Voreinstellung wird das Layout für die Verweise durch den ausgewählten BIBTEX-Stil bestimmt, oder durch die Vorgaben des natbibPaketes, sofern es einen bestimmten Stil nicht kennt. Durch Hinzufügen einer \citestyle-Deklaration kann man für die Quellenverweise einen anderen BIBTEX-Stil verwenden, als den der Bibliographie. Im nächsten Beispiel wird für die Quellenverweise der Stil agsm verwendet, während agu der Hauptstil bleibt. Bei einem Vergleich dieses Beispiels mit Beispiel 12-3-19 sieht man, dass die Formatierung des Textes erhalten bleibt (zum Beispiel Autornamen
730
Bsp. 12-3-19
12.3 Das Autor-Jahr-Schema
in Kursivschrift), die Klammern und die Trennung zwischen Autoren und Jahr haben sich jedoch geändert.
Bsp. 12-3-20
Goossens et al. (1997) (Knuth 1986, Goossens and Rahtz 1999) (siehe Knuth 1986, Kap. 2)
\usepackage{natbib} \bibliographystyle{agu} \citestyle{agsm} \citet{LGC97} \\ \citep{Knuth-CT-a,LWC99} \\ \citep[siehe][Kap.~2]{Knuth-CT-a}
Man kann das Layout auch über Optionen beeinflussen: Die Optionen
round (Voreinstellung der meisten Stile), square, curly oder angle ändern die Art der verwendeten Klammern, während colon1 (Voreinstellung der meisten Stile) und comma das Trennzeichen zwischen mehrfachen Quellenverweisen beeinflussen. Im nächsten Beispiel werden die Voreinstellungen des agu-Stils durch Laden des natbib-Paketes mit zwei Optionen überschrieben; vergleiche das Ergebnis mit Beispiel 12-3-19.
Bsp. 12-3-21
Goossens et al. {1997} {Knuth, 1986, Goossens and Rahtz, 1999} {siehe Knuth, 1986, Kap. 2}
\usepackage[curly,comma]{natbib} \bibliographystyle{agu} \citet{LGC97} \\ \citep{Knuth-CT-a,LWC99} \\ \citep[siehe][Kap.~2]{Knuth-CT-a}
Eine weitere Methode zum Anpassen des Layouts, die sich hauptsächlich an Entwickler von Paketen und/oder Klassendateien richtet, ist die Deklaration \bibpunct . Sie verfügt über sieben Argumente (von denen das erste optional ist) zum Definieren verschiedener Aspekte eines Formates für Quellenverweise. Sie wird typischerweise verwendet, um das für einen bestimmten BIBTEX-Stil voreingestellte Layout eines Quellenverweises zu definieren. So enthält das natbib-Paket z.B. viele Definitionen wie die folgende:
\newcommand\bibstyle@chicago{\bibpunct{(}{)}{;}{a}{,}{,}} Diese Definition wird ausgewählt, wenn man chicago als BIBTEX-Stil festlegt oder dem Befehl \citestyle als Argument übergibt. Ähnliche Deklarationen lassen sich auch für BIBTEX-Stile hinzufügen, die natbib nicht direkt unterstützt. Dies geht am einfachsten, indem man solche Deklarationen in der lokalen Konfigurationsdatei natbib.cfg sammelt. Nähere Einzelheiten zur Bedeutung der Argumente kann man der Dokumentation entnehmen, die dem natbib-Paket beiliegt. Bei sich überschneidenden Angaben greifen die folgenden Regeln: Interne \bibstyle@!name"-Deklarationen erhalten die geringste Priorität, gefolgt von den Optionen der \usepackage-Deklarationen. Beide werden durch eine explizite \bibpunct- oder \citestyle-Deklaration in der Präambel überschrieben. Normalerweise lässt das natbib-Paket einen Zeilenumbruch in der Autorenliste eines Quellenverweises zu. Mithilfe der Option nonamebreak kann Alle Autorennamen in man festlegen, dass alle Autorennamen eines einzelnen Verweises in einer eine Zeile zwingen Zeile erscheinen. Dies ist zwar normalerweise keine gute Idee, da auf diese Weise leicht überlaufende Boxen entstehen können, andererseits lassen sich so jedoch einige hyperref-Probleme lösen. 1 Trotz
ihres Namens erzeugt diese Option ein Semikolon.
731
12
QUELLENVERWEISE
Anpassen des Layouts der Bibliographie Die Umgebung thebibliography des natbib-Paketes fügt vor dem Literaturverzeichnis automatisch eine Überschrift ein. Entsprechend seiner Voreinstellung wählt natbib hierzu eine nicht nummerierte Überschrift der höchsten Gliederungsebene, wie etwa \chapter* für book-ähnliche Klassen oder \section* für die Klasse article und ihre Varianten. Die eigentliche Überschrift wird in dem Befehl \bibsection gespeichert. Um die Voreinstellungen zu ändern muss man also diesen Befehl umdefinieren. Dadurch lässt sich z.B. die Überschrift unterdrücken oder man wählt eine nummerierte Form. Das natbib-Paket unterstützt auch einen Sonderfall: Mit der Option sectionbib weist man das Paket an, die Überschrift immer mit \section* zu bilden, auch wenn die höchste Gliederungsebene eigentlich \chapter wäre. Diese Option erweist sich als nützlich, wenn man die Pakete natbib und chapterbib miteinander kombiniert (siehe Abschnitt 12.6.1). Zwischen \bibsection und dem Anfang der Auflistung führt natbib den Befehl \bibpreamble aus, sofern dieser definiert ist. Mit seiner Hilfe kann man zwischen der Überschrift und dem eigentlichen Literaturverzeichnis noch zusätzlichen Text einfügen. Durch Definieren des Befehls \bibfont kann man außerdem die Schrift der Bibliographie festlegen. Mit seiner Hilfe lässt sich das Verzeichnis auch noch anders abwandeln, etwa indem man es mit \raggedright im Flattersatz setzt. Man beachte, dass sowohl \bibpreamble als auch \bibfont zunächst nicht definiert sind, so dass man sie erst mit \newcommand einrichten muss. Der Befehl \bibsection hingegen wird mit \renewcommand umdefiniert. Schließlich stehen noch zwei Längenparameter zur Anpassung zur Verfügung. Die erste Zeile in jeder Quellenangabe wird linksbündig gesetzt, alle weiteren Zeilen werden um den in \bibhang gespeicherten Wert (voreingestellt auf 1em) eingerückt. Der vertikale Abstand zwischen den einzelnen Einträgen ist in der elastischen Länge \bibsep gespeichert. Ihr voreingestellter Wert orientiert sich normalerweise an der Länge \itemsep, die für andere Listen definiert wird. Um die verschiedenen Möglichkeiten zu veranschaulichen, wird hier Beispiel 12-1-2 auf Seite 709 wiederholt, jedoch mit verschiedensten Anpassungen (die nicht unbedingt immer eine Verbesserung darstellen!). Man beachte, dass am Ende von \bibpreamble der Befehl \par gesetzt wird. Ohne ihn würden sich die Einstellungen in \bibfont auch auf den eingefügten Text auswirken! Das Problem der Konvertierung von Titeln in Kleinbuchstaben besteht weiterhin.
\usepackage{natbib} \bibliographystyle{abbrvnat} \renewcommand\bibsection{\section{\refname}} \newcommand\bibpreamble{Zusätzlicher Text zwischen Überschrift und Verzeichnis.\par} \newcommand\bibfont{\footnotesize\raggedright} \setlength\bibhang{30pt} \setlength\bibsep{1pt plus 1pt} Einträge mit mehreren Autoren könnten problematisch sein, wie z.B. \cite{LGC97} und \cite{test97} oder sogar \cite{LGC97,test97}. Oder auch nicht. \bibliography{tex}
732
12.3 Das Autor-Jahr-Schema
Einträge mit mehreren Autoren könnten problematisch sein, wie z.B. Goossens et al. [1997a] und Goossens et al. [1997b] oder sogar Goossens et al. [1997a,b]. Oder auch nicht. 1 Literatur Zusätzlicher Text zwischen Überschrift und Verzeichnis.
Bsp. 12-3-22
M. Goossens, S. Rahtz, and F. Mittelbach. The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Tools and Techniques for Computer Typesetting. Addison-Wesley Longman, Reading, MA, USA, 1997a. ISBN 0-201-85469-4. M. Goossens, B. User, J. Doe, et al. Mehrdeutige quellenverweise. Eingereicht bei IBM J. Res. Dev., 1997b.
Publikationen ohne Autoren- oder Jahresdaten Um das Autor-Jahr-Zitierschema verwenden zu können, müssen die Einträge im Literaturverzeichnis die benötigten Daten enthalten. Bei fehlenden Daten können Verweise mit dem Befehl \citet oder seinen Varianten seltsame Ergebnisse liefern. Verfügt die Veröffentlichung nicht über einen Autor, sondern nur über einen Herausgeber, dann greifen die meisten BIBTEX-Stile auf Letzteren zurück. Fehlen jedoch beide, dann werden sehr unterschiedliche Lösungsansätze verfolgt. BIBTEX-Dateien im „Harvard“-Stil (wie z.B. agsm) verwenden die ersten drei Buchstaben des „key“-Feldes (Schlüssel), sofern eines existiert. Ansonsten benutzen sie die ersten drei Buchstaben des Feldes „organization“ (wobei Zeichenfolgen wie „The “ ignoriert werden), oder sie führen den ganzen Titel an. Bei fehlendem Erscheinungsjahr wird der Text „n.d.“ (no date) verwendet. Auf diese Weise erhält man verwertbare Einträge, außer wenn nur ein Teil des „key“-Feldes ausgewählt wird: Bsp. 12-3-23
Koppitz (n.d.) / TUGboat The Communications of the TEX User Group (1980ff) / mak (2000)
\usepackage{natbib} \bibliographystyle{agsm} \citet{G-G} / \citet{oddity} / \citet{GNUMake}
Mit makebst erzeugte BIBTEX-Stile (wie etwa unsrtnat) verfolgen bei den gleichen Einträgen die folgende Strategie: Sofern ein „key“-Feld (Schlüssel) vorhanden ist, wird dieses komplett als „Autor“ angeführt. Ansonsten werden die ersten drei Buchstaben eines vorhandenen „organization“-Feldes verwendet (wobei Text wie „The “ ignoriert wird). Ansonsten erscheinen die ersten drei Buchstaben des Verweislabels. Ein fehlendes Erscheinungsjahr wird einfach ausgelassen. Bei im Text eingebetteten Verweisen wird so nur der Name des Autors aufgeführt. In solchen Fällen, oder wenn das Schlüsselfeld benutzt wird, sollte man den Befehl \citet wohl am besten zugunsten von \citep vermeiden, damit für den Leser deutlicher zu erkennen ist, dass man wirklich auf eine Quelle verweist und nicht nur beiläufig einen Autor erwähnt.
Bsp. 12-3-24
Koppitz / odd [1980ff] / make [Koppitz] / [odd, 1980ff] / [make]
\usepackage{natbib} \bibliographystyle{unsrtnat} \citet{G-G} / \citet{oddity} / \citet{GNUMake} \\ \citep{G-G} / \citep{oddity} / \citep{GNUMake}
733
12
QUELLENVERWEISE
Als letztes Beispiel folgen die Ergebnisse, die der BIBTEX-Stil chicago erzeugt. Der Verweis auf das GNU-Handbuch ist hier sehr schön (der volle Name der Organisation erscheint), aber der Eintrag mit fehlendem Datum sieht seltsam aus.
Koppitz (Koppitz) / odd (80ff) / Free Soft\usepackage{natbib} \bibliographystyle{chicago} ware Foundation (2000) (Koppitz, Koppitz) / (odd, 80ff) / (Free \citet{G-G} / \citet{oddity} / \citet{GNUMake} \\ \citep{G-G} / \citep{oddity} / \citep{GNUMake} Software Foundation, 2000)
Bsp. 12-3-25
Erzwingen des Autor-Jahr-Stils Das natbib-Paket ist so voreingestellt, dass es in Kombination mit den meisten BIBTEX-Stilen Autor-Jahr-Verweise erzeugt. Man kann dieses Schema zudem explizit erzwingen, indem man das Paket mit der Option authoryear lädt. Damit dieses Verfahren funktioniert, muss der BIBTEX-Stil jedoch auch Autor-Jahr-Daten an das Dokument zurückmelden. Ausschließlich für numerische Verweise entwickelte .bst-Dateien, wie etwa das LaTEX-eigene plain, können diese Daten jedoch nicht liefern. In solchen Fällen ignoriert das natbibPaket die authoryear-Option und gibt, wenn man den Befehl \citet oder eine seiner Varianten verwendet, Warnungen über fehlende Autordaten und ähnliche Verweise wie die folgenden aus:
(author?) [3] / (author?) [1] / (author?) [2]
\usepackage{natbib} \bibliographystyle{plain} \citet{G-G} / \citet{oddity} / \citet{GNUMake}
Hier wechselt man am besten zu einem BIBTEX-Stil, welcher das Autor-JahrSchema unterstützt, wie z.B. plainnat anstelle von plain. Automatisches Indexieren von Quellenverweisen Ab jeder Stelle in einem Dokument kann man Quellenverweise mithilfe des Befehls \citeindextrue in den Index aufnehmen. Von dieser Stelle bis zum nächsten \citeindexfalse-Befehl (oder dem Ende der aktuellen Gruppe) erzeugen alle Varianten der Befehle \citet und \citep Einträge in der Indexdatei (sofern eine solche erstellt wird). Solange \citeindextrue aktiv ist, erzeugen auch \bibitem-Befehle in der thebibliography-Umgebung Indexeinträge. Wenn dies nicht erwünscht ist, muss man vor Beginn der Umgebung (zum Beispiel bevor man \bibliography aufruft) den Befehl \citeindexfalse ausgeben. Das Indexformat wird durch den internen Befehl \NAT@idxtxt gesteuert. Seine Definition ist folgendermaßen vorgegeben:
\newcommand\NAT@idxtxt{\NAT@name\ \NAT@open\NAT@date\NAT@close} Entsprechend erzeugt er Einträge wie „Knuth (1986)“. Verweise ohne Autorenoder Jahresdaten erscheinen höchstwahrscheinlich immer etwas seltsam. Die Quellenverweise aus Beispiel 12-3-24 erzeugen die folgenden Einträge:
\indexentry{{Koppitz}\ []}{6} \indexentry{{odd}\ [1980ff]}{6} \indexentry{{make}\ []}{6} 734
Bsp. 12-3-26
12.3 Das Autor-Jahr-Schema
Damit der Befehl beispielsweise nur den Namen des Autors ausgibt, kann man ihn in der Datei natbib.cfg oder in der Dokumentenpräambel umdefinieren. In letzterem Falle darf man die Befehle \makeatletter und \makeatother nicht vergessen! Mithilfe des Paketes index von David Jones (siehe Abschnitt 11.4.3) kann man auch einen separaten Index für Quellenverweise erzeugen. Durch den Befehl \newindex lassen sich zudem mehrere Indexe erstellen. Dazu muss man in der Präambel zunächst den Index deklarieren und dann die automatische Indexierung von Quellenverweisen mit diesem Index verknüpfen:
\usepackage{index} \newindex{default}{idx}{ind}{Index} % der Hauptindex \newindex{cite}{cdx}{cnd}{Index der Quellenverweise} \renewcommand\citeindextype{cite} Später bestimmt man mit dem Befehl \printindex[cite] , wo im Dokument der Index für Quellenverweise ausgegeben werden soll. BIBTEX-Stile für natbib Wie bereits in der Einleitung erwähnt, wurde das natbib-Paket für verschiedene BIBTEX-Stile entwickelt, die in irgendeiner Weise mit dem Autor-JahrZitierschema arbeiten. Zusätzlich zu diesen Stilen Dritter unterstützt natbib alle Stile, die sich mit der custom-bib-Sammlung erzeugen lassen (siehe Abschnitt 13.5.2 auf Seite 828). Selbst enthält es die drei Stile abbrvnat, plainnat und unsrtnat, die Erweiterungen der entsprechenden Standardformate darstellen. Sie wurden so an natbib angepasst, dass man einige der Funktionen des Paketes verwenden kann, die anderweitig nicht verfügbar wären. Diese Stile unterstützen außerdem einige zusätzliche Felder, die sich im Zeitalter der elektronischen Veröffentlichungen als nützlich erwiesen:
doi Für elektronische Zeitschriften und ähnliche Materialien. Der Digital Object Identifier (DOI) ist ein System zum Identifizieren und Austauschen von geistigem Eigentum in digitalen Umgebungen und ist wahrscheinlich robuster als eine URL (nähere Einzelheiten unter http://www.doi.org). Das Feld ist optional.
eid Da elektronische Zeitschriften normalerweise keine Seitenzahlen enthalten, verwenden sie eine besondere Kennzeichnung für die Reihenfolge (die EID) um Artikel in einer Zeitschrift zu lokalisieren. Das Feld ist optional und wird, sofern es existiert, anstelle der Seitenzahl verwendet.
isbn Die internationale Standardbuchnummer (ISBN) ist eine zehnstellige eindeutige Identifikationsnummer (siehe www.isbn.org). Die ISBN ist in ISO-Standard 2108 definiert und ist schon seit mehr als 30 Jahren im Gebrauch. Das Feld ist optional.
issn Die internationale Standardseriennummer (ISSN) ist eine achtstellige Identifikationsnummer für regelmäßig erscheinende Veröffentlichungen (siehe www.issn.org). Das Feld ist optional.
url Der Uniform Resource Locator (URL) zur Identifikation von Quellen im Worldwide Web. Das Feld ist optional. Da URL-Adressen normalerweise 735
12
QUELLENVERWEISE
sehr lang sein können und in Schreibmaschinenschrift gesetzt werden, kann es zu Problemen mit dem Zeilenumbruch kommen. Daher werden sie automatisch mit einem \url-Befehl umgeben, der eine einfache vorgegebene Definition erhält, sofern er noch nicht definiert ist. Mithilfe des url-Paketes (siehe Abschnitt 3.1.8) kann man so die Handhabung von Zeilenumbrüchen erheblich verbessern, da sich URLs dann auch an Interpunktionszeichen umbrechen lassen.
12.3.3 bibentry – Bibliographieeinträge im Fließtext Anstatt alle zitierten Werke in einem Literaturverzeichnis zusammenzufassen ist es manchmal auch erforderlich, direkt alle Daten anzugeben, wenn eine Quelle das erste Mal zitiert wird. Zu diesem Zweck entwickelte Patrick Daly passend zum natbib-Paket das bibentry-Paket.
\nobibliography{BIBTE X-datenbank-liste} Dieser
Befehl
funktioniert
\bibentry{schlüssel }
folgendermaßen:
Anstelle
des
üblichen
\bibliography-Befehls, der die von BIBTEX geschriebene .bbl-Datei lädt und die Bibliographie setzt, verwendet man \nobibliography mit der gleichen Liste von BIBTEX-Datenbankdateien. Dieser Befehl liest die .bbl-Datei und verarbeitet die Daten, so dass an anderen Stellen im Dokument Verweise auf Einträge erfolgen können. Ein Quellenverweis mit vollständigen bibliographischen Daten wird mit dem Befehl \bibentry erzeugt. Die herkömmlichen Autor-Jahr-Verweise lassen sich mit jedem der natbib-Befehle ausgeben. Dazu folgendes Beispiel:
Nähere Einzelheiten in Knuth, D. E., Typesetting Concrete Mathematics, TUGboat, 10, 31–36, 1989. Allgemeine Informationen finden sich in Knuth, D. E., The TEXbook, vol. A of Computers and Typesetting, Addison-Wesley, Reading, MA, USA, 1986. Wie in Knuth [1989] gezeigt . . . Mögliche Fallstricke !
736
\usepackage{bibentry,natbib} \bibliographystyle{agu} \raggedright \setlength\parindent{12pt} \nobibliography{tex} Nähere Einzelheiten in \bibentry{Knuth:TB10-1}. Allgemeine Informationen finden sich in \bibentry{Knuth-CT-a}. Wie in \citet{Knuth:TB10-1} gezeigt \ldots
Dabei sind eine Reihe von Punkten zu beachten: Der \nobibliographyBefehl muss im Hauptteil des Dokumentes stehen, und zwar vor dem ersten \bibentry-Befehl. In der Präambel wird \nobibliography völlig ignoriert und ein \bibentry-Befehl, der vor \nobibliography erfolgt, gibt keine Daten aus. Daher steht dieser Befehl am besten direkt nach \begin{document}. Ein weiteres mögliches Problem ergibt sich aus der Wahl des BIBTEX-Stils. Das Paket bibentry erfordert eine besondere Struktur der Einträge in der .bbl-Datei. Sie müssen durch Leerzeilen voneinander getrennt sein und der \bibitem-Befehl muss entweder mit einem Leerzeichen oder einem Zeilenvorschub vom eigentlichen Eintrag abgesetzt werden. Bei BIBTEX-Stilen, die mit dem Programm makebst erzeugt wurden, wird diese Struktur automatisch erzwungen. Andere BIBTEX-Stile können jedoch unbrauchbar sein, auch solche, die ansonsten mit natbib funktionieren.
Bsp. 12-3-27
12.4
Das Autor-Nummer-Schema
Der \bibentry-Befehl entfernt automatisch einen Punkt am Eintragsende, so dass die Einträge auch mitten im Satz aufgeführt werden können. Wenn der Eintrag jedoch weitere Satzzeichen enthält, wie etwa einen Punkt als Teil eines „note“-Feldes, dann kann der endgültige Text immer noch seltsam anmuten. In diesem Fall hilft wohl nur das Anpassen des BIBTEX-Datenbankeintrags. Man kann auch gleichzeitig ein Literaturverzeichnis verwenden und mit \bibentry vollständige Quellenangaben im Text erzeugen. Dazu platziert man den \bibliography-Befehl an der Stelle, an welcher das Literaturverzeichnis erscheinen soll. Zudem wird direkt nach \begin{document} der \nobibliography*-Befehl eingefügt. Diese Variante verfügt über kein eigenes Argument, da die BIBTEX-Datenbankdateien bereits im \bibliographyBefehl festgelegt sind. Dadurch erscheinen alle mit \bibentry zitierten Publikationen automatisch auch in der Bibliographie, da auf die gleiche .bbl-Datei zugegriffen wird.
12.4 Das Autor-Nummer-Schema Wie bereits in der Einleitung erwähnt, gibt es derzeit keine BIBTEX-Stildatei mit einem Autor-Nummer-Schema, in der die Publikationen jedes Autors einzeln durchnummeriert sind. Wenn die Werke jedoch in der gesamten Bibliographie fortlaufend nummeriert werden sollen, dann bieten BIBTEX und das natbibPaket, das bereits im Zusammenhang mit dem Autor-Jahr-Schema besprochen wurde, weit reichende Unterstützung.
12.4.1 Wiedersehen mit dem natbib-Paket Das natbib-Paket wurde ursprünglich nur für das Autor-Jahr-Schema entwickelt. Trotzdem kann es ebenso auch Autor-Nummer-Verweise sowie rein numerische Verweise erzeugen. Diese beiden Verweisarten werden mithilfe von BIBTEX-Stilen bereitgestellt, die speziell für nummerierte Literaturverzeichnisse entworfen wurden, ähnlich denjenigen BIBTEX-Stilen, die normalerweise für Autor-Jahr-Verweise benutzt werden. Entsprechend seiner Voreinstellung erzeugt das natbib-Paket Autor-JahrVerweise. Will man jedoch hauptsächlich Quellen nach dem numerischen oder dem Autor-Nummer-Schema zitieren, dann sollte man das natbib-Paket mit der Option numbers laden. Zum Vergleich wird hier Beispiel 12-3-5 auf Seite 726 mit geladener Option numbers wiederholt. Diese Option bringt automatisch die Optionen square und comma mit sich. Wer runde Klammern bevorzugt, muss daher die vorgegebene Auswahl mit der Option round überschreiben.
Goossens et al. [1] Goossens et al. [1, Kap. 2] Goossens et al. [siehe 1, Kap. 2] nur Vortext: Goossens et al. [siehe 1]
Bsp. 12-4-1
[1] [1, Kap. 2] [siehe 1, Kap. 2] nur Vortext: [siehe 1]
\usepackage[numbers]{natbib} \citet{LGC97} \citet[Kap.~2]{LGC97} \citet[siehe][Kap.~2]{LGC97} nur Vortext: \citet[siehe][]{LGC97} \citep{LGC97} \citep[Kap.~2]{LGC97} \citep[siehe][Kap.~2]{LGC97} nur Vortext: \citep[siehe][]{LGC97} 737
\\ \\ \\ \\[5pt] \\ \\ \\
12
QUELLENVERWEISE
Wie man sieht, erzeugt der \citet-Befehl nun Quellenverweise im AutorNummer-Stil, während \citep rein numerische Verweise erstellt. Stellt man natbib so ein, dass es numerische Quellenverweise vornimmt, dann verhält sich der LaTEX-Befehl \cite wie der Befehl \citep. Im Autor-Jahr-Modus definiert das natbib-Paket ihn zu einer Kurzform für den Befehl \citet um. Alle Varianten von \citet und \citep , die bereits in Abschnitt 12.3.2 besprochen wurden, sind auch im numerischen Modus verfügbar, obwohl hier nur einige von ihnen sinnvoll sind. So gibt zum Beispiel \citep* den gleichen Verweis aus, wie \citep , da in der Klammer ohnehin keine Autoren aufgeführt werden.
Goossens, Rahtz, und Mittelbach [1] Goossens et al. Goossens, Rahtz, und Mittelbach 1997 oder [1997]
\usepackage[numbers]{natbib} \citet*{LGC97} \\ \citeauthor{LGC97} \\ \citeauthor*{LGC97} \\ \citeyear{LGC97} oder \citeyearpar{LGC97}
Bsp. 12-4-2
Die Befehle \citealt und \citealt* sollte man wohl eher meiden, da eine Verweisnummer ohne Klammern sehr wahrscheinlich falsch gedeutet wird. An manchen Stellen kann jedoch \citealp hilfreich sein, um die einzelne Nummer zu erhalten, die sich dann etwa mit \citetext kombinieren lässt.
Goossens et al. 1 Goossens, Rahtz, und Mittelbach 1 1 1, S. 236 usw.
\usepackage[numbers]{natbib} \citealt{LGC97} \\ \citealt*{LGC97} \\ \citealp{LGC97} \\ \citealp[S.~236]{LGC97} usw.
Bsp. 12-4-3
In einigen Zeitschriften werden die Nummern der numerischen Quellenverweise hochgestellt. Das natbib-Paket unterstützt dieses Verfahren durch Laden der Option super. In diesem Fall erzeugt das Standardbeispiel (vgl. Beispiel 12-4-1) folgendes Ergebnis:
Goossens et al. 1 Goossens et al. 1 , Kap. 2 Goossens et al. siehe 1 , Kap. 2 nur Vortext: Goossens et al. siehe 1 1 1
(Kap. 2) (Kap. 2) nur Vortext: 1 1
\usepackage[super]{natbib} \citet{LGC97} \citet[Kap.~2]{LGC97} \citet[siehe][Kap.~2]{LGC97} nur Vortext: \citet[siehe][]{LGC97} \citep{LGC97} \citep[Kap.~2]{LGC97} \citep[siehe][Kap.~2]{LGC97} nur Vortext: \citep[siehe][]{LGC97}
\\ \\ \\ \\[5pt] \\ \\ \\
Wie man sieht, erzeugt das optionale Argument recht fragwürdige Ergebnisse; im Falle von \citep erscheint das Argument vor gar nicht erst. Bei diesem Zitierformat ist es daher normalerweise am besten, einfach die Grundformen der Befehle zu verwenden. Für hochgestellte Quellenverweise entfernt natbib mögliche Leerzeichen vor den Verweisbefehlen, damit die Nummer direkt am vorhergehenden Wort
738
Bsp. 12-4-4
12.4
Das Autor-Nummer-Schema
erscheint. Im Gegensatz zu den Ergebnissen des cite-Paketes wandern Satzzeichen jedoch nicht vor den Quellenverweis und es gibt auch keine Überprüfung auf doppelte Punkte. Zur Veranschaulichung wird hier noch einmal Beispiel 12-2-11 von Seite 721 wiederholt:
Bsp. 12-4-5
. . . von Knuth 2 ; siehe auch Goossens et al. 1 . . . . von Knuth; 2 siehe auch Goossens et al. 1
\usepackage[super]{natbib} \ldots von Knuth~\citep{Knuth-CT-a}; siehe auch \citet{LGC97}. \par %%% An zwei Stellen manuell korrigiert: \ldots von Knuth;\citep{Knuth-CT-a} siehe auch \citet{LGC97}
Die Pakete natbib und cite sind leider nicht kompatibel (beide verändern die LaTEX-internen Mechanismen für Quellenverweise), so dass man leider wie oben die Quelle ändern muss, wenn natbib verwendet werden soll. Sortieren und Zusammenfassen numerischer Verweise Wie in Abschnitt 12.2.2 zu sehen, sortiert das cite-Paket mehrfache Verweise und fasst sie optional zu Bereichen zusammen. Auch das natbibPaket verfügt über solche Funktionen, die sich mit den Optionen sort bzw. sort&compress aktivieren lassen. Die Option sort wurde bereits im Zusammenhang mit Autor-JahrVerweisen angesprochen. In numerischen Querverweisen (also mit den Optionen numbers und super) werden entsprechend die Nummern sortiert. Zur Veranschaulichung wird hier Beispiel 12-2-5 von Seite 718 noch einmal wiederholt, allerdings dieses Mal ohne den nicht definierten Quellenverweis.
Bsp. 12-4-6
In [1, 2, 3, 4] findet man gute Informationen zu TEX und LATEX.
\usepackage[sort]{natbib} \bibliographystyle{plain} In \citep{LGC97,LWC99,Knuth-CT-a,Knuth:TB10-1} findet man gute Informationen zu \TeX{} und \LaTeX{}.
Durch die Option sort&compress werden die Nummern nicht nur sortiert, sondern soweit möglich auch zu Bereichen zusammengefasst. Im AutorJahr-Modus hat diese Option den gleichen Effekt wie sort.
Bsp. 12-4-7
In [1–4] findet man gute Informationen zu TEX und LATEX.
\usepackage[sort&compress]{natbib}\bibliographystyle{plain} In \citep{LGC97,LWC99,Knuth-CT-a,Knuth:TB10-1} findet man gute Informationen zu \TeX{} und \LaTeX{}.
Regeln zur Auswahl des numerischen Modus Wie bereits zuvor erwähnt ist das natbib-Paket auf den Autor-Jahr-Modus voreingestellt. In den letzten beiden Beispielen wählte natbib jedoch den numerischen Modus, ohne dass es durch die Optionen numbers oder super dazu veranlasst wurde. Der Grund liegt darin, dass der BIBTEX-Stil plain seinen \bibitem-Befehlen keine Autor-Jahr-Daten mitgibt. Immer wenn ein \bibitem-Befehl ohne die erforderlichen Daten vorkommt, wechselt natbib automatisch in den numerischen Modus. Selbst die Option authoryear wird in diesem Falle nicht beachtet.
739
12
QUELLENVERWEISE
Unterstützt ein BIBTEX-Stil jedoch das Autor-Jahr-Schema, dann kann man mit einem der folgenden Verfahren auf den numerischen Modus umschalten (die Liste ist nach zunehmender Priorität sortiert): 1. Indem man mit dem Befehl \bibliographystyle einen Bibliographiestil wählt, der ein numerisches Format für Quellenverweise vorgibt (welches z.B. in einer lokalen Konfigurationsdatei, einer Klassen- oder einer Paketdatei definiert ist). 2. Indem man die Option numbers oder super angibt, wie bei den meisten Beispielen in diesem Abschnitt. 3. Indem man explizit \bibpunct mit n oder s als viertem obligatorischem Argument verwendet (Einzelheiten in der Paketdokumentation). 4. Indem man explizit \citestyle mit dem Namen eines vordefinierten numerischen Stils für Literaturverzeichnisse verwendet. Anpassen von natbib im numerischen Modus Der Großteil der Optionen und Parameter zum Anpassen des natbib-Paketes wurde bereits auf den Seiten 730–732 besprochen. Im numerischen Modus stehen jedoch noch zwei weitere Befehle zum Verändern des Layouts zur Verfügung. Die Verweisnummern sind so voreingestellt, dass sie in der Grundschrift formatiert werden. Definiert man jedoch den Befehl \citenumfont (als Befehl mit einem Argument), dann formatiert er die Verweisnummer entsprechend seiner Einstellung. Ebenso kann man das Format der Nummer im Literaturverzeichnis ändern, indem man den Befehl \bibnumfmt mithilfe von \renewcommand umdefiniert.1 Die vorgegebene Definition dieses Befehls erzeugt normalerweise eckige Klammern um die Nummer.
Bilder werden an anderer Stelle besprochen, siehe (1, 2). Literatur 1. M. Goossens, S. Rahtz, and F. Mittelbach. The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Tools and Techniques for Computer Typesetting. Addison-Wesley Longman, Reading, MA, USA, 1997. ISBN 0-201-85469-4. 2. D. E. Knuth. The TEXbook, volume A of Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. ISBN 0-201-13447-0.
\usepackage[numbers,round]{natbib} \bibliographystyle{abbrvnat} \newcommand\bibfont{\small\raggedright} \setlength\bibhang{30pt} % ignoriert! \setlength\bibsep{1pt plus 1pt} \newcommand\citenumfont[1]{\textbf{#1}} \renewcommand\bibnumfmt[1]{\textbf{#1.}} Bilder werden an anderer Stelle besprochen, siehe \citep{LGC97,Knuth-CT-a}. \bibliography{tex}
Während \bibsection , \bibpreamble , \bibfont und \bibsep ihre Funktion beibehalten, hat der Parameter \bibhang hier keinerlei Auswirkungen, da sich der Einzug bei einer nummerierten Bibliographie nach der Breite der größten Zahl richtet. 1 Das Paket verhält sich leider nicht ganz konsistent hinsichtlich der Vorgabe bzw. fehlenden Vorgabe von Einstellungen für die Anpassungsbefehle. Daher muss man je nach Kontext entweder \newcommand oder \renewcommand verwenden.
740
Bsp. 12-4-8
12.5 Das Kurztitelschema
12.5 Das Kurztitelschema 12.5.1 jurabib – Anpassungsfähige Kurztitelverweise Das jurabib-Paket von Jens Berger als Paket für das Kurztitelschema zu bezeichnen, lässt ihm nicht wirklich Gerechtigkeit widerfahren (kein Wortspiel beabsichtigt), da es auch die anderen Zitierschemata unterstützt. Neben dem Kurztitel-Zitierschema unterstützt es auch Autor-JahrVerweise (durch die Befehlsschnittstelle des natbib-Paketes), verschiedene Optionen für geisteswissenschaftliche Werke und besondere Funktionen zum Zitieren juristischer Werke wie etwa Kommentare (daher der Name jurabib). Das Paket verwendet ein erweitertes Optionskonzept, bei dem Optionen mithilfe einer Schlüssel-Wert-Syntax festgelegt werden. Es unterstützt mehr als 30 Optionen, von denen jede mehrere Werte annehmen kann. So lassen sich Literaturhinweise im Text und die entsprechenden Quellenangaben im Literaturverzeichnis nach den verschiedensten Gesichtspunkten darstellen. In diesem Buch kann nur eine kleine Auswahl der Möglichkeiten vorgestellt werden. Weitere Informationen findet man in der Paketdokumentation, die in deutscher und englischer Sprache verfügbar ist. Da sich die \usepackage-Deklaration nicht sehr gut zum Verwalten so vieler Optionen eignet, bietet das jurabib-Paket als Alternative den Be- Voreinstellungen für fehl \jurabibsetup . Er lässt sich in der Präambel oder der Konfigurati- alle Beispiele in diesem onsdatei jurabib.cfg des Paketes verwenden (um die Voreinstellungen Abschnitt! für alle Dokumente festzulegen). Werden beim Laden des Paketes oder mit \jurabibsetup in der Präambel andere Einstellungen vorgenommen, so überschreiben diese die globalen Vorgaben. Für die Beispiele in diesem Abschnitt gelten zunächst die folgenden Voreinstellungen:
\jurabibsetup{titleformat=colonsep,commabeforerest=true} Diese werden dann je nach Bedarf überschrieben. Ihre Bedeutung wird im Folgenden erläutert. Anders als natbib benötigt das jurabib-Paket speziell gestaltete BIBTEXStildateien. Es erwartet einen \bibitem-Befehl mit besonders aufgebautem optionalen Argument, das verschiedenste Daten an die Quellenverweisbefehle auf Benutzerebene zurückgeben kann (siehe Seite 723). Diese BIBTEX-Stile verwenden außerdem eine Reihe zusätzlicher Felder, die in Kombination mit jurabib hilfreich sind. Die verschiedenen Eigenschaften von jurabib werden anhand der kleinen BIBTEX-Datenbank aus Abbildung 12.3 auf der nächsten Seite, sowie der bisher verwendeten Datenbank (Abbildung 12.2 auf Seite 714) dargestellt. Soweit nicht anders angemerkt, wird allen Beispielen in diesem Abschnitt am Ende implizit die Zeile
\newpage\bibliography{tex,jura} angehängt, wenn sie verarbeitet werden. Die Basissyntax Genau wie natbib erweitert auch das jurabib-Paket den LaTEX-Standardbefehl für Quellenverweise, \cite, um ein zweites optionales Argument.
741
12
QUELLENVERWEISE
@BOOK{zpo, author
= {Adolf Baumbach and Wolfgang Lauterbach and Jan Albers and Peter Hartmann}, title = {Zivilproze\ss ordnung mit Gerichtsverfassungsgesetz und anderen Nebengesetzen}, shorttitle = {ZPO}, language = {ngerman}, edition = {59. neubearb.}, year = 2002, address = {M\"unchen} } @BOOK{aschur, author = {Hans Brox and Wolf-Dietrich Walker}, title = {Allgemeines Schuldrecht}, language = {ngerman}, edition = {29.}, year = 2003, address = {M\"unchen} }
@BOOK{bschur, author = title = shorttitle = language = edition = year = address = } @BOOK{bgb, author = shortauthor= title = shorttitle = language = edition = year = publisher = address = }
{Hans Brox and Wolf-Dietrich Walker}, {Besonderes Schuldrecht}, {BSchuR}, {ngerman}, {27.}, 2002, {M\"unchen} {Otto Palandt}, {Otto Palandt}, {B\"urgerliches Gesetzbuch}, {BGB}, {ngerman}, {62.}, 2003, {Beck Juristischer Verlag}, {M\"unchen}
Abbildung 12.3: BIBTEX-Beispieldatenbank jura.bib
\cite[nach]{schlüssel }
\cite[bearbeiter ][nach]{schlüssel }
Bei zwei optionalen Argumenten steht nach an zweiter Stelle, genau wie bei der natbib-Syntax. Der große Unterschied bei den Voreinstellungen liegt jedoch darin, dass es hier kein Argument vor gibt, sondern das Argument bearbeiter für ein Zitierschema, das für juristische Werke verwendet wird.1 In dieser Disziplin verfügen Werke oftmals über einen ursprünglichen Autor (unter dessen Namen das Werk im Literaturverzeichnis aufgeführt ist), sowie über Bearbeiter, welche die jeweilige Ausgabe mit Kommentaren versehen haben. Diese Bearbeiter werden im Verweis, nicht aber im Literaturverzeichnis erwähnt. Ohne weitere Anpassungen besteht ein Quellenverweis aus dem Nachnamen des Autors (oder der Autoren durch Schrägstrich getrennt, wenn es mehrere sind), sofern vorhanden, gefolgt von dem bearbeiter und abschließend einem möglichen nach-Text. Enthält der BIBTEX-Eintrag das Feld shortauthor, dann wird dieses anstelle des author-Feldes verwendet. Um nur einen bearbeiter anzugeben verwendet man einen leeren nach-Text. Ein Titel oder Kurztitel wird entsprechend der Vorgaben nur angezeigt, wenn der Autor im gleichen Dokument mit mehreren Werken zitiert wird.
Brox/Walker Brox/Walker, § 123 Otto Palandt/Heinrichs Otto Palandt/Heinrichs, § 26
\usepackage{jurabib} \bibliographystyle{jurabib} \cite{aschur} \\ \cite[\S\,123]{aschur} \\ \cite[Heinrichs][]{bgb} \\ \cite[Heinrichs][\S\,26]{bgb}
Wie man sieht, lässt sich aus dem gesetzten Text nicht ableiten, dass „Walker“ ein Mitautor, „Heinrichs“ hingegen ein Bearbeiter ist. Das jurabib-Paket bietet eine Reihe von Optionen, die diesen Unterschied mittels gängiger Formatierungen für Quellenverweise so hervorheben, dass er sofort ins Auge fällt. So kann man beispielsweise für den Bearbeiter eine andere Schrift verwenden 1 Auf Seite 746 ist beschrieben, wie man stattdessen doch wieder das Argument für den vor-Text erhält.
742
Bsp. 12-5-1
12.5 Das Kurztitelschema
oder das Trennzeichen zwischen Autor und Bearbeiter ändern. Beide Möglichkeiten werden im ersten Teil des nächsten Beispiels eingesetzt. Man kann den Bearbeiter auch vor den Autor setzen. Diese Lösung ist in zwei Varianten im zweiten Teil des Beispiels zu sehen.
Bsp. 12-5-2
Brox/Walker Otto Palandt–Heinrichs, § 26 Heinrichs, Otto Palandt, § 26 Heinrichs in: Otto Palandt, § 26
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{annotatorformat=italic, annotatorlastsep=divis} \cite{aschur} \\ \cite[Heinrichs][\S\,26]{bgb} \\ \jurabibsetup{annotatorfirstsep=comma} \cite[Heinrichs][\S\,26]{bgb} \\ \jurabibsetup{annotatorfirstsep=in, annotatorformat=normal} \cite[Heinrichs][\S\,26]{bgb}
Man kann Autoren und Bearbeiter auch noch anders klar voneinander abheben: Mithilfe der Option authorformat und dem Schlüsselwort and werden die Schrägstriche durch Kommas und ein „und“ ersetzt; das Schlüsselwort dynamic verwendet eine andere Schrift, wenn ein bearbeiter existiert; und das Schlüsselwort year verschiebt die Publikation direkt hinter den Autor. Mithilfe der Option authorformat kann man die Formatierung der Autorennamen noch weiter gestalten. Im Folgenden sind einige Beispiele dazu aufgeführt. Die Paketdokumentation enthält eine vollständige Liste aller Schlüsselwörter. Verwendet man mehrere Schlüsselwörter gleichzeitig (wie im nächsten Beispiel), so ist zu beachten, dass man jurabib durch ein zusätzliches Klammernpaar anzeigen muss, wo die Schlüsselwort-Liste aufhört und die nächste Option beginnt.
Bsp. 12-5-3
B ROX und WALKER OTTO PALANDT/H EINRICHS, § 26
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{authorformat={and,smallcaps}} \cite{aschur} \\ \cite[Heinrichs][\S\,26]{bgb} \par
Durch das Schlüsselwort dynamic wird der Bearbeitername kursiv ausgegeben und der Name des eigentlichen Autors in der Grundschrift.1 Bei Werken ohne Bearbeiter wird der Autorname kursiv gesetzt. Es werden sozusagen diejenigen hervorgehoben, die tatsächlich an der jeweiligen Ausgabe gearbeitet haben.
Bsp. 12-5-4
Brox/Walker Otto Palandt/Heinrichs, § 26
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{authorformat=dynamic} \cite{aschur} \\ \cite[Heinrichs][\S\,26]{bgb} \par
Wie im nächsten Beispiel zu sehen, lassen sich die Schlüsselwörter
and, dynamic und year miteinander kombinieren, während smallcaps und italic miteinander konkurrieren, wobei die letzte Einstellung gewinnt. 1 Die
verwendeten Schriften lassen sich durch die Parameter \jbactualauthorfont und
\jbactualauthorfontifannotator anpassen.
743
12
QUELLENVERWEISE
\usepackage{jurabib} \bibliographystyle{jurabib}
Brox und Walker (2003) \jurabibsetup{authorformat={and,smallcaps,year,italic}} Otto Palandt (2003)/Heinrichs, § 26 \cite{aschur} \\ \cite[Heinrichs][\S\,26]{bgb} \par
Bsp. 12-5-5
Die von BIBTEX zurückgegebenen Daten sind sehr detailliert und in einzelne Felder aufgeteilt, auf deren Inhalt man mit dem Befehl \citefield zugreifen kann.
\citefield[nach]{feld }{schlüssel } Bei dem Argument feld handelt es sich um eines der folgenden Felder des BIBTEX-Datenbankeintrags, auf den mit dem Argument schlüssel verwiesen wird: author, shortauthor, title, shorttitle, url oder year. Außerdem kommt noch apy („address-publisher-year“, eine Kombination aus Adresse, Verlag und Erscheinungsjahr) in Frage. Bei den meisten Feldern ist es fraglich, ob mehr als ein schlüssel sinnvoll ist. Selbst bei \cite sind mehrfache Schlüssel selten nützlich, außer wenn keine optionalen Argumente vorhanden sind.
B ROX , H ANS/WALKER , W OLF -D IETRICH BSchuR, § 53 Reading, MA, USA: Addison-Wesley Longman, 1997 Allgemeines Schuldrecht; Besonderes Schuldrecht
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{authorformat=smallcaps} \citefield{author}{aschur} \\ \citefield[\S\,53]{shorttitle}{bschur} \\ \citefield{apy}{LGC97} \\ \citefield{title}{aschur,bschur}
Bsp. 12-5-6
Quellenverweise mit Kurz- und Langtiteln Wie bereits erwähnt, enthalten die voreingestellten Quellenverweise des jurabib-Paketes nicht den Titel der zitierten Werke. Davon ausgenommen sind mehrere Werke vom gleichen Autor, die sich dann nur anhand des Titels unterscheiden lassen. Dieses Verhalten lässt sich auf verschiedene Weise ändern. Zunächst wird jedoch der verwendete „Titel“ noch einmal genauer betrachtet.
Brox/Walker: Allgemeines Schuldrecht Brox/Walker: BSchuR Knuth: The TEXbook Knuth: TUGboat 10 [1989]
\usepackage{jurabib} \bibliographystyle{jurabib} \cite{aschur} \\ \cite{bschur} \\[2pt] \cite{Knuth-CT-a} \\ \cite{Knuth:TB10-1}
Vergleicht man die ersten beiden Zeilen des letzten Beispiels mit den BIBTEX-Datenbankdateien in Abbildung 12.3 auf Seite 742, dann sieht man, dass soweit vorhanden immer das Feld shorttitle verwendet wird; ansonsten wird auf das Feld title zurückgegriffen. Das jurabib-Paket gibt in diesem Falle sogar eine Warnung aus: „shorttitle for aschur is missing – replacing with title“. Einträge der Publikationstypen article oder periodical werden anders gehandhabt. Dort wird ein fehlendes Feld durch den Namen, die Nummer und das Erscheinungsjahr der Zeitschrift ersetzt, so dass sich im Beispiel „TUGboat 10 [1989]“ ergab.
744
Bsp. 12-5-7
12.5 Das Kurztitelschema
\citetitle[nach]{schlüssel } \citetitle[bearbeiter ][nach]{schlüssel } \cite*[nach]{schlüssel } \cite*[bearbeiter ][nach]{schlüssel } Um einen Quellenverweis mit Titel zu erzwingen, kann man anstelle von \cite den Befehl \citetitle verwenden. Mit dem Befehl \cite* wird der Titel weggelassen. Man sollte jedoch beachten, dass letzterer Befehl sehr leicht zu mehrdeutigen Verweisen führen kann, wie das nächste Beispiel zeigt.
Bsp. 12-5-8
Baumbach et al.: ZPO, Brox/Walker und Brox/Walker sind drei verschiedene Bücher, oder doch nicht?
\usepackage{jurabib} \bibliographystyle{jurabib} \citetitle{zpo}, \cite*{aschur} und \cite*{bschur} sind drei verschiedene Bücher, oder doch nicht?
Man beachte zudem, dass der Befehl \cite* hier eine ganz andere Bedeutung hat als im natbib-Paket, wo er eine vollständige Liste aller Autoren eines Werkes ausgibt. Wenn man je nach Aufgabenstellung zwischen den beiden Paketen hin- und herwechselt, sollte man diesen Befehl vielleicht besser ganz vermeiden.
\citetitleonly[nach]{schlüssel } Es ist auch möglich, nur den Titel auszugeben, falls gewünscht durch einen nach-Text ergänzt. Bsp. 12-5-9
ZPO, § 13
\usepackage{jurabib} \bibliographystyle{jurabib} \citetitleonly[\S\,13]{zpo}
Mithilfe der Option titleformat und dem Schlüsselwort all lässt sich das Kurztitel-Zitierschema als Voreinstellung festlegen. Genau wie Kurztitelverweise authorformat kann man auch dieser Option mehrere Schlüsselwörter zuwei- automatisch erzeugen sen. Das Schlüsselwort colonsep, das als Voreinstellung für alle Beispiele benutzt wurde, ist bereits bekannt. Im nächsten Beispiel wird es mit commasep überschrieben und die Titel werden kursiv gesetzt (Schlüsselwort italic).
Bsp. 12-5-10
Brox/Walker, Allgemeines Schuldrecht Brox/Walker, BSchuR, § 123 Otto Palandt/Heinrichs, BGB Knuth, TUGboat 10 [1989]
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{titleformat={all,commasep,italic}} \cite{aschur} \\ \cite[\S\,123]{bschur} \\ \cite[Heinrichs][]{bgb} \\ \cite{Knuth:TB10-1}
\citetitlefortype{BIBTE X-typen-liste} \citenotitlefortype{BIBTE X-typen-liste} Anstatt alle Werke mit Titel zu zitieren kann man auch festlegen, dass für bestimmte BIBTEX-Publikationstypen Kurztitel verwendet werden. Der Befehl
\citetitlefortype{article,book,manual} legt beispielsweise fest, dass diese drei Typen mit Titel zitiert werden und alle anderen ohne, sofern der Autor nicht mit mehreren Werken vertreten ist. Da eine solche Liste schnell recht umfangreich werden kann, lässt sich alternativ auch bestimmen, dass alle Werke mit Titel zitiert werden (über titleformat)
745
12
QUELLENVERWEISE
und dann gibt man die Publikationstypen an, auf die ohne Titel verwiesen werden soll. Dies geschieht im nächsten Beispiel für den Publikationstyp book (Buch). Auf das Buch von Knuth wird jedoch trotzdem mit Titel verwiesen, da zusätzlich aus einem seiner Artikel zitiert wird.
Brox/Walker Goossens/Rahtz Knuth: The TEXbook Knuth: TUGboat 10 [1989]
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{titleformat=all} \citenotitlefortype{book} \cite{bschur} \\ \cite{LWC99} \\ \cite{Knuth-CT-a} \\ \cite{Knuth:TB10-1}
Automatisches Indexieren von Quellenverweisen Autorennamen in Quellenverweisen kann man durch die authorformatOption mit dem Schlüsselwort indexed in den Index aufnehmen. Entsprechend der Vorgaben gilt dies nur für im Text zitierte Autoren und nicht für solche, die lediglich im Literaturverzeichnis erscheinen. Mithilfe des Befehls \jbindexbib in der Präambel oder einer Konfigurationsdatei lässt sich dieses Verhalten ändern. Zum Formatieren der Indexeinträge dient der Befehl \jbauthorindexfont . Die Anweisung
\renewcommand\jbauthorindexfont[1]{\textit{#1}} setzt die Autorennamen im Index kursiv. Anstatt die Namen der Autoren in den Hauptindex aufzunehmen, kann man auch ein eigenes Autorenverzeichnis erstellen. Dies geschieht mithilfe des index-Paketes (siehe Abschnitt 11.4.3) und einer Konstruktion wie der folgenden in der Präambel:
\usepackage{index} \newindex{default}{idx}{ind}{Index} % der Hauptindex \newindex{authors}{adx}{and}{Autorenverzeichnis} \renewcommand\jbindextype{authors} Später bestimmt man mit dem Befehl \printindex[authors] , wo im Dokument das Autorenverzeichnis ausgegeben werden soll. Noch speziellere Verzeichnisse, wie sie für einige Arten juristischer Werke erforderlich sind (z.B. „Verzeichnis der Fälle“ „Verzeichnis der Gesetze“), werden nicht unterstützt. Wer diese benötigt, der sollte anstelle von jurabib das camel-Paket in Betracht ziehen. Verwenden der natbib-Semantik für Quellenverweise Das optionale Argument bearbeiter ist nur in juristischen Werken hilfreich. In anderen Disziplinen wird häufiger ein einleitender vor-Text benötigt (z.B. „vergleiche. . . “). Um diesem Bedarf gerecht zu werden, lässt sich die Bedeutung der optionalen Argumente ändern, indem man das Paket mit der Option see lädt.
\cite[vor ][nach]{schlüssel }
(mit Option see)
Die Option ersetzt das vorgegebene optionale Argument bearbeiter durch das Argument vor, wenn zwei Argumente verwendet werden. Damit verfügt der
746
Bsp. 12-5-11
12.5 Das Kurztitelschema
\cite-Befehl dann über die gleiche Syntax und Semantik wie im natbib-Paket.
Bsp. 12-5-12
(Goossens/Rahtz/Mittelbach) (Goossens/Rahtz/Mittelbach, Kap. 2) (vergleiche Goossens/Rahtz/Mittelbach) (siehe Goossens/Rahtz/Mittelbach, Kap. 2)
\usepackage[see,round]{jurabib} \bibliographystyle{jurabib} \cite{LGC97} \\ \cite[Kap.~2]{LGC97} \\[3pt] \cite[vergleiche][]{LGC97} \\ \cite[siehe][Kap.~2]{LGC97}
Dieses Werk wurde als . . . zitiert Bei einem Zitierschema mit Kurztiteln (z.B. durch die Option titleformat mit dem Schlüsselwort all) kann es hilfreich sein, dem Leser eine Übersicht der vollständigen Titel und ihrer zugehörigen Kurzformen anzubieten. Normalerweise geschieht dies, indem man in der Bibliographie am Ende jeder Quelle den jeweiligen Kurztitel in Klammern anführt. Das jurabib-Paket unterstützt diese Konvention mittels der Option howcited. Mithilfe ihrer verfügbaren Schlüsselwörter lässt sich das Verfahren auf verschiedene Weise leicht abändern. Das Schlüsselwort all beispielsweise weist das Paket an, alle Einträge in der Bibliographie um die „zitiert als“-Daten zu ergänzen. Man kann also das Beispiel 12-5-10 auf Seite 745 um folgende Zeile erweitern:
\jurabibsetup{howcited=all} Dann erhält man das folgende Literaturverzeichnis. Man beachte, dass der Kurztitel genauso formatiert ist, wie er auch im Quellenverweis erscheint.
Brox, Hans/Walker, Wolf-Dietrich: Besonderes Schuldrecht. 27. Auflage. München, 2002 (zitiert: Brox/Walker, BSchuR) Brox, Hans/Walker, Wolf-Dietrich: Allgemeines Schuldrecht. 29. Auflage. München, 2003 (zitiert: Brox/Walker, Allgemeines Schuldrecht) Knuth, Donald E.: Typesetting Concrete Mathematics. TUGboat, 10 April 1989, Nr. 1, 31–36, ISSN 0896–3207 (zitiert: Knuth, TUGboat 10 [1989]) Bsp. 12-5-13
Palandt, Otto: Bürgerliches Gesetzbuch. 62. Auflage. München: Beck Juristischer Verlag, 2003 (zitiert: Otto Palandt, BGB) Normalerweise ist es jedoch nicht erforderlich, bei allen Quellen anzugeben, wie diese zitiert werden. Bei Artikeln besteht der Kurztitel immer aus „Autorname, Zeitschrift, Band und Jahr“. Wird ein Werk nur mit vollständigem Titel zitiert (etwa weil kein shorttitle-Feld vorhanden ist), oder ein bestimmter Autor mit nur einem Werk, dann kann der Leser im Allgemeinen den entsprechenden Eintrag ohne weitere Hilfe finden. Diese eingeschränkte Art von „Rückverweisen“ ermöglicht das jurabib-Paket durch die Schlüsselwörter compare, multiple und normal. Durch compare wird nur dann ein Rückverweis erzeugt, wenn ein shorttitle-Feld vorhanden ist und dessen Inhalt von dem des Feldes title abweicht. Für Beispiel 12-5-13 würde dies bedeuten, dass nur der erste und der letzte Eintrag Rückverweise enthielten.
747
12
QUELLENVERWEISE
Verwendet man stattdessen multiple, dann erfolgen Rückverweise für alle Autoren, die mit mehreren Werken zitiert werden, es sei denn, es handelt sich um Quellenverweise auf Artikel. Im vorigen Beispiel erhielten so die ersten beiden Einträge Rückverweise. Ein Verweis auf Knuth-CT-a würde ebenfalls einen Rückverweis nach sich ziehen, auf den Artikel von Knuth in TUGboat jedoch nicht. Die beiden Schlüsselwörter lassen sich kombinieren. In diesem Fall werden sowohl Einträge von Autoren mit mehreren Werken, als auch Einträge mit vom Haupttitel abweichenden Kurztiteln, um Rückverweise ergänzt. Das letzte Schlüsselwort dieser Gruppe ist normal (das auch verwendet wird, wenn man der Option kein Schlüsselwort mitgibt). Dieses Schlüsselwort funktioniert etwas anders als die anderen: Es benötigt Unterstützung von der BIBTEX-Datenbank. Durch dieses Schlüsselwort erhalten ausschließlich solche Einträge einen Rückverweis, die über das BIBTEX-Feld howcited verfügen. Dieses Feld kann zwei Arten von Werten enthalten. Mit dem Wert „1“ zeigt der Rückverweis genau den im Text erscheinenden Quellenverweis an. Bei jedem anderen Wert wird als Rückverweis der tatsächliche Inhalt des howcitedFeldes ausgegeben, einschließlich etwaig vorhandener Formatierungen. Der Text um den Rückverweis lässt sich durch Umdefinieren der Befehle \howcitedprefix und \howcitedsuffix anpassen. Zusätzlich kann man mit \bibnotcited (per Voreinstellung leer) angeben, was mit Einträgen geschehen soll, die mit \nocite hinzugefügt wurden. Da diese Befehle Texte enthalten, die sich je nach Hauptsprache des Dokumentes ändern sollten, werden sie mit einem besonderen Verfahren (\AddTo) umdefiniert, dass auf Seite 759 beschrieben wird.
. . . Brox/Walker: BSchuR . . . Knuth . . .
Literatur Brox,
Hans/Walker, Wolf-Dietrich: Besonderes Schuldrecht. 27. Auflage. München, 2002 (zitiert als Brox/Walker: BSchuR).
Brox, Hans/Walker, Wolf-Dietrich: Allgemeines Schuldrecht. 29. Auflage. München, 2003 (nicht zitiert). Knuth, Donald E.: Typesetting Concrete Mathematics. TUGboat, 10 April 1989, Nr. 1, 31–36, ISSN 0896–3207 (zitiert als Knuth).
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{howcited=all} \AddTo\bibsall{% \renewcommand\howcitedprefix { (zitiert als }% \renewcommand\howcitedsuffix{).}% \renewcommand\bibnotcited { (nicht zitiert).}} \nocite{aschur} \ldots \cite{bschur} \ldots \cite{Knuth:TB10-1} \ldots \bibliography{jura,tex}
Ausführliche Quellenangaben im Fließtext Während das natbib-Paket zum Zitieren mit vollständigen Quellenangaben im Fließtext ein weiteres Paket und einige zusätzliche Vorbereitungen erfordert, ist dieses Zitierverfahren im jurabib-Paket bereits vollständig integriert. Der vollständige Eintrag kann bei ein oder mehreren einzelnen, bei allen oder automatisch beim ersten Quellenverweis auf ein Werk im Dokument aufgeführt werden. Dieses Verfahren wird am häufigsten in Fußnoten verwendet. Auf
748
Bsp. 12-5-14
12.5 Das Kurztitelschema
Seite 752 wird näher beschrieben, wie man Quellenverweise automatisch als Fußnoten setzt.
\fullcite[nach]{schlüssel }
\fullcite[bearbeiter ][nach]{schlüssel }
Dieser Befehl funktioniert wie \cite, zeigt jedoch die vollständigen bibliographischen Daten an. Ein etwaiger bearbeiter wird vor dem Verweis aufgeführt, genauso als wäre die Option annotatorfirstsep=in festgelegt. Man vergleiche das nächste Beispiel mit Beispiel 12-3-27 von Seite 736. Das Schlüsselwort citationreversed ordnet den Autornamen so an, dass der Nachname als letztes erscheint (im Literaturverzeichnis wird er zuerst genannt). Verwandte Schlüsselwörter sind allreversed (der Nachname erscheint in Text und Bibliographie nachgeordnet) und firstnotreversed (der Nachname des ersten Autors erscheint an erster Stelle, bei weiteren Autoren des gleichen Werkes jedoch nachgeordnet).
Bsp. 12-5-15
Nähere Einzelheiten in Donald E. Knuth: Typesetting Concrete Mathematics. TUGboat, 10 April 1989, Nr. 1, ISSN 0896–3207. Allgemeine Informationen finden sich in Donald E. Knuth: The TEXbook. Band A, Computers and Typesetting. Reading, MA, USA: Addison-Wesley, 1986, ISBN 0–201–13447–0. Wie in Knuth (1989) gezeigt . . .
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{authorformat=citationreversed} \raggedright \setlength\parindent{12pt} Nähere Einzelheiten in \fullcite{Knuth:TB10-1}. Allgemeine Informationen finden sich in \fullcite{Knuth-CT-a}. Wie in \citet{Knuth:TB10-1} gezeigt \ldots
Der \cite-Befehl erzeugt automatisch vollständige Quellenangaben, wenn die Option citefull mit einem der folgenden Schlüsselwörter verwen- Automatisch det wird: Das Schlüsselwort all zitiert alle Verweise mit vollständigen Anga- ausführliche Verweise ben; first zitiert ein Werk beim ersten Verweis vollständig, danach verkürzt; im Fließtext chapter funktioniert wie first, beginnt jedoch in jedem Kapitel neu; und section entspricht chapter allerdings auf Abschnittsebene. Für alle Einstellungen gilt die Option annotatorfirstsep=in, wie im zweiten Verweis des Beispiels zu sehen ist. Wurde eine dieser Einstellungen in die Konfigurationsdatei aufgenommen, dann lässt sie sich mit dem Schlüsselwort false für das aktuelle Dokument abschalten.
Bsp. 12-5-16
Siehe Baumbach, Adolf et al.: Zivilprozeßordnung mit Gerichtsverfassungsgesetz und anderen Nebengesetzen. 59. Auflage. München, 2002 . . . Wie in Heinrichs in: Baumbach et al., § 216 gezeigt, ist die Interpretation . . .
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{citefull=first} Siehe \cite{zpo} \ldots Wie in \cite[Heinrichs][\S\,216]{zpo} gezeigt, ist die Interpretation \ldots
\citefullfirstfortype{BIBTE X-typen-liste} Eine noch genauere Steuerung lässt sich erzielen, indem man die BIBTEXPublikationstypen angibt, für die beim ersten Vorkommen vollständige Quel-
749
12
QUELLENVERWEISE
lenangaben erscheinen sollen. Im folgenden Beispiel (das ansonsten Beispiel 12-5-15 entspricht), wird festgelegt, dass nur Einträge des Typs article auf diese Weise zu zitieren sind.
Nähere Einzelheiten in Knuth, Donald E.: Typesetting Concrete Mathematics. TUGboat, 10 April 1989, Nr. 1, ISSN 0896–3207. Allgemeine Informationen finden sich in Knuth: The TEXbook. Wie in Knuth: TUGboat 10 [1989] gezeigt, kann man leicht . . .
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{citefull=first} \citefullfirstfortype{article} Nähere Einzelheiten in \cite{Knuth:TB10-1}. Allgemeine Informationen finden sich in \cite{Knuth-CT-a}. Wie in \cite{Knuth:TB10-1} gezeigt, kann man leicht \ldots
Bsp. 12-5-17
\nextciteshort{schlüssel-liste} \nextcitefull{schlüssel-liste} \nextcitereset{schlüssel-liste} \nextcitenotitle{schlüssel-liste} Manchmal ist es nicht angebracht, ein Werk bei seiner ersten Erwähnung mit vollständigen Quellenangaben zu zitieren, wie etwa in einer Kurzdarstellung oder einem Vorwort. Andererseits soll eine andere Quelle vielleicht noch einmal ausführlich angegeben werden, obwohl sie bereits zuvor aufgeführt wurde. Zu diesem Zweck gibt es vier Befehle, die festlegen, wie einzelne Quellen ab einer bestimmten Stelle im Dokument weiter zitiert werden.1 Mit \nextciteshort werden alle Quellenverweise der „schlüssel-liste“ ab diesem Punkt im Kurztitelformat gesetzt (wie die Zeilen A,B und D im Beispiel). Durch \nextcitereset erscheinen die Quellenverweise (wieder) in ihrer normalen Form. Der nächste Verweis ist also wieder ausführlich, sofern die Quelle zuvor noch nicht zitiert wurde (Zeilen C und F), und ansonsten werden die Verweise im Kurztitelformat gesetzt (Zeile E). Mithilfe von \nextcitefull werden ab der entsprechenden Stelle ausführliche Quellenverweise erzwungen (Zeile G). Durch \nextcitenotitle erhält man nur noch den bzw. die Namen der Autoren, selbst wenn sich dadurch mehrdeutige Verweise ergeben.
\usepackage[citefull=first]{jurabib} \bibliographystyle{jurabib} \nextciteshort{Knuth-CT-a,Knuth:TB10-1} A) \cite{Knuth-CT-a} \\ B) \cite{Knuth:TB10-1} \nextcitereset{Knuth-CT-a} C) \cite{Knuth-CT-a} \\ D) \cite{Knuth:TB10-1} \nextcitereset{Knuth-CT-a,Knuth:TB10-1} E) \cite{Knuth-CT-a} \\ F) \cite{Knuth:TB10-1} \nextcitefull{Knuth-CT-a} \nextcitenotitle{Knuth:TB10-1} G) \cite{Knuth-CT-a} \\ H) \cite{Knuth:TB10-1}
\\ \\ \\
1 Die Namen der Befehle legen nahe, dass sich diese jeweils auf den „nächsten“ Verweis beziehen. Tatsächlich gelten sie aber für alle weiteren Quellenverweise, bis sie überschrieben werden.
750
12.5 Das Kurztitelschema
Bsp. 12-5-18
A) Knuth: The TEXbook B) Knuth: TUGboat 10 [1989] C) Knuth, Donald E.: The TEXbook. Band A, Computers and Typesetting. Reading, MA, USA: Addison-Wesley, 1986, ISBN 0–201–13447–0 D) Knuth: TUGboat 10 [1989] E) Knuth: The TEXbook F) Knuth, Donald E.: Typesetting Concrete Mathematics. TUGboat, 10 April 1989, Nr. 1, ISSN 0896–3207 G) Knuth, Donald E.: The TEXbook. Band A, Computers and Typesetting. Reading, MA, USA: Addison-Wesley, 1986, ISBN 0–201–13447–0 H) Knuth Wenn man bereits im Fließtext vollständige Quellenangaben verwendet, muss man die Quellen nicht unbedingt noch einmal in einer Bibliographie oder einem Quellenverzeichnis zusammenstellen. Man kann zum Beispiel alle Quellenverweise im Fließtext setzen und im Literaturverzeichnis nur empfohlene weiterführende oder sonstige Sekundärliteratur auflisten.
\citeswithoutentry{schlüssel-liste} Diese Deklaration enthält eine Liste aller Quellen, die nicht in der Bibliographie erscheinen sollen, obwohl sie im Fließtext zitiert werden. Die schlüsselliste ist eine durch Kommas unterteilte Liste ohne Leerzeichen. Der Befehl kann beliebig oft wiederholt werden. Man kann ihn als Gegenteil von \nocite betrachten. Beide Befehle werden im nächsten Beispiel verwendet.
Das wird erklärt in Brox, Hans/Walker, WolfDietrich: Allgemeines Schuldrecht. 29. Auflage. München, 2003. Wie zu sehen in Brox/Walker. . .
Ausgewählte weiterführende Literatur
Bsp. 12-5-19
Baumbach, Adolf et al.: Zivilprozeßordnung mit Gerichtsverfassungsgesetz und anderen Nebengesetzen. 59. Auflage. München, 2002
\usepackage{jurabib} \addto\captionsngerman{% \renewcommand\refname{Ausgewählte weiterführende Literatur}} \bibliographystyle{jurabib} \citeswithoutentry{aschur} \jurabibsetup{citefull=first} Das wird erklärt in \cite{aschur}. Wie zu sehen in \cite{aschur}\ldots \nocite{zpo} \bibliography{jura}
Der Befehl \citeswithoutentry verhindert, dass einzelne Werke in der Bibliographie erscheinen. Mit seiner Hilfe kann man jedoch nicht alle Einträ- Die Bibliographie ganz ge unterdrücken, da man ansonsten eine leere Liste erhält, die nur aus ei- unterdrücken ner Überschrift besteht. Wenn man vollständig auf ein Literaturverzeichnis verzichten möchte, verwendet man \nobibliography anstelle des üblichen \bibliography-Befehls. Dieser Befehl liest die von BIBTEX erzeugte .bblDatei um die Quellenverweise zu ermöglichen, gibt aber kein gesetztes Ergebnis aus. Man muss immer noch jurabib als BIBTEX-Stil angeben und BIBTEX ganz normal ausführen.
751
12
QUELLENVERWEISE
Quellenverweise als Fuß- oder Endnoten Alle bisher vorgestellten Befehle für Quellenverweise verfügen über Varianten, die Fußnotenverweise oder, in Kombination mit dem Paket endnotes, Endnotenverweise erzeugen. Man erhält diese Varianten, indem man dem Befehlsnamen einfach foot voranstellt (also z.B. \footcite anstelle von \cite , \footcitetitle anstelle von \citetitle usw.). Dadurch kann man Fußnoten- und andere Verweise nach Bedarf miteinander mischen. Die Fußnotenverweise des jurabib-Paketes sind herkömmliche Fußnoten, so dass sich ihr Layout je nach Wunsch auch durch Laden des Paketes footmisc umgestalten lässt.
. . . um LATEX im Web zu verwenden.∗ In Goossens/Rahtz wird zudem besprochen, wie man PDF∗ Goossens, Michel/Rahtz, Sebastian: The LAT X Web E companion: integrating TEX, HTML, and XML. Reading, MA, USA: Addison-Wesley Longman, 1999, Tools and Techniques for Computer Typesetting, ISBN 0–201–43311–7.
Quellenverweise automatisch als Fußnoten setzen
\usepackage[ragged,symbol]{footmisc} \usepackage{jurabib} \bibliographystyle{jurabib} \ldots um \LaTeX{} im Web zu verwenden.\footfullcite{LWC99} In \cite{LWC99} wird zudem besprochen, wie man PDF- und HTML-Dateien erzeugt.
Um alle Quellenverweise als Fußnoten zu setzen, bedient man sich der Option super. In diesem Fall verwendet das jurabib-Paket automatisch die \foot..-Varianten, so dass der Befehl \cite zu \footcite wird usw., wie im nächsten Beispiel zu sehen ist. Dort wird auch die Option citefull=first verwendet, so dass die erste Fußnote derjenigen im vorigen Beispiel gleicht. (Aus Platzgründen wird nur die zweite Seite angezeigt. Aufgrund der lächerlich geringen Höhe der Beispielseite erscheint dort noch die letzte Zeile der Fußnote von der ersten Seite.) Die anderen beiden Quellenverweise werden dann automatisch verkürzt, wobei der dritte durch die Option ibidem, die auf der gegenüberliegenden Seite erläutert wird, noch kürzer ist. Außerdem wird die Option lookat benutzt, um den Rückverweis auf die frühere Fußnote mit den ausführlichen Quellenangaben vorzunehmen. Diese Option ist nur zulässig, wenn man gleichzeitig die Option citefull verwendet und alle ersten Quellenverweise in Fußnoten erfolgen, da sie sich auf eine „Nummer“ beziehen muss. Man muss darauf achten, ein Fußnotenformat zu verwenden, das eindeutige Nummern erzeugt. Wenn die Fußnoten beispielsweise je Kapitel oder Seite nummeriert werden, sind die Verweise entsprechend mehrdeutig. Dieses Problem lässt sich jedoch durch Laden des Paketes varioref lösen, das die Rückverweise mit Seitennummern erzeugt. Wird das varioref-Paket aus anderen Gründen geladen und man wünscht an dieser Stelle keine Verweise mit Seitenzahlen, dann kann man diese mit dem Befehl \jbignorevarioref unterdrücken. Werden die Fußnoten nach Kapiteln nummeriert, so kann man auch mithilfe der \labelformat-Deklaration des varioref-Paketes angeben, zu welchem Kapitel die jeweilige Fußnote gehört:
\labelformat{footnote}{\thechapter--#1} Die Option lookat lässt sich besonders sinnvoll mit dem Befehl \nobibliography kombinieren, wodurch alle Literaturhinweise in Fußnoten erfolgen, ohne ein zusammenfassendes Literaturverzeichnis. 752
Bsp. 12-5-20
12.5 Das Kurztitelschema
Es wird zudem besprochen, wie man PDF-2 und HTML-Dateien3 er-
Bsp. 12-5-21
Techniques for Computer Typesetting, ISBN 0–201–43311–7. 2 Goossens/Rahtz (Anm. 1), Kap. 2. 3 A. a. O., Kap. 3–4.
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{super,citefull=first,ibidem,lookat} \ldots um \LaTeX{} im Web zu verwenden.\cite{LWC99} \newpage % Die nächste Seite wird gezeigt: Es wird zudem besprochen, wie man PDF-\cite[Kap.~2]{LWC99} und HTML-Dateien\cite[Kap.~3--4]{LWC99} erzeugt.
Mithilfe der Befehle \lookatprefix und \lookatsuffix kann man das Erscheinungsbild der Rückverweise anpassen. Beide sind sprachspezifisch, so dass man hier die \AddTo-Deklaration verwenden muss (siehe Seite 759). Im nächsten Beispiel wird ein in juristischen Quellenverweisen [21] gängiges Format eingerichtet.
Es wird zudem besprochen, wie man PDF-2 und HTML-Dateien3 er-
Bsp. 12-5-22
Techniques for Computer Typesetting, ISBN 0–201–43311–7. 2 Goossens/Rahtz, supra note 1, Kap. 2. 3 Goossens/Rahtz, supra note 1, Kap. 3–4.
\usepackage{jurabib} \bibliographystyle{jurabib} \jurabibsetup{super,citefull=first,lookat} \AddTo\bibsall{\renewcommand\lookatprefix {, \emph{supra} note } \renewcommand\lookatsuffix{}} \ldots um \LaTeX{} im Web zu verwenden.\cite{LWC99} \newpage % Die nächste Seite wird gezeigt: Es wird zudem besprochen, wie man PDF-\cite[Kap.~2]{LWC99} und HTML-Dateien\cite[Kap.~3--4]{LWC99} erzeugt.
Lädt man das Paket endnotes mit ähnlichen Einstellungen wie denjenigen im vorigen Beispiel, so lassen sich dadurch alle Quellenverweise in Endnoten umwandeln. Wie man sieht, wird den Endnoten entsprechend der Voreinstellungen kein abschließender Punkt angefügt. Wer einen Punkt wünscht, kann diesen über die Option dotafter mit dem Schlüsselwort endnote einstellen.
. . . mit Graphiken kombinieren.1 Auch das Setzen von Noten2 und Spielen3 wird besprochen.
Notes
Bsp. 12-5-23
1 Goossens, Michel/Rahtz, Sebastian/Mittelbach, Frank: The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Reading, MA, USA: Addison-Wesley Longman, 1997, Tools and Techniques for Computer Typesetting, ISBN 0–201– 85469–4 2 Goossens/Rahtz/Mittelbach (Anm. 1), Kap. 7 3 Goossens/Rahtz/Mittelbach (Anm. 1), Kap. 8
\usepackage{jurabib,endnotes} \bibliographystyle{jurabib} \jurabibsetup{citefull=first,% super,lookat} \ldots mit Graphiken kombinieren.\cite{LGC97} Auch das Setzen von Noten\cite[Kap.~7]{LGC97} und Spielen\cite[Kap.~8]{LGC97} wird besprochen. \theendnotes
Ibidem – Am angegebenen Ort In manchen Disziplinen ist es üblich, einen Verweis auf eine soeben zitierte Quelle durch das lateinische Wort „ibidem“ (abgekürzt als „ibid.“ oder „ib.“) auszudrücken. Das Paket jurabib unterstützt diese Konventionen durch die Option ibidem in mehreren Abwandlungen. Sie muss mit Quellenverweisen im Fußnotenformat kombiniert werden (also z.B. mit \footcite-Befehlen bzw. der super-Option). Dieser Verweis entspricht im Deutschen dem Ausdruck „ebenda“, bzw. der Abkürzung „ebd.“. Das jurabib-Paket verwendet 753
12
QUELLENVERWEISE
allerdings in der sprachspezifischen Anpassung „A.a.O.“ (Am angegebenen Ort), was eher dem Lateinischen „loco citato“ entspricht. Wird die Option ibidem ohne Wert verwendet (gleichbedeutend mit dem Schlüsselwort strict), so bewirkt sie folgendes Verhalten: Quellenverweise, die sich auf die gleiche Quelle beziehen, wie ihr direkter Vorgänger auf der gleichen Seite, werden durch „Ibid.“ (bzw. „A.a.O“ im Deutschen) ersetzt, wobei ein etwaiger nach-Text erhalten bleibt. Dieses Verfahren wird im nächsten Beispiel deutlich: Der erste Verweis erfolgt als Kurztitel; der zweite ist mit diesem identisch, so dass „A.a.O.“ ohne nach-Text erscheint. Der dritte und vierte Verweis beziehen sich auf andere Teile des gleichen Werkes, so dass hier auch der nach-Text erhalten bleibt. Der fünfte Quellenverweis bezieht sich auf eine andere Publikation des gleichen Autors und somit erfolgt ein weiterer Kurztitelverweis. Der sechste Verweis bezieht sich wieder auf die gleiche Publikation. Trotzdem wird der Kurztitel wiederholt, da er auf einer neuen Seite erscheint. Der siebte und achte Verweis gelten wieder dem ersten Werk, so dass erneut ein Kurztitel genannt und danach noch einmal „A.a.O.“ mit nach-Text verwendet wird. 1
2,3
Text Text Text4,5 1 2 3 4 5
6,7
mehr
Text
Brox/Walker: BSchuR, § 7. A. a. O. A. a. O., § 16. A. a. O., § 7. Brox/Walker: Allgemeines Schuldrecht.
6 7 8
8
Text
Brox/Walker: Allgemeines Schuldrecht, § 3. Brox/Walker: BSchuR. A. a. O., § 15.
\usepackage[marginal,multiple]{footmisc} \usepackage[super,ibidem]{jurabib} \bibliographystyle{jurabib} Text \cite[\S\,7]{bschur} Text \cite[\S\,7]{bschur} \cite[\S\,16]{bschur} mehr Text \cite[\S\,7]{bschur} \cite{aschur} \newpage % neue-bib-datei Der nächste Befehl extrahiert nur solche Einträge, deren Felder author oder organization die Zeichenfolge Adobe enthalten.
bibextract "author|organization" "adobe" bib-datei(en) > neue-bib-datei Man beachte, dass die .bib-Dateien möglicherweise zunächst mit bibclean bereinigt werden müssen, bevor bibextract die richtigen Einträge findet. Die beiden Einträge zum Verfasser „Mittelbach“ sind mit folgendem Befehl zu finden:
bibclean tex.bib | bibextract "author" "mittelbach" Der Einsatz von bibextract allein würde hier fehlschlagen, da ein Eintrag die Zeile year={1980ff} enthält. citefind und citetags Manchmal muss man die Quellen, auf die in einem Dokument tatsächlich verwiesen wird, erst aus mehreren großen Datenbanken zusammenstellen. Die Bourne-Shellskripts citefind und citetags lösen diese Aufgabe mithilfe der Werkzeuge awk und sed. Zunächst extrahiert citetags die BIBTEX-Verweisschlüssel aus den Quelloder .aux-Dateien in LaTEX und überträgt diese nach stdout. Dort werden sie von citefind übernommen und das Programm versucht, die entsprechenden Schlüssel in den angegebenen .bib-Dateien zu finden. Danach schreibt es die so zusammengestellte neue Bibliographiedatei nach stdout, zum Beispiel:
citetags *.aux | citefind - bib-datei(en) > ausgabedatei
Nelson Beebe hat auch das showtags-Paket entwickelt, das eine Literaturliste um Verweisschlüssel ergänzt. Es erfüllt also eine ähnliche Aufgabe,
807
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
wie das Paket biblist (vgl. Beispiel 13-4-1 auf Seite 804) oder das printbibProgramm (vgl. Abbildung 13.1 auf Seite 805).
Literatur
MR-PQ
[MR92] Frank Mittelbach and Chris Rowley. The pursuit of quality: How can automated typesetting achieve the highest standards of craft typography? In Vanoirbeek and Coray [VC92], pages 261–273. EP92 [VC92] Christine Vanoirbeek and Giovanni Coray, editors. EP92—Proceedings of Electronic Publishing, ’92, Cambridge, 1992. Cambridge University Press.
\usepackage {showtags} \bibliographystyle {is-alpha} \nocite{MR-PQ} \footnotesize \bibliography{tex}
13.4.4 bibtool – Ein Multifunktionswerkzeug Das Programm bibtool wurde von Gerd Neugebauer entwickelt, um damit BIBTEX-Datenbanken zu bearbeiten. Es vereint viele Funktionen der bereits besprochenen Werkzeuge in einem einzigen Programm und fügt noch einige neue hinzu. Es ist im C-Quellcode erhältlich; man findet jedoch auch vorkompilierte Binärdateien, etwa in der Debian-Distribution. Es wurde bereits auf vielen Rechnerarchitekturen erfolgreich kompiliert, vorausgesetzt sie verfügen über einen geeigneten C-Compiler. In diesem Abschnitt werden einige der Programmfunktionen vorgestellt. Das zum Programm gehörige Anwenderhandbuch [134] beschreibt einen noch wesentlich größeren Funktionsumfang. Formatieren, zusammenführen und sortieren Die einfachste Art das Programm aufzurufen, besteht darin, dass man ihm ein oder mehrere BIBTEX-Datenbanken als Argument(e) übergibt. Es dient dann als Prettyprinter und schreibt seine Ergebnisse an stdout.1 Ist die Option -o datei angegeben, so wird das Ergebnis in die angegebene datei geschrieben. Um beispielsweise die in Abbildung 12.2 auf Seite 714 gezeigte Datenbank mit diesem Programm zu verarbeiten, könnte man folgenden Befehl eingeben:
bibtool tex.bib -o new-tex.bib Dadurch erhält man eine ordentlich formatierte Version dieser Datenbank als Datei mit dem Namen new-tex.bib. Alle Einträge erscheinen mit akkuratem Einzug, wobei jedes Feld in einer eigenen Zeile steht und die Gleichheitszeichen exakt untereinander angeordnet sind. Hier der unübersichtlichste Eintrag aus der Datei tex.bib:
@manual{GNUMake, key = {make}, title = {{GNU Make}, A Program for Directing Recompilation}, organization= "Free Software Foundation",address = "Boston, Massachusetts",ISBN={1-882114-80-9},year = 2000} 1 Sofern keine Eingabedateien festgelegt werden, liest bibtool von stdin. Dadurch eignet es sich auch als Filter für eine UNIX-Pipe-Konstruktion, was manchmal sehr praktisch sein kann.
808
Bsp. 13-4-2
13.4 Werkzeuge für Bibliographiedatenbanken
Dieser wird mit folgendem Ergebnis umformatiert:
@Manual{ key title organization address isbn year }
= = = = = =
gnumake, {make}, {{GNU Make}, A Program for Directing Recompilation}, "Free Software Foundation", "Boston, Massachusetts", {1-882114-80-9}, 2000
Gibt man mehrere Datenbankdateien an, so werden sie bei der Ausgabe Zusammenführen und alle zusammengeführt. Sofern gewünscht, kann man sie nach ihren Verweis- Sortieren schlüsseln sortieren (mithilfe der Option -s bzw. -S für eine umgekehrte Sortierreihenfolge). Stattdessen kann man auch einen eigenen Sortierschlüssel festlegen. Das geschieht mittels der Ressource1 sort.format:
bibtool -- ’sort.format="%N(author)"’
tex.bib jura.bib
Dabei ist zu beachten, dass durch die Sortierung eine ungültige Bibliographiedatei entstehen kann: Einträge, auf die mit dem BIBTEX-Feld crossref verwiesen wird, müssen in der Datenbank hinter den auf sie verweisenden Einträgen erscheinen. Ein Sortiervorgang kann diese Reihenfolge ändern. Im Handbuch ist beschrieben, wie man dieses Problem beim Definieren eines Sortierschlüssels berücksichtigt. Das Zusammenführen von Datenbanken kann auch zu doppelten Einträgen führen, oder genauer gesagt zu Einträgen, deren LaTEX-Verweisschlüssel Doppelte Schlüssel identisch ist. Datenbanken mit solchen Duplikaten erzeugen bei der Verarbei- entfernen tung mit BIBTEX Fehlermeldungen. Durch die Option -d werden die Duplikate als Kommentare ausgegeben, so dass BIBTEX wieder zufrieden ist. Das kann jedoch auch bedeuten, dass verschiedene Einträge (die fälschlicherweise den gleichen Schlüssel haben) zu einem einzelnen zusammengefasst werden. Daher ist diese Option mit Vorsicht zu genießen. Normalisieren und Umschreiben von Einträgen BIBTEX unterstützt als Feldbegrenzungen sowohl Anführungszeichen als auch geschweifte Klammern, so dass deren Vermischung im GNUmake-Eintrag durchaus zulässig, wenn vielleicht auch nicht empfehlenswert, ist. Es ist besser, sich an ein Schema zu halten, also entweder immer Klammern oder immer Anführungszeichen zu verwenden. Die folgende Regel dient zum Umschreiben von Einträgen:
bibtool -- ’rewrite.rule {"^\"\([^#]*\)\"$" "{\1}"}’
tex.bib
Sie verändert alle Feldbegrenzungssymbole zu Klammerpaaren, außer in Fällen, in denen Zeichenfolgen miteinander verkettet werden. Der Beispieleintrag 1 Ressourcen sind Programmdirektiven, denen Werte zugeordnet werden. Diese Zuordnung erfolgt häufig in externen Dateien (wie später noch erklärt wird). In der Befehlszeile werden sie nach der Option -- angegeben.
809
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
wird folgendermaßen ausgegeben:
@Manual{ key title organization address isbn year }
Externe Ressourcendateien
= = = = = =
gnumake, {make}, {{GNU Make}, A Program for Directing Recompilation}, {Free Software Foundation}, {Boston, Massachusetts}, {1-882114-80-9}, 2000
Leser, die mit regulären Ausdrücken vertraut sind, können die relativ komplexe Regel zum Umschreiben der Einträge wahrscheinlich ohne weiteres verstehen. Derartige reguläre Ausdrücke sind aber auch sehr ausführlich im Programmhandbuch beschrieben. Regeln zum Umschreiben können (wie auch alle anderen Ressourcendefinitionen) ebenso in einer eigenen Datei (mit der Erweiterung .rsc) gespeichert und dann mithilfe der Option -r geladen werden. Beispielsweise kann man Begrenzungssymbole in Form von Anführungszeichen mit folgender Befehlszeile entfernen:
bibtool -r braces
tex.bib
Diese lädt die Distributionsdatei braces.rsc, welche drei Regeln zum Umschreiben von Einträgen enthält. Sie ähneln der zuvor besprochenen, behandeln dabei jedoch zusätzliche Fälle. Umschreibungsregeln können auf bestimmte Felder begrenzt werden. Dazu gibt man diese Felder gefolgt von einem #-Zeichen vor dem regulären Ausdruck an. Die folgende Regel zum Beispiel schreibt das Erscheinungsjahr um, wenn das Feld nur zwei Ziffern enthält, die möglicherweise in Anführungszeichen oder Klammern gesetzt sind, wobei die erste Ziffer keine null sein darf (da in diesem Falle nicht sicher ist, ob es sich um das Jahr 1902 oder 2002 handelt):
rewrite.rule {year # "^[\"{]?\([1-9][0-9]\)[\"}]?$" "19\1"} Semantische Prüfungen
Anstelle des Umschreibens von Datenbankeinträgen kann man mithilfe der Ressource check.rule auch semantische Überprüfungen vornehmen. Die Befehlszeile
check.rule {year # "^[\"{]?\([0-9][0-9]\)[\"}]?$" "\@ \$: year = \1\n"} erzeugt eine Warnung, dass ein year-Feld mit verdächtigem Inhalt gefunden wurde, sofern das Feld nur zwei Ziffern enthält. (In der Mitteilung wird das \@-Zeichen durch den Publikationstyp und das \$-Zeichen durch den Verweisschlüssel ersetzt.) Wenn man dies auf die Beispieldatenbank anwendet, erhält man die Meldung:
*** BibTool: Book vleunen:92: year = 92
810
13.4 Werkzeuge für Bibliographiedatenbanken
Im Benutzerhandbuch werden auch ausführlichere semantische Prüfungen besprochen. BIBTEX-Datenbanken dürfen auch @string-Deklarationen enthalten, die in @stringden Einträgen als Kurzformen verwendet werden. In bestimmten Fällen sollen Deklarationen diese vielleicht durch die eigentlichen Begriffe ersetzt werden. Dazu dient die entfernen folgende Befehlszeile:
bibtool -- ’expand.macros=ON’ tex.bib Als Ergebnis ändert sich der Inhalt des Feldes series in den Einträgen lgc97 und lwc99 von
series = ttct zu der Langform
series
= {Tools and Techniques for Computer Typesetting}
Das bibtool-Programm erweitert nur die Kurzformen, die in der Datenbankdatei selbst definiert sind – Kurzformen aus BIBTEX-Stildateien bleiben unangetastet. Sollen auch diese erweitert werden, so muss man zusätzlich eine .bib-Datei laden, in welcher diese explizit als @string-Deklarationen enthalten sind. Extrahieren von Einträgen Es gibt verschiedene Möglichkeiten, eine Untermenge von Einträgen aus einer Datenbank auszuwählen. Die Option -x aux-datei sucht in der angegebenen aux-datei nach \citation-Befehlen. Auf deren Grundlage erzeugt sie eine neue .bib-Datei, die nur die Einträge enthält, die für das entsprechende Dokument benötigt werden, wie zum Beispiel:
bibtool -x 12-1-1.aux -o 12-1-1.bib Es müssen keine Quelldatenbanken angegeben werden, da das Programm auch diese Information aus der .aux-Datei erhält. Alle Einträge, auf die Querverweise erfolgen, werden automatisch als erforderlich gekennzeichnet. Eine weitere Möglichkeit bietet sich mit der Option -X reg-ausdr, die alle Einträge extrahiert, deren Verweisschlüssel mit dem regulären Ausdruck regausdr übereinstimmt. Zum Beispiel wählt die Befehlszeile
bibtool -X ’^mr-\|^so-’ tex.bib die beiden Einträge mit den Verweisschlüsseln MR-PQ und Southall aus. Das Handbuch enthält nähere Einzelheiten zu regulären Ausdrücken. Mithilfe dieser Ausdrücke lassen sich nur Einträge auswählen, die explizit mit ihnen übereinstimmen. Die Einträge des Beispiels, auf die Querverweise erfolgen, wie etwa EP92, werden daher nicht automatisch mit eingeschlossen. Dies lässt sich jedoch erzwingen, indem man der Ressource select.crossrefs den Wert ON zuweist.
811
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Durch Verwenden weiterer Ressourcen lässt sich die Auswahl noch genauer steuern. Mit der folgenden Befehlszeile etwa, kann man alle Einträge auswählen, in denen Knuth oder Lamport als Verfasser oder Herausgeber erscheinen:
bibtool -- ’select={author editor "Knuth\|Lamport"}’ tex.bib Alle Einträge der Publikationstypen book oder article findet man mit
bibtool -- ’select={@book @article}’ tex.bib Und um alle Einträge ohne Erscheinungsjahr zu finden, schreibt man
bibtool -- ’select.non={year ".+"}’ tex.bib Durch Kombinieren solcher Ressourcendefinitionen in einer Ressourcendatei und durch Übergeben der Ergebnisse von einer bibtool-Instanz an die nächste, kann man so beliebig komplizierte Umschreibungs- und Suchmethoden bereitstellen. Erzeugen des Verweisschlüssels Wie bereits in Kapitel 12 erklärt wurde, kann man den Verweisschlüssel mit ein paar Einschränkungen frei wählen. Dieser Schlüssel ist die Zeichenfolge, die der \cite-Befehl als Argument erhält, um auf einen Eintrag in der Bibliographie zu verweisen. Trotzdem ist es empfehlenswert, sich an ein bestimmtes Schema zu halten, da sich die Schlüssel dann leichter einprägen und es seltener zu doppelten Schlüsseln kommt. Das Programm bibtool kann dieses Vorgehen unterstützen, indem es die Schlüssel in einer Datenbank nach einem solchen Schema abändert. Das ist natürlich nur bei Datenbanken sinnvoll, die noch nicht im Gebrauch sind, da BIBTEX ansonsten die in den Dokumenten angegebenen Schlüssel nicht mehr finden kann. Mit -k und -K stehen zwei vordefinierte Optionen zur Verfügung. Beide erzeugen kleingeschriebene Schlüssel, die aus Autorennamen und dem ersten relevanten Wort im Titel (außer „The“ oder ähnlichen Wörtern) bestehen, wobei Befehle und Klammern ignoriert werden. Verarbeitet man also die Datenbank aus Abbildung 12.3 auf Seite 742 mit bibtool und sucht dann mithilfe der Befehlszeile
bibtool -k jura.bib | grep @ nach Zeilen mit @-Zeichen (um die Ergebnisliste zu verkleinern), so erhält man das folgende Ergebnis:
@Book{ @Book{ @Book{ @Book{
812
baumbach.lauterbach.ea:zivilproze, brox.walker:allgemeines, brox.walker:besonderes, palandt:burgerliches,
13.4 Werkzeuge für Bibliographiedatenbanken
Der etwas seltsame Schlüssel, der auf :zivilproze endet, resultiert daraus, dass der Eintrag das Wort Zivilproze\ss!ordnung enthält. Das Programm geht davon aus, dass dieses Wort nach \ss endet, das selbst nicht berücksichtigt wird, da es ein Befehl ist. Ebenso wird \"u im vierten Schlüssel als „u“ wiedergegeben. Durch Laden der Ressourcendatei tex_def.rsc lässt sich das Ergebnis erheblich verbessern. Diese Datei verwendet die Ressource tex.define, um gängige LaTEX-Befehle zu übersetzen, so dass
bibtool -r tex_def -k jura.bib | grep @ folgende Schlüssel erzeugt:
@Book{ @Book{ @Book{ @Book{
baumbach.lauterbach.ea:zivilprozessordnung, brox.walker:allgemeines, brox.walker:besonderes, palandt:buergerliches,
Auch andere Programme zum Bearbeiten von BIBTEX-Datenbanken haben ähnliche Probleme beim Parsen von Befehlen, die durch Leerzeichen begrenzt sind. Daher ist an solchen Stellen normalerweise die Schreibweise \ss{} oder {\ss} vorzuziehen. In Abbildung 13.2 auf Seite 806 sieht man z.B., dass bib2html sich ebenfalls durch die Schreibweise täuschen ließ und im ersten Eintrag fälschlicherweise ein zusätzliches Leerzeichen eingefügt hat. Die andere Option zum Erzeugen der Schlüssel (-K) funktioniert ähnlich. Sie fügt noch die Initialen der Autoren nach dem Namen ein:
@Book{ @Book{
baumbach.a.lauterbach.w.ea:zivilproze, brox.h.walker.w:allgemeines,
Mithilfe der im Handbuch beschriebenen vielfältigen Konfigurationsmöglichkeiten lassen sich weitere Muster festlegen.
13.4.5 pybliographer – Eine erweiterbare Bibliographieverwaltung Die Scripting-Umgebung pybliographer von Frédéric Gobry ist ein Werkzeug zum Verwalten bibliographischer Datenbanken. In der aktuellen Version unterstützt sie die folgenden Formate: BIBTEX, ISI (Web of Knowledge), Medline, Ovid und Refer/EndNote, die sie auch ineinander konvertieren kann. Die Anwendung ist in Python geschrieben, so dass sie ohne weiteres für UNIX-Systeme geeignet ist; auf Windows-Rechnern kann sich ihr Einsatz jedoch problematisch gestalten, obwohl es auch Python-Versionen für diese Plattform gibt. Die pybliographer-Website ist unter der Internetadresse http: //pybliographer.org zu finden. Das graphische Frontend für pybliographer basiert auf den GnomeBibliotheken und trägt den Namen pybliographic. Beim Programmaufruf kann
813
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Abbildung 13.3: Die pybliographic-Benutzeroberfläche
man die Datenbank angeben, mit der man arbeiten möchte. Normalerweise handelt es sich um eine lokale Datei, es kann jedoch auch eine RemoteDatenbank sein, deren URL angegeben wird. Der Befehl
pybliographic http://www.math.utah.edu:8080/pub/tex/bib/tugboat.bib beispielsweise öffnet einen Arbeitsbereich wie den in Abbildung 13.3 dargestellten. Er wird jedoch nicht genauso aussehen, da sich die graphische Benutzeroberfläche sehr flexibel anpassen lässt. Bei der vom Autor benutzten Version wurde z.B. im Hauptbildschirm zwischen der „author“-Spalte und dem Erscheinungsjahr eine Spalte „editor“ hinzugefügt. Über das Dialogfeld „Preferences“ (Settings → Preferences → Gnome) lassen sich andere Felder einblenden. Auf UNIX-Systemen werden die Einstellungen in der Datei .pybrc.conf gespeichert. Diese Datei lässt sich zwar nicht vom Anwender bearbeiten, man kann sie jedoch gegebenenfalls entfernen, um die ursprünglich vorgegebene Konfiguration wiederherzustellen. Abbildung 13.3 zeigt noch einige weitere interessante Funktionen. Am Fuß des Hauptfensters sieht man, dass die geladene Datenbank 2446 Einträge
814
13.4 Werkzeuge für Bibliographiedatenbanken
enthält (tugboat.bib), von denen zurzeit 3 angezeigt werden. Das liegt daran, dass die Datenbank nach Einträgen durchsucht wurde, die zum Muster des regulären Ausdrucks Mittelbach im Feld author passen (30 gefundene Einträge); diese wiederum wurden nach Einträgen durchsucht, deren title-Feld den Text LaTeX3 oder class design enthält (5 gefundene Einträge); und innerhalb dieses Ergebnisses wurde die Suche dann auf Veröffentlichungen aus den Jahren 1995 bis 1999 beschränkt. Das Dialogfenster „Search“ zeigt die zurzeit definierten, verfügbaren hierarchischen Ansichten. Durch Anklicken der einzelnen Ansichten kann man zwischen ihnen hin- und herwechseln. Mit einem Rechtsklick werden nicht mehr benötigte Ansichten gelöscht. Die Suchfelder lassen sich einstellen, wobei die Anfangseinstellungen zunächst nur wenige Felder anbieten. Um einen vorhandenen Eintrag zu bearbeiten, führt man im Hauptfenster einen Doppelklick darauf aus. Stattdessen kann man auch das Edit-Menü der Werkzeugleiste verwenden oder mit einem Rechtsklick das Kontextmenü aufrufen. Die letzten beiden Möglichkeiten stehen auch zum Löschen oder Hinzufügen von Einträgen zur Verfügung. Das Dialogfeld „Edit“ zeigt den Eintrag in einem Bearbeitungsformat, bei dem die Registerkarte „Mandatory“ geöffnet ist, welche die für den aktuellen Publikationstyp obligatorischen Felder anzeigt. Außerdem gibt es noch die optionalen Felder auf der Registerkarte „Optional“ und möglicherweise weitere Felder auf der Registerkarte „Extra“. Diese Einteilung wird nach den aktuellen Einstellungen vorgenommen und lässt sich leicht an die eigenen Erfordernisse anpassen. Das Programm pybliographic kann zwar problemlos Datenbanken mit beliebigen Feldnamen laden, diese erscheinen jedoch alle auf der Registerkarte „Extra“. Das kann störend sein, wenn man mit einem erweiterten BIBTEX-Stil arbeitet, wie etwa mit jurabib, der zusätzliche Felder als entweder erforderlich oder optional betrachtet. In solchen Fällen lohnt es sich, die vorgegebenen Einstellungen anzupassen (Settings → Entries, Fields). Rechts der Felder sieht man runde Knöpfe, die grün oder rot sein können. Mit roten Knöpfen signalisiert pybliographic, dass das jeweilige Feld Daten enthält, die das Programm nicht fehlerfrei parsen konnte, und dass beim Ändern des Textes wahrscheinlich Daten verloren gehen werden. Im Feld title beispielsweise konnte der Befehl \LaTeX{} nicht einwandfrei interpretiert werden, so dass das Programm stattdessen LaTeX anzeigt. Das Feld journal ist markiert, da die Datenbank eigentlich folgenden Text enthält:
Journal
Hierarchische Suche
Warnung bei problematischen Inhalten
= j-tugboat,
Dieser Verweis auf eine Kurzform ginge verloren, sobald man das betreffende Feld bearbeitet. Um solche Einträge zu bearbeiten, muss man auf „Native Editing“ umschalten, wie in Abbildung 13.4 auf der nächsten Seite zu sehen. Dies geschieht mittels der „Native Editing“-Schaltfläche im Dialogfenster „Edit entry“. Das Fenster verändert seine Form dann zu dem mittleren Fenster in Abbildung 13.4 und bietet ein BIBTEX-Standardeingabeformat, in dem man nach Belieben editieren kann. Allerdings muss man hier selbst darauf achten, die BIBTEX-Syntax einzuhalten. Wie im rechten Fenster der Abbildung zu sehen, kann man den „Native Editing“-Modus auch als Standardmodus einstellen.
815
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Abbildung 13.4: Native Editing in pybliographic Vorgegebene ! Beim Laden einer Datenbank normalisiert pybliographic die GroßschreiRegeln zur bung in einigen Feldern (z.B. in title). Da diese Überarbeitung im Rahmen Großschreibung der Aufbereitung für eine bestimmte Zeitschrift besser von BIBT X vorgenom-
E men wird, sollte man in Erwägung ziehen, diese Funktion auszuschalten (Settings → Preferences → Bibtex+ → Capitalize). Bei nicht englischen Sprachen muss man sie sogar ausschalten, damit Substantive nicht plötzlich fälschlicherweise klein geschrieben werden. Die Distribution enthält auch einige Kommandozeilenskripts. In der Dokumentation wird erläutert, wie man diese um weitere ergänzt. Mit pybconvert z.B. kann man Dateien in andere Formate konvertieren. Das Skript
pybconvert bibtex..refer tex.bib konvertiert die BIBTEX-Datenbank tex.bib in das Refer-Format und erzeugt dabei Ausgaben, wie die folgende:
%T %P %I %F %D %C %A
816
A handbook for scholars xi + 348 Oxford University Press vLeunen:92 92 Walton Street, Oxford OX2 6DP, UK van Leunen, Mary-Claire
13.4 Werkzeuge für Bibliographiedatenbanken
Je nach Inhalt der einzelnen Felder kann es dabei zu Warnungen wie der folgenden kommen: „warning: unable to convert ‘\textsl’“ (Warnung: Kann ‘\textsl’ nicht konvertieren). Das Programm kann solche Befehle nämlich nicht in ein TEX-fremdes Format wie Refer konvertieren. In diesem Falle sollte man die Ergebnisse soweit erforderlich per Hand korrigieren. Das Skript pycompact gleicht dem bereits besprochenen perl-Skript aux2bib und der Option -x des bibtool-Programms. Im Unterschied zu bibtool schließt es jedoch keine Einträge mit ein, auf die Querverweise erfolgen. Daher ist bibtool, sofern verfügbar, die bessere Wahl. Ein recht interessantes Skript ist pybcheck, das eine Liste von BIBTEXDatenbanken oder einen Verzeichnisnamen als Argument erwartet. Es überprüft dann alle Datenbanken auf Syntaxfehler, doppelte Schlüssel und andere Probleme. Führt man z.B. pybcheck EX aus, so erhält man
file ‘EX/jura.bib’ is ok [4 entries] file ‘EX/tex.bib’ is ok [12 entries] Das Skript überprüft die Datenbanken jeweils nur einzeln, so dass es nicht bemerkt, wenn verschiedene Dateien gleiche Schlüssel enthalten. Emacs-Benutzer können den Befehl direkt über M-x compile gefolgt von pybcheck datei(en) aus einem Compile-Buffer heraus aufrufen. Vom Ergebnisfenster aus kann man dann durch Klicken mit der mittleren Maustaste sofort zu einem der entdeckten Fehler springen.
13.4.6 JBibtexManager – Datenbankverwaltung in Java Das Programm JBibtexManager von Nizar Batada ist ein in Java geschriebener BIBTEX-Datenbankmanager (siehe Abbildung 13.5 auf der nächsten Seite). Aufgrund der gewählten Programmiersprache funktioniert er auf allen Plattformen, auf denen Java ab der Version 1.4 verfügbar ist (z.B. Windows, UNIXDerivate, Mac). Das Programm erlaubt das Suchen nach Autor, Herausgeber, Titel und Schlüsselwörtern; das Sortieren nach Publikationstyp, Verweisschlüssel, Autor, Erscheinungsjahr, Titel, Zeitschrift, Herausgeber und Schlüsselwörtern; und es verfügt natürlich über die Standardfunktionen zum Bearbeiten der Einträge, einschließlich Hinzufügen, Löschen, Kopieren und Einfügen, auch zwischen Bibliographien. Es entdeckt automatisch doppelte Verweisschlüssel, wenn Datenbanken zusammengeführt werden. Außerdem bietet es die Möglichkeit, eine Bibliographie nach doppelten Einträgen zu durchsuchen (also Einträgen, die sich, wenn überhaupt, nur im Verweisschlüssel voneinander unterscheiden). Wie pybliographic kann auch dieses Programm Daten aus verschiedenen bibliographischen Formaten importieren: BIBTEX, INSPEC, ISI (Web of Knowledge), Medline (XML), Ovid und Scifinder. Es verfügt über Exportfilter für HTML und einfachen Text. Bei Formaten, die keinen Verweisschlüssel beinhalten, erzeugt es automatisch passende Schlüssel, sofern die Autorendaten so strukturiert sind, dass das Programm sie interpretieren kann.
817
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Abbildung 13.5: Die JBibtexManager-Benutzeroberfläche (deutsche Version)
Obwohl JBibtexManager hauptsächlich für die Verarbeitung von BIBTEXDatenbanken gedacht ist, können beim ersten Import solcher Dateien einige Schwierigkeiten auftreten, da nicht alle Syntaxvarianten des BIBTEXDatenbankformates unterstützt werden. Es sollte vor allem in jeder Zeile nur ein Feld stehen. Beim Parsen des GNUmake-Eintrags in der Beispieldatenbank tex.bib würden also Fehler auftreten. Außerdem werden Einträge nur erkannt, wenn ihr Publikationstyp (der mit einem @-Zeichen anfängt) in der ersten Spalte beginnt. Andernfalls wird der Eintrag fälschlicherweise als Kommentar interpretiert und nicht übernommen.1 Diese Probleme treten natürlich nur beim ersten Laden einer extern erstellten Datenbank auf. Hat das System die Daten erst einmal akzeptiert, dann werden sie so gespeichert, dass sie auch immer wieder problemlos geladen werden können. Ein Weg, diese Anfangsprobleme zu umgehen, besteht darin, die externe Datenbank zunächst mit einem Werkzeug wie bibtool oder bibclean vorzubereiten, da die Einträge nach der Überprüfung und der Formatierung durch einen Prettyprinter in einem akzeptablen Format vorliegen. Unbekannte Felder in einem Datenbankeintrag sind nicht sichtbar und lassen sich nur im „raw BIBTEX“-Modus der neuesten Programmversion bearbeiten. Man kann jedoch anpassen, welche Felder das Programm für jeden einzelnen Publikationstyp erkennt, so dass man es auch für erweiterte BIBTEXStile benutzen kann, wie sie etwa von den Paketen jurabib- oder natbib verwendet werden. 1 Die meisten dieser Einschränkungen sind in der neuen Version von JBibtexManager behoben.
818
13.4 Werkzeuge für Bibliographiedatenbanken
Abbildung 13.6: Die BibTexMng-Benutzeroberfläche
Das Programm ist nicht auf dem CTAN erhältlich. Seine momentane Internetadresse ist http://jabref.sourceforge.net/, wo es 2004 mit einem ähnlichen Projekt namens BibKeeper unter dem neuen Namen JabRef zusammengeführt wurde.
13.4.7 BibTexMng – Ein Datenbankmanager für Windows Bei dem Programm BibTexMng von Petr und Nikolay Vabishchevich handelt es sich um einen BIBTEX-Datenbankmanager für Windows (siehe Abbildung 13.6). Er unterstützt alle typischen Verwaltungsaufgaben: Bearbeiten, Suchen, Sortieren, Verschieben und Kopieren von Einträgen aus einer Datei in eine andere. Im Gegensatz zu pybliographic oder JBibtexManager verarbeitet das Programm BibTexMng ausschließlich BIBTEX-Datenbanken; es verfügt über keinerlei Import- oder Exportfunktionen für andere bibliographische Formate. Als einzige „fremde“ Formate werden .bbl- und .htm-Dateien unterstützt (d.h. man verarbeitet eine Auswahl von Einträgen aus dem Programm heraus mit BIBTEX oder BIBTEX8 oder erzeugt eine HTML-Datei aus dieser Auswahl von Einträgen).
819
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
In seiner aktuellen Version kennt das Programm leider nur die Standardpublikationstypen von BIBTEX (siehe Tabelle 13.1 auf Seite 791), die BIBTEXStandardfelder (Tabelle 13.2) sowie folgende Felder:
abstract, affiliation, contents, copyright, isbn, issn, keywords, language, lccn, location, mrnumber, price, size und url Alle anderen Felder werden beim ersten Laden einer BIBTEX-Datenbank stillschweigend verworfen; das gilt auch für Publikationstypen, die nicht zum Standard gehören. Damit ist das Programm ungeeignet, wenn man BIBTEX-Stile Für jurabib et al. nicht wie jurabib verwenden möchte, die zusätzliche Felder oder Typen einführen, geeignet da diese im Programm nicht dargestellt werden können. Es eignet sich jedoch für die meisten verfügbaren Stile, einschließlich der für natbib entwickelten (wie z.B. Stile, die mit custom-bib erzeugt wurden). Man sollte auch beachten, dass das BibTexMng-Programm keine @stringDeklarationen unterstützt. Sind diese in einer extern erzeugten BIBTEXDatenbank vorhanden, so müssen sie erst entfernt werden, bevor man die Datenbank mit BibTexMng verwenden kann. Andernfalls treten beim Parsen der Einträge Fehler auf. Zur Unterstützung bietet das Programm eine Bereinigungsfunktion für externe Datenbanken an (unter File → Cleaning of BIBTEX database). Diese Funktion ersetzt alle Kurzformen durch ihre Definitionen und entfernt gegebenenfalls vorhandene unbekannte Felder.
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen Nachdem nun bekannt ist, wie man BIBTEX-Datenbankeinträge mithilfe vielfältiger Werkzeuge generieren und bearbeiten kann, ist es Zeit, den eigentlichen Zweck des BIBTEX-Programms näher zu beleuchten. Dieser besteht im Erzeugen eines Literaturverzeichnisses, das (je nach Inhalt des betreffenden Dokumentes) eine bestimmte Auswahl von Einträgen enthält, die bestimmten Konventionen entsprechend formatiert sind. Zunächst wird anhand von Beispielergebnissen, die mittels Standard- und anderer Stile erzeugt wurden, die Verwendung existierender Stile besprochen. Danach wird gezeigt, wie sich mithilfe des custom-bib-Paketes auf einfache Weise angepasste Stile für nahezu jeden Zweck erstellen lassen.
13.5.1 Eine Sammlung von BIBTEX-Stildateien Verschiedene Organisationen oder Einzelpersonen haben BIBTEX-Stildateien entwickelt, die den Layoutrichtlinien bestimmter Zeitschriften oder Verlagshäuser entsprechen. Nelson Beebe hat eine große Anzahl von BIBTEXStildateien zusammengestellt. Zu jedem Stil gibt es eine Beispieldatei, die den Effekt des jeweiligen Stils veranschaulicht. 1 Einige dieser Stile – beispielsweise authordate"i#, jmb und named – müssen zusammen mit ihren zuge1 Anhang C gibt Aufschluss darüber, wie man diese Dateien aus einem der T X-Archive E erhält und ob sie nicht vielleicht schon auf dem eigenen System vorliegen.
820
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen
hörigen LaTEX-Paketen verwendet werden, damit sie die gewünschten Effekte erzielen. Diese sind in Tabelle 13.4 genannt. Man kann einen Bibliographiestil auch selbst anpassen, indem man die in der Tabelle aufgeführten leicht verändert. In Abschnitt 13.6.3 wird beschrieben, wie man dabei vorgeht. Oder man erzeugt mithilfe des Programms custom-bib eine eigene Stildatei, entsprechend der Erklärungen in Abschnitt 13.5.2 auf Seite 828. Tabelle 13.4: Eine Auswahl von BIBTEX-Stildateien Stilname
abbrv.bst abbrvnat.bst abstract.bst acm.bst agsm.bst alpha.bst amsalpha.bst amsplain.bst annotate.bst annotation.bst apa.bst apalike.bst apalike
apalike2.bst astron.bst authordatei.bst authordate1-4
bbs.bst cbe.bst
cell.bst harvard
humanbio.bst humannat.bst ieeetr.bst
Beschreibung BIBTEX-Standardstil natbib-Variante des abbrv-Stils Abgewandelter alpha-Stil mit abstract-Schlüsselwort BIBTEX-Stil der Association for Computing Machinery BIBTEX-Stil für Publikationen der australischen Regierung BIBTEX-Standardstil alpha-ähnlicher BIBTEX-Stil für AMS-TEX plain-ähnlicher BIBTEX-Stil für AMS-TEX (numerische Label) Abgewandelter BIBTEX-Stil alpha mit annote-Schlüsselwort Abgewandelter BIBTEX-Stil plain mit annote-Schlüsselwort BIBTEX-Stil der American Psychology Association Variante des BIBTEX-Stils apa LaTEX-Paket für den Stil apalike.bst Variante des BIBTEX-Stils apalike Astronomy-BIBTEX-Stil i=[1,4]; Reihe von BIBTEX-Stilen, die Autor-Jahr-Verweise erzeugen LaTEX-Paket für den BIBTEX-Stil authordatei.bst BIBTEX-Stil der Behavioral and Brain Sciences BIBTEX-Stil des Council of Biology Editors (auch für Fachzeitschriften, wie American Naturalist und Evolution) Leicht modifizierter BIBTEX-Stil jmb LaTEX-Paket für die Harvard-Stile (z.B. agsm) BIBTEX-Stil für Human Biology FachzeitschriftenHuman Nature und American Anthropologist BIBTEX-Stil für die Transactions of the Institute of Electrical and Electronic Engineers Fortsetzung auf nächster Seite
821
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Fortsetzung von letzter Seite
Stilname
is-abbrv.bst is-alpha.bst is-plain.bst is-unsrt.bst jmb.bst jmb
jox.bst jtb.bst jurabib.bst jureco.bst jurunsrt.bst kluwer.bst named.bst named
namunsrt.bst
Beschreibung BIBTEX-Stil abbrv mit zusätzlichem ISSN- und ISBN-Schlüsselwort BIBTEX-Stil alpha mit zusätzlichem ISSN- und ISBN-Schlüsselwort BIBTEX-Stil plain mit zusätzlichem ISSN- und ISBN-Schlüsselwort BIBTEX-Stil unsrt mit zusätzlichem ISSN- und ISBN-Schlüsselwort BIBTEX-Stil des Journal of Molecular Biology LaTEX-Paket für den Stil jmb.bst Stil zum jurabib-Paket (Oxfordstil) BIBTEX-Stil des Journal of Theoretical Biology Stil zum jurabib-Paket Stil zum jurabib-Paket (kompakt) Stil zum jurabib-Paket (unsortiert) Kluwer Academic Publishers BIBTEX-Stil BIBTEX-Stil mit [Autor(en)-Jahr-]Zitierschema LaTEX-Paket für den Stil named.bst Mit Namen versehene Variante des BIBTEX-Stils
unsrt nar.bst nar
nature.bst nature
newapa.bst newapa
phaip.bst phapalik.bst phcpc.bst phiaea.bst phjcp.bst phnf.bst phnflet.bst phpf.bst phppcf.bst phreport.bst phrmp.bst plain.bst plainnat.bst plainyr.bst
BIBTEX-Stil des Nucleic Acid Research LaTEX-Paket für den Stil nar.bst BIBTEX-Stil zu Nature LaTEX-Paket für den Stil nature.bst Abwandlung des Stils apalike.bst LaTEX-Paket für den Stil newapa.bst BIBTEX-Stil der Fachzeitschriften des American Institute of Physics BIBTEX-Stil der American Psychology Association BIBTEX-Stil der Computer Physics Communications BIBTEX-Stil für die Konferenzen der International Atomic Energy Agency BIBTEX-Stil des Journal of Computational Physics Nuclear Fusion-BIBTEX-Stil BIBTEX-Stil der Nuclear Fusion Letters BIBTEX-Stil zu Physics of Fluids Physik-Version des BIBTEX-Stils apalike BIBTEX-Stil für interne Fachberichte zur Physik BIBTEX-Stil der Reviews of Modern Physics BIBTEX-Standardstil natbib-Variante des Stils plain BIBTEX-Stil plain mit primärer Sortierung nach Erscheinungsjahr Fortsetzung auf nächster Seite
822
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen
Fortsetzung von letzter Seite
Stilname
siam.bst unsrt.bst unsrtnat.bst
Beschreibung BIBTEX-Stil der Society of Industrial and Applied Mathematics BIBTEX-Standardstil natbib-Variante des Stils unsrt
Theoretisch kann man das Erscheinungsbild eines Literaturverzeichnisses einfach durch Verwendung eines anderen BIBTEX-Stils verändern. In der Praxis gibt es jedoch ein paar Einschränkungen: Die Schnittstelle für BIBTEXStile wurde von einigen Entwicklern so erweitert, dass ihre Stile in LaTEX zusätzliche Unterstützung benötigen. In Kapitel 12 wurden bereits einige Beispiele dazu gezeigt. So benötigen zum Beispiel alle Stile zum Autor-Jahr-Schema ein spezielles LaTEX-Paket, wie etwa natbib oder harvard, und die BIBTEX-Stile zum jurabib-Paket funktionieren auch nur, wenn dieses Paket geladen ist. Alles in allem funktioniert dieses Verfahren jedoch sehr gut. Das wird in diesem Abschnitt anhand verschiedener Beispiele belegt, indem ein gleich bleibendes Beispieldokument mithilfe unterschiedlicher BIBTEX-Stile (und gegebenenfalls der erforderlichen Zusatzpakete) formatiert wird. Zu diesem Zweck werden fünf Quellen aus der mittlerweile gut bekannten Datenbank aus Abbildung 12.2 von Seite 714 zitiert: ein Artikel und ein Buch von Donald Knuth, die zeigen, wie verschiedene Veröffentlichungen des gleichen Autors gehandhabt werden; das Handbuch der Free Software Foundation, als Eintrag ohne Autor; der unveröffentlichte Eintrag mit vielen Autoren und dem besonderen BIBTEX-Text „and others“; sowie eine Veröffentlichung aus einem Konferenzbericht, für den BIBTEX zusätzliche Daten aus einem weiteren Eintrag heranziehen muss. Im ersten Beispiel wird durch die folgende Eingabe der BIBTEX-Standardstil plain verwendet:
\bibliographystyle{plain} \nocite{Knuth:TB10-1,GNUMake,MR-PQ,Knuth-CT-a,test97} \bibliography{tex} Für das endgültige Dokument muss LaTEX die Beispieldatei einmal verarbeiten, damit die Quellenverweise in die .aux-Datei geschrieben werden. Danach verarbeitet BIBTEX die erzeugte .aux-Datei, wobei die relevanten Einträge aus der BIBTEX-Datenbank tex.bib ausgelesen werden. Der eigentliche Bibliographiestil, nach dessen Vorgaben die Datenbankeinträge zur späteren Verarbeitung durch LaTEX in die .bbl-Datei ausgegeben werden, ist im LaTEXDokument über den Befehl \bibliographystyle festgelegt. Abschließend wird LaTEX noch zweimal ausgeführt: einmal um die .bbl-Datei zu laden und ein zweites Mal um alle Verweise aufzulösen.1 Dieser Ablauf wurde in Abschnitt 12.1.3 auf Seite 711 genauer beschrieben. Dort ist der Datenfluss zudem auch graphisch dargestellt (Abbildung 12.1). Der Stil plain arbeitet mit numerischen Labels (in eckigen Klammern) und die Einträge sind alphabetisch nach Autor, Erscheinungsjahr und Titel 1 Für dieses Beispiel ist sogar nur ein Durchlauf erforderlich. Es gibt nämlich keine Querverweise, da überall der Befehl \nocite verwendet wurde.
823
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
sortiert, wobei Titel in Kleinbuchstaben konvertiert werden (inkorrekt im zweiten Eintrag). Das GNU-Handbuch wurde anhand der Organisation einsortiert. Damit erhält man die folgende Ausgabe:
[1] Free Software Foundation, Boston, Massachusetts. GNU Make, A Program for Directing Recompilation, 2000. [2] Michel Goossens, Ben User, Joe Doe, et al. Mehrdeutige quellenverweise. Eingereicht bei IBM Journal of Research and Development, 1997. [3] Donald E. Knuth. The TEXbook, volume A of Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. [4] Donald E. Knuth. Typesetting Concrete Mathematics. TUGboat, 10(1):31–36, April 1989. [5] Frank Mittelbach and Chris Rowley. The pursuit of quality: How can automated typesetting achieve the highest standards of craft typography? In Vanoirbeek and Coray [6], pages 261–273. [6] Christine Vanoirbeek and Giovanni Coray, editors. EP92—Proceedings of Electronic Publishing, ’92, Cambridge, 1992. Cambridge University Press.
Bsp. 13-5-1
Wird plain durch abbrv ersetzt, so sieht das Ergebnis ganz ähnlich aus. Die Einträge sind jedoch kompakter, da Vornamen, Monate und vordefinierte Zeitschriftennamen (Tabelle 13.3 auf Seite 800) abgekürzt werden. Beispielsweise ergibt die Kurzform ibmjrd in der zweiten Quelle nun „IBM J. Res. Dev.“ anstelle von „IBM Journal of Research and Development“.
[1] Free Software Foundation, Boston, Massachusetts. GNU Make, A Program for Directing Recompilation, 2000. [2] M. Goossens, B. User, J. Doe, et al. Mehrdeutige quellenverweise. Eingereicht bei IBM J. Res. Dev., 1997. [3] D. E. Knuth. The TEXbook, volume A of Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. [4] D. E. Knuth. Typesetting Concrete Mathematics. TUGboat, 10(1):31–36, Apr. 1989. [5] F. Mittelbach and C. Rowley. The pursuit of quality: How can automated typesetting achieve the highest standards of craft typography? In Vanoirbeek and Coray [6], pages 261–273. [6] C. Vanoirbeek and G. Coray, editors. EP92—Proceedings of Electronic Publishing, ’92, Cambridge, 1992. Cambridge University Press. Der BIBTEX-Standardstil unsrt erzeugt die gleichen Ergebnisse wie plain, nur dass die Einträge nicht sortiert sondern in der Reihenfolge erscheinen, in der sie das erste Mal zitiert werden. Unter den Standardstilen gibt es keine Kombination aus unsrt und abbrv, nötigenfalls wäre es jedoch ein Leichtes,
824
Bsp. 13-5-2
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen
die Unterschiede zwischen plain und abbrv in unsrt zu integrieren, so dass man einen neuen Stil erhält.
[1] Donald E. Knuth. Typesetting Concrete Mathematics. TUGboat, 10(1):31–36, April 1989. [2] Free Software Foundation, Boston, Massachusetts. GNU Make, A Program for Directing Recompilation, 2000. [3] Frank Mittelbach and Chris Rowley. The pursuit of quality: How can automated typesetting achieve the highest standards of craft typography? In Vanoirbeek and Coray [6], pages 261–273. [4] Donald E. Knuth. The TEXbook, volume A of Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. [5] Michel Goossens, Ben User, Joe Doe, et al. Mehrdeutige quellenverweise. Eingereicht bei IBM Journal of Research and Development, 1997. Bsp. 13-5-3
[6] Christine Vanoirbeek and Giovanni Coray, editors. EP92—Proceedings of Electronic Publishing, ’92, Cambridge, 1992. Cambridge University Press. Der Standardstil alpha ist dem Stil plain ebenfalls sehr ähnlich, die Labels der Einträge werden hier jedoch aus dem Autornamen und dem Erscheinungsjahr gebildet. Das etwas seltsame Label des GNU-Handbuches rührt daher, dass der Eintrag ein key-Feld enthält, dessen erste drei Buchstaben als Teil des Labels herangezogen wurden. Beachtenswert ist auch das interessante Label für die Quelle mit mehr als drei Autoren. Die Publikationen werden hier nach dem Label sortiert, so dass das GNU-Handbuch erst an vierter Stelle steht.
[GUD+ 97] Michel Goossens, Ben User, Joe Doe, et al. Mehrdeutige quellenverweise. Eingereicht bei IBM Journal of Research and Development, 1997.
Bsp. 13-5-4
[Knu86]
Donald E. Knuth. The TEXbook, volume A of Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986.
[Knu89]
Donald E. Knuth. Typesetting Concrete Mathematics. TUGboat, 10(1):31–36, April 1989.
[mak00]
Free Software Foundation, Boston, Massachusetts. GNU Make, A Program for Directing Recompilation, 2000.
[MR92]
Frank Mittelbach and Chris Rowley. The pursuit of quality: How can automated typesetting achieve the highest standards of craft typography? In Vanoirbeek and Coray [VC92], pages 261–273.
[VC92]
Christine Vanoirbeek and Giovanni Coray, editors. EP92—Proceedings of Electronic Publishing, ’92, Cambridge, 1992. Cambridge University Press.
Viele BIBTEX-Stile erzeugen sparsamere oder umfangreichere Varianten der Standardstil-Layouts. Der phaip-Stil für die Zeitschriften des American
825
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Institute of Physics beispielsweise setzt ein unsortiertes Layout (also in der Reihenfolge der Zitate) ein, lässt dabei jedoch die Artikelüberschriften aus, verwendet abgekürzte Autorennamen und kennzeichnet Herausgeber von Konferenzberichten durch eine andere Struktur. Man beachte, dass der Eintrag mit mehr als drei Autoren hier komprimiert wurde und somit nur noch den ersten Autor zeigt.
[1] D. E. Knuth, TUGboat 10, 31 (1989). [2] Free Software Foundation, Boston, Massachusetts, GNU Make, A Program for Directing Recompilation, 2000. [3] F. Mittelbach and C. Rowley, The pursuit of quality: How can automated typesetting achieve the highest standards of craft typography?, In Vanoirbeek and Coray [6], pages 261–273. [4] D. E. Knuth, The TEXbook, volume A of Computers and Typesetting, Addison-Wesley, Reading, MA, USA, 1986. [5] M. Goossens et al., Mehrdeutige quellenverweise, Eingereicht bei IBM J. Res. Dev., 1997. [6] C. Vanoirbeek and G. Coray, editors, EP92—Proceedings of Electronic Publishing, ’92, Cambridge, 1992, Cambridge University Press.
Bsp. 13-5-5
Bei Stilen, die ein Autor-Jahr-Schema verwenden, verändert sich das Layout normalerweise viel drastischer. Zum Beispiel werden die Label üblicherweise unterdrückt, da ja nach Autoren nachgeschlagen wird. Der chicago-Stil etwa zeigt den oder die Autorennamen in abgekürzter Form (mit nachgestelltem Vornamen), gefolgt vom Erscheinungsjahr, das in Klammern steht. Außerdem ist hier noch eine andere Art zu sehen, wie man Herausgeber von Konferenzberichten darstellen kann, und im Englischen erhält man anstelle des Wortes „pages“ die Abkürzung „pp.“ Für dieses Beispiel wurde zur Unterstützung des Autor-Jahr-Schemas das natbib-Paket geladen.
Free Software Foundation (2000). GNU Make, A Program for Directing Recompilation. Boston, Massachusetts: Free Software Foundation. Goossens, M., B. User, J. Doe, et al. (1997). Mehrdeutige quellenverweise. Eingereicht bei IBM Journal of Research and Development. Knuth, D. E. (1986). The TEXbook, Volume A of Computers and Typesetting. Reading, MA, USA: Addison-Wesley. Knuth, D. E. (1989, April). Typesetting Concrete Mathematics. TUGboat 10(1), 31–36. Mittelbach, F. and C. Rowley (1992). The pursuit of quality: How can automated typesetting achieve the highest standards of craft typography? See Vanoirbeek and Coray (1992), pp. 261–273. Vanoirbeek, C. and G. Coray (Eds.) (1992). EP92—Proceedings of Electronic Publishing, ’92, Cambridge. Cambridge University Press.
826
Bsp. 13-5-6
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen
Als letztes Beispiel wird noch eine weitere Art von Layout angezeigt, die sich mithilfe des jurabib-Paketes erzielen lässt. Da hier mehr Anpassungen vorgenommen werden müssen, wird die Eingabe noch einmal angezeigt. Der Trick, mit dem hier die Überschrift unterdrückt wird, ist für echte Dokumente nicht geeignet, da der Leerraum um die Überschrift erhalten bliebe!
\usepackage[bibformat=ibidem]{jurabib} \bibliographystyle{jurabib} \jbuseidemhrule % Linie erzeugen bei gleichem Autor \renewcommand\refname{} % Überschrift für Beispiel unterdrücken \nocite{Knuth:TB10-1,GNUMake,MR-PQ,Knuth-CT-a,test97,LGC97} \bibliography{tex} In diesem Layout wird der Name des Autors durch eine Linie ersetzt, wenn er zuvor bereits aufgeführt wurde. Bei mehreren Autoren muss dazu die gesamte Liste übereinstimmen (vgl. die ersten beiden Einträge). Hier werden auch zum ersten Mal ISBN- und ISSN-Nummern angezeigt, sofern sie in den Einträgen vorhanden sind. Bei näherer Betrachtung lassen sich viele kleinere und größere Unterschiede entdecken. So behält dieses Layout als erstes die Schreibweise der Titel von Artikeln und Konferenzbeiträgen aus der Datenbank bei, anstatt sie in Kleinschreibung umzuwandeln. (Auf Seite 840 wird erklärt, wie man BIBTEX-Stile verändern kann, damit sie sich so verhalten.) Da das jurabib-Paket in erster Linie für Rechtstexte gedacht war, liegt hier einer der Stile vor, der keine vorgegebenen Texte für die Fachzeitschriften aus Tabelle 13.3 auf Seite 800 enthält. Entsprechend ist der zweite Eintrag unvollständig. In diesem Falle gibt BIBTEX eine Warnung über den fehlenden Text aus. Man kann dann eine entsprechende Definition in der Datenbankdatei nachpflegen, oder je nach Vorliebe auch in einer separaten Datenbankdatei, die nur geladen wird, wenn man sie benötigt.
Goossens, Michel/Rahtz, Sebastian/Mittelbach, Frank: The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Reading, MA, USA: Addison-Wesley Longman, 1997, Tools and Techniques for Computer Typesetting, xxi + 554, ISBN 0–201–85469–4 Goossens, Michel et al.: Mehrdeutige Quellenverweise. 1997, Eingereicht bei Knuth, Donald E.: The TEXbook. Volume A, Computers and Typesetting. Reading, MA, USA: Addison-Wesley, 1986, ix + 483, ISBN 0–201–13447–0 Typesetting Concrete Mathematics. TUGboat, 10 April 1989, Nr. 1, 31–36, ISSN 0896–3207 Free Software Foundation: GNU Make, A Program for Directing Recompilation. 2000 Mittelbach, Frank/Rowley, Chris: The Pursuit of Quality: How can Automated Typesetting achieve the Highest Standards of Craft Typography? In Vanoirbeek/Coray: EP92, 261–273 Bsp. 13-5-7
Vanoirbeek, Christine/Coray, Giovanni, editors: EP92—Proceedings of Electronic Publishing, ’92. Cambridge: Cambridge University Press, 1992
827
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
13.5.2 custom-bib – BIBTEX-Stile leicht gemacht Bisher wurde besprochen, wie man das Layout eines Literaturverzeichnisses mithilfe unterschiedlicher Bibliographiestile beeinflussen kann. Wird für eine Zeitschrift oder einen Verlag, für den man schreibt, ein bestimmter BIBTEX-Stil empfohlen, so hat man alles, was man benötigt. Wahrscheinlicher ist jedoch, dass man eine ausführliche Richtlinie erhält, wie Literaturhinweise aussehen müssen, ohne Hinweis auf irgendeinen bestimmten BIBTEX-Stil – vermutlich kennt der Verlag nicht einmal das Programm. Eine Möglichkeit besteht natürlich darin, nach einem fertigen Stil zu suchen, der genau passt oder nur leicht angepasst werden muss (siehe Abschnitt 13.6.3). Angesichts der zahlreichen Varianten, die normalerweise für jedes setzerische Detail existieren, sind die Chancen, dass man einen geeigneten Stil findet, jedoch recht gering. Man betrachte nur einmal die folgenden neun gängigen Anforderungen an die Darstellung der Autorennamen: Anforderung
Beispiel
Ganzer Name, Nachname zuletzt
Donald Ervin Knuth/Michael Frederick Plass
Ganzer Name, Nachname zuerst
Knuth, Donald Ervin/Plass, Michael Frederick
Initialen und Nachname
D. E. Knuth/M. F. Plass
Nachname mit Initialen
Knuth, D. E./Plass, M. F.
Nachname mit Initialen ohne Punkte
Knuth D E/Plass M F
Nachname mit verketteten Initialen
Knuth DE/Plass MF
Nachname mit Initialen ohne Leerraum
Knuth D.E./Plass M.F.
Nur erster Autor umgestellt mit Initialen
Knuth, D. E./M. F. Plass
Nur erster Autor umgestellt mit ganzen Namen
Knuth, Donald Ervin/Michael Frederick Plass
Tabelle 13.5: Anforderungen an die Namensdarstellung
Nimmt man noch Vorgaben für das Trennzeichen hinzu (z.B. Komma, Semikolon, Schrägstrich), für die Schrift der Autorennamen (also Serifenschrift, fett, Kapitälchen, kursiv usw.) und vielleicht noch eine unterschiedliche Schrift für Nach- und Vornamen, so erhält man schon allein für die Angabe von Autoren in einem Literaturverzeichnis über 500 verschiedene Stile. Diese Explosion von Kombinationen lässt sich natürlich nicht durch vorgefertigte Stile abdecken. Angesichts dieser Problematik begann Patrick Daly, der Entwickler des natbib-Paketes, bereits 1993 mit der Arbeit an einem System, das anhand von Fragen, wie den zuvor gestellten (insgesamt über 70!), einen passenden BIBTEXStil in Form einer den Antworten entsprechenden .bst-Datei erzeugen kann. Das System arbeitet in zwei Schritten: Zunächst erfolgt die Sammelphase, in der interaktiv Fragen gestellt werden, und dann die Generierungsphase, in der anhand der erteilten Antworten ein BIBTEX-Stil zusammengestellt wird. Beide Phasen basieren ausschließlich auf LaTEX, so dass sie ohne Zusatzprogramme auf jeder Plattform ausgeführt werden können. Zum Sammeln der Antworten startet man unter LaTEX das Programm makebst.tex und beantwortet die gestellten Fragen. Die meisten Fragen erscheinen mit einer Auswahlliste verschiedener Antworten. Die voreingestellte
828
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen
Antwort ist mit einem * gekennzeichnet und wird einfach durch Drücken der Eingabetaste ("return#) ausgewählt. Die anderen Antwortmöglichkeiten werden durch Eingabe des Buchstabens, der in Klammern vor der jeweiligen Option steht, ausgewählt. Gibt man einen nicht angebotenen Buchstaben ein, so wird die voreingestellte Antwort übernommen. Initialisieren des Systems Es folgen die ersten Fragen, die eine Sonderrolle spielen, da mit ihrer Hilfe das System initialisiert wird. Es wird jeweils die empfohlene Antwort angezeigt.
Do you want a description of the usage? (NO) (Möchten Sie eine Bedienungsanleitung? (Nein))
Gibt man y ein, so erhält man eine Beschreibung des (zuvor bereits erläuterten) Verfahrens; ansonsten hat die Frage keine Auswirkung.
Enter the name of the MASTER file (default=merlin.mbs) (Geben Sie den Namen der MASTER-Datei ein (voreingestellt=merlin.mbs))
Die richtige Antwort ist hier die Eingabetaste ("return#). Die voreingestellte Datei merlin.mbs ist zurzeit die einzig verfügbare Masterdatei für die Erstellung der Stile. Dies kann sich natürlich noch ändern.
Name of the final OUTPUT .bst file? (default extension=bst) (Name der fertigen AUSGABE-.bst-Datei? (voreingestellte Erweiterung=bst))
Gefragt ist der Name der neuen BIBTEX-Stildatei ohne Erweiterung, wie z.B. ttct (für die Schriftenreihe Tools and Techniques for Computer Typesetting). Als Ergebnis der ersten Phase erhält man dann eine Datei namens ttct.dbj, aus der in der zweiten Phase die BIBTEX-Stildatei ttct.bst erzeugt wird.
Give a comment line to include in the style file. Something like for which journals it is applicable. (Geben Sie eine Kommentarzeile für die Stildatei ein. Zum Beispiel für welche Zeitschriften sie gedacht ist.)
Hier kann man einen beliebigen Text eingeben. Man beachte jedoch, dass die Eingabetaste den Kommentar beendet. Die Zeile wird in die Ergebnisdateien übertragen und zeigt, für welchen Zweck der jeweilige BIBTEX-Stil gedacht ist.
Do you want verbose comments? (NO) (Möchten Sie ausführliche Kommentare? (Nein))
Durch die Antwort y wird der Kontext weiterer Fragen in folgender Form angezeigt:
STYLE OF CITATIONS: («STIL DER QUELLENVERWEISE: . . . »STIL DER QUELLENVERWEISE:)
829
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
catalan dansk dutch esperant finnish french german
Katalanisch Dänisch Niederländisch Esperanto Finnisch Französisch Deutsch
italian norsk polski portuges slovene spanish
Italienisch Norwegisch Polnisch Portugiesisch Slowenisch Spanisch
Tabelle 13.6: In custom-bib unterstützte Sprachen (Sommer 2003)
Hier muss jeder selbst entscheiden, ob diese Darstellung eine Hilfe ist. Die Voreinstellung zeigt diese Zusatzinformationen nicht an.
Name of language definition file (default=merlin.mbs) (Name der Sprachdefinitionsdatei (voreingestellt=merlin.mbs))
Sprachunterstützung
Um einen BIBTEX-Stil für eine nicht englische Sprache zu erzeugen, kann man hier den Namen der Sprache eingeben (also z.B. german für Deutsch). In Tabelle 13.6 sind die zurzeit unterstützten Sprachen aufgeführt. Andernfalls drückt man einfach die Eingabetaste.
Include file(s) for extra journal names? (NO) (Datei(en) für besondere Namen von Fachzeitschriften einbinden? (Nein))
Mit y kann man vordefinierte Zeitschriftennamen für bestimmte Fachgebiete in den BIBTEX-Stil aufnehmen. In diesem Fall wird man als Nächstes aufgefordert anzugeben, in welchen Dateien die vordefinierten Namen enthalten sind (wobei wiederum geeignete Voreinstellungen angeboten werden). Damit ist die erste Gruppe von Fragen zur Initialisierung des Systems abgeschlossen. Als Nächstes folgen zahlreiche Fragen zum Layout und zu funktionellen Einzelheiten. Diese lassen sich in drei Kategorien einteilen: Zitierschema Die hier getroffene Wahl wirkt sich auf die weiteren Fragen aus. Zum Autor-Jahr-Schema werden z.B. andere Fragen gestellt als zum numerischen Schema. Erweiterungen Diese Fragen klären, ob zusätzliche BIBTEX-Felder unterstützt werden sollen, also ob z.B. ein url-Feld integriert wird. Typographische Einzelheiten Hier wählt man aus, wie die einzelnen Teile der Literatureinträge formatiert werden sollen. Einige der Wahlmöglichkeiten sind wiederum vom Zitierschema abhängig. Es ist zwar möglich, seine Auswahl in der zweiten Bearbeitungsphase noch einmal zu ändern (oder ganz von vorne zu beginnen). Am besten sollte man sich jedoch bereits zu Beginn des interaktiven Programms darüber im Klaren sein, welches Zitierschema und welche Erweiterungen man wünscht. Die typographischen Einzelheiten lassen sich dagegen auch im Nachhinein wesentlich leichter ändern, sollte dies nötig sein. Daher werden die zentralen Fragen hier etwas ausführlicher beleuchtet.
830
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen
Auswählen des Zitierschemas Das Zitierschema wird durch Beantwortung der folgenden Frage festgelegt:
STYLE OF CITATIONS: (*) Numerical as in standard LaTeX (a) Author-year with some non-standard interface (b) Alpha style, Jon90 or JWB90 for single or multiple authors (o) Alpha style, Jon90 even for multiple authors (f) Alpha style, Jones90 (full name of first author) (c) Cite key (special for listing contents of bib file) (STIL DER QUELLENVERWEISE: (*) Numerisch wie in Standard-LATEX (a) Autor-Jahr mit nicht standardgemäßer Schnittstelle (b) Alpha-Stil, Jon90 bzw. JWB90 bei einzelnen bzw. mehreren Autoren (o) Alpha-Stil, Jon90 selbst bei mehreren Autoren (f) Alpha-Stil, Jones90 (ganzer Name des ersten Autors) (c) Zitierschlüssel (speziell um die Inhalte der bib-Datei aufzulisten))
Die Auswahl „numerical“ ist voreingestellt. Um einen Stil zum Autor-JahrSchema zu erzeugen, wählt man a (und ignoriert den Hinweis auf die „nicht standardgemäße Schnittstelle“). Verweise im Alpha-Stil erhält man mit b, o oder f, je nach bevorzugter Labelform. Die Auswahl c ist nur für Stile interessant, mit deren Hilfe BIBTEX-Datenbanken dargestellt werden sollen; sie eignet sich also nicht zum Erzeugen von Literaturverzeichnissen. Im Falle der voreingestellten Antwort (also numerisches Zitierschema) lautet die nächste Frage:
HTML OUTPUT (if non author-year citations) (*) Normal LaTeX output (h) Hypertext output, in HTML code, in paragraphs (n) Hypertext list with sequence numbers (k) Hypertext with keys for viewing databases (HTML AUSGABE (sofern keine Autor-Jahr-Verweise) (*) Normale LATEX-Ausgabe (h) Hypertext-Ausgabe, im HTML-Code, in Absätzen (n) Hypertext-Liste mit laufender Nummer (k) Hypertext mit Schlüsseln um Datenbanken zu sichten)
Hier ist die Voreinstellung zu wählen. Alle anderen Möglichkeiten erzeugen BIBTEX-Stile, die HTML-Daten ausgeben (welche zunächst noch weiter bearbeitet werden müssen, bevor sie im Browser betrachtet werden können). Diese Funktionen befinden sich noch in der Erprobung. Bei der Wahl eines Autor-Jahr-Zitierschemas (also a) muss man als Nächstes entscheiden, auf welcher unterstützenden LaTEX-Schnittstelle dieses aufsetzen soll:
AUTHOR--YEAR SUPPORT SYSTEM (if author-year citations) (*) Natbib for use with natbib v5.3 or later (o) Older Natbib without full authors citations (l) Apalike for use with apalike.sty (h) Harvard system with harvard.sty (a) Astronomy system with astron.sty (c) Chicago system with chicago.sty
831
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
(n) Named system with named.sty (d) Author-date system with authordate1-4.sty (AUTOR-JAHR-UNTERSTÜTZUNG (bei Autor-Jahr-Verweisen) (*) Natbib mit natbib ab Version 5.3 (o) ältere Natbib-Versionen ohne ausführliche Autorenverweise (l) Apa-ähnlich mit apalike.sty (h) Harvard-Schema mit harvard.sty (a) Astronomy-Schema mit astron.sty (c) Chicago-Schema mit chicago.sty (n) System mit Namen mit named.sty (d) Autor-Jahr-Schema mit authordate1-4.sty)
Die voreingestellte Auswahl, natbib, ist normalerweise die Beste. Sie bietet alle in den Abschnitten 12.3.2 und 12.4.1 beschriebenen Möglichkeiten. Man sollte nicht die Option o wählen. Verfügt man bereits über Dokumente, die etwa Verweisbefehle aus dem harvard-Paket verwenden (siehe Beispiel 12-3-4 auf Seite 725), dann wäre die Option h am besten geeignet. Aus dem gleichen Grund können unter bestimmten Umständen die anderen Möglichkeiten die richtige Wahl sein. Um möglichst portierbare Dokumente zu erhalten, ist jedoch immer natbib zu bevorzugen. Man sollte auch beachten, dass einige der anderen in der Auswahl genannten Pakete in gängigen LaTEX-Distributionen nicht mehr enthalten sind. Festlegen der unterstützten Erweiterungen Abgesehen von den Publikationstypen (Tabelle 13.1 auf Seite 791) und Feldern (Tabelle 13.2) des BIBTEX-Standards kann man makebst.tex auch anweisen, zusätzliche Felder als optionale Datenbankfelder zu unterstützen. Diese werden dann ebenfalls verwendet, sofern sie in der Datenbank vorhanden sind. Einige dieser Erweiterungen sind in den Voreinstellungen deaktiviert, obwohl es fast immer sinnvoll wäre, sie in die BIBTEX-Stildatei zu integrieren.
LANGUAGE FIELD (*) No language field (l) Add language field to switch hyphenation patterns temporarily (SPRACHENFELD (*) Kein Sprachenfeld (l) Sprachenfeld language hinzufügen, um die Silbentrennung zeitweise umzuschalten))
Die Antwort l ist eine große Hilfe bei der korrekten Darstellung von Titeln in anderen Sprachen. Beispiel 12-5-6 auf Seite 744 zeigt die möglichen Probleme und erläutert, wie sie sich mit einem vorhandenen language-Feld lösen lassen (siehe Beispiel 12-5-36 auf Seite 760). Entsprechend empfiehlt es sich hier, von den Voreinstellungen abzuweichen.
ANNOTATIONS: (*) No annotations will be recognized (a) Annotations in annote field or in .tex file of citekey name (KOMMENTARE: (*) Kommentare werden nicht erkannt (a) Kommentare in annote -Feldern oder einer .tex-Datei mit dem Namen des Zitierschlüssels (citekey))
832
13.5 Formatieren von Bibliographien mit BIBTEX-Stilen
Wählt man a, so unterstützt die zu erzeugende .bst-Datei ein annote-Feld sowie Kommentare, die in Dateien mit dem Namen des "citekey#s und der Erweiterung .tex gespeichert sind. Anders als im jurabib-Paket, das ebenfalls über eine solche Funktion verfügt, lässt sich diese Möglichkeit jedoch nicht durch eine Paketoption ein- oder ausschalten. Da man diese Funktion sicherlich je nach Dokument aktivieren oder deaktivieren möchte, kann es besser sein, zwei separate BIBTEX-Stile zu erzeugen, die sich lediglich in dieser Hinsicht voneinander unterscheiden. Das nicht zum Standard gehörige Feld eid (elektronische Kennung) wird automatisch von allen erzeugten Stilen unterstützt. Die Felder doi, isbn und issn sind in den Voreinstellungen ausgewählt, lassen sich jedoch abwählen. Insbesondere zur Unterstützung des REVTEX-Paketes der American Physical Society lassen sich noch eine Reihe weiterer Felder hinzufügen. Und schließlich kann man noch einstellen, ob URLs unterstützt werden, indem man eine andere als die folgende voreingestellte Option wählt.
URL (*) (u) (n) (l)
ADDRESS: (without REVTeX fields) No URL for electronic (Internet) documents Include URL as regular item block URL as note URL on new line after rest of reference
(URL-ADRESSE: (ohne REVTeX-Felder) (*) Keine URL für elektronische (Internet-) Dokumente (u) URL als regulären Datenblock einschließen (n) URL als Anmerkung (l) URL in neuer Zeile nach dem übrigen Eintrag)
Die Autoren dieses Buches empfehlen URLs zu unterstützen, da Verweise auf elektronische Dokumente immer selbstverständlicher werden. In der Bibliographie wird die URL durch die Tags \urlprefix\url{feldwert } gekennzeichnet, wobei für beide Befehle voreingestellte Definitionen existieren. Durch Laden des url-Paketes lässt sich ein besserer Zeilenumbruch erzielen. Eine der letzten Fragen bietet die folgende Auswahl:
COMPATIBILITY WITH PLAIN TEX: (*) Use LaTeX commands which may not work with Plain TeX (t) Use only Plain TeX commands for fonts and testing (Kompatibilität zu PLAIN-TEX: (*) Auch Plain-TeX fremde LaTeX-Befehle verwenden (t) Für Schriften und zum Testen nur Plain-TeX-Befehle verwenden)
Hier sollte man die Voreinstellung unbedingt beibehalten! LaTEX 2ε gibt es nun seit gut zehn Jahren und NFSS sollte mittlerweile den Weg in jedes Wohnzimmer gefunden haben. Davon abgesehen gehören die Plain-TEX-Befehle (wie \rm , \bf usw.) offiziell schon gar nicht mehr zu LaTEX. Einige Dokumentenklassen definieren sie noch (aus Gründen der Kompatibilität zu LaTEX 2.09) – andere jedoch nicht. Wählt man also die veraltete Syntax, dann funktioniert der BIBTEX-Stil möglicherweise unter bestimmten Umständen nicht einwandfrei.1 1 Achtung: In älteren Versionen lautete die Frage „NEW FONT SELECTION SCHEME“ und die veralteten Befehle waren voreingestellt. Hier ist also Vorsicht geboten.
833
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Man beachte, dass Fragen zu den Erweiterungen mit solchen zu typographischen Einzelheiten gemischt auftreten und nicht notwendigerweise in der hier vorgestellten Reihenfolge erscheinen. Festlegen der typographischen Einzelheiten Die verbleibenden Fragen (derer es noch viele gibt) betreffen typographische Einzelheiten, wie etwa die Formatierung von Autorennamen, Darstellung von Zeitschriftendaten und viele weitere Themen. Als Beispiel sei hier der Fragenblock gezeigt, der sich mit der Formatierung von Artikelüberschriften befasst:
TITLE OF ARTICLE: (*) Title plain with no special font (i) Title italic (\em) (q) Title and punctuation in single quotes (‘Title,’ ..) (d) Title and punctuation in double quotes (‘"Title,’" ..) (g) Title and punctuation in guillemets ( ..) (x) Title in single quotes (‘Title’, ..) (y) Title in double quotes (‘"Title’", ..) (z) Title in guillemets (, ..) (ARTIKELÜBERSCHRIFT: (*) Schlichte Überschrift ohne besondere Schrift (i) Überschrift kursiv (q) Überschrift und Satzzeichen in Anführungsstrichen (‘Titel,’ . . . ) (d) Überschrift und Satzzeichen in doppelten Anführungsstrichen (“Titel,” . . . ) (g) Überschrift und Satzzeichen in Guillemets («Titel,» . . . ) (x) Überschrift in Anführungsstrichen (‘Titel’, . . . ) (y) Überschrift in doppelten Anführungsstrichen (“Titel”, . . . ) (z) Überschrift in Guillemets («Titel», . . . ))
Eine falsche Wahl an dieser Stelle ist kein Grund zur Verzweiflung. Dieser Fehler lässt sich wie im Folgenden beschrieben in der zweiten Verarbeitungsphase beheben.
Erzeugen des BIBTEX-Stils aus den gegebenen Antworten Hat man makebst.tex unter LaTEX ausgeführt und all diese Fragen beantwortet, so erhält man als Ergebnis eine neue Datei mit der Erweiterung .dbj. Diese enthält alle gewählten Optionen in einer besonderen Form, die von docstrip verarbeitet werden kann, mit dessen Hilfe dann der fertige BIBTEXStil erzeugt wird. (Das Programm docstrip ist in Abschnitt 14.2 beschrieben.) Technisch ausgedrückt enthält eine Masterdatei für BIBTEX-Stile (voreingestellt ist merlin.mbs) verschiedene Code-Abschnitte, die nun in Abhängigkeit von den docstrip-Optionen ausgewählt werden. Durch die zuvor besprochene interaktive Auswahl der Menü-Einträge, werden einige dieser Code-Abschnitte aktiviert und ermöglichen so die erforderliche Anpassung. Hat man bei der Frage nach der neuen .bst-Datei ttct eingegeben, so verfügt man nun über eine Datei namens ttct.dbj. Um daraus den fertigen BIBTEX-Stil zu erzeugen, muss man damit jetzt nur noch den folgenden Befehl eingeben:
latex ttct.dbj
834
13.6 Die BIBTEX-Programmiersprache
Der Inhalt der in der ersten Phase erzeugten .dbj-Dateien ist gut dokumentiert und so dargestellt, das er sich auf recht einfache Weise noch weiter anpassen lässt. Angenommen man hat bei der Frage nach den Artikelüberschriften auf der vorherigen Seite die Antwort y ausgewählt (also Anführungszeichen um die Überschrift), man benötigt aber eigentlich die Option d (Anführungszeichen um Überschrift und Satzzeichen). Dann muss man nur die .dbj-Datei mit einem Texteditor öffnen und nach dem Abschnitt suchen, der die Artikelüberschriften einstellt:
%-------------------%TITLE OF ARTICLE: % %: (def) Title plain % tit-it,%: Title italic % tit-qq,qt-s,%: Title and punctuation in single quotes % tit-qq,%: Title and punctuation in double quotes % tit-qq,qt-g,%: Title and punctuation in guillemets % tit-qq,qt-s,qx,%: Title in single quotes tit-qq,qx,%: Title in double quotes % tit-qq,qt-g,qx,%: Title in guillemets %-------------------Um das Verhalten zu ändern, muss man lediglich das Kommentarzeichen vor der gewünschten Zeile entfernen und vor der zurzeit gewählten Option ein Kommentarzeichen einfügen:
%-------------------%TITLE OF ARTICLE: % %: (def) Title plain % tit-it,%: Title italic % tit-qq,qt-s,%: Title and punctuation in single quotes tit-qq,%: Title and punctuation in double quotes % tit-qq,qt-g,%: Title and punctuation in guillemets % tit-qq,qt-s,qx,%: Title in single quotes % tit-qq,qx,%: Title in double quotes % tit-qq,qt-g,qx,%: Title in guillemets %-------------------Dann verarbeitet man die Datei noch einmal mit LaTEX, um den aktualisierten BIBTEX-Stil zu erhalten.
13.6 Die BIBTEX-Programmiersprache Dieser Abschnitt bietet eine komprimierte Einführung in die Programmiersprache der BIBTEX-Stildateien. Die Informationen sollten ausreichen, um kleine Änderungen an bestehenden Stildateien vorzunehmen. Weitergehende Informationen sind in dem von Oren Patashnik geschriebenen Artikel „Designing BIBTEX Styles“ [138] nachzulesen.
835
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Die BIBTEX-Stile verwenden eine Postfix-Stapelverarbeitungssprache (wie PostScript), um BIBTEX mitzuteilen, wie die Einträge für das Literaturverzeichnis zu formatieren sind. Die Sprache verfügt über zehn Befehle zur Verarbeitung ihrer Objekte: Konstanten, Variablen, Funktionen, den Stapel und die Eintragsliste. Diese Befehle sind in Tabelle 13.7 auf Seite 838 beschrieben. BIBTEX kennt zwei Arten von Funktionen: systemimmanente Funktionen, die von BIBTEX selbst bereitgestellt werden (siehe Tabelle 13.8 auf Seite 839); und Benutzerfunktionen, die entweder mithilfe des MACRO- oder des FUNCTION-Befehls definiert werden. Zwischen zwei Anführungszeichen, die konstante Zeichenfolgen (so genannte Stringkonstanten) begrenzen, kann man alle druckbaren ASCIIZeichen verwenden. Obwohl BIBTEX ansonsten Groß- und Kleinschreibung ignoriert, beachtet es die Schreibweise innerhalb eines Strings. Auch Leerzeichen in Stringkonstanten werden berücksichtigt und die Konstanten dürfen nicht umbrochen werden. Variablen- und Funktionsnamen dürfen nicht mit einer Ziffer beginnen und keines der zehn unzulässigen Zeichen von Seite 798 enthalten. BIBTEX ignoriert die Groß- und Kleinschreibung in Variablen-, Funktions- und Makronamen. Konstanten und Variablen können als Integer (ganze Zahlen) oder String (Zeichenfolge) vorliegen; die booleschen Werte wahr und falsch werden durch die Integerwerte 1 bzw. 0 dargestellt. Es gibt drei Arten von Variablen: Globale Variablen Bei den globalen Variablen handelt es sich entweder um Integer- oder Stringwerte, die durch einen INTEGERS- bzw. STRINGSBefehl deklariert werden. Eintragsvariablen Hier handelt es sich um Integer- oder Stringvariablen, die durch den ENTRY-Befehl deklariert werden. Diese Variablen speichern einen Wert je Quelleneintrag, der aus den BIBTEX-Datenbanken eingelesen wird. Felder Diese Variablen sind nur lesbare Stringwerte, in denen Informationen aus der Datenbankdatei gespeichert werden. Ihre Werte werden durch den Befehl READ gesetzt. Genau wie bei den Eintragsvariablen existiert auch hier ein Wert je Eintrag.
13.6.1 BIBTEX-Befehle und systemimmanente Funktionen Die zehn BIBTEX-Befehle sind in Tabelle 13.7 auf Seite 838 kurz beschrieben. Die Namen erscheinen zwar in Großbuchstaben, BIBTEX ignoriert aber die Großoder Kleinschreibung. Es empfiehlt sich (ist aber nicht zwingend), zwischen Befehlen mindestens eine Leerzeile, innerhalb eines Befehls aber keine Leerzeile zu lassen. Durch diese Konvention kann BIBTEX syntaktisch falsche Einträge leichter erkennen und überspringen. Tabelle 13.8 auf Seite 839 gibt einen kurzen Überblick über die 37 systemimmanenten Funktionen in BIBTEX (nähere Einzelheiten siehe [138]). Jede systemimmanente Funktion, in deren Name ein Buchstabe vorkommt, endet mit einem $-Zeichen.
836
13.6 Die BIBTEX-Programmiersprache
13.6.2 Der Dokumentationsstil btxbst.doc Oren Patashniks Standard-BIBTEX-Stildateien abbrv, alpha, plain und unsrt basieren auf einer generischen Datei namens btxbst.doc, die sehr gut dokumentiert ist, und die einen detaillierten Einblick in die Arbeitsweise der BIBTEX-Stildateien gibt. Bei den Standardstilen gibt es zwei grundlegende Arten der Formatierung von Labels: alphabetisch, wie [Lam84], und numerisch, wie [34]. Literaturhinweise lassen sich auf drei Arten anordnen: Sortierte, alphabetische Labels Alphabetisch sortiert, zunächst nach Zitierlabel, dann nach Autor(en) (oder dem entsprechenden Ersatzfeld), dann nach Erscheinungsjahr und Titel. Sortierte, numerische Labels Alphabetisch sortiert, zunächst nach Autor(en) (oder dem entsprechenden Ersatzfeld), dann nach Erscheinungsjahr und Titel. Unsortiert In der Reihenfolge angeordnet, in der die Quellen im Text zitiert werden. Der grundlegende Ablauf in einer Stildatei wird durch die folgenden Kommandozeilen gesteuert, die sich am Ende der Datei btxbst.doc befinden:
EXECUTE EXECUTE ITERATE EXECUTE
{begin.bib} {init.state.consts} {call.type$} {end.bib}
% % % %
Präambel und \begin{thebibliography} erzeugen Initialisieren der Statuskonstanten Durchlaufen der Einträge und Erstellen der Ausgabe Schreiben des \end{thebibliography}-Befehls
Diese Befehle werden in den Tabellen 13.7 und 13.8 erläutert. Der Programmcode einer Stildatei beginnt mit der Deklaration der verfügbaren Felder durch die ENTRY-Deklaration und mit den Stringvariablen, die für die Erstellung des gedruckten Labels verwendet werden sollen. Danach folgen einige Funktionen für die Formatierung der Grundbestandteile eines Eintrags. Es gibt Funktionen für jedes der Basisfelder. Die Funktion format.names unterteilt Namen in ihre „First von Last, Junior“-Teile, trennt sie durch Kommas und setzt ein „and“ vor den letzten Namen (bzw. beendet die Aufzählung mit „et al.“, wenn bei mehreren Autoren als Letztes "others" genannt ist). Die Funktion format.authors verarbeitet Autorendaten und format.editors bearbeitet Herausgeberdaten (sie hängt den passenden Titel an: „, editor“ oder „, editors“). Der nächste Teil der Datei enthält alle die Funktionen, welche die verschiedenen Publikationstypen definieren, die in einer .bib-Datei akzeptiert werden, also Funktionen wie article und book. Diese Funktionen erzeugen die eigentliche Ausgabe, die für den jeweiligen Eintrag in die .bbl-Datei übernommen wird. Sie müssen dem READ-Befehl vorangehen. Wer Stile entwickelt, sollte außerdem die Funktion default.type für unbekannte Publikationstypen vorsehen. Jede Eintragsfunktion beginnt mit dem Aufruf von output.bibitem. Dadurch werden der \bibitem-Befehl und seine Argumente in die .bbl-Datei geschrieben.
837
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
ENTRY {feld-liste} {integer-variablen-liste} {string-variablen-liste} Deklariert die Feld- und Eintragsvariablen; BIBTEX deklariert automatisch ein zusätzliches Feld crossref für Querverweise, sowie eine zusätzliche String-Eintragsvariable sort.key$, die vom SORTBefehl verwendet wird. Je Stildatei darf nur ein ENTRY-Befehl vorhanden sein. Beispielsweise enthalten die Stile alpha und plain jeweils folgende Angaben:
ENTRY ENTRY
{ address author booktitle ... } {} { label extra.label sort.label } { address author booktitle ... } {} { label }
EXECUTE {funktionsname} Führt eine einzelne Funktion aus.
EXECUTE {begin.bib} FUNCTION {funktionsname} {definition} Definiert eine neue Funktion; diese lässt sich nicht außerhalb der Stildatei verändern.
FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } MACRO {makroname} {definition} Definiert ein String-Makro; dieses lässt sich außerhalb der Stildatei verändern.
MACRO {feb} {"February"} INTEGERS {globale-integer-variablen-liste} Deklariert globale Integervariablen.
INTEGERS { longest.label.width last.extra.num } STRINGS {globale-string-variablen-liste} Deklariert globale Stringvariablen.
STRINGS { longest.label last.sort.label next.extra } ITERATE {funktionsname} Führt eine einzelne Funktion einmal je Listeneintrag in der aktuellen Reihenfolge der Liste aus.
ITERATE {longest.label.pass} REVERSE {funktionsname} Führt eine einzelne Funktion einmal je Listeneintrag in der umgekehrten Reihenfolge der Liste aus.
REVERSE {reverse.pass} READ Extrahiert für jeden Listeneintrag die Feldwerte aus der Datenbankdatei; je Stildatei darf nur ein READBefehl vorhanden sein. Die ENTRY-und MACRO-Befehle müssen dem READ-Befehl vorausgehen.
SORT Sortiert die Liste der Einträge anhand der Werte der String-Eintragsvariablen sort.key$.
Tabelle 13.7: Befehle der BIBTEX-Programmiersprache
838
13.6 Die BIBTEX-Programmiersprache I1 I2 >
(I)
I1 I2 =
(I)
I1 I2 +
(I1 +I2 )
Zwei Integer addieren
S 1 S2 ∗ L V :=
(S1 S2 )
Zwei Strings verketten
I1 I2 <
(I)
S 1 S2 =
(I)
I1 I2 −
(I1 -I2 )
S add.period$
S "t" S "l" S "u" S
L L
S 1 I S2
I F1 F2 I I
L S
L
(S.)
call.type$ change.case$ (S) change.case$ (S) change.case$ (S) chr.to.int$ (I) cite$ (zitier-string) duplicate$ (L L) empty$ (I) format.name$ (S) if$ int.to.chr$ (S) int.to.str$ (S) missing$ (I) newline$ num.names$ (I) pop$ preamble$ (S)
S purify$
quote$ skip$ stack$ S I1 I2 substring$ L1 L2 swap$ (L2 S text.length$ S I text.prefix$ L top$ type$
S width$ S write$
1 (wenn I1 0, sonst F2 ausführen
Integer in Zeichen mittels ASCII-Zeichentabelle übersetzen String-Entsprechung des Integers zum Stapel hinzufügen 1 (wenn L fehlendes Feld ist) oder 0 (ansonsten) Neue Zeile in der .bbl-Datei beginnen
Anzahl der Namen in S
Oberstes Stapelelement entfernen
Verkettung aller @preamble-Strings, die aus Datenbankdateien ausgelesen wurden, dem Stapel hinzufügen
(S)
Nicht alphanumerische Zeichen entfernen
(S)
Buchstabenstring in Anführungszeichen dem Stapel hinzufügen Nichts tun Gesamten Stapel entfernen und ausgeben
(S) L1 )
Teilstring von S, der bei I1 beginnt und eine Länge von I2 hat Literale tauschen
(I)
Anzahl der „Text“-Zeichen
(S)
Erste I Zeichen von S
(S)
Publikationstyp des aktuellen Eintrags zum Stapel hinzufügen (z.B. book oder "" falls unbekannt)
Oberes Element des Stapels entfernen und ausgeben
Oberes (String-) Literal des Stapels entfernen und mit einer Warnung ausgeben
S warning$
F1 F2 while$
1 (wenn I1 >I2 ) oder 0 (ansonsten)
(I)
F2 ausführen, solange für den Resultwert I der Funktion F1 gilt I >0
Breite von S (in TEX-Einheiten) dem Stapel hinzufügen S in Ausgabepuffer schreiben
Tabelle 13.8: Systemimmanente Funktionen der BIBTEX-Programmiersprache Vor den systemimmanenten Funktionen steht jeweils die Variable, die sie vom Stapel entfernen. Sofern sie ein Ergebnis auf dem Stapel hinterlassen, ist dieses in Klammern angezeigt. Ein „Literal“ L ist ein Element des Stapels. Es kann ein Integer I, ein String S, eine Variable V , eine Funktion F oder ein besonderer Wert sein, der ein fehlendes Feld anzeigt. Wenn das entfernte Literal den falschen Datentyp hat, meldet BIBTE X einen Fehler und fügt dem Stapel den Integer 0 oder einen „null“-String hinzu, je nachdem, welchen Datentyp die Funktion ausgibt.
839
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Danach werden die verschiedenen Felder formatiert und von der Funktion
output oder output.check ausgegeben, die auch die Ausgabe von Trennzeichen (Kommas, Punkten, \newblocks) nach Bedarf steuert. Schließlich wird fin.entry aufgerufen, um den Satzendepunkt hinzuzufügen und damit den Eintrag zu beenden. Der nächste Abschnitt der btxbst.doc-Datei enthält Definitionen für die Monatsnamen und für bestimmte gängige Fachzeitschriften. Je nach Stil können vollständige oder abgekürzte Namen verwendet werden. Auf diese Definitionen folgt der READ-Befehl, welcher die Einträge aus der .bib-Datei ausliest. Danach werden die Labels für die bibliographischen Einträge zusammengesetzt. Welche Felder für den ersten Teil eines Labels verwendet werden, hängt dabei vom jeweiligen Publikationstyp ab. Anschließend werden die Labels für die Sortierung vorbereitet. Bei der Sortierung wird der Sortierschlüssel für jeden Eintrag von der presortFunktion berechnet. Bei alphabetischen Labels müssen eventuell zusätzliche Buchstaben (a, b usw.) angehängt werden, um eine einheitliche Sortierreihenfolge zu erzielen. Dazu sind zwei weitere Sortierdurchläufe erforderlich. Bei numerischen Labels kann man entweder die sortierte oder die ursprüngliche Reihenfolge verwenden. In beiden Fällen muss man für die thebibliographyUmgebung das längste Label im Auge behalten. Schließlich wird die .bblDatei geschrieben, indem die Einträge durchlaufen werden und für jeden einzelnen die Funktion call.type$ ausgeführt wird.
13.6.3 Kleine Änderungen an Stildateien Häufig ist es notwendig, kleinere Änderungen an einer bestehenden Stildatei vorzunehmen, um den Anforderungen eines bestimmten Verlages zu genügen. Zunächst wird gezeigt, wie man eine (manchmal unerwünschte) Standardfunktion von BIBTEX-Stilen ausschalten kann: das Umwandeln von Titeln in Kleinbuchstaben. Meistens möchte man die Titel wohl in der Form beibehalten, wie sie eingegeben wurden. Zu diesem Zweck lässt sich eine Variante des Stils unsrt erstellen. Im Beispiel erhält diese Variante den Namen myunsrt, da sie sich vom ursprünglichen Stil unterscheidet. Für andere Stile kann ein ähnliches Verfahren verwendet werden. Ein Blick in die Tabelle 13.8 auf der vorherigen Seite lässt schon annehmen, dass die Funktion change.case$ für die Änderung der Groß- oder Kleinschreibung verantwortlich ist. Mithilfe eines Editors findet man bei der Suche nach dem genannten String schnell heraus, dass die Funktion format.title verändert werden muss. Diese Funktion sieht vor und nach der Anpassung folgendermaßen aus:
FUNCTION {format.title} { title empty$ { "" } { title "t" change.case$ } if$ } Vor der Anpassung
840
FUNCTION {format.title} { title empty$ { "" } { title } % { " (eds)" * } { " (ed.)" * } if$ } if$ } Vor der Anpassung
842
FUNCTION {format.editors} { editor empty$ { "" } { editor format.names ", redactie" * } if$ }
Nach der Anpassung
13.6 Die BIBTEX-Programmiersprache
Die nächsten Beispiele verdeutlichen, dass man Einträge (in Form und Übersetzung) recht genau an eine bestimmte Sprache anpassen kann. In diesem Falle geht es um das Format des Herausgeberfeldes (edition). In diesem Beispiel werden bis zur dritten Auflage für die niederländische Sprache spezifische Begriffe verwendet. Ab der vierten Auflage wird die generische Zeichenfolge ie benutzt, wobei i die Nummer der Auflage wiedergibt. Das Beispiel zeigt auch die Verschachtelung der if$-Anweisungen und die Verwendung des Befehls change.case$, mit dem die Groß-/Kleinschreibung geändert wird.
FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { edition "l" change.case$ " edition" * } { edition "t" change.case$ " edition" * } if$ } if$ }
Vor der Anpassung
FUNCTION {format.edition} { edition empty$ { "" } { edition "1" = { "Eerste" } { edition "2" = { "Tweede" } { edition "3" = { "Derde" } { edition "\textsuperscript{e} " * } if$ } if$ } if$ output.state mid.sentence = { "l" change.case$ " druk" * } { "t" change.case$ " druk" * } if$ } if$ } Nach der Anpassung
Natürlich sollte man auch die Texte für die Monatsnamen ändern. Zudem kann man noch einige weitere sprachspezifische Strings definieren.
MACRO MACRO ... MACRO MACRO
{jan} {"januari"} {mar} {"maart"}
MACRO {feb} {"februari"} MACRO {apr} {"april"}
{sep} {"september"} {nov} {"november"}
MACRO {oct} {"oktober"} MACRO {dec} {"december"}
Des Weiteren muss die Sortierroutine für die Namen, also die Funktion sort.format.names, die sprachspezifischen Regeln kennen, nach denen die Namen in der passenden Reihenfolge ausgegeben werden.
843
13
ERZEUGEN VON LITERATURVERZEICHNISSEN
Dabei ist auch zu berücksichtigen, dass die meisten Sprachen Artikel oder andere kurze Wörter enthalten, die bei der Sortierung von Titeln ignoriert werden sollten.
FUNCTION {sort.format.title} { ’t := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ } Vor der Anpassung
FUNCTION {sort.format.title} { ’t := "De " #3 "Een " #4 t chop.word chop.word sortify #1 global.max$ substring$ } Nach der Anpassung
Hier kürzt die Funktion chop.word den obersten String auf dem Stapel um das angegebene Wort – in diesem Falle den bestimmten Artikel (De) und den unbestimmten (Een).
844
14
K A P I T E L
Dokumentieren eigener LATEX-Pakete 14.1 14.2 14.3 14.4
doc – Dokumentieren von Programmcode . . . docstrip.tex – Lauffähigen Code erzeugen . . ltxdoc – Eine einfache Dokumentationsklasse Werkzeuge für die Versionsverwaltung . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. 845 . 857 . 867 . 869
In diesem Kapitel wird das doc-System beschrieben, ein Verfahren zur Dokumentation von LaTEX-Makros und -Umgebungen. Ein Großteil des verfügbaren LaTEX-Codes ist mithilfe seiner Konventionen und unterstützenden Werkzeuge dokumentiert. Dabei ist das Grundprinzip, den LaTEX-Programmcode zusammen mit Kommentaren und genereller Dokumentation in einer Datei zu speichern. Aus dieser werden dann die Dokumentation oder die ausführbaren Paketdateien mithilfe eines Standardverfahrens extrahiert. Dieses Kapitel geht ausführlich auf die Struktur ein, die derartige Dateien haben sollten. Es erklärt, wie man zusammen mit dem docstrip-Programm Prozeduren zur automatischen Installation erstellt, mit denen man LaTEXPakete verteilt und die zugehörige Dokumentation generiert. Außerdem zeigt dieses Kapitel, wie man von Dritten erzeugten Programmcode leichter versteht, diesen einfach installiert und die Dokumentation hierfür erstellt (nicht zwingenderweise in dieser Reihenfolge). Zum Schluss dieses Kapitels wird kurz darauf eingegangen, wie Versionsverwaltung funktioniert und wie RCS/CVS-Daten mit LaTEX extrahiert werden können. Maßnahmen zur Versionsverwaltung können sich bei größeren Dokumentationsprojekten als nützlich erweisen.
14.1 doc – Dokumentieren von Programmcode Das Konzept des „literate programming“ (die Idee, Software integriert mit ihrer Dokumentation zu entwerfen) wurde von Donald Knuth geprägt, als er für die Entwicklung des TEX-Programms das WEB-System konzipierte, das Pascal-ähnlichen Metaquellcode und Dokumentation kombiniert. Dank der
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
integrierten Dokumentation war es relativ einfach, TEX und seine Begleitprogramme praktisch auf jedes Computersystem in der Welt zu portieren. Nach und nach begannen auch die Autoren von LaTEX-Paketen, die Bedeutung der Dokumentierung ihres LaTEX-Programmcodes zu erkennen. Viele verteilen ihre LaTEX-Makros heute, indem sie das doc-Paket (von Frank Mittelbach) und das zugehörige docstrip-Programm (das ursprünglich von Frank Mittelbach stammt und später durch Beiträge von Johannes Braams, Denys Duchier, Marcin Woli´ nski und Mark Wooding erweitert wurde) verwenden. An dieser Stelle sollte erwähnt werden, dass es eine experimentelle Neuimplementierung mit zusätzlichen Funktionen und einer besseren und direkteren Benutzerschnittstelle gibt, die von Lars Hellström geschrieben wurde. Sie wird derzeit unter dem Namen xdoc2 verteilt, was darauf hinweist, dass es sich um eine eingefrorene (und damit verwendbare) Momentaufnahme der Entwicklungsarbeit handelt; die Endversion wird xdoc heißen. Beide Systeme ermöglichen es, den LaTEX-Programmcode und die Dokumentation in ein und derselben TEX-Quelldatei abzuspeichern. Der offensichtliche Vorteil dieses Verfahrens besteht darin, dass komplexe TEXAnweisungen mithilfe der Kommentare in der Datei leichter zu verstehen sind. Zusätzlich sind Aktualisierungen direkter durchzuführen, weil nur eine einzige Quelldatei geändert werden muss. Das doc-Paket bietet eine Reihe von Befehlen und errichtet einige Konventionen, die speziell vorbereitete Quelldateien zulassen, die sowohl Code als auch dessen Dokumentation enthalten. Um eine Dokumentation zu erstellen, benötigt man einen Treiber (gegebenenfalls in einer externen Datei, s.u.), der das doc-Paket lädt und dann die Quelldatei interpretiert. Um eine lauffähige Version des Codes zu erzeugen, muss zunächst das Quellpaket mit docstrip verarbeitet werden (siehe Abschnitt 14.2). Dieser Schritt wird gewöhnlich implizit durchgeführt, indem eine .ins-Datei bereitgestellt wird, die mit LaTEX bearbeitet wird. In seiner einfachsten Form ist der Treiber für die Dokumentation eine externe Datei. Heute ist der Treiber jedoch üblicherweise Teil der Quelldatei, so dass es zum Erzeugen der Dokumentation ausreicht, die Quelldatei mit LaTEX zu bearbeiten. Die Möglichkeiten werden ausführlich in Abschnitt 14.1.4 besprochen. Die wichtigsten Befehle und Konzepte werden in den nächsten Abschnitten erörtert. Tabelle 14.1 auf Seite 853 gibt einen Überblick über alle docAnwenderbefehle. Weitere Einzelheiten über diese Befehle sind in der dokumentierten Quelldatei doc.dtx des doc-Paketes zu finden, die auch als (wenn auch etwas veraltetes) gutes Beispiel für das doc-System dienen kann. Leser können zusätzlich auf das Tutorial „How to Package Your LaTEX Package“ von Scott Pakin zurückgreifen, das verschiedene Aspekte des doc-Paketes und des docstrip-Programms beschreibt. Dieses Tutorial ist auf CTAN unter http://www.ctan.org/tex-archive/info/dtxtut verfügbar.
14.1.1 Allgemeine Konventionen für Quelldateien Eine LaTEX-Datei, die mit dem doc-System verwendet werden soll, besteht typischerweise aus mehreren Dokumentationsteilen kombiniert mit Definitionsteilen. Innerhalb der Dokumentationsteile beginnt jede Zeile in der ersten Spalte
846
14.1 doc – Dokumentieren von Programmcode
mit einem Prozentzeichen (%). Die Zeile kann beliebige TEX- oder LaTEX-Befehle enthalten, wobei das %-Zeichen hier jedoch nicht als Kommentarzeichen verwendet werden kann. Anwenderkommentare können stattdessen durch ein vorangestelltes ^^A eingegeben werden. Längere Textpassagen können ebenfalls in Kommentare umgewandelt werden, indem sie mit %!\iffalse . . . %!\fi begrenzt werden. Alle anderen Abschnitte der Datei zählen zum Definitionsteil. Er enthält den zugehörigen Code, der im Dokumentationsteil beschrieben wird. Je nachdem, wie die Programmcode-Teile strukturiert sind, kann man solch eine Datei direkt mit LaTEX verwenden; dies wird heutzutage jedoch nur selten gemacht. Stattdessen wird docstrip typischerweise verwendet, um die ausführbaren Dateien zu erzeugen. Bei ersterem Ansatz durchläuft LaTEX die Dokumentationsteile sehr schnell. Dabei fügt es die Makrodefinitionen zusammen, auch wenn diese über mehrere Definitionsteile verteilt sind. Wenn eine gedruckte Dokumentation der Makros erstellt werden soll, müssen die Definitionsteile wortwörtlich, d.h. unverändert, gesetzt werden. Dazu müssen diese Teile in macrocode-Umgebungen eingebettet werden.
%!!!!\begin{macrocode} !Code Zeilen"
%!!!!\end{macrocode} Zu beachten ist dabei, dass zwischen dem %-Zeichen und \end{macrocode} genau vier Leerzeichen eingegeben werden müssen. Der Grund hierfür ist, dass LaTEX bei der Bearbeitung der macrocode-Umgebung nicht nach dem \end-Befehl mit dem Argument macrocode, sondern nach dieser speziellen Zeichenkette sucht. Innerhalb eines Definitionsteils sind alle TEX-Befehle erlaubt. Auch das Prozentzeichen kann verwendet werden, um unerwünschte Leerzeichen am Zeilenende zu unterdrücken. Anstelle der macrocode-Umgebung kann man auch macrocode* verwenden. Diese Umgebung erzielt das gleiche Resultat, mit der Ausnahme, dass Leerzeichen in der gedruckten Dokumentation als !-Zeichen erscheinen.
14.1.2 Beschreibung neuer Makros und Umgebungen Die meisten Pakete enthalten Befehle und Umgebungen, die von Anwendern in ihren Dokumenten verwendet werden können. Das doc-Paket bietet eine Reihe von Konstrukten an, um ein kurzes Handbuch bereitzustellen, das die Funktionen dieser Pakete beschreibt.
\DescribeMacro{\befehl }
\DescribeEnv{umgebung}
Der Befehl \DescribeMacro hat ein Argument, das im Rand ausgedruckt wird und zusätzlich einen speziellen Indexeintrag erzeugt, z.B.
% \DescribeMacro{\DocInput} \DescribeMacro{\IndexInput} % Und schließlich der \meta{input commands}-Teil ... Ein ähnliches Makro namens \DescribeEnv kann verwendet werden, um auf die Beschreibung einer LaTEX-Umgebung hinzuweisen.
847
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
\begin{macro}{\befehl }
\begin{environment}{umgebung}
Um die Definition eines neuen Makros zu dokumentieren, wird die Umgebung macro verwendet. Diese Umgebung erhält den Namen des neuen Makros als Argument. Der Inhalt des Argumentes wird im Rand ausgegeben und in den Index aufgenommen. Tatsächlich werden für die Verwendung und die Definition eines Makros unterschiedliche Indexformatierungen benutzt, um das Referenzieren zu erleichtern. Hier ein Beispiel direkt aus den englischen Quelldateien des doc-Paketes:
% \begin{macro}{\MacroTopsep} % Here is the default value for the \verb+\MacroTopsep+ % parameter used above. % \begin{macrocode} \newlength\MacroTopsep \setlength\MacroTopsep{7pt plus 2pt minus 2pt} % \end{macrocode} % \end{macro} Eine weitere Umgebung mit dem wenig phantasievollen Namen environment dokumentiert den Programmcode von Umgebungen. Sie funktioniert wie die macro-Umgebung, erwartet aber als Argument den Namen einer Umgebung.
\MakeShortVerb{\c } \MakeShortVerb*{\c } \DeleteShortVerb{\c } Wenn viele Textstellen unverändert wiedergegeben werden sollen (z.B. Befehlsnamen), ist es sehr umständlich, stets \verb+. . . + einzugeben. Aus diesem Grund bietet das doc-Paket eine Abkürzungsmöglichkeit, mit der man ein Zeichen c, das ansonsten im Dokument nur sehr selten auftaucht, als Begrenzungssymbol für die wortwörtliche Ausgabe verwenden kann. Häufig wird das "-Zeichen gewählt, aber wenn dieses Zeichen bereits für einen anderen Zweck verwendet wird, z.B. um Umlaute zu erzeugen, kann man auch den senkrechten Strich „|“ benutzen. Nachdem der Befehl \MakeShortVerb{\c } im Dokument eingeführt worden ist, wird die Eingabe c text c äquivalent zu \verbc text c. Die Variante \MakeShortVerb* bewirkt dasselbe, verwendet jedoch \verb*. Wenn c später in seiner ursprünglichen Bedeutung verwendet werden soll, genügt die Eingabe \DeleteShortVerb {\c }. Man kann zwischen beiden Formen (Kurzform und Originalbedeutung) beliebig oft hin und her wechseln.1 Zu beachten ist, dass solche Kurzformen für \verb genauso wie \verb selbst nicht im Argument eines anderen Befehls vorkommen dürfen. Die Zeichen können jedoch uneingeschränkt in verbatim- und macrocodeUmgebungen verwendet werden. Die dokumentierte Paketdatei kann in zwei Teile unterteilt werden: Der erste enthält die allgemeine Beschreibung und der zweite gibt eine ausführliche Beschreibung der Makroimplementierung wieder. Beim Erzeugen der Dokumentation kann der Anwender den letzteren Teil unterdrücken, wenn an 1 Diese Funktion gibt es auch als eigenständiges Paket shortvrb; dieses wurde in Abschnitt Abschnitt 3.4 besprochen. Siehe Beispiel 3-4-2 auf Seite 160.
848
14.1 doc – Dokumentieren von Programmcode
der Trennstelle zwischen diesen beiden Teilen der Befehl \StopEventually eingefügt wurde.
\StopEventually{schlussteil }
\Finale
Das Makro \StopEventually hat ein Argument, in welches die gesamte Information geschrieben wird, die erscheinen soll, wenn der Anwender beschließt, das Setzen des Dokumentes an dieser Stelle zu beenden (z.B. eine Bibliographie, die in der Regel am Ende des Dokumentes platziert wird). Wenn die Treiberdatei eine \OnlyDescription-Deklaration enthält, bearbeitet LaTEX das Argument von \StopEventually und hört dann auf, die Datei zu lesen.1 Andernfalls speichert das Makro \StopEventually sein Argument in einem Makro namens \Finale ab. Dieses kann im späteren Verlauf verwendet werden, um die gespeicherte Information zu verarbeiten (üblicherweise ganz am Schluss, daher der Name). Durch dieses Verfahren ist es nicht erforderlich, Änderungen an zwei Stellen vorzunehmen.2 Zur Dokumentation von Änderungen kann man den Befehl \changes in den Beschreibungsteil des geänderten Codes einfügen.
\changes{version}{datum}{text } Die Information im Befehl \changes kann dazu verwendet werden, eine Hilfsdatei zu erstellen (hierzu wird LaTEXs \glossary-Befehl verwendet), die nach entsprechender Formatierung ausgedruckt werden kann. Damit die Änderungsdaten aufgezeichnet werden, muss der Befehl \RecordChanges in der Treiberdatei angegeben werden. Um die Änderungsdaten zu lesen und auszudrucken, wird der Befehl \PrintChanges an geeigneter Stelle (in der Regel nach dem Befehl \PrintIndex) in die Treiberdatei eingefügt. Eine sortierte Datei mit den Änderungen erhält man, indem man die Glossar-Rohdatei mit MakeIndex bearbeitet und dabei eine passende Stildatei verwendet (z.B. gglo.ist, die mit der doc-Distribution mitgeliefert wird; für weitere Informationen über die Bearbeitung von Glossaren durch MakeIndex siehe Abschnitt 11.1.6 auf Seite 673).
14.1.3 Indexieren aller verwendeten Makros Innerhalb der Umgebungen macrocode und macrocode* werden für jeden verwendeten Befehlsnamen Indexeinträge erstellt. Mit dem so generierten Indexregister lässt sich leicht herausfinden, wo ein bestimmtes Makro eingesetzt wird. Da TEX jedoch erheblich langsamer arbeitet, wenn es solch eine große Anzahl an Indexeinträgen erstellen muss, kann man diese Funktion mithilfe des Befehls \DisableCrossrefs in der Treiberdatei deaktivieren. Mit dem Befehl \EnableCrossrefs wird sie wieder aktiviert. 1 Der etwas seltsame Befehlsname beruht auf einem Missverständnis des Paketautors: er meinte „eventuell“ und verwendete daher den englischen Begriff „eventually“, der jedoch eine andere Bedeutung hat (nämlich „schließlich“). Als er seinen Fehler bemerkte, wurde das Makro schon einige Jahre verwendet. 2 Voreingestellt ist, das ganze Dokument zu setzen. Dies kann auch explizit mit dem Makro \AlsoImplementation festgelegt werden.
849
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
Möglichkeiten zur Feinsteuerung bietet der Befehl \DoNotIndex. Er hat ein Argument, das eine durch Kommas getrennte Liste von Befehlen enthält, die nicht in das Stichwortverzeichnis aufgenommen werden. Es kann mehr als ein \DoNotIndex-Befehl vorhanden sein, in diesem Fall werden ihre Inhalte kombiniert. Häufig wird dieses Makro verwendet, um Standardbefehle aus dem Index auszuschließen, die diesen nur aufblähen würden. Das Anlegen (oder Nicht-Anlegen) des Indexes wird durch eine der nachfolgenden Deklarationen gesteuert, die in der Präambel der Treiberdatei angegeben werden (wird keine der Deklarationen spezifiziert, dann wird kein Stichwortverzeichnis erstellt). Bei Angabe des Befehls \PageIndex referenzieren alle Indexeinträge auf die zugehörige Seitennummer; bei Verwendung von \CodelineIndex erzeugen mit \DescribeMacro und \DescribeEnv erstellte Indexeinträge Seitennummern, während jene, die von den macro- und macrocode-Umgebungen erstellt wurden, auf die Zeilen referenzieren, in welchen der Befehl steht. Dazu werden alle Codezeilen automatisch durchnummeriert. Wenn die Indexeinträge erstellt werden, müssen sie durch ein externes Programm wie MakeIndex (siehe Kapitel 11) sortiert werden. Da das doc-Paket spezielle Konventionen für Indexeinträge verwendet, muss MakeIndex mit dem Schalter -s ausgeführt werden (siehe Abschnitt 11.2.4 auf Seite 681), um eine passende Stildatei anzugeben – z.B. gind.ist, die mit dem doc-Paket mitgeliefert wird. Um den sortierten Index zu lesen und auszudrucken, muss der Befehl \PrintIndex gegen Ende der Treiberdatei eingefügt werden, typischerweise hinter einer eventuell vorhandenen Bibliographie.
14.1.4 Der Dokumentationstreiber Um für einen Satz von Makros mit dem doc-System eine Dokumentation zu erstellen, muss eine Treiberdatei angelegt werden, welche die folgenden Merkmale besitzt:
\documentclass[!optionen"]{!dokumentenklasse"} \usepackage{doc} !präambel"
\begin{document} !eingabebefehle"
\end{document}
Die !dokumentenklasse" kann jede zugelassene Klasse sein, z.B. article oder ltxdoc (beschrieben in Abschnitt 14.3); in letzterem Fall wird das docPaket bereits von der Klasse geladen. In der !präambel" sollte man Deklarationen einfügen, die das Verhalten des doc-Systems steuern, wie etwa \DisableCrossrefs , \OnlyDescription und \CodelineIndex .
\DocInput{dateiname}
\IndexInput{dateiname}
Der Teil !eingabebefehle" sollte schließlich einen oder mehrere \DocInputund/oder \IndexInput-Befehle enthalten. Der \DocInput-Befehl wird für Dateien verwendet, die für das doc-System ausgelegt sind, während der
850
14.1 doc – Dokumentieren von Programmcode
\IndexInput-Befehl für Makrodateien verwendet werden kann, die nicht den Konventionen des doc-Systems entsprechen. Dieser Befehl akzeptiert als Argument einen Dateinamen und erstellt einen unformatierten Ausdruck der Datei, wobei er alle Befehle in den Index schreibt. Diese Funktion kann sehr praktisch sein, wenn man etwas über Makros erfahren möchte, die nicht ausreichend dokumentiert sind. Es ist auch möglich, die Befehle \PrintIndex und \PrintChanges (wenn die Änderungen mit \RecordChanges aufgezeichnet werden) einzusetzen. Einige Leute binden sie direkt in die Quelldatei ein, aber es ist empfehlenswerter, sie in den Treiber zu einzufügen. Dadurch wird es möglich, mehrere Pakete in einem Dokument zu kombinieren und einen Gesamtindex zu erstellen. Wie in der Einleitung erwähnt, ist der Treiber heutzutage meistens keine separate Datei, sondern wird direkt in die Quelldatei eingebunden. Wie dies funktioniert, wird im nächsten Abschnitt erklärt.
14.1.5 Bedingter Code in der Quelldatei Die bisher besprochenen Funktionen können verwendet werden, um eine LaTEX-Quelldatei im „literate programming“-Stil zu erzeugen. Diese kann direkt verwendet werden, indem sie als Paket geladen wird (wobei TEX die Kommentare umgeht), oder sie kann, wie im vorangegangenen Abschnitt beschrieben, mithilfe einer Treiberdatei ausgedruckt werden. Hierfür muss aber die Struktur einer solchen Datei linear sein; mit anderen Worten: TEX lädt den gesamten Code genau in der Reihenfolge, wie er in der Datei aufgeführt ist. Nach einigen Erfahrungen mit dem doc-System stellte es sich bald heraus, dass es eine wertvolle Erweiterung wäre, wenn man einsatzfähige Dateien erzeugen könnte, indem man sie aus mehreren Quelldateien zusammensetzt oder sie z.B. aus Teilen von einer oder mehreren Quelldateien extrahiert. Aus diesem Grund wurde das doc-System in zwei Richtungen ausgebaut: • Es wurde eine Syntax entwickelt, um Teile des Codes zu markieren, so dass man auf die Bestandteile separat referenzieren konnte. • Das docstrip-Programm (siehe Abschnitt 14.2), das ursprünglich nur verwendet wurde, um die Kommentare aus doc-Dateien zu entfernen, wurde erweitert, um eine Skriptsprache bereitzustellen, in der man angeben kann, wie eine sofort einsatzfähige Datei aus den markierten Code-Teilen von einer oder mehreren Quelldateien generiert werden kann. Natürlich kann eine Quelldatei, die solch einen bedingten Code enthält, nicht mehr direkt verwendet werden. Es bedarf des vorherigen Einsatzes des docstrip-Programms, um sie in eine einsatzfähige Datei zu verwandeln. Die erweiterten Möglichkeiten, die dieser Ansatz bietet, machen jedoch den Aufwand, der durch den zusätzlichen Produktionsschritt während der Installation entsteht, bei weitem wett, so dass heute fast alle Anwendungen von doc diese Funktion nutzen. Programmfragmente, die nur unter bestimmten Bedingungen hinzugefügt werden sollen, werden in der Quelldatei mit „Tags“ gekennzeichnet. Das einfachste Format besteht aus einem - und -Paar, das einen Teil des Codes umrahmt. Dies ermöglicht dem Anwender, bestimmte Teile ein-
851
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
bzw. auszuschließen, indem er in einem docstrip-Skript auf ihren namen verweist. Diese Tags müssen – mit einem vorangestellten %-Zeichen – immer am Anfang einer Zeile stehen, z.B.
% einige Programmzeilen % Es ist möglich, mehr als einen Tag mit einem Abschnitt zu verknüpfen, indem man mehrere namen mit den booleschen Operatoren | für das logische Oder, & für das logische Und und ! für die Negation kombiniert (wobei die Operatoren von links nach rechts abgearbeitet werden). Zum Beispiel bedeutet
% einige Programmzeilen % dass dieser Block eingebunden werden soll, wenn entweder Aname angefordert wurde oder zwar Bname, aber nicht Cname. Es gibt zwei weitere Formen von Direktiven, mit denen einzelne Programmzeilen eingebunden oder ausgeschlossen werden können. Eine Zeile, die mit % beginnt, wird eingebunden (ohne das Tag), wenn name angefordert wird. Eine Zeile, die mit % beginnt, wird eingebunden, wenn name während der docstrip-Bearbeitung nicht angefordert wird. Die obigen Befehle können ineinander verschachtelt werden. Dabei werden die inneren Tags nur dann ausgewertet, wenn die äußeren Tags wahr sind (d.h. wenn der gesamte Block eingebunden werden soll).
% Programmzeile 1 % Programmzeile 2 % Programmzeile 3 Programmzeile 4 % Hier wird nichts eingebunden, wenn Aname nicht angefordert wird. Wenn er angefordert wird, werden die Programmzeilen 1, 2 und 4 ausgegeben, wenn zusätzlich Bname angefordert wird; ansonsten werden die Programmzeilen 1, 3 und 4 ausgegeben. Bleibt nur noch die Frage, wie man mit bedingtem Code die Treiberdatei in die Hauptquelldatei einfügen kann. Hierfür muss der Code für den Treiber als erster Codeblock eingebunden werden und davor und dahinter Tags eingefügt werden (z.B. driver). Wenn der Anwender dann die Quelldatei mit LaTEX bearbeitet, ist der Treibercode der erste Programmcode, dem keine % -Zeichen vorangestellt sind, und er wird ausgeführt. Da er auf \end{document} endet, führt LaTEX in der Datei keinen weiteren Programmcode aus. Die Dokumentation wird dann unter der Annahme gesetzt, dass der Treiber die gesamte Datei mit \DocInput lädt. Um die eigentlichen Paketdateien zu generieren, muss man ein docstrip-Skript verwenden (siehe Abschnitt 14.2 auf Seite 857), das den Treibercode ignoriert, indem es keinen Code aus einem Block anfordert, der mit dem Tag driver gekennzeichnet ist. 852
14.1 doc – Dokumentieren von Programmcode
Tabelle 14.1: Überblick über Befehle des doc-Paketes Präambel und Eingabebefehle
\AlsoImplementation Formatiert die gesamte Datei, einschließlich Code-Teil, die entsprechend der doc-Konventionen markiert ist (voreingestellt).
\CharacterTable{zeichentabelle} Benutzerschnittstelle zur Zeichenüberprüfung.
\CheckModules Spezielle Formatierung für die Modulmarker von docstrip (voreingestellt).
\CheckSum{prüfsumme} Benutzerschnittstelle für eine einfache Prüfsumme (Anzahl der BackslashZeichen im Programmcode).
\CodelineIndex Indexiert die Befehle anhand der Zeilennummern.
\CodelineNumbered Nummeriert die Zeilen ohne Indexierung der Befehle.
\DisableCrossrefs Keine Erstellung von Indexeinträgen für Befehle im Programmcode.
\DocInput{datei } Einlesen von datei gemäß der doc-Konventionen.
\DontCheckModules Keine spezielle Formatierung der Modulmarker von docstrip.
\EnableCrossrefs Erstellt Indexeinträge für Befehle im Programmcode.
\IndexInput{datei } Einlesen der datei, wortwörtliche Ausgabe und Erstellung einer Querverweisliste für Befehle.
\OnlyDescription Keine Formatierung des Codes; Abbruch bei \StopEventually .
\PageIndex Indexiert Befehle anhand der Seitennummern.
\PrintChanges Druckt die Änderungsliste hier aus.
\PrintIndex Druckt den Index hier aus.
\RecordChanges Erstellt eine Änderungsliste.
Dokumentenstrukturbefehle
\bslash Druckt ein Backslash-Zeichen (\) aus. Nur nützlich in Typewriter Fonts!
\DeleteShortVerb{\zeichen} Macht für zeichen die vorangegangene Definition von \MakeShortVerb oder \MakeShortVerb* rückgängig.
\DescribeEnv{umg} Kennzeichnet die Stelle im Text, an der die Umgebung umg beschrieben ist.
\DescribeMacro{\befehl } Kennzeichnet die Stelle im Text, an der das Makro \befehl beschrieben ist.
853
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
Überblick über Befehle des doc-Paketes (Forts.)
\begin{environment}{umg} Umgebung, in der Code und Beschreibung der Umgebung umg eingebettet sind.
\Finale Befehl, der am Ende des Dokumentes ausgeführt wird (siehe auch
\StopEventually).
\begin{macro}{\befehl } Umgebung, in der Code und Beschreibung des Makros \befehl eingebettet sind.
\begin{macrocode} Umgebung, in welcher der TEX-Code eingebettet ist.
\begin{macrocode*} Wie die macrocode-Umgebung, wobei Leerzeichen als ! ausgegeben werden.
\MakeShortVerb{\zeichen} Definiert zeichen als Kurzform für \verb .
\MakeShortVerb*{\zeichen} Definiert zeichen als Kurzform für \verb* .
\meta{arg} Druckt das Argument als Metawort, d.h. erzeugt folgendes Resultat: !arg".
\SpecialEscapechar{\zeichen}
Definiert neues Escape-Zeichen zeichen, das anstelle von \ verwendet werden soll.
\StopEventually{befehle} Das Argument befehle gibt an, welche Befehle am Ende des Dokumentes ausgeführt werden (sie werden in \Finale gespeichert).
\begin{verbatim} Leicht geänderte Version von LaTEXs Standard-verbatim-Umgebung, in der Prozentzeichen in der ersten Spalte ignoriert werden.
\begin{verbatim*} Wie die verbatim-Umgebung, wobei Leerzeichen als ! ausgegeben werden.
Indexbefehle
\* Symbol, das in Indexeinträgen zum Verweis auf übergeordnete Einträge verwendet wird (Voreinstellung: ! ).
\actualchar
Zeichen zur Trennung des „Sortierschlüssels“ und des tatsächlichen Eintrags in einem Indexeintrag (Voreinstellung: =).
\DoNotIndex{befehl1 ,. . . ,befehln } Namen der Befehle, die nicht im Index erscheinen sollen.
\encapchar Zeichen zur Trennung des tatsächlichen Indexeintrags und des Befehls, durch den die Seitennummer in einem Indexeintrag formatiert wird (Voreinstellung: |).
\IndexMin Längenparameter (Voreinstellung: 80pt), der den minimalen Leerraum angibt, der auf einer Seite vorhanden sein muss, damit der Index auf der aktuellen Seite beginnen kann.
854
14.1 doc – Dokumentieren von Programmcode
Überblick über Befehle des doc-Paketes (Forts.)
\IndexParms Makro, das die Formatierung der Indexspalten steuert.
\IndexPrologue{text } Überschreibt den Standardtext, der normalerweise oberhalb des Index steht.
\levelchar Zeichen zur Trennung verschiedener Indexebenen in einem Indexeintrag (Voreinstellung: >).
\main{zahl } Definiert den Stil zur Formatierung der Seitennummern oder Zeilennummern der Indexeinträge für Haupteinträge (Voreinstellung: unterstrichene Ziffern).
\quotechar Zeichen, das die besondere Bedeutung des folgenden Zeichens in einem Indexeintrag unterdrückt (Voreinstellung: !).
\SortIndex{schlüssel }{eintrag} Erstellt einen Indexeintrag für eintrag, der unter schlüssel einsortiert ist.
\SpecialEnvIndex{eintrag} Erstellt einen Indexeintrag für die Umgebung eintrag.
\SpecialIndex{\befehl } Erstellt einen Indexeintrag für \befehl (wobei das Argument wortwörtlich im Index erscheint).
\SpecialMainEnvIndex{umg} Erstellt einen Haupteintrag für eine Umgebung mit der Seitenkapselungsfunktion \main.
\SpecialMainIndex{\befehl } Erstellt einen Haupteintrag für ein Makro mit der Seitenkapselungsfunktion
\main.
\SpecialUsageIndex{\befehl } Erstellt einen Indexeintrag für ein Makro mit der Seitenkapselungsfunktion
\usage.
\usage{zahl } Definiert den Stil, mit dem die Seitennummern der Indexeinträge auf Befehlsbeschreibungen formatiert werden (Voreinstellung: kursive Ziffern).
\verbatimchar Zeichen zur Begrenzung von \verb-Konstruktionen innerhalb eines Indexeintrags (Voreinstellung: +).
Änderungs- und Versionsinformation
\changes{version}{datum}{grund } Zeichnet Änderungsinformationen in der Änderungsliste auf.
\docdate Enthält häufig das Datum der letzten Aktualisierung der Dokumentation.
\filedate Enthält häufig das Datum der letzten Aktualisierung des Programmcodes.
\filename Enthält häufig den Namen der Quelldatei.
\fileversion Enthält häufig die Versionsnummer der Quelldatei.
855
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
Überblick über Befehle des doc-Paketes (Forts.)
\GlossaryMin Längenparameter (Voreinstellung: 80pt), der den minimalen Leerraum angibt, der auf einer Seite vorhanden sein muss, damit die Änderungsliste auf der aktuellen Seite beginnen kann.
\GlossaryParms Makro, das die Formatierung der Spalten in der Änderungsliste steuert.
\GlossaryPrologue{text } Überschreibt den Standardtext, der normalerweise oberhalb der Änderungsliste steht.
Layout- und Formatierungsparameter
\@idxitem Makro, das angibt, wie Indexeinträge gesetzt werden (standardmäßig werden sie in einem Absatz mit um 30pt eingerückten Folgezeilen gesetzt).
\AltMacroFont Zeichensatz, der für das Setzen des Codes von docstrip-Modulen verwendet wird (Voreinstellung: \small\ttfamily\slshape).
\DocstyleParms Makro, das die Formatierung des TEX-Codes steuert.
\generalname Überschrift für die Änderungseinträge auf oberster Ebene.
\MacrocodeTopsep Vertikaler Abstand vor und nach jeder macrocode-Umgebung.
\MacroFont Zeichensatz, der für das Setzen des Hauptteils des Codes verwendet wird (Voreinstellung: \small\ttfamily).
\MacroIndent Breite des Einzugs für alle Programmcode-Zeilen.
\MacroTopsep Vertikaler Abstand vor und nach jeder macro-Umgebung.
\MakePercentComment Aktiviert „%“ als TEXs Anfangszeichen für Kommentare.
\MakePercentIgnore Deaktiviert „%“ als TEXs Anfangszeichen für Kommentare.
\MakePrivateLetters Makro zur Definition der Symbole, die als zusätzliche „Buchstaben“ in Befehlsnamen erlaubt sind (Voreinstellung: @).
\Module Makro mit einem Argument, das die Formatierung von docstripModulmarkern definiert.
\PrintDescribeEnv Makro mit einem Argument, das die Formatierung von \DescribeEnv definiert.
\PrintDescribeMacro Makro mit einem Argument, das die Formatierung von \DescribeMacro definiert.
\PrintEnvName Wie \PrintDescribeEnv, jedoch für das Argument der environmentUmgebung.
856
14.2 docstrip.tex – Lauffähigen Code erzeugen
Überblick über Befehle des doc-Paketes (Forts.)
\PrintMacroName Wie \PrintDescribeMacro, jedoch zum Setzen des Argumentes der macro-Umgebung.
\ps@titlepage Makro, das den Seitenstil für die Titelseite von Artikeln definiert, die in einer Zeitschrift zusammengefasst sind (Voreinstellung: \ps@plain).
StandardModuleDepth Zähler, der die höchste Ebene der docstrip-Direktiven angibt, die noch mit
\MacroFont formatiert werden. Tiefer verschachtelte Anweisungen werden mit \AltMacroFont definiert (voreingestellter Wert 0 bzw. 1 in ltxdoc).
\theCodelineNo Steuert das Setzen der Zeilennummern (standardmäßig arabische Zahlen in der Schriftgröße für Hoch- und Tiefstellungen).
14.2 docstrip.tex – Lauffähigen Code erzeugen Als doc in den späten 80er Jahren geschrieben wurde, war das Ziel, eine „literate programming“-Umgebung [86] für LaTEX bereitzustellen, in der LaTEX-Code und Dokumentation in einer Quelldatei vermischt sind. Wie sich bald herausstellte, wurde das Laden einer Datei durch TEX deutlich langsamer, wenn TEX auch den gesamten Dokumentationsteil analysieren (und anschließend ignorieren) musste.1 Um dieses Problem zu vermeiden, suchte Frank Mittelbach nach Wegen, um alle Kommentare automatisch aus den Dateien zu entfernen, die für das doc-System geschrieben wurden. Entwickelt man externe Programme für solch einen Zweck, so besteht das Problem, dass es nicht sicher ist, ob sie für das Betriebssystem des Anwenders verfügbar sind. Selbst wenn sie es sind, sind sie möglicherweise nicht installiert. Auf einem System, das LaTEX ausführen kann, ist jedoch ein Programm immer verfügbar: das TEX-Programm selbst. Um die größtmögliche Portierbarkeit zu erreichen, wurde das docstrip-Programm in einer systemnahen TEXSprache geschrieben. Seit den Anfangstagen hat das Programm viele Revisionen durchlaufen, und sein Verwendungszweck hat sich geändert: von einem einfachen, bereinigenden Hilfsprogramm zu einem vollständig anpassbaren Installationstool – das sogar Dateien an die richtigen Verzeichnisse auf dem Zielsystem verteilen kann. Johannes Braams, Denys Duchier, Marcin Woli´ nski, Mark Wooding, David Carlisle und andere trugen zu dieser Metamorphose bei; Einzelheiten zu den Entwicklungsschritten sind in der dokumentierten Quelldatei nachzulesen (die natürlich „literate programming“ verwendet). Heute wird das docstrip-Programm vornehmlich für folgende Zwecke eingesetzt: • Entfernung der Dokumentation (d.h. der Zeilen, die mit einem %-Zeichen in der ersten Spalte beginnen) aus der „literate programming“-Quelldatei. • Erzeugung von einsatzfähigen Programmcode-Dateien durch Verwendung von Code aus einer oder mehrerer Dateien und Einbindung von Teilen daraus nach festgelegten Optionen. 1 Zu dieser Zeit konnte die Erstellung einer einzigen Seite durch T X leicht eine halbe E Minute oder länger dauern.
857
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
• Wenn gewünscht, automatische Installation der erzeugten Dateien in den richtigen Verzeichnissen auf dem Zielrechner, wodurch das Laden von Updates und Zusätzen zu einer LaTEX-Installation erheblich vereinfacht wird. Insbesondere die letzte Möglichkeit ist nicht sehr bekannt, verdient es aber durchaus, weiter verbreitet zu werden, weil sie sich mit relativ geringerem Aufwand umsetzen lässt.
14.2.1 Aufrufen des docstrip-Programms Von Anfang an konnte docstrip interaktiv ausgeführt werden, indem docstrip.tex mit LaTEX bearbeitet wurde:
latex docstrip.tex LaTEX stellt daraufhin ein paar Fragen, etwa welche Datei wie verarbeitet werden soll. Nachdem der Anwender diese beantwortet hat, tritt docstrip in Aktion und entfernt die Kommentare aus der Quelldatei. Dieses Verfahren diente ursprünglich nur dazu, Kommentare zu entfernen. Bei den heutigen Quelldateien, die bedingten Code enthalten und teilweise mit anderen kombiniert werden, um die endgültige „ausführbare“ Datei zu bilden, reicht dies jedoch nicht mehr aus. Stattdessen stellen die Paketentwickler heute eine Installationsdatei bereit (die per Konvention die Erweiterung .ins hat): sie wird verwendet, um hinter den Kulissen docstrip aufzurufen. Hierfür gibt der Anwender lediglich Folgendes an:
latex name.ins Durch diesen Befehl werden alle „ausführbaren“ Dateien aus den Quelldateien generiert und gegebenenfalls an den richtigen Stellen installiert. Alle Standarddistributionen von LaTEX (z.B. base, graphics und tools) werden in dieser Form verteilt, genauso wie die meisten von anderen Entwicklern beigetragenen Pakete, die in diesem Buch beschrieben werden. Der nächste Abschnitt geht darauf ein, wie man eigene Installationsskripts für docstrip erstellen kann. Anschließend zeigt Abschnitt 14.2.3, wie docstrip so eingerichtet werden kann, dass die generierten Dateien automatisch an den richtigen Stellen installiert werden.
14.2.2 docstrip-Skriptbefehle Ein docstrip-Installationsskript hat folgende allgemeine Form:
\input docstrip !andere docstrip-Befehle"
\endbatchfile
Zunächst wird der docstrip-Code mithilfe des TEX-Befehls \input (ohne geschweifte Klammern um den Dateinamen) geladen. Dies macht es möglich,
858
14.2 docstrip.tex – Lauffähigen Code erzeugen
solch ein Skript mit anderen TEX-Formaten als LaTEX zu bearbeiten. Danach folgen die docstrip-Befehle, welche die neuen Dateien tatsächlich generieren, mit dem Anwender kommunizieren und andere notwendige Aufgaben durchführen. Am Ende des Skripts wird \endbatchfile aufgerufen. Ohne diese Anweisung würde docstrip die Eingabeaufforderung * anzeigen, während es auf weitere Eingaben des Anwenders wartet. Erstellen neuer Dateien Ein docstrip-Skript wird hauptsächlich erstellt, um zu beschreiben, welche Dateien aus welchen Quellen generiert werden sollen und welche optionalen (getaggten) Programmteile eingebunden werden sollen. Dies geschieht mithilfe von \generate-Deklarationen.
\generate{\file{ergebnisdatei1 }{\from{quelldatei1 }{tag-liste1 } \from{quelldatei2 }{tag-liste2 } \from{quelldatei3 }{tag-liste3 } ...
\from{quelldatein }{tag-listen }} ...
\file{ergebnisdatein }{. . . } } Im Argument von \generate werden die ergebnisdateien angegeben, die mithilfe von \file-Deklarationen erstellt werden sollen. Das zweite Argument von \file enthält einen oder mehrere \from-Befehle, welche die quelldateien auflisten, die zur Generierung der ergebnisdatei verwendet werden sollen. Das zweite Argument jeder \from-Deklaration gibt die tag-liste an, die für eine bestimmte quelldatei verwendet werden soll. Damit werden nur die Teile des Programmcodes, die mit den entsprechenden Tags gekennzeichnet sind, sowie alle ungetaggten Quellcodeteile aus dieser Datei eingebunden (siehe Abschnitt 14.1.5 auf Seite 851). Die quelldateien werden in der angegebenen Reihenfolge verwendet: zunächst wird der Code aus der quelldatei1 eingebunden (gemäß der TagSpezifikation), dann der Code aus der quelldatei2 usw. Die tag-listen der einzelnen \from-Befehle bestehen aus durch Kommas getrennte Tags, welche den einzubindenden Programmcode kennzeichnen. Mit der oben gezeigten Syntax für \generate ist es möglich, aus einer oder mehreren quelldateien eine ergebnisdatei zu erzeugen, wenn man nur eine einzelne \file-Deklaration verwendet. Dadurch, dass \generate so häufig wie notwendig verwendet werden kann, ist dieses Verfahren flexibel genug, um jede Art von Distribution zu erzeugen. In dieser Form ist es jedoch nicht sehr effektiv. Angenommen, es gäbe eine große Quelldatei, aus der viele kleine Dateien erzeugt werden sollen – z.B. der Quellcode des doc-Paketes (doc.dtx), aus dem die Dateien doc.sty, shortvrb.sty, gind.ist und gglo.ist generiert werden. Diese Datei ist nahezu 5000 Zeilen lang, so dass docstrip mit vier \generate-Deklarationen 20000 Zeilen verarbeiten müsste. Um dieses Verfahren zu beschleunigen, ermöglicht \generate die Angabe mehrerer \file-Befehle in seinem Argument. Diese Dateien werden parallel verarbeitet,
859
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
so dass die quelldateien nur einmal geöffnet werden und der Quellcode für die ergebnisdateien parallel generiert wird.
\generate{\file{doc.sty}{\from{doc.dtx}{package}} \file{shortvrb.sty}{\from{doc.dtx}{shortvrb}} \usepostamble\istpost \file{gind.ist}{\from{doc.dtx}{gind}} \file{gglo.ist}{\from{doc.dtx}{gglo}}} Wie zu erkennen ist, sind einige andere Befehle (z.B. \usepostamble) im Argument des \generate-Befehls zugelassen. Im obigen Beispiel hat dies den Effekt, dass der Standardnachspann durch einen anderen ersetzt wird (da der Standardnachspann am Ende der generierten Datei ein \endinput hinzufügt, was in einer Stildatei für MakeIndex nicht wünschenswert ist). Bei diesem Ansatz gibt es einige Beschränkungen. Zum Beispiel gibt Beschränkungen bei docstrip eine Fehlermeldung aus, wenn die Reihenfolge der Quelldateien paralleler in einem \file-Befehl mit der Reihenfolge in einem anderen kollidiert (die Extrahierung genauen Regeln werden in der docstrip-Dokumentation [121] besprochen). Wenn dies geschieht, ist die einfachste Lösung, zwei separate \generateDeklarationen zu verwenden. Kommunizieren mit dem Anwender Die Skriptsprache von docstrip bietet begrenzt Möglichkeiten zur Kommunikation mit dem Anwender. Zu bedenken ist jedoch, dass interaktive Fragen, die manchmal durchaus sinnvoll sein können, den Installationsvorgang sehr zähflüssig machen können. Daher sollten diese Werkzeuge nur mit Vorsicht verwendet werden.
\Msg{meldung}
\Ask{befehl }{frage}
Der \Msg-Befehl kann verwendet werden, um eine meldung am Bildschirm auszugeben; damit bietet er eine ähnliche Funktionalität wie LaTEXs \typeoutBefehl. \Ask ist ähnlich wie LaTEXs \typein-Befehl, mit dem Unterschied, dass bei Beantwortung einer frage kein angehängtes Leerzeichen erzeugt wird, wenn die Return-Taste gedrückt wird. Auf diese Weise können einfache Fragen gestellt werden (über eine Art Low-Level-Programmierung). Ein Beispiel:
\Ask\answer{Should we continue? (y/n)} \ifx\answer\y % \y enthält y für Vergleiche % Code für die Antwort y % Auch vordefiniert: \n und \yes \else % andernfalls \fi
\ifToplevel{code} Eventuell soll eine bestimmte Information nur dann ausgegeben werden oder ein bestimmter Code nur dann ausgeführt werden, wenn ein docstrip-Skript allein ausgeführt wird und nicht als Teil einer größeren Installation aufgerufen wird (siehe unten). Solch eine Information oder solch ein Code kann
860
14.2 docstrip.tex – Lauffähigen Code erzeugen
im Argument eines \ifToplevel-Befehls angegeben werden. So gibt beispielsweise jedes einzelne Installationsskript der LaTEX-Basisdistribution an, was mit den generierten Dateien passieren soll. Bei Verwendung des MasterInstallationsskripts unpack.ins werden die Meldungen in den Unterskripts jedoch unterdrückt, um zu vermeiden, dass dieselbe Information ständig wiederholt wird.
\askforoverwritetrue
\askforoverwritefalse
Bevor docstrip seine Ausgabe in eine Datei schreibt, prüft es, ob dieser Vorgang eine bestehende Version dieser Datei überschriebe. Wenn ja, wird der Anwender standardmäßig gefragt, ob die Datei überschrieben werden soll. Diese Nachfrage kann im docstrip-Skript explizit deaktiviert werden (oder umgekehrt, wenn sie deaktiviert war), und zwar mit dem Befehl \askforoverwritefalse bzw. \askforoverwritetrue.
\askonceonly In einem Distributionsskript die Einstellung \askforoverwritefalse zu verwenden, ist meist nicht angemessen, da es effektiv bedeutet, dass die Dateien anderer Personen unter allen Umständen überschrieben werden dürfen – komme was wolle. Auf der anderen Seite wäre es bei größeren Installationen, wie etwa der Basisdistribution von LaTEX, nicht sehr hilfreich, wenn bei Hunderten von Dateien einzeln nachgefragt würde. Aus diesem Grund bietet docstrip die Deklaration \askonceonly . Mit dieser erhält der Anwender bei der ersten Nachfrage die Möglichkeit, künftige Nachfragen zu unterdrücken. docstrip geht einfach davon aus, dass diese mit „yes“ beantwortet würden. Dies betrifft jedoch alle zukünftigen Fragen (egal, ob sie manuell von \Ask gestellt werden oder durch das Überschreiben einer Datei zustande kommen).
\showprogress
\keepsilent
Zum Zeitvertreib und weil in der ursprünglichen Implementierung alles so langsam war, kann man docstrip veranlassen, den Verlauf anzuzeigen, wenn Kommentare entfernt werden und neue Dateien zusammengesetzt werden. Die meisten Skripte laufen heute jedoch im stillen Modus ab. Master-Installationsskripts Bei großen Distributionen, wie etwa der LaTEX-Basisdistribution, ist es bequem, docstrip-Skripte zur Bearbeitung einzelner Teile bereitzustellen. format.ins erzeugt beispielsweise die zentrale Formatdatei latex.ltx und ihre Konfigurationsdateien, wie fonttext.cfg, während classes.ins die Standardklassen, wie die Dateien article.cls und report.cls, erzeugt. Trotzdem soll der Anwender nicht gezwungen werden, ein Dutzend oder mehr Installationsskripts auszuführen (im Fall der LaTEX-Basisdistribution sind es 30). Daher bietet docstrip den Befehl \batchinput. Mit diesem können Installationsskripts in einem Master-Installationsskript eingebunden werden. Für diesen Zweck sollte nicht \input verwendet werden, denn dieser Befehl ist exklusiv für das einmalige Laden des docstrip-Codes reserviert (wie schon erläutert wurde), ansonsten wird er ignoriert. Ein gutes Beispiel
861
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
für solch ein Master-Installationsskript ist die Datei unpack.ins aus der Basisdistribution von LaTEX – abgesehen von der Tatsache, dass sie zu Beginn speziellen „handgemachten“ Programmcode enthält, der dafür sorgt, dass sie mit initex bearbeitet werden kann. Einrichten von Vor- und Nachspann Wie bereits erwähnt, schreibt docstrip nicht nur die ausgewählten Programmzeilen in die Ausgabedateien, sondern stellt ihnen auch eine Präambel voran und schließt jede Datei mit einem Nachspann ab. Für beide Operationen gibt es Standardtexte, aber in der Regel definiert ein docstrip-Skript explizit, was an diesen Stellen verwendet werden soll, z.B. ein Urheberrechtsverweis oder die Rechtsverzichtserklärung (siehe auch [108]).
\preamble !textzeilen"
\endpreamble
\postamble !textzeilen"
\endpostamble
Die Information, die am Anfang der docstrip-Ausgabedatei hinzugefügt werden soll, sollte zwischen den Befehlen \preamble und \endpreamble stehen. Die Zeilen, die am Ende hinzugefügt werden sollen, sollten zwischen den Befehlen \postamble und \endpostamble stehen. Alles, was docstrip für Präambel und den Nachspann findet, wird in die Ausgabedatei geschrieben, wobei zwei %-Zeichen vorangestellt werden (oder, genauer gesagt, die aktuelle Definition des Befehls \MetaPrefix ). Im Allgemeinen sollte nur reiner Text verwendet werden. Möglicherweise vorkommende Befehlsnamen, die wortwörtlich ausgegeben werden sollen, gibt man am besten in der Form \string\foo ein. Neben der Anwenderpräambel fügt docstrip auch Informationen über die aktuelle Datei (d.h. ihr Name und die Quelldateien, aus denen sie generiert wurde) hinzu. Diese Information wird immer hinzugefügt, es sei denn, \nopreamble wird verwendet (siehe unten), oder man weicht von dem Standardverfahren zur Erstellung der Präambel ab (erläutert in der Dokumentation des docstrip-Paketes [121]). Es besteht auch die Möglichkeit, eine Anzahl von „benannten“ Präambeln zu definieren und später beim Erstellen von Dateien auf diese zu verweisen. In der Tat ist dies die übliche Vorgehensweise, um Präambeln in größeren Projekten zu erzeugen.
\declarepreamble\befehl !text" \endpreamble \usepreamble\befehl \declarepostamble\befehl !text" \endpostamble \usepostamble\befehl Die Deklaration \declarepreamble funktioniert wie \preamble, mit der Ausnahme, dass sie den Präambeltext zur späteren Verwendung im \befehl speichert. Diese Präambel wird aktiviert, indem \usepreamble in einem docstrip-Skript aufgerufen wird. Für den Nachspann gibt es die Deklarationen \declarepostamble und \usepostamble. Beispiele finden sich in allen docstrip-Installationsskripts in den Distributionen der LaTEX-Standardkomponenten.
862
14.2 docstrip.tex – Lauffähigen Code erzeugen
\nopreamble
\nopostamble
Die Erstellung einer Präambel oder eines Nachspanns kann mit den Deklarationen \nopreamble bzw. \nopostamble unterdrückt werden.
14.2.3 Installationsunterstützung und Konfiguration Vor ein paar Jahren entschied sich die TEX-Anwendergemeinde für eine Standardverzeichnisstruktur für TEX-Installationen (TEX Directory Structure, TDS), die für alle Plattformen ausgelegt ist, für welche TEX und LaTEX verfügbar sind [165]. Seither wurde dieser Standard bis zu dem Stand weiterentwickelt, der heute von den meisten TEX-Distributionen verwendet wird. Um die Integration neuer Pakete in eine TDS-konforme Installation zu erleichtern oder um Paket-Upgrades zu installieren, wurde das docstripProgramm erweitert, so dass es unter bestimmten Umständen angewiesen werden kann, die generierten Dateien automatisch an den richtigen Stellen in dieser Struktur zu installieren. Damit dies funktioniert, müssen die docstripSkripte bestimmte Anweisungen enthalten. Zusätzlich muss der Anwender das docstrip-Programm konfigurieren, indem er eine docstrip.cfg-Datei bereitstellt, die für die Installation auf dem aktuellen System geeignet ist.
\usedir{relativer-verzeichnispfad } Entwickler eines docstrip-Skripts haben noch eine kleine Zusatzaufgabe: Für jede generierte Datei muss ihre Position im TDS-Verzeichnisbaum bekannt sein, bzw. definiert werden. Diese Information wird im docstrip-Skript direkt vor dem Aufruf des \generate-Befehls oder im Argument von \generate vor der nächsten \file-Deklaration mit \usedir in Form eines Verzeichnispfades angegeben, und zwar relativ zum TDS-Stammverzeichnis. Zum Beispiel gibt die Datei format.ins in der Standarddistribution von LaTEX an:
\usedir{tex/latex/base} \generate{\file{latex.ltx}{\from{ltdirchk.dtx}{initex,2ekernel,dircheck} \from{ltplain.dtx}{2ekernel} ...} \file{tracefnt.sty}{\from{ltfsstrc.dtx}{package,trace}} \file{flafter.sty}{\from{ltoutput.dtx}{flafter}} ...} Dadurch wird die LaTEX-Formatdatei (und andere) im korrekten Verzeichnis platziert. In komplexeren Paketen müssen Dateien möglicherweise, je nach ihrem Typ, auf verschiedene Verzeichnisse verteilt werden. So enthält beispielsweise das Installationsskript für das jurabib-Paket folgende Anweisungen:
\generate{ \usedir{tex/latex/jurabib} \file{jurabib.sty}{\from{jurabib.dtx}{package}} \file{dejbbib.ldf}{\from{jurabib.dtx}{german}} ... \usedir{bibtex/bst/jurabib} \file{jurabib.bst}{\from{jurabib.dtx}{jurabst}}
863
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
... \usedir{doc/latex/jurabib} \file{jbtest.tex}{\from{jurabib.dtx}{test}} ... } Damit werden die Dateien, die von LaTEX benötigt werden, in tex/latex/ jurabib generiert, die BIBTEX-Stile in bibtex/bst/jurabib, Testdokumente in doc/latex/jurabib usw. Die \usedir-Deklaration an sich hat noch keine Auswirkung: docstrip erzeugt Dateien immer noch ausschließlich im aktuellen Verzeichnis. Um docstrip zu ermöglichen, solche \usedir-Deklarationen zu nutzen, muss man ihm eine Konfigurationsdatei (docstrip.cfg) zur Verfügung stellen, die eine Deklaration für das Stammverzeichnis des Zielsystems enthält sowie eine Reihe von Übersetzungen in lokale Verzeichnisnamen für die Pfade, die im Argument von \usedir angegeben werden.
\BaseDirectory{verzeichnis} \DeclareDir{usedir-pfad }{lokale-übersetzung} Die Deklaration \BaseDirectory gibt den absoluten Pfad zum Stammverzeichnis der TEX-Installation an; weitere Pfade werden dann relativ zu diesem Verzeichnis angegeben. Zusätzlich muss für jeden verwendeten relativenverzeichnispfad im Argument von \usedir eine Übersetzung in lokale Verzeichnisnamen angegeben werden. Um docstrip beispielsweise die von der emTEX-Distribution verwendete Verzeichnisstruktur beizubringen, ist es möglicherweise nötig, eine Reihe von Deklarationen anzugeben, etwa:
\BaseDirectory{c:/emtex} \DeclareDir{tex/latex/base}{texinputs/latex} \DeclareDir{tex/latex/jurabib}{texinputs/latex} Sobald docstrip das \BaseDirectory kennt, versucht es, alle \usedirDeklarationen in seinen Skripten zu interpretieren. Wenn es eine Deklaration findet, für die es keine Übersetzung in lokale Verzeichnisnamen kennt (durch \DeclareDir ), gibt es eine Meldung aus und erstellt die Datei stattdessen im aktuellen Verzeichnis. Man sollte dann eine passende Deklaration in der .cfg-Datei hinzufügen. Manchmal ist es notwendig, einige Dateien außerhalb des Basisverzeichnisses abzulegen, z.B. wenn sich das BIBTEX-Programm auf einer anderen Festplatte befindet. In diesem Fall sollte man die Sternform von \DeclareDir verwenden, die als zweites Argument einen absoluten Pfadnamen erwartet. Ein Beispiel:
\DeclareDir*{bibtex/bst/jurabib}{d:/bibtex/bst} Installationsverzeichnisse müssen vorhanden sein
864
Da TEX keine neuen Verzeichnisse generieren kann, ist es unbedingt erforderlich, dass alle lokalen Verzeichnisse, die mit \DeclareDir angegeben werden, tatsächlich existieren. Wenn bei Ausführung eines docstrip-Skripts
14.2 docstrip.tex – Lauffähigen Code erzeugen
ein Verzeichnis nicht vorhanden ist, wird eine TEX-Fehlermeldung ausgegeben, die besagt, dass in eine bestimmte Datei nicht geschrieben werden kann und eine andere angegeben werden muss. Auf einem vollständig TDS-konformen System funktioniert die Übersetzung in lokale Verzeichnisnamen problemlos. Zum Beispiel weisen die folgenden Deklarationen docstrip an, die Dateien nicht im Hauptverzeichnisbaum, sondern in einem lokalen TDS-Verzeichnisbaum (hier texmf-local) zu installieren:
\BaseDirectory{/usr/local/lib/texmf-local} \DeclareDir{tex/latex/base}{tex/latex/base} \DeclareDir{tex/latex/jurabib}{tex/latex/jurabib} \DeclareDir{bibtex/bst/jurabib}{bibtex/bst/jurabib} In diesem Fall sollte man sicherstellen, dass der lokale Baum zuerst durchsucht wird.
\UseTDS Um die Konfiguration zu vereinfachen, die zur Beschreibung einer TDSkonformen Installation notwendig ist, bietet docstrip die Deklaration \UseTDS . Diese weist das Programm an, den \usedir-Befehl wortwörtlich zu verwenden, wenn keine explizite \DeclareDir-Deklaration angegeben ist. Daher reicht es bei den meisten Installationen aus, in der .cfg-Datei eine \UseTDS- und eine \BaseDirectory-Deklaration anzugeben. Standardmäßig erstellt docstrip Dateien nur im aktuellen Arbeitsverzeichnis. Auch wenn eine Konfigurationsdatei angegeben ist, die eine Überlegungen zur \BaseDirectory-Deklaration enthält, schreibt es nur in Verzeichnisse, die Sicherheit explizit mit \DeclareDir angegeben werden, oder, wenn \UseTDS verwendet wird, in die entsprechenden TDS-Verzeichnisse unterhalb des eigenen Basisverzeichnisses. An anderen Stellen überschreibt es Dateien nicht, auch wenn es (heute, zu Zeiten von Viren und anderen hässlichen Kreaturen) klar sein sollte, dass TEX an sich dazu in der Lage ist und daher ein Sicherheitsrisiko darstellen könnte. Tatsächlich lassen es einige Installationen (z.B. jene auf der TEX Live CD) nicht zu, dass TEX in Dateien mit absoluten Pfadnamen oder Dateien schreibt, die mit einem Punkt beginnen, es sei denn, dass dies explizit erlaubt wurde. Auf dem System des Autors muss man beispielsweise Folgendes angeben
openout_any=r latex jurabib.ins um die docstrip-Funktionen für die automatische Installation nutzen zu können.
\maxfiles{zahl }
\maxoutfiles{zahl }
Es gibt zwei weitere Deklarationen, die man einer docstrip-Konfigurationsdatei hinzufügen kann. Auf einigen Betriebssystemen gibt es eine Beschränkung, was die Anzahl der Dateien angeht, die von einem Programm geöffnet werden können. Wenn dies der Fall ist, kann man mit einer \maxfiles-
865
14
DOKUMENTIEREN EIGENER LATEX-PAKETE
Deklaration die Gesamtanzahl an geöffneten Dateien und mit \maxoutfiles die Gesamtanzahl an gleichzeitig geöffneten Ausgabedateien begrenzen (für letztere hat TEX selbst eine Begrenzung von 16). Diese Deklarationen sollten nur verwendet werden, wenn es nötig ist.
14.2.4 Verwendung mit anderen Programmiersprachen Mit einigen Einschränkungen ist es möglich, die docstrip-Funktionen zu verwenden, um Dateien, die nicht für eine TEX-Installation gedacht sind, zu erstellen und zu verteilen. Man sollte jedoch nicht vergessen, dass docstrip beim Lesen der Quelldatei zeilenweise arbeitet. Eine Aktion wie das Entpacken einer Binärdatei kann daher nur zu unbrauchbaren Dateien führen. Des weiteren ist es wahrscheinlich, dass Präambeln und Nachspann mit Ändern der den Syntaxanforderungen der Sprache kollidieren, für welche die Datei geKommentarzeichen dacht ist. Die Erstellung eines Shellskripts mit mehreren Zeilen, die mit %% beginnen, ist eher nicht empfehlenswert. Dieses Problem kann umgangen werden, indem man \MetaPrefix ändert (der standardmäßig \DoubleperCent erzeugt). Bei einem Shellskript, in dem wahrscheinlich das #-Zeichen als Kommentarzeichen verwendet wird, kann diese Veränderung etwas heikel sein, weil TEX # als Sonderzeichen betrachtet. Eine Möglichkeit, ein einzelnes HashZeichen als ein \MetaPrefix zu erzeugen, zeigt folgendes Beispiel:
\renewcommand\MetaPrefix{\string##} Zur Standardeinstellung kehrt man mit der folgenden Definition zurück:
\renewcommand\MetaPrefix{\DoubleperCent} Unverändert kopieren
Ein weiteres potentielles Problem, auf das man achten muss, sind Zeilen, die mit einem einzelnen Prozentzeichen beginnen; diese entfernt docstrip standardmäßig. Manchmal möchte man diese Zeilen aber erhalten. Dies lässt sich erreichen, indem man den entsprechenden Block in zwei spezielle Zeilen einschließt, und zwar folgendermaßen:
%\romen {page} \@oddfoot ->\reset@font \hfil \thepage \hfil \@outputpage ...lor \hb@xt@ \textwidth {\@thefoot }\color@endbox }}\globa...
7 8 9
\@opcol ...lumn \@outputdblcol \else \@outputpage \fi \global \@mparbotto...
10 11
...specialoutput \else \@makecol \@opcol \@startcolumn \@whilesw...
12 13 14 15 16
D l.33 D ieser Beispieltext soll die Seite füllen. Diese Meldung ist von unten nach oben zu lesen: LaTEX hat das D gesehen (Zeile 15 und 16), vermerkt jedoch, dass diese Stelle noch einmal gelesen werden muss (, Zeile 13 und 14), da mittlerweile auf die Ausgaberoutine umgeschaltet wurde. Dort gelangte das Programm bis zum Ausführen des Befehls \@opcol (Zeile 11 und 12), welcher wiederum den Befehl \@outputpage aufrief (Zeile 9 und 10), der seinerseits den Befehl \@thefoot ausführte (Zeile 6 und 7). Zeile 4 ist etwas seltsam, da sie sich überraschenderweise auf \@oddfoot anstatt auf \@thefoot bezieht. Letzterer Befehl expandiert jedoch zu \@oddfoot, so dass er sofort vollständig verarbeitet wird und gar nicht erst auf dem Stapel teilweise expandierter Makros landet. Innerhalb von \@oddfoot gelangte LaTEX bis zum Aufruf des Befehls \thepage , der seinerseits zu \romen erweitert wurde (Zeile 2 und 3). Und diesen Befehl bemängelt das Programm dann schließlich als nicht definiert (Zeile 1). Glücklicherweise reicht es meistens, die Fehlermeldung und die Quellcodezeile anzuzeigen. Darum ist der Zähler errorcontextlines in LaTEX auf -1 voreingestellt, was bedeutet, dass kein weiterer Kontext angezeigt wird.
926
B.1 Fehlermeldungen
Es kann auch zu Fehlern kommen, wenn LaTEX eine Hilfsdatei verarbeitet, die dazu dient, Informationen von einem LaTEX-Lauf zum nächsten zu übertra- ! Hartnäckige Fehler gen (z.B. .aux- oder .toc-Dateien). Die Daten in einer solchen Datei können aufgrund eines früheren LaTEX-Laufs fehlerhaft sein. Selbst wenn der entsprechende Fehler in der Quelldatei bereits behoben ist, können immer noch Spuren davon in solchen externen Dateien verblieben sein. Manchmal muss man sie daher löschen, bevor man LaTEX erneut ausführt. Oftmals verschwinden die Probleme jedoch bereits nach einem weiteren Durchgang. Eine beliebte Quelle für derart hinterhältige Fehler in LaTEX sind die so genannten zerbrechlichen Befehle, sofern diese ungeschützt in bewegten Ar- ! Fehler aufgrund zerbrechlicher gumenten verwendet werden. Technisch gesehen ist ein bewegtes Argument Befehle a ein Argument, das L TEX intern expandiert, ohne es direkt zu setzen (z.B. mithilfe des internen LaTEX-Befehls\protected@edef1 ). Als Faustregel kann man sich merken, dass ein solches Argument vor dem Setzen an eine andere Stelle bewegt wird. Dies trifft z.B. auf folgende Fälle zu: Argumente von Gliederungsbefehlen wie \section, die ins Inhaltsverzeichnis verschoben werden; das Argument des \caption-Befehls, der in das Abbildungs- oder Tabellenverzeichnis gelangt; die Argumente von \markboth und \markright . Eine gute, wenn auch nicht wirklich hilfreiche, Definition eines zerbrechlichen Befehls ist die Folgende: Er erzeugt einen Fehler, wenn ihm in einem bewegten Argument kein \protect-Befehl vorangeht. Mittlerweile sind die meisten LaTEX-Befehle robust, so dass ein solcher Schutz selten notwendig ist. Erhält man jedoch eine seltsame Fehlermeldung von einem Befehl, der in einem bewegten Argument steht, dann sollte man einfach versuchen, ihm ein \protect voranzustellen. Zentrale LaTEX-Befehle mit optionalen Argumenten sind üblicherweise zerbrechlich. Der Befehl \sqrt[3]{-1} ist jedoch robust, genau wie alle benutzerdefinierten Befehle mit einem optionalen Argument. Andererseits ist \[ . . . \] zerbrechlich, wird jedoch robust, sobald man das amsmath-Paket geladen hat. Mit anderen Worten: Es gibt keine genauen Regeln dafür, zu welcher Kategorie ein Befehl gehört. Benutzerdefinierte Befehle mit obligatorischen Argumenten sind immer dann zerbrechlich, wenn ihre Definition zerbrechliche Befehle enthält. So ist beispielsweise die folgende Definition zerbrechlich:
\newcommand\frail{\ifthenelse{\value{section} , \+ , \- oder \< auf eine Tabulatorposition vorzurücken, die nicht zuvor mit \= eingerichtet wurde. Entweder fehlt wirklich der \=-Befehl, oder vielleicht hat man \+ oder \pushtabs verwendet und ist dann bei der Angabe der Tabulatorposition, zu der man eigentlich vorrücken wollte, durcheinander geraten.
Unknown graphics extension: !ext"
graphics/graphicx
Unbekannte Graphikerweiterung: !erw"
Diesen Fehler erhält man, wenn man versucht, eine Graphikdatei mit der Erweiterung !erw" mit vollem Namen zu laden, wenn diese Erweiterung dem Graphiktreiber nicht bekannt und auch keine Verfahrensregel für einen solchen Fall vorgegeben ist. Das Programm dvips beispielsweise interpretiert jede unbekannte Erweiterung als EPS, so dass diese Fehlermeldung bei diesem Treiber nicht auftreten wird – dafür aber wahrscheinlich andere.
Unknown option ‘!option"’ for package ‘!name"’ Unbekannte Option „!option"“ für Paket „!name"“
Für das Paket !name" wurde eine !option" angegeben, die von diesem Paket nicht deklariert wird. Die verfügbaren Optionen können in der Paketdokumentation nachgeschlagen werden.
Use of !command" doesn’t match its definition
TEX
Verwendung von !befehl" passt nicht zu seiner Definition
Low-Level-Definitionen für Makros, die mit \def anstelle von \newcommand und dessen Verwandten vorgenommen werden, verwenden manchmal besondere Begrenzungszeichen für ihre Argumente (wie etwa (..) bei den Bildbefehlen). Handelt es sich bei !befehl" um einen LaTEX-Befehl, so sollte man seine Syntax überprüfen. Andernfalls liegt hier wahrscheinlich eine irreführende Fehlermeldung vor, die daher rührt, dass man in einem bewegten Argument einen zerbrechlichen Befehl ohne \protect verwendet hat. 953
B
FINDEN UND LÖSEN VON PROBLEMEN
\usepackage before \documentclass \usepackage vor \documentclass Die \usepackage-Deklaration darf erst verwendet werden, wenn man die Hauptklasse mit \documentclass geladen hat. Innerhalb einer Klassendatei muss man stattdessen den Befehl \RequirePackage verwenden1 .
UTF-8 string \u8:!8-bit-sequence" not set up for LaTeX use
inputenc
Der UTF-8-String \u8:!8-Bit-Zeichenfolge" ist für LATEX nicht eingerichtet
Das mit UTF-8 !8-Bit-Zeichenfolge" benannte Unicode-Zeichen ist LaTEX unbekannt. Sofern es in einer im Dokument benutzten Fontkodierung verfügbar ist, muss es zunächst mithilfe der \DeclareUnicodeCharacterDeklaration eingerichtet werden (siehe Abschnitt 7.11.3 auf Seite 456).
\verb ended by end of line \verb durch Zeilenende beendet Damit Fehler leichter ersichtlich sind, muss das Argument des Befehls \verb in einer einzigen Zeile stehen. Dieser Fehler zeigt also entweder an, dass man das schließende Begrenzungszeichen des Argumentes vergessen hat, oder dass das Argument in der Quelle auf mehrere Zeilen umbrochen wurde. Bei sehr langen Argumenten kann es helfen, diese auf mehrere \verb-Befehle zu verteilen und Zeilenumbrüche in der Quelldatei gegebenenfalls mit einem %-Zeichen zu maskieren.
\verb illegal in command argument \verb im Befehlsargument unzulässig Abgesehen von ganz besonderen Umständen (die in diesem Buch ausdrücklich erwähnt werden), darf der Befehl \verb (ebenso wie verbatim) nicht in Argumenten anderer Befehle vorkommen. Wortwörtliche Ausgabe an solchen Stellen erzielt man beispielsweise mithilfe von \SaveVerb und \UseVerb des in Abschnitt 3.4.3 beschriebenen Paketes fancyvrb.
You already have nine parameters
TEX
Es sind bereits neun Argumente vorhanden
LaTEX unterstützt Umgebungs- beziehungsweise Befehlsdefinitionen mit höchstens neun Argumenten. Der vorliegende \newenvironment- oder \newcommand-Befehl verfügt aber über zehn oder mehr.
You can’t use ‘macro parameter #’ in !some" mode
TEX
Der „Makroparameter #“ ist in Modus !modus" nicht zulässig
TEX ist irgendwo auf ein einzelnes #-Zeichen gestoßen, das nicht auf ein Argument eines Befehls zu verweisen scheint. Zum Setzen dieses Zeichens muss man den Befehl \# verwenden.
You can’t use ‘\spacefactor’ in vertical mode
TEX
Der \spacefactor-Befehl lässt sich nicht im vertikalen Modus verwenden
TEX erlaubt nur beim Erstellen horizontaler Listen Verweise auf den Befehl \spacefactor . Man erhält diesen Fehler, wenn man den LaTEX-Befehl 1 Rein technisch ist es zwar möglich ein Paket mithilfe von \RequirePackage vor einer Klasse zu laden, man sollte es jedoch vermeiden, solange man nicht ganz genau weiß, was man da tut.
954
B.1 Fehlermeldungen
\@ außerhalb eines Absatzes benutzt. Da viele interne Befehle mit einem @ im Namen beginnen, kann dieser Fehler auch auftreten, wenn man solche Befehle (wie etwa \@startsection ) in der Dokumentenpräambel benutzt, ohne sie zwischen \makeatletter und \makeatother zu setzen. In diesem Falle sieht TEX ein \@, dem die Buchstaben startsection folgen. Bei der späteren Verwendung dieses Programmcodes wird dann der Befehl \@ ausgeführt, wodurch wiederum diese Fehlermeldung auftritt.
You can’t use ‘\prevdepth’ in horizontal mode
TEX
Die Länge „\prevdepth“ kann nicht im horizontalen Modus verwendet werden
Die Länge \prevdepth lässt sich nur im vertikalen Modus (also zwischen Absätzen) verwenden.
You can’t use ‘\end’ in internal vertical mode
TEX
Der Befehl \end ist im internen vertikalen Modus nicht zulässig
Hier handelt es sich um eine der eher irreführenden Fehlermeldungen, da sie sich auf den TEX-Basisbefehl beruft, der einen TEX-Lauf beendet. Dieser wurde von LaTEX als Ende-Tag für Umgebungen umdefiniert. Der Fehler weist eigentlich darauf hin, dass die LaTEX-Anweisung \end{document} oder der Befehl \stop angetroffen wurde, während LaTEX gerade eine Box aufbaute. Er würde zum Beispiel durch \begin{figure}...\stop hervorgerufen.
You can’t use ‘!command"’ in !some" mode
TEX
!befehl" ist in Modus !modus" nicht zulässig
TEX reklamiert, dass der fragliche !befehl" in einem seiner Modi nicht zulässig ist. Einige spezielle Varianten dieses Themas wurden bereits besprochen. Falls der !befehl" nicht direkt verwendet wurde, ist die Ursache sehr wahrscheinlich ein zerbrechlicher Befehl in einem bewegten Argument.
You haven’t defined output directory for ‘!path"’
docstrip
Für „!pfad"“ wurde kein Ausgabeverzeichnis definiert
Die Konfigurationsdatei docstrip.cfg enthält eine \BaseDirectoryDeklaration, aber für den internen !pfad" im docstrip-Skript liegt keine Übersetzung in ein lokales Verzeichnis vor. Mithilfe eines der Befehle \DeclareDirectory oder \UseTDS lässt sich in der Datei docstrip.cfg eine entsprechende Übersetzung festlegen. Das Verfahren ist in Abschnitt 14.2.3 auf Seite 863 beschrieben.
You haven’t defined the language !language" yet
babel
Die Sprache !sprache" wurde noch nicht definiert
Verschiedene Befehle der Benutzerschnittstelle des babel-Paketes überprüfen, ob es sich bei ihrem Argument um eine Sprache handelt, die beim Laden von babel in der Optionsliste enthalten war. War die betreffende !sprache" dort nicht aufgeführt, dann wird die Verarbeitung gestoppt und diese Fehlermeldung erscheint.
You haven’t specified a language option
babel
Es wurde keine Sprachoption angegeben
Diese Meldung wird angezeigt, wenn für das babel-Paket keine bekannte 955
B
FINDEN UND LÖSEN VON PROBLEMEN
Sprache angegeben wurde – also weder in der babel-Optionsliste noch in der Liste der globalen Optionen. Die Ursache ist normalerweise ein Schreibfehler. Es ist jedoch zu erwarten, dass bei der Verarbeitung des Dokumentes noch viele weitere Fehler auftreten.
B.1.1 Tod durch zu wenig Speicher Das TEX-Programm enthält eine Reihe interner Tabellen mit fester Größe, die dem Speichern von zur Laufzeit benötigten Daten dienen. Sobald eine dieser Tabellen überläuft, unterbricht LaTEX die Verarbeitung mit der Fehlermeldung „TeX capacity exceeded“ (TEX-Kapazität überschritten). Bis Mitte der 90er konnten Speicherprobleme tatsächlich durch die Größe eines Dokumentes hervorgerufen werden. In manchen Fällen ließ sich ein Dokument nicht als Ganzes verarbeiten.1 Diese Begrenzungen gibt es heute nicht mehr oder zumindest nicht mehr in diesem Maße. Zum einen sind durchschnittliche TEX-Installationen heutzutage bereits mit sehr großzügigen Tabellen ausgestattet; zum anderen lassen sich die Tabellengrößen der meisten Versionen über Konfigurationsdateien ändern, ohne dass man TEX manuell neu kompilieren müsste. In einigen Fällen muss man möglicherweise ein neues LaTEX-Format erzeugen; genaueren Aufschluss hierüber bietet die Dokumentation der verwendeten TEX-Distribution.2 Trotzdem begegnet man diesem hässlichen Fehler hin und wieder, normalerweise aufgrund einer fehlerhaften Befehlsdefinition. Es folgen vier Kandidaten, die zum Besprechen des vorliegenden Themas auf das Wesentliche reduziert wurden. In der Praxis lauern derartige Probleme gewöhnlich in eher komplexeren Definitionen.
\newcommand\FAILa{.\FAILa} \newcommand\FAILb{\FAILb x} \newcommand\FAILc{\typeout{.}\FAILc} \newcommand\FAILd{.\par\FAILd} Führt man \FAILa wie in diesem Beispiel definiert aus, dann erhält man nach kurzer Zeit die folgende Ausgabe (die Größe des gemeldeten Speichers kann dabei unterschiedlich sein):
! TeX capacity exceeded, sorry [main memory size=1500001]. \FAILa ->. \FAILa Der Hauptspeicher (main memory) ist der Teil von TEX, in dem Makrodefinitionen und das Material für die aktuelle Seite abgelegt sind. Ein Blick auf die zuvor formulierte rekursive Definition macht deutlich, dass diese eine unendliche Folge von Punkten erzeugt. Da der Absatzumbruch zurückgestellt 1 Die erste Ausgabe diese Buches erforderte eine speziell kompilierte T X-Version, bei der E alle derartigen Tabellen auf das 10fache vergrößert waren, und konnte nur auf einer großen UNIX-Workstation verarbeitet werden. 2 Die diesem Buch beiliegende T X Live-Distribution ermöglicht eine Änderung der meisE ten Tabellengrößen mithilfe der Konfigurationsdatei texmf.cnf . Das TEX Live-Handbuch enthält nähere Einzelheiten hierzu.
956
B.1 Fehlermeldungen
wird, bis TEX auf einen \par-Befehl oder eine Leerzeile stößt, um die Zeilenumbrüche global optimieren zu können, wartet TEX hier vergebens auf eine Gelegenheit, das Absatzmaterial in Zeilen zu umbrechen. Ein nicht ausreichender Speicher aufgrund zu zahlreicher Makrodefinitionen ist heutzutage eher unwahrscheinlich. Trotzdem kann es (theoretisch) auch dazu kommen, wenn dieser Speicher klein ist und man viele Pakete lädt, eine Vielzahl von größeren Gleitobjekten aufgelaufen ist oder man Makropakete1 verwendet, die ihrerseits im laufenden Betrieb neue Makros erzeugen. Ein solcher Fall liegt möglicherweise vor, wenn der Fehler nur bei größeren Dokumenten auftritt und LaTEX die Arbeit erst nach einigen Seiten einstellt. Dann kann man mithilfe des Befehls \tracingstats=2 in der Dokumentenpräambel prüfen, ob der Speicherbedarf plötzlich rapide ansteigt oder sich der Speicher allmählich füllt. Letzteres würde auf ein Problem mit der Tabellengröße hindeuten. TEX meldet dann nach jeder erstellten Seite den Hauptspeicherstatus mit in etwa folgender Ausgabe:
[765] Memory usage before: 4262&161788; after: 1286&157691; still untouched: 1323176 [766] Memory usage before: 3825&160983; after: 636&156520; still untouched: 1323176 [767] Memory usage before: 3652&160222; after: 771&156307; still untouched: 1323176 Die gemeldete Zahl links des &-Zeichens gibt den Speicher an, der großen Objekten wie etwa Boxen gewidmet ist; die Zahl rechts nennt den von Makrodefinitionen und Zeichendaten verbrauchten Speicher. Man sollte also erwarten, dass beide Werte kleiner werden, sobald eine Seite fertig gestellt ist (also die jeweiligen after:-Werte). Wird der Wert rechts jedoch allmählich immer größer, dann fügt wahrscheinlich irgendetwas immer mehr Definitionen hinzu. Mit \FAILb wird eine andere Tabelle überfüllt. Hier erfolgt die Rekursion, bevor LaTEX das Makro vollständig expandiert hat, so dass der noch nicht verarbeitete Teil der Expansion gespeichert werden muss.
! TeX capacity exceeded, sorry [input stack size=1500]. \FAILb ->\FAILb x Aufgrund der Größe heutiger Stapelspeicher für die Eingabe (input stacks) erfolgt diese Fehlermeldung gewöhnlich nur, wenn eine Rekursion wie die hier definierte dafür sorgt, dass der Stapel mit beängstigender Geschwindigkeit wächst. In normalen LaTEX-Dokumenten stößt man selten auf verschachtelte Definitionen, die diesen Stapel auf einen Wert über 50 wachsen lassen (der Maximalwert für dieses Buch betrug 35). Was geschieht, wenn man \FAILc oder \FAILd ausführt? Beide ähneln \FAILa, bringen jedoch keine interne TEX-Tabelle zum Überlaufen. Stattdessen schreiben beide einfach die Festplatte voll. Die einzige Aktivität von 1 Das Paket varioref beispielsweise definiert intern zwei Label für jeden benutzten \vrefBefehl. In umfangreichen Dokumenten kann dies zu einem erheblichen Speicherverbrauch führen.
957
B
FINDEN UND LÖSEN VON PROBLEMEN
\FAILc besteht darin, Punkte auf dem Bildschirm und in der Protokolldatei anzuzeigen, so dass die Festplatte ganz allmählich mit einer riesigen Protokolldatei gefüllt wird. Die Definition von \FAILd hingegen enthält einen \parBefehl, so dass hier Absätze gesetzt werden können (die jeweils aus einem einzelnen Punkt bestehen). Dadurch werden in schneller Folge Absätze erzeugt. Ein solches Experiment auf dem Computer des Verfassers endete mit einem 22279 Seiten langen Dokument und der folgenden Meldung:
tex: fwrite: No space left on device Auf dem eigenen Rechner ist das eigentlich einfach nur ärgerlich und lässt sich schnell beheben. Auf Systemen mit gemeinsam genutzten Ressourcen sollte man jedoch sehr vorsichtig sein, wenn man LaTEX unbeaufsichtigt arbeiten lässt. Ein Fehler dieser Art hat einmal einen Studenten ziemlich hart getroffen: Er verarbeitete ein solches Dokument als Batchjob ohne Zeit- oder Größenbegrenzung auf einem Großrechner und erhielt daraufhin für die Verarbeitungszeit auf dem Computer eine Rechnung über mehrere tausend Dollar. Im Prinzip können noch einige andere interne Tabellen überlaufen. Im Folgenden werden die noch nicht besprochenen Tabellen aufgeführt, mit einer Erklärung, wodurch ein Überlauf am ehesten ausgelöst werden könnte. Einige weitere Informationen lassen sich in [87, S. 300] nachlesen.
buffer size (Puffergröße) die Zeichen der Zeilen, die aus einer Datei gelesen werden; da der vorgegebene Wert normalerweise ziemlich hoch ist, liegt ein Überlauf am ehesten an Zeilenumbrüchen, die bei der fehlerhaften Konvertierung einer Datei von einem Betriebssystem zu einem anderen verloren gegangen sind. Ein Pufferüberlauf kann auch von einigen Textverarbeitungsprogrammen auf PCs verursacht werden, die intern einen ganzen Absatz in eine einzelne Zeile schreiben, auch wenn der Text auf dem Bildschirm in mehrere Zeilen umbrochen erscheint.
exception dictionary (Ausnahmewörterbuch) die Anzahl der mithilfe von \hyphenation festgelegten Ausnahmeregelungen für die Silbentrennung; in LaTEX sind einige Ausnahmen für die englische Sprache definiert und einige Sprachpakete legen weitere Ausnahmen fest. Um diese Tabelle zum Überlaufen zu bringen, muss man allerdings schon sehr gründlich sein.
font memory (Zeichensatzspeicher) die von LaTEX geladenen Fontmetrikdaten; heutzutage ist ein Überlauf dieser Tabelle äußerst unwahrscheinlich. Sollte es trotzdem dazu kommen, dann hat LaTEX zu viele Fonts geladen – wahrscheinlich, weil viele unterschiedliche Schriftgrade verwendet wurden und LaTEX für all diese Größen Mathematikfonts berechnet und geladen hat. Soweit möglich sollte man hier die Tabelle vergrößern. Oder man kann in Kapitel 7 nachlesen, wie sich die Anzahl der Fonts verringern lässt.
grouping levels (Gruppierungsebenen) die Anzahl nicht beendeter Gruppen, welche den Geltungsbereich für das Setzen von Parametern, Definitionen und anderen Elementen begrenzen; dazu gehören etwa geschweifte Klammern, der Beginn von Umgebungen oder Begrenzungen für den
958
B.1 Fehlermeldungen
Formelmodus. Ein Überlauf an dieser Stelle deutet normalerweise auf einen Programmierfehler hin (wie z.B. auf eine Definition, die mehr Gruppen öffnet, als sie schließt). Es ist manchmal schwierig, diese Art von Fehlern zu finden. Eine gute Unterstützung bietet hier das Programm eTEX1 mit dem Befehl \showgroups, der eine Liste der verschachtelten Gruppen anzeigt, beginnend mit der Innersten. Platziert man ihn beispielsweise in der Fußnote auf der aktuellen Seite, so erzeugt er folgende Meldung:
### ### ### ###
semi simple group (level 3) entered at line 2955 (\begingroup) insert group (level 2) entered at line 2955 (\insert0{) semi simple group (level 1) entered at line 2921 (\begingroup) bottom level
Die Meldung „semi simple group on level 1“ rührt daher, dass dieser Text in einer description-Umgebung gesetzt ist (der Befehl \begin ruft intern einen \begingroup-Befehl auf). Der \footnote-Befehl wird mithilfe des TEX-Basisbefehls \insert ausgeführt, der die zweite Ebene („level 2“) beiträgt. Tatsächlich erzeugt der Befehl \footnote noch eine weitere Gruppe („level 3“), durch die sichergestellt wird, dass sich Farbänderungen nur lokal auswirken. Dieses Beispiel zeigt, dass die Beziehungen zwischen den Dokumentenbefehlen auf der oberen Ebene und den internen Gruppen alles andere als offensichtlich oder einfach sind. Die Zeilennummern, welche den Beginn der jeweiligen Gruppe anzeigen, sind jedoch durchaus hilfreich, da weitreichende Gruppen eher selten sind. Alternativ bietet eTEX den internen Zähler \tracinggroups . Hat dieser Zähler einen positiven Wert, so werden der Beginn und das Ende von Gruppen in der Protokolldatei nachgehalten; wenn auch der Befehl \tracingonline einen positiven Wert hat, erscheinen die Daten zusätzlich auf dem Bildschirm.
hash size (Hash-Größe) die Anzahl der TEX bekannten Befehlsnamen; die meisten Pakete bringen eine feste Anzahl an Befehlsnamen mit sich. Jedoch erzeugt jeder \label- oder \bibitem-Befehl in einem Dokument einen neuen internen Befehlsnamen. Pakete (wie z.B. varioref), die intern den \label-Befehl verwenden, können in großen Dokumenten also erheblich dazu beitragen, dass diese Tabelle aufgefüllt wird.
number of strings (Anzahl der Strings) die Anzahl der Zeichenfolgen – Befehlsnamen, Dateinamen und eingebaute Fehlermeldungen –, die TEX sich merken muss; in manchen Fällen kann TEX nicht mehr benötigten Platz wieder frei geben, aber normalerweise bleiben solche Strings erhalten, selbst wenn sie nur lokal benutzt werden. Ein möglicher Grund für ein Überlaufen dieser Tabelle ist das Verwenden zu vieler Dateien in einer Anwendung. Jedes Öffnen einer Datei zum Lesen oder Schreiben schlägt sich in ihr nieder, selbst wenn es sich mehrmals um die gleiche Datei handelt. 1 Bei neueren Distributionen arbeitet LaT X automatisch mit eT X. Bei älteren Installationen E E muss man möglicherweise ein anderes Programm (z.B. elatex anstelle von latex) aufrufen, um ein Dokument zu verarbeiten.
959
B
FINDEN UND LÖSEN VON PROBLEMEN
Aus historischen Gründen benutzt TEX ein etwas ungewöhnliches Verfahren zum Umgang mit Strings, das mehrere Tabellen einschließt, von denen jede einzelne überlaufen kann. Vergrößert man die hash sizeWerte, um mehr Befehle zuzulassen, so muss man daher möglicherweise auch die number of strings- sowie sehr wahrscheinlich die pool sizeEinstellungen anpassen und umgekehrt.
parameter stack size (Größe des Argumentstapels) die Gesamtzahl der Befehlsargumente verschachtelter Befehle, die bereits expandiert, aber noch nicht völlig abgearbeitet wurden; ruft beispielsweise ein Befehl mit 4 Argumenten einen Befehl mit 5 Argumenten auf, welcher wiederum einen Befehl mit 3 Argumenten aufruft, dann werden auf diese Weise 12 Plätze in dieser Tabelle belegt. Sobald TEX das Ende eines Ersetzungstextes für ein Makro erreicht, wird der Stack wieder freigegeben. Daher lässt sich diese Grenze bei den heutigen Implementierungen kaum erreichen, es sei denn, man verwendet eine fahrige rekursive Definition mit Argumenten, wie beispielsweise die folgende:
\newcommand\FAIL[3]{\typeout{Habe #1, #2 und #3 aber \FAIL ist voll daneben }\DO} Problem erkannt? Da die \typeout-Anweisung fälschlicherweise den Befehl \FAIL enthält, wird dieser erneut aufgerufen, bevor der Ersetzungstext vollständig abgearbeitet werden kann. (Dabei übernimmt er i, s und t als Argumente.) Folglich wird der Befehl \DO niemals ausgeführt und man erhält schließlich die Fehlermeldung:
! TeX capacity exceeded, sorry [parameter stack size=1500]. \FAIL #1#2#3-> \typeout {Habe #1, #2 und #3 aber \FAIL ist voll daneben}\DO l.18 \FAIL 123 Dieser Fall ähnelt dem \FAILb-Beispiel von Seite 957, nur dass hier der parameter stack zuerst überläuft, da drei Argumente beteiligt sind.
pattern memory (Musterspeicher) der für Silbentrennungsmuster verfügbare Speicher; diese Tabelle kann nicht während der Verarbeitung eines Dokumentes überlaufen, da die entsprechenden Muster nur beim Erzeugen eines Formates geladen werden. Tritt der Fehler in diesem Prozess auf, dann sollte man die Anzahl der Sprachen reduzieren, für die Silbentrennungsmuster in das Format geladen werden. Die entsprechenden Einstellungen sind heutzutage normalerweise in der Datei language.dat definiert.
pool size (Poolgröße) die in Strings – Befehlsnamen und Dateinamen (bei manchen Versionen mit vollständigem Pfad) – enthaltenen Zeichen; der Grund für ein Überlaufen dieser Tabelle sind meistens zu viele Dateien, insbesondere, wenn diese über lange absolute Pfade verfügen. Das kann beispielsweise geschehen, wenn ein Dokument viele Graphiken enthält und LaTEX mit \graphicspath angewiesen wird, diese nur in verschiedenen Verzeichnissen zu suchen. Jeder Versuch, eine Datei zu öffnen, wirkt sich auf diesen Stringpool aus.
960
B.2 Warnungen und informelle Meldungen
save size (Größe des Speichers für Wiederherstellungsinformationen) Sammlung von Werten, die wiederhergestellt werden müssen, wenn eine Gruppe endet; auch dieser Speicher lässt sich bei den heutzutage voreingestellten Grenzwerten nur schwer zum Überlaufen bringen. Die wahrscheinlichste Ursache liegt bei gleichzeitigen lokalen und globalen Zuweisungen für das gleiche Objekt. Dies lässt sich nur durch eine LowLevel-Programmierung in TEX hervorrufen, da LaTEX-Zuweisungen immer entweder lokaler (meistens) oder globaler (z.B. bei Zählern) Natur sind. Um ein unnötiges Anwachsen des save stack zu vermeiden, ist die document-Umgebung auf besondere Weise implementiert1 : Sie erzeugt im Gegensatz zu herkömmlichen Umgebungen keine eigene Gruppe. Andernfalls würde jede neue Definition unnötigerweise einen Wert auf dem save stack ablegen – unnötig deshalb, weil mit dem Ende dieser Gruppe die Verarbeitung des Dokumentes beendet ist.
semantic nest size (semantische Verschachtelungstiefe) die Anzahl der gleichzeitig in Verarbeitung befindlichen Tokens: Boxen, Formeln und andere Elemente eröffnen jedes Mal eine neue Liste und unterbrechen dabei die Arbeit am bisherigen Element. Sobald ein Element beendet ist, muss TEX sich wieder dem nächsten zurückgestellten Objekt zuwenden und merkt sich dazu alle noch nicht vollständig verarbeiteten Objekte im semantic nest-Stack. Bei einem voreingestellten Wert von mehreren hundert Objekten ist es sehr schwierig, sich dieser Grenze in einem normalen Dokument auch nur anzunähern2 . Zur Not verfügt TEX über den Befehl \showlists , der alle noch unvollendeten Listen anzeigt, an denen TEX gerade arbeitet.
text input levels (Eingabequellen-Ebenen) die Anzahl der gleichzeitig geöffneten Eingabequellen (zum Beispiel mit \include , \input oder \usepackage geöffnete Dateien); bei der TEX-Version der Autoren müsste man 1500 Dateien verschachteln um diese Grenze zu erreichen.
B.2 Warnungen und informelle Meldungen Während Fehlermeldungen dazu führen, dass LaTEX anhält und auf Anweisungen seitens des Anwenders wartet, werden Warnungen nur auf dem Bildschirm und in der Protokolldatei ausgegeben, während die Verarbeitung weiterläuft. Soweit möglich gibt LaTEX auch die Zeile des Quelltextes an, in welcher die Warnung ausgelöst wurde. Vor der eigentlichen Warnung steht „LaTeX Warning:“ bzw. „LaTeX Font Warning:“, sofern es sich um eine Warnung des LaTEX-Kerns handelt. Ansonsten werden das Paket bzw. die Klasse, welche die Warnung ausgeben, genannt: „Package !name" Warning:“ bzw. „Class !name" Warning:“. TEX-Warnungen wie „Overfull...“ geht kein Standardtext voraus. Außer den Warnungen schreibt LaTEX noch informelle Meldungen, die nicht auf dem Bildschirm erscheinen, in die Protokolldatei. Um Warnungen 1 Als Nebeneffekt lässt sich die Anweisung \begin{document} in keiner anderen Umgebung verwenden, da sie sich nicht entsprechend der Gruppenstruktur verhält. 2 Dem Verfasser ist keine problematische Definition eingefallen, die nicht zuerst einen der anderen Grenzwerte sprengen würde.
961
B
FINDEN UND LÖSEN VON PROBLEMEN
und informelle Meldungen besser voneinander unterscheiden zu können, sind die Warnungen in der folgenden alphabetischen Liste blau dargestellt.
Calculating math sizes for size !text size"
Formelschriftgrade für den Schriftgrad !textschriftgröße" werden berechnet
LaTEX muss die richtigen Schriftgrade für Hoch- und Tiefstellungen schätzen, da es die entsprechenden Daten für die aktuelle !textschriftgröße" in den internen Tabellen nicht finden konnte. Dieser Meldung folgen normalerweise noch mehrere Warnungen über veränderte Schriftgrößen für die Berechnung der einzelnen Formelstile. Diese Situation kann eintreten, wenn man mithilfe des \fontsize-Befehls einen unüblichen Schriftgrad festlegt; Abschnitt 7.10.7 enthält weitere Informationen für den Fall, dass die Formeln seltsam aussehen sollten.
Checking defaults for !encoding"/!font shape"
Voreinstellungen für !kodierung"/!schriftform" werden geprüft
Diese Meldung wird bei der Verarbeitung von \begin{document} in die Protokolldatei geschrieben, während LaTEX überprüft, ob vernünftige Ersetzungsvorgaben für die Kodierung !kodierung" vorliegen. Darauf folgt entweder „...okay“ oder eine Fehlermeldung, die erzeugt wird, wenn die mittels \DeclareFontEncoding angegebene !schriftform"gruppe LaTEX nicht bekannt ist.
Citation ‘!key"’ on page !number" undefined
Quellenverweis „!schlüssel"“ auf Seite !seitenzahl" ist nicht definiert
Entweder wurde der im Argument von \cite oder \nocite aufgeführte !schlüssel" nicht mithilfe eines \bibitem-Befehls definiert, oder man benötigt einen weiteren LaTEX-Lauf (vielleicht auch noch einen BIBTEX-Lauf) um ihn LaTEX bekannt zu machen. Auf letzteren Fall wird durch die zusätzliche Warnung „Label(s) may have changed. . . “ hingewiesen, die auf Seite 967 besprochen wird. Löst \nocite die Warnung aus, dann erscheint keine Seitenzahl.
Command !name" invalid in math mode Befehl !name" im Formelmodus ungültig
Hier handelt es sich entweder um eine Warnung oder eine Fehlermeldung, die anzeigt, dass man im Formelmodus einen Befehl verwendet hat, der nur in normalem Text zulässig ist. Wenn man eine veraltete, aber noch gültige, Konstruktion verwendet, wird eine Warnung erzeugt.
Document Class: !name" !date" !additional-info" Dokumentenklasse: !name" !datum" !zusatzinfo"
Diese Zeile wird von einem \ProvidesClass-Befehl im Programmcode der Dokumentenklasse erzeugt. Obwohl es sich nicht wirklich um eine Warnung handelt, erscheint sie sowohl auf dem Bildschirm als auch in der Protokolldatei. Wenn ein Dokument auf verschiedenen Installationen unterschiedliche Ausgaben erzeugt, dann sollte man die Meldungen „Document Class:“, „File:“ und „Package:“ darauf überprüfen, ob hier unterschiedliche Versionen vorliegen.
962
B.2 Warnungen und informelle Meldungen
Empty ‘thebibliography’ environment Leere „thebibliography“-Umgebung
Diese Warnung wird ausgegeben, wenn in einer thebibliographyUmgebung keine \bibitem-Befehle vorhanden sind. Sie ist häufig ein Hinweis darauf, dass ein Problem bei einem BIBTEX-Lauf vorliegt. Möglicherweise konnte das BIBTEX-Programm keinen einzigen Quellenverweis auflösen.
Encoding !name" has changed to !new name" for ... Kodierung !name" für ... wurde zu !neuer name" geändert
Diese Warnung erfolgt, wenn in der Deklaration eines Symbolfonts für verschiedene Formellayouts unterschiedliche Kodierungen verwendet wurden. Dies kann zur Folge haben, dass die \DeclareMathSymbol-Befehle für diesen Symbolfont nicht in allen Formellayouts gültig sind.
(\end occurred !when"
TEX
(\end eingetreten !während"
Diese Warnung erhält man am Ende eines Verarbeitungslaufs, wenn TEX der Meinung ist, dass \end{document} oder der Befehl \stop verfrüht erfolgte. Als Warnung ist diese Meldung leider irreführend, da sie auf den TEX-Basisbefehl \end verweist, der in LaTEX als Ende-Tag für Umgebungen umdefiniert wurde. Unter !während" erscheint einer der beiden folgenden Fälle:
inside a group at level !number")
TEX
innerhalb einer Gruppe auf Ebene !nummer")
In diesem Falle endete der LaTEX-Lauf, obwohl einige Gruppen noch nicht geschlossen waren. Zu diesen Gruppen gehören auch explizite Klammern, die nicht geschlossen wurden (z.B. {\itshape..), in Makros verwendete \bgroup- und \begingroup-Befehle ohne ihre jeweiligen Gegenstücke sowie nicht geschlossene Umgebungen im Quelltext. Der letztere Fall löst normalerweise zunächst eine passende LaTEX-Fehlermeldung aus (also „\begin{!env"} on. . . “), es sei denn man hat den Lauf mit \stop beendet; dann erfolgt keine Überprüfung auf nicht geschlossene Umgebungen.
when !condition" on line !line number" was incomplete)
TEX
bei noch nicht vollständiger !bedingung" in Zeile !zeilennummer")
Hier beendete LaTEX den Lauf, während eine Low-Level-Bedingung von TEX noch nicht abgeschlossen war. Da LaTEX-Dokumente nur Standardbefehle verwenden, sollte dieses Problem eigentlich nicht auftreten, außer man hat das Dokument innerhalb einer mit \include geladenen Datei beendet. Andernfalls weist diese Meldung wohl auf ein fehlerhaft programmiertes Paket hin. Man sollte anhand der !zeilennummer" die Stelle suchen, an welcher die Bedingung aufgerufen wurde, um den aufrufenden Befehl ausfindig zu machen. Dabei bezieht sich die !zeilennummer" möglicherweise nicht auf die aktuelle Datei – TEX verrät leider nicht den jeweiligen Dateinamen. Bei sehr schwierigen Fällen kann man versuchen, die genaue Ursache mittels
963
B
FINDEN UND LÖSEN VON PROBLEMEN
der erweiterten eTEX-Überwachungsfunktionen zu bestimmen: Wenn man den internen Zähler \tracingifs auf 1 setzt, wird die Ausführung verschachtelter Bedingungen in allen Einzelheiten protokolliert.
External font !name" loaded for size !size"
Externer Font !name" für Schriftgrad !schriftgrad" geladen
LaTEX hat die Anweisung, eine Schriftform in der Größe !schriftgrad" zu laden, ignoriert und stattdessen den externen Font !name" geladen. (Diese Meldung wird durch die Größenfunktion fixed ausgelöst.)
Faking !command" for font family !name" in TS1 encoding
textcomp
!befehl" für die Schriftfamilie !name" in TS1-Kodierung wurde nachgeahmt
Die Glyphe !befehl" ist in der TS1-Kodierung der aktuellen Schriftfamilie nicht vorhanden. LaTEX hat sie deshalb irgendwie „nachgeahmt“. Dieses Verfahren wird z.B. für die \texteuro-Glyphe (€) verwendet, wenn diese nicht verfügbar ist. In Abschnitt 7.8.7 ist beschrieben, wie man ein echtes Euro-Zeichen erhält.
File ‘!name"’ already exists on the system. Not generating it from this source Die Datei „!name"“ ist auf dem System bereits vorhanden. Sie wird nicht aus dieser Quelle erzeugt
Diese Warnung wird von einer filecontents-Umgebung ausgelöst, wenn die Datei !name" bereits irgendwo im Suchpfad von LaTEX existiert. Um die Datei trotzdem zu entpacken, muss man die von LaTEX gefundene Version entweder löschen oder umbenennen oder die Datei mithilfe eines Editors manuell extrahieren.
File: !name" !date" !additional-info" Datei: !name" !datum" !zusatzinfo"
Diese Zeile wird von einem \ProvidesFile-Befehl erzeugt, der verwendet wird, um eine Datei und das Datum ihrer letzten Änderung zu kennzeichnen. Üblicherweise beginnt !zusatzinfo" mit einer Versionsnummer. Das ist jedoch nicht zwingend erforderlich. Obwohl diese Informationen genauso wichtig sind, wie diejenigen des \ProvidesClass-Befehls, werden sie nur in die Protokolldatei geschrieben, um den Bildschirm nicht mit Meldungen zu überfluten. Wenn ein Dokument auf verschiedenen Installationen unterschiedliche Ausgaben erzeugt, dann sollte man die Meldungen „Document Class:“, „File:“ und „Package:“ darauf überprüfen, ob hier unterschiedliche Versionen vorliegen.
File: !encoding"!family".fd !date" !additional-info" Datei: !kodierung"!familie".fd !datum" !zusatzinfo"
Dieser wichtige Sonderfall des vorigen Hinweises besagt, dass eine Fontdefinitionsdatei für eine bestimmte Kombination von !kodierung" (die normalerweise kleingeschrieben wird) und !familie" geladen wurde. Solche Dateien enthalten Deklarationen für Schriftformgruppen und wurden in Abschnitt 7.10.6 beschrieben.
964
B.2 Warnungen und informelle Meldungen
Float too large for page by !value" Gleitobjekt um !wert" zu groß für die Seite
Ein Gleitobjekt ist für die aktuelle, mit \textheight festgelegte Höhe des Textbereiches um !wert" zu groß. Es wird (sofern zulässig) auf eine eigene Seite gesetzt und erstreckt sich dort möglicherweise in den unteren Rand. Sollte das Gleitobjekt nicht auf einer eigenen Seite platziert werden dürfen, dann verhindert es dadurch, dass weitere Gleitobjekte der gleichen Klasse gesetzt werden können.
Font shape !font shape" in size !size" not available
Schriftform !schriftform" in Schriftgrad !schriftgrad" nicht verfügbar
LaTEX gibt diesen Hinweis bei dem Versuch aus, eine Schrift auszuwählen, für welche die gewünschte Kombination von Zeichensatzattributen nicht vorliegt und für die in den internen Tabellen eine Fontersetzung definiert ist. Je nach dem Inhalt dieser Tabellen erfolgt eine der folgenden zusätzlichen Meldungen:
external font !name" used externer Font !name" verwendet
LaTEX hat in diesem besonderen Fall den externen Font !name" ausgewählt und weiß nicht, zu welcher Schriftformgruppe er gehört. (Diese Meldung wird durch die Größenfunktion subf ausgelöst.)
size !schriftgrad" substituted Schriftgrad !schriftgrad" ersetzt
LaTEX hat die richtige Form ausgewählt, aber da der gewünschte Schriftgrad nicht zur Verfügung steht, wurde die nächste Größe !schriftgrad" verwendet. Diese Auswahl erfolgt automatisch, wenn keine passende einfache Größe bzw. kein entsprechender Größenbereich in der Deklaration für die !schriftform"gruppe vorliegt.
shape !font shape" tried
Schriftform !schriftform" ausprobiert
LaTEX hat eine andere !schriftform"gruppe ausgewählt, da die gewünschte nicht in der angeforderten Größe vorliegt. (Diese Meldung wird durch die Größenfunktion sub ausgelöst.)
Font shape !font shape" undefined. Using ‘!other shape"’ instead Schriftform !schriftform" nicht definiert. Verwende stattdessen „!andere form"“
Diese Warnung erfolgt, wenn eine Kombination von Zeichensatzattributen angegeben wurde, für die LaTEX keine Schriftformdefinition vorliegt. So würde zum Beispiel der Befehl \fontseries{b}\ttfamily normalerweise diese Warnung auslösen, da Computer Modern-Fonts weder über fette noch über breitfette Schreibmaschinenschriften verfügen. Wird die letztere Kombination angefordert, so erhält man statt dieser Warnung jedoch nur einen Hinweis in der Protokolldatei, da die .fd-Dateien über eine explizite Ersetzungsregel für \textbf{\texttt{..}} verfügen. Wenn LaTEX auf ein bestimmtes Symbol trifft, das nicht im gewünschten Schriftschnitt gesetzt werden kann, dann folgt der betreffenden Warnung noch der Text „for symbol !name"“ (für Symbol !name"). 965
B
FINDEN UND LÖSEN VON PROBLEMEN
Font shape !font shape" will be scaled to size !size"
Schriftform !schriftform" wird auf Schriftgrad !schriftgrad" skaliert
LaTEX konnte den angeforderten Zeichensatz durch Skalieren auf die gewünschte Größe laden. Um ein Dokument mit größenangepassten Fonts drucken zu können, muss der Druckertreiber über entsprechende Zeichensätze in den passenden Größen verfügen oder fähig sein, diese automatisch zu skalieren.
Foreign command !command"; \frac or \genfrac should be used instead
amsmath
Fremder Befehl !befehl"; stattdessen sollten \frac oder \genfrac verwendet werden
Auch wenn der Einsatz des Befehls !befehl" nicht falsch ist, wird doch nachdrücklich davon abgeraten, diese alte Form für (verallgemeinerte) Brüche in LaTEX zu verwenden. Stattdessen sollte man mit den amsmathBefehlen arbeiten.
Form feed has been converted to Blank Line Seitenvorschub wurde in Leerzeile umgewandelt
Die Umgebung filecontents hat ein „Seitenvorschub“-Zeichen (^^L) in der Quelle entdeckt und schreibt dieses als Leerzeile (die von LaTEX als \par-Befehl interpretiert würde) in die externe Datei. Da filecontents zum Verteilen von Textdaten entwickelt wurde, lassen sich mit der Umgebung keine beliebigen Binärdateien verarbeiten.
‘h’ float specifier changed to ‘ht’ ‘!h’ float specifier changed to ‘!ht’
or
Positionsargument „h“ für Gleitobjekte wurde zu „ht“ geändert Positionsargument „!h“ für Gleitobjekte wurde zu „!ht“ geändert
oder
Zum Positionieren eines Gleitobjektes wurde nur h oder !h ohne jede weitere Option angegeben. LaTEX benötigt eine Alternative, wenn die Platzierung „hier“ nicht möglich sein sollte, da auf der aktuellen Seite nicht mehr genug Platz ist. Will man Gleitobjekte wirklich vom Gleiten abhalten, so sollte man das in Abschnitt 6.3.1 beschriebene float-Paket in Betracht ziehen.
Ignoring text ‘!text"’ after \end{!env"} Text „!text"“ hinter \end{!env"} wird ignoriert
Diese Warnung wird von der filecontents- oder der filecontents*Umgebung ausgelöst, wenn sich hinter dem \end-Tag noch Textmaterial befindet.
Label ‘!key"’ multiply defined Label „!schlüssel"“ mehrfach definiert
Das Dokument enthält mindestens zwei \label-Befehle mit gleichem !schlüssel". Verweise auf diesen !schlüssel" beziehen sich immer auf den zuletzt definierten \label-Befehl. Man muss sicherstellen, dass alle !schlüssel" unterschiedlich sind. 966
B.2 Warnungen und informelle Meldungen
Label(s) may have changed. Rerun to get cross-references right Label(s) können sich geändert haben. Um korrekte Querverweise zu erhalten, ist ein weiterer Lauf erforderlich.
LaTEX hat entdeckt, dass sich die Labeldefinitionen gegenüber dem vorherigen Lauf geändert haben, so dass (mindestens) ein weiterer Verarbeitungslauf erforderlich ist, um die Querverweise korrekt aufzulösen. Theoretisch kann diese Meldung immer wieder auftauchen, egal wie viele LaTEX-Läufe durchgeführt werden.1 In diesem Falle muss man die .aux-Dateien verschiedener Läufe vergleichen, um herauszufinden, welches Label zwischen verschiedenen Zuständen hin- und herwechselt, und das Problem dann manuell beheben.
Loose \hbox (badness !number") !somewhere"
TEX
\hbox mit relativ viel Weißraum (Badness !zahl") !irgendwo"
TEX hat eine horizontale Box mit einem höheren Badness-Wert als 13 erzeugt (was bedeutet, dass mindestens 50% ihrer verfügbaren Dehnbarkeit in Anspruch genommen wurde). Wer kein Perfektionist ist, kann diese Warnung einfach ignorieren; eigentlich wird sie überhaupt erst ausgegeben, wenn man die Voreinstellung für \hbadness geändert hat. Im Zusammenhang mit der Meldung „Underfull \hbox. . . “ auf Seite 973 werden nähere Einzelheiten erläutert.
Loose \vbox (badness !number") !somewhere"
TEX
\vbox mit relativ viel Weißraum (Badness !zahl") !irgendwo"
TEX hat eine vertikale Box mit einem höheren Badness-Wert als 13 erzeugt (was bedeutet, dass mindestens 50% ihrer verfügbaren Dehnbarkeit in Anspruch genommen wurde). Diese Warnung erfolgt nur, wenn \vbadness auf einen Wert unter 100 gesetzt wurde. Im Zusammenhang mit der Meldung „Underfull \vbox. . . “ auf Seite 974 werden nähere Einzelheiten erläutert.
Making !char" an active character
babel
!zeichen" wird in ein aktives Zeichen umgewandelt
Diese Meldung wird für jedes Zeichen, das in ein Kurzzeichen umgewandelt wird, in die Protokolldatei geschrieben. Diese Information kann hilfreich sein, wenn ein Dokument anders aussieht als erwartet, sofern die Ursache dafür der versehentliche Gebrauch eines Kurzzeichens ist.
Marginpar on page !number" moved Marginalie auf Seite !zahl" verschoben
Ein \marginpar-Befehl konnte nicht bündig zu der Zeile, mit der er ursprünglich verknüpft war, ausgegeben werden, da dieser Platz bereits von einer vorhergehenden Marginalie belegt ist.
1 Sollte beispielsweise ein \label-Befehl direkt an einem Seitenumbruch zwischen Seite „iii“ und „iv“ stehen, so kann ein vorhergehender \pageref-Befehl dazu führen, dass das Label auf Seite „iv“ gelangt, wenn der Querverweistext die Seitenzahl „iii“ enthält und umgekehrt.
967
B
FINDEN UND LÖSEN VON PROBLEMEN
Missing character: There is no !char" in font !name"! Auf diese " Meldung in der Protokolldatei Acht geben!
TEX
Fehlendes Zeichen: !zeichen" ist in Zeichensatz !name" nicht vorhanden!
Obwohl diese Meldung normalerweise auf ein ernstes Problem hinweist, wird sie leider nur in die Protokolldatei geschrieben (es sei denn der Wert für \tracingonline ist positiv). Sie bedeutet, dass irgendwo in der Quelldatei ein Symbol !zeichen" angefordert wird, für das an der entsprechenden Position im aktuellen Zeichensatz (!name" ist der externe Name) keine Glyphe existiert. Das angezeigte !zeichen" kann auf unterschiedlichen TEX-Installationen variieren1 . Diese Warnung kann z.B. durch einen \symbol-Befehl ausgelöst werden, da man mit seiner Hilfe jede beliebige Position in einem Zeichensatz ansteuern kann. Die in Abschnitt 7.11.4 auf Seite 467 besprochenen fontkodierungsspezifischen Befehle sollten diese Warnung jedoch nie erzeugen.
No \author given \author-Befehl fehlt Man hat den Befehl \maketitle benutzt, ohne zuvor einen Autor anzugeben. Im Gegensatz zu einem fehlenden \title-Befehl erzeugt dieses Versäumnis eine Warnung.
No auxiliary output files Keine Hilfs-Ausgabedateien
Diese Meldung wird angezeigt, wenn man in der Dokumentenpräambel den Befehl \nofiles verwendet. Die Meldung ist etwas irreführend, denn es werden lediglich keine neuen Hilfsdateien geschrieben – existierende werden aber benutzt.
No characters defined by input encoding change to !name"
Beim Wechsel der Eingabekodierung auf !name" wurden keine Zeichen definiert
Die Eingabekodierungsdatei !name".def enthält anscheinend keine Deklarationen für die Eingabekodierung. Bei der ascii-Kodierung ist das zu erwarten; bei allen anderen Kodierungen deutet es auf ein Problem hin.
No file !name"
Datei !name" nicht vorhanden
LaTEX gibt diese Warnung immer dann aus, wenn eine Hilfsdatei (z.B. mit der Endung .aux oder .toc) gelesen werden soll, diese aber nicht zu finden ist. Das wird nicht als Fehler betrachtet, da diese Dateien erst beim ersten Verarbeitungslauf erzeugt werden. Der Befehl \include benutzt jedoch die gleiche Routine, so dass eine fehlende „include“-Datei leider auch diese scheinbar harmlose Warnung auslöst.
No hyphenation patterns were loaded for the language ‘!language"’ Für die Sprache „!sprache"“ wurden keine Trennmuster geladen
Alle Sprachdefinitionsdateien überprüfen, ob die Silbentrennungsmuster 1 Manchmal wird etwas wie ^^G ausgegeben, manchmal werden echte Zeichen angezeigt. Leider gibt es keine Garantie, dass sie wirklich dem entsprechen, was man eingegeben hat: Es können je nach Betriebssystem Übersetzungen erfolgen, wenn die Zeichen in die Protokolldatei geschrieben werden.
968
babel
B.2 Warnungen und informelle Meldungen
für die ausgewählte Sprache in das LaTEX-Format geladen wurden. Wurden sie nicht geladen, so erfolgt diese Meldung und es wird ein voreingestellter Satz von Trennmustern verwendet. Dabei handelt es sich um die Muster, die in das Musterregister 0 geladen wurden (typischerweise diejenigen für amerikanisches Englisch).
No input encoding specified for !language" language
babel
Für die Sprache !sprache" wurde keine Eingabekodierung angegeben
Diese Warnung erfolgt, wenn im Dokument eine der unterstützten Sprachen zum Setzen das kyrillische Alphabet benötigt und keine besondere Eingabekodierung festgelegt wurde. Für diese Sprachen gibt es mehrere gängige Eingabekodierungen, so dass die Sprachdefinitionsdatei darauf besteht, dass die verwendete Kodierung explizit genannt werden muss.
No positions in optional float specifier. Default added ... Optionales Positionsargument enthielt keine Parameter. Voreingestellte Positionierungsdaten hinzugefügt . . .
Eine Gleitobjektumgebung (wie etwa figure oder table) wurde mit optionalem Positionsargument verwendet, das jedoch keine verwertbaren Informationen enthielt. LaTEX hat deshalb die voreingestellten Regeln für die Positionierung benutzt.
Oldstyle digits unavailable for family !name"
textcomp
Mediävalziffern für Schriftfamilie !name" nicht verfügbar
Der Befehl \oldstylenums wurde für eine Schriftfamilie verwendet, die keine Mediävalziffern enthält. Als Notlösung hat LaTEX stattdessen die regulären Zahlen (der aktuellen Schriftfamilie) benutzt. Abschnitt 7.5.4 enthält nähere Einzelheiten hierzu.
Optional argument of \twocolumn too tall on page !number" Optionales Argument von \twocolumn auf Seite !zahl" zu hoch
Das Material im optionalen Argument des \twocolumn-Befehls hat eine so große Höhe, dass weniger als drei Zeilen auf der Seite verbleiben. LaTEX beginnt daher nicht auf der aktuellen Seite mit dem Zweispaltensatz sondern erzeugt stattdessen eine neue Seite.
\oval, \circle, or \line size unavailable \oval-, \circle- oder \line-Größe nicht verfügbar Die genannten Befehle sind nicht in der gewünschten Größe verfügbar. LaTEX wird die nächstmögliche Größe auswählen. Ein Weg, wie man dieses Problem vermeiden kann, wurde beispielsweise in Abschnitt 10.4.3 aufgezeigt.
Overfull \hbox (!number"pt too wide) !somewhere"
TEX
Überlaufende \hbox !irgendwo" (!zahl"pt zu breit)
TEX wurde gezwungen, eine horizontale Box in einer bestimmten Breite zu erzeugen (z.B. für eine Zeile in einem Absatz oder einen \makeboxBefehl). Dabei war es nicht möglich, das vorhandene Material auf die vorgegebene Breite zu reduzieren, selbst nachdem der gesamte verfügbare Freiraum so weit wie möglich gestaucht worden war. Daher wird
969
B
FINDEN UND LÖSEN VON PROBLEMEN
das betreffende Material rechts in den Rand hineinragen. Meistens ist das recht auffällig, auch wenn es sich nur um einen geringen Überlauf handelt. Dieses Problem muss manuell behoben werden, da TEX es nicht lösen konnte (die Abschnitte 3.1.11 und B.3.3 enthalten Ratschläge zu diesem Thema). Bei der Warnung „Underfull \hbox. . . “ auf Seite 973 sind eine Liste und Erläuterungen der möglichen Ursprünge des Problems (also des !irgendwo") aufgeführt.
Overfull \vbox (!number"pt too wide) !somewhere"
TEX
Überlaufende \vbox !irgendwo" (!zahl"pt zu breit)
TEX sollte eine vertikale Box fester Größe erzeugen (z.B. für einen \parbox-Befehl oder eine minipage-Umgebung mit einem zweiten optionalen Argument; siehe Anhang A.2.2 auf Seite 899) und hat mehr Material vorgefunden, als hineinpasste. Das überschüssige Material wird unten aus der Box herausragen. Hier hängt es ganz von den Umständen ab, ob dieses Ergebnis ein Problem darstellt. Bei der Warnung „Underfull \vbox. . . “ auf Seite 974 sind eine Liste und Erläuterungen der möglichen Ursprünge des Problems (also des !irgendwo") aufgeführt.
Overwriting encoding scheme !something" defaults
Kodierungsschema-Voreinstellungen für !etwas" werden überschrieben
Diese Warnung wird von dem Befehl \DeclareFontEncodingDefaults ausgegeben, wenn er zuvor deklarierte Voreinstellungen für „text“ oder „math“ (Formeln) überschreibt.
Overwriting !something" in version !name" ... !etwas" in Formellayout !name" wird überschrieben ...
Eine Deklaration wie \SetSymbolFont oder \DeclareMathAlphabet hat die Zuordnung von Schriftformen zu !etwas" (einem Zeichensatz oder einem Mathematikalphabet) im Formellayout !name" überschrieben.
Package: !name" !date" !additional-info" Paket: !name" !datum" !zusatzinfo"
Diese Zeile wird von einem \ProvidesPackage-Befehl erzeugt, der verwendet wird, um ein Paket und das Datum seiner letzten Änderung zu kennzeichnen. Üblicherweise beginnt !zusatzinfo" mit einer Versionsnummer. Das ist jedoch nicht zwingend erforderlich. Obwohl diese Informationen genauso wichtig sind, wie diejenigen des \ProvidesClass-Befehls, werden sie nur in die Protokolldatei geschrieben, um den Bildschirm nicht mit Meldungen zu überfluten. Wenn ein Dokument auf verschiedenen Installationen unterschiedliche Ausgaben erzeugt, dann sollte man die Meldungen „Document Class:“, „File:“ und „Package:“ darauf überprüfen, ob hier unterschiedliche Versionen vorliegen.
Redeclaring font encoding !name" Fontkodierung !name" wird umdeklariert
Diese Warnung wird ausgegeben, wenn man eine bereits vorhandene Fontkodierung mithilfe des Befehls \DeclareFontEncoding erneut deklariert (wodurch möglicherweise ihre Voreinstellungen verändert werden).
970
B.2 Warnungen und informelle Meldungen
Redeclaring math accent !name"
Akzentzeichen für Formeln !name" wird umdeklariert
Diese Warnung wird ausgegeben, wenn man ein bereits vorhandenes Akzentzeichen für Formeln mithilfe des Befehls \DeclareMathAccent erneut deklariert. Sofern der zu deklarierende Befehl schon existiert, es sich aber nicht um einen Akzent handelt, erhält man stattdessen eine Fehlermeldung.
Redeclaring math alphabet !name"
Mathematikalphabet !name" wird umdeklariert
Der !name" wurde mithilfe eines \DeclareMathAlphabet- oder eines \DeclareSymbolFontAlphabet-Befehls als Alphabetbefehl deklariert. Dabei handelte es sich jedoch bereits um einen Alphabetbefehl. Die neue Deklaration überschreibt alle bisherigen Einstellungen für !name".
Redeclaring math symbol !name"
Mathematisches Symbol !name" wird umdeklariert
Der Befehl !name" war bereits als mathematisches Symbol deklariert und die neue Deklaration überschreibt die bisherige Definition.
Redeclaring math version !name" Formellayout !name" wird umdeklariert
Ein bereits deklariertes Formellayout wird mithilfe der Deklaration \DeclareMathVersion bearbeitet. Die neue Deklaration überschreibt alle bisherigen Einstellungen für dieses Layout mit den vorgegebenen Werten.
Redeclaring symbol font !name" Symbolfont !name" wird umdeklariert
Ein bereits deklarierter Symbolfont wird mithilfe der Deklaration \DeclareSymbolFont bearbeitet. Die neue Deklaration überschreibt den Symbolfont in allen bekannten Formellayouts.
Reference ‘!key"’ on page !number" undefined
„!schlüssel"“ für Querverweis auf Seite !zahl" nicht definiert
Ein mit \ref , \pageref oder einem der anderen in Kapitel 2 besprochenen Querverweisbefehle erzeugter Verweis benutzt einen !schlüssel", zu dem LaTEX keinen entsprechenden \label-Befehl gefunden hat. Sofern das Label im Dokument vorhanden ist, benötigt man lediglich einen weiteren Verarbeitungslauf, um es in LaTEX bekannt zu machen. Auf diesen Fall wird durch die zusätzliche Warnung „Label(s) may have changed. . . “ hingewiesen, die auf Seite 967 besprochen wurde.
Size substitutions with differences up to !size" have occurred
Es sind Schriftgrößenersetzungen mit einem Unterschied von bis zu !größe" erfolgt
Diese Meldung erscheint am Ende eines Laufs, wenn LaTEX mindestens einen deutlich abweichenden Schriftgrad auswählen musste, da die gewünschte Größe nicht zur Verfügung stand. Die !größe" gibt die höchste benötigte Abweichung an.
971
B
FINDEN UND LÖSEN VON PROBLEMEN
Some font shapes were not available, defaults substituted Einige Schriftschnitte waren nicht verfügbar; sie wurden entsprechend der Vorgaben ersetzt
Diese Meldung erscheint am Ende eines Laufs, wenn LaTEX einige Schriftschnitte automatisch ersetzen musste.
Tab has been converted to Blank Space Tabulator wurde in Leerzeichen umgewandelt
Die filecontents-Umgebung hat ein „Tabulator“-Zeichen (^^I) in der Quelldatei entdeckt und wird dieses als Leerzeichen in die externe Datei schreiben. Da filecontents zum Verteilen von Textdaten entwickelt wurde, lassen sich mit der Umgebung keine beliebigen Binärdateien verarbeiten.
Text page !number" contains only floats Textseite !zahl" enthält ausschließlich Gleitobjekte
Ein oder mehrere Gleitobjekte, die am Kopf („top“) oder Fuß („bottom“) einer Seite erscheinen sollten, sind zusammen so groß, dass auf der aktuellen Seite nur sehr wenig Platz (weniger als zwei Zeilen) für Text verbleibt. Daher hat LaTEX entschieden, auf der fraglichen Seite nur Gleitobjekte zu platzieren, auch wenn einige oder alle der Gleitobjekte eine solche Positionierung nicht explizit erlauben. Diese Meldung kann nur auftreten, wenn die Positionsparameter für Gleitobjekte gegenüber den voreingestellten Werten erheblich verändert wurden. Nähere Einzelheiten zu diesem Thema finden sich am Anfang von Kapitel 6.
There were multiply-defined labels Es sind mehrfach definierte Label aufgetreten
Diese Warnung erscheint am Ende eines Verarbeitungslaufs, wenn LaTEX auf mindestens ein Paar \label- oder \bibitem-Befehle mit identischen Schlüsseln gestoßen ist. Man muss die Protokolldatei überprüfen und dafür sorgen, dass nur unterschiedliche Schlüssel verwendet werden.
There were undefined references Es sind nicht definierte Verweise aufgetreten
Diese Meldung erscheint am Ende eines Verarbeitungslaufs, wenn LaTEX Verweise auf unbekannte Schlüssel entdeckt und gefolgert hat, dass diese sich nicht durch einen weiteren Lauf auflösen lassen würden. Man sollte die Protokolldatei auf die Meldungen „Reference !key" undefined“ und „Citation !key" undefined“ überprüfen und die Ursachen beheben – entweder durch Korrigieren etwaiger Schreibfehler oder durch Hinzufügen der erforderlichen \label- oder \bibitem-Befehle. Bei fehlenden !schlüssel"n für Quellenverweise benötigt man möglicherweise nur einen erneuten BIBTEX- und danach einen LaTEX-Lauf.
Tight \hbox (badness !number") !somewhere"
TEX
\hbox mit relativ wenig Weißraum (Badness !zahl") !irgendwo"
TEX hat eine horizontale Box erzeugt und musste die Leerräume ihres Inhaltes stauchen. Diese Meldung erscheint nur, wenn man den Befehl
972
B.2 Warnungen und informelle Meldungen
\hbadness auf einen Wert kleiner 100 gesetzt hat. Im Zusammenhang mit der Meldung „Underfull \hbox. . . “ auf dieser Seite werden nähere Einzelheiten erläutert.
Tight \vbox (badness !number") !somewhere"
TEX
\vbox mit relativ wenig Weißraum (Badness !zahl") !irgendwo"
TEX hat eine vertikale Box erzeugt und musste die Leerräume ihres Inhaltes stauchen. Diese Meldung erscheint nur, wenn man den Befehl \vbadness auf einen Wert kleiner 100 gesetzt hat. Im Zusammenhang mit der Meldung „Underfull \vbox. . . “ auf Seite 974 werden nähere Einzelheiten erläutert.
Try loading font information for !encoding"+!family" Versuche Zeichensatzdaten für !kodierung"+!familie" zu laden
Diese Meldung findet sich jedes Mal dann in der Protokolldatei, wenn LaTEX nach einer .fd-Datei für die Kombination aus Kodierung und Familie !kodierung"+!familie" sucht.
Unable to redefine math accent !accent"
amsmath
Mathematischer Akzent !akzent" lässt sich nicht umdefinieren
Diese Warnung kommt sehr selten vor. Sie kann jedoch erscheinen, wenn man das amsmath-Paket mit Mathematikfonts lädt, die nicht dem Standard entsprechen.
Underfull \hbox (badness !number") !somewhere"
TEX
\hbox mit zu viel Weißraum (Badness !zahl") !irgendwo"
TEX war gezwungen, eine horizontale Box (z.B. für eine Absatzzeile oder einen \makebox-Befehl) mit einer bestimmten Breite zu erzeugen. Dabei musste der Weißraum in dieser Box über das vorgegebene Maß hinaus gedehnt werden. Das heißt, die Dehnung betrug an den erweiterbaren Abständen mehr als 100% der verfügbaren plus-Zugaben. Intern wird dies durch einen Badness-Grad ausgedrückt, der über 100 liegt. Ein Grad von 800 bedeutet, dass der Weißraum auf das Doppelte des erlaubten Wertes gedehnt werden musste, um die erforderliche Breite zu erreichen.1 Ob eine solche unzureichend gefüllte Box tatsächlich ein merkliches Problem darstellt, muss man gegebenenfalls im erzeugten Dokument visuell prüfen. Bei einem Badness-Grad von 10000 kann die Box beliebig hässlich aussehen. Da der TEX-Wert für unendlich mit 10000 recht niedrig liegt, kann es vorkommen, dass eine einzelne extrem leere Zeile in Kauf genommen wurde, obwohl auch mehrere nicht gut gefüllte, aber doch noch akzeptable aufeinander folgende Zeilen möglich gewesen wären. In einem solchen Fall kann sich der Längenparameter \emergencystretch als hilfreich erweisen (siehe Abschnitt 3.1.11). Ab welchem Badness-Grad eine solche Warnung erfolgt, wird mithilfe des ganzzahligen Parameters \hbadness gesteuert. In LaTEX ist der
1 Die genaue Formel lautet min(100r 3 , 10000) wobei r das Verhältnis von „verwendeter Dehnung“ zu „verfügbarer Dehnung“ ist. Wenn allerdings ein unbegrenzt dehnbarer Abstand vorhanden ist (zum Beispiel aufgrund eines Befehls wie \hfill), beträgt der BadnessGrad null.
973
B
FINDEN UND LÖSEN VON PROBLEMEN
Wert 1000 voreingestellt, so dass nur vor wirklich unschönen Boxen gewarnt wird. Bei einem wichtigen Dokument kann man durchaus einen anspruchsvolleren Wert wie etwa \hbadness=10 testen, um zu sehen, wie viele Zeilen TEX wirklich als unausgewogen erachtet. Da die Warnung direkt von TEX erzeugt wird, meldet sie übrigens immer eine \hbox , egal welcher Boxbefehl tatsächlich im Quelldokument verwendet wurde. Der Ort, an dem das Problem aufgetreten ist, wird mit !irgendwo" angegeben und kann eine der folgenden vier Möglichkeiten sein:
detected at line !line number"
TEX
in Zeile !zeilennummer" entdeckt
Das Problem ist eine explizit konstruierte Box (sie endet im Quelldokument in Zeile !zeilennummer"). Es kann sich beispielsweise um einen \makebox-Befehl mit einem expliziten Argument für die Breite handeln oder um einen anderen LaTEX-Befehl, der Boxen erzeugt.
has occurred while \output is active
TEX
trat bei aktivem \output-Befehl auf
TEX war gerade damit beschäftigt, eine Seite aufzubauen, und stieß beim Hinzufügen lebender Kolumnentitel und ähnlichem auf das Problem. Da dieser Prozess asynchron verläuft, wird keine Zeilennummer genannt. Ein Blick auf die Seite, die am nächsten lag, als die Warnung ausgegeben wurde, zeigt, ob hier manuell korrigiert werden muss.
in alignment at lines !line numbers"
TEX
in ausgerichteter Struktur in Zeilen !zeilennummern"
Die Box gehört zu einer tabular- oder einer ausgerichteten Formelumgebung. Die !zeilennummern" geben die Position der gesamten ausgerichteten Struktur im Quelldokument an, da TEX zu dem Zeitpunkt, an dem es auf das Problem stößt, bereits keine Möglichkeit mehr hat, dessen Ursprungsort genauer festzustellen.
in paragraph at lines !line numbers"
TEX
in Absatz in Zeilen !zeilennummern"
Die „Underfull Box“ ist eine unausgewogenen Zeile im genannten Absatz (bei den angegebenen !zeilennummern" im Quelldokument). Die zusätzliche symbolische Anzeige der fraglichen Zeile sollte dabei helfen, den genauen Ursprung des Problems ausfindig zu machen.
Underfull \vbox (badness !number") !somewhere" \vbox mit zu viel Weißraum (Badness !zahl") !irgendwo"
TEX
TEX war gezwungen, eine vertikale Box (z.B. für einen \parbox-Befehl oder eine minipage-Umgebung) mit einer bestimmten Höhe zu erzeugen. Dabei musste der Weißraum in dieser Box über das vorgesehene Maß hinaus gedehnt werden (siehe die Erläuterungen zu Badness und Dehnbarkeit in der Beschreibung zur Warnung „Underfull \hbox. . . “). Mit dem Befehl \vbadness=!wert" kann man alle Warnungen für Badness-Grade unter dem angegebenen Grenzwert unterdrücken. LaTEX gibt dann nur
974
B.2 Warnungen und informelle Meldungen
noch Warnungen für Boxen mit einem höheren Badness-Grad als !wert" aus (voreingestellt ist der Wert 1000). Der Ursprungsort des Problems wird mit !irgendwo" angegeben und kann einer der folgenden sein:
detected at line !line number"
TEX
in Zeile !zeilennummer" entdeckt
Die Box wurde explizit konstruiert (die !zeilennummer" verweist auf das Ende der Konstruktion) und innerhalb der Box steht nicht ausreichend dehnbarer Leerraum zur Verfügung. Das Beispiel
\parbox[c][2in][s]{4cm}{Test Test} würde diese Warnung erzeugen, da die Box zwei Zoll hoch sein soll und die Inhalte diese Höhe ausfüllen sollen (Argument [s]), wobei jedoch kein dehnbarer Leerraum zur Verfügung steht, wie etwa \par\vfill zwischen den beiden Wörtern. In Anhang A.2.2 wurden nähere Einzelheiten zu Absatzboxen erläutert.
has occurred while \output is active
TEX
trat bei aktivem \output-Befehl auf
In den meisten Fällen musste der Leeraum auf der aktuellen Seite nach Einschätzung von TEX über ein annehmbares Maß hinaus gedehnt werden. Ob sich dieses Problem auch wirklich visuell auswirkt, hängt von vielerlei Faktoren ab, z.B. davon, welche Art von Leerräumen auf der Seite vorhanden ist. So ist etwa ein größerer Abstand oberhalb einer Überschrift weniger nachteilig als eine zu weit gedehnte Liste. Darum empfiehlt es sich, solche Seiten manuell zu überprüfen. Häufig sind hier die Befehle \enlargethispage oder \pagebreak hilfreich. Sofern dieses Problem ungewöhnlich häufig auftritt, sollte man prüfen, ob die Längenparameter für Listen, Absätze und Überschriften zu starr eingestellt sind (siehe die Kapiteln 2 bis 4). Außerdem sollte man überprüfen, ob der Längenparameter \textheight einer ganzzahligen Anzahl von Textzeilen entspricht (vgl. die Erläuterungen auf Seite 206).
in alignment at lines !line numbers"
TEX
in ausgerichteter Struktur in Zeilen !zeilennummern"
In Standard-LaTEX sollte diese Warnung nicht auftreten. Sie kann jedoch in einigen speziellen Anwendungen erscheinen. In einem solchen Fall kann man anhand der !zeilennummern" den Ursprungsort im Quelldokument identifizieren.
Unused global option(s): [!option-list"]
Nicht verwendete globale Option(en): [!optionsliste"]
Einige der mit \documentclass deklarierten Optionen wurden weder von der Klasse noch von irgendeinem Paket in der Präambel verwendet. Sehr wahrscheinlich wurden die Optionsnamen falsch geschrieben. Man sollte auch bedenken, dass einige Pakete keine globalen sondern
975
B
FINDEN UND LÖSEN VON PROBLEMEN
nur explizit beim Laden des Paketes angegebene Optionen verarbeiten. Nähere Erläuterungen hierzu finden sich in Anhang A.4.
Writing file ‘!name"’
Datei „!name"“ wird geschrieben
Diese informelle Meldung wird sowohl von filecontents als auch von filecontents* erzeugt, wenn sie ihren Inhalt in eine externe Datei !name" schreiben.
Writing text ‘!text"’ before \end{!env"} as last line of !file" Text „!text"“ vor \end{!env"} wird als letzte Zeile der !datei" geschrieben
Diese Warnung wird von der filecontents- oder der filecontents*Umgebung ausgelöst, wenn sie direkt vor dem \end-Tag noch Textmaterial entdecken.
You have more than once selected the attribute ‘!attrib"’ for language !language"
babel
Das Attribut !attrib" für !sprache" wurde mehr als einmal ausgewählt
Diese Meldung wird angezeigt, wenn im zweiten Argument des Befehls \languageattribute mehrmals das gleiche Attribut erscheint.
You have requested !package-or-class" ‘!name"’, but the !package-or-class" provides ‘!alternate-name"’ !paket-oder-klasse" „!name"“ wurde angefordert, aber !paket-oder-klasse" stellt „!anderer-name"“ bereit
Mithilfe eines der Befehle \usepackage oder \RequirePackage (im Falle eines Paketes) bzw. \documentclass oder \LoadClass (im Falle einer Klasse) sollte !name" geladen werden. Das Paket bzw. die Klasse stellt jedoch eine Variante des Originals mit dem internen Namen !anderername" zur Verfügung. Sofern es sich dabei nicht um einen Schreibfehler im Paket oder in der Klasse handelt, verfügt die gegebene Installation über eine Klassen- oder Paketvariante, die sich wahrscheinlich anders verhalten wird als das Original. Demzufolge wird das Dokument möglicherweise anders formatiert als auf anderen Installationen. Ob dieses Verhalten richtig ist, lässt sich nur durch eine Untersuchung des fraglichen Paketes bzw. der Klasse feststellen. Die Angabe eines relativen oder absoluten Pfadnamens löst im Nebeneffekt ebenfalls diese Warnung aus.
You have requested release ‘!date"’ of LaTeX, but only release ‘!old-date"’ is available
Die Version „!datum"“ von LaTeX wurde angefordert, es steht jedoch nur die Version „!altes-datum"“ zur Verfügung
Ein \NeedsTeXFormat-Befehl hat eine LaTEX-Version mit dem frühesten Datum !datum" angefordert. Es steht jedoch nur ein Format von !altesdatum" zur Verfügung. Mit einer solchen Forderung soll normalerweise sichergestellt werden, dass das LaTEX-Format über bestimmte Funktionen verfügt. Daher kann es sein, dass das betreffende Dokument im weiteren Verlauf einige zusätzliche Fehler erzeugt oder seltsame Formatierung enthält. Hier sollte man auf eine neuere LaTEX-Version umsteigen.
976
B.3 TEX und LATEX-Tracingbefehle
You have requested, on line !num", version ‘!date"’ of !name", but only version ‘!old-date"’ is available In Zeile !num" wurde Version „!datum"“ von !name" angefordert, es steht aber nur Version „!altes-datum"“ zur Verfügung
Eine angeforderte Klasse oder ein Paket darf nicht älter sein als !datum", die vorliegende Version stammt jedoch von !altes-datum". Das fragliche Paket bzw. die Klasse muss aktualisiert werden.
B.3 TEX und LATEX-Tracingbefehle In diesem Abschnitt werden Werkzeuge und Verfahren für das so genannte Tracing (Überwachen und Verfolgen von Programmabläufen) sowie zum Darstellen von Statusinformationen besprochen. Man kann sie beispielsweise nutzen, um herauszufinden, warum Leerräume auf einer Seite seltsam verteilt sind oder warum eine Befehlsdefinition nicht macht, was sie soll.
B.3.1 Befehlsdefinitionen und Registerwerte anzeigen In vielen Fällen sind Informationen über den aktuellen internen Status von LaTEX, die genaue Definition von Befehlen oder die Werte von Registern sehr aufschlussreich. Gibt beispielsweise ein \newcommand-Befehl die Meldung aus, dass der zu definierende neue Befehl bereits vorhanden ist, dann möchte man vielleicht die vorhandene Definition überprüfen, damit man nicht versehentlich einen wichtigen Befehl umdefiniert. TEX verfügt zu diesem Zweck über den Befehl \show , welcher die Definiti- Befehlsdefinitionen on des ihm folgenden Elementes anzeigt, danach die Verarbeitung anhält und anzeigen den Benutzer mit einem Fragezeichen auffordert, das weitere Vorgehen zu bestimmen. Beispielsweise kann man nach dem Definieren von \xvec im Beispiel A-1-4 auf Seite 877 die Definition des Befehls folgendermaßen anzeigen lassen:
\newcommand\xvec[1]{\ensuremath{x_1,\ldots,x_{#1}}} \show\xvec Dadurch erhält man die folgenden Informationen auf dem Bildschirm und in der Protokolldatei:
> \xvec=\long macro: #1->\ensuremath {x_1,\ldots ,x_{#1}}. l.6 \show\xvec ? In der ersten Zeile, die mit > beginnt, ist zu sehen, welches Element angezeigt wird (\xvec) und um welche Art von Element es sich handelt. \xvec ist demzufolge ein Makro, in dessen Argument \par-Befehle stehen dürfen. Das heißt, es wurde mit \newcommand und nicht mit \newcommand* definiert. Die zweite Zeile (bis ->) gibt Aufschluss über die Argumentstruktur des Befehls: In diesem Falle verfügt der Befehl über ein Argument (#1). Man beachte, dass das
977
B
FINDEN UND LÖSEN VON PROBLEMEN
Argument in der \newcommand-Deklaration zwar als [1] angegeben wurde, hier jedoch anders dargestellt wird. Der Rest dieser und etwaige weitere Zeilen enthalten die Definition. Das Ende des Programmcodes wird durch einen Punkt gekennzeichnet, der nicht zur Definition gehört, jedoch gegebenenfalls (überflüssige) Leerzeichen am Ende der Definition sichtbar macht. Man beachte, dass der Code normalisiert dargestellt wird. So steht nach einem Befehl, der normalerweise auf ihn folgende Leerzeichen unterdrückt, immer ein Leerzeichen, unabhängig davon ob dieses in der Originaldefinition enthalten ist. Nach der Definition wird die entsprechende Zeile des Quelldokumentes angezeigt (zusammen mit der Nummer der Zeile in der Eingabedatei). Danach hält LaTEX mit einem Fragezeichen an. Um fortzufahren drückt man die Eingabetaste. Durch Eingabe von h kann man sich alternativ die weiteren Möglichkeiten anzeigen lassen. Nicht alle Befehle erzeugen eine so leicht verständliche Ausgabe. Angenommen man möchte einen Befehl ansehen, der mit einem optionalen Argument definiert wurde, wie etwa \lvec in Beispiel A-1-5 auf Seite 877:
\newcommand\lvec[2][n]{\ensuremath{#2_1+\cdots + #2_{#1}}} \show\lvec In diesem Falle erhält man das folgende Ergebnis:
> \lvec=macro: ->\@protected@testopt \lvec \\lvec {n}. Offenbar verfügt der Befehl \lvec über keinerlei Argumente (diese werden nämlich erst im Laufe der weiteren Verarbeitung hinzugenommen). Noch etwas anderes an dieser Ausgabe ist seltsam: Was bedeutet \\lvec? Handelt es sich um den Befehl \\, dem die Buchstaben lvec folgen oder liegt hier ein seltsamer Befehl \\lvec vor, zu dessen Name zwei Backslash-Zeichen gehören? Tatsächlich stimmt Letzteres, auch wenn es keine Möglichkeit gibt, dies anhand der Angaben des \show-Befehls festzustellen. Derartige seltsame Befehlsnamen, die Anwender nicht ohne Weiteres generieren können, werden manchmal intern von LaTEX verwendet, um aus existierenden Befehlsnamen mithilfe von \csname und \endcsname sowie weiteren Low-Level-Verfahren von TEX neue Befehlsnamen zu bilden. Interne Befehle mit seltsamen Namen anzeigen
Wie kann man sich dann die Definition von \\lvec anzeigen lassen? Es sollte klar sein, dass \show vor einem solchen Befehl nicht weiterhilft, da TEX hier normalerweise nur \\ liest und entsprechend annimmt, dass genau dieser Befehl angezeigt werden soll. Aus diesem Grund muss man zunächst eben diese LowLevel-Verfahren benutzen, um den Befehlsnamen in der Weise zu generieren, dass er von TEX als einzelnes Element betrachtet wird. Dieses Element kann man dann an \show übergeben:
\expandafter\show\csname \string\lvec \endcsname Technisch gesehen wird hier aus dem, was zwischen \csname und \endcsname steht, ein Befehlsname erzeugt. Innerhalb des Konstruktes wandelt der Befehl \string den Befehl \lvec in eine Zeichenfolge um, die mit einem Backslash beginnt, der aber nicht mehr länger den Beginn eines Befehls anzeigt. Darum stehen am Anfang des erzeugten Befehlsnamens zwei Backslash-Zeichen. Der Befehl
978
B.3 TEX und LATEX-Tracingbefehle
\expandafter verschiebt die Ausführung des auf ihn folgenden \show-Befehls, damit zuerst \csname abgearbeitet wird, bevor dann \show das Ergebnis weiterverwendet. Das ist eine ganze Menge Low-Level-TEX, aber nach dieser Eingabe wird man mit dem folgenden Ergebnis belohnt:
> \\lvec=\long macro: [#1]#2->\ensuremath {#2_1+\cdots + #2_{#1}}. \\lvec Dieses Mal folgt dem Befehl keine Zeilennummer, sondern der Hinweistext (kürzlich gelesen). Er besagt, dass TEX das Element \\lvec im Speicher zusammengesetzt und nicht direkt aus einer Datei gelesen hat. Was geschieht, wenn man den Befehl \expandafter am Anfang des letzten Beispiels vergisst? Man erhält folgendes Ergebnis:
> \csname=\csname. l.5 \show\csname \string\lvec \endcsname ? ! Extra \endcsname. l.5 \show\csname \string\lvec \endcsname ? Als Erstes erfolgt die Angabe, dass es sich bei \csname um den Befehl \csname handelt. Diese Information erscheint zunächst nutzlos. Tatsächlich bedeutet sie jedoch, dass \csname ein Basisbefehl oder ein Register ist, das fest zu TEX gehört – im Gegensatz zu \lvec , bei dem es sich um ein mit \newcommand definiertes Makro handelt. LaTEX gibt zudem an, bis wohin die Eingabezeile gelesen wurde, indem es die nicht gelesenen Elemente (\string usw.) in die nächste Zeile schreibt. Da die Verarbeitung danach fortgesetzt wird, hält TEX kurz darauf (nachdem es die ganze Zeile gelesen hat) wieder an und beklagt sich über einen falschen \endcsnameBefehl: Der passende \csname-Befehl wurde ja nur angezeigt und nicht ausgeführt.
Einen Basisbefehl ausfindig machen
Der Befehl \show eignet sich als Informationsquelle zu Befehlen und ih- Registerwerte ren Definitionen oder um herauszufinden, ob es sich um TEX-Basisbefehle han- anzeigen delt. Mit seiner Hilfe kann man jedoch nicht die aktuellen Werte von Längenoder Zählerregistern auslesen. Beispielsweise erzeugt die Anweisung
\show\parskip \show\topmargin \show\topsep folgendes Ergebnis:
> \parskip=\parskip. l.5 \show\parskip \show\topmargin \show\topsep ? > \topmargin=\dimen73. l.5 \show\parskip \show\topmargin \show\topsep ? > \topsep=\skip23. l.5 \show\parskip \show\topmargin \show\topsep
979
B
FINDEN UND LÖSEN VON PROBLEMEN
Aus diesen Angaben kann man schließen, dass \parskip ein TEX-Basisbefehl ist (dass es sich tatsächlich um eine elastische Länge handelt, wird verschwiegen), dass \topmargin eigentlich das \dimen-Register (feste Länge) mit der Registernummer 73 und \topsep das \skip-Register (elastische Länge) Nummer 23 ist. Der Wert dieser Register lässt sich anstatt mit \show mittels eines anderen TEX-Basisbefehls namens \showthe anzeigen. Er erzeugt die folgende Ausgabe auf dem Bildschirm und beweist, dass es sich bei \parskip wirklich um eine elastische Länge handelt:
> 0.0pt plus 1.0pt. l.5 \showthe\parskip Auf diese Weise kann man mithilfe von \showthe die Werte anzeigen, die Längenregistern mittels \newlength zugewiesen wurden sowie diejenigen interner TEX-Register wie \baselineskip und \tolerance . Die Werte von LaTEX-Zählern, die durch den Befehl \newcounter zugewiesen wurden, lassen sich so jedoch nicht direkt anzeigen. Dazu muss man die LaTEX-Zähler zusätzlich mithilfe eines \value-Befehls in eine von \showthe akzeptierte Form bringen. Die Anweisung
\showthe\value{footnote} beispielsweise würde den aktuellen Wert des Fußnotenzählers auf dem Bildschirm anzeigen. Anstatt die Bedeutung eines Makros oder den Wert eines Registers auf Befehlsdefinitionen dem Bildschirm anzuzeigen, kann man diese Art von Daten auch mithilfe und Registerwerte der Befehle \meaning anstelle von \show und \the anstelle von \showthe formatieren formatiert ausgeben. Die Ausgabe ist etwas anders gestaltet: \meaning zeigt nicht den Namen des Elementes, sondern nur seinen Typ und seine „Bedeutung“. Zum Vergleich mit den bisherigen Ausgaben hier ein Beispiel mit diesen Befehlen:
\long macro:#1->\ensuremath {x_1,\ldots ,x_{#1}} 0.0pt plus 1.0pt 16.0pt 8.0pt plus 2.0pt minus 4.0pt footnote=0
\newcommand\xvec[1]{\ensuremath{x_1,\ldots,x_{#1}}} \ttfamily % Schreibmaschinenschrift \raggedright \meaning\xvec \par \the\parskip\par \the\topmargin \par \the\topsep \par footnote=\the\value{footnote}
Sollte das Anzeigen von Befehlsdefinitionen und Registerwerten zum Identifizieren eines Problems nicht ausreichen, so kann man als andere Möglichkeit das Verhalten der aktiven Befehle überwachen (siehe Abschnitt B.3.5 auf Seite 992).
B.3.2 Diagnose bei problematischen Seitenumbrüchen Hin und wieder erzeugt LaTEX unerwartete Seitenumbrüche oder seltsame vertikale Abstände und man wüsste gerne, woher diese kommen und welche Län-
980
Bsp. B-3-1
B.3 TEX und LATEX-Tracingbefehle
gen eigentlich genau daran beteiligt sind. Zu diesem Zweck bietet TEX einige Low-Level-Tracingbefehle. Symbolische Darstellung des Seiteninhalts Durch den Befehl \showoutput an beliebiger Stelle im Dokument, gibt TEX (ab der aktuellen Seite) symbolische Darstellungen ganzer Seiten auf dem Bildschirm und in der Protokolldatei aus. Das Ergebnis sind große Mengen von Daten. Als Beispiele werden hier Auszüge einer solchen Darstellung gezeigt, die durch separates Verarbeiten eines einzelnen Absatzes erzeugt wurden. Jede Seite beginnt mit dem Text Completed box being shipped out (vollständige Box wird ausgegeben), gefolgt von der aktuellen Seitennummer in eckigen Klammern. Dann folgen viele Zeilen, in denen die Boxen, aus welchen die Seite besteht, wiedergegeben werden. Sie beginnen mit einem \vboxBefehl (vertikale Box), der die ganze Seite umfasst, und ihren Maßen in pt. Um anzuzeigen, welcher Inhalt zu welcher Box gehört, werden die jeweiligen Inhalte mit Punkten anstelle von Leerzeichen rekursiv eingerückt. Abstände, auch solche die fest sind, werden durch das Schlüsselwort \glue („Leim“) angezeigt (siehe Zeile 3 und 6); in dehnbaren Abständen sind, wie noch gezeigt wird, immer Plus- und/oder Minusbestandteile enthalten. Ob es sich um horizontale oder vertikale Abstände handelt, ergibt sich aus der Art der Box, in der sie sich befinden. So ist der \glue in Zeile 3 mit dem Wert 16.0pt beispielsweise ein vertikaler Abstand, der von \topmargin herrührt (vgl. Beispiel B-3-1 auf der gegenüberliegenden Seite). In dem Auszug sieht man außerdem einen leeren \vbox-Befehl der Höhe 12pt (Zeile 5 bis 7): den Kolumnentitel. Ihm folgt in Zeile 8 der \headsep-Abstand (25pt) und in Zeile 10 beginnt dann die Box, welche den eigentlichen Textbereich der Seite enthält. In Zeile 15 und den folgenden Zeilen ist zu sehen, wie einzelne Zeichen dargestellt werden; \T1/cmr/m/n/10 steht hier für den Font jedes einzelnen Zeichens. Der dazwischen angezeigte \glue-Befehl (z.B. in Zeile 19) kennzeichnet einen Wortzwischenraum mit seinen dehn- und stauchbaren Anteilen. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Completed box being shipped out [1] \vbox(633.0+0.0)x407.0 .\glue 16.0 .\vbox(617.0+0.0)x345.0, shifted 62.0 ..\vbox(12.0+0.0)x345.0, glue set 12.0fil ...\glue 0.0 plus 1.0fil ...\hbox(0.0+0.0)x345.0 ..\glue 25.0 ..\glue(\lineskip) 0.0 ..\vbox(550.0+0.0)x345.0, glue set 502.00241fil ...\write-{} ...\glue(\topskip) 3.1128 ...\hbox(6.8872+2.15225)x345.0, glue set - 0.17497 ....\hbox(0.0+0.0)x15.0 ....\T1/cmr/m/n/10 O ....\T1/cmr/m/n/10 n ....\T1/cmr/m/n/10 c ....\T1/cmr/m/n/10 e ....\glue 3.33252 plus 1.66626 minus 1.11084
981
B
FINDEN UND LÖSEN VON PROBLEMEN
20 21 22 23
....\T1/cmr/m/n/10 i ....\T1/cmr/m/n/10 n ....\glue 3.33252 plus 1.66626 minus 1.11084 ....\T1/cmr/m/n/10 a
Das zweite Beispiel zeigt die symbolische Seitendarstellung in der Nähe eines Zeilenumbruchs. Man sieht den Abstand, den TEX am rechten Ende einer Textzeile hinzufügt (\rightskip in Zeile 5) und die Box, welche die Zeile enthält. Daher erscheint Zeile 6 wieder ausgerückt. Der \penalty-Wert entscheidet hier, wie schwierig (oder einfach) es für TEX wäre, nach dieser Zeile die Seite zu umbrechen. Der im Beispiel gezeigte Wert leitet sich aus dem Parameter \clubpenalty ab.1 In Zeile 7 wird zwischen den Zeilen ein vertikaler Abstand eingefügt. TEX errechnet diesen aus dem Wert von \baselineskip minus der Tiefe der vorhergehenden Zeilenbox und der Höhe der folgenden Zeilenbox, die in Zeile 8 beginnt. 1 2 3 4 5 6 7 8 9 10
....\T1/cmr/m/n/10 s ....\T1/cmr/m/n/10 o ....\T1/cmr/m/n/10 m ....\T1/cmr/m/n/10 e ....\glue(\rightskip) 0.0 ...\penalty 150 ...\glue(\baselineskip) 2.96054 ...\hbox(6.8872+1.94397)x345.0, glue set 0.55421 ....\T1/cmr/m/n/10 s ....\T1/cmr/m/n/10 t
Das letzte Beispiel zeigt einen Teil einer symbolischen Seitenausgabe, die aus einer Zeile, wie der folgenden erzeugt wird:
\begin{itemize} \item Test \end{itemize}
\section{Test}
Besonders interessant ist dabei der Teil, der durch \end{itemize} und \section{Test} erzeugt wird. In den Zeilen 1 bis 7 ist hier eine merkwürdige Ansammlung von \glue-Anweisungen zu sehen, die sich größtenteils gegenseitig aufheben. Dazwischen sind einige Penalty-Werte eingestreut: 1 2 3 4 5 6 7 8 9 10
...\penalty -51 ...\glue 10.0 plus 3.0 minus 5.0 ...\glue -10.0 plus -3.0 minus -5.0 ...\penalty -300 ...\glue 10.0 plus 3.0 minus 5.0 ...\glue -10.0 plus -3.0 minus -5.0 ...\glue 15.0694 plus 4.30554 minus 0.86108 ...\glue(\parskip) 0.0 plus 1.0 ...\glue(\baselineskip) 8.12001 ...\hbox(9.87999+0.0)x345.0, glue set 290.70172fil
1 Der Penalty-Wert für den Umbruch nach der ersten Zeile eines Absatzes ergibt sich aus dem ganzzahligen Parameter \clubpenalty , für den Umbruch vor der letzten Zeile aus \widowpenalty . Beide sind auf 150 voreingestellt, sollen einen Seitenumbruch also nur ein wenig erschweren.
982
B.3 TEX und LATEX-Tracingbefehle
Diese Zeilen werden durch verschiedene \addpenalty- und \addvspaceBefehle generiert. Die Zeilen 1 und 2 beispielsweise zeigen den Penalty-Wert und den elastischen Abstand, die durch \end{itemize} eingefügt werden. Der Befehl \section fügt dann einen Umbruchpunkt ein, wodurch er (mit einem \@secpenalty-Wert von -300) signalisiert, dass sich die Stelle vor dem Abschnitt gut für einen Seitenumbruch eignet. Der Umbruch sollte eigentlich sogar vor dem \glue-Befehl in Zeile 2 erfolgen, weil ansonsten ein seltsamer Leerraum am Fuß der Seite verbleibt. Da es technisch nicht möglich ist, Material wieder von der Druckfahne zu entfernen, bedient sich \addpenalty eines Tricks: Der Befehl fügt zunächst einen negativen Abstand ein (Zeile 3), gefolgt von dem Penalty-Wert (Zeile 4), und gibt dann wieder den \glue-Befehl aus (Zeile 5). In den Zeilen 6 und 7 verwendet \addvspace die gleiche Methode, um einen vertikalen Abstand vor der Überschrift einzufügen. TEX fügt die Zeilen 8 und 9 hinzu, wenn der eigentliche Überschriftstext (Zeile 10) auf der Druckfahne positioniert wird. Man beachte, dass die Überschrift technisch als „Absatz“ betrachtet wird; daher kommt noch ein \parskip-Abstand hinzu. Aus diesem Grund sollte ein Vergrößern dieses Parameters sehr sorgfältig geplant werden. Das trifft auch für andere Parameter zu (wie etwa denjenigen, der in Zeile 7 eingefügt wird). Der Befehl \showoutput erzeugt auch symbolische Darstellungen über- Nebeneffekt von laufender Boxen. Die Überwachung endet dabei am Ende der aktuellen Umge- \showoutput bung oder der nächsten schließenden Klammer. Um also die Ausgabe ganzer Seiten zu sehen, muss man dafür sorgen, dass der Seitenumbruch erfolgt, bevor die nächste Gruppe endet. Seitenumbrüche überwachen TEX bietet auch Daten zum Überwachen von Seitenumbrüchen. Um sie anzeigen zu lassen, muss man den internen Zähler \tracingpages auf eine positive ganze Zahl setzen:
\tracingonline=1 \tracingpages=1 Durch den positiven Wert für \tracingonline werden die Überwachungsdaten nicht nur in die Protokolldatei (Vorgabe) sondern auch auf dem Bildschirm ausgegeben. Wenn man den vorigen Absatz, der mit „\TeX{} bietet auch...“ beginnt, als eigenständiges Dokument verarbeitet, erzeugt das Seiten-Tracing die folgenden Zeilen: 1 2 3 4 5 6 7
%% goal height=522.0, max depth=4.0 % t=10.0 g=522.0 b=10000 p=150 c=100000# % t=22.0 g=522.0 b=10000 p=0 c=100000# % t=55.0 plus 4.0 g=522.0 b=10000 p=-51 c=100000# % t=77.0 plus 8.0 g=522.0 b=10000 p=300 c=100000# % t=89.0 plus 8.0 g=522.0 b=10000 p=0 c=100000# % t=90.94397 plus 8.0 plus 1.0fil g=522.0 b=0 p=-10000 c=-10000#
Die mit zwei Prozentzeichen beginnende erste Zeile gibt die anvisierte Seitenhöhe an („goal height“; hier 522pt), aus der sich bei einem \baselineskip-
983
B
FINDEN UND LÖSEN VON PROBLEMEN
Kandidaten für einen Umbruch
Anvisierte Seitenhöhe
Badness-Wert für Seitenumbruch
Penalty-Wert für Seitenumbruch
Kosten für einen Seitenumbruch
984
Wert von 12pt insgesamt 43 Zeilen ergeben. Der in dieser Rechnung verbleibende Fehlbetrag von 2pt rührt daher, dass der Abstand \topskip zum Positionieren der ersten Zeile einen Wert von lediglich 10pt hat. Lässt sich aus der Seitenhöhe keine glatte Anzahl von Zeilen errechnen, so können leichter Probleme wie unzureichend gefüllte vertikale Boxen (\vbox) entstehen. Die verbleibenden Zeilen, die alle mit nur einem Prozentzeichen beginnen, zeigen jeweils eine neue Position, die TEX für einen Seitenumbruch in Betracht gezogen hat. Sie lassen sich folgendermaßen interpretieren: Der Wert t= gibt die bisherige Länge der Druckfahne an, zuzüglich der Gesamtsumme der Dehn- und Stauchwerte etwaig vorhandener vertikaler elastischer Längen. Zeile 4 zeigt beispielsweise, dass abgesetzte Verbatim-Umgebungen im Layout dieses Buches mit einem zusätzlichen Abstand von 10pt plus einer dehnbaren Länge von 4pt versehen sind. (Die Verbatim-Zeilen werden in einer kleineren Schrift mit einem \baselineskip-Wert von nur 11pt gesetzt.) Zwischen Zeile 4 und 5 wird noch einmal der gleiche Betrag hinzugefügt. Der Wert g= gibt die an diesem Punkt anvisierte Seitenhöhe an. Er ändert sich nur, wenn der verfügbare Raum auf der Druckfahne zwischenzeitlich durch Gleitobjekte oder ähnliche Elemente reduziert wurde. Mit b= gibt TEX den Badness-Wert für einen Seitenumbruch an dieser Position an. Dieser Wert errechnet sich aus dem Faktor, mit welchem die zur Verfügung stehenden dehn- oder stauchbaren Abstände von t= multipliziert werden müssen, um die unter g= anvisierte Seitenhöhe zu erhalten. Bei diesem Beispiel ist die Seite fast leer, so dass sich immer ein Badness-Wert von 10000 (unendlich schlecht) ergibt. Erst in Zeile 7, in der die elastische Länge fil eingefügt wird, betrachtet TEX die Seite plötzlich als optimal (b=0). TEX verknüpft mit jeder Umbruchposition einen numerischen \penaltyBefehl, der angibt, wie günstig ein Seitenumbruch an dieser Stelle wäre. Dieser Wert ist als p= aufgeführt. So darf z.B. direkt vor einer abgesetzten VerbatimUmgebung kein Seitenumbruch erfolgen. Daher ist der Wert t= in Zeile 4 so viel höher als in Zeile 3, da hier der Seite zwei nicht trennbare Zeilen hinzugefügt wurden. Nach der Umgebung wird ein Umbruch hingegen durch einen Bonus (p=-51) als besonders günstig gekennzeichnet. Zeile 5 zeigt, dass ein Umbruch nach der ersten Zeile des zweizeiligen Absatzfragmentes als sehr ungünstig angesehen wird (p=300). Er würde zu verwaisten einzelnen Zeilen am Ende der aktuellen und am Anfang der nächsten Seite führen. Der erste dieser Umbruchfehler, auch Waisenkind oder Schusterjunge genannt, wird mit dem Penalty-Wert \clubpenalty belegt; der zweite Fall, auch Witwe oder Hurenkind genannt, mit dem Penalty-Wert \widowpenalty. Beide Penalty-Werte betragen jeweils 150, wodurch sich die Summe von 300 ergibt. Der Wert c= schließlich beschreibt die errechneten „Kosten“ für einen Seitenumbruch an der jeweiligen Stelle. Er wird mittels einer Formel berechnet, die sowohl den Badness-Wert der fertigen Seite (b=) berücksichtigt als auch die Frage, wie günstig (p=) ein Umbruch an dieser Stelle wäre. TEX vergleicht diese Kostenwerte und nimmt den Seitenumbruch letztendlich an der kostengünstigsten Stelle vor. Endet eine Zeile auf #, dann betrachtet TEX diese Position von allen bisher ausgewerteten Stellen als die beste für einen Seitenumbruch. Im Beispiel sind alle Zeilen mit einem #-Zeichen versehen – das ist nicht weiter überraschend, da TEX bei gleichen „Kosten“ spätere Umbruchpositionen als besser ansieht und alle Positionen außer der letzten als gleich schlecht eingestuft sind.
B.3 TEX und LATEX-Tracingbefehle
Für den Fall, dass Seiten bei einem Umbruch an einer bestimmten Position überfüllt würden, kennzeichnet TEX die betreffenden Stellen mit b=* . Ab dieser Zeile sucht TEX dann nicht mehr nach weiteren Umbruchpositionen, sondern umbricht die Seite an der bisher günstigsten Stelle. Wer an weiteren Erläuterungen zu den Daten, die von diesen Low-LevelAnzeigefunktionen ausgegeben werden, interessiert ist, sollte [87, S. 112] zu Rate ziehen.
B.3.3 Diagnose und Lösung von Absatzproblemen Für den Fall, dass TEX Zeilenumbrüche in einem Absatz nicht in geeigneter Weise anordnen kann, lässt das Programm als letztes Mittel ein oder mehrere „überlaufende“ Zeilen zu. Jede dieser Zeilen erzeugt eine Warnung wie die folgende auf dem Bildschirm und in der Protokolldatei:
Overfull \hbox (6.762pt too wide) in paragraph at lines 4267--4285 /
[email protected]/Hier wer-den die Text-zei-le und die Zei-len-num-mern des Ab-sat-zes, der sie enthält,| Hier werden die Textzeile und die Zeilennummern des Absatzes, der sie enthält, symbolisch dargestellt. Durch einen Blick auf die symbolische Darstellung findet man leicht heraus, dass sich das Problem ergibt, weil TEX das Wort „enthält“ nicht trennen kann.1 Damit solche Zeilen im Dokument extra gekennzeichnet werden, muss man den Parameter \overfullrule auf einen positiven Wert setzen. Für den hier gezeigten Absatz wurde er auf 5pt eingestellt. Dadurch erzeugt er den schwarzen Tintenklecks, der die überlaufende Zeile deutlich hervorhebt. In den Standarddokumentenklassen lässt sich dieses Verhalten mit der Option draft aktivieren. Andererseits kann es auch sein, dass man nur gering überlaufende Zeilen nicht als störend ansieht. In diesem Falle kann man den auf 0.1pt voreingestellten Parameter \hfuzz ändern; es werden nur Zeilen gemeldet, die um mehr als den Wert dieses Parameters in den Rand hineinragen. Wenn TEX einen Absatz nicht zufrieden stellend umbricht, so kann dies verschiedene Ursachen haben: Oftmals liegt es an der Silbentrennung im Zusammenhang mit nicht trennbaren Worten, wie im letzten Beispiel, oder an den Parametereinstellungen für den Absatzalgorithmus. Oder der Text passt, unter Berücksichtigung ästhetischer Gesichtspunkte wie etwa eines akzeptablen Grauwertes der einzelnen Zeilen, einfach nicht in die Begrenzungen, welche durch die Spaltenbreite oder andere Parameter vorgegeben sind. In letzterem Falle bleibt einem normalerweise nichts anderes übrig, als den Text teilweise umzuformulieren. Probleme mit der Silbentrennung Wenn die benötigten Trennmuster geladen sind, kann TEX viele Sprachen recht gut verarbeiten [117]. Das Programm findet jedoch normalerweise nicht alle möglichen Stellen, an denen eine Trennung erfolgen kann, so dass man hier hin und wieder nachhelfen muss. Besonders im Deutschen kann es bei 1 T X kann das Wort „ent-hält“ natürlich sehr wohl trennen; für dieses Beispiel wurde das E Programm jedoch explizit daran gehindert. Ansonsten wäre der Absatz fehlerfrei gesetzt worden.
985
B
FINDEN UND LÖSEN VON PROBLEMEN
langen zusammengesetzen Wörtern auch manchmal zu Fehltrennungen kommen. Um herauszufinden, welche Trennpositionen TEX für ein Wort wie „Gleitobjektumgebungen“ kennt, übergibt man das Wort oder den Ausdruck einfach als Argument an den Befehl \showhyphens :
\showhyphens{Gleitobjektumgebungen} Dieser Ausdruck schreibt bei der Verarbeitung mit LaTEX einige Protokolldaten auf den Bildschirm und in die Protokolldatei. Die von TEX bestimmten Trennpositionen werden durch Trennstriche gekennzeichnet:
[] \T1/cmr/m/n/10 Gleit-ob-jek-tum-ge-bun-gen Wie leider zu erkennen ist, wird das Wort an der Nahtstelle falsch getrennt. Mithilfe des Befehls \- kann man fehlende oder falsche Trennpositionen lokal im Text ergänzen bzw. korrigieren, indem man, wie im folgenden Beispiel, alle erlaubten bzw. gewünschten Trennungen für das Wort angibt:
Gleit\-ob\-jekt\-um\-ge\-bun\-gen Stattdessen kann man auch, wie für dieses Buch mehrfach geschehen, eine \hyphenation-Deklaration in der Präambel vornehmen:
\hyphenation{Gleit-ob-jekt-um-ge-bun-gen Gleit-ob-jekt-um-ge-bung} Das letztere Verfahren ist besonders nützlich, wenn man eine falsche Trennung entdeckt oder häufig ein Wort verwendet, von dem man weiß, dass TEX dort wichtige Trennpositionen nicht kennt. Man muss jedoch berücksichtigen, dass TEX diese expliziten Angaben nur verwendet, um genau in dieser Form erscheinende Wörter zu trennen. Für die Singularform „Gleitobjektumgebung“ musste also eine eigene Auflistung der Trennpositionen erfolgen. Die \hyphenation-Deklarationen gelten immer nur für die aktuelle Sprache. Werden in einem Dokument verschiedene Sprachen benutzt – beispielsweise mithilfe der Funktionen des babel-Systems –, dann muss man vor der jeweiligen Deklaration immer zunächst auf die betreffende Sprache umschalten. Überwachen des Absatzalgorithmus Da TEX zum Optimieren von Absatzumbrüchen einen global optimierenden Algorithmus verwendet, ist es nicht immer so einfach nachzuvollziehen, warum gerade eine bestimmte Lösung gewählt wurde. Gegebenenfalls kann man die Entscheidungen im Verlauf des Absatzumbruchs mithilfe der folgenden Deklarationen nachverfolgen:1
\tracingparagraphs=1 \tracingonline=1 Für Leser, die wirklich verstehen möchten, auf welcher Grundlage bestimmte Entscheidungen gefällt werden, folgen hier einige Beispiele mit detaillierten Erläuterungen. 1 Diese Parameter werden auch durch einen \tracingall-Befehl eingeschaltet, so dass man in diesem Falle viele Zeilen an Daten zu Absatzumbrüchen erhält, obwohl man vielleicht ganz andere Informationen benötigt.
986
B.3 TEX und LATEX-Tracingbefehle
Die Absatzüberwachung gibt Daten aus, die zunächst etwas einschüchternd wirken. Der Beispieltext „The \hyphenation declarations apply to the current language, so if a document uses several languages—for example, by using the methods provided by the babel system—then you need to switch to the right language before issuing the relevant declarations.“ erzeugt zum Beispiel Daten, die folgendermaßen beginnen: 1 2 3 4
@firstpass @secondpass []\T1/cmr/m/n/10 The [] dec-la-ra-tions ap-ply to the cur-rent lan-guage, so @ via @@0 b=3219 p=0 d=10436441
Zeile 2 besagt, dass TEX sofort davon abgesehen hat, den Absatz ohne Silbentrennung zu setzen. Dies liegt daran, dass der Wert von \pretolerance im Quelltext für dieses Buch auf 100 gesetzt wurde. Andernfalls wäre TEX vielleicht weiter gekommen oder hätte den Absatz sogar setzen können. In englischen Texten lässt sich normalerweise ein Großteil der Absätze ohne Silbentrennung vernünftig setzen – in deutschen Texten mit durchschnittlich längeren Wörtern ist dies eher unwahrscheinlich. Zusätzlich zu @secondpass erfolgt manchmal noch der Eintrag @emergencypass, der bedeutet, dass TEX trotz Silbentrennung keine geeignete Lösung finden konnte und daher einen weiteren Verarbeitungslauf unter Zuhilfenahme der Länge \emergencystretch durchgeführt hat1 . Zeile 3 zeigt, wie weit TEX lesen musste, um den ersten potentiellen Zeilenumbruch mit einem Badness-Wert unter ∞ = 10000 zu finden. In Zeile 4 folgen nähere Einzelheiten zu diesem möglichen Umbruch. Derartige Zeilen beginnen mit einem einzelnen @-Zeichen. Der Eintrag via verweist auf die vorhergehende Umbruchposition (in diesem Falle @@0 für den Absatzanfang), den Badness-Wert der Zeile (b=), den Penalty-Wert für einen Umbruch an dieser Stelle (p=) und weitere Strafpunkte (englisch: demerits; d=), die mit dem Umbrechen in Verbindung stehen. Bei letzteren handelt es sich um „Kosten“, welche außer dem Badness- und dem Penalty-Wert noch weitere Kontextinformationen berücksichtigen, wie etwa das Umbrechen an einem Trennstrich oder die visuelle Verträglichkeit mit der vorhergehenden Zeile. 5
Bis zu drei Durchläufe bei Absatzdaten
@@1: line 1.0 t=10436441 -> @@0
In Zeile 5 teilt TEX mit, dass über die in Zeile 3 genannte Umbruchposition eine Zeile mit sehr weiten Wortzwischenräumen gebildet werden könnte. Die Gesamtkosten (t=) entsprächen dabei den Strafpunkten aus Zeile 4. Diese Zeile würde an der Umbruchposition @@0 beginnen. Der Text line 1.0 nennt die Nummer der zu erzeugenden Zeile, wobei die Suffixe .0, .1, .2, .3 für sehr weite, weite, passende bzw. enge Wortzwischenräume in der Zeile stehen. Diese Klassifizierung ist wichtig, um die visuelle Verträglichkeit aufeinander folgender Zeilen zu vergleichen. TEX findet nun immer weitere potenzielle Zeilenumbrüche, wie etwa nach dem „if“ in Zeile 6 und nach dem „a“ in Zeile 9. Jedes Mal teilt TEX mit, welche Art von Zeile sich bei einem Umbruch an dem betreffenden Punkt ergeben würde. Ein b=* weist darauf hin, dass TEX keine passende Stelle für einen Zeilenumbruch finden konnte und daher eine unpassende Lösung gewählt hat (welche also den \tolerance-Wert für die betreffende Zeile überschreitet). 6 7 8 9
if @ via @@0 b=1087 p=0 d=1213409 @@2: line 1.0 t=1213409 -> @@0 a
1 Damit es dazu kommt, muss \emergencystretch auf einen positiven Wert eingestellt sein (vgl. die Erläuterungen in Abschnitt 3.1.11).
987
B
FINDEN UND LÖSEN VON PROBLEMEN
10 11 12 13 14 15 16 17
@ via @@0 b=334 p=0 d=128336 @@3: line 1.0 t=128336 -> @@0 doc@\discretionary via @@0 b=0 p=50 d=2600 @@4: line 1.2- t=2600 -> @@0 u@\discretionary via @@0 b=1 p=50 d=2621 @@5: line 1.2- t=2621 -> @@0
Durch Trennen des Wortes doc-u-ment findet TEX noch zwei weitere Umbruchpositionen (in Zeile 12 und 15). Der Penalty-Wert für diese Umbrüche beträgt 50, was dem Wert des Parameters \hyphenpenalty (Umbruch an einem Trennstrich) entspricht. Zeile 15 gibt den letzten möglichen Umbruch für die erste Zeile des Absatzes an. Alle weiteren Umbruchpositionen würden eine überlaufende Zeile erzeugen. Daher zeigt die nächste Protokollzeile wieder weiteren Text; keine der möglichen Umbruchpositionen in diesem Text lässt sich verwenden, da die zweite Zeile sonst außerhalb des \tolerance-Wertes liegen würde. 18 19 20 21
ment uses sev-eral languages---for ex-am-ple, by us-ing the meth@\discretionary via @@1 b=1194 p=50 d=1452116 @\discretionary via @@2 b=2875 p=50 d=8325725 @@6: line 2.0- t=9539134 -> @@2
Es gibt nun zwei verschiedene Möglichkeiten für den Umbruch zur zweiten Zeile: Er kann an Position @@1 (Zeile 19) oder an Position @@2 (Zeile 20) liegen. Vergleicht man nur diese beiden Lösungsmöglichkeiten für die zweite Zeile des Absatzes, dann wäre die erste die bessere Wahl: Ihr Badness-Wert beträgt 1194, während die zweite Möglichkeit einen Badness-Wert von 2875 aufweist, der als ein Faktor von 5 bei den „Kosten“ (d=) zu Buche schlägt. TEX betrachtet trotzdem die zweite Position als die bessere Lösung, da ein Ende der ersten Zeile an Position @@1 so viel schlechter wäre als ein Zeilenende an Position @@2, dass die Gesamtkosten für einen Umbruch bei der zweiten Alternative immer noch geringer sind. TEX hält daher in Zeile 21 fest, dass der beste Weg zu der in Zeile 18 genannten Umbruchposition über @@2 führt und mit Gesamtkosten von t=9539134 einhergeht. Für den weiteren Verlauf muss TEX nicht mehr berücksichtigen, dass es verschiedene Möglichkeiten gab, Position @@6 zu erreichen; das Programm muss nur den besten Weg dorthin festhalten. Genauer gesagt, muss sich TEX die jeweils beste Möglichkeit eines Zeilenumbruchs für jeden der vier Zeilentypen (sehr weit, weit, passend, eng) merken, da der Algorithmus andere Strafpunkte verhängt, wenn aufeinander folgende Zeilen optisch nicht zueinander passen (also etwa eine weit gesetzte Zeile auf eine enge folgt). Daher erfolgt später im Verlauf des Tracings (die Zeilen 22–40 werden hier nicht angezeigt) folgende Ausgabe: 41 42 43 44 45 46
by @ via @ via @ via @@10: @@11:
@@3 b=19 p=0 d=10841 @@4 b=9 p=0 d=361 @@5 b=42 p=0 d=2704 line 2.1 t=5325 -> @@5 line 2.2 t=2961 -> @@4
Diese Daten deuten darauf hin, dass es drei Möglichkeiten gibt, die Zeile an dem Wort „by“ zu umbrechen: indem man die Zeile an Position @@3, @@4 oder @@5 beginnt. Eine Zeile mit einem Badness-Wert bis einschließlich 12 wird als passend angesehen (Suffix .2); eine gedehnte Zeile, deren Badness nicht über 100 liegt, gilt als weit (Suffix .1). TEX merkt sich hier also zwei günstige Umbruchpositionen für seine weiteren Berechnungen – eine an Position @@5 und die andere an Position @@4. 988
B.3 TEX und LATEX-Tracingbefehle
Wo die Umbrüche letztendlich tatsächlich erfolgen, wird erst entschieden, wenn das Ende des Absatzes erreicht ist. Daher können selbst kleine Änderungen irgendwo im Absatz dazu führen, dass TEX eine andere Anordnung von Umbrüchen als beste Lösung für die aktuelle Umbruchaufgabe wählt, da diese die geringsten Kosten erzeugt. Da der Algorithmus sehr komplex ist, haben kleinere Änderungen manchmal überraschende Wirkungen. So kann das Löschen eines Wortes einen Absatz durchaus um eine Zeile verlängern. TEX kann nämlich in diesem Moment entscheiden, dass gleichmäßig weit gesetzte Zeilen oder ein nicht getrenntes Wort jeder anderen Möglichkeit, den Absatz zu umbrechen, vorzuziehen sind. In [87, S. 98] sind alle Parameter, die den Zeilenumbruch beeinflussen, ausführlich beschrieben. Soweit notwendig kann man mit \linebreak Umbrüche an einer bestimmten Stelle erzwingen oder sie mit \nolinebreak bzw. einem ~-Zeichen anstelle eines Leerzeichens verhindern. Am Anfang eines Absatzes ist die Auswahl natürlich ziemlich klein und es kann durchaus sein, dass man einen Satz umformulieren muss, um einen ungünstigen Umbruch zu vermeiden. Später in einem Absatz kann man jedoch nahezu jede mögliche Umbruchposition verwenden, ohne dass man dazu den angegebenen \toleranceWert überschreiten müsste.
Kürzen oder Verlängern von Absätzen Als weiteres Low-Level-Werkzeug lässt sich der interne Zähler \looseness verwenden. Setzt man diesen auf eine ganze Zahl n, die nicht null ist, so versucht TEX den nächsten Absatz unter Berücksichtigung aller weiteren Rahmenbedingungen (wie etwa des erlaubten \tolerance-Wertes) um n Zeilen zu verlängern (positiver Wert) oder zu verkürzen (negativer Wert). Die letzten zwei Absätze des vorigen Abschnitts wurden durch die folgenden Befehle künstlich um eine Zeile verkürzt bzw. verlängert:
\looseness=-1 Diese Daten deuten darauf hin, dass es drei Möglichkeiten ... \looseness=1 Wo die Umbrüche letztendlich tatsächlich erfolgen, wird erst ... Nicht immer, wenn man einen \looseness-Wert festlegt, wirkt sich dieser auch aus. Für TEX ist es viel schwieriger, einen Absatz zu verkürzen als ihn zu verlängern, da sich Wortzwischenräume im Vergleich zu ihrer Dehnbarkeit nur wenig stauchen lassen. Die besten Ergebnisse erzielt man bei langen Absätzen, deren letzte Zeile sehr kurz ist (der gewählte Absatz enthielt nur „@@4.“ in seiner letzten Zeile). Entsprechend lässt sich ein Absatz leichter verlängern, wenn er bereits länger und die letzte Zeile fast voll ist. Möglicherweise muss man jedoch die letzten Wörter des Absatzes mit einem \mbox-Befehl zusammenfassen, damit nicht nur ein einzelnes Wort in der letzten Zeile erscheint.
B.3.4 Weitere Low-Level-Überwachungsfunktionen TEX verfügt über eine Reihe weiterer interner ganzzahliger Parameter, die manchmal helfen können, den Ursprung eines Problems ausfindig zu machen. Sie sind hier im Folgenden mit einer kurzen Erläuterung zu ihrem Gebrauch aufgeführt. 989
B
FINDEN UND LÖSEN VON PROBLEMEN
BildschirmDer Befehl \tracingonline wurde ja bereits angesprochen. Mit einem überwachung positiven Wert sorgt er dafür, dass alle Protokolldaten auch auf dem Bild-
Boxeninhalte
schirm erscheinen; andernfalls werden die meisten nur in die Protokolldatei geschrieben. Dieser Parameter wird von \tracingall automatisch eingeschaltet. Durch den Befehl \tracingoutput wird der Seiteninhalt protokolliert. Was gezeigt wird, hängt dabei von zwei weiteren Parametern ab: \showboxdepth bestimmt, bis zu welcher Ebene verschachtelte Boxen dargestellt werden und \showboxbreadth legt fest, wie viel Material für jede Ebene angezeigt wird. Alles, was diese beiden Werte übersteigt, wird in der symbolischen Darstellung mit etc. oder [] (bei einer verschachtelten Box) abgekürzt. Der LaTEX-Befehl \showoutput setzt diese Werte auf ihr Maximum und \tracingoutput auf 1, so dass man so ausführliche Informationen wie möglich erhält. Der Befehl \showoutput wird von \tracingall automatisch aufgerufen. Mithilfe des Befehls \showbox kann man den Inhalt einer mit \sbox oder \savebox erzeugten Box anzeigen lassen.
\newsavebox\test \sbox\test{1 Test} {\tracingonline=1 \showbox\test } Das Ergebnis ist jedoch nicht besonders hilfreich, wenn man nicht gleichzeitig auch \showboxdepth und \showboxbreadth anpasst. Darum ist der LaTEXBefehl \showoutput hier die bessere Alternative:
{\showoutput \showbox\test } Man beachte, dass der Geltungsbereich von \showoutput durch die Klammern begrenzt wird. Ohne die Klammern würden alle weiteren Seitenboxen angezeigt, was vielleicht nicht so interessant wäre. Auf dem Bildschirm wird die gleiche symbolische Darstellung verwendet, wie sie in Abschnitt B.3.2 besprochen wurde.
> \box26= \hbox(6.83331+0.0)x27.00003 .\OT1/cmr/m/n/10 1 .\glue 3.33333 plus 1.66498 minus 1.11221 .\OT1/cmr/m/n/10 T .\OT1/cmr/m/n/10 e .\OT1/cmr/m/n/10 s .\OT1/cmr/m/n/10 t Durch Einfügen von \scrollmode oder \batchmode vor dem \showboxBefehl hält LaTEX an diesem Punkt nicht an. Man kann die Daten dann in der Protokolldatei untersuchen. Lokal zurückgesetzte Um zu sehen, welche Werte und Definitionen TEX wiederherstellt, wenn Werte eine Gruppe endet, kann man \tracingrestores auf einen positiven Wert setzen. Dieser Parameter wird von \tracingall automatisch eingeschaltet. Der List-Stack von TE X Mithilfe des Befehls \showlists kann man TEX anweisen, den List-Stack (Listen-Stapelspeicher; vertikal, horizontal) anzuzeigen, mit dem das Pro-
990
B.3 TEX und LATEX-Tracingbefehle
gramm gerade arbeitet. Schreibt man beispielsweise den Befehl \showlists in die Fußnote1 des aktuellen Absatzes, dann erhält man die folgenden Einträge in der Protokolldatei:
### horizontal mode entered at line 4840 (language3:hyphenmin2,2) [] spacefactor 1000, current language 3 ### internal vertical mode entered at line 4840 prevdepth ignored ### horizontal mode entered at line 4824 (language3:hyphenmin2,2) [] spacefactor 1000, current language 3 ### vertical mode entered at line 0 ### current page: [] total height 546.50224 plus 24.0 goal height 572.56006 prevdepth 2.22221 Der Text der Fußnote beginnt in Zeile 4840 und der Befehl \spacefactor wird an ihrem Anfang auf 1000 gesetzt. Der Text verwendet die Silbentrennungsmuster für neue deutsche Rechtschreibung (im Buch language3) mit einem Wert für \lefthyphenmin und \righthyphenmin von jeweils 2 (siehe Abschnitt 9.5.1 auf Seite 596). Die Fußnote selbst beginnt in der gleichen Zeile und steuert den „internen vertikalen Modus“ bei. TEX ignoriert dabei völlig zu Recht den äußeren Wert von \prevdepth . Die Fußnote ist Teil eines Absatzes, der in der Quellcodezeile 4824 beginnt. Dieser wiederum ist in eine vertikale Liste eingebettet, die in Zeile 0 anfängt, was darauf hindeutet, dass es sich um den Fließtext der Kolumne handelt. Und schließlich enthalten die ausgegebenen Daten noch Informationen über die gerade im Aufbau befindliche Seitenliste, einschließlich der aktuellen Seitenlänge, der anvisierten Höhe und des Wertes von \prevdepth (also der Tiefe der momentan letzten Zeile auf der Seite). Aufgrund der für \showboxbreadth und \showboxdepth voreingestellten Werte sind die Inhalte aller Listen als [] abgekürzt. Um weitere Einzelheiten zu sehen, muss man die Werte entsprechend anpassen oder mit \showoutput\showlists alle Daten anzeigen lassen. Der Befehl \tracingcommands , der alle während der Verarbeitung von TEX aufgerufenen Basisbefehle zeigt, ist für sich allein genommen nicht besonders nützlich. In Kombination mit anderen Überwachungsoptionen kann er sich jedoch als hilfreich erweisen. Ein mit ihm verwandter interner ganzzahliger Befehl ist \tracingmacros , der alle von TEX durchgeführten Makroexpansionen anzeigt. Auf den Wert 2 eingestellt zeigt er auch die Verarbeitung von Bedingungen. Beide Parameter werden von \tracingall automatisch eingeschaltet. Sofern man alles fehlerfrei eingerichtet hat, ist es unwahrscheinlich, dass TEX jemals auf eine Position im aktuellen Zeichensatz stößt, die nicht mit einer Glyphe verknüpft ist. Einige Befehle, wie etwa \symbol , können jedoch explizit auf eine bestimmte Position verweisen, so dass sich Fehler nicht ganz ausschließen lassen. Leider betrachtet TEX ein solches Ereignis nicht als Fehler
Überwachen der Verarbeitung
Fehlende Zeichen aufspüren
1 Eine Fußnote beginnt eine neue vertikale Liste und darin eine neue horizontale Liste für den Fußnotentext.
991
B
FINDEN UND LÖSEN VON PROBLEMEN
(was es aber tun sollte). Das Programm protokolliert derartige fehlende Zeichen lediglich in Form unauffälliger Einträge in der Protokolldatei, und auch nur dann, wenn der Befehl \tracinglostchars auf einen positiven Wert eingestellt ist. LaTEX versucht hier zu unterstützen, indem es diesen ganzzahligen Parameter auf 1 setzt. Abschließend kann man TEX noch anweisen, eine Datei zeilenweise zu Dokumente verarbeiten. Mit einem Wert von 1 für \pausing wird jede Quellcodezeile schrittweise zunächst einmal nur angezeigt (mit => als Suffix). TEX wartet dann auf Anweiverarbeiten sungen, wie diese verarbeitet werden soll. Durch Drücken der Eingabetaste übernimmt TEX die Zeile unverändert; jede andere Eingabe bedeutet, dass TEX die Angaben des Benutzers anstelle der aktuellen Zeile verwenden soll. TEX führt dann den ihm übergebenen Code aus und formatiert ihn. Danach gibt das Programm die nächste Zeile aus und hält erneut an. Um mit der normalen Verarbeitung fortzufahren, muss man \pausing=0 eingeben. Dabei darf man allerdings nicht vergessen, dass die Eingabe anstelle der Quellcodezeile verwendet wird, so dass man das entsprechende Material gegebenenfalls auch noch einmal wiederholen muss.
B.3.5 trace – Selektives Überwachen von Befehlen Der LaTEX-Befehl \tracingall (der aus Plain-TEX übernommen wurde) dient dazu, die Überwachung sämtlicher Abläufe einzuschalten. Es gibt jedoch einige Probleme mit diesem Befehl: 1. Es gibt keinen entsprechenden Befehl, um die Überwachung wieder abzuschalten. Entsprechend muss man den Geltungsbereich einschränken, was nicht immer hilfreich und manchmal sogar unmöglich ist. 2. Einige Teile von LaTEX erzeugen sehr umfangreiche Protokolldaten, die von nur geringem oder gar keinem Interesse für das aktuelle Problem sind. Lädt LaTEX beispielsweise einen neuen Zeichensatz, dann werden einige interne Routinen des NFSS ausgeführt, die Fontdefinitionstabellen durchsuchen oder andere Prozesse abwickeln. Und in 99,9% der Fälle ist man gar nicht an diesem Teil der Verarbeitung interessiert, sondern nur an den zwei Zeilen davor und den fünf Zeilen danach. Trotzdem muss man einige hundert Ausgabezeilen nach den benötigten Daten durchsuchen (wenn man sie überhaupt findet). Ein weiteres, recht anschauliches Beispiel ist eine Anweisung wie etwa \setlength\linewidth{1cm}. Standard-LaTEX erzeugt hierzu fünf Zeilen Protokolldaten. Hat man jedoch das calc-Paket geladen, so erhält man hier ein Datenvolumen von ungefähr 60 Zeilen. Das ist wahrscheinlich nicht ganz das, was man erwartet und auch nicht wirklich hilfreich, es sei denn, man möchte die Parsing-Routinen des calc-Paketes auf Fehler untersuchen (was idealerweise nicht notwendig sein sollte). Zum Lösen des ersten Problems stellt das trace-Paket [133] von Frank Mittelbach das Befehlspaar \traceon und \traceoff zur Verfügung. Verwendet man LaTEX auf Basis von TEX, dann ist der Befehl \traceon eigentlich nur eine andere Bezeichnung für \tracingall : Er aktiviert die gleichen Überwachungsschalter (wenn auch in anderer Reihenfolge, um sich nicht
992
B.3 TEX und LATEX-Tracingbefehle
selbst zu überwachen). Betreibt man LaTEX auf Basis der eTEX-Engine, so wird eTE X stellt weitere auch die Protokollierung von Zuweisungen und Gruppen eingeschaltet. Die Überwachungsdaten entsprechenden eTEX-Schalter sind \tracingassigns und \tracinggroups bereit (Details findet man im eTE X Manual [27]). Ein weiterer Unterschied zwischen \traceon und \tracingall besteht darin, dass letzterer Befehl die Überwachungsdaten immer auf dem Bildschirm ausgibt, während man \traceon mit der Option logonly anweisen kann, diese nur in die Protokolldatei zu schreiben. Das ist besonders nützlich, wenn die Ausgabe auf den Bildschirm sehr langsam ist (z.B. in einem Shellfenster unter emacs). Um das zweite Problem zu lösen, verfügt das trace-Paket über eine Reihe interner Befehle, mit denen sich die Überwachung zeitweise unterbinden lässt. Es definiert die sehr wortreichen der internen LaTEX-Funktionen so um, dass die Überwachung während ihrer Ausführung abgeschaltet ist. Dies trifft beispielsweise auf die Funktion zum Laden neuer Zeichensätze zu. Beginnt ein Dokument mit den beiden Formeln
$a \neq b$
\small
$A = \mathcal{A}$
dann lädt LaTEX an dieser Stelle 22 neue Zeichensätze.1 Der Standardbefehl \tracingall führt bei dieser Quellcodezeile zu einer Bildschirmausgabe von ungefähr 7500 Zeilen. Verwendet man \traceon, so werden hingegen nur 350 Zeilen ausgegeben (hauptsächlich zu dem Befehl \small). Es sind nur wenige Befehle von der Überwachung ausgenommen und auch nur solche, bei denen es unwahrscheinlich ist, dass sie etwas mit dem aktuellen Problem zu tun haben. Benötigt man jedoch eine vollständige Überwachung, so kann man entweder \tracingall oder die Option full verwenden. In letzterem Falle verfolgt \traceon alle Vorgänge. Man kann aber immer noch festlegen, dass die Überwachungsdaten nur in die Protokolldatei geschrieben werden.
1 Das
lässt sich mittels der Option loading des tracefnt-Paketes überprüfen.
993
A n h a n g
C
LATEX-Software und Usergroups C.1 Wie erhält man Hilfe?. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
995
C.2 Wo bekommt man diese TEX-Dateien? . . . . . . . . . . . . . . . . . 996 C.3 Wie verwendet man CTAN? . . . . . . . . . . . . . . . . . . . . . . . . . 998 C.4 Dokumentation auf dem eigenen System . . . . . . . . . . . . . . . 1002 C.5 TEX-Usergroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
Die in diesem Buch beschriebenen Dateien sind in den meisten TEX-Distributionen, wie der TEX Live-DVD oder -CD-ROM (die mit diesem Buch mitgeliefert wird), oder auf den CTAN-DVDs von DANTE verfügbar. Die neuesten Versionen können außerdem direkt aus dem Internet heruntergeladen werden. Ziel dieses Anhangs ist es, Informationen bereitzustellen, die man benötigt, um die aktuellen Versionen dieser DVDs zu erhalten (auf Anfrage sind auch CDROMs erhältlich). Außerdem werden Hinweise erteilt, wie man die benötigten Dateien im Internet findet und herunterlädt.
C.1 Wie erhält man Hilfe? Die Autoren hoffen zwar, dass in den vorangegangenen Kapiteln bereits alle Fragen beantwortet wurden, aber ein paar Fragen werden wohl trotzdem noch offen sein. Bei Fragen, die sich auf spezielle, in diesem Buch besprochene Pakete beziehen, kann es hilfreich sein, die Originaldokumentation zu lesen, die mit dem Paket mitgeliefert wird. Anhang C.4 gibt Hinweise, wie man eine solche Dokumentation auf dem eigenen System findet. Eine sehr wertvolle Quelle sind die bestehenden „Frequently Asked Questions“ (häufig gestellte Fragen)-Dokumente, kurz FAQs. Die wichtigsten unter ihnen sind die UK-TUG FAQ von Robin Fairbairns, die unter http://www.tex. ac.uk/faq (oder http://faq.tug.org) verfügbar ist, und die DANTE FAQ
C
LATEX-SOFTWARE UND USERGROUPS
von Bernd Raichle u.a., die unter http://www.dante.de/faq/de-tex-faq (in Deutsch) verfügbar ist. Robins FAQ gibt es auch im HTML-Format auf der beigefügten CD-ROM im Verzeichnis /texmf/doc/html/faq/index.html. Da sich beide Dokumente jedoch permanent weiterentwickeln, empfiehlt es sich, wenn möglich, die Online-Version zu benutzen. Für den Fall, dass die Standardantworten nicht ausreichen, gibt es diverse Newsgroups, die sich allgemeinen Fragen zu TEX und LaTEX widmen: die wichtigste ist wahrscheinlich news://comp.text.tex. Sie erhält pro Tag mehr als 100 Anfragen. Viele der Autoren, die in diesem Buch erwähnt werden, verfassen regelmäßig Beiträge in diesen Newsgroups und helfen bei der Beantwortung der Fragen und Bitten. Auf diese Art gibt es riesige Mengen an hilfreichem Material auf dem Internet. Es kann bequem über Suchmaschinen durchsucht werden, die solche Beiträge in ihren Index aufnehmen. Jeder, der eine Nachricht an eine dieser Newsgroups schickt, sollte sich an die grundlegende Netiquette halten. Die Benutzergemeinschaft ist hilfsbereit, aber manchmal auch sehr direkt und erwartet, dass der Hilfesuchende vorher selbst einige Recherchen angestellt hat (z.B. zunächst die FAQs gelesen und dann die archivierten News durchsucht hat) und keine Fragen stellt, die schon hundert Mal beantwortet wurden. Eine gute Idee ist, sich vorab Eric Raymonds „How To Ask Questions The Smart Way“ durchzulesen, das unter http://www.catb.org/~esr/faqs/smart-questions.html verfügbar ist. Wenn möglich, sollte man stets ein kleines, aussagekräftiges und vollständiges Beispiel des anstehenden Problems beifügen, anhand dessen andere ohne Aufwand die aufgetretenen Symptome nachvollziehen können – dies spart den Helfern viel Zeit und führt möglicherweise zu einer schnelleren Antwort.
C.2 Wo bekommt man diese TEX-Dateien? Ein nützlicher Eintrittspunkt in die TEX-Welt ist die Homepage der TEX Users Group (http://www.tug.org; siehe Abbildung C.1). Von dort erreicht man die meisten Informationsquellen zu TEX und zugehörigen Programmen, die weltweit verfügbar sind. Von dieser Homepage gelangt man besonders gut auf einen der CTAN (Comprehensive TEX Archive Network)-Knoten. CTAN ist eine Gemeinschaftsarbeit, die 1992 von der technischen Arbeitsgruppe ins Leben gerufen wurde, die sich bei der TEX Users Group mit den TEX-Archivrichtlinien befasste. CTAN wurde ursprünglich von George Greenwade koordiniert, und zwar auf der Grundlage früherer Arbeiten von Peter Abbott (für einen historischen Abriss siehe [63]), und wird inzwischen von Jim Hefferon, Robin Fairbairns, Rainer Schöpf und Reinhard Zierke gepflegt (Stand: Sommer 2005). Das Archivnetzwerk dient hauptsächlich dazu, einen leichten Zugang zu aktuellen Versionen von TEX, LaTEX, METAFONT und Hilfsprogrammen sowie zugehörigen Dateien zu bieten. Derzeit gibt es drei Hauptknoten, die als FTP-Server fungieren: in Großbritannien (cam.ctan.org), in Deutschland (dante.ctan.org) und in den Vereinigten Staaten (tug.ctan.org). Zudem werden die Archive weltweit gespiegelt, und alle haben eine Webschnittstelle (siehe Abbildung C.2).
996
C.2 Wo bekommt man diese TEX-Dateien?
FAQ
TEX-Katalog
Neueste Updates auf CTAN
CTAN-Eintrittspunkt
Abbildung C.1: Die Homepage der TEX Users Group im Internet
Das Material auf dem CTAN wird regelmäßig (derzeit einmal pro Jahr) auf DVDs bereitgestellt (bei Bedarf wird das Material auch auf mehreren CD-ROMs bereitgestellt, die auf Anfrage über eine der TEX Usergroups bezogen werden, siehe unten). Eine der Distributionen ist die TEX Live-DVD bzw. CD-ROM ([158]; siehe auch http://tug.org/texlive), die eine „lauffähige“ Version von TEX für verschiedene Plattformen bereitstellt. TEX Live CD-ROMs werden seit 1996 durch Zusammenarbeit der TEX Users Group (TUG; Vereinigte Staaten) und den TEX-Usergroups u.a. in Deutschland, Frankreich, Großbritannien, Indien, den Niederlanden, Polen, der Slowakei und der Tschechischen Republik entwickelt. Diese Usergroups verteilen die TEX Live-Distribution an ihre Mitglieder, bei Bedarf sollte man sich direkt an sie wenden (ihre Adressen sind in Abschnitt C.5 angegeben). Eine weitere Distribution wird von der deutschsprachigen TEX-Usergroup DANTE (siehe Abschnitt C.5) bereitgestellt. Sie enthält auf einer DVD ein Image der kompletten CTAN-Verzeichnisstruktur (mehr als 4GB Daten). Ähnlich wie die TEX Live-DVD wird auch diese DANTE CTAN-DVD von den meisten Usergroups an ihre Mitglieder verteilt. Bei Interesse an dieser CTAN-DVD sollte man sich also auch hier wieder direkt an eine der Usergroups wenden.
997
C
LATEX-SOFTWARE UND USERGROUPS
C.3 Wie verwendet man CTAN? Im vorangegangenen Abschnitt wurden die CTAN-DVDs (ehemals CD-ROMs) von TEX Live und DANTE beschrieben. Sich die neueste Version dieser DVDs zu besorgen, ist eine optimale Möglichkeit, um Zugriff auf aktuelle Versionen des LaTEX-Programms zu erhalten. Für Leser mit einer Internetverbindung ist es trotzdem sinnvoll, ab und zu einen der CTAN-Knoten zu besuchen, um zu überprüfen, ob eine der LaTEXKomponenten, die sie benötigen, aktualisiert wurde. Insbesondere auf der Homepage der TEX Users Group gibt es einen Bereich, in dem die neuesten Updates aufgelistet sind, die auf dem CTAN verfügbar sind (siehe Abbildung C.1, unteres Oval). Updates, die sich auf diesen Internetseiten befinden, können heruntergeladen werden, indem man die neueste Version des angegebenen Paketes direkt aus einem CTAN-Archiv herunterlädt (zur genauen Vorgehensweise siehe Abschnitt C.3.2). Netzwerkverbindungen werden zwar von Tag zu Tag schneller, aber es ist trotzdem empfehlenswert, eine Verbindung zu einer Internetseite aufzubauen, die geographisch nicht zu weit vom eigenen Standort entfernt ist (Eine Liste der gespiegelten Seiten der CTAN-Knoten ist unter http://www.tug. org/tex-archive/CTAN.sites zu finden.).
C.3.1 Verwenden des TEX-Dateikatalogs Ein Katalog mit TEX- und LaTEX-verwandten Paketen, der von Graham Williams gepflegt wird, kann unter der Adresse http://datamining.csiro.au/tex/ catalogue.html abgerufen werden. Einen direkten Zugriff zum Katalog bietet auch die Homepage der TEX Users Group (siehe zweites Oval in Abbildung C.1). Was wichtiger ist: Über die CTAN-Schnittstelle (z.B. http://www.tug. org/ctan.html) kann der Katalog sogar durchsucht werden. In Abbildung C.2 ist zu sehen, wie nach der Eingabe der Zeichenfolge „graphicx“ im Bereich „Search Catalogue“ die Seite angezeigt wird, die im unteren Teil der Abbildung dargestellt ist. Auf dieser zweiten Seite kann man aus den Vorschlägen direkt den Eintrag auswählen, den man näher betrachten möchte (linke Liste auf der Seite), oder man kann den Link zum zugehörigen CTANVerzeichnis anklicken (rechte Liste auf der Seite).
C.3.2 Suchen und Herunterladen von Archivdateien Bei einem Blick zurück auf Abbildung C.2 stellt man fest, dass die Webschnittstelle eine einfache Möglichkeit bietet, um auf CTAN eine Datei zu finden. Tatsächlich muss man nur im CTAN-Suchbereich den gewünschten Suchbegriff eingeben. Im Beispiel wurde die Zeichenfolge „graphicx“ ausgewählt (oberes Oval in Abbildung C.2). Die Suchmaschine gibt daraufhin eine Liste aller Dateien aus, die im CTAN-Archiv dem Suchkriterium entsprechen (siehe oberen Teil der Abbildung C.3). Das Verzeichnis kann nun durchsucht und, wenn gewünscht, einzelne Dateien heruntergeladen werden. Es besteht auch die Möglichkeit, das gesamte Verzeichnis zu übertragen. Hierfür klickt man auf den Link „entire directory“ (ganz rechtes Oval in Abbildung C.3), der einen Sprung auf die Seite auslöst, die im unteren Teil der Abbildung C.3 zu
998
C.3 Wie verwendet man CTAN?
Führt zur Abbildung C.3
Abbildung C.2: CTAN-Homepage und TEX-Katalogeintrag
999
C
LATEX-SOFTWARE UND USERGROUPS
Kommt aus Abbildung C.2
Abbildung C.3: Verwenden der CTAN-Webschnittstelle
sehen ist. Auf dieser Seite hat der Anwender die Wahl zwischen einem gezippten tar-Archiv oder einem zip-Archiv. Durch einen Rechtsklick auf einen der beiden Zeiger (untere Ovale in Abbildung C.3) wird das Archiv im gewünschten Format auf den Rechner des Anwenders heruntergeladen, und die Dateien können installiert werden.
C.3.3 Dateien über die Kommandozeile herunterladen Wenn man die Internetadresse des Paketes kennt, das man herunterladen möchte (zum Beispiel durch eine Internetsuche), ist es möglicherweise praktischer, das Archiv direkt – das heißt ohne einen Web-Browser zu benutzen – über die Kommandozeile zu holen. In diesem Fall kann man FTP oder das Programm wget verwenden. Letzteres ermöglicht es, Dateien nicht interaktiv
1000
C.3 Wie verwendet man CTAN?
aus dem Internet herunterzuladen. Es unterstützt die Protokolle HTTP, HTTPS, und FTP. Das folgende Beispiel zeigt eine typische nicht interaktive Sitzung (Befehlseingaben vom Anwender sind unterstrichen). > wgetftp://ftp.dante.de/tex-archive/macros/latex/required/graphics.zip --18:13:27-ftp://ftp.dante.de/tex-archive/macros/latex/required/graphics.zip => ‘graphics.zip’ Resolving ftp.dante.de... 80.237.210.73 Connecting to ftp.dante.de[80.237.210.73]:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD /tex-archive/macros/latex/required ... done. ==> PASV ... done. ==> RETR graphics.zip ... done. Length: 361,065 (unauthoritative) 100%[====================================>] 361,065
378.48K/s
18:13:28 (377.84 KB/s) - ‘graphics.zip’ saved [361,065]
Alternativ kann man das FTP-Protokoll manuell verwenden. Nachdem man hier eine FTP-Verbindung zur CTAN-Seite (ftp.dante.de) aufgebaut hat, meldet man sich mit Benutzernamen anonymous oder ftp an. Als Passwort muss die eigene E-Mail-Adresse angegeben werden. Im Beispiel soll das graphics-Paket übertragen werden. Deshalb besteht der erste Schritt darin, in das Verzeichnis zu wechseln, in dem sich die Datei befindet (cd tex-archive/macros/latex/required ). Nach einer Anfrage über den Inhalt des Verzeichnisses (mit dem Befehl ls) kann das zip-Archiv heruntergeladen werden. Mit dem Befehl quit wird die FTP-Sitzung beendet. > ftp ftp.dante.de Connected to ftp.dante.de (80.237.210.73). 220 ProFTPD 1.2.10 Server (CTAN) [80.237.210.73] Name (ftp.dante.de:goossens): ftp 331 Guest login ok, send your complete e-mail address as password. Password:
[email protected] (Hier die eigene E-Mail-Adresse verwenden!) 230 Anonymous access granted, restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd tex-archive/macros/latex/required 250 CWD command successful ftp> ls 227 Entering Passive Mode (80,237,210,73,145,185). 150 Opening ASCII mode data connection for file list drwxrwxr-x 6 ftpmaint server 94 Oct 22 2004 amslatex -rw-rw-r-1 ftpmaint server 2121853 May 1 17:26 amslatex.zip drwxrwxr-x 2 ftpmaint server 4096 Apr 1 22:03 babel -rw-rw-r-1 ftpmaint server 3098120 May 1 17:25 babel.zip drwxrwsr-x 2 ftpmaint server 4096 Mar 1 2004 cyrillic -rw-rw-r-1 ftpmaint server 37586 May 1 17:25 cyrillic.zip drwxrwsr-x 2 ftpmaint server 4096 Dec 20 14:43 graphics -rw-rw-r-1 ftpmaint server 361065 May 1 17:25 graphics.zip drwxrwxr-x 2 ftpmaint server 4096 Apr 12 15:26 psnfss -rw-rw-r-1 ftpmaint server 1068096 May 1 17:25 psnfss.zip drwxrwsr-x 2 ftpmaint server 4096 Mar 1 2004 tools -rw-rw-r-1 ftpmaint server 280673 May 1 17:25 tools.zip 226 Transfer complete.
1001
C
LATEX-SOFTWARE UND USERGROUPS
ftp> get graphics.zip local: graphics.zip remote: graphics.zip 227 Entering Passive Mode (80,237,210,73,145,193). 150 Opening BINARY mode data connection for graphics.zip (361065 bytes) 226 Transfer complete. 361065 bytes received in 0.832 secs (4.2e+02 Kbytes/sec) ftp> quit 221 Goodbye.
C.4 Dokumentation auf dem eigenen System Wenn man ein LaTEX-Paket verwenden möchte, wäre es schön, wenn man die Dokumentation studieren könnte, ohne sich merken zu müssen, wo die relevanten Dateien im TEX-System abgelegt sind. Hier gibt es zwei kleine Helfer für die Suche: texdoc und sein Abkömmling texdoctk.
C.4.1 texdoc – Kommandozeilesuche nach Namen Thomas Esser entwickelte das Programm texdoc, das Teil der TEX LiveDistribution ist. Wenn man den Namen der Datei kennt, die ein Paket beschreibt, kann man folgendermaßen nach den entsprechenden Dokumentationsdateien suchen: texdoc -l pspicture /TeXlive/tl7/texmf/doc/latex/carlisle/pspicture.dvi /TeXlive/tl7/texmf/doc/html/catalogue/entries/pspicture.html
Die Option -l weist texdoc an, nur den Pfad zu den Dateien aufzuführen, die dem Suchkriterium entsprechen (in diesem Fall Dateien namens pspicture mit beliebiger Erweiterung). Wenn die Option -l nicht angegeben wird, gibt texdoc den Inhalt der Dokumentationsdatei aus (in diesem Fall pspicture.dvi). Dazu wird ein passendes Anzeigeprogramm verwendet (z.B. xdvi oder Windvi). Wenn man den genauen Namen der Datei nicht kennt, kann man die Option -s verwenden und bei der Suche Platzhalter angeben, z.B. folgendermaßen: texdoc -s *picture* /TeXlive/tl7/texmf/doc/generic/mfpic/examples/lapictures.tex /TeXlive/tl7/texmf/doc/generic/mfpic/examples/pictures.tex /TeXlive/tl7/texmf/doc/latex/carlisle/pspicture.dvi /TeXlive/tl7/texmf/doc/html/catalogue/entries/pspicture.html /TeXlive/tl7/texmf/doc/html/catalogue/entries/pspicture.xml
Hier wurde nach Dateien gesucht, in deren Namen die Zeichenfolge picture vorkommt – unter anderem wurden dabei auch die pspicture-Dateien gefunden, die schon in der vorherigen Suche aufgelistet wurden. Das Hilfsprogramm texdoc ist recht nützlich, hat aber einen Nachteil: man muss den Namen der Datei kennen, die das gewünschte Paket beschreibt. Dieser ist nicht immer identisch mit dem Namen des Paketes selbst (wie bei pspicture in den obigen Beispielen).
1002
C.4
Dokumentation auf dem eigenen System
Abbildung C.4: Dokumentation mit dem texdoctk-Programm suchen
C.4.2 texdoctk – Themensuche mit graphischer Oberfläche Thomas Ruedas wählte einen etwas anderen Ansatz, um einen einfachen Zugang zur Dokumentation von Dateien zu bieten, die im TEX-System vorhanden sind. Sein texdoctk-Programm verwendet eine graphische Benutzeroberfläche, die auf perl und Tk basiert. Das Programm verwendet eine Datenbank, die Dokumentationsdateien, die in Thomas Essers tetex-Distribution vorhanden sind (TEX Live basiert auf tetex), in 17 Kategorien unterteilt. Außerdem bietet es eine 18. „benutzerdefinierte“ Kategorie, in welcher Anwender bei Bedarf eigene (lokale) Dokumentationseinträge in die Datenbank vornehmen können. Wie bei texdoc werden zur Anzeige entsprechende Anzeige- oder Ausgabeprogramme verwendet (z.B. xdvi oder dvips). Abbildung C.4 zeigt, wie man das texdoctk-System verwendet, um die Dokumentation für das pspicture-Paket anzuzeigen. In diesem Fall war es nicht erforderlich, den Namen des Paketes zu kennen. Die Suche wird auf dem Hauptbildschirm gestartet, auf dem (1) die Kategorie ausgewählt wird (hier Graphics). Dadurch wird ein Menü eingeblendet (hier Graphics, unten links), aus welchem der Suchbegriff (Extended picture environment (pspicture)) ausgewählt wird (2). Anschließend klickt man auf die Schaltfläche View (3), die den .dvi-Viewer Windvi aufruft (4), der den Text der Dokumentation anzeigt.
1003
C
LATEX-SOFTWARE UND USERGROUPS
In der Abbildung sind alle verfügbaren Dokumentationskategorien zu sehen (man achte auf die Schaltfläche Miscellaneous für Sonderfälle in der unteren rechten Ecke) sowie die Schaltflächen Search und Help für die erweiterte Suche.
C.5 TEX-Usergroups In mehreren Ländern gründeten TEX-Anwender TEX-Usergroups, oftmals organisiert nach Sprachgemeinschaften, z.B. DANTE für alle deutschsprachigen TEX-Anwender. Wer Hilfe benötigt, sollte sich zunächst an seine lokale Usergroup wenden, denn diese ist möglicherweise in der Lage, eine Lösung zu finden, die für seine sprachspezifische Arbeitsumgebung am besten geeignet ist. Nachstehend sind einige Informationen über offiziell registrierte Usergroups aufgeführt (vollständigere und möglicherweise aktuellere Listen finden sich unter http://www.tug.org/lugs.html oder http: //www.servalys.nl/lug/). Sie können helfen, TEX-bezogenes Material auf DVDs oder andere Publikationen zu beziehen. cn: Name: Sprache: Homepage: Kontakt: Adresse:
E-Mail: Telefon: Fax: cz: Sprache: Name: Kontakt: Adresse:
E-Mail: Homepage: Telefon: de: Name: Sprache: Kontakt: Adresse:
E-Mail: Homepage: Telefon: Fax: dk: Name:
1004
China PR Chinese TeX Users Group chinesisch
Sprache: Kontakt: Adresse:
www.rons.net.cn Hong Feng RON’s Datacom Co., Ltd. 79, DongWu Ave., Wuhan, Hubei Province 430040 China P.R.
[email protected] +862783222108 +862783222108 Tschechische Republik tschechisch CsTUG Petr Sojka CsTUG, c/o FI MU Botanická 68a CZ-602 00 Brno Tschechische Republik
[email protected] www.cstug.cz +420541212352 Deutschland DANTE e.V. deutsch Volker Schaa Postfach 101840 D-69008 Heidelberg Deutschland
[email protected] www.dante.de +49622129766 +496221167906 Dänemark DK-TUG
E-Mail: Homepage: Telefon: ee: Name: Adresse:
E-Mail: es: Name: Sprache: E-Mail: Homepage: esc: Name: Sprache: Kontakt: Adresse:
E-Mail: Homepage:
dänisch Kaja Christiansen Department of Computer Science Ny Munkegade, Bldg. 540 DK-8000 Århus C Dänemark
[email protected] www.tug.dk +4589423220 Estland Estonian User Group Astrophysical Observatory, Toravere Enn Saar, Tartu EE 2444 Estland
[email protected] Spanien (CervanTeX) CervanTeX spanisch
[email protected] www.cervantex.org Spanien (Katalonien) Catalan TeX Users Group katalanisch Gabriel Valiente Technical University of Catalonia Jordi Girona Salgado, 1-3 E-08034 Barcelona Spanien
[email protected] www-lsi.upc.es/ ~valiente/tug-catalan. html
C.5 TEX-Usergroups
fr: Name: Sprache: Adresse:
E-Mail: Homepage: Telefon: Fax: fra: Kurzname: Sprache: Adresse:
E-Mail: Homepage:
Telefon: gr: Name: Sprache: Kontakt: Adresse:
E-Mail: Homepage: Telefon: hu: Name: Sprache: Adresse:
E-Mail: Homepage: in: Name: Kontakt: Adresse:
E-Mail: Homepage: Telefon: Fax: kr:
Frankreich GUTenberg französisch c/o Irisa Campus Universitaire de Beaulieu F-35042 Rennes cedex Frankreich
Name: Sprache: Kontakt: E-Mail: Homepage:
[email protected] www.gutenberg.eu.org
Kontakt: Adresse:
+33681665102 +33492579667 Frankreich (Astex) AsTEX französisch Association AsTEX BP 6532 45066 Orléans cedex 2 Frankreich
astex-admin@ univ-orleans.fr www.univ-orleans.fr/EXT/ ASTEX/astex/doc/en/web/ html/astex000.htm +33238640994 Griechenland Greek TeX Friends Group griechisch Apostolos Syropoulos 366, 28th October Str. GR-671 00 Xanthi Griechenland
lt: Name:
E-Mail: Telefon: Fax:
+3054128704
[email protected] www.math.klte.hu/~matex/ Indien TUGIndia K.S.S. Nambooripad Kripa, TC 24/548, Sastha Gardens Thycaud, Trivandrum 695014 Indien
tugindia@river-valley. com www.river-valley.com/ tug/ +91471324341 +91471333186 Korea
[email protected] www.ktug.or.kr Litauen Lietuvos TeX’o Vartotoju ˛ Grup˙ e Vytas Statulevicius Akademijos 4 LT-2600 Vilnius Litauen
[email protected] +3702359609 +3702359804
mx: Name: Adresse:
Mexiko TeX México Rayon No. 523, Centro 58000 Morelia, Michoacan Mexiko
E-Mail: Homepage:
[email protected] ciencia.dcc.umich.mx. /tex/
Telefon: Fax: nl: Name: Sprache: Kontakt: Adresse:
[email protected] obelix.ee.duth.gr/eft/ Ungarn MaTeX ungarisch Institute of Mathematics and Informatics University of Debrecen H-4010 Debrecen, P.O. Box 12 Ungarn
KTUG koreanisch Kim Kangsu
E-Mail: Homepage: Telefon: Fax:
+52143128724 +52143173945 Niederlande, Belgien (flämischer Teil) NTG holländisch Hans Hagen Pragma Ridderstraat 27 8061 GH Hasselt Niederlande
[email protected] www.ntg.nl +31384775369 +31384775374
no: Name: Sprache: discussion: Kontakt: Adresse:
Nordische Staaten NTUG skandinavische Sprachen
E-Mail: Homepage:
[email protected] www.ifi.uio.no/~dag/ ntug/
[email protected] Dag Langmyhr University of Oslo PO Box 1080 Blindern N-0316 Oslo Norwegen
Telefon: Fax:
+4722852450 +4722852401
ph: Name: Kontakt: Adresse:
Philippinen TUG-Philippines Felix P. Muga II Ateneo de Manila University Loyola Heights Quezon City Philippinen
1005
C
LATEX-SOFTWARE UND USERGROUPS
E-Mail: Telefon: Fax: pl: Name: Sprache: Adresse:
+6324266001 ext 2515 +6324266008 Polen GUST polnisch UCI UMK Gagarina 7 87-100 Toru´ n Polen
E-Mail: Homepage:
[email protected] www.GUST.org.pl
pt: Name: Sprache: Kontakt: Adresse:
Portugal GUTpt portugiesisch Pedro Quaresma de Almeida Coimbra University Dep. Matemática, Largo D.Dinis Apartado 3008, 3001-454 COIMBRA Portugal
E-Mail: Homepage: Telefon: ru: Name: E-Mail: Homepage: Diskussion: Anmeldung: si: Name: Kontakt: Adresse:
E-Mail: Homepage:
1006
[email protected]
[email protected] http://hilbert.mat.uc. pt/~GUTpt/ +351239791181 Russland CyrTUG
[email protected] www.cemi.rssi.ru/cyrtug/
[email protected] [email protected] Slowenien TeXCeH Vladimir Batagelj Jadranska 19 SI-61111 Ljubljana Slowenien
[email protected] vlado.fmf.uni-lj.si/ texceh/texceh.htm
uk: Name: Sprache: E-Mail: Homepage: Kontakt: Adresse:
E-Mail: Telefon: Fax: us: Name: Adresse:
E-Mail: Homepage: Telefon: Fax:
Großbritannien UKTUG englisch
[email protected]. uk uk.tug.org Dr R.W.D. Nickalls Department of Anæsthesia Nottingham City Hospital NHS Trust Hucknall Road Nottingham, NG5-1PB (UK)
[email protected] +441159691169 (ext. 45637) +441159627713 TeX User Group (international) TUG P.O. Box 2311 Portland, OR 97208-2311 U.S.A
[email protected] www.tug.org +15032239994 +15032233960
vn: Name: Kontakt: Adresse:
Vietnam ViêtTUG Nguyên-Ðai Quý LTAS-University of Liège Rue des Chevreuils, 1 Bât B52, Local 522B B4000, Liège Belgien
E-Mail: Telefon: Fax:
[email protected] +3243669098 +3243669311
D
A n h a n g
LB2 TEX-CD Der Ursprung – Das TEX-Live-System . . LATEX von der CD-ROM installieren . . . . LATEX direkt von der CD-ROM ausführen Die Beispiele zum LATEX-Begleiter . . . . . Lizenzen . . . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
1007 1008 1008 1008 1009
Mithilfe der CD am Ende dieses Buches lässt sich eine LaTEX-Umgebung aufsetzen, die der in diesem Buch beschriebenen so weit wie möglich gleicht. Dieser Anhang beschreibt die Historie der CD und wie man sie nutzen kann.
Der Ursprung – Das TEX-Live-System TEX-Live ist eine „Open Source“-Distribution von TEX und LaTEX, die von einer internationalen Vereinigung von TEX-Benutzergruppen gefördert wird. Die LB2-TEX-CD-ROM ist sehr stark an diese Distribution angelehnt und darum sei hier ausdrücklich all jenen gedankt, die im Laufe der Jahre zur Herstellung und Pflege dieses Systems beigetragen haben. Das 2003-Release der TEX-Live-Distribution erschien auf drei Medien: einer DVD mit der vollständigen Distribution und einer Kopie der CTANArchive, einer CD mit einer vollständigen TEX-Live-Distribution (in komprimierter Form) und einer „Demo“-CD mit einer TEX-Live-Distribution, die sich entweder auf Festplatte installieren oder direkt von der CD starten lässt. Damit alles auf eine CD passt, musste bei der „Demo“-CD auf einige Pakete verzichtet werden. Aus dem gleichen Grund werden auch nur die Betriebssysteme Linux, Windows und Mac OS X unterstützt Die LB2-TEX-CD-ROM ist eine besondere Version der TEX-Live-„Demo“CD. Alle Binärprogramme sind unverändert, verschiedene in diesem Buch beschriebene Pakete wurden aktualisiert oder hinzugefügt und das LaTEX-Format selbst entspricht dem Release vom 1.12.2003. Aufgrund des begrenzten Platzes mussten einige Pakete entfernt werden. Die Datei readme-lb2.html enthält eine vollständige Liste aller geänderten Pakete. Sie befindet sich im Stammverzeichnis der CD.
D
LB2 TEX-CD
LATEX von der CD-ROM installieren Diese CD-ROM ist genauso zu verwenden und zu installieren, wie es für die TEX-Live-„Demo“-CD in der Original TEX-Live-Dokumentation beschrieben wird. Die Datei readme.html gibt einen Überblick über das Installationsverfahren mit Links zu ausführlicheren Beschreibungen auf der CD. (Ein Großteil der TEX-Live-Dokumentation ist in mehreren Sprachen verfügbar.) Bei einer Installation unter Linux oder Mac OS X sollte man das im Stammverzeichnis befindliche Installationsskript install-tl.sh ausführen. Unter Windows sollte das Installationsprogramm automatisch ausgeführt werden (ansonsten genügt ein Doppelklick auf die Datei autorun.exe). Der Prozess führt durch einige Konfigurationsmöglichkeiten und installiert demgemäß ein LaTEX-System auf der Festplatte. Entsprechend der gewählten Optionen werden einige eher seltener benötigte Pakete nicht direkt installiert. In der TEXLive-Dokumentation ist beschrieben, wie man diese nachträglich zur lokalen Installation hinzufügen kann. Wer LaTEX bereits verwendet, möchte vielleicht nicht das gesamte System installieren, sondern die CD nur nutzen, um die LaTEX-Basisdateien und einige ausgewählte Pakete zu aktualisieren. Unter Linux und Mac OS X kann man mithilfe des Skripts install-pkg.sh Pakete einzeln nachinstallieren. Unter Windows dient die Option „TEX Live/maintenance“ im Startmenü diesem Zweck.
LATEX direkt von der CD-ROM ausführen Anstatt das gesamte System auf Festplatte zu installieren, kann man die Software auch direkt von der CD starten. Es wird trotzdem Speicherplatz auf dem lokalen Rechner benötigt, damit TEX seine Ausgabedateien schreiben und gegebenenfalls zusätzliche Schriften generieren kann. Um das TEX-Live-System unter Windows direkt von der CD zu starten, wählt man im Begrüßungsprogramm von TEX-Live den Menüpunkt Explore CD-Rom/Run TeX off CD-Rom (CD-ROM durchsuchen/TeX von CD-ROM starten). Auf den anderen Systemen sollte man das zuvor bereits erwähnte Skript install-tl.sh ausführen und dort die entsprechende Option auswählen, die das Programm direkt von der CD startet. Diese Installation stellt nicht nur ein lauffähiges TEX-System zur Verfügung, sondern richtet außerdem xemacs als Umgebung zum Erstellen von Dokumenten ein. Dieser Editor enthält eine umfangreiche Sammlung von Menüoptionen, die beim Bearbeiten von LaTEX-Dokumenten sowie beim Ausführen von LaTEX und zugehörigen Programmen, wie etwa BIBTEX, nützlich sind.
Die Beispiele zum LATEX-Begleiter Die Dateien für alle im Buch abgebildeten Beispiele befinden sich auf der CD im Verzeichnis Books/lb2/examples. Der Dateiname setzt sich aus der Beispielnummer und der Dateierweiterung .ltx oder .ltx2 (für doppelseitige Beispiele) zusammen, wie etwa 1-3-1.ltx und 2-4-4.ltx2. Die meisten dieser Beispiele verwenden die Klassendatei lb2exa.cls, die sich im gleichen Verzeichnis wie die Beispiele befindet. Es handelt sich um
1008
LB2 TEX-CD
eine kleine Erweiterung der article-Klasse: Sie definiert einige zusätzliche Befehle, mit denen die Anzeige der Präambelbefehle im Buch gesteuert wird. Wird das TEX-System direkt von der CD gestartet, dann sind alle für die Beispiele benötigten Pakete verfügbar, mit Ausnahme einiger Pakete, die kommerzielle Fonts erfordern, welche naturgemäß nicht auf dieser CD-ROM verbreitet werden dürfen. Wird die Distribution auf der Festplatte eingerichtet, so werden gemäß der Voreinstellung nicht alle Pakete mit installiert. Gegebenenfalls müssen dann noch einzelne Pakete nachinstalliert werden, um alle Beispiele ausführen zu können.
Lizenzen Die Datei LICENSE.TL im Stammverzeichnis beschreibt die Lizenz und die Bedingungen zum Kopieren des TEX-Live-Systems. Diese gelten auch für die veränderte Distribution auf der LB2-TEX-CD-ROM. Alle auf dieser CD-ROM enthaltene Software darf (nach dem besten Wissen der Autoren) frei verbreitet werden, auch wenn die einzelnen Komponenten verschiedenen Lizenzbedingungen unterliegen, die in der jeweiligen Paketdokumentation beschrieben sind. Viele der LaTEX-Pakete und alle Beispieldateien in diesem Buch werden unter der „LaTEX Project Public License“ (LPPL) verteilt. Der entsprechende Lizenztext ist auf der CD in der Datei texmf/doc/latex/base/lppl.txt gespeichert. Die LPPL erlaubt jegliche Verwendung, einschließlich Vervielfältigung und Veränderung, solange die geänderten Kopien nicht unter dem gleichen Namen verteilt werden, wie die Originaldateien.
1009
Literaturverzeichnis
[1] Adobe Systems Incorporated. Adobe Type 1 Font Format. AddisonWesley, Reading, MA, USA, 1990. ISBN 0-201-57044-0. Das „Black Book“ enthält die Spezifikationen für das Adobe Type1-Fontformat und beschreibt, wie man ein Type1-Fontprogramm erstellt. Das Buch erläutert die Details der Type1-Syntax (einer Untermenge von PostScript). Dabei behandelt es auch den Aufbau von Zeichensatzprogrammen, Verfahren zum Festlegen von Outline-Schriften für Computer und den Inhalt der verschiedenen „font dictionaries“ in PostScript. Außerdem befasst es sich mit den Themen Verschlüsselung, Subroutinen und Hinting.
http://partners.adobe.com/public/developer/en/font/T1_SPEC.PDF
[2] Adobe Systems Incorporated. Encapsulated PostScript File Format Specification (Version 3.0). Technische Dokumentation 5002, 1992. In dieser technischen Dokumentation wird das Format für Encapsulated PostScriptDateien (epsf) detailliert beschrieben. Mithilfe dieses Standardformates lassen sich PostScript-Dateien zwischen Anwendungen in vielen verschiedenen Umgebungen imund exportieren. Das epsf-Format basiert auf und richtet sich nach den Konventionen zum Strukturieren von Dokumenten (DSC) [3].
http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf
[3] Adobe Systems Incorporated. PostScript Document Structuring Conventions Specification (Version 3.0). Technische Dokumentation 5001, 1992. In dieser technischen Dokumentation werden Standardkonventionen zum Strukturieren von Dokumenten (DSC, „Document Structuring Conventions“) definiert, mit deren Hilfe die Geräteunabhängigkeit von PostScript-Dokumenten gewährleistet werden soll. Auf Basis der DSC können PostScript-verarbeitende Programme Dokumentenverwaltungssystemen mitteilen, wie ihre Dokumente aufgebaut sind und was für den Ausdruck erforderlich ist, ohne dass dabei die PostScript-Seitenbeschreibung beeinträchtigt wird.
http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf
[4] Adobe Systems Incorporated. PostScript Language Reference. Addison-Wesley, Reading, MA, USA, dritte Auflage, 1999. ISBN 0-20137922-8. Man kann das „Red Book“ als das maßgebliche Hilfsmittel für alle PostScriptProgrammierer betrachten. Darin wird die gesamte PostScript-Sprache einschließlich der neuesten Level3-Operatoren beschrieben.
http://www.adobe.com/products/postscript/pdfs/PLRM.pdf
LITERATURVERZEICHNIS
[5] Adobe Systems Incorporated. PDF Reference, version 1.4. AddisonWesley, Boston, MA, USA, dritte Auflage, 2002. ISBN 0-201-75839-3. Spezifikation des Adobe PDF-Formates (Portable Document Format). Das Buch stellt alle Aspekte des PDF-Formates vor und erläutert diese. Dazu gehören auch die Architektur und das Imaging-Modell (das durchsichtige und deckende Text-, Bild- und Graphikelemente ermöglicht), die Befehlssyntax, die Graphikoperatoren, Schriften und Rendering sowie das Verhältnis zwischen PostScript und PDF.
http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf
[6] American Mathematical Society, Providence, Rhode Island. Instructions for Preparation of Papers and Monographs: AMS-LaTEX, Dezember 1999. Dieses Dokument erklärt, in welchem Stil Autoren, die mithilfe von LaTEX Artikel und Bücher für die American Mathematical Society (AMS) verfassen, ihre Dokumente gestalten müssen: Zeitschriften (amsart), Konferenzberichte (amsproc) und Monographien (amsbook).
ftp://ftp.ams.org/pub/author-info/documentation/amslatex/instr-l.pdf
[7] American Mathematical Society, Providence, Rhode Island. Using the amsthm Package (Version 2.07), Juni 2000. Das amsthm-Paket bietet eine erweiterte Version des LaTEX-Befehls \newtheorem zum Definieren theoremähnlicher Umgebungen. Es erkennt \theoremstyle-Angaben und stellt die Umgebung proof zur Verfügung.
ftp://ftp.ams.org/pub/tex/doc/amscls/amsthdoc.pdf
[8] American Mathematical Society, Providence, Rhode Island. User’s Guide for the amsmath Package (Version 2.0), Februar 2002. Das amsmath-Paket, das von der American Mathematical Society entwickelt wurde, bietet viele zusätzliche Funktionen für das Setzen von Formeln.
http://www.ams.org/tex/amslatex.html
[9] American Mathematical Society, Providence, Rhode Island. User’s Guide to AMSFonts Version 2.2d, Januar 2002. In diesem Dokument werden die AMSFonts der American Mathematical Society, eine Sammlung von Symbolzeichensätzen und einiger Alphabete, beschrieben.
http://www.ams.org/tex/amsfonts.html
[10] J. André und Ph. Louarn. Notes en bas de pages : comment les faire en LATEX? Cahiers GUTenberg, 12:57–70, Dezember 1991. Hier werden Spezialfälle von Fußnoten in LaTEX besprochen – z.B. wie man in einer Fußnote auf Informationen einer tabular- oder minipage-Umgebung verweist oder wie man sich mehrmals auf die gleiche Fußnote bezieht.
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/12-louarn.pdf
[11] Michael Barr. A new diagram package, 2001. Eine Neufassung des ursprünglichen diagram-Paketes von Michael Barr, das als Frontend für Roses xypic-Paket dient (siehe [58, Kapitel 5]). Es bietet allgemeine Funktionen zum Zeichnen von Pfeilen; verschiedene gängige Diagrammformen, wie etwa Quadrate, Dreiecke, Würfel und 3 × 3-Diagramme; kleine zweiseitige Pfeile, die sich in Diagrammen beliebig platzieren lassen; und Zugriff auf sämtliche xypic-Funktionen. Auf CTAN unter: macros/generic/diagrams/barr
[12] Claudio Beccari und Apostolos Syropoulos. New Greek fonts and the greek option of the babel package. TUGboat, 19(4):419–425, Dezember 1998. ISSN 0896-3207. Hier wird ein neues vollständiges Set griechischer Schriften beschrieben und wie sich diese in Kombination mit der greek-Erweiterung zum babel-Paket verwenden lassen.
http://www.tug.org/TUGboat/Articles/tb19-4/tb61becc.pdf
1012
Literaturverzeichnis
[13] Nelson Beebe. Bibliography prettyprinting and syntax checking. TUGboat, 14(4):395–419, Dezember 1993. ISSN 0896-3207. In diesem Artikel werden drei Software-Tools zur Unterstützung von BIBTEX beschrieben: ein Pretty-Printer, ein Programm für die Syntaxkontrolle und eines für die lexikalische Analyse von BIBTEX-Dateien. Alle zusammen werden unter der Bezeichnung bibclean geführt. http://www.tug.org/TUGboat/Articles/tb14-4/tb41beebe.pdf
[14] Barbara Beeton. Mathematical symbols and Cyrillic fonts ready for distribution. TUGboat, 6(2):59–63, Juli 1985. ISSN 0896-3207. Bekanntgabe der ersten allgemeinen Ausgabe der Fonts der Euler-Serie durch die American Mathematical Society.
http://www.tug.org/TUGboat/Articles/tb06-2/tb11beet.pdf
[15] Frank G. Bennett, Jr. Camel: kicking over the bibliographic traces in BIBTE X. TUGboat, 17(1):22–28, März 1996. ISSN 0896-3207. Das camel-Paket bietet eine einfache, logisch aufgebaute Zitierschnittstelle für LaTEX, mit deren Hilfe man den Bibliographiestil eines Dokumentes auf einfache Weise ohne intensive Bearbeitung ändern kann.
http://www.tug.org/TUGboat/Articles/tb17-1/tb50benn.pdf
[16] Frank G. Bennett, Jr. User’s Guide to the Camel Citator, 1997. Dokumentation der Version 1 des camel-Paketes. Auf CTAN unter: macros/latex/contrib/camel
[17] A. Berdnikov, O. Lapko, M. Kolodin, A. Janishevsky und A. Burykin. Cyrillic encodings for LATEX 2ε multi-language documents. TUGboat, 19(4):403–416, Dezember 1998. ISSN 0896-3207. Beschreibung von vier Kodierungen, die entwickelt wurden, um im Mehrsprachenmodus von LaTEX 2ε kyrillische Schreibsysteme zu unterstützen. Bei der „Rohkodierung“ X2 handelt es sich um eine Sammlung kyrillischer Glyphen, mit deren Hilfe man Textfragmente von Sprachen, die ein modernes kyrillisches Schreibsystem verwenden, in LaTEX 2ε -Dokumente einfügen kann. T2A, T2B und T2C hingegen sind echte LaTEX 2ε Kodierungen, die sich gemeinsam mit anderen Sprachkodierungen in einer mehrsprachigen Umgebung verwenden lassen.
http://www.tug.org/TUGboat/Articles/tb19-4/tb61berd.pdf
[18] Karl Berry. Filenames for fonts. TUGboat, 11(4):517–520, November 1990. ISSN 0896-3207. In diesem Artikel wird das einheitliche, rationale Schema zur Benennung von Fontdateien beschrieben, das schon seit 15 Jahren Bestand hat. Jeder Name besteht aus bis zu acht Zeichen (für Hersteller, Schriftname, Strichstärke, Variante, Erweiterungsmerkmale und Entwurfsgröße), mit denen jede Schrift eindeutig gekennzeichnet werden kann.
http://www.tug.org/TUGboat/Articles/tb11-4/tb30berry.pdf
[19] Karl Berry. Fontname: Filenames for TE X fonts, Mai 2003. Online-Dokumentation der aktuellen Version von „Fontname“, einem Schema für Fontdateinamen in TEX; hier werden für eine Reihe von Ländern einige rechtliche Fragen im Zusammenhang mit Fonts geklärt. http://www.tug.org/fontname/html/index.html
[20] Javier Bezos. The accents Package, 2000. Verschiedene Werkzeuge für mathematische Akzente: zum Erzeugen künstlicher Akzente aus Symbolen, die keine Akzente sind, zum Gruppieren von Akzenten und zum Platzieren von Akzenten unter Glyphen. Auf CTAN unter: macros/latex/contrib/bezos
[21] The Bluebook: A Uniform System of Citation. The Harvard Law Review Association, Cambridge, MA, 17. Auflage, 2000. Das Blue Book besteht aus drei Hauptteilen: In Teil 1 werden die allgemeinen Zitier- und Formatierungsstandards für Rechtstexte genauer dargelegt; Teil 2 stellt die besonderen Zitierregeln für Fälle (cases), Gesetze (statutes), Bücher (books), Periodika (periodicals) und fremdsprachige sowie internationale Texte vor; und Teil 3 besteht aus einer Reihe von Tabellen, die unter anderem zeigen, welche Instanz zitiert werden soll und wie man richtig abkürzt. Zu bestellen bei: http://www.legalbluebook.com
1013
LITERATURVERZEICHNIS
[22] Francis Borceux. De la construction de diagrammes. Cahiers GUTenberg, 5:41–48, Mai 1990. Die diagram-Makros setzen Diagramme, die aus mathematischen Ausdrücken bestehen, die durch verschiedenartige Pfeile miteinander verbunden sind. Die Makros berechnen automatisch Länge und Position jedes Elementes. Benutzer können für jedes Diagramm einen Skalierungsfaktor festlegen.
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/5-borceux.pdf
[23] Francis Borceux. Diagram 3, 1993. Paket für kommutative Diagramme, das den LaTEX-Bildmodus verwendet. Auf CTAN unter: macros/generic/diagrams/borceux
[24] Thierry Bouche. Diversity in math fonts. TUGboat, 19(2):120–134, Juni 1998. ISSN 0896-3207. In diesem Artikel werden Fragen behandelt, die entstehen, wenn man LaTEX-Fonts in Formelumgebungen ändert. Es wird versucht, eine effektive Methode vorzuschlagen, mit der man auf eine größere Vielfalt von Fontoptionen zugreifen kann, ohne dabei typographischen Unsinn zu erzeugen.
http://www.tug.org/TUGboat/Articles/tb19-2/tb59bouc.pdf
[25] Johannes Braams. Babel, a multilingual style-option system for use with LATEX’s standard document styles. TUGboat, 12(2):291–301, Juni 1991. ISSN 0896-3207. Das babel-Paket war ursprünglich eine Sammlung von Optionen für Formatvorlagen zur Unterstützung verschiedener Sprachen. In TUGboat, 14(1):60–62, April 1993, wurde eine aktuellere Version veröffentlicht.
http://www.tug.org/TUGboat/Articles/tb12-2/tb32braa.pdf http://www.tug.org/TUGboat/Articles/tb14-1/tb38braa.pdf
[26] Neil Bradley. The XML Companion. Addison-Wesley, Boston, MA, USA, dritte Auflage, 2002. ISBN 0-201-77059-8. Dieses Buch beschreibt XML-Funktionen, ohne dafür HTML- oder SGML-Kenntnisse vorauszusetzen. Es behandelt auch verwandte Standards wie Xpath, W3C XML Schema, SAX, DOM, XSLT, Xlink und Xpointer.
[27] Peter Breitenlohner et al. The eTE X manual (Version 2), Februar 1998. Aktuelles Handbuch des eTEX-Systems, das die Fähigkeiten von TEX erweitert ohne die Kompatibilität einzuschränken. Auf CTAN unter: systems/e-tex/v2/doc/etex_man.pdf
[28] Robert Bringhurst. The elements of typographic style. Hartley & Marks Publishers, Point Roberts, WA, USA und Vancouver, BC, Kanada, zweite Auflage, 1996. ISBN 0-88179-133-4 (gebunden), 0-88179-132-6 (Taschenbuch). Ein sehr gutes Buch über Typographie, das besonderen Wert auf die richtige Verwendung von Schriften legt.
[29] Judith Butcher. Copy-editing: The Cambridge handbook for editors, authors and publishers. Cambridge University Press, New York, dritte Auflage, 1992. ISBN 0-521-40074-0. Ein Referenzwerk für alle, die sich mit dem Erstellen von Manuskripten und Illustrationen für den Druck und deren Veröffentlichung beschäftigen. Das Buch behandelt alle redaktionellen Aspekte: von den Grundlagen, wie man ein Manuskript für Designer und Setzer richtig aufbereitet, über die Grundregeln für verlagsspezifische Richtlinien und Einheitlichkeit, bis zum Lesen und Korrigieren von Druckfahnen.
[30] David Carlisle, Patrick Ion, Robert Miner und Nico Poppelier, Hg. Mathematical Markup Language (MathML) Version 2.0. W3C, zweite Auflage, Oktober 2003. MathML ist ein XML-Befehlssatz für mathematische Arbeiten, der für Browser und als Mittel zur Kommunikation zwischen Computeralgebrasystemen entwickelt wurde.
http://www.w3.org/TR/MathML2
1014
Literaturverzeichnis
[31] David Carlisle, Chris Rowley und Frank Mittelbach. The LATEX3 Programming Language—a proposed system for TE X macro programming. TUGboat, 18(4):303–308, Dezember 1997. ISSN 0896-3207. Vorschläge für eine völlig neue LaTEX Kernel-Syntax und für passende Softwaretools.
http://www.tug.org/TUGboat/Articles/tb18-4/tb57rowl.pdf
[32] David Carlisle. A LATEX tour, Part 1: The basic distribution. TUGboat, 17(1):67–73, März 1996. ISSN 0896-3207. Eine „Führung“ durch die Dateien der LaTEX-Basisdistribution. Die Dateinamen und -pfade beziehen sich auf die Dateihierarchie der CTAN-Archive.
http://www.tug.org/TUGboat/Articles/tb17-1/tb50carl.pdf
[33] David Carlisle. A LATEX tour, Part 2: The tools and graphics distributions. TUGboat, 17(3):321–326, September 1996. ISSN 0896-3207. Eine „Führung“ durch die Werkzeug- und Graphik-Pakete. Man beachte, dass im LaTEXManual [106] vorausgesetzt wird, dass Standard-LaTEX zumindest über die Graphikdistribution verfügt. http://www.tug.org/TUGboat/Articles/tb17-3/tb52carl.pdf
[34] David Carlisle. A LATEX tour, Part 3: mfnfss, psnfss and babel. TUGboat, 18(1):48–55, März 1997. ISSN 0896-3207. Eine „Führung“ durch drei weitere Distributionen, die zu Standard-LaTEX gehören. Die mfnfss-Distribution unterstützt einige beliebte METAFONT-Schriften, die über keine andere LaTEX-Schnittstelle verfügen. Die psnfss-Distribution besteht aus LaTEX-Paketen, die den Zugriff auf PostScript-Fonts ermöglichen. Die babel-Distribution rüstet LaTEX mit Funktionen zum Setzen in mehreren Sprachen aus.
http://www.tug.org/TUGboat/Articles/tb18-1/tb54carl.pdf
[35] David Carlisle. OpenMath, MathML, and XSL. SIGSAM Bulletin (ACM Special Interest Group on Symbolic and Algebraic Manipulation), 34(2):6–11, Juni 2000. ISSN 0163-5824. Erörterung über den Einsatz von XML in der Mathematik – insbesondere für OpenMath und MathML – und die Verwendung von XSLT für Transformationen zwischen diesen Sprachen. Eingeschränkt auf Mitglieder der ACM:
http://www.acm.org/sigsam/bulletin/issues/issue132.html
[36] David Carlisle. xmltex: A non validating (and not 100% conforming) namespace aware XML parser implemented in TE X. TUGboat, 21(3):193–199, September 2000. ISSN 0896-3207. xmltex ist ein TEX-Programm zum Parsen und Setzen, das so eingerichtet ist, dass es den Funktionsumfang des LaTEX-Kerns zum Setzen benutzt.
http://www.tug.org/TUGboat/Articles/tb21-3/tb68carl.pdf
[37] Pehong Chen und Michael A. Harrison. Index Preparation and Processing. Software—Practice and Experience, 19(9):897–915, September 1988. Originalbeschreibung des MakeIndex-Systems.
[38] The Chicago Manual of Style. University of Chicago Press, Chicago, IL, USA, 15. Auflage, 2003. ISBN 0-226-10403-6. Das Standardreferenzwerk über die Gestaltung von Veröffentlichungen in den USA für Autoren und Verleger.
[39] Adrian F. Clark. Practical halftoning with TE X. TUGboat, 12(1):157– 165, März 1991. ISSN 0896-3207. Überblick über die praktischen Probleme beim Setzen von Rasterbildern mit TEX und Vergleich anderer Verfahren zum Einbinden von Graphiken. Die Vor- und Nachteile der verschiedenen Ansätze werden beschrieben und einige Versuche, Farbauszüge zu erstellen, werden besprochen.
http://www.tug.org/TUGboat/Articles/tb12-1/tb31clark.pdf
1015
LITERATURVERZEICHNIS
[40] Matthias Clasen und Ulrik Vieth. Towards a new Math Font Encoding for (LA)TE X. Cahiers GUTenberg, 28–29:94–121, März 1998. Ein Prototyp für die Einbindung von 8-Bit-kodierten Mathematikfonts in LaTEX.
http: //www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/28-29-clasen.pdf
[41] Carl Dair. Design with Type. University of Toronto Press, Toronto, Ontario, Kanada, 1967. ISBN 0-8020-1426-7 (gebunden), 0-8020-65198 (Taschenbuch). Ein gelungener Überblick über die traditionelle Typographie mit vielen nützlichen Faustregeln.
[42] Emmanuel Donin de Rosière. From stack removing in stack-based languages to BibTEX++. Diplomarbeit, ENSTBr, September 2003. Beschreibung von BibTEX++, einem Programm zum Erstellen von Bibliographieabschnitten mit LaTEX, das ein möglicher Nachfolger von BIBTEX sein könnte. Dieses Programm kann BIBTEX-Stildateien (.bst) in Java-Programmcode übersetzen. http:
//www.lit.enstb.org/~keryell/eleves/ENSTBr/2002-2003/DEA/Donin_de_Rosiere
[43] Michael Downes. Breaking equations. TUGboat, 18(3):182–194, September 1997. ISSN 0896-3207. TEX hat Schwierigkeiten, Formeln, die über mehr als eine Zeile umbrochen werden müssen, abgesetzt darzustellen. Das breqn-Paket löst viele der wichtigsten Probleme, indem es bei abgesetzten Formeln automatische Zeilenumbrüche unterstützt.
http://www.tug.org/TUGboat/Articles/tb18-3/tb56down.pdf
[44] Michael Downes. The amsrefs LATEX package and the amsxport BIBTE X style. TUGboat, 21(3):201–209, September 2000. ISSN 0896-3207. Bibliographische Einträge auf Basis des amsrefs-Formates reichen mit ihrer ausgeprägten internen Struktur und ihrem hoch entwickelten Markup an die Qualität heran, die man traditionellerweise in BIBTEX-Datenbankdateien findet. Darüber hinaus kann man mithilfe des amsrefs-Markups den Bibliographiestil vollständig in einer LaTEXKlassendatei festlegen.
http://www.tug.org/TUGboat/Articles/tb21-3/tb68down.pdf
[45] Dudenredaktion, Hg. Duden, Rechtschreibung der deutschen Sprache. Dudenverlag, Mannheim, 21. Auflage, 1996. ISBN 3-411-04011-4. Das Standard-Referenzwerk für die richtige Schreibweise und Silbentrennung aller Wörter der modernen deutschen Sprache. Es enthält Beispiele und Erläuterungen für problematische Fälle und vergleicht die Regeln der alten und neuen Rechtschreibung.
[46] Victor Eijkhout. TEX by Topic, A TEXnician’s Reference. Addison-Wesley, Reading, MA, USA, 1991. ISBN 0-201-56882-9. Vergriffen. Vom Autor kostenlos als PDF-Datei erhältlich. Systematisch aufgebautes Nachschlagewerk für erfahrene TEX-Anwender. Das Buch behandelt alle Aspekte von TEX umfassend mit detaillierten Erläuterungen der zugrunde liegenden Mechanismen sowie zahlreichen Beispielen für Programmierverfahren in TEX. http://www.eijkhout.net/tbt
[47] Robin Fairbairns. UK List of TE X Frequently Asked Questions on the Web, 2003. Diese Liste häufig gestellter Fragen zu TEX wurde vom Committee der U.K. TEX Users’ Group ins Leben gerufen. Sie enthält weit über 300 Einträge und wird regelmäßig aktualisiert und erweitert. http://www.tex.ac.uk/faq
[48] Jürgen Fenn. TE X Topical Index. Onlineressource, Juni 2005. Diese Onlineressource listet viele der auf CTAN verfügbaren Pakete nach Themen geordnet auf. Dabei richtet sie sich soweit möglich nach der in The LATEX Companion (also der englischen Ausgabe des vorliegenden Buches) definierten Systematik.
http://texcatalogue.sarovar.org/bytopic.html
1016
Literaturverzeichnis
[49] Laurence Finston. Spindex—Indexing with special characters. TUGboat, 18(4):255–273, Dezember 1997. ISSN 0896-3207. „Common Lisp“-Indexprogramm und unterstützende TEX-Makros für Indexe, die nicht lateinische Zeichen enthalten.
http://www.tug.org/TUGboat/Articles/tb18-4/tb57fins.pdf
[50] Shinsaku Fujita und Nobuya Tanaka. XΥMTE X (Version 2.00) as implementation of the XΥM notation and the XΥM markup language. TUGboat, 21(1):7–14, März 2000. ISSN 0896-3207. Beschreibung der Version 2 des XΥMTEX-Systems. Man kann XΥMTEX als ein in TEXMakros formuliertes lineares Notationssystem ansehen, das der IUPAC-Nomenklatur (International Union of Pure and Applied Chemistry) entspricht. Mit seiner Hilfe lassen sich komplizierte Strukturformeln auf komfortable Weise abbilden.
http://www.tug.org/TUGboat/Articles/tb21-1/tb66fuji.pdf
[51] Shinsaku Fujita und Nobuya Tanaka. Size reduction of chemical structural formulas in XΥMTE X (Version 3.00). TUGboat, 22(4):285–289, Dezember 2001. ISSN 0896-3207. Weitere Verbesserungen des XΥMTEX-Systems, insbesondere im Bereich der Größenreduzierung von Strukturformeln.
http://www.tug.org/TUGboat/Articles/tb22-4/tb72fuji.pdf
[52] Rei Fukui. TIPA: A system for processing phonetic symbols in LATEX. TUGboat, 17(2):102–114, Juni 1996. ISSN 0896-3207. TIPA ist ein System, mit dessen Hilfe sich Symbole des Internationalen Phonetischen Alphabetes (IPA) mit LaTEX verarbeiten lassen. Es führt eine neue Kodierung für phonetische Symbole (T3) ein, die alle Symbole und diakritischen Zeichen der neueren IPAVersionen sowie einige nicht in IPA enthaltene Symbole umfasst. Es unterstützt LaTEX 2ε und bietet eine einfache Eingabemethode in der IPA-Umgebung.
http://www.tug.org/TUGboat/Articles/tb17-2/tb51rei.pdf
[53] Bernard Gaulle. Comment peut-on personnaliser l’extension french de LATEX? Cahiers GUTenberg, 28–29:143–157, März 1998. In diesem Artikel wird beschrieben, wie sich das Paket french an persönliche Erfordernisse anpassen lässt. http:
//www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/28-29-gaulle.pdf
[54] Maarten Gelderman. A short introduction to font characteristics. TUGboat, 20(2):96–104, Juni 1999. ISSN 0896-3207. Diese Abhandlung erläutert die zentralen Gesichtspunkte beim Beschreiben einer Schrift, ihre Grundmerkmale, elementare numerische Maße, mit denen man sich die Eigenschaften eines Schriftentwurfs erschließen kann, sowie das Konzept „Kontrast“.
http://www.tug.org/TUGboat/Articles/tb20-2/tb63geld.pdf
[55] Charles F. Goldfarb. The SGML Handbook. Oxford University Press, London, Oxford, New York, 1990. ISBN 0-19-853737-9. Der vollständige Text des ISO SGML-Standards [73], vom Autor umfassend kommentiert und durch verschiedene Anleitungen ergänzt.
[56] Norbert Golluch. Kleinweich Büro auf Schlabberscheiben. Eichborn, Frankfurt, 1999. ISBN 3-8218-2438-7. Tecknisches Deutsch für Angefangen.
[57] Michel Goossens, Frank Mittelbach und Alexander Samarin. The LaTEX Companion. Tools and Techniques for Computer Typesetting. Addison-Wesley, Reading, MA, USA, 1994. ISBN 0-201-54199-8. Die englische erste Ausgabe dieses Buches.
[58] Michel Goossens, Sebastian Rahtz und Frank Mittelbach. The LaTEX Graphics Companion: Illustrating Documents with TEX and PostScript.
1017
LITERATURVERZEICHNIS
Tools and Techniques for Computer Typesetting. Addison-Wesley, Reading, MA, USA, 1997. ISBN 0-201-85469-4. In diesem Buch wird gezeigt, wie man Graphikdateien in ein LaTEX-Dokument integriert, wie man mithilfe mehrerer verschiedener Sprachen technische Diagramme programmiert, wie man farbige Bilder erzeugt, wie man mit eingebetteten PostScriptFragmenten Spezialeffekte erzielt und wie man hochwertige Notenblätter und Spielediagramme anfertigt. Es enthält zudem ausführliche Beschreibungen wichtiger Pakete, wie xypic, pstricks und MetaPost, der LaTEX-Standardpakete color und graphics, von PostScript-Fonts und wie man diese in LaTEX verwendet, sowie der Programme dvips und ghostscript.
[59] Michel Goossens und Sebastian Rahtz. The LaTEX Web Companion: Integrating TEX, HTML, and XML. Tools and Techniques for Computer Typesetting. Addison-Wesley Longman, Reading, MA, USA, 1999. ISBN 0-201-43311-7. Mit Eitan M. Gurari, Ross Moore und Robert S. Sutor. Dieses Buch lehrt (wissenschaftliche) Autoren, wie man etwas im Web oder einem anderen Hypertext-Präsentationssystem veröffentlicht. Es richtet sich an erfahrene LaTEXAnwender und berücksichtigt ihre speziellen Anforderungen in Bereichen wie der Mathematik, nicht europäischer Sprachen und algorithmischer Graphiken. Das Buch erklärt, wie man das Adobe Acrobat Format aus LaTEX heraus in vollem Umfang nutzen kann, wie man Dokumente in HTML oder XML konvertiert, wie man Formeln in Webanwendungen benutzt, wie sich mithilfe von LaTEX Webseiten erzeugen lassen, wie man einfache XML/SGML-Daten liest und schreibt und wie man mithilfe von TEX oder PDF aus XML- oder HTML-Webseiten hochwertige Druckerzeugnisse anfertigt.
[60] Michel Goossens und Vesa Sivunen. LATEX, SVG, Fonts. TUGboat, 22(4):269–279, Dezember 2001. ISSN 0896-3207. Ein kurzer Überblick über SVG (skalierbare Vektorgraphiken) und ihre Vorteile, wenn es um die Portierbarkeit von Graphikinhalten geht; über das Konvertieren der Outlines von PostScript-Glyphen zu SVG-Outlines; und über die Verwendung von SVG-Glyphen in TEX-Dokumenten. http://www.tug.org/TUGboat/Articles/tb22-4/tb72goos.pdf
[61] Ronald L. Graham, Donald E. Knuth und Oren Patashnik. Concrete Mathematics. Addison-Wesley, Reading, MA, USA, zweite Auflage, 1994. ISBN 0-201-55802-5. Ein Mathematiklehrbuch, das mit TEX in der Schrift Concrete Roman gesetzt wurde. Siehe auch [96].
[62] George Grätzer. Math into LaTEX. Birkhäuser and Springer-Verlag, Cambridge, MA, USA; Berlin, Deutschland/Basel, Schweiz, and Berlin, Deutschland/Heidelberg, Deutschland/London, UK/ usw., dritte Auflage, 2000. ISBN 0-8176-4131-9, 3-7643-4131-9. Eine allgemeine Einführung in LaTEX als Instrument zum Erstellen mathematischer Bücher und Artikel. Zusätzlich zu den grundlegenden LaTEX-Funktionen werden auch die American Mathematical Society-Dokumentenklassen und -Pakete besprochen.
[63] George D. Greenwade. The Comprehensive TE X Archive Network (CTAN). TUGboat, 14(3):342–351, Oktober 1993. ISSN 0896-3207. Ein Überblick über das Konzept, die Entwicklung und die frühere Nutzung des CTANArchivs, das alle Dateien, die etwas mit TEX zu tun haben, im Netz zur Verfügung stellt.
http://www.tug.org/TUGboat/Articles/tb14-3/tb40green.pdf
[64] Yannis Haralambous. Typesetting old German: Fraktur, Schwabacher, Gotisch and initials. TUGboat, 12(1):129–138, März 1991. Dieser Artikel zeigt, wie man mit METAFONT originalgetreue Kopien altdeutscher Schriften anfertigt. Anhand von Beispielen wird erläutert, nach welchen Regeln diese Schriften gesetzt werden.
http://www.tug.org/TUGboat/Articles/tb12-1/tb31hara.pdf
1018
Literaturverzeichnis
[65] Horace Hart. Hart’s Rules; For Compositors and Readers at the University Press, Oxford. Oxford University Press, London, Oxford, New York, 39. Auflage, 1991. ISBN 0-19-212983-X. Ein weit verbreitetes Referenzwerk für Autoren und Verleger im britischen Raum. Gemeinsam mit dem Oxford Dictionary for Writers and Editors gibt es die maßgeblichen Layoutrichtlinien für die Oxford University Press vor (vgl. [145]).
[66] Alan Hoenig. TEX Unbound: LaTEX and TEX Strategies for Fonts, Graphics, & More. Oxford University Press, London, Oxford, New York, 1998. ISBN 0-19-509686-X (Taschenbuch), 0-19-509685-1 (gebunden). Der erste Teil dieses Buches bietet einen kurzen aber vollständigen Überblick über TEX, LaTEX, METAFONT und MetaPost, mit einem besonderen Augenmerk auf ihr Zusammenspiel, den Produktionszyklus und die Arten der beteiligten Dateien. Der zweite Teil ist näheren Einzelheiten zu Schriften und ihrer Verwendung in TEX gewidmet. Besonders interessant sind dabei 30 Beispielseiten, die zeigen, wie man verschiedene Kombinationen wohlbekannter Schriften mit der geringen Auswahl an derzeit verfügbaren Mathematikfonts verbinden kann. Im letzten Teil des Buches werden Graphikanwendungen besprochen – insbesondere TEX-freundliche Verfahren wie etwa METAFONT und MetaPost, das pstricks-Paket, PICTEX und MFpic.
[67] Berthold K. P. Horn. The European Modern fonts. TUGboat, 19(1):62– 63, März 1998. ISSN 0896-3207. Bei den European Modern (EM) Schriften handelt es sich um auf der Computer Modern basierende Type1 Fonts. Sie verfügen über fertige Akzentbuchstaben und zusammengesetzte Zeichen, so dass in TEX auch Wörter aus Sprachen getrennt werden können, die diese Zeichen verwenden.
http://www.tug.org/TUGboat/Articles/tb19-1/tb58horn.pdf
[68] Jean-Michel Hufflen. Typographie: les conventions, la tradition, les goûts,. . . , et LATEX. Cahiers GUTenberg, 35–36:169–214, Mai 2000. Dieser Artikel zeigt, dass das Erlernen typographischer Regeln – für die französische und die englische Sprache – gar nicht so schwer ist. Er erklärt auch, wie man die LaTEX-Pakete french (nur für Französisch) und babel (für die meisten anderen Sprachen gleich gut geeignet) verwendet. Abschließend erklärt der Autor, wie man eine neue mehrsprachige Dokumentenklasse und einen Bibliographiestil erstellt.
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/35-hufflen.pdf
[69] ISO/IEC 10646-1:2000, Information technology—Universal MultipleOctet Coded Character Set (UCS)—Part 1: Architecture and Basic Multilingual Plane. Internationaler Standard ISO 10646-1 (2. Auflage), ISO Genf, 2000. Dieser Standard beschreibt den Aufbau des Universal Multiple-Octet Coded Character Set (UCS). In praktischer Hinsicht ist dieser Standard für 32-Bit-Zeichenkodierungen mit dem Unicode-Standard (siehe [166]) identisch. Das Layout der Basic Multilingual Plane (BMP oder Ebene 0, der grundlegenden mehrsprachigen Ebene) wird detailliert beschrieben. Bei einer Änderung 2002 wurden mathematische Symbole und weitere Zeichen hinzugefügt.
[70] ISO/IEC 10646-2:2001, Information technology—Universal MultipleOctet Coded Character Set (UCS)—Part 2: Supplementary Planes. Internationaler Standard ISO 10646-2, ISO Genf, 2001. Als Ergänzung zu [69], in dem die Ebene 0 (BMP) des UCS beschrieben wird, legt dieser Standard das Layout der zusätzlichen Ebenen dar (siehe auch [166]).
[71] ISO/IEC 14651:2001, Information technology—International string ordering and comparison—Method for comparing character strings and description of the common template tailorable ordering. Internationaler Standard ISO/IEC 14651:2001, ISO Genf, 2001. Der ISO-Standard 14651 definiert eine Methode zum Vergleichen zweier Zeichenfolgen (Strings), mit der sich bestimmen lässt, in welcher Reihenfolge diese in einer sortierten
1019
LITERATURVERZEICHNIS
Liste erscheinen müssten. Diese Methode lässt sich auch auf Strings anwenden, die alle Möglichkeiten des Unicode-Standards ausschöpfen. Der Standard definiert eine Common Template Table (Tabelle mit allgemeinen Vorlagen zur Sortierreihenfolge), die den Erfordernissen der jeweiligen Sprache und Kultur angepasst werden kann.
[72] ISO/IEC 8859-1:1998 to ISO/IEC 8859-16:2001, Information technology—8-bit single-byte coded graphic character sets, Parts 1 to 16. Internationaler Standard ISO/IEC 8859, ISO Genf, 1998–2001. Beschreibung verschiedener alphabetischer 8-Bit-Zeichensätze. Die Teile 1–4, 9, 10 und 13–16 beziehen sich auf zehn Zeichensätze, die man benötigt um verschiedene Sprachgruppen, die das lateinische Alphabet benutzen, zu kodieren. Teil 5 bezieht sich auf kyrillische, Teil 6 auf arabische, Teil 7 auf griechische, Teil 8 auf hebräische und Teil 11 auf thailändische Zeichen.
[73] ISO 8879:1986, Information Processing—Text and Office Systems— Standard Generalised Markup Language (SGML). Internationaler Standard ISO 8879, ISO Genf, 1986. Nicht immer einfach zu lesender ISO-Standard, der die Sprache SGML in allen technischen Einzelheiten beschreibt. 1988 wurde eine Ergänzung und 1996 und 1999 wurden zwei Korrigenda veröffentlicht. Eine kommentierte Beschreibung befindet sich in [55].
[74] Alan Jeffrey, Rowlan McDonnell und Lars Hellström. fontinst: Font installation software for TE X, Dezember 2004. Dieses Paket von Hilfsprogrammen bietet Unterstützung beim Erzeugen komplexer virtueller Zeichensätze für LaTEX in jeder beliebigen Kodierung, insbesondere aus Sammlungen von PostScript-Fonts. Auf CTAN unter: fonts/utilities/fontinst/doc/manual
[75] Alan Jeffrey, Sebastian Rahtz, Ulrik Vieth und Lars Hellström. The fontinst utility, Juli 2003. Technische Beschreibung des Hilfsprogramms fontinst. Auf CTAN unter: fonts/utilities/fontinst/source/fisource.dvi
[76] Alan Jeffrey. PostScript font support in LATEX 2ε . TUGboat, 15(3):263– 268, September 1994. ISSN 0896-3207. Beschreibt die ursprüngliche psnfss-Distribution für den Einsatz von PostScript-Fonts in LaTEX. http://www.tug.org/TUGboat/Articles/tb15-3/tb44jeff.pdf
[77] Alan Jeffrey. Tight setting with TE X. TUGboat, 16(1):78–80, März 1995. ISSN 0896-3207. Beschreibt einige Versuche, Texte in Adobe Times, einer Schrift traditionell geringer Laufweite, mit TEX zu setzen.
http://www.tug.org/TUGboat/Articles/tb16-1/tb46jeff.pdf
[78] Roger Kehr. xindy—A flexible indexing system. Cahiers GUTenberg, 28–29:223–230, März 1998. Hier wird ein neuer Index-Prozessor, xindy, beschrieben. Mit seiner Hilfe lassen sich Indexeinträge in einer mehrsprachigen Umgebung nach den Sortierregeln der jeweiligen Sprache sortieren. Er bietet neue Verfahren, über Seitenzahlen und römische Ziffern hinaus, weitere strukturierte Verweise auf Stellen im Text zu verarbeiten und ist für komplexe Markup-Systeme gerüstet.
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/28-29-kehr.pdf
[79] Brian W. Kernighan. pic—A Graphics Language for Typesetting. Computerwissenschaftlicher Fachbericht 116, AT&T Bell Laboratories, 1991. Benutzerhandbuch für die Sprache pic, die zum Zeichnen einfacher Figuren auf einem Belichter dient. Die Grundobjekte dieser Sprache sind Kästen, Kreise, Ellipsen, Linien, Pfeile, Spline-Kurven und Text. Diese lassen sich an jeder beliebigen Stelle platzieren, entweder mithilfe absoluter Positionsangaben oder im Verhältnis zu vorhergehenden Objekten. http://cm.bell-labs.com/cm/cs/cstr/116.ps.gz
1020
Literaturverzeichnis
[80] Jörg Knappen. Release 1.2 of the dc-fonts: Improvements to the European letters and first release of text companion symbols. TUGboat, 16(4):381–387, Dezember 1995. ISSN 0896-3207. Beschreibung der DC Fonts, der Vorgänger der EC Fonts, welche wiederum die Standardfonts für die T1-Kodierung in LaTEX sind.
http://www.tug.org/TUGboat/Articles/tb16-4/tb49knap.pdf
[81] Jörg Knappen. The dc fonts 1.3: Move towards stability and completeness. TUGboat, 17(2):99–101, Juni 1996. ISSN 0896-3207. Fortsetzung von [80]. In diesem Artikel werden die in Version 1.3 erzielten Fortschritte hinsichtlich Stabilität und Vollständigkeit beschrieben.
http://www.tug.org/TUGboat/Articles/tb17-2/tb51knap.pdf
[82] Donald E. Knuth und Pierre MacKay. Mixing right-to-left texts with leftto-right texts. In Knuth [101], S. 157–176. Ursprünglich in TUGboat 8(1):14–25, 1987 veröffentlicht. TEX wurde ursprünglich entwickelt, um Material in Dokumenten von links nach rechts und von oben nach unten zu setzen. In dieser Abhandlung wird erläutert, welche Probleme bei der Verarbeitung von Dokumenten mit gemischten Schreibrichtungen auftreten. Außerdem wird besprochen, mit welchen Änderungen man TEX zu einem bidirektionalen Satzsystem ausbauen kann.
http://www.tug.org/TUGboat/Articles/tb08-1/tb17knutmix.pdf
[83] Donald E. Knuth und Michael F. Plass. Breaking Paragraphs Into Lines. In Knuth [101], S. 67–155. Dieser 1981 zum ersten Mal veröffentlichte Artikel spricht das Problem an, den Text eines Absatzes in Zeilen annähernd gleicher Länge einzuteilen. Der grundlegende Algorithmus betrachtet den Absatz als Ganzes und stellt die (heute in TEX wohlbekannten) Konzepte von „Boxen“, „Glue“ (Leim) und „Penalty“-Werten zum Auffinden der besten Stellen für Zeilenumbrüche vor. In der Abhandlung wird das dynamische Programmierverfahren beschrieben, mit dem der Algorithmus umgesetzt wurde.
[84] Donald E. Knuth und Hermann Zapf. AMS Euler—A New Typeface for Mathematics. In Knuth [101], S. 339–366. In diesem 1989 zum ersten Mal veröffentlichten Artikel erläutern die beiden Autoren, wie eine Zusammenarbeit zwischen Wissenschaftlern und Künstlern dazu beitragen kann, ansprechende und qualitativ hochwertige mathematische Zeitschriften und Lehrbücher herzustellen.
[85] Donald E. Knuth. TEX and METAFONT—New Directions in Typesetting. Digital Press, 12 Crosby Drive, Bedford, MA 01730, USA, 1979. ISBN 0-932376-02-9. Enthält einen Artikel über „Mathematical Typography“ (Mathematiksatz), in dem die Frühgeschichte des Computersatzes beschrieben ist und was den Autor dazu brachte, an TEX zu arbeiten. Im Buch werden frühe (mittlerweile veraltete) Versionen von TEX und METAFONT beschrieben.
[86] Donald E. Knuth. Literate Programming. Bericht STAN-CS-83-981, Stanford University, Department of Computer Science, Stanford, CA, USA, 1983. Eine Sammlung von Abhandlungen zu Programmier- und Dokumentationsstilen.
http://www.literateprogramming.com/farticles.html.
[87] Donald E. Knuth. The TEXbook, Band A von Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. ISBN 0-201-13447-0. Die definitive Benutzeranleitung und vollständige Referenz zu TEX.
1021
LITERATURVERZEICHNIS
[88] Donald E. Knuth. TEX: The Program, Band B von Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. ISBN 0-20113437-3. Der vollständige dokumentierte TEX-Programmcode, mit verschiedenen Stichwortverzeichnissen versehen.
[89] Donald E. Knuth. The METAFONTbook, Band C von Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. ISBN 0-20113445-4 (gebunden), 0-201-13444-6 (Taschenbuch). Benutzeranleitung und Referenz zu METAFONT, das Begleitprogramm zu TEX zum Gestalten von Schriften.
[90] Donald E. Knuth. METAFONT: The Program, Band D von Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. ISBN 0-201-13438-1. Vollständiges Listing des Programmcodes von METAFONT.
[91] Donald E. Knuth. Computer Modern Typefaces, Band E von Computers and Typesetting. Addison-Wesley, Reading, MA, USA, 1986. ISBN 0-201-13446-2. In diesem Buch sind über 500 griechische und römische Buchstabenformen zusammen mit ihren Satzzeichen, Ziffern und vielen mathematischen Symbolen abgebildet. Zu jeder Glyphe ist der METAFONT-Code angegeben und es wird erklärt, wie man durch Verändern der METAFONT-Parameter alle Zeichen der Schriftfamilie Computer Modern erhält.
[92] Donald E. Knuth. 3:16 Bible texts illuminated. A-R Editions, Inc., Madison, Wisconsin, 1990. ISBN 0-89579-252-4. Analyse von Kapitel 3, Vers 16 jedes Buches der Bibel; enthält wunderschöne Kalligraphien verschiedener Künstler.
[93] Donald E. Knuth. The Art of Computer Programming, vols 1–3. Addison-Wesley, Reading, MA, USA, 1998. ISBN 0-201-89683-4, 0-20103822-6, 0-201-03803-X. Ein wichtiges Werk über Algorithmen und Datenstrukturen für effektives Programmieren.
[94] Donald E. Knuth. Mathematical Typography. In Knuth [101], S. 19–65. Ausgehend von einer Vorlesung, die er 1978 gehalten hat, weist Knuth nach, dass Mathematikbücher und -zeitschriften nicht mehr so schön aussehen wie früher. Da die Ursache hauptsächlich darin liegt, dass qualitativ hochwertiges Setzen zu teuer geworden ist, schlägt er vor, das Problem mithilfe der Mathematik selbst zu lösen. Zuerst muss seiner Meinung nach eine Methode entwickelt werden, um mathematische Elemente in einem Dokument eindeutig auszuzeichnen, so dass sie leicht von Maschinen verarbeitet werden können. Der zweite Schritt besteht darin, die Formen der Buchstaben und Symbole mithilfe der Mathematik zu gestalten. Der Artikel erläutert beide Ansätze sehr ausführlich.
[95] Donald E. Knuth. Virtual Fonts: More Fun for Grand Wizards. In Knuth [101], S. 247–262. Ursprünglich in TUGboat 11(1):13–23, 1990 veröffentlicht. Erklärung, was virtuelle Fonts sind und wozu man sie benötigt, ergänzt um technische Einzelheiten. Auf CTAN unter: info/virtual-fonts.knuth
http://www.tug.org/TUGboat/Articles/tb11-1/tb27knut.pdf
[96] Donald E. Knuth. Typesetting Concrete Mathematics. In Knuth [101], S. 367–378. Ursprünglich in TUGboat 10(1):31–36, 1989 veröffentlicht. Knuth erläutert, wie er das Lehrbuch Concrete Mathematics verfasst hat. Er betont, dass er das Buch sowohl in mathematischer als auch in typographischer Hinsicht „ansprechend“ gestalten wollte, da hier das erste Mal die neue Schrift AMS Euler von Herman
1022
Literaturverzeichnis
Zapf in größerem Umfang zum Einsatz kam. Die Fontparameter wurden so optimiert, dass der Text der besten Handschrift eines Mathematikers in nichts nachstehen sollte. Außerdem werden noch weitere Entscheidungen hinsichtlich der Gestaltung des Buches beschrieben. http://www.tug.org/TUGboat/Articles/tb10-1/tb26knut.pdf
[97] Donald E. Knuth. Fonts for digital halftones. In Knuth [101], S. 415– 448. Ursprünglich in TUGboat 8(2):135–160, 1987 veröffentlicht. In diesem Artikel werden einige Versuche besprochen, in denen mithilfe von METAFONT Zeichensätze zum Erstellen von Rasterdrucken auf Laserdruckern erzeugt wurden. Die Verfahren erwiesen sich auch in einigen anderen Anwendungen als nützlich, und die Gestaltung warf verschiedene interessante Fragen auf.
http://www.tug.org/TUGboat/Articles/tb08-2/tb18knut.pdf
[98] Donald E. Knuth. Computers and Typesetting. In Knuth [101], S. 555– 562. Ursprünglich in TUGboat 7(2):95–98, 1986 veröffentlicht. Ausführungen von Knuth im Computer Museum in Boston, Massachusetts, am 21. Mai 1986 bei der „Einweihungsfeier“ anlässlich der Vollendung von TEX.
http://www.tug.org/TUGboat/Articles/tb07-2/tb14knut.pdf
[99] Donald E. Knuth. The New Versions of TE X and METAFONT. In Knuth [101], S. 563–570. Ursprünglich in TUGboat 10(3):325–328, 1989 veröffentlicht. Knuth erklärt, wie er beim TUG Meeting in Stanford 1989 überzeugt wurde, noch einmal einige Änderungen an TEX und METAFONT vorzunehmen, damit diese Programme auch 8-Bit-Zeichensätze unterstützten. Im Anschluss beschreibt er die verschiedenen zu diesem Zweck durchgeführten Änderungen sowie einige weitere Verbesserungen.
http://www.tug.org/TUGboat/Articles/tb10-3/tb25knut.pdf
[100] Donald E. Knuth. The future of TE X and METAFONT. In Knuth [101], S. 571–572. Ursprünglich in TUGboat 11(4):489, 1990 veröffentlicht. In diesem Artikel erklärt Knuth, dass seine Arbeit an TEX, METAFONT und Computer Modern nun am „Ende angelangt“ sei, und dass weitere Änderungen nur noch in der Korrektur sehr schwerwiegender Fehler bestehen würden.
http://www.tug.org/TUGboat/Articles/tb11-4/tb30knut.pdf
[101] Donald E. Knuth. Digital Typography. CSLI Publications, Stanford, CA, USA, 1999. ISBN 1-57586-011-2 (Leinen), 1-57586-010-4 (Taschenbuch). Sammlung von Texten von Knuth zum Thema TEX und Typographie.
[102] Markus Kohm und Jens-Uwe Morawski. KOMA-Script: eine Sammlung von Klassen und Paketen für LaTEX 2ε . dante, Heidelberg, Februar 2003. ISBN 3-936427-45-3. KOMA -Script ist eine Sammlung von LaTEX-Klassen und -Paketen, die man anstelle der Standard-LaTEX-Klassen verwenden kann und die einen erweiterten Funktionsumfang bieten. Die Distribution umfasst deutsche und englische Handbücher. Auf CTAN unter: macros/latex/contrib/koma-script/scrguide.pdf
[103] Helmut Kopka und Patrick Daly. Guide to LaTEX. Tools and Techniques for Computer Typesetting. Addison-Wesley, Boston, MA, USA, vierte Auflage, 2004. ISBN 0-201-17385-6. LaTEX-Einführung in einem anderen pädagogischen Stil als ihn Lamport in seinem LATEXManual [106] benutzt.
[104] Klaus Lagally. ArabTE X—Typesetting Arabic with vowels and ligatures. In Proceedings of the 7th European TEX Conference, Prague, S. 153– 172. CsTUG, Prague, September 1992. ISBN 80-210-0480-0. Makropaket zum Setzen teilweise und vollständig vokalisierter arabischer Texte, das zu Plain-TEX und LaTEX kompatibel ist.
1023
LITERATURVERZEICHNIS
[105] Leslie Lamport. MakeIndex, An Index Processor For LATEX. Technischer Bericht, Electronic Document in MakeIndex distribution, 1987. In diesem Dokument wird erläutert, welche Syntax man in dem LaTEX-Befehl \index verwenden kann, wenn man den Index mit MakeIndex generiert. Es enthält auch eine Liste der möglichen Fehlermeldungen. Auf CTAN unter: indexing/makeindex/doc/makeindex.dvi
[106] Leslie Lamport. LaTEX: A Document Preparation System: User’s Guide and Reference Manual. Addison-Wesley, Reading, MA, USA, zweite Auflage, 1994. ISBN 0-201-52983-1. Korrigierter Nachdruck von 1996. Das ultimative LaTEX 2ε -Grundlagenhandbuch für Anwender vom Entwickler von LaTEX 2.09. Es ist eine gute Ergänzung zum vorliegenden Buch.
[107] Olga Lapko und Irina Makhovaya. The style russianb for Babel: Problems and solutions. TUGboat, 16(4):364–372, Dezember 1995. ISSN 0896-3207. In dieser Abhandlung wird die Sprachoption russianb besprochen, die besondere Befehle enthält, um Legenden und alphabetische Zähler an die russische Sprache anzupassen, und russische mathematische Operatoren ermöglicht. Es wird auch auf einige Probleme hingewiesen, die beim Verwenden dieser Option (mit verschiedenen Kodierungen) auftreten können.
http://www.tug.org/TUGboat/Articles/tb16-4/tb49olga.pdf
[108] LaTEX3 Project Team. Default docstrip headers. TUGboat, 19(2):137– 138, Juni 1998. In diesem Dokument wird das Format des Vorspanns beschrieben, den docstrip normalerweise am Anfang erzeugter Paketdateien einfügt. Dieser Vorspann eignet sich für Copyright-Vermerke und Distributionsbedingungen.
http://www.tug.org/TUGboat/Articles/tb19-2/tb59ltdocstrip.pdf
[109] LaTEX3 Project Team. LATEX 2ε font selection, September 2000. Beschreibung der Fontauswahl in Standard-LaTEX für Paketentwickler, die bereits mit TEX-Fonts und LaTEX vertraut sind.
http://www.latex-project.org/guides/fntguide.pdf
[110] LaTEX3 Project Team. Configuration options for LATEX 2ε , August 2001. Wie man eine LaTEX-Installation mithilfe der Standard-Konfigurationsdateien konfiguriert. http://www.latex-project.org/guides/cfgguide.pdf
[111] LaTEX3 Project Team. The LATEX Project Public License (Version 1.3), Dezember 2003. Open-Source-Lizenz, die für die zentrale LaTEX 2ε -Distribution und viele Zusatzpakete verwendet wird. http://www.latex-project.org/lppl/
[112] LaTEX3 Project Team. LATEX Bug database. Vom LaTEX3-Team als Teil der LaTEX 2ε -Pflege betriebene Fehlerdatenbank.
http://www.latex-project.org/cgi-bin/ltxbugs2html
[113] LaTEX3 Project Team. LATEX News. Mit jedem neuen LaTEX 2ε -Release wird eine Ausgabe der LATEX News veröffentlicht, in der die Änderungen gegenüber dem letzten Release hervorgehoben werden.
http://www.latex-project.org/ltnews/
[114] John Lavagnino und Dominik Wujastyk. An overview of EDMAC: A plain TE X format for critical editions. TUGboat, 11(4):623–643, November 1990. ISSN 0896-3207. EDMAC dient zum Setzen „kritischer Ausgaben“ von Texten wie etwa der Oxford Classical
Texts, Shakespeare und anderer Reihen. Das Format unterstützt Zeilennummerierung, Fuß- und Endnotenapparate.
http://www.tug.org/TUGboat/Articles/tb11-4/tb30lava.pdf
1024
Literaturverzeichnis
[115] Werner Lemberg. The CJK package: Multilingual support beyond Babel. TUGboat, 18(3):214–224, September 1997. ISSN 0896-3207. Beschreibung des LaTEX-Paketes CJK (Chinesisch/Japanisch/Koreanisch) und seiner Schnittstelle zu mule (multilingual emacs).
http://www.tug.org/TUGboat/Articles/tb18-3/cjkintro600.pdf
[116] Silvio Levy. Using Greek fonts with TE X. TUGboat, 9(1):20–24, April 1988. ISSN 0896-3207. Der Autor versucht darzulegen, dass man mit der Schriftfamilie gr in TEX griechische Texte ebenso einfach und ansprechend setzen kann, wie sonst englische Texte. Der Artikel ist als Lernhilfe gedacht. Für alle, die sich bereits näher mit der Schrift vertraut gemacht haben, enthält er jedoch auch technische Einzelheiten.
http://www.tug.org/TUGboat/Articles/tb09-1/tb20levy.pdf
[117] Franklin Mark Liang. Word Hy-phen-a-tion by Com-pu-ter. Dissertation, Stanford University, Stanford, CA 94305, Juni 1983. Auch als Stanford University, Department of Computer Science Report Nr. STAN-CS-83-977 erhältlich. Eine ausführliche Beschreibung des Algorithmus, den TEX zur Silbentrennung verwendet.
[118] Ruari McLean. The Thames and Hudson Manual of Typography. Thames and Hudson, London, UK, 1980. ISBN 0-500-68022-1. Eine allgemeine Einführung in die traditionelle kommerzielle Typographie.
[119] Frank Mittelbach, David Carlisle, Chris Rowley et al. Experimental LATEX code for class design. Auf der TEX Users Group-Konferenz in Vancouver hielt das LaTEX-Projektteam einen Vortrag über Modelle für Benutzer- und Entwicklerschnittstellen in LaTEX3 [120]. Die meisten dieser Ideen wurden als Prototypen implementiert (z.B. für das Entwerfen von Vorlagen, die Handhabung des Vorspanns, die Ausgaberoutine, die Druckfahne und das Formatieren von Absätzen). Der Quellcode ist dokumentiert und enthält weitere Erklärungen und Beispiele (vgl. [132]). Vortrag: http://www.latex-project.org/papers/tug99.pdf Code: http://www.latex-project.org/code/experimental CVS: http://www.latex-project.org/cgi-bin/cvsweb
[120] Frank Mittelbach, David Carlisle und Chris Rowley. New interfaces for LATEX class design, Parts I and II. TUGboat, 20(3):214–216, September 1999. ISSN 0896-3207. Vorschläge für eine saubere Schnittstelle zum Einrichten und Programmieren von LaTEXKlassen. http://www.tug.org/TUGboat/Articles/tb20-3/tb64carl.pdf CVS: http://www.latex-project.org/cgi-bin/cvsweb
[121] Frank Mittelbach, Denys Duchier, Johannes Braams, Marcin Woli´ nski und Mark Wooding. The DocStrip program, 2003. Teil der grundlegenden LaTEX-Distribution. Beschreibung der Umsetzung des Programms docstrip. Auf CTAN unter: macros/latex/base/docstrip.dtx
[122] Frank Mittelbach und Chris Rowley. LATEX 2.09 "→ LATEX3. TUGboat, 13(1):96–101, April 1992. ISSN 0896-3207. Kurzer Abriss des LaTEX3-Projektes, in dem die Geschichte noch einmal aufgerollt und die Struktur des Systems beschrieben wird. In TUGboat, 13(3):390–391, April 1992, wurde eine aktuellere Version veröffentlicht. Ein Aufruf an Freiwillige, bei der Entwicklung von LaTEX3 zu helfen, erschien zusammen mit einer Liste der verschiedenen Aufgaben in TUGboat, 13(4):510–515, Dezember 1992. In dem Artikel wird auch beschrieben, wie man die aktuelle Aufgabenliste sowie verschiedene Arbeitsgruppenunterlagen zu LaTEX3 per E-Mail oder ftp erhält. Zudem wird erklärt, wie man dem LaTEX3Diskussionsforum beitreten kann.
http://www.tug.org/TUGboat/Articles/tb13-1/tb34mittl3.pdf
1025
LITERATURVERZEICHNIS
[123] Frank Mittelbach und Chris Rowley. The Pursuit of Quality: How can Automated Typesetting achieve the Highest Standards of Craft Typography? In C. Vanoirbeek und G. Coray, Hg., EP92—Proceedings of Electronic Publishing, ’92, International Conference on Electronic Publishing, Document Manipulation, and Typography, Swiss Federal Institute of Technology, Lausanne, Switzerland, April 7–10, 1992, S. 261–273. Cambridge University Press, New York, 1992. ISBN 0-52143277-4. In dieser Abhandlung werden hochwertige typographische Arbeiten dem, was heute mittels automatisierter Satzverfahren technisch möglich ist, gegenübergestellt. Der erste Teil befasst sich mit verschiedenen typographischen Konventionen, die sich nicht durch zurzeit verfügbare Formatierungsmodelle umsetzen lassen. Der zweite Teil erläutert, warum die aktuellen Lösungsansätze des Computersatzes nicht zu qualitativ hochwertigen Ergebnissen führen werden. Er zeigt auf, in welcher Richtung weiter geforscht werden sollte, um die Qualität am Computer generierter Layouts zu verbessern.
[124] Frank Mittelbach und Rainer Schöpf. A new font selection scheme for TE X macro packages—the basic macros. TUGboat, 10(2):222–238, Juli 1989. ISSN 0896-3207. Beschreibung der Makros, auf deren Basis die erste Version des New Font Selection Scheme (Fontauswahlsystem) von LaTEX umgesetzt wurde.
http://www.tug.org/TUGboat/Articles/tb10-2/tb24mitt.pdf
[125] Frank Mittelbach und Rainer Schöpf. With LATEX into the nineties. TUGboat, 10(4):681–690, Dezember 1989. ISSN 0896-3207. In diesem Artikel wird vorgeschlagen, LaTEX neu aufzusetzen. Dabei sollen die wesentlichen Funktionen der aktuellen Schnittstelle erhalten bleiben und gleichzeitig die wachsenden Anforderungen der verschiedenen Benutzergruppen berücksichtigt werden. Zudem werden einige Vorschläge für zukünftige Entwicklungen formuliert. Der Artikel hat LaTEX 2.09 zu dem Schritt zu LaTEX 2ε verholfen.
http://www.tug.org/TUGboat/Articles/tb10-4/tb26mitt.pdf
[126] Frank Mittelbach und Rainer Schöpf. Reprint: The new font family selection — User interface to standard LATEX. TUGboat, 11(2):297–305, Juni 1990. ISSN 0896-3207. Umfassende Beschreibung der Benutzerschnittstelle des LaTEX New Font Selection Scheme (Fontauswahlsystem) in seiner ersten Version.
http://www.tug.org/TUGboat/Articles/tb11-2/tb28mitt.pdf
[127] Frank Mittelbach und Rainer Schöpf. Towards LATEX 3.0. TUGboat, 12(1):74–79, März 1991. ISSN 0896-3207. Beschreibung der Ziele des LaTEX3-Projektes. Die Autoren untersuchen, welche Verbesserungen der LaTEX-Schnittstellen für Benutzer und Layout-Dateien erforderlich sind, um mit modernen Entwicklungen wie etwa SGML Schritt zu halten. Sie prüfen auch einige interne Konzepte, die überarbeitet werden sollten.
http://www.tug.org/TUGboat/Articles/tb12-1/tb31mitt.pdf
[128] Frank Mittelbach. E-TE X: Guidelines for Future TE X Extensions. TUGboat, 11(3):337–345, September 1990. ISSN 0896-3207. Dieser Artikel vergleicht TEX-Ausdrucke mit von Hand gesetzten Dokumenten. Dabei zeigt sich, dass viele wichtige Elemente typographisch hochwertiger Arbeiten nicht unterstützt werden und dass weitere Untersuchungen dahin führen sollten, einen „Nachfolger“ für das Satzsystem TEX zu entwickeln.
http://www.tug.org/TUGboat/Articles/tb11-3/tb29mitt.pdf
[129] Frank Mittelbach. Comments on “Filenames for Fonts” (TUGboat 11#4). TUGboat, 13(1):51–53, April 1992. ISSN 0896-3207. Hier werden einige Probleme mit der Nomenklatur von K. Berry besprochen, die insbesondere auftreten, wenn man bestimmte Fontcharakteristika unabhängig voneinander definieren will. Zudem wird die Verwendung der Namensgebung im NFSS betrachtet.
http://www.tug.org/TUGboat/Articles/tb13-1/tb34mittfont.pdf
1026
Literaturverzeichnis
[130] Frank Mittelbach. A regression test suite for LATEX 2ε . TUGboat, 18(4):309–311, Dezember 1997. ISSN 0896-3207. Beschreibung der Konzeption und Implementation des Testpaketes, mit dessen Hilfe der LaTEX-Kernel nach Veränderungen auf unerwartete Nebeneffekte geprüft werden kann. Eines der wertvollsten Werkzeuge, um die Stabilität von LaTEX 2ε zu gewährleisten. http://www.tug.org/TUGboat/Articles/tb18-4/tb57mitt.pdf
[131] Frank Mittelbach. Language Information in Structured Documents: Markup and rendering—Concepts and problems. In International Symposium on Multilingual Information Processing, S. 93–104. Tsukuba, Japan, März 1997. Eingeladener Beitrag. Nachdruck in TUGboat 18(3):199–205, 1997. In dieser Abhandlung werden die Struktur und die Verarbeitung mehrsprachiger Dokumente besprochen, sowohl auf allgemeiner Ebene als auch hinsichtlich einer vorgeschlagenen Erweiterung von Standard-LaTEX.
http://www.tug.org/TUGboat/Articles/tb18-3/tb56lang.pdf
[132] Frank Mittelbach. Formatting documents with floats: A new algorithm for LATEX 2ε . TUGboat, 21(3):278–290, September 2000. ISSN 08963207. Beschreibungen von Funktionen und Konzepten für eine neue LaTEX-Ausgaberoutine, die in mehrspaltigen Seitenlayouts spaltenübergreifende Gleitobjekte setzen kann.
http://www.tug.org/TUGboat/Articles/tb21-3/tb68mittel.pdf CVS: http://www.latex-project.org/cgi-bin/cvsweb
[133] Frank Mittelbach. The trace package. TUGboat, 22(1/2):93–99, März 2001. ISSN 0896-3207. Beschreibung des trace-Paketes, mit dessen Hilfe sich Debugging-Informationen bei der Ausführung von LaTEX-Code steuern lassen.
http://www.tug.org/TUGboat/Articles/tb22-1-2/tb70mitt.pdf
[134] Gerd Neugebauer. BIBTOOL: A Tool to Manipulate BIBTE X Files, 2002. Beschreibt das bibtool-Programm mit den folgenden Funktionen: Prettyprinting, Sortieren und Zusammenführen von BIBTEX-Datenbanken, Erzeugen einheitlicher Verweisschlüssel und Auswählen von in einer Veröffentlichung verwendeten Quellen. Auf CTAN unter: biblio/bibtex/utils/bibtool/bibtool.dvi
[135] O. Nicole, J. André und B. Gaulle. Notes en bas de pages : commentaires. Cahiers GUTenberg, 15:46–32, April 1993. Kommentare, Erläuterungen und Ergänzungen zu [10].
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/15-nicole.pdf
[136] Scott Pakin. The Comprehensive LATEX Symbol List, 2003. In diesem Dokument sind über 2800 Symbole mit den sie erzeugenden LaTEX-Befehlen aufgeführt. Einige dieser Symbole sind garantiert auf jedem LaTEX 2ε -System verfügbar; andere erfordern Zeichensätze, die nicht in jeder Distribution enthalten sind und daher erst installiert werden müssen. Alle in diesem Dokument beschriebenen Fonts und Pakete sind in den CTAN-Archiven frei verfügbar. Auf CTAN unter: info/symbols/comprehensive/
[137] Oren Patashnik. BIBTE Xing, Februar 1988. In diesem Dokument und in Anhang B von The Manual [106] wird die BIBTEXBenutzerschnittstelle beschrieben, ergänzt um nützliche Hinweise dazu, wie man ihr Verhalten steuert. Auf CTAN unter: biblio/bibtex/contrib/doc/btxdoc.pdf
[138] Oren Patashnik. Designing BIBTE X Styles, Februar 1988. Ausführliche Beschreibung der in BIBTEX verwendeten Postfix-Stapelverarbeitungssprache für Entwickler von BIBTEX-Stilen. Nach einer allgemeinen Beschreibung der Sprache werden alle Befehle und eingebauten Funktionen besprochen. Abschließend wird die BIBTEX-Namensformatierung in allen Einzelheiten erläutert. Auf CTAN unter: biblio/bibtex/contrib/doc/btxhak.pdf
1027
LITERATURVERZEICHNIS
[139] John Plaice, Yannis Haralambous und Chris Rowley. A multidimensional approach to typesetting. TUGboat, 24(1):105–114, 2004. ISSN 0896-3207. Überblick über einen mikrotypographischen Ansatz, der den Lösungen von TEX und Ω 2.0 deutlich überlegen ist.
http://www.tug.org/TUGboat/Articles/tb24-1/plaice.pdf
[140] John Plaice und Yannis Haralambous. The latest developments in Ω. TUGboat, 17(2):181–183, Juni 1996. ISSN 0896-3207. In diesem Artikel werden ΩTimes und ΩHelvetica beschrieben, virtuelle Times und Helvetica-Fonts (so genannte „Glyphenbehälter“), die auf echten PostScript-Fonts basieren. Sie enthalten alle Zeichen, die man benötigt, wenn man hochwertige TEXDokumente in allen Sprachen und Systemen setzen will, die sich der folgenden Alphabete und ihrer Derivate bedienen: Latein, Griechisch, Kyrillisch, Arabisch, Hebräisch und Tifinagh. Weitere Alphabete wie z.B. Koptisch, Armenisch und Georgisch werden ebenso folgen wie mathematische Symbole, Dingbats und andere Zeichensammlungen. Letztendlich werden die Ω-Fonts Glyphen für den gesamten Unicode-Zeichensatz enthalten, ergänzt durch einige besondere Glyphen, die man für hochwertige Typographie benötigt. http://www.tug.org/TUGboat/Articles/tb17-2/tb51omeg.pdf
[141] Sunil Podar. Enhancements to the Picture Environment of LATEX. Fachbericht 86-17, Department of Computer Science, S.U.N.Y, 1986. Version 1.2: July 14, 1986. In diesem Dokument werden einige neue Befehle für die picture-Umgebung von LaTEX beschrieben. Es geht insbesondere um High-Level-Befehle, welche die graphischen Fähigkeiten des Paketes durch eine anwenderfreundlichere und leistungsfähigere Benutzerschnittstelle verbessern. Mit ihrer Hilfe kann man mit weniger Aufwand ausgefeiltere Bilder erstellen als im normalen LaTEX.
[142] Rama Porrat. Developments in Hebrew TE X. In Proceedings of the 7th European TEX Conference, Prague, S. 135–147. CsTUG, Prag, September 1992. ISBN 80-210-0480-0. Besprechung verfügbarer Software und Makropakete, die bidirektionales Setzen unterstützen, sowie ihrer zugehörigen hebräischen Fonts.
[143] Bernd Raichle, Rolf Niepraschk und Thomas Hafner. DE-TeX-FAQ— Fragen und Antworten über TE X, LATEX und DANTE e.V., 2003. Häufig gestellte Fragen (FAQ) mit Antworten zu TEX und zu der deutschsprachigen TEXBenutzervereinigung DANTE e.V. http://www.dante.de/faq/de-tex-faq
[144] Brian Reid. Scribe Document Production System User Manual. Unilogic Ltd, 1984. Handbuch für das System, das sich in einigen Punkten inspirierend auf die Entwicklung von LaTEX ausgewirkt hat.
[145] Robert M. Ritter, Hg. The Oxford Style Manual. Oxford University Press, London, Oxford, New York, 2003. ISBN 0-198-60564-1. Referenzwerk, das auch eine Aktualisierung von Hart’s Rules [65] sowie das Oxford Dictionary for Writers and Editors umfasst.
[146] Tomas G. Rokicki. A proposed standard for specials. TUGboat, 16(4):395–401, Dezember 1995. ISSN 0896-3207. Entwurf eines Standards für \special-Befehle in TEX.
http://www.tug.org/TUGboat/Articles/tb16-4/tb49roki.pdf
[147] Tomas G. Rokicki. Dvips: A DVI-to-PostScript Translator, Version 5.66a, Februar 1997. Benutzeranleitung für dvips und seine Begleitprogramme und -Pakete wie z.B. afm2tfm. Auf CTAN unter: dviware/dvips/dvips_man.pdf
1028
Literaturverzeichnis
[148] Chris A. Rowley und Frank Mittelbach. Application-Independent Representation of Multilingual Text. In Unicode Consortium, Hg., Europe, Software + the Internet: Going Global with Unicode: Tenth International Unicode Conference, March 10–12, 1997, Mainz, Germany. The Unicode Consortium, San Jose, CA, 1997. Befasst sich mit dem Thema, wie sich Text in Computerdateien darstellen lässt, sowie mit den Bedürfnissen vieler unterschiedlicher Textverarbeitungsprogramme.
http://www.latex-project.org/papers/unicode5.pdf
[149] Chris Rowley. Models and languages for formatted documents. TUGboat, 20(3):189–195, September 1999. ISSN 0896-3207. In diesem Dokument werden viele Ideen zum Formatieren von Dokumenten untersucht, und wie sich diese formulieren und umsetzen lassen.
http://www.tug.org/TUGboat/Articles/tb20-3/tb64rowl.pdf
[150] Chris Rowley. The LATEX legacy: 2.09 and all that. In ACM, Hg., Proceedings of the Twentieth Annual ACM Symposium on Principles of Distributed Computing 2001, Newport, Rhode Island, United States, S. 17–25. ACM Press, New York, NY, USA, 2001. ISBN 1-58113-383-9. Teil einer Festschrift zum 60sten Geburtstag von Leslie Lamport; ein sehr aufschlussreicher Bericht über die technische Geschichte und die Philosophie von TEX und LaTEX.
[151] Richard Rubinstein. Digital Typography—An Introduction to Type and Composition for Computer System Design. Addison-Wesley, Reading, MA, USA, November 1988. ISBN 0-201-17633-5. Korrigierter Nachdruck. Dieses Buch beschreibt einen technischen Typographieansatz. Es zeigt, wie man mithilfe von Computern graphische Elemente, die der Darstellung von Dokumenten auf Computern dienen, entwerfen, erzeugen und positionieren kann.
[152] Joachim Schrod. International LATEX is ready to use. TUGboat, 11(1):87–90, April 1990. ISSN 0896-3207. Kündigt einige der frühen Standards für die Globalisierung von LaTEX an.
http://www.tug.org/TUGboat/Articles/tb11-1/tb27schrod.pdf
[153] Joachim Schrod. An International Version of MakeIndex. Cahiers GUTenberg, 10–11:81–90, September 1991. Der Indexprozessor MakeIndex ist eigentlich nur für englische Texte geeignet. Die Verarbeitung von Texten in anderen Sprachen stellt ein Problem dar, insbesondere wenn sie andere Alphabete als das lateinische benutzen, wie z.B. Russisch, Arabisch oder Chinesisch. In solchen Fällen erweist sich das Taggen von Indexeinträgen häufig als ein mühsamer und fehleranfälliger Prozess. Kommen im Indexschlüssel selbst MarkupBefehle vor, so muss zudem noch ein expliziter Sortierschlüssel angegeben werden. In diesem Artikel wird eine neue MakeIndex-Version vorgestellt, die weniger Speicher belegt, so dass sie auch zum Erstellen sehr umfangreicher Indexe geeignet ist. Mit ihrer Hilfe lassen sich Sortierschlüssel automatisch anhand benutzerdefinierter Zuordnungen aus den Indexschlüsseln erzeugen und sie unterstützt Dokumente, die nicht auf dem lateinischen Alphabet basieren.
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/10-schrod.pdf
[154] Joachim Schrod. The components of TE X. MAPS, 8:81–86, 1992. TEX benötigt eine Vielzahl zusätzlicher Komponenten (Dateien und Programme), deren Bedeutung und Austausch untereinander vielen verborgen bleibt; hier wird der Aufbau einer vollständigen TEX-Installation beschrieben.
http://www.ntg.nl/maps/pdf/8_18.pdf
[155] Paul Stiff. The end of the line: A survey of unjustified typography. Information Design Journal, 8(2):125–152, 1996. Guter Überblick über die typographischen Probleme, die zu lösen sind, wenn man hochwertige Druckvorlagen im Flattersatz (d.h. ohne Randausgleich) setzen will.
1029
LITERATURVERZEICHNIS
[156] Anders Svensson. Typesetting diagrams with kuvio.tex, 1996. Handbuch zum kuvio-System, das dem Setzen von Diagrammen dient; es verwendet PostScript-Code in \special-Befehlen. Auf CTAN unter: macros/generic/diagrams/kuvio
[157] Ellen Swanson. Mathematics into Type. American Mathematical Society, Providence, Rhode Island, zweite Auflage, 1999. ISBN 0-82181961-5. Überarbeitet von Arlene O’Sean und Antoinette Schleyer. Ursprünglich als Handbuch zum Standardisieren der Korrekturprozesse (Copy-Editing) geschrieben, richtet sich die zweite Auflage auch an Verleger und Autoren als Anleitung, mathematisches Material für den Druck aufzubereiten.
[158] The TUGboat Team. TE X Live CD 5 and the TE X Catalogue. TUGboat, 21(1):16–90, März 2000. ISSN 0896-3207. TEX Live CD ist ein direkt lauffähiges TEX-System für die beliebtesten Betriebssysteme. Es arbeitet mit allen wichtigen TEX-Zusatzprogrammen zusammen, enthält eine vollständige Sammlung von Fonts, Makros und anderen Elementen und unterstützt zahlreiche Sprachen. In diesem Artikel wird die Distribution TEX Live CD 5 beschrieben, mit Querverweisen zu Graham Williams TEX-Katalog.
http://www.tug.org/TUGboat/Articles/tb21-1/tb66cd.pdf Aktuelle Version: http://www.tug.org/texlive
´ Thành und Sebastian Rahtz. The pdfTE X user manual. TUG[159] Hàn Thê boat, 18(4):249–254, Dezember 1997. ISSN 0896-3207. Benutzerhandbuch für das pdfTEX-System, das TEX so erweitert, dass es PDF-Dateien direkt erzeugen kann.
http://www.tug.org/TUGboat/Articles/tb18-4/tb57than.pdf
´ Thành. Improving TE X’s typeset layout. TUGboat, 19(3):284– [160] Hàn Thê 288, September 1998. ISSN 0896-3207. Dieser Ansatz, das Layout mit TEX gesetzter Dokumente zu verbessern, konzentriert sich auf den Ausgleich der Wortzwischenräume nach erfolgtem Zeilenumbruch der Absätze. Anstatt nur die Wortzwischenräume für den Randausgleich anzupassen, wird auch die Laufweite der Schrift in der jeweiligen Zeile minimal erweitert, um ein übermäßiges Dehnen der Zwischenräume zu vermeiden. Diese Laufweitenveränderung wird mithilfe von horizontaler Skalierung in PDF realisiert. Bei sehr zurückhaltend vergrößerten Laufweiten und geeigneten Einstellungen für die Zeilenumbruch- und Abstandsparameter in TEX kann diese Methode das Erscheinungsbild mit TEX gesetzter Dokumente verbessern. http://www.tug.org/TUGboat/Articles/tb19-3/tb60than.pdf
´ Thành. Micro-typographic extensions to the TE X typesetting [161] Hàn Thê system. TUGboat, 21(4):317–434, Dezember 2000. ISSN 0896-3207. Doktorarbeit an der Fakultät für Informatik, Masaryk University, Brno, Tschechien, Oktober 2000. http://www.tug.org/TUGboat/Articles/tb21-4/tb69thanh.pdf
´ Thành. Margin kerning and font expansion with pdfTE X. [162] Hàn Thê TUGboat, 22(3):146–148, September 2001. ISSN 0896-3207. Unter „Rand-Unterschneidung“ (Margin Kerning) ist zu verstehen, dass die ersten und letzten Glyphen einer Textzeile so positioniert werden, dass die Ränder „gerade aussehen“. Diese Funktion wurde auch auf das vorliegende Buch angewandt. Bei der „Fonterweiterung“ (Font Expansion) werden minimal schmalere oder breitere Varianten eines Fonts verwendet, um die Wortzwischenräume gleichmäßiger zu gestalten. Diese Verfahren werden hier anhand von Beispielen erläutert. In [161] werden die zugrunde liegenden Konzepte dazu ausführlich erklärt.
http://www.tug.org/TUGboat/Articles/tb22-3/tb72thanh.pdf
[163] Harold Thimbleby. ‘See also’ indexing with makeindex. TUGboat, 12(2):290–290, Juni 1991. ISSN 0896-3207. In diesem Artikel wird beschrieben, wie man mit MakeIndex „see also“-Einträge (siehe auch) erzeugt, die nach den Seitenzahlen für den jeweiligen Eintrag erscheinen (siehe auch [164]). http://www.tug.org/TUGboat/Articles/tb12-2/tb32thim.pdf
1030
Literaturverzeichnis
[164] Harold Thimbleby. Erratum: ‘See also’ indexing with makeindex, TUGboat 12, no. 2, p. 290. TUGboat, 13(1):95–95, April 1992. ISSN 0896-3207. Erratum zu [163].
http://www.tug.org/TUGboat/Articles/tb13-1/tb34thim.pdf
[165] TUG Working Group on a TEX Directory Structure. A directory structure for TE X files (Version 0.999). TUGboat, 16(4):401–413, Dezember 1995. In diesem Artikel wird die in TEX gemeinhin verwendete Standard-Verzeichnisstruktur (TEX Directory Structure, TDS) für installationsunabhängige TEX-Dateien beschrieben.
http://www.tug.org/TUGboat/Articles/tb16-4/tb49tds.pdf Aktuelle Version: http://www.tug.org/tds
[166] The Unicode Consortium. The Unicode Standard, Version 4.0. Addison-Wesley, Boston, MA, USA, August 2003. ISBN 0-321-18578-1. Referenzhandbuch zum Unicode-Standard, einem universellen Zeichenkodierungsschema, das ein einheitliches Verfahren zum Kodieren mehrsprachiger Texte definiert. Unicode ist die vorgegebene Kodierung für HTML und XML. Das Buch beschreibt ihre Funktionsprinzipien und enthält Abbildungen der Glyphen aller Zeichen, die zurzeit in Unicode definiert sind. Zur eingeschränkten Verwendung verfügbar unter: http://www.unicode.org/versions/Unicode4.0.0
[167] Gabriel Valiente Feruglio. Typesetting commutative diagrams. TUGboat, 15(4):466–484, Dezember 1994. ISSN 0896-3207. Überblick über die verfügbaren Lösungen zum Setzen kommutativer Diagramme.
http://www.tug.org/TUGboat/Articles/tb15-4/tb45vali.pdf
[168] Gabriel Valiente Feruglio. Modern Catalan typographical conventions. TUGboat, 16(3):329–338, September 1995. ISSN 0896-3207. Viele Sprachen, wie etwa Deutsch, Englisch und Französisch, verfügen über eine eigene typographische Tradition. Für die katalanische Sprache wurden jedoch trotz der Existenz einer solchen bewährten Tradition für wissenschaftliche Arbeiten bisher keine Standards formuliert, die auch die typographischen Konventionen in diesem Bereich abdecken. In dieser Abhandlung werden typographische Regeln vorgeschlagen, die den Geist der alten katalanischen wissenschaftlichen Werke widerspiegeln und dabei gleichzeitig modernen typographischen Konventionen folgen. Einige dieser Regeln wurden in den TEX- und LaTEX-Erweiterungen für die katalanische Sprache berücksichtigt. Mit diesem Vorschlag soll auch ein Beitrag zur Entwicklung von Standards für wissenschaftliche Arbeiten in katalanischer Sprache geleistet werden.
http://www.tug.org/TUGboat/Articles/tb16-3/tb48vali.pdf
[169] Michael Vulis. VTE X enhancements to the TE X language. TUGboat, 11(3):429–434, September 1990. ISSN 0896-3207. Beschreibung des kommerziellen VTEX-Systems, das ein skalierbares Fontformat unterstützt. http://www.tug.org/TUGboat/Articles/tb11-3/tb29vulis.pdf Neuere Informationen auf http://www.micropress-inc.com/enfeat.htm
[170] Hugh Williamson. Methods of Book Design. Yale University Press, New Haven, London, dritte Auflage, 1983. ISBN 0-300-03035-5. Klassiker, der zu einem grundlegenden Werkzeug für professionelle Buchgestalter geworden ist. Er behandelt Themen wie: Manuskriptaufbereitung, Auswahl und Anordnung der Schrift, Rolle des Gestalters bei der Illustration eines Buches und der Gestaltung des Schutzumschlags und wirtschaftliche Gesichtspunkte der Buchproduktion. Außerdem werden Materialien und Verfahren bei der Buchproduktion und ihre Auswirkungen auf die Buchgestaltung erläutert.
[171] Graham Williams. Graham Williams’ TE X Catalogue. TUGboat, 21(1):17–90, März 2000. ISSN 0896-3207. In diesem Katalog werden über 1500 TEX-, LaTEX- und verwandte Pakete und Werkzeuge aufgeführt, mit direkten Verknüpfungen zu den jeweiligen Elementen auf CTAN.
http://www.tug.org/TUGboat/Articles/tb21-1/tb66catal.pdf
Neueste Version auf CTAN unter: help/Catalogue/catalogue.html
1031
LITERATURVERZEICHNIS
[172] Peter Wilson. ledmac—A presumptuous attempt to port EDMAC and TABMAC to LaTEX, 2003. Bei EDMAC und TABMAC handelt es sich um eine Sammlung von Plain-TEX-Makros, mit deren Hilfe sich kritische Editionen auf traditionelle Weise setzen lassen. Das ledmacPaket stellt die Funktionen dieser Makros für LaTEX zur Verfügung, insbesondere die Zeilennummerierung sowie Fuß- und Endnotenapparate. Das Paket bietet außerdem die zusätzliche Möglichkeit, Indexeinträge sowohl mit Seitenzahlen als auch mit Zeilennummern zu verknüpfen. Mehrfache Folgen der vertrauten nummerierten Fußnoten sind ebenfalls verfügbar. Auf CTAN unter: macros/latex/contrib/ledmac/ledmac.pdf
[173] Reinhard Wonneberger und Frank Mittelbach. BIBTE X reconsidered. TUGboat, 12(1):111–124, März 1991. ISSN 0896-3207. Besprechung von BIBTEX mit verschiedenen Verbesserungsvorschlägen.
http://www.tug.org/TUGboat/Articles/tb12-1/tb31wonn.pdf
[174] Hermann Zapf. My collaboration with Don Knuth and my font design work. TUGboat, 22(1/2):26–30, März 2001. ISSN 0896-3207. Zapf erzählt die Geschichte seiner Zusammenarbeit mit Don Knuth und äußert einige Gedanken zur Typographie.
http://www.tug.org/TUGboat/Articles/tb22-1-2/tb70zapf.pdf
[175] Justin Ziegler. Technical Report on Math Font Encoding (Version 2). Technischer Bericht, LaTEX3 project, Juni 1994. Mit diesem Dokument wurde der Boden für eine Sammlung von 8-Bit-Formelkodierungen für TEX geebnet. Auf CTAN unter: info/ltx3pub/l3d007.*
1032
Befehls- und Begriffsindex In gewisser Weise verbirgt sich hinter diesem Titel die Tatsache, dass alles außer Personennamen in diesem einen langen Index enthalten ist. Damit er sich leichter handhaben lässt, werden alle Einträge nach „Typen“ unterschieden. Der jeweilige „Typ“ wird normalerweise durch eine der folgenden „Typbezeichnungen“ am Anfang eines Haupt- oder Untereintrages gekennzeichnet: Attribut (einer Sprache), BIBTEX-Befehl, BIBTEX-Feld, BIBTEX-Publikationstyp, BIBTEX-Stil, boolesche Var., Datei, Dateierweiterung, Dokumentenklasse, elastische Länge, Fehler, feste Länge, Folio-Stil, Font, Fontkodierung, Funktion (eines Programms), Größenfunktion (NFSS), interne BIBTEX-Funktion, Kolumnentitel-Layout, Meldung, Paket, Programm, Option (Klasse oder Paket), Schlüssel (in einer Schlüssel-Wert-Beziehung), Schlüssel/Option (Schlüssel, der auch als Option erlaubt ist), Schlüsselwert, Schlüsselwort (einer Programmiersprache), Syntax, Systemvariable (im Betriebssystem), Umgebung oder Zähler. Ist keine solche Bezeichnung vorhanden, so handelt es sich entweder um einen LaTEX-Befehl oder einfach um einen generellen „Begriff“. Paketnamen in Klammern verweisen auf die Verwendung in oder mit einem bestimmten Paket, wobei der „virtuelle“ Paketname lb2 bedeutet, dass ein Befehl in diesem Buch nur zur Veranschaulichung eingeführt wurde. Eine blaue kursive Seitenzahl weist auf ein Beispiel zum jeweiligen Befehl oder Begriff hin, eine fettgedruckte Zahl unter mehreren Seitenzahlen auf wichtige Informationen, wie etwa eine Definition oder grundlegende Hinweise zum Gebrauch. Haupt- und Untereinträge werden auf bis zu drei Ebenen durch Einzüge voneinander abgesetzt, danach und bei allein stehenden Einträgen gegebenenfalls mit Komma. Querverweise auf verschiedene Einträge sind durch Semikolon getrennt. Die Zeichen \ und . werden für die Sortierung ignoriert, wenn sie am Anfang eines Befehls beziehungsweise einer Dateierweiterung stehen. Alle Symbole erscheinen vor den Buchstaben und alle Einträge, die mit einem @-Zeichen beginnen, stehen unmittelbar vor dem Buchstaben A.
(Symbole)
Befehls- und Begriffsindex
Symbole
\*
! Syntax, 288, 544
(doc), 854 (tipa), 417 *#buchst.$ Syntax (yfonts), 406 + Syntax, 546 (calc), 138, 156–158, 206, 209, 235, 258, 883, 894, 899, 904 (docstrip), 852 \+, Fehler bei, 953 , Syntax, 552 (BIBTEX), 790, 798 (lb2), 283 \,, 121, 134, 521, 522, 541, 715 in Formeln, 484–486, 498, 499, 505, 509 - (Bindestrich) geschützter, 89, 90, 100 Trennung nach, 719 - Syntax, 89, 546 (calc), 258, 900, 902, 903, 904, 905, 906 (docstrip), 852 (hhline), 274, 275 \-, 249, 255, 257, 570, 986 Fehler bei, 953 (soul), 95 (ulem), 93 -- Syntax, 89 --- Syntax, 89, 356 . Syntax, 511, 544 (babel), Kurzzeichen, 574 (lb2), 283 \., 469, 583 . . . (Auslassungspunkte) Abstände, 87–89 mathematisches Symbol, 508, 509 .pybrc.conf Datei (pybliographic), 814 / Syntax, 511, 544 (calc), 258, 904, 906 (docstrip), 852 \/, 351, 352, 353 Ligatur aufbrechen, 191, 728 (soul), 95 : Syntax, 551 (arydshln), 275, 276 (babel), Kurzzeichen, 571 (hhline), 274, 275 \:, 521, 522, 541 (tipa), 417 :: Syntax (arydshln), 276 (hhline), 275 (yfonts), 406 ; Syntax, 552 (arydshln), 276 (babel), Kurzzeichen, 571, 607 \;, 521, 522, 541 (tipa), 417 < Syntax, 548 (array), 252, 254, 256 (babel), Kurzzeichen, 574, 591 (ifthen), 906, 908, 909
(array), 252, 254, 255 (babel), Kurzzeichen, 571 (docstrip), 852 (makeindex), 671, 673, 679, 680, 681 \!, 522 (tipa), 417 " Syntax, 356, 357 (BIBTEX), 790, 798 (babel), Kurzzeichen, 568, 569, 570, 591, 678, 684 (makeindex), 673, 680 \", 466, 468, 684 (yfonts), 405, 407 "" Syntax (babel), 570 "’ Syntax (babel), 155, 569 "- Syntax (babel), 570 "< Syntax (babel), 570 "= Syntax (babel), 570, 573 "> Syntax (babel), 570 "#buchst.$ Syntax (babel), 564, 568, 569, 583, 607 (yfonts), 406 "#8-bit-zeichen$ Syntax (babel), 583 "~ Syntax (babel), 570 "‘ Syntax (babel), 155, 569 "| Syntax (babel), 570 ’ Syntax, 356, 357 (BIBTEX), 798 (babel), Kurzzeichen, 572, 579, 591 \’, 249, 250, 468, 583 in tabbing, 249, 250 (inputenc), 457 (tipa), 417 ’#buchst.$ Syntax (babel), 572 ( Syntax, 511, 553 (BIBTEX), 798 (calc), 904 (delarray), 502 (makeindex), 680 \(, 515 Fehler bei, 930 (ifthen), 910 (soul), 95 ) Syntax, 511, 553 (BIBTEX), 798 (calc), 904 (delarray), 502 (makeindex), 680 \), 515 Fehler bei, 930 (ifthen), 910 (soul), 95 * (Stern) Fehlermeldungen, 929 * Syntax, 251, 546 (array), 258 (calc), 206, 258, 904, 905, 906, 909 (docstrip), 852 (hhline), 274, 275
1034
Befehls- und Begriffsindex
(Symbole)
\<
\\, 111, 250, 272, 501, 893
Fehler bei, 929, 953 (soul), 96, 97 Syntax, 548 (array), 252, 253–258, 272 (babel), Kurzzeichen, 574, 591 (colortbl), 273 (ifthen), 908, 909 (tabularx), 259, 260 \>, 249, 250 Fehler bei, 953 (soul), 96, 97 >> Syntax (babel), 574, 606 ? Fontkodierung, 465 ? Syntax, 544 (babel), Kurzzeichen, 571 (QED)-Zeichen, 151, 152 [ Syntax, 511, 553 \[, 481, 493, 515, 927 falscher Abstand oberhalb, 492, 493 Fehler bei, 930 (amsmath), 482 # Syntax, 157 in TEX-Fehlermeldungen, 943, 946, 954 (BIBTEX), 798, 799, 800 (bibtool), 810 (hhline), 274, 275 \#, 514, 541, 544, 545 ## Syntax, 157, 866 % Syntax (BIBTEX), 798 \%, 544 % Syntax (docstrip), 851, 852 % (Größerzeichen), Kurzzeichen, 574 ? (Fragezeichen), Kurzzeichen, 571 ^ (Zirkumflex), Kurzzeichen, 573 ` (Gravis-Akzent), Kurzzeichen, 571, 572 ~ (Tilde) geschütztes Leerzeichen, 568 in verschiedenen Sprachen, 570, 571 Abstände nach Satzzeichen, 580 aktuelle Sprache einstellen/abfragen, 560, 561, 562, 563 Anführungszeichen einfügen, 569, 570 bestimmte Artikel, Ungarisch, 579 Bibliographien, Sprachunterstützung, 759, 760, 761, 842–844 BIBTEX, 589 Buchstaben mit Akzent, 568 Datum formatieren, 574–576 Einzug nach einer Überschrift, 581 eTEX, TEX-Erweiterung, 556, 582 Fontkodierung griechisches Alphabet, 590, 591, 593 hebräisches Alphabet, 591–593, 594, 595 kyrillisches Alphabet, 585–589 Optionen (Sprachauswahl), 582–585 französische Namen, 579 Fußnoten, 582 Hcaption Font, 593 Hclassic Font, 593 Index, 688, 691–693
Befehls- und Begriffsindex
fremdsprachige Dokumente (Forts.) Interpunktion, Sonderfälle, 607 Konzepte/Übersicht, 555–557 kulturspezifische typographische Regeln, 558 Kurzformen, 563, 564, 565 Listen, 581, 582 MakeIndex, 589 mathematische Operatoren, 580 nicht lateinische Alphabete Äthiopisch, 608 Arabisch, 608 Armenisch, 608 Chinesisch, 608 Griechisch, 590, 591, 592, 593 Hebräisch, 591–593, 594, 595, 608 Indisch, 608 Japanisch, 608 Koreanisch, 608 Kyrillisch, 585–587, 588, 589, 590 Mandschu (Mongolisch), 608 Nummerierung, 576–579, 580 Omega, TEX-Erweiterung, 556, 586, 608, 609, 655 OT1-Erweiterungen, 583 Polnisch, 583 Quellenverweise, Ungarisch, 580 Schreibrichtung, 582, 594 Shalom-Fonts, 593 Silbentrennung dynamisch festlegen, 558 in mehreren Sprachen, 562, 596–598 Italienisch, 579 kulturelle Gesichtspunkte, 558 Niederländisch, 568 Sonderregelungen, 569, 570 sprachliche Gesichtspunkte, 557 Trennmuster anpassen, 602, 603 Trennmuster anwenden, 562 verhindern, 562 Sonderzeichen, 569 Sprachattribute, 565, 566 Sprache und Formatierung, 557, 558 sprachspezifische Zeichenfolgen, 558, 561, 565, 566, 567, 603 T1-Erweiterungen, 583 Übersichtstabelle, 558, 559 Zeichensätze, 557 french Option (babel), 19, 106–108, 559, 562, 565, 569, 571, 576, 579, 581, 582 french Paket, 608, 1019 frenchb Option (babel), 559 frenchb.cfg Datei (babel), 605, 606 frenchb.ldf Datei (babel), 564, 565, 607 \FrenchFootnotes (babel), 582 \FrenchLayout (babel), 581 \frenchspacing, 581 Frequently Asked Questions (FAQ), 995 \from (docstrip), 859, 860, 863, 864, 866 \frontmatter, 24, 224 \frown, 551 \Frowny (marvosym), 413 ftnright Paket, 121, 185
(F–G)
FTP-Server Download-Befehle, 1000–1002 Liste der, 996 Fußnoten, siehe auch Endnoten; Marginalien Absatzformat, 124, 125 Abstand vom Text, 119 anpassen, 119–121 Fehlersuche, 990, 991 fremdsprachige Dokumente, 582 Haupttext vs. minipage-Umgebung, 117, 118, 119–121 hochgestellte Markierungen, 120, 121 im Rand, 125, 126 in mehrseitigen Tabellen, 270 in Tabellen, 270, 285, 286, 287 Layoutparameter, 120 Linien, 119, 126, 127 mehrere an derselben Stelle, 127 Nummerierung, 119, 122, 123, 129, 130–132 schematische Darstellung, 120 Schriftgrad, 119 Seitenlayout, 215 Spalten, 121, 192, 198 Standard, 117, 118, 119–121 Stile, 121, 122, 123–127 Textsymbole für, 123, 124 unabhängige, 129, 130–132 vertikale Abstände, 119 wortwörtliche Ausgabe in, 176 Zähler, je Seite zurücksetzen, 127, 128 zweispaltige Umgebung, 121, 122 Fußnotenverweise, Bibliographien, 752, 753 Fußsteg (unterer Rand), 201, 202, 212, 216, 219 Fußzeilen, siehe Kolumnentitel Fußzeilenhöhe, 209 full Option (textcomp), 374, 375, 396, 399, 402 (trace), 993 \fullcite (jurabib), 749, 755, 757 fulloldstyle Option (fourier), 404
\fullref (lb2), 72 (varioref), 79 FUNCTION BIBTEX-Befehl, 836, 838, 840–844 Funktionsnamen, siehe Operatoren; Operatornamen \fussy, 110 fvrb-ex Paket, 172 \fvset (fancyvrb), 173, 177, 178
G galician Option (babel), 559, 572 \Game (amssymb), 544 \Gamma, 509, 543 \gamma, 543 gather Option (chapterbib), 773, 774, 775 gather Umgebung (amsmath), 481, 485, 487, 496, 500, 512 Fehler bei, 930 gather* Umgebung (amsmath), 481, 485, 487, 499, 505, 514
1067
(G)
Befehls- und Begriffsindex
gathered Umgebung (amsmath), 481, 489, 490 Fehler bei, 930, 933 \GBP (lb2), 104 \gcd, 513 \ge, 514, 548 gedrehtes Material verbergen, 634 gekapselte Seitenzahlen, Index, 672, 695 Geldsymbole, siehe Währungen, formatieren gemeine Ziffern, siehe Mediävalziffern gen Option (eurosym), 420 gen Größenfunktion, 436 genb Größenfunktion, 436 gender BIBTEX-Feld (jurabib), 714, 760, 768 geneigte Fonts, 344, 351 \generalname elastische Länge (doc), 856 \generate (docstrip), 859, 860, 863, 864 \geneuro (eurosym), 420 \geneuronarrow (eurosym), 420 \geneurowide (eurosym), 420 \genfrac (amsmath), 506 gennarrow Option (eurosym), 420 genwide Option (eurosym), 420 \geometry (geometry), 219, 220 geometry Option (ifsym), 416 geometry Paket, xxix, 209, 214–220 in diesem Buch, 1137 mit calc kombiniert, 218 gepunktete Linien, 620, 889 \geq, 514, 548 (eulervm), 410 \geqq (amssymb), 548 \geqslant (amssymb), 548 Gerätetreiber, 632, 633 geräteunabhängige Dateien, 8 german Option (babel), 20, 559, 569, 570, 678, 684, 694 (biblist), 804 (varioref), 20 german.ldf Datei (babel), 565, 601 germanb Option (babel), 559 \germanhyphenmins (babel), 603 geschützte Bindestriche (-), 89, 90, 100 Geschlechtsangabe, Bibliographien, 760, 761, 768 geschweifte Klammern weglassen, 876 gestrichelte Linien arydshin-Paket, 275, 276 \dashline-Befehl, 621 \gets, 550 Geviert, 41 \gg, 548 \ggg (amssymb), 548 \gggtr (amssymb), 548 gglo.ist Datei (doc), 859 ghostscript Programm, 381, 653, 661, 1018 ghostview Programm, 222, 646, 653 .gif Dateierweiterung, 9, 663, 931 \gimel (amssymb), 544 gind.ist Datei (doc), 859 Gleichheits- und Relationszeichen – negierte, mathematische Symbole, 548
1068
Gleichheits- und Relationszeichen, mathematische Symbole, 548 Gleichheitszeichen (=), Kurzzeichen, 573 Gleichungen, siehe Formeln Gleitobjekte Abbildungen, 325–331 angepasste Layouts, 300, 301, 302–304, 305 Bilder im Text, 311, 312–315 Definition, 291, 292 drehen, 305, 306, 307 falsche Verweise, 70, 71 Gleitobjektseite, Kolumnentitel-Layout, 239 höchste zulässige Anzahl festlegen, 292, 293 halbleere Seiten/Spalten, 294 in Fließtext eingebettete, 307–315 Layoutparameter, 292–294 Legenden über mehrere Gleitobjekte, 324 Absatzdurchschuss, 320, 321 Abstände, 321, 326 anpassen, 314, 317–324 auf separater Seite, 335, 336 für bestimmte Gleitobjektarten, 314, 321, 322 Fonts, 318, 319 Form, 317, 318 gruppenweise nummeriert, 331, 332 Labels, 319, 320, 322–324 mehrere Gleitobjekte, 324 mehrseitige Tabellen, 265, 270 Platzierung, 333, 334, 335, 336 Randausgleich in, 320, 321 seitliche, 315, 333, 334, 335 Standard-LaTEX, 315, 316, 317 untergeordnete, 325–329, 330, 331 Linien, 293, 294 Markierungen im Text für, 299, 300 mehrseitige Tabellen, 270–272, 298 nicht gleitende Tabellen und Abbildungen, 304, 305 nicht positionierte ausgeben, 297, 298 Parameter, 292–295 Positionierung, 294–300 am Ende eines Dokumentes, 297, 298–300 an Begrenzungen gebunden, 297 an einem bestimmten Punkt, 295, 304, 305 gebündelt am Ende eines Kapitels, 294 nach ihrem Textverweis, 295 von Legenden, 333, 334–336 zurückgleiten, 295 Seitenanteil einstellen, 292, 293 Spalten, 198 Tabellen, 325–331 Text um eine Abbildung fließen lassen, 115, 116 Trennelemente, 293, 294 unterteilte Abbildungen, 325, 326–328, 329, 330, 331 unterteilte Tabellen, 325, 326, 327, 328, 329–331 vertikale Abstände, 293 von Text umflossen, 307, 308, 309, 310, 311
Befehls- und Begriffsindex
Gleitobjekte (Forts.) vorgezogene Ausgabe, 299 wortwörtliche Ausgabe als, 183 Gleitobjektklassen benennen, 301, 302 Legenden auflisten, 302 Gleitobjektseiten, Kolumnentitel-Layout, 239 Glenn Option (fncychap), 36 Gliederungsbefehle, 24–26 neu definieren, 31, 32, 33 Standardverhalten, 34 Gliederungsebenen Inhaltsverzeichnisse, 54 Überschriften, 26, 30 .glo Dateierweiterung, 673 (doc), 869 \global, 274 global.max$ interne BIBTEX-Funktion, 844 globalcitecopy Option (bibunits), 777 globale Optionen, 19, 914–916, 919 globale Variablen, Bibliographien, 836 Glossareinträge, MakeIndex-Verarbeitung, 673 \glossary, 673 (doc), 849 \glossaryentry, 673 \GlossaryMin feste Länge (doc), 856 \glossaryname (babel), 561 \GlossaryParms (doc), 856 \GlossaryPrologue (doc), 856 \glue, 981, 982, 983 Glyphen, 340, siehe auch Sonderzeichen; Textsymbole \gnapprox (amssymb), 548 .gnd Dateierweiterung, 9 \gneq (amssymb), 548 \gneqq (amssymb), 548 \gnsim (amssymb), 548 gobble Schlüssel (fancyvrb), 165, 173 (listings), 181, 184 \gothfamily (yfonts), 405, 406 Gothic Font, 405–407 gpic Programm, 626 Größen einstellen Fonts, 353, 354 Mathematiksatz, 514, 515, 516 Größerzeichen (>), Kurzzeichen, 574 Gründerdaten, Bibliographien, 768 Graphen Balkendiagramme, 631 beschriftete Achsen, 624, 625 erstellen, 622–624 externe Daten laden, 623, 624 Kurven- und Linienarten kombinieren, 623 graphics Paket, 305, 631–636, 638, 642–649, 1001, 1018 Fehler bei, 923, 931, 933, 945, 948, 949 von lscape geladen, 220 graphics.cfg Datei (graphics), 632, 633
\graphicspath (graphics), 642, 960 (graphicx), 642, 960
(G)
graphicx Paket, 631–634, 636–642, 649–651 Fehler bei, 923, 931, 933, 945, 948, 949 Graphiken, geräteabhängige Unterstützung Bilddateien einbinden Bildgröße, 638, 644 Dateiarten, 643 Dateierweiterungen, angeben, 643 Dateierweiterungen, Suchreihenfolge, 642, 643 Dateinamen parsen, 638 drehen, 638 \includegraphics (graphics), 634–636 \includegraphics (graphicx), 636–638, 639–641 Kapselung, 645, 646 skalieren, 638 Speicherort, 642 Standardschlüsselwerte, 641, 642 vollständige Dateinamen erzwingen, 643 Bounding Box-Kommentare, 633, 634 Entwurfsmodus, 633 Finalmodus, 633 gedrehtes Material verbergen, 634 Gerätetreiber, 632, 633 skaliertes Material verbergen, 634 graphische Objekte, siehe auch die einzelnen Graphikarten drehen, 648–652 skalieren, 646–648 graphisches Frontend, Bibliographien, 813–817 graphpap Paket, 658 \graphpaper (graphpap), 658–660 \grave, 545 Gravis-Akzent (`), Kurzzeichen, 571, 572 greek Option (babel), 559, 566, 575, 578, 579, 584, 585, 591 greek.ldf Datei (babel), 602 \greekencoding (babel), 584 \Greeknumeral (babel), 578 \greeknumeral (babel), 578 \greektext (babel), 584 grey Option (changebar), 200 \grid (epic), 624, 625 Griechisch, 543, 570, 575, 577, 590, 591, 592, 593 grmath Paket, 580 Groß-/Kleinschreibung, Unterscheidung von in Bibliographien, 790 in Indexen, 670 Großbuchstaben Initiale, 106–108, 406, 407 Kapitälchen Beschreibung, 344, 345 französische Namen, 579 in Überschriften, 352 Überschriften, 28 group_skip Schlüsselwort (makeindex), 682 grouping levels Fehler, 958, 959 \Grtoday (babel), 575 Grundschrift, 206, 349, 350, 357 in diesem Buch, 1135 serifenlose Schrift wählen, 385
1069
(G–H)
\gtrapprox (amssymb), 548 \gtrdot (amssymb), 546 \gtreqless (amssymb), 548 \gtreqqless (amssymb), 548 \gtrless (amssymb), 548 \gtrsim (amssymb), 548 Guillemets, 569, 574
\guillemotleft, 471 \guillemotright, 471 \guilsinglleft, 471 \guilsinglright, 471 gunzip Programm, 644
\gvertneqq (amssymb), 548
H
Befehls- und Begriffsindex
\headingdiagram (layouts), 210 headings Kolumnentitel-Layout, 230, 231, 243, 244, 616
headings_flag Schlüsselwort (makeindex), 682, 684 \headrule (fancyhdr), 233, 235 \headrulewidth (fancyhdr), 232, 233, 234, 236, 238, 239
heads Option (endfloat), 299 \headsep feste Länge, 203, 205, 206, 208, 905, 981 headsep Schlüssel/Option (geometry), 218 \headtoname (babel), 561 \headwidth feste Länge (fancyhdr), 235, 241 \heartsuit, 544 heavycircles Option, 547 (stmaryrd), 547
\heavyrulewidth feste Länge (booktabs), 278
H Syntax (fancyhdr), 234, 235 (float), 302, 303, 304 \H, 469 Hände, Textsymbole, 411 Höhe, siehe Längenparameter Höhe einer Box, 650 hang Schlüssel (titlesec), 40, 41, 42, 44 hang Schlüsselwert (caption), 318 (subfig), 326, 328 \hangindent, 702, 703 hartnäckige Fehler, 927 harvard BIBTEX-Stil (harvard), 842 harvard Paket, 72, 724, 725, 729, 821, 832 Harvard Zitierschema, 708, 713, siehe auch Autor-Jahr-Zitierschema \harvarditem (harvard), 725 hash size Fehler, 959 \hat, 507, 527, 545 (eulervm), 410 Hauptteil (Paketdateien), 916 \hbadness, 967, 973, 974
\hbar (amssymb), 544 (eulervm), 409 (euler), 409 \hbox, 875, 893, 903, 982 in TEX-Warnungen, 967, 969, 972, 973 Probleme mit, 903 Hcaption Font, 593 Hclassic Font, 593 \hdashline (arydshln), 275, 276 \hdots (amsmath), 552 \hdotsfor (amsmath), 499 \headcmd, 34 (lb2), 34 \headcmd*, 34 headexclude Option (typearea), 213 \headheight feste Länge, 203, 205, 206, 905 (fancyhdr), 233 headheight Schlüssel/Option (geometry), 214, 218 headinclude Option (typearea), 213, 215 heading_prefix Schlüsselwort (makeindex), 682, 684 heading_suffix Schlüsselwort (makeindex), 682, 684 \headingdesign (layouts), 210
1070
hebcal Paket, 575
\hebdate (babel), 575 \hebday (babel), 575 hebfont Paket, 594 Hebräisch, 591–593, 594, 595, 608 \hebrew (babel), 575 hebrew Option (babel), 559, 585 \hebrewencoding (babel), 583, 584 \Hebrewtoday (hebcal), 575 \height, 894, 895, 899 (graphics), 648 height Option (crop), 221 height Schlüssel (graphicx), 116, 637, 639, 640, 641 Fehler bei, 933 height Schlüssel/Option (geometry), 216, 219 height Syntax, 235, 900, 901 heightrounded Schlüssel/Option (geometry), 216 \help (nfssfont.tex), 381 helvet Paket, 14, 382, 385, 436 helvetica Schlüsselwert (fancyvrb), 163, 164 Helvetica Font, 382, 386, 538 in Formeln und Text, 538 Herausgeberdaten, Bibliographien, 768 here Paket, 303 Hervorheben von Text, 352, siehe auch kursive Schriftform; unterstreichen hetarom Paket, 631 \hfil, 156, 232, 883 \hfill, 158, 889, 894, 896 \hfuzz feste Länge, 985 hfuzz Schlüssel (fancyvrb), 165 \hhline (hhline), 274, 275 hhline Paket, 274, 275 hiderotate Option (graphics), 634 (graphicx), 634 hidescale Option (graphics), 634 (graphicx), 634 Hilfsdateien, 8 Hilfsquellen CTAN CD/DVD, 997 FTP-Befehle, 1000–1002 FTP-Server, Liste der, 996
Befehls- und Begriffsindex
Hilfsquellen (Forts.) Inhalt, 996 Internetzugang, 998 DANTE FAQ, 995 FAQs, 995 FTP-Server Download-Befehle, 1000–1002 Liste der, 996 Newsgroups, 996 Pakete Beschreibungen, Online-Katalog, 998 Dokumentation suchen, 1002–1004 Programmdateien, Quellen CD/DVD, 996, 997 FTP, 996, 1000–1002 Internetzugriff, 998 texdoc-Programm, 1002 texdoctk-Programm, 1003, 1004 TUG Homepage, 996 UK-TUG FAQ, 995 Usergroups, 1004–1006 Hintergrund einfärben, 165, 166 Hinweise, siehe Fehlersuche hiresbb Option (graphics), 633 (graphicx), 633 hiresbb Schlüssel (graphicx), 637 \hl (soul), 95, 99 \hline, 251, 274, 275, 276, 280–282, 284, 290 Ausrichtungsprobleme bei Verwendung, 288 farbig, 273 Fehler bei, 942 (array), 252–255, 257, 258, 289 (booktabs), 278 (hhline), 274 (supertabular), 265 (tabls), 277 hmargin Schlüssel/Option (geometry), 219 hmarginratio Schlüssel/Option (geometry), 216, 217, 219 \Hmjd (lb2), 521 hmode boolesche Var., 908 Hochstellungen über Relationssymbolen (Mathematiksatz), 507 Fußnotenmarkierungen, 120, 121 Kurztitel-Zitierschema, 761, 769 numerisches Zitierschema, 720, 721, 722 Positionieren von Grenzen, 503, 504 \hodiau (babel), 575 \hodiaun (babel), 575 \hoffset feste Länge, 204, 211, 218 hoffset Schlüssel/Option (geometry), 218 \hom, 513 \hookleftarrow, 550, 551 \hookrightarrow, 550 horizontal erweiterbare, mathematische Symbole, 509, 510, 512 howcited Schlüssel/Option (jurabib), 747, 748, 768 howcited BIBTEX-Feld (jurabib), 748, 768 \howcitedprefix (jurabib), 748 \howcitedsuffix (jurabib), 748
(H–I)
howpublished BIBTEX-Feld, 714, 791, 792 \hphantom, 518 \HR (lb2), 618, 634, 896–898 \HRule (lb2), 890 \hrule, 119, 235, 900, 901 in Überschriften, 33 (hhline), 275 \hrulefill, 250, 889 hscale Schlüssel/Option (geometry), 216, 219 \hsize feste Länge (tabularx), 260
\hslash (amssymb), 544 (eulervm), 409 (euler), 409 \hspace, 139, 156, 159, 522, 527, 719, 889, 890, 894 Fehler bei, 940 Silbentrennung ermöglichen, 89, 134, 254, 255, 257, 258 \hspace*, 881, 882, 889 \Hsub (lb2), 33 HTML-Dateien, von Bibliographien, 806, 819 \Huge, 353, 354 \huge, 154, 353, 354 humanbio BIBTEX-Stil, 821 humannat BIBTEX-Stil, 821 hungarian Option (babel), 559, 572 Hurenkind, 984 \Hut (ifsym), 416 hvams Paket, 539 hvmath Paket, 539 Hyperlinks in Querverweisen, 82 hyperref Paket, 82, 83, 184, 662, 725, 731 nicht kompatibel zu notoccite, 722 hyphen.tex Datei (babel), 598 hyphenate Option (truncate), 241 \hyphenation, 101, 986, 987 Fehler bei, 939, 945, 958 \hyphenchar, 439 \hyphenpenalty, 988 hyphenrules Umgebung (babel), 562 hyphens Option (url), 101
I I Syntax (paralist), 140 \i, 471 (tipa), 417
i Syntax (paralist), 140, 142, 145 ibidem Schlüssel/Option (jurabib), 752, 753, 754–756, 760
ibidem Schlüsselwert (jurabib), 761, 765, 766, 827 ibidem-Verweise, 753, 754–757, 765, 766 ibidemalt Schlüsselwert (jurabib), 766 \ibidemmidname (jurabib), 760 \ibidemname (jurabib), 760 icelandic Option (babel), 559, 579, 583 idem Schlüssel/Option (jurabib), 756, 757, 761 \idemPfname (jurabib), 760 \idempfname (jurabib), 760 \idemPmname (jurabib), 760 \idempmname (jurabib), 760 \idemPnname (jurabib), 760
1071
(I)
Befehls- und Begriffsindex
\idempnname (jurabib), 760 \idemSfname (jurabib), 760, 761 \idemsfname (jurabib), 760, 761 \idemSmname (jurabib), 760 \idemsmname (jurabib), 760 \idemSnname (jurabib), 760 \idemsnname (jurabib), 760 identifierstyle Schlüssel (listings), 179 Identifikationsteil (Paketdateien), 910–913 \idotsint (amsmath), 504, 505 .idx Dateierweiterung, 8, 9, 668, 670, 675, 907 Fehler beim Lesen, 679, 681 (doc), 869 (index), 704, 705 (xindy), 695 \idxitem (lb2), 240 \ie (lb2), 87 \IeC (inputenc), 457 ieeetr BIBTEX-Stil, 821 \IF (algorithmic), 177 if$ interne BIBTEX-Funktion, 839, 840–843 \ifbottomfloat (fancyhdr), 239 \ifcase, 934 \ifdim, 943 \iffalse, 847 \IfFileExists, 911, 917 \iffloatpage (fancyhdr), 239 \iffootnote (fancyhdr), 239 \iflanguage (babel), 562, 563 \ifmmode, 458 \ifnum, 943 ifsym Paket, 414–416 ifsym.ps Datei (ifsym), 415 ifthen Paket, 905–910 \ifthenelse (ifthen), 76, 77, 158, 165, 207, 240, 316, 703, 716, 906, 907–910, 920, 927, 934 Fehler bei, 943 Zahlen vergleichen, 885, 906 \iftopfloat (fancyhdr), 239 \ifToplevel (docstrip), 860, 861 \ifx, 860 ignorehead Schlüssel/Option (geometry), 218 ignoremp Schlüssel/Option (geometry), 219 \ignorespaces, 155 ignorierte Felder, Bibliographiedatenbank, 792 \iiiint (amsmath), 504, 505 \iiint (amsmath), 504, 505 \iint (amsmath), 504, 505 \ij, 607 .ilg Dateierweiterung, 8, 9 (makeindex), 668, 675, 679 \Im, 544 \imath, 544, 545 \in, 487, 514, 549 (euro), 105 in Schlüsselwert (jurabib), 743, 749 inbook BIBTEX-Publikationstyp, 791, 793, 801 (jurabib), 769 \include, 21, 22, 52, 868, 961, 963 Fehler bei, 939 Probleme mit TOC-Einträgen, 52
1072
\include (Forts.) Warnung bei, 968 (chapterbib), 773, 774 (excludeonly), 22 (index), 704 includeall Schlüssel/Option (geometry), 215, 219 includefoot Schlüssel/Option (geometry), 215
\includegraphics (graphics), 634, 635, 636, 642–644, 646 Fehler bei, 931 Graphik nicht gefunden, 935 (graphicx), 116, 221–223, 312, 632, 634, 636, 638, 639–641, 642–645 Fehler bei, 931, 933
\includegraphics* (graphics), 634, 635 (graphicx), 636 includehead Schlüssel/Option (geometry), 214, 215 includeheadfoot Schlüssel/Option (geometry), 215 includemp Schlüssel/Option (geometry), 214, 215, 218 \includeonly, 21, 22, 704 (excludeonly), 22 incollection BIBTEX-Publikationstyp, 791, 792, 793 (jurabib), 769 .ind Dateierweiterung, 8, 9, 668 (index), 705 (makeindex), 668, 675, 679, 691 Fehler beim Schreiben, 680 (xindy), 668, 695 \indent (picinpar), 115 indent_length Schlüsselwort (makeindex), 682 indent_space Schlüsselwort (makeindex), 682 indentafter Option (titlesec), 43 indentfirst Paket, 34, 581 indention Schlüssel/Option (caption), 318, 322 \Index (lb2), 674 \index, 350, 668, 669, 670, 671, 672, 673, 674, 675, 686–688, 907 verursacht zusätzlichen Leerraum, 892 (index), 704, 705 index Paket, 687, 704, 705, 725 \index* (index), 704 Indexbefehle (Dokumentation), Liste der, 853–857 Indexdateien, 8 indexed Schlüsselwert (jurabib), 746 \indexentry, 669, 673, 680, 907 (natbib), 734 Indexerstellung angehängte Leerzeichen, 670, 678, 688, 691 Anwenderbefehle definieren, 673, 674 Auflistung im Inhaltsverzeichnis, 703 ausführlicher Modus, 697 Ausgabe-Layoutparameter, 682 Ausgabedateien angeben, 678, 690, 697 automatische Indexierung deaktivieren, 849 Autorenverzeichnisse, 703 Befehle automatisch indexieren, 849, 869 Buchstaben, Sortierreihenfolge nach, 678, 690 Buchstabengruppen, 684, 699
Befehls- und Begriffsindex
Indexerstellung (Forts.) deutsche Wörter, Sortierreihenfolge, 678, 690, 692 Eingabe-Stilparameter, 680 Eingabedateien angeben, 678, 690 Einträge automatisch erzeugen, 849, 869 Einträge im Rand anzeigen, 703 führende Leerzeichen, 670, 678, 688, 691 Fehlermeldungen Liste von (MakeIndex), 679–681 unterdrücken, 678, 690, 697 Fehlersuche, 687, 688, 697 formatieren mit MakeIndex, 675–688 mit LaTEX, 702, 703, 705 mit xindy, 688–691, 702 Seitenzahlen, 672 französische Wörter, Sortierreihenfolge, 692 Glossareinträge verarbeiten, 673 Groß-/Kleinschreibung, Unterscheidung von, 670 in Inhaltsverzeichnissen aufführen, 51 indxcite, 703 Konsistenz, 688 kyrillisches Alphabet, 589 LaTEX-Befehle indexieren, 674, 691 Layoutparameter, 680, 682 Leerräume, 688, 691 Leerzeichen, 670, 678 komprimieren, 670, 678, 688, 691 Sortierreihenfolge, 687 Leitpunkte, 684 Makros automatisch indexieren, 849, 869 Mehrfachindexe, 704, 705 Meldungen unterdrücken, 678, 690, 697 nicht englische Wörter, 688, 691–693 Nummer der ersten Seite festlegen, 678, 683 Ortsangaben formatieren, 700 Protokolldatei angeben, 679, 690 Quellenverweise automatisch indexieren, 734, 746 Querverweise überprüfen, 688 erstellen, 671 römische Zahlen Seitenbereiche unterdrücken, 700 Sortierreihenfolge, 687 Referenzarten, 700 repeatindex, 703 Rohindex erzeugen, 669 Seitenbereiche deaktivieren, 678, 690, 694, 700 Längen begrenzen, 700 Seitenumbrüche, Eintrag wiederholen, 703 Seitenzahlen Duplikate, 670 formatieren, 672 kapseln, 672, 695 MakeIndex, 685–687 römische Zahlen, 687, 700 Sortierreihenfolge, 678, 686, 700–702
(I)
Indexerstellung (Forts.) xindy, 700–702 zusammengesetzte (kapitelweise Nummerierung), 686 showidx, 703 Sonderzeichen, 673, 674, 675, 683, 684 Sortierreihenfolge deutsche Wörter, 678, 690, 692 Fehlersuche, 687, 688 französische Wörter, 692 Leerzeichen, 687 nach Buchstaben, 678, 690 römische Zahlen, 687 Seitenzahlen, 678, 686, 700–702 Sonderfälle, 689 spanische Wörter, 692, 696 Symbole, 687, 689 xindy-Regeln, 696, 699 Spaltenumbrüche, Eintrag wiederholen, 703 spanische Wörter, Sortierreihenfolge, 692, 696 Standard-Ein-/Ausgabedateien, 678, 690 Stildateien angeben, 679 MakeIndex, 679, 681–687 xindy, 695–702 stiller Modus, 678, 690, 697 Symbole, Sortierreihenfolge, 687, 689 technischer Index, 688 tocbibind, 703 Trennzeichen für Indexebenen, 671 unabhängiger Index, 683 Untereinträge, 671 Verarbeitungsablauf, 668, 695 Vereinheitlichen von Indexeinträgen, 698 Vereinheitlichungsregeln, 695, 698 Verlaufsmeldungen unterdrücken, 678, 690, 697 \IndexInput (doc), 850, 851, 853 \IndexMin feste Länge (doc), 854 \indexname, 37, 702, 703 (babel), 561, 566 \IndexParms (doc), 855 \IndexPrologue (doc), 855 \indexproofstyle (index), 704 \Indextt (lb2), 674 Indisch, 608 indxcite Paket, 703 \inf, 504, 513 Info Math Font, in Formeln und Text, 539 infomath Paket, 539 informelle Meldungen, 961–977, siehe auch Fehlersuche infoshow Option (lb2), 914 (multicol), 197 (tracefnt), 380 \infty, 503, 504, 512, 514, 544 Inhaltsverzeichnisse, 48–69, siehe auch minitoc-Paket; titlesec-Paket Abbildungs- und Tabellenverzeichnisse hinzufügen, 51 Absatzformat, 65, 66, 67
1073
(I)
Befehls- und Begriffsindex
Inhaltsverzeichnisse (Forts.) Abstände, 51 Ausrichtung des Textes, 63, 64, 65 Beschreibung, 48 Bibliographien hinzufügen, 51 Breite der Nummerierung, 54 Daten eintragen, 49, 50, 51, 52 Einzug, 54, 62 für Teile oder Abschnitte, 61, 62 formatieren, 52, 53, 54, 55, 63–67 generieren, 49 Gliederungsebenen, 54 Index hinzufügen, 51, 703 kombinieren, 56, 57 kompakte, 58, 59 Leitpunkte, 63 mehrfache, 58, 59–62 nicht nummerierte, 63 optionale Code-Ausführung, 62, 63 partielle, 59, 60, 61, 62, 68, 69 ungewöhnliche Nummerierung, 55 \init (nfssfont.tex), 381 \initfamily (yfonts), 407 Initiale, 106–108, 406, 407 Initialisierungsteil (Paketdateien), 913 \initiate@active@char (babel), 605, 606 \injlim (amsmath), 513 inner Schlüssel/Option (geometry), 216 innerbars Option (changebar), 200 innerbody Option (sidecap), 333 innercaption Option (sidecap), 333 inparadesc Umgebung (paralist), 143, 144, 146 inparaenum Umgebung (paralist), 139 inparaitem Umgebung (paralist), 143 \inplus (stmaryrd), 549 inproceedings BIBTEX-Publikationstyp, 714, 791, 792 \input, 444, 868, 917, 961 Fehler bei, 935 (docstrip), 858, 861 (optional), 23 inputenc Paket, 7, 14, 184, 340, 369–372, 456–460, 587, 594 Einschränkungen bei Schlüsseln, 70 erforderlich für icelandic, 583 Fehler bei, 923, 940 in diesem Buch, 15, 1137 kombiniert mit listings, 184 \inputencoding (inputenc), 371, 372, 427, 587 inputencoding Schlüssel (listings), 184 \InputIfFileExists, 911, 914, 917 .ins Dateierweiterung, 858 (docstrip), 858 (doc), 846 \insert, 959 install-pkg.sh Programm, 1008 install-tl.sh Programm, 1008 Installationsunterstützung hinzufügen, 863–866 institution BIBTEX-Feld, 791, 792 \int, 552 Platzierung von Hoch-/Tiefstellungen, 503, 504 (relsize), Verwenden größerer Symbole, 91
1074
int.to.chr$ interne BIBTEX-Funktion, 839 int.to.str$ interne BIBTEX-Funktion, 839 INTEGERS BIBTEX-Befehl, 836, 838 Integrale, Mehrfach-, 504, 505
\intercal (amssymb), 546 \interleave (stmaryrd), 546 interlingua Option (babel), 559 \internallinenumbers (lineno), 186 \internallinenumbers* (lineno), 186 internationale Dokumente, siehe fremdsprachige Dokumente Internationale Standardbuchnummer (ISBN), 735 Internationale Standardseriennummer (ISSN), 735 Internationales Phonetisches Alphabet (IPA), 416, 417, 418 interne Dateien, 8 interne Tabellen, Überlauf, 958–961 Internet-Ressourcen Bibliographien, 802, 803 Index (xindy), 690 LaTEX, 995–1002 Interpunktion Bibliographien Kurztitel-Zitierschema, 763, 764 numerisches Zitierschema, 719, 721, 722 fremdsprachige Dokumente Abstände nach, 580 Sonderfälle, 607 Kurztitel-Quellenverweise, 763, 764 mathematische Symbole, 552 numerische Quellenverweise, 719, 721, 722 theoremähnliche Strukturen, 149 \intertext (amsmath), 491 \Interval (ifsym), 415 \intextsep elastische Länge, 293 (wrapfig), 309 intlimits Option (amsmath), 504 invert Option (crop), 222 \iota, 543 IPA Umgebung (tipa), 417 IPA (Internationales Phonetisches Alphabet), 416, 417, 418 irish Option (babel), 559 \IroningII (marvosym), 413 is-abbrv BIBTEX-Stil, 822 is-alpha BIBTEX-Stil, 808, 822 is-plain BIBTEX-Stil, 822 is-unsrt BIBTEX-Stil, 822 isbn BIBTEX-Feld, 714, 793, 801, 808, 809 (BibTexMng), 820 (custom-bib), 833 (natbib), 735 ISBN (Internationale Standardbuchnummer), 735 \iscurrentchapter (lb2), 76 \iso (euro), 105 iso88595 Option (inputenc), 587 \isodd (ifthen), 165, 909 issn BIBTEX-Feld, 714 (BibTexMng), 820 (custom-bib), 833 (natbib), 735
Befehls- und Begriffsindex
ISSN (Internationale Standardseriennummer), 735
.ist Dateierweiterung, 8, 9 (makeindex), 668, 681
\it, 358, 476 in Formeln, 361, 476
it Option (titlesec), 39, 40 it Schlüsselwert (caption), 319, 321, 322, 334 (subfig), 326, 328 italian Option (babel), 559, 560, 872 italic Schlüsselwert (jurabib), 743, 744, 745, 759, 763 Italic (Schriftform), 344 ItalicNums Option (parallel), 192 ITC Bookman Font, 385 \itdefault, 357 \item, 136–139, 152–154, 155–159, 175, 881, 891, 908 Fehler bei, 941, 949 in theindex, 702, 703 (fancybox), 618 (threeparttable), 286 item_0 Schlüsselwort (makeindex), 682 item_01 Schlüsselwort (makeindex), 682 item_1 Schlüsselwort (makeindex), 682 item_12 Schlüsselwort (makeindex), 682 item_2 Schlüsselwort (makeindex), 682 item_x1 Schlüsselwort (makeindex), 682 item_x2 Schlüsselwort (makeindex), 682 \itemindent feste Länge, 153, 155, 156, 159 itemize Umgebung, 85, 135, 136, 143, 376, 618 Fehler bei, 951 Stilparameter, 136 (babel), 581 (paralist), 143 \itemsep elastische Länge, 153, 732 ITERATE BIBTEX-Befehl, 837, 838 \itshape, 351, 352, 355, 357, 419, 476 in Formeln, 360, 361 (ulem), 93
J J Syntax (tabulary), 262 \j, 464, 471 Probleme in T1, 428 JabRef Programm, 819
\JackStar (bbding), 414 \JackStarBold (bbding), 414 Jahresdaten fehlen, Bibliographien, 733, 734 Japanisch, 608 jas99 BIBTEX-Stil (chicago), 724 Java Datenbankmanager, 817–819 \jbactualauthorfont (jurabib), 743, 762 \jbactualauthorfontifannotator (jurabib), 743 \jbannotatorfont (jurabib), 762 \jbannoteformat (jurabib), 766 \jbauthorfont (jurabib), 762 \jbauthorfontifannotator (jurabib), 762 \jbauthorindexfont (jurabib), 746 \jbbfsasep (jurabib), 762 \jbbibhang feste Länge (jurabib), 764, 765 \jbbstasep (jurabib), 762
(I–K)
\jbbtasep (jurabib), 761, 762 \jbcitationyearformat (jurabib), 759 JBibtexManager Programm, 817, 818
\jbignorevarioref (jurabib), 752 \jbindexbib (jurabib), 746 \jbindextype (jurabib), 746 \jbtitlefont (jurabib), 762 \jbuseidemhrule (jurabib), 765, 766, 827 \jbyearaftertitle (jurabib), 759 \jmath, 544, 545 (mathptmx), nicht verfügbar, 388
jmb BIBTEX-Stil
(apalike), 822 (jmb), 820, 821, 822 jmb Paket, 822 \jobname, 781 \Joch (ifsym), 416
\Join (amssymb), 551 (latexsym), 476 \joinrel, 551 \jot feste Länge (multirow), 281 journal BIBTEX-Feld, 791, 792, 799 jox BIBTEX-Stil (jurabib), 767, 822 .jpeg Dateierweiterung, 660, 661 .jpg Dateierweiterung, 9, 931 \jput (epic), 622, 623, 624 jtb BIBTEX-Stil, 822 jura.bib Datei (lb2), 742, 806 jurabib BIBTEX-Stil (bibtopic), 781 (jurabib), 742–766, 767, 794, 815, 822, 827 jurabib Paket, xxviii, 741–769, 771, 822 Installationsmöglichkeiten, 863 Kompatibilitätsmatrix, 772 jurabib.cfg Datei (jurabib), 767 für dieses Buch verwendet, 741 \jurabibsetup (jurabib), 741, 743–751, 753–761, 766, 767 jureco BIBTEX-Stil (jurabib), 767, 822 jurunsrt BIBTEX-Stil (jurabib), 765, 767, 822 justification Schlüssel/Option (caption), 310, 320, 321, 322, 333 (subfig), 326, 328 justified Schlüsselwert (caption), 320 justify Umgebung (ragged2e), 113 \justifying (ragged2e), 113 \JustifyingParfillskip elastische Länge (ragged2e), 113 \JustifyingParindent feste Länge (ragged2e), 113
K \k, 465, 471, 583 Kästen, siehe Boxen Kapitälchen Beschreibung, 344, 345 französische Namen, 579 in Überschriften, 352 kapitelweise Nummerierung, Index, 686 \kappa, 543 Kapselung, Bilddateien, 645, 646
1075
(K)
Befehls- und Begriffsindex
keepaspectratio Schlüssel (graphicx), 637, 640, 641 KeepShorthandsActive Option (babel), 598 \keepsilent (docstrip), 861 \Ker (lb2), 479 \ker, 513 \kern, 182 Kernel-Fehler, siehe Fehlersuche Kettenbrüche, mathematische Symbole, 503 key BIBTEX-Feld, 793, 794, 808, 809, 825 \Keyboard (marvosym), 413 keyval Paket, 214, 317, 641 keyword Schlüsselwort (makeindex), 673, 680 keyword BIBTEX-Feld (printbib), 805 keywords BIBTEX-Feld (BibTexMng), 820 keywordstyle Schlüssel (listings), 179, 180, 181 \kill, 249, 250 (longtable), 269 Klammern Bibliographien Kurztitel-Zitierschema, 761 numerisches Zitierschema, 720 geschweifte, weglassen, 876 Klassen Befehle, 879, 911, 917–921 Dateistruktur, 910–922 Mindestanforderungen, 922 Optionen, 18, siehe auch Optionen Klassendateien, 7 Kleinerzeichen ( (Tabbing), 250 Tabbing Umgebung (Tabbing), 250 Tabbing Paket, 250 tabbing Umgebung, 248, 249, 250, 457, 458 Fehler bei, 929, 947, 950, 953 (inputenc), 457 \tabbingsep feste Länge, 249 \tabcolsep feste Länge, 251, 255, 256, 258, 288, 290 Tabellen Absatzoptionen, 253, 254 Akzente, 249, 250 am Ende eines Dokumentes platzieren, 298–300 Ausrichtung horizontal, 268 vertikal, 254, 281, 282 Breite automatisch berechnen, 259–262, 263, 290 bei mehrseitigen, 266, 267, 268, 269, 270, 271, 272 dehnen, 254 explizit berechnen, 257, 258, 259 Weißraum gleichmäßig verteilen, 287, 288 Dezimalwerte ausrichten, 280, 282, 283, 284 färben, 272, 273 Fonts einstellen, 252, 253 Fußnoten, 270, 285, 286, 287 Gleitobjekte, 325–331 in Tabellen, 288, 289 Layoutparameter, 251 Linien doppelte, 278 farbige, 273 formale, 277, 278, 279, 280 gestrichelte, 275, 276 horizontale und vertikale kombinieren, 274, 275 variable Stärke, 274 vertikale, 274, 275, 277 mehrseitige Abstände um, 269 Anzahl der Läufe reduzieren, 271 Breite, 266, 267, 268, 269, 270, 271, 272 erstellen mit longtable, 267, 268, 269, 270–272 erstellen mit supertabular, 264, 265, 266, 267 Fußnoten, 270 horizontale Ausrichtung, 268 Kolumnentitel, 265, 269 Legenden, 265, 270 Probleme mit, 271, 272 Seitenumbrüche, 265 und Gleitobjekte, 270–272 Zeilenbefehle, 269 Präambelbefehle/-kürzel, 251–256, 262 seitenübergreifende, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272 Silbentrennung, 254
1111
(T)
Befehls- und Begriffsindex
Tabellen (Forts.) Spalten Abstände, 255, 256 Breite automatisch berechnen, 259–262, 263, 290 Breite explizit berechnen, 257, 258, 259 eine anders formatierte, 256, 257 gestalten, 248–251 globale Änderungen, 253, 256, 257 Layout verändern, 256, 257 schmale, 254, 255 Spaltenformatkürzel definieren, 256, 257 Standardumgebungen, 248–251 \verb-Unterstützung, 263 verschachtelte, 288, 289 visuelles Erscheinungsbild, 251 Weißraum gleichmäßig verteilen, 287, 288 Zeilen Abstände, 252, 253, 277, 279 gestalten, 250, 251 Zellen verbinden, 280, 281, 282, 290 Zeilenumbrüche, 255 Tabellenverzeichnisse, 48–69 in Inhaltsverzeichnissen, 51 tabhead Option (endfloat), 298 \table (nfssfont.tex), 380, 381 table Option (euro), 104 table Umgebung, 116, 270, 300, 315, 317 Fehler bei, 936, 939, 946 gleitet zu weit, 297 Label in, 71 Layoutparameter, 292, 294, 295 Querverweis auf, 70 Warnung bei, 969 (float), 303 (multicol), nicht unterstützt, 198 (rotfloat), 307 (subfig), 328, 329 table Zähler, 883 (longtable), 267 table* Umgebung (multicol), 198 \tablecaption (supertabular), 265, 266 \tablefirsthead (supertabular), 265, 266 \tablehead (supertabular), 265, 266 \tablelasttail (supertabular), 265, 266 \tablename (babel), 561, 567 tablenotes Umgebung (threeparttable), 286, 287 \tableofcontents, 25, 49, 50, 56, 58, 59, 175, 231 (minitoc), 59 (shorttoc), 59 (titletoc), 64 \tableplace (endfloat), 299 \tablesection (endfloat), 298 tablesfirst Option (endfloat), 299 \tabletail (supertabular), 265, 266 \tablinesep feste Länge (tabls), 277 tablist Option (endfloat), 298 tabls Paket, 277 nicht kompatibel zu array, 277 tabsize Schlüssel (fancyvrb), 169 tabular Schlüsselwert (jurabib), 765
1112
tabular Umgebung, 110, 111, 112, 113, 248, 249, 250, 251–259, 272–647, 648, 649–1137 Fehler bei, 927, 934, 938, 941–944 Fußnoten in, 285 Layoutparameter, 251 (array), 252–257, 274, 282, 288, 289 farbig, 272 (arydshln), 276 (booktabs), 278, 280 (colortbl), 273 (dcolumn), 283, 284 (hhline), 275 (multirow), 281, 282 (sidecap), 335 (tabls), 277 (threeparttable), 286 tabular* Umgebung, 250, 251, 263, 281, 286 (array), 254, 258, 288 tabularc Umgebung (lb2), 258 \tabularnewline, 112, 254, 255, 257, 258, 260, 269 tabularx Umgebung (tabularx), 259, 260, 261, 263, 285, 286, 290 tabularx Paket, 259–261 \tabularxcolumn (tabularx), 260 tabulary Umgebung (tabulary), 261, 262, 263 tabulary Paket, 256, 259, 261–263 Tabulatoren darstellen, 168, 169 tabwindow Umgebung (picinpar), 116 \tag (amsmath), 484, 485, 494 Fehler bei, 944, 950 \tag* (amsmath), 494 \tagcurve (curves), 630 Tags (Formeln), 481, 482 Definition, 481 Formeln nummerieren, 494, 495 Platzierung, 495, 496, 497 \tala (babel), 579 \talloblong (stmaryrd), 546 \tan, 513 \tanh, 513 \Tape (bbding), 414 \Taschenuhr (ifsym), 415 \tau, 543 \tbinom (amsmath), 506 tbtags Option (amsmath), 485, 486 tcidvi Option (graphics), 633 TDS (TEX Directory Structure), 863 TDS-konforme Installation sicherstellen, 863–866 technischer Index, 688 techreport BIBTEX-Publikationstyp, 791 \Telephone (ifsym), 416 \Tent (ifsym), 416 \tertio (babel), 579 testpage.tex Datei, 204 .tex Dateierweiterung, 7, 9 TeX capacity exceeded Fehler, 956–961 TEX Directory Structure (TDS), 863 TEX und LaTEX, Dateiübersicht, 9 TEX, Kodierung, 365
Befehls- und Begriffsindex
TEX-Dateien, Quellen CD/DVD, 996, 997 FTP, 996, 1000–1002 Internetzugriff, 998 TEX-Fontmetrikdateien, 7 tex.bib Datei (lb2), 714, 716, 807 tex.define Funktion (bibtool), 813 tex_def.rsc Datei (bibtool), 813 texdoc Programm, 1002, 1003 texdoctk Programm, 1002, 1003 texindy Programm, 690–695 texmf.cnf Datei, 956 texpicture Paket, 657, 658 Text, siehe auch Fonts Ausrichtung in Inhaltsverzeichnissen, 63, 64, 65 Balancieren von Spalten, 196, 197 Codefragmente in normalem Text, 180 getippter, siehe wortwörtliche Ausgabe Groß-/Kleinschreibung verändern, 92, 93 hervorheben, siehe kursive Schriftform; unterstreichen Layout in Überschriften, 31, 33, 39, 40 Mathematiksatz, 512, 513, 514 um eine Abbildung fließen lassen, 115, 116 unterstreichen, 93, 94, 99, 353
\text (amsmath), 479, 484, 488–490, 496, 498, 512, 522 (amstext), 363, 545 (nfssfont.tex), 380, 381 text input levels Fehler, 961 text.length$ interne BIBTEX-Funktion, 839 text.prefix$ interne BIBTEX-Funktion, 839 \textacutedbl (textcomp), 375, 471 \textascendercompwordmark (textcomp), 377, 471 \textasciiacute (textcomp), 375, 471 \textasciibreve (textcomp), 375, 471 \textasciicaron (textcomp), 375, 471 \textasciicircum, 471 \textasciidieresis (textcomp), 375, 471 \textasciigrave (textcomp), 162, 375, 471 \textasciimacron (textcomp), 375, 471 \textasciitilde, 471 \textasteriskcentered, 136 (textcomp), 375, 471 \textbackslash, 350, 471, 674 \textbaht (textcomp), 374, 472 \textbar, 472 \textbardbl (textcomp), 375, 472 \textbf, 351, 355, 357, 418, 419, 451, 907 in Formeln, 363 (cmbright), 419 (lucidabr), 421, 422 (soul), 95 (ulem), ersetzt durch \uwave, 94 (yfonts), 405 \textbigcircle (textcomp), 375, 472 \textblack (fourier), 404 \textblank (textcomp), 375, 472 \textborn (textcomp), 375, 377–379, 396, 399, 402, 472
(T)
\textbraceleft, 472 \textbraceright, 472 \textbrokenbar (textcomp), 375, 472 \textbullet, 66, 67, 136, 144, 376 (textcomp), 375, 376, 472
\textcapitalcompwordmark (textcomp), 377, 472 textcase Paket, 92, 93
\textcelsius (textcomp), 375, 472 \textcent, 459 (textcomp), 374, 472
\textcentoldstyle (textcomp), 374, 472 \textcircled, 375, 465 Problem mit textcomp, 375 (textcomp), 374, 472 \textcircledP (textcomp), 374, 472 \textcolonmonetary (textcomp), 374, 472 \textcolor (color), 165, 272, 617, 719, 721 textcomp Paket, 95, 373–379, 399, 466–468 Fehler bei, 923, 930, 949 nicht verwendbar mit ae, 367 textcomp.cfg Datei (textcomp), 379 \textcompsubstdefault (textcomp), 378, 949 \textcompwordmark, 376, 377, 472 (textcomp), 377 \textcopyleft (textcomp), 374, 378, 472 \textcopyright (textcomp), 374, 472 \textcurrency (textcomp), 374, 472 \textcyrillic (babel), 584, 585 \textdagger (textcomp), 375, 376, 472 \textdaggerdbl (textcomp), 375, 472 \textdblhyphen (textcomp), 375, 472 \textdblhyphenchar (textcomp), 375, 472 \textdegree (textcomp), 375, 472 \textdied (textcomp), 375, 396, 399, 402, 472 \textdiscount (textcomp), 374, 472 \textdiv (textcomp), 375, 472 \textdivorced (textcomp), 375, 472 \textdollar, 377, 467, 472 (pxfonts), Probleme mit, 402 (textcomp), 374 (txfonts), Probleme mit, 400 \textdollaroldstyle (textcomp), 374, 377, 396, 399, 402, 472 \textdong (textcomp), 374, 472 \textdownarrow (textcomp), 374, 472 \texteightoldstyle (textcomp), 374, 472 Texteingabe, Kodierung, 458, 459 \textellipsis, 87, 472 \textemdash, 472 \textendash, 136, 455, 472 \textepsilon (tipa), 417 \textestimated (textcomp), 374, 472 \texteuro, 419, 466 nachgeahmt, 964 (luximono), 399 (textcomp), 104, 374, 379, 396, 399, 402, 418, 419, 472 \textexclamdown, 455, 472 \textfiveoldstyle (textcomp), 374, 472 \textfloatsep elastische Länge, 293, 294 \textflorin (textcomp), 374, 472
1113
(T)
Befehls- und Begriffsindex
textfont Schlüssel/Option (caption), 319, 321, 322, 334 (subfig), 326 \textfouroldstyle (textcomp), 374, 472 \textfraction, 293, 295 \textfractionsolidus (textcomp), 375, 473 Textfragmente formatieren, 479 \textfrak (yfonts), 96, 405 \textgoth (yfonts), 405 \textgravedbl (textcomp), 375, 473 \textgreater, 473 \textgreek (babel), 584, 585 \textguarani (textcomp), 374, 473 \textheight feste Länge, 18, 203–205, 206, 207, 216, 242, 295, 336, 383, 905, 922, 975 (fancybox), 615 (geometry), 215, 216 (lscape), 220 (supertabular), 264 textheight Schlüssel/Option (geometry), 215, 219 \textifsym (ifsym), 416 \textifsymbol (ifsym), 416 \textinit (yfonts), 407 \textinterrobang (textcomp), 375, 473 \textinterrobangdown (textcomp), 375, 473 \textipa (tipa), 417 \textit, 351, 355, 357, 418, 672 in Formeln, 363 (lucidabr), 421, 422 (yfonts), 405 Textlänge, siehe Längenparameter \textlangle (textcomp), 374, 473 \textlarger (relsize), 90 \textlatin (babel), 584 \textlbrackdbl (textcomp), 374, 473 \textleaf (textcomp), 375, 473 \textleftarrow (textcomp), 374, 473 \textless, 473 \textlira (textcomp), 104, 374, 473 \textlnot (textcomp), 375, 473 \textlquill (textcomp), 374, 473 Textmarkenbefehle, 226, 227, 228, 229, 230, 237, 238 \textmarried (textcomp), 375, 396, 399, 402, 473 \textmd, 351, 355, 357 \textmho (textcomp), 375, 473 \textminus (textcomp), 375, 473 \textmu (textcomp), 375, 473 \textmusicalnote (textcomp), 375, 473 \textnaira (textcomp), 374, 473 \textnineoldstyle (textcomp), 374, 473 \textnormal, 175, 176, 350, 355 \textnumero (textcomp), 375, 378, 473 \textogonekcentered, 473 \textohm (textcomp), 375, 378, 379, 473 \textol (babel), 584 \textonehalf, 459 (textcomp), 374, 473 \textoneoldstyle (textcomp), 374, 473 \textonequarter (textcomp), 374, 473 \textonesuperior (textcomp), 374, 473 \textopenbullet (textcomp), 375, 473
1114
\textordfeminine (textcomp), 375, 473 \textordmasculine (textcomp), 375, 473 \textormath (babel), 458, 606, 607 \textparagraph (textcomp), 375, 376, 473 \textperiodcentered, 105, 136, 192 (textcomp), 375, 473
\textpertenthousand Probleme in T1, 428 (textcomp), 374, 473
\textperthousand Probleme in T1, 428 (textcomp), 374, 473 \textpeso (textcomp), 374, 473 \textpilcrow (textcomp), 375, 378, 473 \textpm (textcomp), 375, 473 \textprimstress (tipa), 417 \textquestiondown, 473 \textquotedbl, 473 \textquotedblleft, 473 \textquotedblright, 473 \textquoteleft, 473 \textquoteright, 473 \textquotesingle (textcomp), 162, 375, 474 \textquotestraightbase (textcomp), 375, 474 \textquotestraightdblbase (textcomp), 375, 474 \textrangle (textcomp), 374, 474 \textrbrackdbl (textcomp), 374, 474 \textrecipe (textcomp), 375, 474 \textreferencemark (textcomp), 374, 474 \textregistered, 465 (textcomp), 374, 474 \textrightarrow (textcomp), 374, 474 \textrm, 350, 355, 357, 363 in Formeln, 363 \textroundcap (tipa), 417 \textrquill (textcomp), 374, 474 \textsb (fourier), 404 \textsc, 351, 352, 355, 357, 890 in Formeln, 363 (fourier), 404 (relsize), 90 \textscale (relsize), 91 \textschwa (tipa), 417 \textsection (textcomp), 375, 474 \textservicemark (textcomp), 374, 474 \textsevenoldstyle (textcomp), 374, 474 \textsf, 350, 355, 357, 382, 418, 883 in Formeln, 363 \textsfbf (lb2), 96 \textsixoldstyle (textcomp), 374, 474 \textsl, 351, 355, 357, 419 in Formeln, 363 (cmbright), 419 \textsmaller (relsize), 90 \textsterling, 104, 467, 474 (pxfonts), Probleme mit, 402 (textcomp), 374 (txfonts), Probleme mit, 400 \textstyle, 444, 506, 515 (relsize), 91 \textsuperscript, 120, 133, 717, 895, 906
Befehls- und Begriffsindex
(T)
\textsurd (textcomp), 375, 474 \textswab (yfonts), 405
\the, 138, 398, 887, 888, 980
Textsymbole, siehe auch mathematische Symbole; Sonderzeichen € (Euro-Zeichen), 418–423 Berge, 414, 415, 416 Hände, 411 IPA, 417, 418 Kodierung Pi-Fonts, 390–393 PostScript, 399–401 TS1, 373, 374–379 MarVoSym Font, 412, 413, 414 Rückwärtskompatibilität, 475, 476 TIPA, 416–418 Uhren, 414, 415, 416 Waldis Font, 411, 412 Wolken, 414, 415, 416 Zapf Dingbats, 390–392 eine Alternative, 414, 415 \TextSymbolUnavailable, 459 \textthreeoldstyle (textcomp), 374, 474 \textthreequarters (textcomp), 374, 474 \textthreequartersemdash (textcomp), 375, 474 \textthreesuperior (textcomp), 374, 474 \texttildelow (textcomp), 375, 474 \texttimes (textcomp), 375, 474 \texttrademark (textcomp), 374, 474 \texttt, 350, 355, 357, 398, 399, 418, 907 in Formeln, 363 (cmbright), 419 \texttwelveudash (textcomp), 375, 474 \texttwooldstyle (textcomp), 374, 474 \texttwosuperior (textcomp), 374, 474 \textunderscore, 474 \textup, 150, 151, 351, 355, 357 \textuparrow (textcomp), 374, 474 \textupsilon (tipa), 417 Textures Programm, 632, 633 textures Option (changebar), 199 (graphics), 632, 633 \textvisiblespace, 102, 474 \textwidth feste Länge, 190, 203–205, 207, 234, 904, 905, 922 (fancybox), 615 (fancyhdr), 232 (longtable), 269 (lscape), 220 textwidth Schlüssel/Option (geometry), 215, 219 \textwon (textcomp), 374, 474 \textyen (textcomp), 374, 474 \textzerooldstyle (textcomp), 374, 474 .tfm Dateierweiterung, 7, 9, 337, 341, 351, 354, 424, 439, 440, 936, 937 \tfrac (amsmath), 505, 506 \tg (babel), 580 \TH, 469 \th, 474 (babel), 580
\the#zähler$, 886 thebibliography Umgebung, 24, 25, 231, 710, 711,
Fehler bei, 939
715, 717, 724, 771, 840 im Inhaltsverzeichnis, 50 Warnung bei, 963 (bibunits), 778, 779 (chapterbib), 773, 774 (natbib), 732, 734 \thebtauxfile (bibtopic), 781 \thechapter, 27, 228, 887 (chappg), 225 (chapterbib), 775 \theCodelineNo (doc), 857 \thecontentslabel (titletoc), 63, 64, 65, 67 \thecontentspage (titletoc), 63, 66, 67 \theendnote (endnotes), 133 \theendnotes (endnotes), 133, 134, 753 \theenmark (endnotes), 133, 134 \theenumi, 136, 137, 138, 886 \theenumii, 136, 137, 886 \theenumiii, 137, 886 \theenumiv, 137, 886 \theequation, 16, 75, 494, 887 (amsmath), 497 \theFancyVerbLine (fancyvrb), 168 \thefigure, 50 (subfloat), 332 \thefootnote, 117, 285 theglossary Umgebung, 673 theindex Umgebung, 25, 231, 669, 702, 703 im Inhaltsverzeichnis, 51 \thelstlisting (listings), 183 \themainfigure (subfloat), 332 \themaintable (subfloat), 332 \themnote (lb2), 128 \thempfootnote, 117, 285 theorem Paket, 148 theoremähnliche Strukturen, 146, 147, 148–150, 151, 152, 479 Abstände, 149 anpassen, 148–150, 151 benennen, 148, 149, 150, 151 Beweisführungen, 151, 152 Einzug, 149 Fonts, 149 Interpunktion, 149 Layout definieren, 148 Layoutnamen, 149 QED ( )-Zeichen, 151, 152 \theoremstyle (amsthm), 148, 150, 151 \thepage, 223, 224, 226, 232, 236, 239–241, 909 (chappg), 225 \theparentequation (amsmath), 497 \thepart, 886 \thepostfig (endfloat), 299 \theposttbl (endfloat), 299 \therefore (amssymb), 551 \Thermo (ifsym), 415, 416 \thesection, 27, 28, 228, 886
1115
(T)
Befehls- und Begriffsindex
thesis Dokumentenklasse, 22
\thesub#klasse$ (subfig), 327 \thesubfloatfigure (subfloat), 332 \thesubfloattable (subfloat), 332 \thesubsection, 27, 28, 886 \thesubsubsection, 886 \thesubtable (subfig), 328 \Theta, 509, 543 \theta, 487, 543 \thetable (subfig), 328 \thetitle (titlesec), 39 \theTitleReference (titleref), 81 \thevpagerefnum (varioref), 78, 79 \thickapprox (amssymb), 548 \Thicklines (eepicemu), 629 (eepic), 628 \thicklines, 625, 629 (eepic), 627, 628 (epic), 620–622 (fancybox), 614 (pspicture), 658, 659, 660 \thickmuskip elastische Länge, 521, 541, 542 \thicksim (amssymb), 548 \thickspace (amsmath), 521, 522 \thinlines, 614 (epic), 620, 622 (pspicture), 658, 659, 660 \thinmuskip elastische Länge, 521, 541, 542 \thinspace, 521, 522 \thisfancypage (fancybox), 617 \thisfancyput (fancybox), 617 \thisfancyput* (fancybox), 617 \thispagestyle, 35, 230, 238, 702, 703 (fancyhdr), 238 (nextpage), 244 thm Umgebung (lb2), 147, 148 \thmname (amsthm), 150, 151 \thmnote (amsthm), 150, 151 \thmnumber (amsthm), 150, 151 threeparttable Umgebung (threeparttable), 286 threeparttable Paket, xxix, 285–287 Tiefe, siehe Längenparameter Tiefe einer Box, 650 Tiefstellungen, Positionieren von Grenzen, 503, 504 .tif Dateierweiterung, 9, 644 tight Option (minitoc), 59 (shorttoc), 59 \tilde, 545 Tilde (~) geschütztes Leerzeichen, 568 in verschiedenen Sprachen, 570, 571 \time, 904, 906 \times, 403, 502, 509, 546 Auslassungspunkte bei, 509 times Option (quotchap), 38 times Paket, 14, 382 Times Roman alternative Unterstützung, 399–401, 532 Beschreibung, 387
1116
Times Roman (Forts.) in Formeln und Text, 387, 388, 389, 399, 401, 532, 533 \tiny, 181, 353, 354 tiny Option (titlesec), 39, 40 tipa Paket, xxix, 416–418, 428 tipaman Datei (tipa), 418 Titel, Bibliographiedatenbank, 797 Titel, Bibliographien Formate, 744–746 Informationsfeld, 768, 769 Kurztitel zuordnen, 747, 748 Titelbreite, in Überschriften messen, 44 \title, 945 title BIBTEX-Feld, 714, 757, 769, 791, 793, 797, 801, 808, 809 (jurabib), 742, 744, 747 titleaddon BIBTEX-Feld (jurabib), 769 \titleclass (titlesec), 47, 48 \titlecontents (titletoc), 62, 63, 64, 65, 67, 68 \titlecontents* (titletoc), 65, 66, 67, 69 \titleformat (titlesec), 40, 42, 43, 44, 45–48, 68, 69, 98, 99 titleformat Schlüssel/Option (jurabib), 741, 745, 746, 747, 760, 761, 767 \titleformat* (titlesec), 39, 40 \titlelabel (titlesec), 39 \titleline (titlesec), 44 \titleline* (titlesec), 44, 45 titlepage Umgebung, 890 \titleref (titleref), 80, 81 titleref Paket, 80–82
\titlerule (titlesec), 44, 45 (titletoc), 63, 64
\titlerule* (titlesec), 44, 45 (titletoc), 65 titlesec Paket, xxix, 38–48, 68, 232, siehe auch Überschriften; titletoc-Paket \titlespacing (titlesec), 40, 41, 42, 43, 44, 45, 46, 48 \titlespacing* (titlesec), 42, 69, 98, 99 titletoc Paket, xxix, 59, 62–69, siehe auch minitoc-Paket; titlesec-Paket in diesem Buch, 1137 \titlewidth feste Länge (titlesec), 44 Tk Programm, 1003 TM Math Font, 533 tmargin Schlüssel/Option (geometry), 214, 216 \tnote (threeparttable), 286 \to, 503, 504, 514, 550 TOC, siehe Inhaltsverzeichnisse .toc Dateierweiterung, 8, 9, 25, 34, 35, 49, 50, 52, 457 (chapterbib), 775 (titletoc), 62, 64 tocbibind Paket, 51, 703 tocdepth Zähler, 30, 52, 54, 55, 59, 64, 67, 68 \tocdesign (layouts), 210 \tocdiagram (layouts), 210
Befehls- und Begriffsindex
\today, 92, 871 (babel), 567, 574–576, 601, 604 (rcsinfo), 872 (rcs), 871 today Option (rcsinfo), 872 \todayRoman (babel), 574 \toEng (lb2), 906 \tolerance, 109, 110, 196, 987–989 (multicol), 196 \tone (tipa), 417, 418 tone Option (tipa), 417, 418 \top, 541, 544 top Schlüssel (titlesec), 47, 48 top Schlüssel/Option (geometry), 216, 217 top Schlüsselwert (caption), 321, 328 (subfig), 327 top$ interne BIBTEX-Funktion, 839 topadjust Schlüssel/Option (subfig), 327 \topcaption (supertabular), 265 \topfigrule, 293, 294 \topfraction, 292, 293, 294 \topleftxmark (extramarks), 230 topline Schlüsselwert (fancyvrb), 166, 167 \topmargin feste Länge, 203–205, 206, 905, 979, 980, 981 \topmark, 226, 229, 230 topnumber Zähler, 292, 293 \toprightxmark (extramarks), 230 \toprule (booktabs), 278, 280 \topsep elastische Länge, 149, 153, 979, 980 \topskip elastische Länge, 206, 207, 982, 984 (geometry), 215 total Schlüssel/Option (geometry), 219 \totalheight, 894, 895, 899 (graphics), 648 totalheight Schlüssel (graphicx), 637, 641, 933 totalnumber Zähler, 292 totalpages BIBTEX-Feld (jurabib), 769 trace Paket, 992, 993, 1027 tracefnt Paket, 379, 380 \traceoff (trace), 992 traceoff Option (changebar), 200 \traceon (trace), 992, 993 traceon Option (changebar), 200 tracestacks Option (changebar), 200 \tracingall, 986, 990, 991, 992, 993 \tracingassigns (trace), verfügbar unter eTEX, 993 \tracingcommands, 991 \tracinggroups, verfügbar unter eTEX, 944, 959 (trace), 993 \tracingifs, 964 \tracinglostchars, 992 \tracingmacros, 991 tracingmulticols Zähler (multicol), 195, 197 \tracingonline, 946, 959, 968, 983, 986, 990 \tracingoutput, 990 \tracingpages, 983 erzeugte Ausgabe, 983 \tracingparagraphs, 986 erzeugte Ausgabe, 987, 988
(T)
\tracingrestores, 990 \tracingstats, 957 erzeugte Ausgabe, 957
\tracingtabularx (tabularx), 260, 261 translator BIBTEX-Feld (jurabib), 769
Treiberdateien erstellen, 850 in bedingten Code einbinden, 852 Trennstrich (-), siehe Bindestrich Trennung nach Bindestrich, 570, 719 Trennzeichen für Indexebenen, 671 für Silbentrennung festlegen, 439 Fonts, 438 in Bibliographiedatenbanken, 790 \triangle, 544 \TriangleDown (bbding), 414 \triangledown (amssymb), 544 \triangleleft, 546 \trianglelefteq (amssymb), 549 \trianglelefteqslant (stmaryrd), 549 \triangleq (amssymb), 548 \triangleright, 169, 546 \trianglerighteq (amssymb), 549 \trianglerighteqslant (stmaryrd), 549 \TriangleUp (ifsym), 416 trim Schlüssel (graphicx), 637, 638, 639 troff Programm, 626 true Schlüsselwert (caption), 318 (fancyvrb), 165, 167, 168, 169, 173, 174 (geometry), 214 (jurabib), 741, 761 (listings), 180, 182–184 (titlesec), 46, 47 true Syntax, 907, 908 truedimen Schlüssel/Option (geometry), 219 TrueTeX Programm, 633 truetex Option (graphics), 633 \truncate (truncate), 240, 241 truncate Paket, 240, 241 \TruncateMarker (truncate), 240 \try#param$ (layouts), 208, 210 \trycolumnsep (layouts), 209 \trycolumnseprule (layouts), 209 \tryevensidemargin (layouts), 209 \tryfootskip (layouts), 209 \tryheadheight (layouts), 209 \tryheadsep (layouts), 208, 209 \trypaperheight (layouts), 209 \trypaperwidth (layouts), 209 \trytextheight (layouts), 209 \trytextwidth (layouts), 209 TS1 Fontkodierung, 124, 365, 366, 394, 428, 432, 466–468 Liste der LICR-Objekte, 467–475 (avant), 384 (bookman), 384 (ccfonts), 395, 396 (chancery), 384 (charter), 384
1117
(T–U)
TS1 Fontkodierung (Forts.) (cmbright), 397 (courier), 384 (fourier), 402 (helvet), 384 (luximono), 398 (newcent), 384 (palatino), 384 (pxfonts), 401 (textcomp), 373–375, 377–379 (times), 384 (txfonts), 400 (utopia), 384 TS3 Fontkodierung, 428 \tt, 358 in Formeln, 361, 476 tt Option (titlesec), 39 tt Schlüsselwert (caption), 319 (fancyvrb), 163, 164 \ttdefault, 162, 350, 357, 398, 399 \ttfamily, 100, 350, 355, 357, 420, 476, 980 in Formeln, 360, 361 .ttt Dateierweiterung (endfloat), 299 TUG (TEX Users Group) Homepage, 996 turkish Option (babel), 559, 573 turn Umgebung (rotating), 306, 651, 652 \twlrm (lb2), 476 twlrm Option (rawfonts), 476 \twocolumn, 193, 702, 703 Warnung bei, 969 twocolumn Option, 18, 121, 185, 193, 240 twocolumn Schlüssel/Option (geometry), 215 \twocolumnlayouttrue (layouts), 209 \twoheadleftarrow (amssymb), 550 \twoheadrightarrow (amssymb), 550 twoside Option, 207, 217, 754, 915 (biblist), 804 (layout), 208 twoside Schlüssel/Option (geometry), 215, 216, 217 txfonts Paket, 399–401, 525, 526, 533 einander berührende Zeichen, 401 \tyformat (tabulary), 262, 263 \tymax feste Länge (tabulary), 261, 262 \tymin feste Länge (tabulary), 261, 262 type Schlüssel (graphicx), 638, 645 Fehler bei, 931 type BIBTEX-Feld, 791, 793 type$ interne BIBTEX-Funktion, 839 \typearea (typearea), 213, 214 typearea Paket, xxix, 211–214, 215, 244 typearea.cfg Datei (typearea), 212 \typein, 860 \typeout, 444, 860, 927 typographische Fonts, siehe Proportionalschriften typographische Konventionen in diesem Buch, 12–15
U U Fontkodierung, 408, 428, 442, 447, 467 (eurosans), 421 (eurosym), 420
1118
Befehls- und Begriffsindex
\u, 377, 474 ucs Paket, 372 Überlauffehler, 958–961, siehe Fehlersuche Überschriften, siehe auch Gliederungsbefehle; titlesec-Paket Abstände Label und Titeltext, 41 linker Rand, 42 nach, 31 oberhalb, 30 oberhalb/unterhalb, 42, 45 rechter Rand, 42 Schriftgrößen und, 43 vertikale, 39 vor, 30 Werkzeuge für, 42 zwischen aufeinander folgenden Überschriften, 43 alphabetisch nummerieren, 28 am Fuß einer Seite, 43 Ausrichtung, 39 bedingte Layouts, 46, 47 für Listen, siehe theoremähnliche Strukturen formatieren, 29–36 abgesetztes Format, 29, 30 Abstand nach, 31 Abstand oberhalb, 30 besondere Layouts, 43 eingebettetes Format, 29, 31, 32 Einzug der Überschrift, 30, 41 Einzug nach Überschriften, 34, 43 Einzug unterdrücken, 34, 42 Gliederungsebene, 30 komplexe Überschriften, 34 Labelformat, 41 Leitpunkte, 44, 45 Linien, 44, 45 mit Formen, 40 Nummern, 39, 40 Nummern einrahmen, 28 originelle Überschriften, 36, 37 Randausgleich, 33 Silbentrennung, 33 Textlayout, 31, 33, 39, 40 vordefinierte Layouts, 36, 37 vordefinierte Texte, 36 Zähler, 30 Zeilenumbrüche, 33 Gliederungsebene, 26 Hierarchie verändern, 47, 48 Layoutdefinitionen, 34 Messen der Titelbreite, 44 Mottos (Zitate) für Kapitel, 37, 38 Nummerierung, 26, 27, 28, 29 arabische Zahlen, 27 formatieren, 39, 40 Großbuchstaben, 28 unterdrücken, 25, 26 Verweise auf Unterabschnitte, 28, 29 Quellenverweise in, 722 Seitenumbruch vor, 45
Befehls- und Begriffsindex
Überschriften (Forts.) umbrechen, 26 umdefinieren, 34–36 unterdrücken (layouts), 210 Zähler erhöhen, 35, 36 Zeilenumbrüche, 33 Übersetzen sprachspezifischer Zeichenfolgen, 603 von Dokumenten, siehe fremdsprachige Dokumente übersetzte Werke, Bibliographien, 768, 769 Übersetzungen, Optionen (Sprachauswahl), 566, 567 überwachen Absatzalgorithmus, 986–989 am Bildschirm, 989, 990 Fontauswahl, 379 Seitenumbruch, 980–985 Uhren, Textsymbole, 414, 415, 416 UK-TUG FAQ, 995 UKenglish Option (babel), 559 ukrainian Option (babel), 559, 584 \ul (soul), 95, 96, 99 \ulcorner (amssymb), 554 \ULdepth feste Länge (ulem), 94 ulem Paket, 93, 94 \ULforem (ulem), 94 \uline (ulem), 94 \ULthickness (ulem), 94 Umbrüche Absätze, Fehlersuche, 985–989 Absatzalgorithmus konfigurieren, 882 überwachen, 986–989 vorletzte Zeile, 882 in Überschriften, 26 Seitenumbrüche Badness-Grad, 892 Fehlersuche, 980–985 in mehrseitigen Tabellen, 265 in/um Formeln, 491–494 Index, Eintrag wiederholen, 703 Seitenlayout, 242, 243 vor Überschriften, 45 Spaltenumbrüche Index, Eintrag wiederholen, 703 manuell erzeugt, 198 Zeilenumbrüche Badness-Grad, 892 in Bibliographien, 718 in Computercode, 182 in Programmlistings, 182 in Quellenverweisen, 718 in Tabellen, 255 in Überschriften, 26, 33 in URLs, 100 numerische Quellenverweise, 718 vorletzte Zeile, 882 umdefinieren Befehle, 876, 877, 879 Umgebungen, 880–883
(U)
Umgebungen benennen, 874, 875 Beschreibungen erstellen, 847, 848 die Miniseiten erzeugen (Mathematiksatz), 489, 490, 491 dokumentieren, siehe Dokumentationswerkzeuge existierende umdefinieren, 880–883 Kurzformen, 480 neue definieren, 880, 881–883 Umschreiben, Bibliographien, 809–811 umvs.fd Datei (marvosym), 414 unabhängig nummerierte Fußnoten, 129, 130–132 unabhängiger Index, 683 unbalance Zähler (multicol), 195, 196, 198 \unboldmath, 363 (bm), 526 \UndeclareTextCommand, 377, 467 \UndefineShortVerb (fancyvrb), 177 \underaccent (accents), 507 Underfull box Meldung, 110, 215, 383, 440, 973–975 \underleftarrow (amsmath), 510 \underleftrightarrow (amsmath), 510 \underrightarrow (amsmath), 510 \underset (amsmath), 507, 508 \undertilde (accents), 507 undotted Option (minitoc), 59 Uniform Resource Locators, siehe URLs unitcntnoreset Option (bibtopic), 781 \unitlength feste Länge (eepic), 627, 628 (epic), 620–623, 625 (pspicture), 659 units Schlüssel (graphicx), 650, 651 \unkern, 88 \unlhd (latexsym), 476 unpack.ins Datei, 861, 862 unpublished BIBTEX-Publikationstyp, 714, 791 \unrhd (latexsym), 476 \unsethebrew (babel), 584, 585 \unskip, 79, 118, 155, 335 unsortierte Quellenverweise, Layouts für, 722 unsrt BIBTEX-Stil, 712, 822, 823, 824, 825, 837 (bibtopic), 781 (notoccite), 722 unsrtnat BIBTEX-Stil (natbib), 733, 735, 823 Unterabschnitte verweisen auf, 28, 29, 81 Unterbrechen abgesetzter Formeln, 491 Unterformeln, Mathematiksatz, 516, 517 untergeordnete Legenden, 325–329, 330, 331 unterschneiden, 348 Unterstützung für Gesetzestexte, Bibliographien, 769, 770, 771 unterstreichen, 93, 94, 99, 353 unterteilte Abbildungen, 325, 329, 331 unterteilte Tabellen, 326, 328 unzip Programm, 420 up Option (titlesec), 39 up Schlüsselwert (caption), 319 \Uparrow, 511, 550
1119
(U–V)
\uparrow, 511, 550 updated BIBTEX-Feld (jurabib), 769 \updatename (jurabib), 769 \updatesep (jurabib), 769 \updefault, 357 \upDelta (ccfonts), 396 (cmbright), 397 (mathpazo), 389 (mathptmx), 388 \Updownarrow, 511, 550 \updownarrow, 511, 550 \upharpoonleft (amssymb), 550 \upharpoonright (amssymb), 550 \uplus, 546
\upOmega (ccfonts), 396 (cmbright), 397 (mathpazo), 389 (mathptmx), 388 \uppercase, Probleme mit, 587, 877 uppersorbian Option (babel), 559 upquote Schlüssel (listings), 162 upquote Paket, xxix, 161–163 upref Paket, 479 upright Option (fourier), 403 \uproot (amsmath), 517, 518 \upshape, 351, 352, 355, 357 \Upsilon, 543 \upsilon, 543 \upuparrows (amssymb), 550 \urcorner (amssymb), 554
\url (custom-bib), 833 (natbib), 736 (url), 100, 101, 102, 800 Fehler in bewegtem Argument, 100 Probleme mit, 100 url BIBTEX-Feld (BibTexMng), 820 (custom-bib), 830, 833 (jurabib), 744, 769 (natbib), 735 url Paket, xxix, 99–103, 833 \UrlBigBreaks (url), 102 \UrlBreaks (url), 102 urldate BIBTEX-Feld (jurabib), 769 \urldatecomment (jurabib), 769 \urldef (url), 101, 102 \UrlLeft (url), 102 Leerzeichen ignoriert in, 102 \UrlNoBreaks (url), 103 \urlprefix (custom-bib), 833 \UrlRight (url), 102 Leerzeichen ignoriert in, 102 URLs (Uniform Resource Locators) Bibliographien, 735, 768, 769 formatieren, 99, 100, 101, 102, 103 Zeilenumbrüche, 100 \urlstyle (url), 101, 102 URW Antiqua Font, 404, 405
1120
Befehls- und Begriffsindex
URW Grotesk Font, 404, 405
\usage (doc), 855 \usebox, 316, 882, 901, 902, 903 Fehler bei, 943 (soul), 96 \usecounter, 159 \usedir (docstrip), 863, 864, 865 \usefont, 383, 385, 419, 429 USenglish Option (babel), 559 \UseOption (optional), 24 \usepackage, 15, 18, 19, 20, 912, 914–916, 961 Fehler bei, 935, 954 Versionsdaten, 912 Warnung bei, 976 \usepostamble (docstrip), 860, 862 \usepreamble (docstrip), 862 Usergroups, 1004–1006, siehe auch Hilfsquellen \useshorthands (babel), 564 \UseTDS (docstrip), 865, 955 \UseTextAccent, 467 (textcomp), 378 \UseTextSymbol, 376–378, 467 usetoc Option (titleref), 82 \UseVerb (fancyvrb), 174, 175, 176 \UseVerb* (fancyvrb), 175 \UseVerbatim (fancyvrb), 176 usorbian Option (babel), 575 UTF-8 Unterstützung, Kodierung, 372, 454, 459, 460 utf8 Option (inputenc), 371, 372, 457, 557, 691 utf8enc.dfu Datei (inputenc), 460 utopia Paket, 382 Utopia Font, 387 in Formeln und Text, 531 \uuline (ulem), 94 \uwave (ulem), 94 UWforbf Option (ulem), 94
V \v, 474 \val (euro), 105 \value, 138, 206, 285, 885, 904, 906, 909, 927, 980 Fehler bei, 943
\varbigcirc (stmaryrd), 547 \varbigtriangledown (stmaryrd), 546 \varbigtriangleup (stmaryrd), 546 \varcopyright (stmaryrd), 544 \varcurlyvee (stmaryrd), 546 \varcurlywedge (stmaryrd), 546 \varepsilon, 486, 517, 543 \varhat (lb2), 410 Variablen, Bibliographien, 836
\varinjlim (amsmath), 512, 513 varioref Option (fltpage), 336 varioref Paket, 72–79, 80, 560, siehe auch Querverweise \varkappa (amssymb), 543 \varliminf (amsmath), 512, 513 \varlimsup (amsmath), 513, 514 \varnothing (amssymb), 544 \varoast (stmaryrd), 547 \varobar (stmaryrd), 547
Befehls- und Begriffsindex
\varobslash (stmaryrd), 547 \varocircle (stmaryrd), 547 \varodot (stmaryrd), 547 \varogreaterthan (stmaryrd), 547 \varolessthan (stmaryrd), 547 \varominus (stmaryrd), 547 \varoplus (stmaryrd), 547 \varoslash (stmaryrd), 547 \varotimes (stmaryrd), 547 \varovee (stmaryrd), 547 \varowedge (stmaryrd), 547 \varphi, 486, 517, 543 \varpi, 543 \varprojlim (amsmath), 513 \varpropto (amssymb), 551 \varrho, 543 \varsigma, 543 \varsubsetneq (amssymb), 549 \varsubsetneqq (amssymb), 549 \varsupsetneq (amssymb), 549 \varsupsetneqq (amssymb), 549 \vartheta, 543 varthm Umgebung (lb2), 151 \vartimes (stmaryrd), 546 \vartriangle (amssymb), 549 \vartriangleleft (amssymb), 549 \vartriangleright (amssymb), 549 varumlaut Option (yfonts), 405, 407 \vbadness, 967, 973, 974 \vbox, 383, 903, 973, 982 in TEX-Warnungen, 967, 970, 974
\vcenter, 501 \Vdash (amssymb), 551 \vDash (amssymb), 551 \vdash, 551 \vdots, 552 \vec, 545 \Vector (pspicture), 659, 660 \vector
Fehler bei, 930 (pspicture), 658, 659, 660 (texpicture), 659 \vee, 546 \veebar (amssymb), 546 Vektorzeichnungen, siehe epic-Paket; eepic-Paket \veqns (lb2), 77 Verallgemeinerungen, mathematische Symbole, 505, 506 Verarbeitung von Fehlern, siehe Fehlersuche Verarbeitungsablauf Bibliographien, 837–840 BIBTEX, 712 Indexerstellung, 668, 695 LaTEX, 10 Quellenverweise, 711–715 \Verb (fancyvrb), 176 \verb, 100, 160, 174, 176, 177, 180, 878, 890 Ausgabe drehen, 652 Fehler bei, 954 (boxedminipage), 613 (doc), 848
(V)
\verb (Forts.) (ltxdoc), 867 (parallel), 191 (shortvrb), 160 (tabularx), bedingt zulässig in, 263 (tabulary), bedingt zulässig in, 263 (upquote), 162
\verb* (shortvrb), 160 (tabularx), bedingt zulässig in, 263 (tabulary), bedingt zulässig in, 263 Verbatim Umgebung (fancyvrb), 163, 164–171, 172, 173 verbatim Umgebung, 159, 160, 163, 878, 929, siehe auch wortwörtliche Ausgabe; Schreibmaschinenschrift Fehler bei, 954 (doc), 848, 854 (parallel), 191 (upquote), 162 (verbatim), 161 verbatim Paket, 161, 163 Verbatim* Umgebung (fancyvrb), 169 \Verbatim* (fancyvrb), 173 verbatim* Umgebung (doc), 854 (verbatim), 161 Verbatim-Begrenzungssymbole docstrip, 866 Verbatim-Text, siehe wortwörtliche Ausgabe \verbatimchar (doc), 855 \VerbatimEnvironment (fancyvrb), 172 \VerbatimFootnotes (fancyvrb), 176 \VerbatimInput (fancyvrb), 172 \VerbatimInput* (fancyvrb), 173 VerbatimOut Umgebung (fancyvrb), 171, 172 verbose Option (cite), 720 (placeins), 297 (wrapfig), 310 verbose Schlüssel/Option (geometry), 218 \verbx (lb2), 176 Vereinheitlichen von Indexeinträgen, 698 Vereinheitlichungsregeln, 695, 698 Vergrößerung, Seitenlayout, 218 Verlaufsbefehle (Dokumentation), Liste der, 853–857 Verlaufsmeldungen unterdrücken (Indexerstellung), 678, 690, 697 Versalien, 344, siehe Großbuchstaben Versalziffern, 378 Verschachtelte Befehle, 878, 879 verschwundene Zeichen aufspüren, 991 Versionen für den Ausdruck auswählen, 23, 24 Versionsdaten Paketdateien, 910–913 Sprachdefinitionsdateien, 599 Versionsverwaltung, 23, 24, 869, 870, 871, 872 \VERT (fourier), 403 \Vert, 511, 544 \vert, 511, 544
1121
(V–W)
vertikal erweiterbare mathematische Symbole, 511, 512 vertikale Linien, 274, 275, 277 Verweise, siehe Querverweise; Quellenverweise Verweisschlüssel, siehe Schlüssel Verzeichnisse, 48–69 in Inhaltsverzeichnissen, 51 Layoutparameter, 54 Namen formatieren, 99, 100, 101, 102, 103 Verzierungen, 106–108, 406, 407, 614–618, siehe auch Initiale; Sonderzeichen; Textsymbole \vfill, 198, 890, 891, 899 Viertelkreise, siehe epic-Paket; eepic-Paket viewport Schlüssel (graphicx), 637, 639 \Village (ifsym), 416 \Virgo (marvosym), 413 visuelle Formatierung, 242–244 \vitem (lb2), 176 \vline, 251, 273, 274, 275 vmargin Schlüssel/Option (geometry), 219 vmargin Paket, 211 vmarginratio Schlüssel/Option (geometry), 216, 217, 219 Vmatrix Umgebung (amsmath), 499 vmatrix Umgebung (amsmath), 499 vmode boolesche Var., 908 \voffset feste Länge, 204, 218 (vmargin), 211 voffset Schlüssel/Option (geometry), 218 volume BIBTEX-Feld, 714, 791, 793, 801 volumetitle BIBTEX-Feld (jurabib), 769 vordefinierte Layouts für Überschriften, 36, 37 vordefinierte Texte für Überschriften, 36 \vpageref (varioref), 72, 73, 74, 75, 77, 78, 79 \vpageref* (varioref), 74 \vpagerefrange (varioref), 73, 75 \vpagerefrange* (varioref), 75 \vphantom, 518, 521 \Vref (varioref), 76
\vref (prettyref), 80 (varioref), 72, 73, 74, 76, 78, 79, 957 mögliche Fehler, 79 \vref* (varioref), 73 \vrefpagenum (varioref), 77 \vrefrange (varioref), 73, 74, 75 \vrule, 274, 900, 901 vscale Schlüssel/Option (geometry), 216, 219 \vspace, 618, 890, 891, 892, 897, 898, 900, 901, 951 Fehler bei, 940 Probleme mit, 890, 892 \vspace*, 45, 119, 890, 897, 898 VTeX Programm, 428, 633, 661, 662 vtex Option (changebar), 199 (crop), 222 (graphics), 633 vtex Schlüssel/Option (geometry), 218 \Vvdash (amssymb), 551
1122
Befehls- und Begriffsindex
W w.eps Datei (lb2), 634, 635 Währungssymbole, siehe Währungen, formatieren Währungen € (Euro-Zeichen), 418–423 formatieren, 103–106 Symbole, 374, 423 Waisenkind, 984 Waldis Font, 411, 412 warn Option (textcomp), 378, 379, 950 warning$ interne BIBTEX-Funktion, 839 warningshow Option (tracefnt), 380 Warnung Overfull box, 55, 109, 969, 970, 985 Underfull box, 110, 215, 383, 440, 973–975 Warnungen, 961–977, siehe auch Meldungen; Fehlersuche Wasserzeichen, 617 wasysym Paket, 411, 412 \wd, 316 weather Option (ifsym), 415, 416 \wedge, 546 Weißraum in Tabellen, 287, 288 Kursivkorrektur, 351, 352, 353 um Text, 207 welsh Option (babel), 559 welsh.ldf Datei (babel), 599 wget Programm, 1000 while$ interne BIBTEX-Funktion, 839 \whiledo (ifthen), 909 \whline (lb2), 274 wide Option (sidecap), 333, 334 \widehat, 509, 527, 545 (bm), 527 \WideMargins (a4), 207 widespace Schlüsselwert (lb2), 323 \widetilde, 495, 509, 521, 545 (fourier), 403 \widowpenalty, 982, 984 \width, 894, 895 (graphics), 648 (wrapfig), 310 width Option (crop), 221 width Schlüssel (graphicx), 637, 639, 640–642 width Schlüssel/Option (caption), 318 (geometry), 216, 219 width Syntax, 235, 900, 901 width$ interne BIBTEX-Funktion, 839 window Umgebung (picinpar), 115 Windows Datenbankmanager, Bibliographien, 819, 820 Windvi Programm, 1002, 1003 withprosodicmarks Attribut (babel), 565, 573 Witwe, 984 \wlog, 444 Wörterbücher, Kolumnentitel für, 239, 240 Wolken, Textsymbole, 414, 415, 416 \wordsep (titlesec), 43
Befehls- und Begriffsindex
wortwörtliche Ausgabe, siehe auch Schreibmaschinenschrift; verbatim-Umgebung Anführungsstriche in Programmlistings, 161, 162, 163 angepasste Varianten, 173, 174 Befehle in, ausführen, 169, 170 Boxen, 172, 173 Computercode setzen, 177, 178, 179, 184 als Gleitobjekt, 183 Eingabekodierung, 184 Einzug, 181 Fragmente in normalem Text, 180 Legenden, 183 Linien/Rahmen um Listings, 182, 183 nummerierte Zeilen, 180, 181 Programm-Schlüsselwörter formatieren, 179, 180 unterstützte Programmiersprachen, 178 Zeilenumbrüche, 182 dicktengleiche Schrift, 161, 162, 163 einfärben Hintergrund, 166 Rahmenlinien, 166 Text, 164, 165 einrahmen, 165, 166 Einzug entfernen, 165 Escape-Zeichen, 169, 170 führende Leerzeichen entfernen, 165 Fonts festlegen, 163, 164 hervorheben, siehe kursive Schriftform; unterstreichen Hintergrund einfärben, 165, 166 in Argumenten, 174, 175, 176, 177 in Dateien, 171 in Fußnoten, 176 Kopf-/Fuß-Begrenzungssymbole, 167 Leerzeichen darstellen, 168, 169 Lesen von Verbatim-Daten, 172 nummerierte Zeilen, 167, 168 nur Teil der Daten setzen, 170, 171, 172 Schreiben von Verbatim-Daten, 171 Sonderzeichen, 160, 161 Start-/Stop-Begrenzungssymbole, 160, 161, 176, 177 Tabulatoren darstellen, 168, 169 vertikale Abstände, 167 \wp, 544 \wr, 546 wrap Schlüssel (titlesec), 40, 41, 42–44 wrapfig Paket, 185, 308–311 wrapfigure Umgebung (wrapfig), 308, 309, 310, 311 wrapfloat Umgebung (wrapfig), 311 \wrapoverhang feste Länge (wrapfig), 310, 311 wraptable Umgebung (wrapfig), 308, 309–311 \write, 138 write$ interne BIBTEX-Funktion, 839, 841 Wurzeln, mathematische Symbole, 517, 518 www BIBTEX-Publikationstyp (jurabib), 768, 769
(W–Y)
X X Syntax (tabularx), 259, 260, 263 x Schlüssel (graphicx), 650, 651 x-Höhe, 440 X2 Fontkodierung, 366, 428, 586 xdoc Paket, 846 xdoc2 Paket, 846 xdvi Programm, 632, 633, 1002 .xdy Dateierweiterung, 8 \Xi, 543 \xi, 543 xindy Programm, 8, 556, 590, 667, 668, 671, 673, 688–702, 1020, 1074, siehe auch Indexerstellung; MakeIndex-Programm
\xleftarrow (amsmath), 502 (fourier), 403 xleftmargin Schlüssel (fancyvrb), 165 (listings), 181 \xmlcode (lb2), 302 XMLexa Umgebung (lb2), 301, 302, 307 XMLexa* Umgebung (lb2), 307 .xmp Dateierweiterung (lb2), 58 \xout (ulem), 94 Xpdf Programm, 661 \xquad (lb2), 67 xr Paket, 82, 83 xr-hyper Paket, 83 \xrightarrow (amsmath), 502 xrightmargin Schlüssel (fancyvrb), 165 \XSolid (bbding), 414 \XSolidBold (bbding), 414 \XSolidBrush (bbding), 414 \xspace (xspace), 86, 87 xspace Paket, 86, 87 \xspaceskip elastische Länge, 440 \xswordsdown (fourier), 403 \xswordsup (fourier), 403 \xvec (lb2), 876, 877, 977, 980 Xverbatim Umgebung (lb2), 174 xy Umgebung (xy), 565 xypic Paket, 612, 1018
Y \y (docstrip), 860 y Schlüssel (graphicx), 650, 651 \Ydown (stmaryrd), 546 year Schlüsselwert (jurabib), 743, 744, 759 year BIBTEX-Feld, 714, 791, 793, 797, 801, 808, 809, 810 (jurabib), 742, 744 \yen (amssymb), 544 \yes (docstrip), 860 yfonts Paket, 405–407 \Yingyang (marvosym), 413 \yinipar (yfonts), 407 \Yleft (stmaryrd), 546
1123
(Y–Z)
\Yright (stmaryrd), 546 \Yup (stmaryrd), 546
Z Zähler Beschreibung, 883, 884 darstellen, 885, 886, 887 einstellen, 884 erhöhen, 885 für Überschriften, 30, 35, 36 Fußnoten, je Seite zurücksetzen, 127, 128 Liste der, 883 neue definieren, 884 verändern, 885 Zapf Chancery Font, 387 Zapf Dingbats eine Alternative, 414, 415 Kodierung, 390–392 Zeichenfolgen, Bibliographien alle Einträge durchsuchen nach, 805, 807 erstellen, 798, 799 Schlüssel durchsuchen nach, 805 Voreinstellungen, 800 Zeichensätze, fremdsprachige Dokumente, 557 Zeichnen Bögen, 628 Ellipsen, 628 Kreise, 628 Linien, 621, 622, 628, siehe auch epic-Paket; eepic-Paket Pfade, 628 Vektoren, siehe epic-Paket; eepic-Paket wissenschaftlicher Daten, siehe Graphen Zeilen Fonts für Zeilennummern, 188, 189 Nummerierung, 185, 186, 187, 188, 189, 190 Verweise auf Zeilennummern, 187, 188 Zeilenanzahl pro Seite, 207 Zeilen, Tabelle Abstände, 252, 253, 277, 279 Befehle, 269 gestalten, 250, 251 Zellen verbinden, 280, 281, 282, 290 Zeilenabstand, 426, siehe auch Zeilenvorschub Zeilenumbrüche, siehe auch Längenparameter Badness-Grad, 892 Bibliographien, 718 in Computercode, 182 in Programmlistings, 182 in Quellenverweisen, 718 in Tabellenzellen, 255 in Überschriften, 26, 33 in URLs, 100 numerische Quellenverweise, 718 vorletzte Zeile, 882 Zeilenvorschub, 426 einstellen, 114, 115, 383 Fontwechsel, 354 Zellen verbinden, Tabellenzeilen, 280, 281, 282, 290 zentrierte Absätze, 111, 112
1124
Befehls- und Begriffsindex
zerbrechliche Befehle, 674, 906, 927, 928, 946, 953, 955 AMS-LaTEX, 480 \zero (euro), 106 zerohyph.tex Datei (babel), 562 zeros Option (euro), 104 \zeta, 403, 502, 543 Ziffern, mathematische Symbole, 542–545 Zirkumflex (^), Kurzzeichen, 573 Zitate für Kapitelüberschriften (Mottos), 37, 38 Umgebung für, 154, 155 Zitierschemata Autor mit Jahr, 722–737 Anpassen von Bibliographien, 732 Anpassen von Quellenverweisen, 730, 731 ausführliche Verweise im Fließtext, 736, 737 Autor mit Nummer, Umschalten auf, 739 Autoren nur beim ersten Verweis auflisten, 729, 730 Definition, 708 elektronische Veröffentlichungen, 735 erzwingen, 734 fehlende Autorendaten, 733, 734 fehlende Jahresdaten, 733, 734 Geschichte, 724, 725 kein Umbruch zwischen Autorennamen, 731 Kurztitelformat, kombinieren mit, 758, 759 mehrfache Verweise, 728, 729 numerische Verweise, Umschalten auf, 739 unterstützte Stile, 735, 736 Verweise automatisch indexieren, 734 Autor mit Nummer, 737 Anpassen von Quellenverweisen, 740 Beschreibung, 737 Definition, 710 Sortierreihenfolge, 739 Verweise komprimieren, 739 Harvard, 708, 713 Kurztitel, 741–771 Übersetzerdaten, 769 Anpassen von Bibliographien, 762, 763, 764, 765, 766, 767 Anpassen von Quellenverweisen, 761, 762 ausführliche Quellenverweise im Fließtext, 748, 749–751 Autor mit Jahr, kombinieren mit, 758, 759 Autoren-Informationsfeld, 768 Beschreibung, 741 Definition, 708 Dissertationsjahr, 768 Editionsdaten, 768 einleitender Text, 746, 747 Einzug, 764, 765 Endnotenverweise, 752, 753 Fonts, 762, 763 Fußnotenverweise, 752, 753 Geschlecht der Autoren, 760, 761, 768 Gründerdaten, 768 Herausgeberdaten, 768 hochgestellte Zeichen, 761, 769
Befehls- und Begriffsindex
(Z)
Zitierschemata (Forts.) ibidem-Verweise, 753, 754–757, 765, 766 Interpunktion, 763, 764 Klammern, 761 Kommentare, 746, 747, 766, 768 Konfigurationsdateien, externe, 767 mehrsprachige Dokumente, 759, 760, 761 Querverweise, 757, 758 Rückverweise, 768 Sammlungen, 768 Seitenanzahl-Feld, 769 Seitengrenzen ignorieren, 755 Sortierreihenfolge, 769 Spaltenlayout, 765 Stildateien, 767–769 Titel eines Bandes, 769 Titel Kurztiteln zuordnen, 747, 748 Titel-Informationsfeld, 768, 769 Titelformat, 744–746 Trennzeichen und -wörter bei mehreren Autoren, 761, 762, 764 übersetzte Werke, 768 Unterstützung für Gesetzestexte, 769, 770, 771 URLs, 768, 769 Verweise automatisch indexieren, 746 zuletzt geändert-Feld, 769 numerische, 715–722 Anpassen von Quellenverweisen, 716, 717, 718, 719, 720 ausführliche Warnungen (verbose), 720 Definition, 710 Farben, 719 hochgestellte Zeichen, 720, 721, 722 in Überschriften, 722 in Legenden, 722 Interpunktion, 719, 721, 722 Klammern, 720 Layouts für unsortierte Verweise, 722 Leerzeichen in/vor Verweisen, 720 natbib-Paket, 737–740 Quellenverweise komprimieren, 739 Seitenbereiche deaktivieren, 720 Sortierreihenfolge, 718, 720, 739 Zeilenumbrüche, 718 zuletzt geändert-Feld, Bibliographien, 769 zusammenführen, Bibliographien, 808, 809 zusammengesetzte mathematische Symbole, 502–508 zusammengesetzte Seitenzahlen, Index, 686 Zusammenhalten von Material auf einer Seite, 242, siehe auch Gleitobjekte Zwischensteg, 203
1125
Personen
Abbott, Peter, 996 Achilles, Alf-Christian, 803 Aguilar-Sierra, Alejandro, 787 André, Jacques, 1012, 1027 Arseneau, Donald, xxix, 22, 23, 80, 90, 93, 99, 126, 240, 277, 285, 297, 308, 718, 720, 722, 773 Ashton, James, 703 Böttcher, Stephan, xxix, 185 Barr, Michael, 500, 1012 Barroca, Leonor, 305 Basso, Pierre, 779 Batada, Nizar, 817 Beccari, Claudio, 590, 1012 Beebe, Nelson, 633, 802, 803, 806, 807, 820, 1013 Beeton, Barbara, xxviii, 1013 Benguiat, Ed, 385 Bennett, Jr., Frank, xxix, 769, 1013 Benton, Morris, 386 Berdnikov, Alexander, 586, 1013 Berger, Jens, xxviii, 741 Berry, Karl, 383, 421, 431, 432, 1013 Beyene, Berhanu, 608
Bezos, Javier, xxix, 38, 62, 507, 1013 Bigelow, Charles, 398, 537 Bleser, Joachim, 311, 631 Borceux, Francis, 500, 1014 Bouche, Thierry, 1014 Bovani, Michel, xxix, 402, 531 Braams, Johannes, 3, 4, 199, 208, 211, 264, 558, 846, 857, 1014, 1025, 1131 Bradley, Neil, 1014 Breitenlohner, Peter, 1014 Burykin, Alexei, 1013 Butcher, Judith, 1014 Carlisle, David, 4, 34, 71, 82, 86, 92, 142, 220, 252, 259, 261, 267, 273, 274, 282, 297, 303, 502, 657, 857, 905, 1014, 1015, 1025, 1131 Carlisle, Matthew, 1131 Carnase, Tom, 385 Carter, Matthew, 386 Chen, Pehong, 1015 Clark, James, 633 Clasen, Matthias, 368, 1016 Clausen, Jörn, 422
Cochran, Steven, xxviii, 324, 325 Cohen, Tzafrir, 591 Corff, Oliver, 608 Cosell, Bernie, 90 Covington, Michael, xxix, 162 Dachian, Serguei, 608 Dahlgren, Mats, 308 Dair, Carl, 1016 Dalalyan, Arnak, 608 Daly, Patrick, xxix, 725, 736, 828, 1023 Detig, Christine, xxviii, 1133 Donin de Rosière, Emmanuel, 788, 1016 Dorj, Dorjpalam, 608 Downes, Michael, xxviii, xxix, 4, 146, 478, 483, 1016 Drucbert, Jean-Pierre, xxix, 58, 59, 82, 250 Duchier, Denys, 4, 846, 857, 1025 Duggan, Angus, 161 Eckermann, Matthias, xxix, 190 Engebretsen, Lars, 367 Esser, Thomas, xxix, 1002, 1003 Evans, Richard, 705
Personen
Fairbairns, Robin, xxix, 75, 121, 225, 995, 996 Fear, Simon, 277 Fenn, Jürgen, 308, 1016 Fernández, José Alberto, 776 Fine, Michael, 199 Finston, Laurence, 1017 Flipo, Daniel, 6, 106, 605 Franz, Melchior, xxviii, 94, 103, 220 Frischauf, Adrian, 664 Frutiger, Adrian, 386 Fujita, Shinsaku, 631, 1017 Fukui, Rei, xxix, 416, 1017 Fuster, Robert, 367 Gäßlein, Hubert, xxvi, xxix, 333, 657 Gaulle, Bernard, 608, 1017, 1027 Gibbons, Jeremy, 540 Gildea, Stephen, 204 Girou, Denis, 163, 172 Glunz, Wolfgang, 665 Gobry, Frédéric, 813 Goldberg, Jeffrey, xxix, 224, 298 Goldfarb, Charles, 1017 Goossens, Michel, 1017, 1018, 1130 Gordon, Peter, xxviii Goudy, Frederic, 94 Grätzer, George, 477, 1018 Graham, Ronald, 1018 Greenwade, George, 996, 1018 Gross, Sebastian, 335 ´ Thành, 633, 661, Hàn, Thê 1030 Hafner, Thomas, 1028 Hailperin, Max, 225 Hakobian, Vardan, 608 Hamilton Kelly, Brian, 633 Hansen, Thorsten, xxix, 776, 782 Haralambous, Yannis, 405, 557, 608, 655, 1018, 1028 Harders, Harald, xxix, 331, 397, 703 Harrison, Michael, 1015 Hart, Horace, 1019 Hefferon, Jim, 996
Heinz, Carsten, xxviii, 178 Hellström, Lars, xxviii, 431, 846, 1020 Helminck, Aloysius, 389 Henderson, Doug, 411 Henlich, Thomas, xxix, 412 Heslin, Peter, xxix, 88 Hoenig, Alan, 115, 1019 Holmes, Kris, 398, 537 Horak, Karel, 414 Horn, Berthold, 1019 Horn, Blenda, xxix Hufflen, Jean-Michel, 789, 1019 Ion, Patrick, 1014 Isozaki, Hideki, 630 Jackowski, Bogusław, 368 Janishevsky, Andrew, 586, 1013 Jeffrey, Alan, 4, 6, 388, 431, 533, 540, 1020 Jensen, Frank, 395, 408, 904 Jones, David, 478, 704, 735 Jurafsky, Dan, 59 Jurriens, Theo, 264 Kastrup, David, xxix, 124, 127, 129, 267 Kehr, Roger, 688, 1020 Keller, Arthur, 411 Kempson, Niel, 773, 787 Kernighan, Brian, 1020 Keryell, Ronan, 789 Kettler, Howard, 386 Khodulev, Andrey, 586 Kielhorn, Axel, 411 Kinch, Richard, 633 Kirsch, Sebastian, 395 Klöckl, Ingo, 414 Knappen, Jörg, 366, 373, 418, 1021 Kneser, Thomas, 308 Knuth, Donald, 1, 2, 109, 125, 184, 338, 343, 362, 365, 380, 394, 395, 410, 417, 428, 478, 531, 556, 845, 1018, 1021–1023, 1032 Kohm, Markus, xxix, 211, 244, 1023 Kolodin, Mikhail, 586, 1013
Kopka, Helmut, 1023 Kotz, David, 804 Krysztofiak, Claudia, xxv Kudlek, Manfred, 608 Kuhlmann, Volker, 211 Kummer, Olaf, 608 Kwok, Conrad, 626 Lagally, Klaus, 608, 1023 Lamport, Leslie, xxviii, 2, 123, 160, 204, 226, 657, 703, 708, 905, 1024, 1029 Lamy, Jean-François, 211 Lang, Edmund, 311, 631 Lapko, Olga, 586, 1013, 1024 Lavagnino, John, xxix, 132, 1024 Lavva, Boris, 591, 608 Lawrence, Steve, 803 Leichter, Jerry, 281 Lemberg, Werner, 585, 608, 1025 Lesenko, Sergey, 633 Levy, Silvio, 590, 1025 Liang, Franklin, 1025 Lindgren, Ulf, 36 Lingnau, Anselm, 300 Louarn, Philippe, 1012 Lubalin, Herb, 385 Luecking, Dan, 22 MacKay, Pierre, 1021 Maclaine-cross, Ian, 629 Makhovaya, Irina, 1024 Matiaske, Wenzel, 22 Mattes, Eberhard, 633 McCauley, James Darrell, 298 McDonnell, Rowland, 1020 McLean, Ruari, 1025 McPherson, Kent, 208 Mehlich, Michael, 103 Metzinger, Jochen, 608 Miedinger, Max, 386, 539 Miner, Robert, 1014 Mittelbach, Frank, 3, 4, 72, 121, 148, 193, 252, 295, 339, 395, 478, 846, 857, 992, 1015, 1017, 1025–1027, 1029, 1032, 1129 Morawski, Jens-Uwe, 1023
1127
PERSONEN
Morison, Stanley, 387 Nakashima, Hiroshi, 275 Neergaard, Peter Møller, 414 Neugebauer, Gerd, xxix, 808, 1027 Neukam, Frank, 211, 244 Nicole, Olivier, 1027 Niepraschk, Rolf, xxix, 333, 657, 1028 Nowacki, Janusz, 368 Oberdiek, Heiko, 82, 662 Orlandini, Mauro, 613 Pakin, Scott, 411, 540, 846, 1027 Pandey, Anshuman, 608 Patashnik, Oren, 786, 800, 835, 837, 1018, 1027 Phemister, Alexander, 385 Plaice, John, 608, 655, 1028 Plass, Michael, 109, 1021 Podar, Sunil, 619, 1028 Popineau, Fabrice, xxix Poppelier, Nico, 211, 1014 Porrat, Rama, 591, 1028 Puga, Diego, 389, 535 Purtill, Mark, 4, 339 Rahtz, Sebastian, 82, 163, 305, 339, 373, 381, 388, 390, 651, 662, 1018, 1020, 1030 Raichle, Bernd, 996, 1028 Raymond, Eric, 996 Reichert, Axel, 80 Reid, Brian, 2, 1028 Rhead, David, xxviii, 724 Rokicki, Tom, 632, 633, 655, 1028 Rose, Kristoffer, 500, 612 Rowley, Chris, xxix, 4, 125, 1015, 1025, 1026, 1028, 1029, 1132 Rozhenko, Alexander, xxix, 129 Rubinstein, Richard, 1029
1128
Ruedas, Thomas, 1003 Ruland, Kevin, 80 Ryan, Elizabeth, xxviii Ryu, Young, 399, 401, 533, 535 Samarin, Alexander, 1017 Schöpf, Rainer, 3, 4, 6, 161, 205, 339, 478, 996, 1026 Schandl, Bernd, xxix, 139 Schmidt, Walter, xxviii, xxix, 367, 381, 389, 395–398, 405, 409, 410, 421, 450, 539 Schnier, Thorsten, 724 Schröder, Martin, xxix, 112, 333 Schrod, Joachim, xxviii, 7, 122, 688, 804, 870, 1029, 1133 Schwarz, Norbert, 366 Sendoukas, Hippocrates, 633 Sgouros, Tom, 135 Shell, Michael, 662 Sivunen, Vesa, 1018 Slimbach, Robert, 387 Smith, Ralph, 388 Sommerfeldt, Axel, xxviii, 306, 317, 325 Sowa, Friedhelm, 115 Spit, Werenfried, 842 Spivak, Michael, 389, 478, 533 Stiels, Rebecca, xxv Stiff, Paul, 110, 1029 Straub, Pablo, 22 Svensson, Anders, 500, 1030 Swanson, Ellen, 478 Swift, Matt, 88, 90 Syropoulos, Apostolos, 590, 1012 Tanaka, Nobuya, 1017 Theiling, Henrik, 419, 420 Thimbleby, Harold, 1030, 1031 Thorup, Kresten, 904 Tinnefeld, Karsten, 37 Tobin, Geoffrey, 114 Trevorrow, Andrew, 633
Ulrich, Stefan, 135, 779 Umeki, Hideo, xxix, 214 Unruh, Dominique, 372 Vabishchevich, Nikolay, 819 Vabishchevich, Petr, 819 Valiente Feruglio, Gabriel, 1031 van Oostrum, Piet, xxix, 228, 232 Van Zandt, Timothy, 160, 163, 614 Velthuis, Frans, 608 Vieth, Ulrik, 368, 388, 395, 531, 1016, 1020 Vogel, Martin, 412 Vollmer, Jürgen, 872 Volovich, Vladimir, 366, 585, 586 Vulis, Michael, xxix, 1031 Waldi, Roland, 411 Ward, Nigel, 59 Wetmore, Alan, xxix Wicks, Mark, 661 Widmann, Thomas, 788 Williams, Graham, 308, 998, 1031 Williams, Peter, 724 Williamson, Hugh, 1031 Wilson, Peter, xxix, 51, 124, 208, 244, 245, 703, 1032 Winton, Neil, 199 Wolczko, Mario, 211, 613 Woli´ nski, Marcin, 846, 857, 1025 Wong, Wai, xxix Wonneberger, Reinhard, 1032 Wooding, Mark, 846, 857, 1025 Wujastyk, Dominik, 125, 1024 Zapf, Hermann, 387, 395, 407, 414, 450, 531, 535, 1021, 1032 Ziegler, Justin, 368, 394, 1032 Zierke, Reinhard, 996 Ziv, Alon, 591
Biographien
Stand 2004
Frank Mittelbach Frank Mittelbach studierte Mathematik und Informatik an der JohannesGutenberg-Universität in Mainz. 1989 begann er seine berufliche Laufbahn bei dem IT-Unternehmen EDS (Electronic Data Systems), wo er sich in einer neu gebildeten Gruppe mit TEX und anderen Werkzeugen für die Verarbeitung von Dokumenten befasste. In seiner derzeitigen Position ist er verantwortlich für Konzeption und Implementierung von Fernüberwachung und -administration verteilter Systeme und Netzwerke. Schon in seiner Studienzeit befasste er sich mit der automatischen Formatierung komplexer Dokumente im Allgemeinen und mit LaTEX im Besonderen. Diesen Themen widmet er noch immer so viel Zeit und Interesse, dass man dieses Aufgabengebiet guten Gewissens als seinen „zweiten Beruf“ und Vor TLC2. . . nicht nur als ein Hobby bezeichnen kann. Allein oder in Zusammenarbeit mit anderen entwickelte er viele verschiedene LaTEXErweiterungspakete, wie etwa AMS-LaTEX, doc, multicol und NFSS (das New Font Selection Scheme). 1989 hielt er im Rahmen der TUG-Konferenz an der Stanford University einen Vortrag über die Probleme mit LaTEX 2.09, der ihm die Verantwortung für die Pflege und weitere Entwicklung von LaTEX einbrachte. Die in diesem Zusammenhang erbrachten Leistungen sind allgemein als das LaTEX3-Projekt bekannt. In seiner Funktion als technischer Leiter des Projektes betreute Frank das 1994 herausgegebene erste größere Release von LaTEX 2ε sowie die bisher 15 weiteren Wartungsversionen dieser Software. Durch seine vielen veröffentlichten Fachartikel über LaTEX und über allgemeine Forschungsergebnisse auf dem Gebiet der automatischen Formatierung lernte er Peter Gordon von Addison-Wesley kennen. Peter und Frank gründeten die neue Buchreihe Tools and Techniques for Computer Typesetting (TTCT)
BIOGRAPHIEN
als deren Herausgeber Frank fungiert. Das englische Buch The LATEX Companion (19941 ) eröffnete die Reihe, deren Titel LaTEX mittlerweile in seiner ganzen Vielfalt erfassen. Weitere geplante Bände werden diesen Schwerpunkt auf andere Werkzeuge und Konzepte für den Textsatz und die Informationsverarbeitung ausweiten. 1990 legte Frank in dem Artikel E-TE X: Guidelines for further TE X extensions [128] die wichtigsten Mängel von TEX dar und betonte die Notwendigkeit, das System weiterzuentwickeln und die vielen offenen Fragen des automatischen Schriftsatzes weiter zu erforschen. Damit wurde das Thema der Änderung oder Erweiterung in der TEX-Gemeinschaft erstmals offen diskutiert und, nach anfänglichem Widerstand, ergaben sich daraus mehrere wichtige Projekte, wie etwa eTEX, Omega . . . und danach und NTS. Franks Interesse gilt nun der Integration dieser Früchte der für TEX entwickelten Erweiterungen, z.B. der Projekte Omega und eTEX, zu einem stabilen, gut gepflegten und großflächig verfügbaren Nachfolger von TEX, auf dem ein zukünftiges LaTEX3 aufsetzen kann. Frank und seine Frau Christel leben gemeinsam mit ihren drei Söhnen Arno (19 Jahre) und den Zwillingen Burkhard und Holger (6 Jahre) in Mainz.
Michel Goossens Anfang 1979 trat Michel Goossens mit einem frisch erworbenen Doktortitel in Hochenergiephysik eine Stelle am CERN an, dem Europäischen Labor für Teilchenphysik in Genf. Dort arbeitete er einige Jahre als Physiker in der Forschung, bevor er in den Software-Support der IT-Abteilung wechselte. Im Laufe der Jahre arbeitete er mit verschiedenen Satzsystemen: natürlich mit LaTEX, in letzter Zeit jedoch auch mit HTML/SGML/XML. Als Mitarbeiter eines großen internationalen Wissenschaftslabors verwendet ein Großteil der beim CERN arbeitenden Physiker und Ingenieure LaTEX für ihre Veröffentlichungen und Dokumentationen. Daher war Michel seit Ende der 1980er Jahre damit beschäftigt, Werkzeuge für TEX und insbesondere für LaTEX zu entwickeln und zu unterstützen. Ein Meilenstein in seinem LaTEX-Leben war ein Treffen mit Frank und Chris Ende 1992, als sie bei CERN einen Vortrag über LaTEX3 hielten. Im Anschluss an das Seminar zeigte Michel ihnen den „Local TEX Guide“, den Alexander Samarin und er geschrieben hatten. Er schlug vor, das Material zu erweitern und als Buch herauszugeben. Das war die Geburt der ersten Auflage des Buches The LATEX Companion, das Anfang 1994 veröffentlicht wurde. Aufgrund seiner Erfahrung mit Graphiken und Internetveröffentlichungen war Michel auch Mitautor der Werke The LATEX Graphics Companion (1997) und The LATEX Web Companion (1999), die beide in der TTCT-Reihe erschienen. Michel hat bereits verschiedene Funktionen in der TEX-Welt ausgeübt: 1995–2000 war er Präsident von GUTenberg, der französischen TEX1 1995
1130
in deutscher Sprache als Der LATEX-Begleiter erschienen.
Biographien
Benutzergruppe, und 1995–1997 zudem Präsident der TUG, der (globalen) TEX Users Group. Die letzten drei Jahre fungierte er bei CERN als Ansprechpartner für das EU-geförderte Projekt TIPS (Tools for Innovative Publishing in Science). Im Rahmen dieses Projektes untersuchte er, wie sich XML-Werkzeuge am besten in ein System zur effizienten Bearbeitung von elektronischen Informationen, insbesondere wissenschaftlichen Dokumenten, integrieren lassen. Er richtete sein besonderes Augenmerk auf das einander ergänzende Zusammenspiel von LaTEX und MathML für Formeln, SVG für Graphiken, PDF für eine hohe typographische Ausgabequalität und XHTML oder DocBook für die strukturelle Integration in Webumgebungen. Er lebt in der Nähe von Genf und verbringt seine Zeit gerne mit Lesen, einem guten Film, Museumsbesuchen und Spaziergängen am See oder in der schönen Landschaft.
Johannes Braams Johannes Braams studierte Elektronikingenieurwesen an der Technischen Universität in Enschede in den Niederlanden. Seine Magisterarbeit befasste sich mit dem Thema der Videokodierung nach dem Vorbild des menschlichen Sehsystems. Er begegnete LaTEX zum ersten Mal 1984 in den dr. Neher Laboratories der Niederländischen Telekom (PTT). Er war Gründungsmitglied der Niederländisch sprechenden TEX-Benutzergruppe NTG (1988) und beteiligte sich an der Entwicklung einer Lösung zum Setzen von Dokumenten in niederländischer Sprache. Nach der EuroTEX-Konferenz in Karlsruhe 1989 begann Johannes mit der Entwicklung des babel-Systems und ist seit der EuroTEX-Konferenz 1990 in Cork Mitglied des LaTEX3-Projektes. Außer für babel ist er derzeit für eine Reihe weiterer LaTEX-Erweiterungspakete zuständig, wie etwa die Dokumentenklassenfamilie ntgclass, das supertabular- und das changebar-Paket. Johannes arbeitet weiterhin bei der Niederländischen Telekom, die heute unter dem Namen KPN bekannt ist, und zwar hauptsächlich als ITProjektmanager. Er lebt mit seiner Frau Marion und den beiden Söhnen Tycho (11 Jahre) und Stephan (9 Jahre) in Zoetermeer.
David Carlisle David Carlisle studierte Mathematik an der University of Manchester und arbeitete dann als Forscher in den Fachbereichen Mathematik und Computerwissenschaften in Cambridge und Manchester. Dort setzte er seit 1987 LaTEX ein und wurde 1992, kurz vor Beginn der Entwicklungsarbeiten an LaTEX 2ε , Mitglied des LaTEX3-Teams. Er arbeitet seit mittlerweile mehr als sechs Jahren für die NAG Ltd. in Oxford, in der Hauptsache an Projekten zur Entwicklung von XML-Sprachen für die Darstellung mathematischer Ausdrücke und Dokumente. Er ist einer der 1131
BIOGRAPHIEN
Herausgeber der OpenMath-Spezifikation und wurde, als von der für MathML zuständigen W3C Math Working Group eingeladener Experte, zum Mitherausgeber der MathML 2-Empfehlung. Zurzeit ist er an einer vorgeschlagenen Aktualisierung des ISO/IEC Technical Report 9573 für „ISO-Zeichenentitäten“ beteiligt. Dieser ermöglicht, nur mithilfe von ASCII-Zeichen eine Vielzahl verschiedenster Zeichen in XML- und SGML-Dokumente einzugeben: beispielsweise erzeugt die Syntax γ das Symbol γ. David interessiert sich auch für XSLT: Er ist in der xsl-list-Diskussionsgruppe für diese Sprache sehr aktiv und war an vielen Büchern zum Thema XSLT als Lektor oder technischer Editor beteiligt. Er lebt zusammen mit seiner Frau Joanna und Sohn Matthew (4 Monate) in Oxfordshire.
Chris Rowley Wenn er nicht gerade seiner Reiselust frönt, lebt Chris in London zusammen mit seinem Weinkeller, seiner Keramiksammlung und seinen Erinnerungen. Zu letzteren gehören auch verschwommene Bilder der 1960er, als er nicht von der Mathematik lassen konnte und auch hin und wieder in die Welt der elektronischen Datenverarbeitung eintauchte, sowohl in die Theorie des Programmierens (damals ein noch ziemlich urwüchsiges Gebiet) als auch in die Zahlenverarbeitung (hübsche Luftschlangen aus der Lochmaschine). Erst Anfang der 1980er entdeckte er auf einem frisch besetzten Schreibtisch ein fernsehähnliches Objekt, das an einen Computer angeschlossen war, und mit dem er kreative und nützliche Dinge tun konnte, wie zum Beispiel eine einzelne Seite mit wunderschön gesetzten Formeln zu füllen. Das geschah nicht mithilfe von TEX – daher brauchte er zwei Tage für die eine Seite. Aber es zeigBei seiner Lieblingsbeschäftigung te ihm, was möglich war und brachte ihn dazu nachzudenken, wie er es einfacher erreichen konnte. Er ist sehr dankbar, dass er dann sehr bald über TEX stolperte und kurz darauf auch über LaTEX. Letzteres war eine besonders glückliche Fügung, da zu seinen Kollegen auch sechs Mathematik-Schreibkräfte gehörten, die etwas benötigten, mit dem sie arbeiten konnten. Ein paar Jahre später hörte er von jemandem namens Mittlebach-and-Schöpf (sic) in Mainz und der Rest ist . . . Fortsetzung folgt. Heute, fünfzehn Jahre später, ist Chris Rowley ein Seniormitglied der Faculty of Mathematics and Computing an der Open University in Großbritannien. Seit der Geburt des LaTEX3-Projektteams gehörte er ihm in leitender Funktion und als aktives Mitglied an. Damals war er noch so naiv zu glauben, alles würde in etwa zwei Jahren erledigt sein. Er war schon in zu vielen Gremien und Komitees, von denen das Editorial Board von Tools and Techniques for Computer Typesetting eine der angenehmsten Erfahrungen war. Zudem hat er verschiedenste Ämter in der TEX-Welt beehrt, unter anderem als Vorsitzender der UKTUG und Vizepräsident der TUG. Als größter internationaler Anbieter industrieller Massenbildung, die durch ein Studium von zu Hause oder am Arbeitsplatz einen Universitäts1132
Biographien
abschluss ermöglicht, entwickelte sich die Open University zu einer großen Multimedia-Verlagsgesellschaft. Für ihre Veröffentlichungen im Bereich Mathematik verfügt sie über ein, trotz wirtschaftlichen Wettbewerbs nur mit unzureichenden Ressourcen ausgestattetes, auf LaTEX basierendes Produktionssystem. Als Mathematiker, der bereits recht viel Ahnung von der Herstellung mathematischer Texte hatte, war Chris gerade der Richtige, um beim Aufbau dieses Systems Mitte der 80er Jahre in politischer, administrativer und technischer Hinsicht eine wichtige Rolle zu spielen. Heute widmet er sich intensiv der Forschung im Bereich der Automatisierung jeglicher Aspekte der Dokumentenverarbeitung, insbesondere der mehrsprachigen Typographie für vielseitige ! Dokumente. Im Laufe der Jahrzehnte hat er zum anderen jedoch auch an LaTEX-Systemen in Produktionsumgebungen seinen Teil an praktischer Arbeit geleistet und einigen Normierungsgremien, Firmen und Organisationen als Berater für die Digitalisierung mathematischer Texte gedient. All diese Aktivitäten haben Chris zu der Überzeugung geführt, dass es für TEX langfristig nur zwei wichtige Verwendungen gibt: zum einen als eine Art Umgangssprache innerhalb der weniger formalen elektronischen Kommunikation unter Mathematikern und zum anderen als Schatzkiste voller wunderbarer Algorithmen, besonders zum Setzen mathematischer Formeln. Davon abgesehen glaubt er nicht, dass eine Erweiterung des monolithischen Designs und der verschlungenen Modelle des TEX-Softwaresystems ein leistungsfähiges und flexibles Satzprogramm für das 21. Jahrhundert hervorbringen wird . . . aber es macht einfach mehr Spaß als Kreuzworträtsel.
Christine Detig & Joachim Schrod 1982, im Rahmen ihres Informatikstudiums, entdeckte Christine Detig TEX auf einer Bandspule und wurde so zu einem der Gründungsmitglieder von DANTE, der deutschen TEX-Benutzergruppe. Sie sammelte ihre ersten Erfahrungen mit Software am TEXArbeitsplatz, was zur Gründung eines kleinen Unternehmens führte, dass TEX-Distributionen vertrieb. Im Rahmen ihrer Arbeit als Forschungsassistentin an der TU Darmstadt verbreitete sie TEXnisches Wissen und schrieb ein Buch für TEXEinsteiger: Der LATEX Wegweiser. Mittlerweile hat sie auf zahlreichen internationalen Konferenzen innerhalb der bunten Menge von TEXies viele Freundschaften geschlossen. Dort kann man sie zu einem netten Schwätzchen über die Zukunft von TEX treffen. Auch Joachim Schrod arbeitet seit 1982 mit TEX und er ist ein weiteres Gründungsmitglied von DANTE. Er schrieb und unterstützte die internationale Version von LaTEX bis LaTEX 2ε auf der Bildfläche erschien. Joachim war an Unmengen von TEX-Aktivitäten beteiligt, von denen die meisten schon so lange zurück liegen, dass man sich kaum noch daran erinnert. Zu seinen dauerhafteren Leistungen zählen das CTAN und die TEX Directory Structure. Heute ist er Geschäftsführer eines Beratungsunternehmens, in dem er versucht zwischen Geschäftsleuten und Technikern zu vermitteln. Christine & Joachim leben in Rödermark in Deutschland. 1133
Entstehungsgeschichte des englischen und deutschen Buches
Das englische Original Dieses Buch beschreibt nicht nur das Dokumentenverarbeitungssystem LaTEX, es wurde auch damit gesetzt. Dabei leisteten die im Buch behandelten Pakete tatkräftige Unterstützung, ergänzt durch ein beachtliches Maß an zusätzlicher LaTEX-Programmierung. Als Grundschrift diente Lucida Bright (Bigelow/Holmes) mit einem Schriftgrad von 8.8pt/12pt. Die zweite wichtige Schrift ist die dicktengleiche European Modern Typewriter (Y&Y) in 10.06pt/12pt. Diese Kombination wurde gewählt, um auf jeder Seite eine vernünftige Menge an Material unterzubringen und das Erscheinungsbild der „Schreibmaschinenschrift“ optisch auszugleichen: Man soll sie gut erkennen können, ohne dass der Kontrast störend wirkt. Der Text der Beispiele wurde weitgehend in Adobe Times Roman gesetzt, die serifenlosen Teile in Helvetica. Die Formeln in den Beispielen erscheinen in den mittlerweile klassischen Mathematikfonts der Computer Modern, so dass die Symbole den meisten Mathematikern vertraut vorkommen werden. Beispiele, anhand derer die Verwendung anderer Schriften erläutert wird, bilden hier natürlich die Ausnahme. Das Buch wurde mit dem LaTEX-Basisrelease vom 1.12.2003 gesetzt. Die Engine darunter bildete das Programm pdfTEX, das jedoch so eingestellt war, dass es keine PDF-Ausgabe erzeugt: Es wurde vielmehr wegen seiner Fähigkeit, einen „optischen Randausgleich“ vorzunehmen, ausgewählt. Dieses typographische Bonbon (pdfcprot-Paket) kam dem Textkorpus zugute. (Wie man dazu im Einzelnen verfahren muss, ist in [161, 162] nachzulesen.) Zum Vergleich empfiehlt sich ein Blick auf die Seiten 987–989, da diese ohne optischen Randausgleich (und in kleinerer Schrift) gesetzt wurden. Für die Produktion dieses Buchs waren angepasste Klassen- und Paketdateien erforderlich. Außerdem wurde ein komplexer Herstellungsprozess benötigt, der auf einer Reihe von durch ein „Makefile“ gesteuerten „Shell-Skripts“ basierte. Eine der wichtigsten Aufgaben dieser Skripte war es, dafür zu sorgen,
Grundschrift
Beispielschrift
Optischer Randausgleich
Der Produktionszyklus
ENTSTEHUNGSGESCHICHTE
dass jedes einzelne gesetzte Beispiel auch wirklich anhand des dazugehörigen Quellcodes erzeugt wurde. Dieser Herstellungsprozess verlief folgendermaßen: Beispiele erzeugen
• Bei der ersten Verarbeitung eines Kapitels erzeugte LaTEX für jedes Beispiel eine Datei mit einem Quelldokument. Das sind die „Beispieldateien“ auf der CD-ROM. • Der Herstellungsprozess ließ dann jede einzelne dieser Beispieldateien von LaTEX verarbeiten (auch unter Verwendung von BIBTEX oder anderen gegebenenfalls erforderlichen Erweiterungen), und zwar so oft wie nötig, um die endgültige gesetzte Form zu erhalten. Schließlich erzeugte er mithilfe von dvips entweder eine oder zwei EPS-Dateien mit dem „gesetzten Beispiel“. • Beim nächsten LaTEX-Lauf des entsprechenden Kapitels wurde dann jede dieser EPS-Dateien automatisch an der richtigen Stelle im Buch, neben (oder nahe) dem zugehörigen Quellcode, platziert. Damit war der Prozess aber noch nicht abgeschlossen: Die horizontale Position einiger Elemente, insbesondere der Beispiele, hängt nämlich davon ab, ob sie auf einer linken oder rechten Seite erscheinen. Hier wurde das in Beispiel A-3-9 auf Seite 909 angewandte Verfahren benutzt. Damit waren mindestens noch einmal ein oder zwei zusätzliche Läufe erforderlich, bevor LaTEX alle Querverweise richtig aufgelöst und die Beispiele endlich passend in den Rändern platziert hatte.
Das war so ziemlich das Äußerste an möglicher Automatisierung. Die vielen großen Beispiele, die sich weder umbrechen ließen noch gleiten durften, machten das Auffinden günstiger Seitenumbrüche zu einer echten Herausforderung. Aus diesem und anderen Gründen war das abschließende Layout des Buches mit einem ziemlichen Aufwand verbunden und erforderte sogar kleinere Textänderungen (auf etwa 10% der Seiten), um unschöne Zeilen- und Seitenumbrüche zu vermeiden (wie etwa Absätze mit nur einem Wort in der letzten Zeile oder hässliche Trennungen am Seitenende). Doppelseiten durften gegebenenfalls um eine Zeile länger oder kürzer sein und in vielen Fällen wurden das Layout und der Inhalt von Beispielen manuell angepasst, um geeignete Seitenumbrüche zu erhalten. Hier einige statistische Näherungswerte zum Seitenlayout: 45 längere Etwas Statistik Doppelseiten, 25 kürzere Doppelseiten, 230 erzwungene Seitenumbrüche, 400 Anpassungen der vertikalen Ausrichtung, 100 sonstige manuelle Änderungen (abgesehen von Umformulierungen). Für den Index der „Befehle und Begriffe“ wurde zunächst eine Version Der Index des Buches mit Zeilennummern gedruckt und an einen Indexexperten übergeben. Dieser erzeugte „begriffliche Indexeinträge“, die dann in die Quelldateien des Buches eingefügt wurden. Das war ein echter Beweis für die Qualität des lineno-Paketes, welches, trotz der Komplexität des Buches und der Verwendung von speziellen Makros für den Seitenumbruch, auf Anhieb funktionierte. Der Index selbst wurde dann mit MakeIndex erzeugt, da xindy zu diesem Zeitpunkt noch nicht zur Verfügung stand. Aufgrund der komplexen Indexgestaltung (farbige Seitenzahlen usw.) musste die Indexdatei jedoch mit Handarbeit
1136
Entstehungsgeschichte
Skripts vor- und nachbearbeitet werden, bevor sie schließlich in ihrer endgültigen Form vorlag. Danach wurde sie mithilfe einer verbesserten Version des multicol-Paketes gesetzt, das die Fortsetzungszeilen hinzufügte – auch diese Funktion lässt sich vielleicht eines Tages als eigenes Paket bereitstellen.
Die deutsche Übersetzung Für die deutsche Übersetzung wurde das Seitenlayout an den Stil des Verlags Pearson Studium angepasst. Da der Satzspiegel, wie in Europa üblich, schmaler als der des Originals ist, stellte dies einige zusätzliche Anforderungen an den Seitenumbruch. Fast alle Beispiele mussten umgearbeitet werden und viele wuchsen aufgrund horizontalen Platzmangels in die Vertikale, was bei langen Kapiteln eine akzeptable Materialverteilung ohne größere Lücken, Witwen und Waisen nicht gerade erleichterte. Die Grundschrift wurde mit 8.5pt/11.72pt leicht verkleinert. Die neuen Kolumnentitel wurden wie schon zuvor mit fancyhdr erstellt, während für die Erstellung des Satzspiegels geometry zum ersten Mal zum Einsatz kam. Die netten Inhaltsübersichten am Anfang eines jeden Kapitels sind „courtesy of“ titletoc, das auch benutzt wurde, um die Verzeichnisse im Vorspann zu setzen. Um die Arbeit in der Druckerei zu erleichtern, kam crop zum Einsatz. Passende BIBTEX-Stile für die Beispiele in Kapitel 12 und die Bibliographie wurden mit custom-bib erstellt. Viele der anderen, in diesem Buch beschriebenen Pakete aus allen Kapiteln, sind schon in der englischen Originalausgabe zum Einsatz gekommen, insgesamt sind es mehr als dreißig. Die im Abschnitt zum englischen Original beschriebene Maschinerie kam auch in dieser Ausgabe zum Einsatz, d.h. alle Beispiele wurden wie beschrieben automatisch generiert. Als einziger Unterschied wurden normalerweise zusätzlich babel und inputenc geladen, um der deutschen Sprache und ihren Umlauten Rechnung zu tragen. Da der Index schon in die Buchquellen eingearbeitet war, musste er diesmal „nur“ übersetzt werden – nur in Anführungszeichen, weil sich in der deutschen Sprache ganz neue Wortgruppierungen ergeben und so doch viele Einträge hinzugefügt oder verändert werden mussten. So hatte etwa „leading“ im Englischen die Unterpunkte „blanks“ (führende Leerzeichen) und „vertical spacing“ (Zeilenvorschub, Durchschuss), um nur eines der vielen Beispiele aufzuzeigen. Der aus Quellen generierte Rohindex wurde weiterhin mit MakeIndex verarbeitet, da alle Mechanismen schon passend in den Makefiles vorhanden waren. Interessant ist, dass der manuelle Aufwand für den Satz des Buches in etwa dem des Originals entspricht: diesmal gab es 42 verlängerte und 18 verkürzte Doppelseiten und die Anzahl der erzwungenen Seitenumbrüche lag mit 228 sogar leicht niedriger. Im Gegensatz zur englischen Ausgabe wurde diesmal verstärkt mit \looseness experimentiert (insgesamt an 35 Stellen), typischerweise um ein einzelnes, oft sogar getrenntes Wort in der letzten Zeile eines Absatzes zu entfernen. Wie schon beim englischen Original wurde bei schlechtem Zeilenfall das Privileg des Autors ausgenutzt, dem es (im Gegensatz zum armen Setzer) erlaubt ist, seinen Text beliebig umzuformulieren, um typographische Monster zu vermeiden – die Anzahl solcher „Verbesserungen“ liegt auch diesmal deutlich im dreistelligen Bereich.
Angewandte Ratschläge aus diesem Buch
Die Beispiele
Der Index
Mehr Statistik
1137
CD-ROM Garantiebeschränkungen TEX-Live ist eine freie Software. Vertriebs- und allgemeine Information findet man unter:
http://www.tug.org/tex-live/ Das Software Medium wird auf einer „AS IS“ Basis ohne Garantie vertrieben. Weder die Autoren, noch die Übersetzer, noch die Softwareentwickler, noch die veröffentlichende Firma, noch Pearson Education Deutschland GmbH übernimmt irgendeine Vertretung oder Garantie (weder ausgedrückt noch impliziert) für die Softwareprogramme, ihre Qualität, Genauigkeit oder Einsetzbarkeit für bestimmte Zwecke. Deswegen übernehmen weder die Autoren, noch die Übersetzer, noch die Softwareentwickler, noch Pearson Education Deutschland GmbH irgendeine Verantwortung anderen Personen oder juristischen Personen gegenüber bezüglich Haftpflicht, Verlust oder Schaden, der angeblich oder tatsächlich direkt oder indirekt durch Programme verursacht wird, die in diesem Medium enthalten sind. Dies beinhaltet, ist aber nicht begrenzt, auf die Unterbrechung von Diensten (Programmabsturz), den Verlust von Daten, den Verlust von Unterrichtszeit, den Verlust von Beratungszeit oder im Voraus bezahlten Honoraren oder von aus dem Gebrauch dieser Programme folgenden Schäden.
Copyright Daten, Texte, Design und Grafiken dieses eBooks, sowie die eventuell angebotenen eBook-Zusatzdaten sind urheberrechtlich geschützt. Dieses eBook stellen wir lediglich als persönliche Einzelplatz-Lizenz zur Verfügung! Jede andere Verwendung dieses eBooks oder zugehöriger Materialien und Informationen, einschliesslich x
der Reproduktion,
x
der Weitergabe,
x
des Weitervertriebs,
x
der Platzierung im Internet, in Intranets, in Extranets,
x
der Veränderung,
x
des Weiterverkaufs
x
und der Veröffentlichung
bedarf der schriftlichen Genehmigung des Verlags. Insbesondere ist die Entfernung oder Änderung des vom Verlag vergebenen Passwortschutzes ausdrücklich untersagt! Bei Fragen zu diesem Thema wenden Sie sich bitte an:
[email protected] Zusatzdaten Möglicherweise liegt dem gedruckten Buch eine CD-ROM mit Zusatzdaten bei. Die Zurverfügungstellung dieser Daten auf unseren Websites ist eine freiwillige Leistung des Verlags. Der Rechtsweg ist ausgeschlossen. Hinweis Dieses und viele weitere eBooks können Sie rund um die Uhr und legal auf unserer Website http://www.informit.de herunterladen