我又感到困惑了,因为以前这个方法有用,但现在不行了。我正在对一组 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 文件名解析器发生了变化以及您遇到的(非常具体的)因素组合造成的。您有两个文件位于不同的路径中(既在\graphicspath
kpse 搜索的路径中,又不在),并且您要求的文件没有扩展名。由于 TeX(不幸的是)将image
和理解image.tex
为同一个文件,因此它会找到image.tex
并且 LaTeX 的文件名解析器会将路径添加Folder2/
到名称前面。然而,这导致 LaTeX 无法找到Folder1/image.pdf
。
此问题现已在开发版本 (PR#777),并将于 2022-06-01 版本中推出。