简而言之:我偶然发现了一个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
在由用户调用latexmk
和pdflatex
由用户调用之间确实存在行为上的隐藏差异完全相同的命令行。发生这种情况是因为latexmk
设置环境变量TEXINPUTS
以将构建目录包含在 TeX 源文件的搜索路径中。(严格来说,使用的是。但如果仅设置了,aux_dir
则它等于,就像在本例中一样。)out_dir
out_dir
更改的环境变量将传递给 调用的任何命令pdflatex
。dot2tex
当使用构建目录时,它将正常工作。如果您希望在从命令行启动时获得相同的行为pdflatex
,则必须先修改(或设置)TEXINPUTS
。
历史注释latexmk
:设置的最初原因TEXINPUTS
是,同一个变量与 存在类似问题dvips
。FeynMP
根据我 2011 年的笔记,导致这种情况发生的原因是软件包的错误行为dot2tex
。 我们现在看到的是同一问题的另一个版本。我可能在心里想,该设置TEXINPUTS
可以解决其他类似问题,就像我们现在看到的 一样dot2tex
。