Was LaTeX in einer sprachwissenschaftlichen Arbeit wirklich unentbehrlich macht, sind nicht Bäume oder Lautzeichen, sondern die Nummerierung. „Siehe (1)“, „im Gegensatz zu (3b)“ – Beispielnummern werden aus dem Fließtext immer wieder aufgerufen, und ein eingeschobenes Beispiel verschiebt alles Folgende. Von Hand ist das nicht zu leisten, und so landen Linguistinnen und Linguisten bei gb4e und expex, den Paketen für nummerierte Beispiele und Glossen. Diese Seite ist um diese Nummerierungsmaschinerie herum aufgebaut und behandelt interlineare Glossen (\gll und \glt), IPA-Transkription (tipa und Unicode), OT-Tableaus und Merkmalsstrukturen. Festgehalten sind auch die Fallen, die auf TeX Live 2024 tatsächlich zuschnappten: Ein einziger Unterstrich in einem Labelnamen bringt gb4e dazu, ohne jedes PDF abzustürzen.
Nummerierte Beispiele und Unterbeispiele: zwei Wege zu (1) und (1a)
Lebendig sind praktisch zwei Optionen: gb4e und expex. In gb4e reiht man \ex innerhalb einer exe-Umgebung und verschachtelt dort, wo Unterbeispiele nötig sind, eine xlist-Umgebung – unter (1) erscheinen a. und b., und Verweise stützen sich auf das übliche \label/\ref von LaTeX. expex geht ganz anders vor: Beispiele werden von \pex … \xe eingefasst, Unterbeispiele nehmen \a, und Verweise laufen über ein eigenes \getref statt über LaTeXs \ref. Die Wahl hängt fast vollständig davon ab, ob man auf LaTeXs Verweismechanik aufsetzen will oder mit einer eigenen zufrieden ist. Auch linguex (v4.3) und covington (v2.14) stecken in TeX Live 2024; ersteres fällt durch eine knappe, interpunktionsartige Notation wie \ex. auf.
| Paket | In TeX Live 2024 | Verweismechanik | Worauf zu achten ist |
|---|---|---|---|
gb4e | ja (das Änderungsprotokoll endet 2010) | Standard-LaTeX \label / \ref | stürzt bei einem Unterstrich fatal ab; braucht \noautomath |
expex | ja (v5.1b) | eigenes \getref / \getfullref / \nextx | LaTeXs \ref greift nicht, \cref ebenso wenig |
langsci-gb4e | ja (Datum 2022-10-21) | wie gb4e | eine von Language Science Press gepflegte Überarbeitung von gb4e |
linguex | ja (v4.3) | Standard-LaTeX | knappe, interpunktionsartige Notation wie \ex. |
covington | ja (v2.14) | Standard-LaTeX | ein alteingesessener Werkzeugkasten für Beispiele, Glossen und Zeichen |
avm | nein | — | Mannings avm.sty ist nicht enthalten; stattdessen langsci-avm |
Interlineare Glossen mit gb4e setzen: \gll und \glt
Der Kern einer interlinearen Glosse ist die senkrechte Ausrichtung Wort für Wort, und genau das leistet \gll. In die erste Zeile kommen die Quelldaten, in die zweite die Wort-für-Wort-Glosse, jede mit \\ abgeschlossen; gb4e zerlegt beide an den Leerzeichen und stellt einander entsprechende Wörter untereinander. Die freie Übersetzung übernimmt \glt in einer dritten Zeile (für drei ausgerichtete Zeilen dient \glll). Zu beachten ist, dass die Einheit der Ausrichtung „ein durch Leerzeichen getrenntes Wort“ ist. Verlangt ein Quellwort zwei Glossenwörter, verbindet man sie mit einem Punkt zu einem Token, this.one – so schreiben es auch die Leipzig Glossing Rules vor, und das in TeX Live enthaltene Paket leipzig definiert die üblichen Abkürzungen wie \Erg und \Pfv. Grammatikalitätsmarken werden in eckigen Klammern übergeben, etwa \ex[*]{...}. Für ein einzelnes Beispiel gibt es zudem eine Kurzform ohne exe-Umgebung: einfach in \ea … \z einfassen.
\documentclass{article}
\usepackage{gb4e}
\noautomath % see the next section: this line prevents a fatal error
\begin{document}
\begin{exe}
\ex \label{ex:one}
\gll Kore wa rei desu.\\
this TOP example COP\\
\glt `This is an example.'
\begin{xlist}
\ex \label{ex:sub} A sub-example, printed with the label a.
\end{xlist}
\ex[*]{ Sleep colorless green ideas furiously. }
\end{exe}
See (\ref{ex:one}) and (\ref{ex:sub}).
\end{document}Wenn gb4e mit ! TeX capacity exceeded, sorry [parameter stack size=20000]. abstürzt
Die Ursache ist der Unterstrich, und die Abhilfe ist eine Zeile: \noautomath unmittelbar nach \usepackage{gb4e}. Schon ein schlichtes \label{ex_one} bringt pdfLaTeX auf TeX Live 2024 so zu Fall: ! TeX capacity exceeded, sorry [parameter stack size=20000]., im Traceback taucht \gb@ifnextchar auf, und der Lauf endet mit ==> Fatal error occurred, no output PDF file produced! Es entsteht kein einziges Byte PDF. Dasselbe passiert bei \cite{smith_2020} – Autor und Jahr mit einem Unterstrich zu verbinden ist ein völlig gewöhnlicher BibTeX-Schlüssel, sodass das Dokument in dem Moment zerbricht, in dem ein Literaturverzeichnis hinzukommt. Mit \noautomath laufen beide Fälle durch.
Warum das geschieht, steht in gb4es eigenem Quelltext. gb4e macht _ und ^ zu aktiven Zeichen, damit Tief- und Hochstellungen im laufenden Text geschrieben werden können. Der Effekt ist wirklich beeindruckend: Mit geladenem gb4e lassen sich NP_i, t_j und X^0 direkt in einen Absatz tippen. Ohne gb4e ergibt dieselbe Eingabe ! Missing $ inserted. – und für eine syntaktische Arbeit, in der indizierte Kategoriensymbole hunderte Male vorkommen, ist das eine echte Erleichterung. Der Preis ist ein Frontalzusammenstoß mit jedem anderen Makro, das _ in seiner TeX-Bedeutung verwendet. Eine Notiz im Quelltext sagt genau das: Die Datei erlaubt _ und ^ im normalen Text und muss daher nach jeder Datei geladen werden, die sie in ihrer TeX-Bedeutung nutzt; als Abschaltung wird \noautomath genannt. Das ist der Gehalt des bekannten Rats, „gb4e zuletzt in der Präambel zu laden“.
\cref druckt ?? 1: cref reference format for label type 'xnumi' undefined
Die Abhilfe sind zwei Zeilen in der Präambel: \crefname{xnumi}{example}{examples} und \crefname{xnumii}{example}{examples}. Lädt man gb4e zusammen mit cleveref, gelingt die Übersetzung ohne einen einzigen Fehler – doch \cref{ex:one} erscheint als ?? 1. Ein Blick in die .aux zeigt \newlabel{ex:one@cref}{{[xnumi][1][]1}...}, und im Log steht LaTeX Warning: cref reference format for label type 'xnumi' undefined. cleveref hält für jede Zählerart eine Benennung bereit, kennt aber gb4es Beispielzähler xnumi (Unterbeispiele: xnumii) nicht und setzt daher ?? an die Stelle des Namens. Da es sich um eine Warnung und nicht um einen Fehler handelt, geht der Lauf durch – so entsteht ein eingereichtes PDF mit zweihundert Vorkommen von ?? 1. Mit den beiden Zeilen druckt \cref{ex:one} dann example 1 und \cref{ex:sub} example 1a.
Der oft im selben Atemzug genannte Konflikt mit hyperref ließ sich auf TeX Live 2024 dagegen nicht reproduzieren. Ob \usepackage{hyperref} vor oder nach gb4e steht: Beispiele mit \gll werden fehlerfrei gesetzt, und \ref liefert korrekt (1). Behauptungen im Netz, „gb4e und hyperref lassen sich nicht zusammen verwenden“, wirken – zumindest für die hier mitgelieferten Fassungen – veraltet. Das Prinzip der Ladereihenfolge gilt trotzdem weiter: Wer \noautomath nicht verwendet, lädt gb4e nach jedem anderen Paket, das _ benutzt.
\documentclass{article}
\usepackage{gb4e}
\usepackage{cleveref}
% Without these two lines \cref prints "?? 1" and the run still succeeds:
% LaTeX Warning: cref reference format for label type `xnumi' undefined
\crefname{xnumi}{example}{examples} % top-level examples: (1), (2), ...
\crefname{xnumii}{example}{examples} % sub-examples: (1a), (1b), ...
\begin{document}
\begin{exe}
\ex \label{ex:one} A top-level example.
\begin{xlist}
\ex \label{ex:sub} A sub-example.
\end{xlist}
\end{exe}
See \cref{ex:one} and \cref{ex:sub}. % -> "example 1 and example 1a"
\end{document}Die Verweismechanik von expex: \getref, \getfullref, \nextx
In expex werden Labels nicht mit \label, sondern in spitzen Klammern direkt hinter dem Beispiel geschrieben: \pex<top>, für ein Unterbeispiel \a<one>. Verwiesen wird mit \getref{top}, was 1 ergibt; ein Unterbeispiel trägt das übergeordnete als Präfix, also liefert \getref{top.one} ein a, und \getfullref{top.two} liefert 1b – Hauptnummer und Unterkennung zusammengefasst. Für Vorwärtsverweise gibt es \nextx (die Nummer des nächsten Beispiels) und \lastx (die des vorigen), sodass „siehe (1) unten“ ohne Nennung einer Zahl geschrieben werden kann. Lässt sich ein Verweis nicht auflösen, erscheint in der Ausgabe [one] in eckigen Klammern, und im Log steht ====> EXPEX WARNING: tag one is called but not defined. – darin, einen ungelösten Verweis nicht stillschweigend durchzulassen, ist dies sicherer als die Kombination mit cleveref.
\documentclass{article}
\usepackage{expex} % lives in tex/generic: works under plain TeX too
\begin{document}
Consider (\nextx). % forward reference to the example below
\pex<top>
\a<one> \begingl
\gla Kore wa rei desu.//
\glb this TOP example COP//
\glft `This is an example.'//
\endgl
\a<two> A second sub-example.
\xe
% \getref{top} -> 1 \getref{top.one} -> a \getfullref{top.two} -> 1b
See (\getref{top}), (\getref{top.one}) and (\getfullref{top.two}).
\end{document}Geschrieben hat expex John Frampton von der Northeastern University; die README trägt einen Copyright-Vermerk 2006–2017, die mitgelieferte Fassung ist v5.1b, und das Benutzerhandbuch umfasst 82 Seiten. Technisch aufschlussreich ist der Ablageort: tex/generic/expex/. Es handelt sich also nicht um etwas LaTeX-Spezifisches, sondern um eine Makrosammlung, die auch unter plain TeX läuft; expex.sty ist bloß ein dünner LaTeX-Aufsatz. Auch die Glossensyntax weicht von gb4e ab: Innerhalb von \begingl … \endgl stehen \gla (Quelldaten), \glb (Wort-für-Wort-Glosse) und \glft (freie Übersetzung), und jede Zeile wird mit // abgeschlossen, nicht mit \\. Dieses // ist das Erste, was Neulinge bei expex falsch machen.
Das Werkzeugset von Language Science Press: langsci-gb4e und langsci-avm
Die derzeit lebendigste Ecke des sprachwissenschaftlichen LaTeX-Ökosystems sind die Pakete von Language Science Press, dem Open-Access-Verlag für Linguistik. langsci-gb4e.sty (Datum 2022-10-21) ist ein überarbeitetes gb4e, das zusätzlich die Funktionen von cgloss und jambox aufnimmt. Die Datei liegt in tex/xelatex/langsci/, doch kpsewhich findet sie unabhängig von der Engine, und sie übersetzt tatsächlich sowohl unter pdfLaTeX als auch unter XeLaTeX fehlerfrei. Im selben Verzeichnis steht langscibook.cls – jene Klasse, mit der der Verlag seine eigenen Bücher setzt. Ein Verlag, der seine Bücher verschenkt, legt auch die Satzklasse, mit der sie entstehen, auf CTAN; Autorinnen und Autoren können damit zu Hause dasselbe PDF erzeugen wie der Verlag.
Zu Merkmalsstrukturen – Attribut-Wert-Matrizen – ist festzuhalten, dass das von älteren Darstellungen genannte Paket avm von Chris Manning in TeX Live 2024 nicht enthalten ist. \usepackage{avm} bricht mit ! LaTeX Error: File 'avm.sty' not found. ab. Der Ersatz ist langsci-avm (Felix Kopecky, v0.3.0, 21. Februar 2023), dessen README unmissverständlich festhält, es „serves the same purpose as Christopher Manning's avm package, but shares no code base with that package“. Die Notation ist ein Befehl statt einer Umgebung: \avm{ [ cat & [ head & noun \\ case & nom ] ] }, wobei & Attribut und Wert trennt und \\ die Zeilen. Eckige, spitze, runde und geschweifte Begrenzer setzen jeweils die passende Klammer. Das Handbuch enthält einen Abschnitt zur Umstellung von Mannings avm – der richtige Einstieg, wenn ein altes Manuskript vorliegt.
Wie man IPA setzt: tipa, Unicode oder tipauni
Für pdfLaTeX ist tipa da, für XeLaTeX und LuaLaTeX tippt man Unicode direkt, und tipauni ist die Brücke dazwischen. tipa (von Rei Fukui) schreibt IPA über eine ASCII-Kurzschrift: \textipa{[tSi:z]}, wobei S für ʃ, T für θ, N für ŋ, @ für ə und P für ʔ steht. Diese Zuordnung zu lernen ist die erste Hürde; danach geht die Eingabe schnell, und pdfLaTeX allein genügt. Wo mehrere Transkriptionen aufeinanderfolgen, fasst die Umgebung IPA einen ganzen Abschnitt ein, statt \textipa{...} zu wiederholen. Steht XeLaTeX oder LuaLaTeX zur Verfügung, ist der naheliegende Weg, per fontspec eine Schrift mit IPA-Abdeckung zu wählen und [tʃiːz] wörtlich im Editor zu tippen. TeX Live 2024 enthält Linguistics Pro (linguisticspro), eine OpenType-Familie mit IPA-Zeichen und Tonbuchstaben, sodass dieser Weg ohne jede Nachinstallation offensteht.
Die beiden Wege liefern allerdings nicht dasselbe PDF. Extrahiert man den Text eines mit tipa gesetzten PDFs per pdftotext, kommt [tSi:z] zurück – die eingetippte Kurzschrift, nicht das IPA. pdffonts zeigt als eingebettete Schrift TeX-tipa10, eine Type-1-Schrift mit der Kodierung Builtin; die Textebene des PDFs ist also kein Unicode, sodass Kopieren oder Suchen kein IPA zutage fördert. Setzt man denselben Inhalt mit XeLaTeX und Linguistics Pro, liefert pdftotext [tʃiːz], [θɔːt], [sɪŋ] und [ma˥˥]. Wer sich vorstellen kann, dass eine Gutachterin nach einer Transkription sucht oder man die eigenen Daten wieder aus dem PDF zieht, sollte diesen Unterschied nicht achselzuckend übergehen.
Hier kommt tipauni ins Spiel (Autor निरंजन, v0.7a, 13. Februar 2023, GPL v3+): ein Paket, das die TIPA-Befehle beibehält und stattdessen Unicode-Zeichen ausgibt. Ersetzt man in einem Dokument \usepackage{tipa} durch \usepackage{tipauni} und übersetzt mit LuaLaTeX, liefert pdftotext [tʃiːz], [θɔːt], [sɪŋ]. Mit anderen Worten: Zwanzig Jahre \textipa{...} lassen sich ohne Neuschreiben in ein durchsuchbares PDF überführen. Das mitgelieferte Beispiel setzt Charis SIL voraus, fiel auf einem Rechner ohne diese Schrift aber auf New Computer Modern zurück und funktionierte weiterhin. Als Geschwister von tipa enthält dasselbe Bündel vowel, das mit \putcvowel das Vokalviereck zeichnet; auch phonrule für phonologische Regeln steckt in TeX Live 2024.
% Three routes to IPA, and what pdftotext gets back from each PDF.
% 1. pdfLaTeX + tipa -> text layer is the shorthand, not IPA: "[tSi:z]"
\usepackage{tipa}
\textipa{[tSi:z]} \textipa{[TO:t]} \textipa{[sIN]}
% 2. LuaLaTeX + tipauni -> same commands, Unicode output: "[tSiz]" becomes IPA
\usepackage{tipauni}
\textipa{[tSi:z]}
% 3. XeLaTeX/LuaLaTeX + fontspec -> type the IPA directly
\usepackage{fontspec}
\setmainfont{LinguisticsPro-Regular.otf}[
Path = /usr/local/texlive/2024/texmf-dist/fonts/opentype/public/linguisticspro/]
% then simply: [tʃiːz] [θɔːt] [sɪŋ] [ma˥˥]| Eingabe | Engine | Was pdftotext zurückgibt |
|---|---|---|
tipa | pdfLaTeX | [tSi:z] – die Kurzschrift; eingebettet ist TeX-tipa10 |
tipauni | LuaLaTeX / XeLaTeX | [tʃiːz] – bei unveränderten tipa-Befehlen |
fontspec | XeLaTeX / LuaLaTeX | [tʃiːz] – auch Tonbuchstaben wie ˥˥ kommen durch |
Tableaus der Optimalitätstheorie: ot-tableau und der Ort des *!
OT-Tableaus liefert das Paket ot-tableau und braucht dafür nur drei Befehle: Input, Constraint, Kandidat. \inp{/pat/} gibt die Inputform, eine Reihe von \const{NoCoda} setzt die Constraints von links nach rechts, und jeder Kandidat wird als \cand{pa}{}{*}{} geschrieben – die Kandidatenform, gefolgt von ihren Verletzungen je Constraint. Den Sieger markiert man mit \cand[\Optimal]{...}, worauf die Zeigehand erscheint. Eine fatale Verletzung tippt man schlicht als *! und sie wird so gedruckt. Entscheidend ist, dass das Constraint-Ranking nichts anderes ist als die Reihenfolge, in der \const geschrieben wird; ein Umranking für ein Experiment bedeutet also, jene Zeilen umzustellen, statt Spalten von Hand zu verschieben. Die tableau-Umgebung übersetzte mit der in TeX Live 2024 enthaltenen Fassung fehlerfrei.
\usepackage{ot-tableau}
...
\begin{tableau}{c|c|c}
\inp{/pat/}
\const{NoCoda}\const{Max}\const{Dep}
\cand[\Optimal]{pa}{}{*}{}
\cand{pat}{*!}{}{}
\cand{pati}{}{}{*!}
\end{tableau}Syntaxbäume zeichnen: forest missversteht qtrees Punktnotation stillschweigend
Syntaxbäume haben hier eine eigene Seite („Bäume (forest/qtree)“), daher hält dieser Abschnitt nur den Punkt fest, der beim Umstieg zubeißt. qtree und tikz-qtree setzen einen Punkt vor die Knotenbeschriftung – \Tree [.S [.NP ] [.VP ] ] –, während forest mit [S [NP] [VP]] arbeitet und keinen Punkt verwendet. Übergibt man forest die qtree-Notation, erscheint kein Fehler: [.S [.NP Kim ]] wird bereitwillig als Knoten mit dem wörtlichen Namen .S gesetzt. Ein Baum, dessen Form stimmt, dessen Beschriftungen aber alle mit einem Punkt beginnen, hat genau diese Ursache. Für den vollständigen Vergleich und für forests automatisches Layout siehe den related-Verweis.
Zum Schluss, was diese Seite bewusst auslässt. Chemische Formeln und Reaktionsgleichungen (mhchem, chemfig) sowie Hobby- und Freizeitsatz gehören jeweils auf eine eigene Seite. Auf sprachwissenschaftlicher Seite beiseitegelassen wurden die Notation von covington und linguex, falls die Wahl darauf fällt, die semantischen Klammern von langsci-avm für LFG (die Option lfg, die XeLaTeX voraussetzt) und Glossare über glossaries – nichts davon ist zentral. Die erste Entscheidung in diesem Feld bleibt, wie gesagt, welche Nummerierungsmechanik für Beispiele man übernimmt. Fällt sie auf gb4e, gehören die drei Zeilen \noautomath und \crefname gleich an den Anfang. Fällt sie auf expex, gewöhnt man sich an die \getref-Idiomatik. Ein Wechsel jenseits von hundert Beispielen im Manuskript kostet mehr, als man denkt.