我一直在尝试编译几个 LaTeX 文件,并一直在使用\input
它。然而,这会导致一些我不知道如何修复的烦恼(我使用 TexMaker 作为编辑器)
- 如果我将序言包含在包含 -commands 的主 tex 文件以外的任何其他文件中,就会出现很多错误。
\input
因此,无论何时编译,我都必须始终编译整个文档。 - 当您使用一个文件时,TexMaker 具有一个很好的特性,如果您使用 GUI 编译然后查看您的 pdf,那么 pdf 会跳转到您刚刚处理的点。当您使用命令时,pdf
\include
只会打开到最后一页,这种情况就会消失。 - 我有时会意外地在焦点所在的子文件上点击编译,这会引发各种错误,因为子文件根本没有任何前导码(甚至没有
\documentclass
)。 - 当您处理文件的某些部分时,用于添加参考的有用弹出窗口
\ref
不再存在,这会使事情变得复杂。
除了将所有内容放回到一个笨重的 tex 文件中之外,是否有办法修复部分或全部这些问题?
例如,是否有一个可以解决大部分问题的软件包?如果 2)、3) 和 4) 至少有部分解决方案,那就太好了。对于 1),我可以接受。
答案1
1) 如果我将序言包含在包含 \input 命令的主 tex 文件以外的任何其他文件中,就会出现很多错误。因此,无论何时编译,我都必须编译整个文档。
解决这个问题的方法是使用以下{subfiles}
包:
放入\usepackage{subfiles}
main.tex的前言部分。
其他 *.tex 文件包括:
\subfile{sectionOrCapter} % no extention needed
所有其他 *.tex 文件如下所示:
\documentclass[main.tex]{subfiles}
%% special definitions or command overrides here
\begin{document}
% any LaTeX content
\subfile{someOtherSubfile}
% any LaTeX content
\subfile{someMoreSubfile}
% any LaTeX content
\end{document}
需要记住以下几点:
全部
main.tex
子文件在它们的命令中引用\documentclass
,即使它们是“传递的”。引用
main.tex
是*相对路径,这意味着如果你的子文件埋在深层文件夹结构中,你必须添加足够的../
如果您的子文件位于文件系统文件夹中,您应该使用命令
\graphicspath
指向包含图像的文件夹:
main.tex
\graphicspath{{.}}
\begin{document}
\includegraphics{imageInRootFolder}
\includegraphics{subfolder/imageInSubFolder}
\subfile{subfolder/someSubfile}
\end{document}
subfolder/someSubfile.tex
\graphicspath{{../}}
\begin{document}
\includegraphics{imageInRootFolder}
\includegraphics{subfolder/imageInSubFolder}
\end{document}
或者,您可以切换到 TexStudio,作为 TexMaker 的后继者,它可以单独处理编译嵌套文件......
答案2
如果您在序言中使用了很多包,您应该考虑将它们放在 mythings.sty 包中。您可以调用
\usepackage{mythings}
。更多信息那里。这很复杂,我认为这更多的是 Texmaker 的问题,而不是真正的 LaTeX 问题。
您无法编译没有前言的文件,所以我的答案很愚蠢,不要尝试。如果您这样做,TexMaker 有一个“清理”功能,可以帮助您摆脱编译产生的各种文件。
Ref 弹出窗口不起作用,但就像 2 一样。Texmaker 解析整个文档来帮助您,但文件结构只是后代(这意味着 LaTeX 将从 main.tex 文档解析到输入的文档,而不会反向执行。)。因此,如果您的 Ref 不在当前文件中,Texmaker 的行为是完全正常的(我知道这很烦人,但据我所知,每个文本编辑器都有同样的问题,例如,自动
\cite{}
完成功能在 SublimeText 中包含的文件中不起作用,因为 .bib 软件不知道在哪里找到信息。)
答案3
一个选项是独立包。在您的主文档中\usepackage{standalone}
。在您的子文件中,\documentclass{standalone}
并使用常规前言。当您输入/包含子文件时,独立包将忽略所有内容,然后\begin{document}
像往常一样编译文件的其余部分。这让您可以像已经做过的那样编译主文档。另一方面,您现在可以编译子文件,而不会出现大量错误。
对于我当前的大型文档,我不使用独立包。相反,我有一个standalone.tex
具有相同前言的文件,然后输入我目前正在处理的子文件。这将漫长的编译时间缩短到前言和文件本身所需的时间。文件本身的时间是不可避免的。可以使用“预编译前言”来缩短编译前言的时间,但我还没有研究过这些细节。