所描述的问题已被确认为一个错误,
luatex
有望在 TeXLive 2018 中得到解决。此外,latexmk
它本身已在 4.55d 版本中扩展以处理此问题。
对于大量的讲座幻灯片,我正在根据选项将我的自定义 Makefile 重构为更精简的解决latexmk
方案-use-make
。
虽然这在pdflatex
as 引擎中运行良好,但它会导致大量make
调用lualatex
实际上是 texmf 树一部分的目标。最小示例:
% slides.tex
\RequirePackage{luatex85}
\documentclass{beamer}
\begin{document}
\begin{frame}{A Frame}
Some content
\end{frame}
\end{document}
如果我编译它
latexmk -lualatex -norc -use-make slides.tex
(-norc
确保没有传递任何隐藏选项latexmk
)
编译成功,但是我得到以下信息:
Latexmk: This is Latexmk, John Collins, 19 Jan. 2017, version: 4.52c.
Latexmk: 'lualatex': source file 'beamericonarticle.20.pdf' doesn't exist. I'll try making it...
------------
Running 'make "beamericonarticle.20.pdf"'
------------
make: *** No rule to make target `beamericonarticle.20.pdf'. Stop.
Latexmk: 'lualatex': source file 'beamericonarticle.pdf' doesn't exist. I'll try making it...
------------
Running 'make "beamericonarticle.pdf"'
------------
make: *** No rule to make target `beamericonarticle.pdf'. Stop.
<... and so on ..,>
Latexmk: All targets (slides.pdf) are up-to-date
我认为罪魁祸首来自这样一个事实,即它的行为与用于输入依赖性跟踪的选项lualatex
略有不同(据我所知)。在该版本中,我们在生成的文件中为每个包含的图像找到了一行额外的行:pdflatex
-recorder
latexmk
lualatex
slides.fls
INPUT /opt/local/share/texmf-texlive/tex/latex/beamer/art/beamericonarticle.pdf
INPUT beamericonarticle.pdf <-- not generated by pdflatex!
INPUT /opt/local/share/texmf-texlive/tex/latex/beamer/art/beamericonarticle.20.pdf
INPUT beamericonarticle.20.pdf <-- not generated by pdflatex!
因此显然,latexmk
不知道如何利用这些“额外”的输入,因此需要make
构建它们。
使用版本:
This is LuaTeX, Version 1.0.4 (TeX Live 2017/MacPorts 2017_2)
Latexmk, John Collins, 19 Jan. 2017. Version 4.52c
问题:
- 这是一个错误还是一个功能
lualatex
? - 或者也许图形驱动程序的 lua 特定部分应该受到指责?
- 可能的解决方法?
答案1
对于那些有足够冒险精神去摆弄(有惊人详尽文档记录的!)latexmk
源代码的人,我有一个快速的解决方法:
应为以下几行插入在parse_fls
函数定义中( sub parse_fls
):
4588 elsif (/^\s*INPUT\s+([^\/]*)$/) {
4589 # Ignore entries without any directory part
4590 # Those are additionally inserted in some versions of lualatex
4591 # see: https://tex.stackexchange.com/questions/420274
4592 next;
4593 }
请注意,行号会有所不同,具体取决于 的确切版本latexmk
。它们应该插入在下列现有行:
4594 elsif (/^\s*INPUT\s+(.*)$/) {
4595 # Take precautions against aliasing of foo, ./foo and other possibilities for cwd.