答案是何时应使用 \input 和 \include?提及:
\include
可以为您带来速度奖励,但它也不能嵌套,不能出现在序言中,并且强制在包含的文本周围分页。
但我写过一个似乎与此相矛盾的例子。
foo.tex
\documentclass{article}
\include{bar}
\begin{document}
\maketitle
Foo
\end{document}
巴氏
\title{Bar}
我可以foo.tex
成功编译,并且当我使用 PDF 阅读器查看生成的 PDF 时,我还可以看到标题。
$ pdflatex foo.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./foo.tex
LaTeX2e <2014/05/01>
Babel <3.9l> and hyphenation patterns for 2 languages loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
\@input{bar.aux}
(./bar.tex)
No file foo.aux.
LaTeX Warning: No \author given.
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./foo.aux) )</usr/share
/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texliv
e/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf
-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb>
Output written on foo.pdf (1 page, 24969 bytes).
Transcript written on foo.log.
\include
当我所链接的答案说这是不可能的时,为什么我却能在序言中做到这一点?
答案1
该\include
命令在开始时使用\clearpage
,但是到目前为止序言中还没有构建页面,因此没有效果。
这是文件中的一些代码latex.ltx
(缩短了!)
\def\include#1{\relax
\ifnum\@auxout=\@partaux
\@latex@error{\string\include\space cannot be nested}\@eha
\else \@include#1 \fi}
\def\@include#1 {%
\clearpage
%.... much more ...
}
由于\title{foo}
仅定义(最好设置)另一个宏,因此用于的文件中没有排版内容\include
。
这个小文档实际上做了同样的事情:
\documentclass{article}
\title{foo}
\clearpage% Does nothing here
\begin{document}
\clearpage% Does nothing here, since there is no page yet!
\maketitle
Foo
\end{document}
但一旦排版发生(即构成页面的内容),操作\include
必定在序言中失败,就好像你直接在序言中写了内容一样。
\include
所以,根本不要在序言中使用。
当然,在另一个文件中排版代码并\input
在序言中使用该文件时,错误将是相同的!
答案2
有许多不正确的乳胶输入结构实际上并不会产生错误,它们只是偶然和运气好才会产生错误。\include
只有在序言之后使用才会产生有用的效果,如果在序言之前使用,它可能像一个低效的版本一样工作,\input
并且您设法避免出现错误,但在这种情况下,行为的任何部分都不是设计的,它只是意外扩展了错误输入。
例如
\@input{bar.aux}
在您显示的输出中,正在写入控制台,该输出旨在写入主aux
文件,但由于辅助文件直到才打开,因此无法写入\begin{document}
。碰巧的是,在 tex 中写入未打开的流并不是错误,它只是写入控制台,但在这里除了名称之外,在其他所有情况下都是错误。