Я пытаюсь создать макет с двумя "колонками", где сама правая колонка имеет две колонки, которые выровнены по правому и левому краю соответственно. Например:
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
).
Обратите внимание, что эти блоки не будут выходить за пределы страницы.