在 Mac 中创建使用 Automator 编译 .tex 文件的服务

在 Mac 中创建使用 Automator 编译 .tex 文件的服务

我在用着Mac OS 10.9.3TeXLive-2013斯克里文纳写论文。我想使用 Apple 的 Automator 创建一个名为“编译 TeX 文件”的服务(可从 Finder 的文件右键菜单中获取),该服务使用所选文件作为输入

例如:

  1. 在文件夹 (/Volumes/Data/TeX_docs/) 中我有一个示例Scrivener 创建的文件,可以用 LaTeX 进行编译。
  2. 我想右键单击此文件并从 Finder 的服务菜单中选择选项“编译 TeX 文件”
  3. 一旦选择,该服务将执行命令latexmk -pdf -bibtex exemple.tex并编译同一文件夹内的.tex 文件,创建一个.pdf 文件(此终端命令现在运行正常,因此需要自动执行此操作!)
  4. 编译 .tex 文件后,会出现一个对话框,询问我是否要使用YesNo选项删除所有临时文件。如果Yes选择 ,它会删除所有 TeX 临时文件(.aux、.bbl、.bcf、.fdb_latexmk、.fls、.log、.out、.run.xml)并仅保留原始 exemple.tex 和新的 exemple.pdf 文件。否则,它不会执行任何其他操作,最终我会得到所有文件!

答案1

这不是最佳解决方案,但目前有效。这是 Automator 窗口:

自动操作

第一个 shell 脚本.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

第二个 shell 脚本删除所有温度文件并打开该.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命令的更好的解决方案!

答案2

这不是最漂亮的解决方案,但它可以达到您想要的目的(即使用latexmk和确认对话框):

首先,您的第一个脚本可以替换为以下内容:

for f in "$@"
do
    file_ext=${f##*.}
    if [ "$file_ext" = "tex" ]
    then
        foldername=$(dirname "$f")
        filename=$(basename "$f" .tex)
        cd "$foldername"
        /usr/texbin/latexmk -pdf -bibtex "$filename"
        open "${filename}.pdf"
    else
        echo $f n\'est pas un fichier TeX
    fi
done

请注意,我在第一个脚本中添加了 open 命令,因此第二个脚本仅有的负责清理临时文件。此外,如果您想进一步简化操作,您可以.latexmkrc在生成的 TeX 文件所在的目录中创建一个,如下所示:

$pdf_mode = 1; # equivalent to -pdf
$bibtex_use = 2; # equivalent to -bibtex

然后将latexmk命令简化为/usr/texbin/latexmk "$filename"。然后,在第二步之前Get Finder Items,添加一个Ask for Confirmation步骤。您可以在其中输入消息文本并将按钮更改为“是”或“否”。注意,“确定”按钮应该更改为“是”,假设您希望“是”作为默认选项。

最后,您可以将第二个脚本更改为如下内容:

for f in "$@"
do
    file_ext=${f##*.}
    if [ "$file_ext" = "tex" ]
    then
        foldername=$(dirname "$f")
        filename=$(basename "$f" .tex)
        cd "$foldername"
        /usr/texbin/latexmk -c "$filename"
        rm -f "$filename".bbl
        rm -f "$filename".run.xml
    else
        echo $f n\'est pas un fichier TeX
    fi
done

-clatexmk是在清理模式下运行的选项,但它不会删除您的 pdf。请注意,我仍然需要手动删除.run.xml.bbl文件。我不太明白为什么latexmk不清理.bbl文件。

更接近可靠解决方案的方案可能需要更多脚本,并将其分解为多个工作流,例如,优雅地处理编译失败的情况并为用户显示日志文件。此外,拥有一个可以清理 TeX 辅助文件的独立服务可能不错。但就简单性而言,这是我能想到的最好的方案。

相关内容