LaTeX Müllentsorgung

vom 28. March 2007

Ich schreibe gerade wieder an einem etwas größeren LaTeX-Dokument mit mehreren Dateien. Beim "Compilieren" der *.tex-Dateien legt pdflatex selbständig zu jeder Datei mehrere Dateien an, die eigentlich nur hindern. Vorallem dann, wenn das Dokument (die *.tex-Dateien und das PDF) in einer Versionverwaltung untergebracht werden sollen.

Bei vielen Editoren lässt sich hier ein extra Ausgabeverzeichniss anlegen und auch pdflatex selbst hat einen Schalter "-output-directory" dafür. Doch bei TextMate ist das ganze etwas umständlicher einzurichten. Die Hilfe sagt nur:

The latexmk.pl script does all the compiling necessary for things to be right. In order to tell TextMate to use latexmk.pl when compiling, you have to set the environment variable TM_LATEX_COMPILER to have value latexmk.pl.

Leider stand dort nirgends wo man diese latexmk.pl findet und auch spotlight war ratlos. Nach etwas suchen hab ich tief im LaTex-Bundle eine Datei mit dem Namen "latexmkrc" gefunden. Diese enthält alle Parameter für pdflatex und ich setzte den Schalter für das Ausgabeverzeichnis hinten dran. Das funktionierte zwar halbwegs (jetzt waren die Temp-Dateien in dem angegebenen Verzeichnis, UND im Arbeitsverzeichnis).

Also musste eine andere Lösung her: Da TextMate für jeden Befehl (auch ⌘+R für das Compilieren) ein kleines Shell-Script bereitstellt, habe ich dieses etwas modifiziert. Über "Bundles" -> "Bundle Editor" -> "Edit Commands ..." lassen sich diese bearbeiten. Beim TypeSet & View-Befehl hab ich folgendes unten angehängt:

# Cleanup
rm -rf *.log
rm -rf *.aux
rm -rf *.aux.bak
rm -rf *.toc

Damit wird jetzt nach jedem Compilieren das Arbeitsverzeichnis von den hässlichen Log- und Temp-Dateien geleert.

Wenn es dennoch einen elegenten Weg gibt, dann verratet ihn mir bitte :)

delicious bookmark del.icio.us, Ich schreibe gerade wieder an einem etwas größeren LaTeX-Dokument mit mehreren Dateien. Beim "Compilieren" der *.tex-Dateien legt pdflatex selbständig zu jeder Datei mehrere Dateien an, die eigentlich nur hindern. Vorallem dann, wenn das Dokument (die


Kommentare


Chris am 18. September 2008
Toller Tipp, vielen Dank. Habe das gleich mal bei mir im Textmate eingebaut.

Marius am 26. December 2009
Hi,

haette das auch gerne gemacht, hat aber nicht funktioniert. TextMate's Typeset & View funktioniert dann nicht mehr (es ist ruby code, der mit shell Befehlen nichts anzufangen weiss). Habe noch nie in ruby programmiert, habe aber auf die Schnelle ein ruby script zum laufen gebracht (man muss "puts `rm -rf *.toc`" ausfuehren (zwischen den double-Quotes), dann geht es). Habe diese Zeile in TextMate's Typeset & View eingebaut, aber er loescht das .toc nicht. Was mache ich falsch? Hier mein Auszug von TextMate:

#!/usr/bin/env ruby
# coding: utf-8

require ENV["TM_SUPPORT_PATH"] + "/lib/tm/process"
require ENV["TM_SUPPORT_PATH"] + "/lib/tm/htmloutput"
require ENV["TM_SUPPORT_PATH"] + "/lib/tm/save_current_document"
require ENV["TM_SUPPORT_PATH"] + "/lib/tm/require_cmd"

# To enable the typesetting of unsaved documents, you must change the “Save” setting of
# this command to “Current File” and add the variable TM_LATEX_AUTOSAVE to TextMate's
# Shell Variables preferences. Be warned that your document must be encoded as UTF-8 if
# you excercise this option — becauseTextMate.save_current_document cannot know the file
# encoding you prefer.

TextMate.save_current_document unless ENV["TM_LATEX_AUTOSAVE"].nil?

TextMate.require_cmd("kpsewhich")

texMate = ENV["TM_BUNDLE_SUPPORT"] + "/bin/texMate.py"
engine_version = TextMate::Process.run(texMate, "version")
TextMate::HTMLOutput.show(:title => "Typesetting “#{ENV["TM_DISPLAYNAME"] || File.basename(ENV["TM_FILEPATH"])}”…", :sub_title => engine_version) do |io|
TextMate::Process.run(texMate, 'latex', '1', :interactive_input => false) do |line|
io

Kommentar schreiben