我正在尝试编写一个宏来创建一个由和\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}
将会堆叠foo
(bar
添加\strut
s 可能是获得正确基线跳过的好主意)- 小包
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}