我想将文本括在框中。我的问题是,当下面的代码放在一行的开头时,它会导致换行/回车(框本身保持在一行上,其余段落从下一行开始)。但是当我在行的中间或末尾使用它时,它没问题。是什么导致了这种行为?
\def\boxit#1#2{\hbox{\vrule
\vtop{%
\vbox{\hrule\kern#1%
\hbox{\kern#1#2\kern#1}}%
\kern#1 \hrule}%
\vrule}}
\def\emptybox#1#2#3{\hbox spread #3{\hfil
\vtop spread #2{
\vbox spread #1{\vfil}
\vfil}}}
答案1
与最初的想法相反,\hbox
不会启动水平模式。原因是\vbox
可以通过堆叠 es 来组成a \hbox
:
\vbox{\hbox{A}\hbox{B}\hbox{C}}
这将导致
ABC 分类
而所得的宽度\vbox
将是最宽的宽度\hbox
。
同样适用于\vbox
、\vtop
和。相反,将\box
和应用于包含 的框寄存器将启动水平模式。如果您打算使用这些命令作为起始段落,请添加:\copy
\unhbox
\unhcopy
\hbox
\leavevmode
\def\boxit#1#2{\leavevmode
\hbox{\vrule
\vtop{
\vbox{\hrule\kern#1%
\hbox{\kern#1#2\kern#1}
}%
\kern#1 \hrule
}%
\vrule}%
}
\def\emptybox#1#2#3{\leavevmode
\hbox spread #3{\hfil
\vtop spread #2{
\vbox spread #1{\vfil}
\vfil}%
}%
}
用于创建具有指定高度,深度和宽度的空框的更有效的宏是
\def\emptybox#1#2#3{%
\leavevmode
\begingroup\setbox0=\hbox{}%
\ht0=#1%
\dp0=#2%
\wd0=#3%
\box0
\endgroup}