我有一个文件bar.tex
,它包含在其他文件中。
$ cat bar.tex
hello, world
$ cat foo.tex
\documentclass{article}
\begin{document}
\include{bar.tex}
\end{document}
$ 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)) (./foo.aux
(./bar.tex.aux))
No file bar.tex.tex.
(./foo.aux (./bar.tex.aux)) )
No pages of output.
Transcript written on foo.log.
您可以在上面看到,pdflatex 无法包含该文件,因为No file bar.tex.tex
。它正在寻找bar.tex.tex
而不是
bar.tex
。
当然,下面的方法可以正常工作。
$ cat foo2.tex
\documentclass{article}
\begin{document}
\include{bar}
\end{document}
$ pdflatex foo2.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
(./foo2.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))
No file foo2.aux.
(./bar.tex) [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./foo2.aux
(./bar.aux)) )</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr
10.pfb>
Output written on foo2.pdf (1 page, 11574 bytes).
但当我\input
同时使用\include
两者时bar.tex
,bar
似乎有效。
$ cat foo3.tex
\documentclass{article}
\begin{document}
\input{bar.tex}
\end{document}
$ pdflatex foo3.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
(./foo3.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))
No file foo3.aux.
(./bar.tex) [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./foo3.aux)
)</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on foo3.pdf (1 page, 11574 bytes).
Transcript written on foo3.log.
$ cat foo4.tex
\documentclass{article}
\begin{document}
\input{bar}
\end{document}
$ pdflatex foo4.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
(./foo4.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))
No file foo4.aux.
(./bar.tex) [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./foo4.aux)
)</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on foo4.pdf (1 page, 11574 bytes).
Transcript written on foo4.log.
\include
为什么和之间存在这种不一致\input
,即为什么\include
要求包含的文件不带扩展名而\input
并不关心是否指定扩展名?
答案1
不存在不一致。该\include
命令应该有一个文件名作为参数没有扩展;这是记录的行为,并且是要求。
该命令仅用于输入.tex
文件,以便通过对材料进行“选择性处理” \includeonly
。
另一方面,\input
可以用于任何.tex
这类文件(甚至是二进制文件,如果你足够大胆的话),只要它们有一个扩展名,因为 TeX 的默认设置是在缺少扩展名时添加(某些实现除外)。
因此,这两个命令彼此之间有很大不同,并且不能互换。最终,\include
使用\input
,但这不是用户应该关心的事情。
答案2
线索就在您显示的终端输出中。
(./bar.tex.aux)
\include
需要构造一个文件的名称aux
,并且在 tex 中如果用户请求foo
您无法判断实际的文件输入是否foo
如此foo.tex
,那么最可靠的方法(如果您有可靠的用户)是记录该文件应该始终有一个扩展名,并且参数\include
不应该提及扩展名。然后#1.tex
是文档文件,#1.aux
是辅助文件。