左对齐和右对齐的小页面,带有表格布局

左对齐和右对齐的小页面,带有表格布局

我正在尝试创建一个具有两个“列”的布局,其中右侧列本身有两列,分别向右和向左对齐。例如:

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作为命令:它们的存在仅仅因为有环境flushleftflushright。要使用的命令是\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)。

请注意,这些块不会跨越页面边界。

相关内容