\endinput: 这是用来做什么的?

\endinput: 这是用来做什么的?

我正在处理一个大文档,我正在使用命令\include将章节一个接一个地排列。在网上我了解到这个\endinput命令的存在。但是我不明白如何使用它。我的问题:

  1. 如果我有一个名为的 LaTeX 章节文件chapter1.tex,我应该将\endinput命令放在文件的最后一行chapter1.tex吗?

  2. 如果问题 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 代码。

如果您想暂时忽略本章的尾部,\included 文件中的自己的章节会很有用。同时,它允许您生成仅包含章节第一部分的部分 PDF。这在写作阶段非常有用,例如,如果您应该将文档的这一部分发送给其他人进行审阅。\endinput\includeonly

据我所知,LaTeX 软件包作者的指南指出,类和软件包文件应以显式结尾\endinput。我个人认为这是很好的编程风格。我还记得听说过一些技巧,这些技巧需要\endinput在处理的文件中显式结尾,我认为这些技巧随后会被临时重新定义。

总结一下,你完全不用担心\endinput,完全不用也没关系。

答案4

如果包本身中有包的文档,则可以\endinput在文档文本开始之前使用,例如包url

相关内容