LaTeX sphack 命令系列

LaTeX sphack 命令系列

LaTeX 提供了许多命令,可用于希望不可见的宏中,即在文本中间使用时不留下任何额外空格。这些宏包括、、\@esphack和可以在 中找到。\@bsphack\@Esphack\@vbsphackltspace.dtx

在所有这些命令中, \@vbsphack它都是独立的,因为它在源代码中进行了描述,但未实现,并进行了如下注释:

另一种变体对于不可见的、不应存在的事物很有用vmode(有些人对边际的感觉就是这样)。如果它出现在 vmode 中,那么它会进入 hmode 并确保\@savsk不为零,以便 \ignorespaces稍后放入。目前不使用。

宏定义复制如下:

\def \@vbsphack{ %
\relax \ifvmode
\leavevmode
\@savsk 1sp
\@savsf \spacefactor
\else
\ifhmode
\@savsk \lastskip
\@savsf \spacefactor
\fi
\fi
}

有人能解释一下为什么应该\@savsk不为零吗?源代码中提供的解释不是很清楚。

最后,我确信这些宏的名称是不是 lisp 的遗物,有人能提供一下这个姓氏的起源或历史吗?

答案1

我至少可以在命名方面提供帮助:这些是“空间黑客”,旨在避免使用在输出方面“不执行任何操作”的命令弄乱间距。所以你有\@bsphack= 'begin space hack',\@esphack= 'end space hack'。我认为\@Esphack这仅适用于浮点数,但对此我不确定。

答案2

约瑟夫回答了命名问题(我一直很喜欢 esp hack 的想法)。

之所以设为\@savsk非零,是因为它进入水平模式(\leavevmode)并\@esphack检查是否\@savsk为正。如果是,则它用于\ignorespaces吞噬空间标记(如引文所述)。

我不太确定我是否知道这可以用于什么。

相关内容