\vbox 内的水平盒子右对齐

\vbox 内的水平盒子右对齐

我想要制作如下的布局:

|                                                   |
|first text ...left              first text ...right|
|second text ... left           second text... right|
|                                                   |

这四个文本片段本质上是应该由最终用户填写的参数,但可以安全地假设文本适合一行。

即,我希望在页面左侧堆叠一些行,在页面右侧堆叠一些行。它们应该相应地左对齐/右对齐。

现在,根据我对水平和垂直模式的了解,我想制作一个\hbox包含两个\vboxes(和一些胶水)的模式,我们可以将几条线作为\hboxes 放入左侧和右侧的每个 vbox 中。

但是,这也会将右边距上的两行文本向左对齐(与较长行的宽度一致)。在里面涂胶水\hbox{first text... right}等也无济于事,因为这种胶水在实际生产时根本不会伸展\hbox

我问这个稍微具体一点的问题是因为我想要一个更通用的解决方案:在其他情况下,我可能不知道左边是由两条我可以控制的线组成的,它可能只是一些任意的 vbox。我可能仍然希望能够在右侧的单独行上堆叠一些文本,然后将堆叠文本底线的基线与左侧 vbox 的基线对齐。

我想要一种模式来告诉它包含的vbox所有es 都将右对齐。我该如何从语义上实现这一点?hbox

如果这与答案相关(我不这么认为):所有这些都发生在一个mdframed盒子里(从排版的角度来看,这应该相当于一个minipage,但我不确定)

虽然我没有经验l3box,但是一个 expl 解决方案也会很好,但我不知道这是否真的有好处。


到目前为止我已经尝试过:

  • 一个棘手的解决方案:尝试使用\hbox to <dimen> {first text... right0}语法,以便胶水会相应地拉伸。由于我不知道两个框中哪一个更宽,我最终得到了这个相当混乱的代码:
\setbox0=\hbox{first text ...right}
\setbox1=\hbox{second text ...right}
\ifnum \wd0 > \wd1 \setbox2=\hbox{first text ...right} \else \setbox2=\hbox{second text ...right} \fi
\leavevmode \vbox{\hbox{first text ...left}\hbox{second text ...left}} \hfill \vbox{\hbox to \wd2{\hfil first text ...right}\hbox to \wd2{\hfil second text ...right}}

这虽然能起到作用,但是感觉非常丑。

  • 我尝试使用表格,即
\begin{tabular}{l}
  first text \\
  second text
\end{tabular}
\hfill
\begin{tabular}{r}
  first text right \\
  second text right
\end{tabular}

但这会弄乱左右两侧表格之间的间距,我不知道如何防止这种情况发生,所以不幸的是,这对我来说不是一个选择。

答案1

这里的标准乳胶溶液是

\begin{tabular}[t]{@{}@{}l}
  first text \\
  second text
\end{tabular}%
\hfill
\begin{tabular}[t]{@{}r@{}}
  first text right \\
  second text right
\end{tabular}

注意[t]顶部对齐,@{}删除\tabcolsep列周围的填充并%删除表格之间的单词间距。根据使用情况,您可能还需要\noindent在第一个之前tabular防止段落缩进。

答案2

普通 TeX 解决方案:

\noindent X\dotfill X

\hbox to \hsize{first text\hfil first text right}
\hbox to \hsize{second text\hfil second text right}

\noindent X\dotfill X

\bye

在此处输入图片描述

LaTeX 解决方案:

\documentclass{article}

\newcommand{\pairedtext}[2]{%
  \par\noindent
  \makebox[\textwidth][s]{#1\hfil #2}%
  \par
}

\begin{document}

\noindent X\dotfill X

\pairedtext{first text}{first text right}
\pairedtext{second text}{second text right}

\noindent X\dotfill X

\end{document}

或者,如果这是标题页的一部分,且上下留有充足的空白:

\noindent
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lr@{}}
first text & first text right \\
second text & second text right
\end{tabular*}

相关内容