我正在处理一个大文档,我正在使用命令\include
将章节一个接一个地排列。在网上我了解到这个\endinput
命令的存在。但是我不明白如何使用它。我的问题:
如果我有一个名为的 LaTeX 章节文件
chapter1.tex
,我应该将\endinput
命令放在文件的最后一行chapter1.tex
吗?如果问题 1 的答案是肯定的,那么我是否应该对其他每一章都做同样的事情?
我以前从未使用过\endinput
,到目前为止一切都运行良好。
答案1
不,你不需要它。
\endinput
用于在文件中途终止输入过程。\endinput
文件末尾的 A 是无用的(而且无害)。
有些人喜欢使用它\endinput
来明确显示文件结尾。恕我直言,这毫无意义。
答案2
这是一个\endinput
可能有用的案例。假设我正在编写一本教科书,每章都以问题和解决方案结尾。我想构建两个单独的版本:一个面向学生,没有解决方案,一个面向教师,有解决方案。
我可以定义一个条件,\ifstudents
比如
\newif\ifstudents
%\studentsfalse % this is implicit
%\studentstrue % uncomment for the students' version
在序言中,并准备我的章节
<text>
\section*{Problems}
<problems>
\ifstudents\endinput\fi
\section*{Solutions}
<solutions>
\studentsfalse
现在只需切换(教师版)和\studentstrue
(学生版)即可。
的一个重要特性\endinput
是 TeX 会继续读取到出现行的末尾\endinput
(当它被扩展时),因此后面的内容仍然可以被读取。以下是等效的
\ifstudents
\expandafter\endinput
\fi
忘记\expandafter
会导致“条件不完整”错误消息。
答案3
宏在内部\include
使用\input
宏来读取给定的文件。宏\endinput
只是结束此文件的输入,即允许您忽略之后的所有内容并立即返回到父文件。正如 Herbert 已经指出的那样,这对于包含其文档的包或类似文件很有用,并且将其放在后面,\endinput
这样就不会将其解释为 LaTeX 代码。
如果您想暂时忽略本章的尾部,\include
d 文件中的自己的章节会很有用。同时,它允许您生成仅包含章节第一部分的部分 PDF。这在写作阶段非常有用,例如,如果您应该将文档的这一部分发送给其他人进行审阅。\endinput
\includeonly
据我所知,LaTeX 软件包作者的指南指出,类和软件包文件应以显式结尾\endinput
。我个人认为这是很好的编程风格。我还记得听说过一些技巧,这些技巧需要\endinput
在处理的文件中显式结尾,我认为这些技巧随后会被临时重新定义。
总结一下,你完全不用担心\endinput
,完全不用也没关系。
答案4
如果包本身中有包的文档,则可以\endinput
在文档文本开始之前使用,例如包url