Texshop:删除 pdflatexmk 引擎中的辅助文件

Texshop:删除 pdflatexmk 引擎中的辅助文件

我想增强 pdflatexmk 引擎,以便事后删除文件。我来自TeXShop 排版成功后自动“丢弃辅助文件”,其中的指令是编写一个执行“pdftex”的 Python 文件,然后删除所有其它文件。

然而,我不知道如何调用不同的 texshop “引擎”。也就是说,不是这样做

command = '/usr/texbin/pdflatex ' + '--output-driver=/usr/texbin/xdvipdfmx ' +     OUTPUT_ARGUMENT + '"' + output_dir + '"' + ' ' + '"' + pdf_path + os.path.sep + tex_file + '"'

由于我将文件保存在/Engine文件夹中,因此我认为我可以简单地

execfile("pdflatexmk.engine")

相反 - 但这给了

Traceback (most recent call last):
  File "/Volumes/Stuff/user/Library/TeXShop/Engines/pdflatexmk_del.py", line 43, in     <module>
    execfile("pdflatexmk.engine")
IOError: [Errno 2] No such file or directory: 'pdflatexmk.engine'

答案1

每个引擎都是一个自己的 shell 脚本,因此增强现有引擎的最简洁方法可能是添加脚本。

pdflatexmk -c您想要的是在每次成功运行后有效地调用pdflatexmk

如果你看一下,pdflatexmk.engine你会发现最后一行是:

"${LTMKBIN}"/latexmk -pdf -r "${LTMKEDIT}/latexmkrcedit" -r "${TSBIN}/pdflatexmkrc" ${localrc} "$1" 

这就是整个脚本的核心:调用latexmk。要添加仅在此行成功完成后执行的命令,请添加&& <cmds>。因此将最后一行更改为:

"${LTMKBIN}"/latexmk -pdf -r "${LTMKEDIT}/latexmkrcedit" -r "${TSBIN}/pdflatexmkrc" ${localrc} "$1" && "${LTMKBIN}"/latexmk -c

将新引擎另存为pdflatexmk-c.engine或您喜欢的其他名称,然后重新启动 TeXShop。

然后您可以在文件中的第一行调用该引擎.tex,如下所示:

% !TEX TS-program = pdflatexmk-c
\documentclass{article}
\usepackage{lipsum}

\begin{document}
\tableofcontents

\section{Foo}
\lipsum
\section{Bar}
\lipsum[1-12]

\end{document}

您会看到它pdflatexmk正在运行,运行pdflatex几次以获得正确的生成的引用,然后pdflatexmk -c运行并删除辅助文件。

答案2

我不得不说,在我使用不同 stackexchange 网站的整个过程中,我从来没有遇到过如此负面的提问体验;即一种居高临下的“我知道的比你应该知道的要多”的态度。

以下是调用texshop的pdflatexmk引擎的最简单方法(如果__file__它放在Engine文件夹中):

import os, subprocess
# run pdflatexmk
engine = os.path.dirname(__file__)+'/pdflatexmk.engine'
file = pdf_path + os.path.sep + tex_file
command = '{0} "{1}"'.format(engine, file)
subprocess.call(command, shell=True)

然后,更安全的删除方法是使用黑名单,而不是白名单。稍等片刻,以防我们想重新运行编译器:

# wait a bit before delete
import time
time.sleep(360) # in seconds
# delete
file_plain = tex_file.split('.')[:-1][0]
print file_plain
del_list = ['log', 'aux', 'bbl', 'blg', 'fdb_latexmk', 'fls', 'synctex.gz', 'toc']
files = [pdf_path + os.path.sep + file_plain+'.'+l for l in del_list]
for file in files: os.remove(file)

相关内容