我有一系列使用 XeLaTeX 编译的文件。我最近尝试使用 LuaLaTex 进行编译,结果弄得一团糟。我把问题追溯到\IfFileExists
我的一个宏的使用。处理队列外编译作业的 bash 脚本正在执行许多操作,例如检索和格式化 LilyPond 文件以将其包含在 TeX 文档中。如果它能够将所有内容整合在一起,它会在构建目录中创建一个标志文件,这样 TeX 就知道它可以继续处理音乐了。
此 MWE 在 XeLaTex 中按预期运行,但在 LuaLaTex 中失败,即使文件存在:
\documentclass{minimal}
\begin{document}
Song XX:
\IfFileExists{XX-has-music}{%
Typeset block for when music exists.
}{%
Typeset block for when music doesn't exist.
}
\end{document}
LuaLaTex 似乎不存在文件路径问题,因为即使\input
在同一目录中运行,也表明它可以在那里找到内容。发生了什么?
答案1
LuaLaTeX 引擎对文件名做出了一些假设,而 XeLaTeX 则没有。具体来说,它假设所有文件应该在句点后面有一个文件扩展名段,如果没有另行指定这样的扩展名,则它必须是.tex
。
基于此假设,它正在混淆文件名,并且检查\IfFileExists{XX-has-music}
实际上正在执行类似\IfFileExists{XX-has-music.tex}
但无法找到文件的操作。让 LuaLaTeX 满意的解决方案是在所有文件名中至少包含一个句点。即使调整此示例以使用文件名,XX.has-music
也会在任一引擎中进行编译。