Ich versuche, ein Layout mit zwei „Spalten“ zu erstellen, wobei die rechte Spalte selbst zwei Spalten hat, die jeweils rechts- und linksbündig ausgerichtet sind. Zum Beispiel:
This is some text in the first Label Foo
column. Another Label Foo Bar Baz
Ich bin mit der Technik vertraut, links- und rechtsbündigen Text in derselben Zeile über minipage
Umgebungen zu erstellen. Ich habe diese Idee erweitert und die rechte Spalte so eingerichtet, dass sie eine enthält, um tabular
Beschriftungen und Text auszurichten. Hier ist, was ich habe:
\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}
Dies kompiliert undmeistensfunktioniert, bis auf ein Problem: Der obere Rand des Textes in der Tabelle erscheint etwas höher als der obere Rand des Textes auf der linken Miniseite. Ich glaube, das liegt daran, dass tabular
vor und nach 's natürlicherweise ein zusätzlicher vertikaler Abstand besteht, aber ich weiß nicht, wie ich das Problem beheben kann.
Meine Frage ist entweder, wie ich meinen Code so anpassen kann, dass die Textzeilen in jeder minipage
Zeile vertikal angeordnet sind, oder gibt es alternativ eine sauberere Möglichkeit, dieses Layout ohne zu erstellen tabular
?
Antwort1
[t]
Sie haben vergessen , auch Folgendes zu verwenden 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}
Verwenden Sie \flushleft
und niemals \flushright
als Befehle: Sie existieren nur, weil es die Umgebungen flushleft
und gibt flushright
. Die zu verwendenden Befehle sind \raggedright
und \raggedleft
.
Ein einfacherer Ansatz ist mit 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}
Ich habe es showframe
nur hinzugefügt, um die Ränder anzuzeigen.
Antwort2
Hier ist eine Lösung, die stattdessen jeweils minipage
Folgendes festlegt 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}
Die Ausrichtung jeder Spalte wird mit folgendem angegeben:array
PaketSchnittstelle (geladen vontabularx
).
Beachten Sie, dass diese Blöcke die Seitengrenzen nicht überschreiten.