使用 latexmk 编译成功,使用 pdflatex 时找不到文件

使用 latexmk 编译成功,使用 pdflatex 时找不到文件

简而言之:我偶然发现了一个latexmk运行良好但pdflatex使用输出的命令失败的情况latexmk

一些细节:我的设置有点奇怪,但我不明白为什么这会干扰,为什么pdflatex只有在启动时才会成功通过 latexmk。根据我对资料的有限理解,我得到的唯一提示是latexmk可以重新定义$ENV{TEXINPUTS}。我无法制造出比这个更简单的错误案例,dot2texi 特定的构建目录。

这是我的工作目录树:

.
├── build/
├── dot2texi.sty
└── dot.tex

我正在使用dot2texi.sty来自这里能够编译发送到目录的所有(大量!)构建文件build/。我使用建议的设置文件中的答案dot.tex

\documentclass{standalone}
\usepackage[inputdir=build/]{dot2texi}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\begin{dot2tex}[neato]
digraph G { a -> b }
\end{dot2tex}
\end{document}

启动时,latexmk -pdf --output-directory=build --shell-escape dot.tex一切都按预期运行。大量构建文件被发送build,图表被正确编译。

启动时pdflatex -recorder -output-directory="build" --shell-escape "dot.tex" (即latexmk运行)出现以下错误:

Opening dot2tex stream dot-dot2tex-fig1.dot
! LaTeX Error: File `dot-dot2tex-fig1.tex' not found.

这种错误行为在两台机器上都重现了,一台是 debian,一台是 gentoo。我还尝试了一下选项pdflatex,但没有成功。

绝对不是本世纪最严重的错误,但我想了解我做错了什么......

答案1

pdflatex在由用户调用latexmkpdflatex由用户调用之间确实存在行为上的隐藏差异完全相同的命令行。发生这种情况是因为latexmk设置环境变量TEXINPUTS以将构建目录包含在 TeX 源文件的搜索路径中。(严格来说,使用的是。但如果仅设置了,aux_dir则它等于,就像在本例中一样。)out_dirout_dir

更改的环境变量将传递给 调用的任何命令pdflatexdot2tex当使用构建目录时,它将正常工作。如果您希望在从命令行启动时获得相同的行为pdflatex,则必须先修改(或设置)TEXINPUTS

历史注释latexmk:设置的最初原因TEXINPUTS是,同一个变量与 存在类似问题dvipsFeynMP根据我 2011 年的笔记,导致这种情况发生的原因是软件包的错误行为dot2tex。 我们现在看到的是同一问题的另一个版本。我可能在心里想,该设置TEXINPUTS可以解决其他类似问题,就像我们现在看到的 一样dot2tex

相关内容