我正在尝试让 latexmk 编译一个带有\include{...}
对特定build
目录的外部引用的 .tex 文件,这样我就不会用.aux
文件等污染我的目录树。
然而,它latexmk
在编译包含的文件时似乎没有像我预期的那样工作。例如,考虑一个file1.tex
包含以下内容的文件
%%%%%
\include{chapters/test}
%%%%%
当我跑步时
latexmk -pdf -pdflatex="pdflatex -interaction=nonstopmode -file-line-error" file1.tex
一切正常,但是
latexmk -pdf -pdflatex="pdflatex -interaction=nonstopmode -file-line-error" -outdir=build file1.tex
给了我错误
Latexmk: Missing input file: 'chapters/test.aux' from line
'No file chapters/test.aux.'
如果我没有该\include
语句,\input
而是使用,则所有内容都会像您期望的那样顺利编译到构建目录中。
作为参考,我在使用 MacTeX 的 Mac OSX 上工作,据我所知,MacTeX 和 MikeTeX 在实现上存在一些差异latexmk
...如能得到任何帮助我将非常感激,因为我已经为此苦苦思索了一段时间。
答案1
实际上,这不是latexmk
问题。如果您查看.log
文件或实际屏幕输出,您会发现它pdflatex
有问题。如果您pdflatex
从命令行使用该-output-directory=build
选项运行,您将得到完全相同的错误。主要错误是pdflatex
无法创建文件chapters/test.aux
。
解决方案很简单,就是创建chapters
构建目录的子目录。
(您看到的消息latexmk
是其对当前编程为常见的重要警告和错误的总结。但这是一个不完整的总结。一般来说,如果您发现错误但不明白如何处理,那么值得查看该文件;它提供的信息比总结.log
多得多。)latexmk
答案2
正如@john-collins 上面所写的,这不是问题,latexmk
而是你的 tex 解释器中的问题pdflatex
。
解决您的问题的另一个方法是重新定义\include
命令以在实际执行之前创建输出目录\include
。
我的实施如下lualatex
:
\ifluatex%
\directlua{%
function makeparentdirs(path_with_filename)
local mkdirp = require('mkdirp_lua/mkdirp')
mkdirp(path_with_filename)
require('lfs')
% -- delete lowest directory which collides with file name
if lfs.attributes(path_with_filename).mode == 'directory' then
lfs.rmdir(path_with_filename)
end
end
}%
\fi
\let\OLDinclude\include
\renewcommand{\include}[1]{%
\ifluatex%
\directlua{makeparentdirs(\luastring{\auxdirname} .. '/' .. \luastring{#1})}%
\fi%
\OLDinclude{#1}%
}
但这个解决方案并不好,因为:
- 根据平台和命令行开关的不同,辅助文件的目录可能会有所不同。您必须
\newcommand*{\auxdirname}{auxdir}
先通过运行或类似命令来手动定义它。 - 它依赖于一个单独的 lua 库https://github.com/xpol/mkdirp.lua
该解决方案适用于 tikz 的外部库,该库还需要在使用自定义(非自动编号)目录时创建 outdir/auxdir 中的文件夹。
答案3
有两种可能性:
我也遇到了这些错误,当使用
\doincludeonly
来自https://en.wikibooks.org/wiki/TeX/includeonly在这种情况下,可以安全地忽略这些错误。但是,如果您愿意,您可以在使用命令之前生成文档的完整版本,从而使 latex 停止生成这些错误
\doincludeonly
。然后,下次,它就不会抛出错误,直到您清除文件的乳胶缓存。
也可能由于此错误而发生如何在 Tex Live 上报告 pdflatex/latexmk 上的 --output-directory 错误?它不会自行创建输出目录。因此,您只能手动创建目录。
你可以使用这个我无法在文件“foo.aux”上写入自己创建目录结构。
您还可以看到为什么 latex 没有告诉我哪个命令未定义?了解有关其他错误的更多信息。