空的 mbox{} 有什么用

空的 mbox{} 有什么用

考虑手册中的以下声明memoir

\newcommand{\marginbox}[1]%
  {\parbox[t][0pt]{6em}{\itshape\raggedleft\mbox{} #1}}

这个命令中的空 mbox 有什么用?

答案1

可能\mbox用于退出垂直模式,因为要\parbox切换到段落模式。例如,#1可以用\color命令开始。在垂直模式下,颜色 whatsit 设置在垂直列表的顶部,然后标题文本开始一个新段落,该段落位于颜色 whatsit 下方。顶部对齐的参考点\paragraph是颜色 whatsit。然后,此参考点与当前基线对齐。结果,头部标题移动以下当前基线。

of避免了这种情况\leavevmode\mbox方法是离开垂直模式,开始新段落,进入水平模式。然后,颜色 whatsit 会与以下标题文本一起放在当前基线上。

我不认为 的空白\hbox{}部分\mbox{}在这里有任何用处,\mbox{}只是比\leavevmode或 更短一点\noindent。但是定义包含一个由以下空格引起的错误。后面的空格\mbox{}不是由于水平模式而被忽略。这意味着第一行的文本没有完整的6em,其行宽减少了该空间的宽度。

固定定义是:

\newcommand{\marginbox}[1]{%
  \parbox[t][0pt]{6em}{%
    \itshape
    \raggedleft
    \leavevmode % or \mbox{}% without following space
    #1%
  }%
}

答案2

比较差异。 将使\mbox您退出垂直模式。 这里,\marginbox是您定义的;\xmarginbox消除了\mbox{}定义中的 。

\vspace诸如、、\llap和之类的宏\rlap在垂直模式和水平模式下的行为有所不同。

\documentclass{memoir}
\newcommand{\marginbox}[1]%
  {\parbox[t][0pt]{6em}{\itshape\raggedleft\mbox{} #1}}
\newcommand{\xmarginbox}[1]%
  {\parbox[t][0pt]{6em}{\itshape\raggedleft #1}}
\begin{document}
x\marginbox{\vspace{\baselineskip}y}\par
x\xmarginbox{\vspace{\baselineskip}y}\par
\vspace{3em}
x\marginbox{\llap{xyz}}\par
x\xmarginbox{\llap{xyz}}\par
\end{document}

在此处输入图片描述

相关内容