Erstellen Sie einen Dienst mit Automator, um eine .tex-Datei auf dem Mac zu kompilieren

Ich verwende Mac OS X 10.9.3, TeXLive-2013 und Scrivener , um meine Arbeiten zu schreiben.

Ich möchte den Automator von Apple verwenden, um einen Dienst (verfügbar über das Rechtsklickmenü des Finders über einer Datei) mit dem Namen "TeX-Datei kompilieren" zu erstellen, der einen einfachen Befehl mit der ausgewählten Datei als Eingabe ausführt .

Beispiel:

  1. In einem Ordner (/Volumes/Data/TeX_docs/) habe ich eine exemple.tex- Datei, die von Scrivener erstellt wurde und mit LaTeX kompiliert werden kann.
  2. Ich möchte mit der rechten Maustaste auf diese Datei klicken und im Finder-Service-Menü die Option "TeX-Datei kompilieren" auswählen.
  3. Nach der Auswahl führt dieser Dienst den Befehl aus latexmk -pdf -bibtex exemple.texund kompiliert so die .tex-Datei im selben Ordner, wodurch eine .pdf-Datei erstellt wird (dieser Terminal-Befehl funktioniert derzeit perfekt, daher muss diese Aktion automatisiert werden!)
  4. Nach dem Kompilieren der .tex-Datei erscheint ein Dialogfeld und fragt, ob ich alle temporären Dateien mit einer Yesoder- NoOption löschen möchte. Wenn Yesausgewählt wird, werden alle temporären TeX-Dateien (.aux,.bbl,.bcf,.fdb_latexmk,.fls,.log,.out,.run.xml) gelöscht und nur die ursprüngliche exemple.tex und die neue exemple.tex behalten. PDF Datei. Sonst tut es nichts mehr und ich habe am Ende alle Dateien!

Antworten (2)

Dies ist nicht die optimale Lösung, aber es funktioniert vorerst. Hier ist das Automator-Fenster:

Automator-Aktionen

Das erste Shell-Skript kompiliert die .texDatei anhand der Sequenz pdflatex - biber - pdflatexund enthält den folgenden Code:

for f in "$@"
do 
    file_ext=${f##*.}
    if [ "$file_ext" = "tex" ]
    then
        foldername=$(dirname "$f")
        export foldername
        filename=$(basename "$f")
        filesimple=${filename%.tex*}
        cd $foldername
        /usr/local/texlive/2013/bin/x86_64-darwin/pdflatex "$filename"
        /usr/local/texlive/2013/bin/x86_64-darwin/biber "$filesimple"
        /usr/local/texlive/2013/bin/x86_64-darwin/pdflatex "$filename"
    else
        echo $f n\'est pas un fichier TeX
    fi
done

Das zweite Shell-Skript löscht alle temporären Dateien und öffnet die .pdfDatei. Es enthält den folgenden Code:

for f in "$@"
do 
    file_ext=${f##*.}
    if [ "$file_ext" = "tex" ]
    then
        foldername=$(dirname "$f")
        filename=$(basename "$f")
        filesimple=${filename%.tex*}
        cd $foldername
        rm $filesimple.aux
        rm $filesimple.bbl
        rm $filesimple.bcf
        rm $filesimple.blg
        rm $filesimple.log
        rm $filesimple.run.xml
        open $filesimple.pdf
    else
        echo $f n\'est pas un fichier TeX
    fi
done

Ich warte immer noch auf eine bessere Lösung mit dem latexmkBefehl!

Dies nimmt die Datei als Eingabe und führt Ihren latexmk-Befehl aus und fragt dann nach einer Bestätigung, bevor alle Dateien mit übereinstimmenden Erweiterungen gelöscht werden.

for f in "$@"
do
  /path/to/latexmk -pdf -bibtex "$f"
done
find ${@%/*} -name "*.aux" -o -name "*.bbl" -o -name "*.bcf" -o -name "*.fdb_latexmk" -o -name "*.fls" -o -name "*.log" -o -name "*.out" -o -name "*.run.xml" -delete
Ich habe genau das getan, aber am Ende erhalte ich immer noch eine Fehlermeldung und die .tex-Datei wird nicht kompiliert! Die vollständige Befehlszeile lautet: /usr/local/texlive/2013/bin/x86_64-darwin/latexmk —cp -pdf -bibtex -silent "$f". Die Fehlermeldung ist nur Run Shell Script failed - 1 error. Wenn ich diesen Befehl im Terminal ausführe, funktioniert er perfekt!
@LuCouto was ist dein PATH im Terminal?
@Mark: Der PATH im Terminal ist/Applications/B1FreeArchiver.app/Contents/MacOS:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin