gpt4 book ai didi

makefile - LaTeX引用和Makefile

转载 作者:行者123 更新时间:2023-12-04 06:42:30 25 4
gpt4 key购买 nike

我正在使用Makefile.tex文件生成PDF。

在我的LaTeX文件中使用引用时。有时候我会得到类似
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
我知道重新运行LaTeX编译命令可以解决此引用问题,但是在我的Makefile中,%.pdf仅取决于%.tex,因此仅再次运行make不能解决问题(在.tex文件中没有任何更改)。我需要执行make clean再次重新生成PDF。

这是我的Makefile

TEX := $(wildcard *.tex)
default: $(TEX:.tex=.pdf)
%.pdf: %.tex
xelatex $<
.PHONY: clean
clean:
rm -v *.aux *.toc *.log *.out

如何解决这个问题呢?谢谢你。

更新:

这是我从Google找到的一些想法
  • default目标更改为.PHONY。这不是一个很好的解决方案(因为那里可能存在 latex 文件,而我只需要重新编译一个文件即可)
  • 更改%.pdf的依赖项以包括%.aux。但是我不知道GNU make是否有可能? (取决于%.aux文件是否存在,否则,请忽略对%.aux的依赖关系)
  • grep文件执行.log并找到特定的警告。如果存在,请重新运行compile命令。
  • 最佳答案

    我在所有的LaTeX makefile中都使用了简单的规则

    .DELETE_ON_ERROR:

    %.pdf %.aux %.idx: %.tex
    pdflatex $<
    while grep 'Rerun to get ' $*.log ; do pdflatex $< ; done

    这会根据需要重复pdflatex。我发现所有需要重新运行的LaTeX消息都在日志​​文件中包含公用字符串“Rerun to get”,因此您可以在while循环中使用grep测试其是否存在。

    “.DELETE_ON_ERROR:”设置很重要:它确保每当TeX因错误中止而使make自动删除任何剩余的不完整的pdf/aux/idx文件,以使它们在下次调用时不会混淆make。

    当我使用DVI而不是PDF作为输出格式时,我等效地使用
    %.dvi %.aux %.idx: %.tex
    latex $<
    while grep 'Rerun to get ' $*.log ; do latex $< ; done
    -killall -USR1 -r xdvi || true

    最后一行使所有正在运行的xdvi重新加载其输入文件,以便立即进行视觉检查。

    关于makefile - LaTeX引用和Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12343428/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com