在文档主体中,我喜欢暂时切换回 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}