TeXstudio

Wer ein TeXstudio-Änderungsprotokoll bis ans Ende scrollt, stößt auf Einträge, die gar nicht zu TeXstudio gehören: Sie stammen von Texmaker. TeXstudio begann als Sammlung von Erweiterungen für Texmaker unter dem Namen „TexMakerX“, wurde mit Version 2.2 umbenannt und trägt die Geschichte des Elternprojekts bis heute mit. Diese Herkunft erklärt den Charakter des Editors recht gut: Er bringt keine einzige eigene ausführbare Datei mit, und trotzdem sitzt alles, was zum Schreiben nötig ist, in einem einzigen Fenster – Editor, Build-Kette, PDF-Betrachter, Rechtschreib- und Grammatikprüfung, eine Übersicht des Dokuments. Alles außer LaTeX selbst. Diese Seite behandelt die Build-Konfiguration, an der viele hängen bleiben, die von .cwl-Dateien getragene Vervollständigung, die Strukturansicht und SyncTeX.

Eine LaTeX-IDE, die kein LaTeX mitbringt

TeXstudio ist ein quelloffener Editor unter GPL v2, der auf Windows, macOS, Linux und BSD läuft und übersetzt, indem er externe Befehle startet – etwa pdflatex oder latexmk. Damit liegt die Reihenfolge fest: erst eine TeX-Distribution (TeX Live oder MiKTeX), dann TeXstudio. Umgekehrt entsteht der schwer durchschaubare Zustand, in dem das Programm zwar startet, aber nichts baut. Das Projekt selbst wirbt mit Paletten von „mehr als 1000 mathematischen Symbolen“, interaktiver Rechtschreib- und Grammatikprüfung, Code-Faltung, einer Strukturansicht und einem integrierten PDF-Betrachter mit „(fast) wortgenauer Synchronisierung“ – letzteres führt direkt zum SyncTeX-Abschnitt weiter unten.

Der Build- und der Commands-Reiter: txs:/// lesen

Alles steckt unter Options → Configure TeXstudio, und zwei Reiter steuern das Bauen. Im Reiter Commands steht, was jeder externe Befehl tatsächlich ist – Pfad zur ausführbaren Datei samt Argumenten. Im Reiter Build werden daraus „Meta-Befehle“ zusammengesetzt. Solange links unten Show Advanced Options nicht angehakt ist, bleibt das meiste davon verborgen. Genau hier hängen viele fest – sie starren auf den Build-Reiter, obwohl sie ein Argument von pdflatex ändern wollen, oder umgekehrt.

Im Alltag berührt man nur vier Aktionen. Build & View (F5) übersetzt und öffnet dann das PDF; Compile (F6) erzeugt es lediglich; View (F7) öffnet, was bereits vorliegt; und Clean räumt die Zwischendateien weg – .aux, .toc und Verwandte – und lässt das fertige PDF unangetastet.

Ein Meta-Befehl ist nichts weiter als eine Liste von Namen, die mit txs:/// beginnen und mit dem Strich | verkettet werden. „Build & View“ ist im Kern ein Ausdruck aus zwei Wörtern: „der voreingestellte Übersetzer, danach der voreingestellte Betrachter“. Jeder im Commands-Reiter eingetragene Befehl lässt sich auf dieselbe Weise ansprechen, sodass sich ein eigener Konvertierungsschritt in die Kette einfügen lässt.

NameBedeutungWo man ihm begegnet
txs:///quickdie Kette aus Bauen und VorschauBuild & View (F5)
txs:///compileder voreingestellte Übersetzer (ab Werk pdfLaTeX)Compile (F6)
txs:///viewder voreingestellte BetrachterView (F7)
txs:///pdflatexdie pdflatex-Zeile des Commands-Reiters selbstlässt sich als Standardübersetzer benennen
txs:///latexdie latex-Zeile, die ein DVI erzeugtwird von den DVI-Ketten benutzt
txs:///view-pdfdie Zeile, die ein PDF öffnet – intern oder externfür SyncTeX intern lassen

Ab Werk ist pdfLaTeX der voreingestellte Übersetzer; ihn auf latexmk umzustellen ist der übliche Griff. latexmk prüft die Abhängigkeiten und wiederholt den Lauf genau so oft, wie Literatur, Index und Querverweise es verlangen – niemand muss Durchgänge zählen. Im Commands-Reiter sieht das so aus. Zu beachten: % wird zum absoluten Pfad des Wurzeldokuments (Master) ohne Endung – zur Wurzel, nicht zu der Datei, die gerade offen ist. Genau dieses Detail lässt Projekte aus mehreren Dateien funktionieren.

terminal
latexmk -pdf -synctex=1 -interaction=nonstopmode -file-line-error %.tex

Für einen Engine-Wechsel je Dokument genügt ein magischer Kommentar in der ersten Zeile. TeXstudio liest unter anderem % !TeX program, % !TeX root, % !TeX encoding und % !TeX spellcheck. Mit der Zeile unten übersetzt genau dieses Dokument mit LuaLaTeX, ohne dass der Einstellungsdialog angefasst wird. Die genaue Syntax der % !TEX-Familie behandelt ausführlich die TeXShop-Seite.

latex
% !TeX program = lualatex
% !TeX root = ../thesis.tex
% !TeX spellcheck = en_GB

Nur drei Einstellungen müssen zuerst feststehen

Es gibt sehr viele Einstellungen; realistisch ist daher, zuerst nur drei festzulegen: den voreingestellten Übersetzer, die Build-&-View-Kette und ob SyncTeX an ist. Stehen diese fest, nimmt F5 jedes Mal denselben Weg, und bei Problemen gibt es nur einen Faden zu ziehen.

  • Für überwiegend westliche Dokumente latexmk das PDF direkt erzeugen lassen; bei einer geerbten japanischen Vorlage upLaTeX + dvipdfmx wählen.
  • Build & View als das definieren, was das täglich gedrückte F5 tatsächlich tut – Übersetzen und Öffnen im internen Betrachter eingeschlossen.
  • Im Befehl stets -synctex=1 und -file-line-error mitgeben: Ersteres für den Rückweg vom PDF zur Quelle, Letzteres, damit Fehler mit Dateiname und Zeilennummer erscheinen.
  • Die Konfiguration vor dem eigentlichen Manuskript an einer zehnzeiligen .tex erproben und dabei Log und PDF ansehen, um zu bestätigen, dass die erwartete Engine gelaufen ist.

Builds für Japanisch einrichten

Zwei Wege sind verbreitet. Der eine ist LuaLaTeX: Im Build-Reiter Build & View auf „Compile & View“ und den Standardübersetzer auf „LuaLaTeX“ setzen – ein Druck auf F5 führt zum PDF. Für einen Neuanfang ist das die geradlinige Wahl. Der andere ist upLaTeX + dvipdfmx, lange der japanische Standard; da hier vor dem PDF ein DVI steht, setzt man Build & View auf die „DVI->PDF chain“ und den Standardübersetzer auf „LaTeX“.

Am übersichtlichsten ist es, die Engine-Kombination in einer .latexmkrc zu beschreiben und TeXstudio bloß latexmk aufrufen zu lassen. Legt man die folgende Datei neben die .tex, kümmert sich latexmk um den Ablauf upLaTeX → dvipdfmx, um die Literatur (upbibtex), den Index (upmendex) und die Zahl der Wiederholungen. Da $latex ein -synctex=1 trägt, funktioniert auch SyncTeX weiter.

latex
$latex = 'uplatex %O -synctex=1 -interaction=nonstopmode %S';
$bibtex = 'upbibtex %O %B';
$makeindex = 'upmendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;

$pdf_mode = 3 wählt den Modus „ein DVI erzeugen und es mit $dvipdf in ein PDF verwandeln“. Die Marken %O (zusätzliche Optionen), %S (die Quelldatei), %B (der Basisname ohne Endung) und %D (das Ausgabeziel) sind Platzhalter von latexmk und nicht dasselbe wie TeXstudios %. So eingerichtet, ergibt sich dasselbe Ergebnis, ob der Build aus TeXstudio, von der Kommandozeile oder aus einem ganz anderen Editor gestartet wird – weil die Konfiguration an einer einzigen Stelle liegt.

Das Log ab dem ersten Fehler lesen

Bevor Einstellungen aufs Geratewohl geändert werden, lohnt der Blick auf zwei Dinge: welcher Befehl gestartet wurde und was der erste Fehler im Log ist. LaTeX-Fehler pflanzen sich fort; meist hat die erste rote Zeile alle folgenden erzeugt. TeXstudios Log-Fenster ist genau auf diese Lesereihenfolge gebaut: Man kann zwischen dem rohen Log und einer Tabelle wechseln, die die Meldungen in Fehler (rot), Warnungen (gelb) und übervolle Boxen (blau) sortiert. Zwischen Fehlern bewegt man sich mit Ctrl+Shift+↑ und Ctrl+Shift+↓, zwischen Warnungen und Boxen mit Alt+Shift+↑ und Alt+Shift+↓.

  • Erscheint Could not start the command, sind PATH und der Zustand der TeX-Live-/MiKTeX-Installation verdächtig, nicht TeXstudio. Den Pfad zur ausführbaren Datei im Commands-Reiter prüfen.
  • File not found bedeutet eines von dreien: die Wurzeldatei, ein relativer Pfad oder ein Abbildungsname – und ein Blick darauf, ob die Endung ausgeschrieben ist.
  • Fehlt ein Paket, wird es bei TeX Live mit tlmgr install und bei MiKTeX über die MiKTeX Console nachinstalliert. Der Editor kann das nicht lösen.
  • Auf die Zeilennummer im Log klicken, nur den ersten Fehler beheben, neu bauen und dann weiterlesen. Das hintere Ende einer Kaskade zuerst zu lesen ist meist verlorene Zeit.

Warum die Vervollständigung die eigenen \label kennt: die .cwl-Dateien

TeXstudio interpretiert kein LaTeX. Es liest .cwl-Dateien – completion word lists. Das Format stammt ursprünglich von einem anderen LaTeX-Editor, Kile; TeXstudio hat es um semantische Angaben erweitert: Dieses Argument ist ein Label, jene Stelle nimmt die Schreibmarke auf. Deshalb bietet \ref{ die Labels des Dokuments an und \cite{ die Schlüssel (bibIDs) der Literaturliste. Beim \usepackage wird die passende cwl geladen, sofern es eine gibt; andernfalls erzeugt TeXstudio automatisch eine aus der .sty – das liefert Befehlsnamen, aber keine Bedeutung der Argumente. Für ein eigenes Paket sorgt die relative Schreibweise \usepackage{./myPackage} dafür, dass nach ./myPackage.cwl gesucht wird.

Drei weitere Tastenersparnisse lohnen sich. Teilen die Vorschläge eine gemeinsame Anfangszeichenfolge, füllt Tab diesen gemeinsamen Teil auf einen Schlag ein. Beginnt man eine Umgebung – tippt man etwa \begin{itemize} –, wird das passende \end{itemize} von selbst eingefügt. Und wer die Schreibmarke einen Moment auf einem Umgebungsnamen ruhen lässt, bekommt einen Spiegelcursor und kann die Namen in \begin und \end gleichzeitig ändern – aus itemize wird enumerate in einem Zug. Um die zuletzt offene Umgebung oder Klammer zu schließen, dient Alt+Return. Das Vergessen des Schließens gehört zu den häufigsten LaTeX-Pannen; dieser Griff lohnt das Merken.

Strukturansicht und Prüfung von Rechtschreibung und Grammatik beim Tippen

Die Strukturansicht links wird zur Landkarte des Dokuments. Sie führt Überschriften (\section und Verwandte), Labels (\label), die per \input und \include eingebundenen Dateien, Beamer-Blöcke und TODOs auf – erfasst werden sowohl der Befehl \todo{} als auch Kommentare der Form % TODO / %todo. Ein Klick auf einen Eintrag führt an die Stelle. In langen Manuskripten und Projekten aus vielen Dateien ist diese Liste der Grund, warum man den Überblick behält.

Die Rechtschreibprüfung läuft beim Tippen mit; ein Rechtsklick auf ein verdächtiges Wort bietet Korrekturen an. Die Wörterbücher liegen im hunspell-Format vor – dieselbe Maschinerie, die LibreOffice und Firefox nutzen, sodass zusätzliche Wörterbücher von dort übernommen werden können. Um die Sprache an eine Datei zu binden, genügt % !TeX spellcheck = de_DE in der ersten Zeile; die Datei stellt dann bei jedem Öffnen automatisch um. Beim Redigieren eines mehrsprachigen Bandes zahlt sich das aus.

Die Grammatikprüfung dagegen ist nicht TeXstudios eigenes Urteil. Die quelloffene Korrekturmaschine LanguageTool läuft lokal als Server, TeXstudio verbindet sich beim Start damit, schickt jeden fertigen Absatz hinüber und erhält die Befunde zurück (Server-URL und Pfad zum jar stehen unter Options → Configure TeXstudio → Language Checking). Dank dieses Aufbaus verlässt der eigene Text den Rechner nie – beruhigend, solange das Manuskript noch unveröffentlicht ist.

SyncTeX: Strg-Klick, vorwärts wie rückwärts

Es gibt nur zwei Bedingungen. Erstens: dem Übersetzungsbefehl -synctex=1 mitgeben. SyncTeX ist eine Eigenschaft der TeX-Engine und nicht des Editors; erst dieser Schalter lässt sie die Synchronisationsdatei .synctex.gz schreiben (die latexmk-Zeile und die .latexmkrc oben tragen ihn bereits; fehlt er, bietet TeXstudio an, den Befehl zu korrigieren). Zweitens: das PDF im internen Betrachter öffnen. Erst dessen SyncTeX-Unterstützung ermöglicht die Sprünge in beide Richtungen.

Die Gesten sind leicht zu merken, denn beide Richtungen sind Strg + Linksklick. In der Quelle ausgeführt, landet man an der passenden Stelle im PDF (Vorwärtssuche); im PDF ausgeführt, in der passenden Quellzeile (Rückwärtssuche). Das Kontextmenü bietet dasselbe unter „Go To PDF“ und „jump to source“. Beim Öffnen des Betrachters läuft die Vorwärtssuche zur aktuellen Schreibmarke ohnehin automatisch. Aktiviert man zusätzlich „scrolling follows cursor“ und „cursor follows scrolling“, bleiben beide Seiten während des Schreibens dauerhaft gekoppelt, und die Korrekturfrage „aus welcher Zeile stammt dieser Absatz?“ erübrigt sich.