编译多个 LaTeX 文件

编译多个 LaTeX 文件

我一直在尝试编译几个 LaTeX 文件,并一直在使用\input它。然而,这会导致一些我不知道如何修复的烦恼(我使用 TexMaker 作为编辑器)

  1. 如果我将序言包含在包含 -commands 的主 tex 文件以外的任何其他文件中,就会出现很多错误。\input因此,无论何时编译,我都必须始终编译整个文档。
  2. 当您使用一个文件时,TexMaker 具有一个很好的特性,如果您使用 GUI 编译然后查看您的 pdf,那么 pdf 会跳转到您刚刚处理的点。当您使用命令时,pdf\include只会打开到最后一页,这种情况就会消失。
  3. 我有时会意外地在焦点所在的子文件上点击编译,这会引发各种错误,因为子文件根本没有任何前导码(甚至没有\documentclass)。
  4. 当您处理文件的某些部分时,用于添加参考的有用弹出窗口\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

  1. 如果您在序言中使用了很多包,您应该考虑将它们放在 mythings.sty 包中。您可以调用\usepackage{mythings}。更多信息那里

  2. 这很复杂,我认为这更多的是 Texmaker 的问题,而不是真正的 LaTeX 问题。

  3. 您无法编译没有前言的文件,所以我的答案很愚蠢,不要尝试。如果您这样做,TexMaker 有一个“清理”功能,可以帮助您摆脱编译产生的各种文件。

  4. Ref 弹出窗口不起作用,但就像 2 一样。Texmaker 解析整个文档来帮助您,但文件结构只是后代(这意味着 LaTeX 将从 main.tex 文档解析到输入的文档,而不会反向执行。)。因此,如果您的 Ref 不在当前文件中,Texmaker 的行为是完全正常的(我知道这很烦人,但据我所知,每个文本编辑器都有同样的问题,例如,自动\cite{}完成功能在 SublimeText 中包含的文件中不起作用,因为 .bib 软件不知道在哪里找到信息。)

答案3

一个选项是独立包。在您的主文档中\usepackage{standalone}。在您的子文件中,\documentclass{standalone}并使用常规前言。当您输入/包含子文件时,独立包将忽略所有内容,然后\begin{document}像往常一样编译文件的其余部分。这让您可以像已经做过的那样编译主文档。另一方面,您现在可以编译子文件,而不会出现大量错误。

对于我当前的大型文档,我不使用独立包。相反,我有一个standalone.tex具有相同前言的文件,然后输入我目前正在处理的子文件。这将漫长的编译时间缩短到前言和文件本身所需的时间。文件本身的时间是不可避免的。可以使用“预编译前言”来缩短编译前言的时间,但我还没有研究过这些细节。

相关内容