latexmkrc 和子文件

latexmkrc 和子文件

我有一个 LaTeX 项目,使用包将其拆分为多个文件subfiles。该项目具有以下结构:

main.tex
.latexmkrc
lib/custom-class.cls
lib/custom-package.sty
foo/bar.tex
foo/image.png
baz/...

我用来latexmkrc将类文件和包文件包含libTEXINPUTS

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

相关内容