我正在尝试创建一个具有两个“列”的布局,其中右侧列本身有两列,分别向右和向左对齐。例如:
This is some text in the first Label Foo
column. Another Label Foo Bar Baz
我熟悉通过minipage
环境在同一行上创建左对齐和右对齐文本的技术,因此扩展了这个想法,我设置了右侧列以包含tabular
对齐其标签和文本。这是我所拥有的:
\documentclass[letterpaper,12pt]{report}
\usepackage[margin=1in]{geometry}
\begin{document}
\noindent
\begin{minipage}[t]{.49\textwidth}
\flushleft
Some long testing text to illustrate the alignment problem.
\end{minipage}
%
\hfill
%
\noindent
\begin{minipage}[t]{.49\textwidth}
\flushright
\begin{tabular}{r l}
\textbf{Some Long Label} & Bar \\
\textbf{Another Long Label} & Foo Bar Baz \\
\end{tabular}
\end{minipage}
\end{document}
这编译并大多可以正常工作,但有一个问题:表格中文本的顶部看起来比左侧小页面中文本的顶部略高。我认为这是因为tabular
在它们之前和之后自然有一些额外的垂直空间,但我不知道如何解决这个问题。
我的问题是,我该如何修复我的代码,让每行的文本minipage
垂直向上,或者,是否有一些更简洁的方法来创建这种布局而不使用tabular
?
答案1
[t]
您忘记在以下位置使用tabular
:
\documentclass[letterpaper,12pt]{report}
\usepackage[margin=1in]{geometry}
\begin{document}
\noindent
\begin{minipage}[t]{.49\textwidth}
\raggedright
Some long testing text to illustrate the alignment problem.
\end{minipage}% <-- Don't forget this one
%
\hfill
%
\begin{minipage}[t]{.49\textwidth}
\raggedleft
\begin{tabular}[t]{@{} r l @{}}% <-- Don't forget @{}!
\textbf{Some Long Label} & Bar \\
\textbf{Another Long Label} & Foo Bar Baz \\
\end{tabular}
\end{minipage}
\end{document}
切勿使用\flushleft
和\flushright
作为命令:它们的存在仅仅因为有环境flushleft
和flushright
。要使用的命令是\raggedright
和\raggedleft
。
一种更简单的方法是tabular*
:
\documentclass[letterpaper,12pt]{report}
\usepackage[margin=1in,showframe]{geometry}
\begin{document}
\noindent
\begin{tabular*}{\textwidth}{@{}p{.45\textwidth}@{\extracolsep{\fill}}r@{}}
\raggedright
Some long testing text to illustrate the alignment problem.
&
\begin{tabular}[t]{@{}r l@{}}
\textbf{Some Long Label} & Bar \\
\textbf{Another Long Label} & Foo Bar Baz \\
\end{tabular}
\end{tabular*}
\end{document}
我添加showframe
只是为了显示边距。
答案2
这是minipage
一个将每个都设置为的解决方案tabularx
:
\documentclass{article}
\usepackage{tabularx}% http://ctan.org/pkg/tabularx
\begin{document}
Some text before.
\noindent
\begin{tabularx}{.5\linewidth}[t]{@{}X@{}}
Some long testing text to illustrate the alignment problem.
\end{tabularx}%
\begin{tabularx}{.5\linewidth}[t]{%
>{\raggedleft\bfseries}p{.3\linewidth}
>{\raggedright\arraybackslash}X@{}}
Some Long Label & Bar \\
Another Long Label & Foo Bar Baz
\end{tabularx}%
Some text after.
\end{document}
每列的对齐方式是使用array
包裹接口(加载tabularx
)。
请注意,这些块不会跨越页面边界。