\hbox 和 \mbox 的区别

\hbox 和 \mbox 的区别

\hbox和之间有什么区别\mbox

有关的:

答案1

\hbox是 TeX 原语,并且\mbox是通过以下方式定义的 LaTeX 宏

\long\def\mbox#1{\leavevmode\hbox{#1}}

意思\leavevmode是它开始一个段落,比较一下:

\hbox{one}
\hbox{two}
three

\mbox{one}
\mbox{two}
three

另一个区别是,该参数被解析为一个普通的宏参数,因此例如可以工作并且与而\mbox a相同是语法错误。会导致错误但会将逐字装入框。\mbox{a}\hbox a\mbox{\verb|{|}\hbox{\verb|{|}{

如果您确实使用括号组作为参数,则它必须是明确的{}(或具有 catcode 1 和 2 的其他字符),但\hbox可以使用隐式括号,例如\hbox\bgroup... \egroup(特别是您可以在一个宏中开始一个框并在另一个宏中结束它)。

不要\hbox在 LaTeX 文档中使用(尽管您经常会在内部包代码中看到它)。


根据要求,以下是一些进一步的详细信息\leavevmode

\documentclass{article}

\begin{document}

compare

\hbox{one}
\hbox{two}
three

with

\mbox{one}
\mbox{two}
three

see?


compare

zero
\hbox{one}
\hbox{two}
three

with

zero
\mbox{one}
\mbox{two}
three

see?

\end{document}

在此处输入图片描述

第一个段落之后compare是段落分隔符,因此 TeX 会进入垂直的模式。在垂直模式下,框垂直堆叠。接下来的两个框是\hbox带有 和 的onetwo因此它们垂直附加到当前垂直列表中。然后是字母tthree字母在垂直模式下是不允许的,因此 TeX 将其推回到输入中,而是开始一个新段落,添加段落缩进,然后three在水平模式下再次看到 。

在第一个段落之后,with又出现了一个段落中断,但这次 TeX 看到了\leavevmode(或者更确切地说,看到了\unhbox它的定义中的),因此它开始了一个新段落,添加了缩进,并且然后\hbox{one}在水平模式下可见。\leavevmode在 h 模式下不执行任何操作,因此在行尾字符导致的单词空格的粘连之后,TeX 会\hbox{two}看到水平之后one,并three跟在同一段落中。

在第二个 之后compare,TeX 再次处于垂直模式,但这次段落以 开头zero,因此 TeX 在看到 之前就已经处于水平模式\hbox,所以\hbox和 的\mbox行为相同。

基本上 LaTeX 会尽力绝不暴露原始的 TeX 盒子行为:所有 LaTeX 盒子都以 开头,\leavevmode因此它们的行为类似于\mbox而不是。(区别基本上与 (LaTeX) 和(TeX) 以及(LaTeX) 和(TeX)\hbox之间的区别相同。)\parbox\vbox\rule\hrule

相关内容