Создайте службу с помощью Automator для компиляции файла .tex на Mac.

Я использую Mac OS X 10.9.3, TeXLive-2013 и Scrivener для написания статей.

Я хотел бы использовать Apple Automator для создания службы (доступной из контекстного меню Finder над файлом) под названием «Скомпилировать файл TeX», которая запускает простую команду, используя выбранный файл в качестве входных данных .

Пример:

  1. Внутри папки (/Volumes/Data/TeX_docs/) у меня есть файл example.tex, созданный Scrivener, который готов к компиляции с помощью LaTeX.
  2. Я хотел бы щелкнуть правой кнопкой мыши этот файл и в меню «Служба Finder» выбрать параметр «Скомпилировать файл TeX».
  3. После выбора эта служба выполнит команду latexmk -pdf -bibtex exemple.texи, таким образом, скомпилирует файл .tex в той же папке, создав файл .pdf (эта команда терминала сейчас работает отлично, поэтому необходимо автоматизировать это действие!)
  4. После компиляции файла .tex появляется диалоговое окно с вопросом, хочу ли я удалить все временные файлы с опцией Yesили No. Если Yesвыбрано, он удаляет все временные файлы TeX (.aux, .bbl, .bcf, .fdb_latexmk, .fls, .log, .out, .run.xml) и сохраняет только исходный пример.tex и новый пример. pdf файл. В противном случае он больше ничего не делает, и у меня есть все файлы в конце!

Ответы (2)

Это не оптимальное решение, но пока оно работает. Вот окно автомата:

Действия автоматизатора

Первый сценарий оболочки компилирует .texфайл, используя последовательность pdflatex - biber - pdflatex, и содержит следующий код:

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

Второй сценарий оболочки удаляет все временные файлы и открывает .pdfфайл. Он содержит следующий код:

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

Я все еще жду лучшего решения с помощью latexmkкоманды!

Это берет файл в качестве входных данных и запускает вашу команду latexmk, а затем запрашивает подтверждение перед удалением всех файлов с соответствующими расширениями.

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
Я сделал именно это, но в конце все еще получаю сообщение об ошибке, и файл .tex не компилируется! Полная командная строка: /usr/local/texlive/2013/bin/x86_64-darwin/latexmk —cp -pdf -bibtex -silent "$f". Сообщение об ошибке просто Run Shell Script failed - 1 error. Когда я запускаю эту команду в Терминале, она работает отлично!
@LuCouto, какой у тебя ПУТЬ в Терминале?
@Mark: ПУТЬ в Терминале/Applications/B1FreeArchiver.app/Contents/MacOS:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin