Welchen Zweck hat beispielsweise die Schreibweise

% !TeX LuaLaTeX \documentclass{article} ... ... ...

Ich hätte erwartet, dass ich damit einfach tex name.tex eingeben kann und damit automatisch mit LuaLaTex kompiliert wird. Das funktioniert aber nicht.

gefragt 28 Mär '21, 15:35

coversin's gravatar image

coversin
9127
Akzeptiert-Rate: 50%

bearbeitet 28 Mär '21, 15:35


Man nennt solche Kommentare (in der Regel) am Anfang des Dokuments magic comment. TeX-Engines selbst verstehen in der Regel nur eine einzige Form eines solchen magic comment:

%&format

wobei Format der Name eines TeX-Formats ist. Die Engine versucht dann, zunächst das angegebene Format zu laden, bevor es den Rest des Dokuments verarbeitet. Würde man also beispielsweise für ein Dokument foo.tex der Form:

%&pdflatex
\documentclass{article}

\begin{document}
Test
\end{document}

den Aufruf »pdfetex foo.tex« durchführen, so würde pdfetex das Format pdflatex.fmt laden und mit dessen Hilfe dann die Datei foo.pdf erzeugen. Übrigens würden luatex und tex an derselben Aufgabe scheitern, weil die Namen der LaTeX-Formate in diesem Fall nicht passen. Ebenfalls laden die Engines über den magic comment keine andere Engine. Aus diesem Grund ist ein magic comment für das Format heutzutage unüblich und eher sinnlos. Tatsächlich stammt das aus der Anfangszeit von TeX und LaTeX, als man Dokumente für unterschiedliche Sprachen noch mit unterschiedlichen Formaten verarbeitet hat.

Anders sieht es mit magic comments unterschiedlicher Editoren aus. Wie @stefan in seiner Antwort bereits erklärt hat, versteht der Online-Editor von texlive.net, der hier auf TeXwelt verwendet wird, Kommentare wie:

% !TeX Format

und ruft dann direkt das korrespondierende Programm auf, beispielsweise lualatex für Format=LuaLaTeX, also beim Kommentar:

`% !TeX LuaLaTeX

Dies unterscheidet sich also von dem vorgenannten magic comment insofern, als nicht erst die TeX-Engine darauf reagiert, sondern bereits der Editor bzw. der Server per ausgeführtem Script.

Von besonderem Interesse ist hier übrigens auch das Pseudo-Format None. Mit

% !TeX None

kann man verhindern, dass der Knopf zur Erzeugung der Ausgabe (mittels eines LaTeX-Compilers) für den jeweiligen Code überhaupt angezeigt wird.

Andere Editoren wie TeXworks, TeXmaker oder TeXstudio kennen weitere magic comments. So kann beispielsweise dasselbe wie oben für TeXwelt erklärt, in den LaTeX-Editoren häufig per

% !TeX program = Format

erreicht werden. Aber auch andere Dinge kann man für Editoren häufig per magic comment einstellen. Beispielsweise kann man für TeXworks bei einem Dokument, das aus mehreren TeX-Dateien besteht, mit Hilfe von

% !TeX root = master.tex

die Datei master.tex als Hauptdatei einstellen. Man kann damit dann LaTeX-Läufe für master.tex aus jeder TeX-Datei heraus anstoßen, die diesen magic comment enthält. Natürlich muss sich die Datei master.tex dann auch in demselben Verzeichnis wie die aktuelle Datei mit diesem Kommentar befinden.

Übrigens werden bei TeX-Dokumenten, die mit emacs und auctex erstellt wurden, meist am Ende der Datei verschiedene Variablen für die Datei als Kommentar angelegt. Beispielsweise würde:

%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:

am Ende des Dokuments bedeuten, dass es sich um ein LaTeX-Dokument handelt (mode: latex), das mit der Engine LuaTeX (TeX-engine: luatex), also mit lualatex verarbeitet werden soll. Statt

%%% TeX-master: t

könnte beispielsweise auch etwas wie

%%% TeX-master: "master.tex"

angegeben sein. In diesem Fall würde lualatex nicht für die aktuelle Datei, sondern für die Datei master.tex in demselben Verzeichnis aufgerufen. Das ist also mit dem oben erklärten magic comment

% !TeX root = master.tex

vergleichbar.

Aber auch, wenn keine Maschine diese magic comments verarbeitet, liefern sie natürlich auch für den Anwender nützliche Informationen. Gerade, ob ein Dokument für die Verwendung mit PDFLaTeX, LuaLaTeX oder XeLaTeX gedacht ist, ist eine wichtige Information.

Permanenter link

beantwortet 29 Mär '21, 14:07

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 29 Mär '21, 19:33

Das ist zunächst nur ein Kommentar, der LaTeX nicht stört.

Zusätzlich kann ein Editor oder Compiler etwas damit anfangen: wenn er die Info versteht, dann benutzt er automatisch die so geschriebene Engine. Der hier im Forum verwendete online-Compiler kann das, wie hier erwähnt.

tex ist der Standardcompiler der nur TeX macht, nicht LuaTeX. Aus dem selben Grund würde luatex name.tex nicht auf xetex umschalten, nur weil es im Quellcode steht. Das würde eine Ebene höher passieren, also in einem Editor oder übergeordnetem Compiler, der die Engine anhand des Kommentars auswählt.

Permanenter link

beantwortet 28 Mär '21, 16:09

stefan's gravatar image

stefan ♦♦
18.1k143048
Akzeptiert-Rate: 48%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×74

gestellte Frage: 28 Mär '21, 15:35

Frage wurde gesehen: 2,966 Mal

zuletzt geändert: 29 Mär '21, 19:33