为什么当我省略文件扩展名时,LaTeX 无法找到 pdf 文件,而只有 tex 文件可供选择?

为什么当我省略文件扩展名时,LaTeX 无法找到 pdf 文件,而只有 tex 文件可供选择?

我又感到困惑了,因为以前这个方法有用,但现在不行了。我正在对一组 LaTeX 文档进行源外构建,这意味着我在目标文件夹中调用 LaTeX,而源文件位于不同的地方。但是,\graphicspath如果我在调用中省略文件结尾,似乎会出现问题\includegraphics。由于这可能与操作系统有关,我使用的是 Windows 10 和 pdfTeX,版本 3.141592653-2.6-1.40.24(MiKTeX 21.12.10)(预加载格式=pdflatex 2022.1.14)

这是我的文件夹和文件结构:

.
├── Documentation
│   └── MyDocument.tex
├── DocumentationBuild
├── Precompile
│   └── MyPrecompile.tex
└── Buildscript.bat

如果文件MyPrecompile.tex是任何类型的 TeX 图形:

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}
\fill (0,0) rectangle ++ (5cm,5cm);
\end{tikzpicture}
\end{document}

我的文档MyDocument.tex指的是没有文件结尾的预编译,但期望加载 PDF:

\documentclass{article}
\usepackage{graphicx}
\graphicspath{{../Precompile/}}

\begin{document}
    \includegraphics{MyPrecompile}
\end{document}

Buildscript.bat这是从根文件夹调用的批处理脚本:

cd DocumentationBuild
pdflatex ../Precompile/MyPrecompile.tex
pdflatex ../Documentation/MyDocument.tex
cd ..

你可能会问,为什么我要使用该行\graphicspath{{../Precompile/}},因为这适用于那些手动构建文件但仍想进行编译的人MyDocument

这种设置的问题是,它会导致! LaTeX Error: File `MyPrecompile' not found.,但是当我删除\graphicspath或写入时\includegraphics{MyPrecompile.pdf},它就可以工作,因此我想知道,这里出了什么问题?


简化

一开始我不确定,如果这仅仅是一个问题,\includegraphics所以我把话题复杂化了,我很抱歉。我重新构建了设置,这样你就不需要再考虑源构建或批处理脚本了。这是文件夹设置:

.
├── Folder1
│   └── image.pdf
├── Folder2
│   └── image.tex
└── MyDocument.tex

这是MyDocument.tex

\documentclass{article}
\usepackage{graphicx}
\graphicspath{{./Folder2/}{./Folder1/}}

\begin{document}
    \includegraphics{image} %%%Problem can be solved by adding .pdf
\end{document}

image.tex仍然是一样的,我检查的是:它必须是.tex,如果你改变扩展,问题也会消失。

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}
\fill (0,0) rectangle ++ (5cm,5cm);
\end{tikzpicture}
\end{document}

答案1

此问题是由于 LaTeX 文件名解析器发生了变化以及您遇到的(非常具体的)因素组合造成的。您有两个文件位于不同的路径中(既在\graphicspathkpse 搜索的路径中,又不在),并且您要求的文件没有扩展名。由于 TeX(不幸的是)将image和理解image.tex为同一个文件,因此它会找到image.tex并且 LaTeX 的文件名解析器会将路径添加Folder2/到名称前面。然而,这导致 LaTeX 无法找到Folder1/image.pdf

此问题现已在开发版本 (PR#777),并将于 2022-06-01 版本中推出。

相关内容