带清理功能的 `latexmk` 和 `-pvc`

带清理功能的 `latexmk` 和 `-pvc`

我无法将-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

相关内容