Мини-страницы, выровненные по левому и правому краю, с табличной компоновкой

Мини-страницы, выровненные по левому и правому краю, с табличной компоновкой

Я пытаюсь создать макет с двумя "колонками", где сама правая колонка имеет две колонки, которые выровнены по правому и левому краю соответственно. Например:

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's естественным образом есть некоторое дополнительное вертикальное пространство до и после них, но я не знаю, как исправить эту проблему.

У меня вопрос: как исправить код, чтобы строки текста в каждой 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).

Обратите внимание, что эти блоки не будут выходить за пределы страницы.

Связанный контент