在文档正文中加载文件时重新创建文档序言的条件

在文档正文中加载文件时重新创建文档序言的条件

在文档主体中,我喜欢暂时切换回 LaTeX 序言中的活动模式,即应忽略宏之间的空格。我不介意是否得到! LaTeX Error: Missing \begin{document}。我知道这通常是不会做的。切换将由用于加载大小文件的包完成。

细节:这是我的后续问题本地切换不同的字体大小。我喜欢加载一个文件,该文件通常只在文档主体中的本地范围内的前言中加载。问题是它在宏之间包含一些空格,这些空格在前言中被忽略,但在文档中不会被忽略。我无法将空格的 catcode 设置为“忽略”,因为宏内可能有空格,而这些空格应该保留为空格。通过设置忽略所有行尾\endlinechar=-1有帮助,但不能捕获所有空格。我也尝试用 包装\input\ignorespaces .. \unskip但这只会删除第一个和最后一个空格,但会保留其他空格。

我目前不明白前导模式是如何实现的。显然 TeX 的排版机制是绊脚石。如果答案能够解释一下这是如何实现的,那就太好了。

答案1

确实有前导模式。TeX 启动时处于垂直模式,此时空格不起作用;当然这并不意味着空格会被忽略:在垂直模式下到达 TeX 胃中的空格“命令”不起作用;宏定义中的空格是否起作用取决于宏展开时 TeX 所处的模式。

LaTeX 首先设置\everypar发出错误,并将当前字体设置为\nullfont,但除了避免排版文本(如果文本潜入序言中,通常会发生这种情况)之外,这没有任何效果。

答案2

我不确定这是否是你想要的,但这是我的看法:

首先,完全可以在文档正文中使用任何前言命令,例如,

\let\@preamblecmds\relax

可以使用 删除空格\zap@space。这是一个分隔宏,因此您可能需要重新定义它以使其适合作者命令。

\documentclass{book}
\makeatletter
\let\@preamblecmds\relax
\begin{document}
\zap@space  
  \usepackage{lipsum}
\lipsum[1]  \@empty
\end{document}

相关内容