如何在LaTeX中使用\include命令后不产生分页

142

由于我的子章节位于不同的文件中,我的LaTeX会在每个子章节后面产生分页符。我使用\include{file}命令,在使用该命令后会添加分页符。

我希望在使用\include{file}命令时不再产生分页符。

如何在使用include命令后不产生分页符?


2
我不相信通常情况下在 subsection 后会出现分页符。你使用的是哪个 documentclass? - Cascabel
1
你能否发布你的头文件(从\begin{document}之前的所有内容),这样我们就可以知道出了什么问题? - Gerald Senarclens de Grancy
19
使用\input,否则使用\input,或者使用\input - egreg
5个回答

198

\include 始终使用 \clearpage,这是一个不太明智的默认选项。它适用于整个章节,而不适用于子节(反正你为什么要将子节放在单独的文件中呢?)。

您可以通过使用 \input{filename} 或加载 newclude 包并使用 \include*{filename} 来解决这个问题。


我的数据库项目需要规划文档和“构建”文档,以展示如何设置系统。它们是我LaTeX文件中的部分。 - Léo Léopold Hertz 준영
11
我可以想到许多理由将子节放在不同的文件中。首先想到的是,制作一份简历时,根据目标和/或职位申请,需要不同层次的详细信息。你只需使用一个“%”符号,就能轻松地删除或添加内容。 - Nicholas Hamilton
12
我写这篇回答已经有一段时间了,但我认为括号里的内容是用来表达讽刺的 :) - Will Robertson
\include 开始新页面的原因是为了让 \includeonly 能够正常工作。 - Carsten S
将章节裁剪成不同文件的另一个原因是:考虑编写练习册,始终在开头包含maketitle,但仅在打印时包含一个练习册。我个人认为,并不是每个练习册都可以视为一个章节,特别是因为更多的练习册是针对讲座中的单个章节而设计的。includeonly用于计算练习册的数量,例如带有练习(1.1-1.4)的第1页,带有练习(2.1-2.3)的第2页等等。 - C-star-W-star
Will已经解释过这个问题并不是字面意思,但如果有人确实在问自己,这里还有另一个原因:TeXStudio可以将编辑窗口分成多个窗格,但无法在不同的窗格中显示同一文件的不同部分。因此,拆分文档使得在插入标签/引用之间并确保一个部分实际上解释了另一个部分所需内容的同时,例如方法和结果(或结果和结论以及命名约定等)部分相互靠近变得更加容易。 - Zak

46

你可以在\include之前加上\let\clearpage\relax来避免因此引起的分页。因此,

\let\clearpage\relax
\include{file1}
\include{file2}
\include{file3}

会将三个文件(以及任何随后包含的文件)的内容放在一起,它们之间没有分页符。如果您想停止放松 \clearpage 命令,则可以像这样将要包含但不带分页符的文件包装在一个组中:

\begingroup
\let\clearpage\relax
\include{file1}
\include{file2}
\endgroup
\include{file3}

这将防止在file1和file2之间发生分页,但在file2后插入正常的分页。(注意:我不知道这是否会影响引用和页码,虽然我认为应该没问题。)


2
谢谢!当您有多个包含和引用,且不想为它们创建新页面时,此答案非常有效。只需将最后一个包含和参考文献部分组合在一起,不再使用clearpage即可。 - Manuel Ferreria
2
Manuel是正确的:你可以在任何地方使用“\begingroup\let\clearpage\relax ...\endgroup”技巧——停止在特定部分或部分之间进行分页,如果你希望参考文献与你的文本在同一页上等。 - John
1
这个解决方案似乎给我的参考文献带来了一些问题。在一个包含两个枚举列表的被包含文件中,对第二个列表项的引用没有生效。我不知道为什么会这样,但是转而使用newclude解决了问题。 - Mike Shulman
1
我建议不要使用这种方法,它会带来更多问题而不是解决问题(假设它首先解决了某些问题):请参见http://tex.stackexchange.com/a/185237/4427。 - egreg

4

威尔·罗伯逊建议使用的新包含包非常有用,可以避免使用clearpage。看起来,为了使\includeonly起作用,必须在\documentclass{...}之后立即调用该包。在我的论文复杂环境中,我也遇到了引用断裂的问题。

一个好的解决方法是,在最终版本不需要includeonly时,仅在草稿中使用includes:

\newif\ifdraft\drafttrue

或者

\newif\ifdraft\draftfalse

\ifdraft
  \include{...}
\fi

\ifdraft
  \include{file}
\else
  \input{file}
\fi

第一行可以很容易地通过makefile添加,以制作草稿或生产版本的生产目标。

\includeonly{file1,file2,...} 允许指定一个源文件列表,调用 \include{file1}(其中 file1 是一个示例)将显示在生成的文档中。其他文件不会出现,但在包含相应的辅助文件时,将被考虑在计数器、标签和内容表中。

换句话说,通过使用includeincludeonly,可以在草稿中保持编译时间短,同时具有正确的引用。 更多阅读请参见Wikibooks

@Will Robertson

\include非常有用,因为它允许通过\includeonly{...}仅构建所需的部分。在处理长文本时,仅包含长章节的一部分可以大大减少编译时间。它还非常有用,因为在处理某个点时无需翻页长草稿。最后,在版本管理中处理较小的源代码文件更加容易,例如Git。


请问您能否举个例子,说明如何编译一篇非常长的工作论文中的某一部分?我已经使用了以下答案中关于“pagesel”、“\discardpagesfromhere”和“\keeppagesfromhere”的方法。它们有些重叠,所以我很愿意学习,如果您能更好地处理这份草稿,请指教。http://tex.stackexchange.com/a/267555/13173 - Léo Léopold Hertz 준영
1
如果我理解正确,pagesel 通过允许精细控制哪些页面包含在最终构建中,实现了比 includeonly 更多的功能。Include 的范围要小得多,只包括以可开关方式包含源代码。 - gschenk

0

以下代码在大多数情况下都很健壮:

\cleardoublepage
\begingroup
\let\clearpage\relax
\include{./common/yourFile.tex}
\endgroup

第一个 \cleardoublepage 确保你的章节在双面打印时落在奇数页。

\let\clearpage\relax 取消了 \include 插入的 clearpage。

\begingroup \endgroup 确保作用域仅限于该 include。


-1

谢谢你,剑桥

使用\include而不是\input,并使用\includeonly命令选择要处理的部分。


3
这不是最好的建议。为什么在\input{...}是真正用于这些情况的命令时,你还想使用\include{...}来完成工作呢? - Florian R. Klein
2
这个答案似乎完全没有回答问题。(尽管它是一个有用的建议,带有良好的参考。) - jciloa
1
这并没有回答问题。 - EL_DON

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接