堆叠两个水平盒子

堆叠两个水平盒子

我正在尝试编写一个宏来创建一个由和\foo{...}{...}组成的水平盒子,这样两个水平盒子就一个叠在另一个上面。生成的水平盒子的宽度应该是\hbox{#1}\hbox{#2}最大限度两个水平盒子。宏的参数处于普通模式(即,不是数学模式)。

我对原始 TeX 不太在行。有人能帮忙吗?

答案1

虽然这是一个老问题,但它似乎是一个集中展示我的新stackengine软件包的各种功能的好地方,而不是(像我一直做的那样)逐个展示。所有间隙/移位距离也是可指定的。[编辑:此 MWE 已修订为使用 V2.0 语法,该语法的实施是为了允许 stackgap 长度随字体大小而缩放。V2.0 软件包已于 2013 年 7 月 11 日提交给 CTAN]

\documentclass{article}
\usepackage{stackengine}
\def\x{\rule[-.2pt]{2ex}{.4pt}}
\parindent 0pt\parskip 1em
\def\blmark{\x\stackengine{-.9ex}{B}{\rule{.35ex}{0pt}L}{U}{l}{F}{T}{S}\x}
\begin{document}

The \textsf{stackengine} package:

SHORT STACKS (constant inter-item gap):
\def\stacktype{S}\setstackgap{S}{4pt}
\\with center alignment

\blmark
\stackon{macro}{stackon}\x
\stackunder{stackunder}{macro}\x
\Shortstack{this is the Shortstack macro}\x
\Shortunderstack{the Shortunderstack macro}\x
\blmark

LONG STACKS (constant inter-baseline distance):
\def\stacktype{L}\setstackgap{L}{1.1\baselineskip}
\\with left alignment\def\stackalignment{l}

\blmark
\stackon{macro}{stackon}\x
\stackunder{stackunder}{macro}\x
\Longstack{this is the Longstack macro}\x
\Longunderstack{the Longunderstack macro}\x
\blmark

\def\useanchorwidth{T}

use anchorwidth for
{\Longunderstack{this is the Longunderstack macro}} 
stack rather than the full stackwidth

\def\stackalignment{c}
\def\stacktype{L}
In addition, the \textsf{stackengine} package does baseline 
\belowbaseline[6pt]{shifts}, as well as 
\tllap{tl}\bllap{bl}lapp\tclap{tc}\bclap{bc}ing\trlap{tr}\brlap{br}, 
and insetting (\bottominset{*}{O}{-2pt}{}verlapping) text and
\def\stackalignment{r}
\topinset{\rule{1cm}{1cm}}
         {\fbox{\rule[-1.5cm]{0pt}{3cm}Figures~~~~~}}{2pt}{4pt}

\end{document}

在此处输入图片描述

答案2

一般来说,你可以\hbox在 a 里面堆叠 es (如果你想在水平模式下使用结果,也\vbox应该将其放在 a 里面),就像 Gonzalo Medina 在他的漂亮答案中所展示的那样。\hbox

还有一些用于此的宏和包:

  • \shortstack{foo\\bar}将会堆叠foobar添加\struts 可能是获得正确基线跳过的好主意)
  • 小包minibox提供\minibox
    \minibox{foo\\bar}
    它还接受可选参数[l][c][r]对齐行。

这两个宏都允许两个以上的水平盒子/线。

答案3

也许是这样的?

\documentclass{article}
\newcommand*\foo[2]{%
  \hbox{\vbox{\hbox{#1}\hbox{#2}}}
}

\begin{document}

\foo{some}{test text}

\end{document}

或者(更符合 TeX 的精神):

\documentclass{article}
\def\foo#1#2{%
  \hbox{\vbox{\hbox{#1}\hbox{#2}}}
}

\begin{document}

\foo{some}{test text}

\end{document}

相关内容