我有一个 LaTeX 项目,使用包将其拆分为多个文件subfiles
。该项目具有以下结构:
main.tex
.latexmkrc
lib/custom-class.cls
lib/custom-package.sty
foo/bar.tex
foo/image.png
baz/...
我用来latexmkrc
将类文件和包文件包含lib
在TEXINPUTS
:
ensure_path( 'TEXINPUTS', 'lib//' )
当我构建时,项目构建正确main.tex
,但是当我构建其中一个子文件(例如for/bar.tex
)时,我收到错误
File `custom-class.cls` not found.
我意识到这是因为.latexmkrc
在子目录中构建时不使用。我找到了一个讨论在 VSCode 扩展 LaTeX-Workshop(我正在使用)的 GitHub 页面上,最好的解决方案似乎是直接复制并粘贴.latexmkrc
到子目录中——问题是我有很多(大约 20 个)子目录,我想避免每次更改 main 时都必须更改所有这些文件.latexmkrc
,尤其是因为我不是唯一一个从事这个项目的人。还有其他方法吗,或者我是否可以.latexmkrc
在每个子目录中创建一个只导入 main 的子目录.latexmkrc
?
谢谢您的指点。
答案1
尝试在主文件的最开始添加以下几行:
\makeatletter
\def\input@path{{lib/}{../lib/}}
\makeatother
foo
这将从两个角度(主目录和子文件夹)将输入路径设置为要搜索其他文件的目录。
我使用以下示例项目测试了这种方法:
% main.tex
\makeatletter
\def\input@path{{lib/}{../lib/}}
\makeatother
\documentclass{custom-class}
\usepackage{custom-package}
\usepackage{graphicx}
\usepackage{subfiles}
\begin{document}
\subfile{foo/bar.tex}
\end{document}
% foo/bar.tex
\documentclass[../main]{subfiles}
\begin{document}
\includegraphics[width=2cm]{image.png}
\end{document}
% cp `kpsewhich example-image.png foo/image.png`
% lib/custom-class.cls
\LoadClass{article}
% lib/custom-package.sty
\endinput