![使用带有 .sty 文件的子文件包](https://linux22.com/image/235061/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20.sty%20%E6%96%87%E4%BB%B6%E7%9A%84%E5%AD%90%E6%96%87%E4%BB%B6%E5%8C%85.png)
继项目结构 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 中加载此包可能会更容易