我无法将-pvc
(连续预览)和-c
(清理)选项放在一起latexmk
。
latexmk -pdf -pvc -c file.tex
我的观察:给出-c
选项后,文件被编译,(可再生)文件被删除,我回到命令提示符。
有可能实现这个吗?
-- 迈克
答案1
TL;DR 是:这些选项不能一起使用。经过一番研究,以下是原因。
手册latexmk
页文档包含以下内容:
In its new version, latexmk has a highly
general and efficient solution, ... and a
symptom is that latexmk generates an extra
file (with extension .fdb_latexmk, by default)
that contains the source file information.
现在关于-c
选择:
Clean up (remove) all regeneratable files
generated by latex and bibtex or biber except
dvi, postscript and pdf. These files are a
combination of log files, aux files, latexmk's
database file of source file information, and
those with extensions specified in the
@generated_exts configuration variable. In
addition, files specified by the $clean_ext
configuration variable are removed.
当我latexmk -pdf -pvc -c file
生成 clean 并 make via 后运行时latexmk -pdf -pvc -gg file
,-c
选项导致所有生成的文件,包括文件.fdb_latexmk,删除,保存,file.pdf
并保留原始的“file.tex”。
现在,问题来了:file.fdb_latexmk
包含有关生成了哪些文件、加载了哪些包等的大量信息,以及文件(包括源代码)的哈希值。不能简单地touch file.tex
触发重制(就像对 所做的那样make
)。必须更改文件才能更改哈希值。因此,如果您删除包含所有生成文件哈希值的文件,则将latexmk
进入“完成”状态,它会在 Control-C 上停止或返回到 shell 提示符。
简而言之,不能删除文件信息数据库和其他生成的文件,期望latexmk
使用与 GNU make 类似的 jiggery-pokery。@user5325 编写的 shell 脚本对“被修改”的含义与 的期望非常不同latexmk
,因为touch file.tex
会触发它,使其运行latexmk
,然后它将无法始终正常工作(如果有的话)并产生未记录的行为,例如等待永远不会发生的条件并需要 control-c。
答案2
你可以编写一个小的 shell 脚本:
f=/tmp/$$.tmp
touch $f
src=foo.tex
src="$1";
echo -e "$src -- $f\n";
while true
do
if [ ${src} -nt ${f} ];
then
echo "File modified";
latexmk -c ${src}
sleep 5;
fi;
touch ${f};
sleep 5; # This is essential.
done