使用带有 .sty 文件的子文件包

使用带有 .sty 文件的子文件包

项目结构 Wiki子文件 Wiki,我建立了以下项目结构:

./mydocument.tex
./mystyle.sty
./tex/mysubfile.tex
./img/

mydocument.tex好像:

\documentclass{report}
\usepackage{mystyle}
\begin{document}
\subfile{./tex/mysubfile.tex} 
\end{document}

mystyle.sty好像:

\ProvidesPackage{mystyle}
\usepackage{subfiles}
% other packages
% command declarations

mysubfile.tex好像:

\documentclass[../mydocument.tex]{subfiles}
\begin{document}
% stuff goes here.
\end{document}

我使用(1)该subfiles包是因为我想mysubfile.tex自行编译,(2)mystyle.sty因为我想将这个项目模块化一点,并将包和命令声明拆分到它们自己的.sty文件中。问题是当我尝试mysubfile.tex自行编译时它无法“看到” mystyle.sty

问:有什么方法可以让我继续满足 (1)、(2) 和上面概述的项目结构并使一切正常运行?包中的某种选项或命令subfiles

我试过:(1) 移至mystyle.sty不同的目录,(2) 将subfiles声明\usepackage{subfiles}移至文档的不同部分,(3) 检查subfiles文档。但都无济于事。

我认为次优方案是将所有项目文件放在同一个文件夹中,然后删除我的.\tex文件夹。至少这样我就可以编译了。但我宁愿不牺牲项目结构。

答案1

无需将其他.tex文件放入子目录中。我不知道该subfiles软件包,但我可以向您推荐standalone此软件包(我应该在这里提到我编写了它,所以我有偏见)。将所有必需的软件包放入子文件中,并像平常一样编译它们,只需将其用作standalone类即可。真正的类可以通过选项给出class,默认为article。在主文档中加载standalone 包裹,也许可以subpreambles选择将子文件中的前言包含到主文件中。

% Main file
\documentclass{report}
\usepackage{standalone}
\usepackage{mystyle}
\begin{document}
\input{mysubfile.tex}
\end{document}


% mysubfile.tex
\documentclass{standalone}
\usepackage{mystyle}
\begin{document}
% stuff
\end{document}

答案2

我有一个巧妙的解决方法,可以使用该subfiles包来实现这一点。只需稍微修改一下项目结构:

./main/mydocument.tex
./main/mystyle.sty
./tex/mysubfile.tex
./img/

然后,始终调用以 开头的文件..,例如../main/mystyle.sty。无论您从./main/mydocument.tex还是开始,此路径都是正确的./tex/mysubfile.tex

答案3

如果您mystyle.sty在多个文档中使用,您可能需要考虑将其放在 TeX 可搜索的位置。通常,这是命令的输出kpsewhich -var-value TEXMFHOME(更准确地说,是tex/latex/该目录的子目录)。将文件放在那里后,您应该运行命令texhash。然后,kpsewhich myfile.sty应该打印文件的路径。这样做之后,它将在您的所有 LaTeX 文档中起作用,而无需在与文件相同的目录中\usepacakge{mystyle}复制。mystyle.sty.tex

答案4

上周我遇到了同样的问题,使用子文件包。如果您的文件结构包含不同的目录,您经常会发现诸如“未找到文件 mychapter.tex”或“未找到 mystyle.sty”之类的寻址错误。为了避免此类问题,请始终使用每个文件的完整路径,特别是 main.tex,因为样式文件通常与 main.tex 位于同一目录中。

这是你之前给出的例子

/home/username/Documents/report/mydocument.tex
/home/username/Documents/report/mystyle.sty
/home/username/Documents/report/tex/mysubfile.tex
/home/username/Documents/report/img/

mydocument.tex 如下所示:

\documentclass{report}
\usepackage{mystyle}
\begin{document}
\subfile{/home/username/Documents/report/tex/mysubfile.tex} 
\end{document}

mystyle.sty 如下所示:

\ProvidesPackage{mystyle}
\usepackage{subfiles}
% other packages
% command declarations

mysubfile.tex 如下所示:

\documentclass[/home/username/Documents/report/mydocument.tex]{subfiles}
\begin{document}
% stuff goes here.
\end{document}

这一切都按照 LaTeX 查找文件的逻辑进行:当你编译“mysubfile.tex”时,参考目录将是/home/用户名/Documents/report/tex.它将在位于目录中的 mydocument.tex 文件中查找序言/home/用户名/Documents/报告/. mydocument.tex 将查找位于参考目录中的 mystyle.sty:/home/用户名/Documents/report/tex

顺便说一句,您可以将 \usepackage{subfiles} 放入 mydocument.tex。在 main.tex 中加载此包可能会更容易

相关内容