\strut 定义解释

\strut 定义解释

有人能向我解释一下这个宏的细节吗\strut?为什么这个框\copy在数学模式下是 ied,但\unhcopy在其他情况下是 ied?

% latex.ltx, line 484, but identical in plainTeX
\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}

TeXBook指出(例如第 120 页),拆箱宏会取消设置盒子外层的任何胶水,但是里面没有胶水\strutbox,是吗?

据我所知,这\strutbox实际上是一个空框,其高度(.7\baselineskip约为\baselineskip字体大小的 1.2 倍)和深度(.3\baselineskip),但宽度为零:

% latex.ltx, line 2357, inside the `\set@fontsize` macro
\setbox\strutbox\hbox{%
  \vrule\@height.7\baselineskip
        \@depth.3\baselineskip
        \@width\z@}%

我认为使用盒子比重复使用更有效\vrule。您还可以使用\ht\strutbox\dp\strutbox访问高度和深度作为尺寸。这允许您编写.5\ht\strutbox.5*.7\baselineskip需要 eTeX\dimexpr或时间分配。

我真的很想更好地理解 TeX 的细微差别。

答案1

你不能\unhcopy在数学模式下创建一个水平盒子,这很简单!确实

$\unhcopy\strutbox$

给出

! Incompatible list can't be unboxed.
<*> $\unhcopy\strutbox
                      $

该命令\unhcopy在数学模式之外使用,原因有二:

  1. 它启动水平模式;
  2. 它删除了一层的装箱,避免了“太深”的嵌套。

类似的定义是\leavevmode

\def\leavevmode{\unhbox\voidb@x}

其中是一个应始终保持无效的盒子寄存器。和\voidb@x之间的区别在于前者会破坏盒子寄存器的内容,而后者只会生成一份副本并保持寄存器完好无损。\unhbox\unhcopy

的职责之一\fontsize是提供一个方便的\strut;支柱的高度和深度始终是基线跳跃的 7/10 和 3/10,由 的第二个参数设置\fontsize。因此,当执行诸如的命令时\large,支柱也会改变;当组结束或执行另一个命令(可能是隐式的)时,它将恢复\fontsize

(就其余部分而言你是对的。)

笔记。

寄存器\voidb@x可用于确保盒子寄存器为空,即\setbox\mybox=\box\voidb@x,这会破坏的内容\mybox,并且比等效的更有效{\setbox0=\box\mybox}

相关内容