![In Logdatei schreiben](https://rvso.com/image/254702/In%20Logdatei%20schreiben.png)
Ich möchte einige Dinge in die Protokolldatei schreiben. Was ist hierfür die beste Vorgehensweise? Ist es \message{}
oder \typeout{}
oder was?
Antwort1
Der Plain TeX-Befehl \wlog
ist auch in LaTeX verfügbar
\wlog{This will be written in the log file}
Das Makro \wlog
wird zu erweitert \immediate\write-1
, und das Argument wird in der Regel nur in die Protokolldatei geschrieben und erscheint nicht im Terminal.
Wenn \write
eine Zahl zwischen 0 und 15 (einschließlich) folgt, wird der Schreibvorgang auf dem Ausgabestream mit dieser Nummer ausgeführt, wenn dieser zum Zeitpunkt des Schreibvorgangs geöffnet ist (sofort oder wenn die Ausgaberoutine aktiv ist, je nachdem, ob sie \immediate
vorangeht \write
oder nicht). Wenn der Ausgabestream nicht geöffnet istoderWenn die Zahl nicht negativ ist, wird das Argument \write
auf dem Terminal und in der Protokolldatei geschrieben. Umgekehrt wird das Argument nur in der Protokolldatei geschrieben, wenn die Zahl negativ ist.
Ausnahme: In den meisten TeX-Distributionen \write18
wird das Argument an das Betriebssystem übergeben, sofern die Shell-Escape-Funktion aktiviert ist (möglicherweise im eingeschränkten Modus, siehe das Handbuch von TeX Live oder MiKTeX).
Der LaTeX-Befehl \typeout
tut dies \immediate\write\@unused
, schreibt also das Argument sowohl in das Terminal als auch in die Protokolldatei. In Plain TeX gibt es keinen vordefinierten Befehl dieser Art. Indeed \typeout
gibt auch \protect
eine geeignete Bedeutung für den Umgang mit fragilen Befehlen im Argument. Der \@unused
Stream ist dauerhaft keiner Datei zugewiesen.
Schreibt außerdem \message
sowohl in das Terminal als auch in die Protokolldatei, erzwingt jedoch keine neue Zeile, was stattdessen erfolgt, \write
wenn die Ausgabe in die Protokolldatei geleitet wird.