Eigene Dokumentklassen
Um die eigenen Dokumente übersichtlich zu halten und lange, komplexe Präambeln zentral zu verwalten, empfiehlt sich die Erstellung eigener Stile (.sty
) und Dokumentklassen (.clst
). Grundsätzlich sind diese beiden Source-Typen ähnlich strukturiert sind wie kompilierbare LaTeX-Dokumente. Im Gegensatz zu diesen bestehen sie allerdings nur aus Präambeln, außerdem werden Pakete etwas anders eingebunden (\RequirePackage
statt \usepackage
).
Alle Dokumentklassen beginnen mit einer Deklaration des benötigten TeX-Formates (hier: LaTeX) und der Angabe, welches Paket sie selbst bereitstellen (mit einem kurzen Kommentar als optionalem Argument):
\NeedsTeXFormat{LaTeX2e} \ProvidesClass{myclass}[2003/09/21 v. 1.0 A personal documentclass]
Stile werden entsprechend eingeleitet:
\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{mypackage}[2003/09/21 v. 1.0 A personal LaTeX package (aka style)]
In diesem Abschnitt stelle ich exemplarisch zwei meiner eigenen Dokumentklassen vor. Eine dieser Klassen (mitschrift.cls
), dient zur Formatierung von allgemeinen Mitschriften, die andere (lingout.cls
) für linguistische Handouts (s. auch den Abschnitt LaTeX für Linguisten). Beide Klassen greifen ihrerseits auf Stile zurück (standpack.sty
bzw. lingpack.sty
), die eine Reihe von Optionen für verschiedene Klassen bündeln.
standpack.sty
\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{standpack}[2003/09/21 v. 1.0 Standardmakros fuer Formatierung]
Der erste Abschnitt des Stils lädt die Pakete für die Dokumentsprache und die Textkodierung. Hinzu kommt ein Paket für die Schrift Adobe Garamond Pro:
\RequirePackage[english,ngerman]{babel} \RequirePackage[utf8]{inputenc} \PrerenderUnicode{äüößÄÜÖß–} %Adobe Garamond als Standardschrift, Euler als Mathfont, T1 encoding und textcomp \RequirePackage{agaramond}
Es folgen Pakete zum Einbinden von Grafiken, für die Erstellung von mehrseitigen und elegant formatierten Tabellen, für Hyperlinks und flexible Unterstreichungen:
\RequirePackage{longtable} \RequirePackage{booktabs} \RequirePackage{graphicx} \graphicspath{{graphics/}} \RequirePackage{float} \RequirePackage{rotating} \RequirePackage{color} \definecolor{black}{gray}{0} % 10% gray \RequirePackage[colorlinks=true,linkcolor=black,citecolor=black,urlcolor=black,breaklinks=true, pdfpagemode=None,pdfview=FitH,pdfstartview=FitH]{hyperref} \RequirePackage[normalem]{ulem}
Schließlich die PSTricks, das beste Illustrationspaket für LaTeX (einziger Nachteil: als PostScript-basiertes Paket setzt es die aufwändige Kompilation mit latex, dvips und ps2pdf voraus, pdflatex wird nicht unterstützt). Ich binde mit pst-all alle Subpakete ein, was die Kompilation weiter verlangsamt:
\RequirePackage{eepic} \RequirePackage{pst-all} \psset{linewidth=0.5pt,nodesep=2pt}
Das Natbib-Paket erlaubt die individuelle Formatierung von bibliographischen Hinweisen, die mit BibTeX erstellt werden. Der Befehl \bibpunct
sieht gefährlich aus, ist aber ganz harmlos:
\RequirePackage{natbib} \bibpunct[:]{(}{)}{;}{a}{}{,}
Auf die Pakete folgen zwei Einstellungen zur Tiefe der Überschriftennummerierung und des Inhaltsverzeichnisses:
\setcounter{secnumdepth}{5} \setcounter{tocdepth}{5}
Und schließlich ein einsames, selbstdefiniertes Kommando, das Autornamen nach Zitaten rechtsbündig formatiert:
\newcommand{\autor}[1]{\begin{flushright}#1\end{flushright}}
lingpack.sty
Dieser Stil ergänzt die Pakete und Kommandos aus standpack.sty
in linguistischer Hinsicht.
\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{lingpack}[2003/09/21 v. 1.0 linguistische Makros]
Das ifthen
-Paket erlaubt – wie der Name schon sagt – die Verwendung von If-Schleifen in selbstdefinierten Befehlen und Makros:
\RequirePackage{ifthen}
TIPA ist ein Paket für phonetische Symbole, das sehr komfortabel, aber nicht sehr kompatibel ist. Die Option safe
stellt sicher, dass es trotzdem mit den meisten Paketen harmoniert:
\RequirePackage[safe]{tipa}
Das Paket gb4e
dient zur Beispielnummerierung und Glossierung, jambox
erlaubt linksbündige Kommentare in festgelegtem Abstand zu den Beispielen:
\RequirePackage{gb4e} \primebars \RequirePackage{jambox}
Auch wenn alle Welt für tree-dvips
schwärmt: Ich bleibe bei qtree
!
\usepackage{qtree} \qtreecenterfalse
Jetzt folgen die selbstdefinierten Makros. Die meisten der Makros benötigen den mathmode und verwenden die ifthen
-Syntax, um den Modus zu testen. Zunächst ein Makro für Bewegungsspuren:
\newcommand{\trace}[1][i]{% \ifmmode \mathrm{t_{#1}}% \else t$_\mathrm{#1}$% \fi }
Makros für Indizes und hochgestellte Indizes:
\newcommand{\dex}[1][i]{% \ifmmode _\mathrm{#1}% \else $_\mathrm{#1}$% \fi } \newcommand{\hdex}[1][i]{% \ifmmode ^\mathrm{#1}% \else $^\mathrm{#1}$% \fi }
Weil mich die X-bar-Befehle aus gb4e
nicht völlig zufrieden stellen, habe ich mir eigene definiert:
\newcommand{\quer}[1]{% \ifmmode \overline{\mathrm{#1}}% \else $\overline{\mathrm{#1}}$% \fi }
Ein Makro für semantische Doppelklammern (nimmt als erstes Argument die Indizes für Modell und Variablenbelegung, als zweites den Inhalt der Doppelklammern)
\newcommand{\sem}[2][M\!,g]{% \ifmmode [\![ \mathrm{#2}]\!]^{\mathrm{#1}}% \else $[\![ \mathrm{#2}]\!]^{\mathrm{#1}}$% \fi }
Und schließlich ein Makro für linke Klammern mit tiefgestellter Kennung (z.B. CP, IP):
\newcommand{\lbra}[1]{% \ifmmode $[$_{\mathrm{#1}}% \else [$_{\mathrm{#1}}$% \fi }
mitschrift.cls
Mit Hilfe von standpack.sty
und der KOMA-Klasse scrartcl
gestaltet sich die Dokumentklasse mitschrift.cls
erfreulich übersichtlich.
\NeedsTeXFormat{LaTeX2e} \ProvidesClass{mitschrift}[2003/09/22 v. 1.0 Dokumentenklasse fuer normale Mitschriften]
Zunächst wird die der neuen Klasse zugrundliegende Klasse mit einigen Optionen geladen:
\LoadClass[12pt,a4paper,halfparskip]{scrartcl}
Nun folgt das Paket scrpage2
, das die Formatierung von Kopf- und Fußzeilen regelt:
\RequirePackage[automark,autooneside]{scrpage2}
Die KOMA-Klassen verwenden normalerweise serifenlose Schriften für die Überschriften. Das mag ich nicht:
\setkomafont{sectioning}{\normalfont\bfseries} \setkomafont{descriptionlabel}{\normalfont\bfseries}
Die folgenden Befehle beziehen sich ebenfalls auf Kopf- und Fußzeilen (sie lôschen die Voreinstellung und geben explizit an, was in den Kopfzeilen erscheinen soll):
\pagestyle{scrheadings} \clearscrheadfoot \ihead{\headmark} \ohead{\pagemark}
Und schließlich werden mit standpack.sty
alle dort aufgeführten Pakete und Einstellungen in einer einzigen Zeile geladen:
\RequirePackage{standpack}
lingout.cls
Ähnlich übersichtlich gestaltet sich die Klasse für linguistische Handouts:
\NeedsTeXFormat{LaTeX2e} \ProvidesClass{lingout}[2003/09/22 v. 1.0 Dokumentenklasse fuer linguistische Handouts]
Die folgenden Zeilen dienen dazu, alle im Dokument selbst verwendeten Klassenoptionen an die Basisklasse scrartcl
weiterzuleiten:
\DeclareOption*{% \PassOptionsToClass{\CurrentOption}{scrartcl}% } \ProcessOptions\relax
Der Rest des Codes dürfte sich selbst erklären:
\LoadClass[12pt, DIV12, a4paper, smallheadings, halfparskip]{scrartcl} \setkomafont{sectioning}{\normalfont\bfseries} \setkomafont{descriptionlabel}{\normalfont\bfseries} \pagestyle{plain} \RequirePackage{standpack} \RequirePackage{lingpack}