在文本周围绘制方框的代码存在问题

在文本周围绘制方框的代码存在问题

我想将文本括在框中。我的问题是,当下面的代码放在一行的开头时,它会导致换行/回车(框本身保持在一行上,其余段落从下一行开始)。但是当我在行的中间或末尾使用它时,它没问题。是什么导致了这种行为?

\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}

相关内容