为什么 LuaLaTeX 的 \IfFileExists 会失败而 XeLaTeX 却能成功?

为什么 LuaLaTeX 的 \IfFileExists 会失败而 XeLaTeX 却能成功?

我有一系列使用 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也会在任一引擎中进行编译。

相关内容