我想要制作如下的布局:
| |
|first text ...left first text ...right|
|second text ... left second text... right|
| |
这四个文本片段本质上是应该由最终用户填写的参数,但可以安全地假设文本适合一行。
即,我希望在页面左侧堆叠一些行,在页面右侧堆叠一些行。它们应该相应地左对齐/右对齐。
现在,根据我对水平和垂直模式的了解,我想制作一个\hbox
包含两个\vbox
es(和一些胶水)的模式,我们可以将几条线作为\hbox
es 放入左侧和右侧的每个 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*}