Wie kann die Breite einer „p“-Spalte auf die verbleibende Breite einer Tabelle eingestellt werden?

Wie kann die Breite einer „p“-Spalte auf die verbleibende Breite einer Tabelle eingestellt werden?

Ich versuche, eine zweispaltige Tabelle zu erstellen, bei der die zweite Spalte die gesamte verbleibende Breite der Tabelle bis \columnwidth ausfüllt. Hier ist ein vereinfachtes Beispiel meines Ansatzes:

\noindent \rowcolors[]{1}{}{gray!20}%
\begin{tabular*}{1\columnwidth}{@{\extracolsep{\fill}}cl}
column 1 header & \multicolumn{1}{c}{column 2 header}\tabularnewline
autosized column & This column should contain justified text, wrapping at the width of
the table instead of going past it\tabularnewline
some additional rows... & some additional justified text\global\rownum=0\relax\tabularnewline
\multicolumn{2}{p{1\columnwidth-2\tabcolsep}}{Justified footnotes

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ornare
sapien vel tellus rhoncus, placerat rutrum ipsum pretium. 

Maecenas vel convallis erat. Morbi facilisis, nunc molestie consequat
consectetur, velit turpis facilisis dolor, non tempor mauris nunc
vitae risus. Nullam ante mauris, volutpat ut molestie eget, congue
non velit. Nullam id maximus ligula. }\tabularnewline
\end{tabular*}

Wenn dies gerendert wird, erstreckt sich die zweite Zeile der Tabelle über die rechte Seite der Tabelle hinaus. Idealerweise würde ich die rechte Spalte, die derzeit vom Typ „l“ ist, auf den Typ „p“ setzen, aber dann muss ich ihr explizit eine Breite zuweisen, und ich weiß nicht, wie groß diese Breite ist. Im Fall der Fußnotenzelle unten ist das einfach, da ich weiß, dass sie sich über die gesamte Tabelle erstreckt, was ich bereits als \columnwidth kenne, also ziehe ich einfach die Tabcolsep-Ränder ab, die alle anderen Zeilen in der Mitte haben, und es ist genau die richtige Breite.

Letztendlich kenne ich die Breite der ersten Spalte nicht, da diese möglicherweise noch viel mehr Zeilen enthält und ich nicht weiß, welche Zeile unbedingt der breiteste Eintrag ist.

Wie kann ich verhindern, dass der Text in der zweiten Zeile über die rechte Seite der Tabelle hinausläuft, und wie kann ich ihn richtig umbrechen, wie es bei einer Spalte mit dem Namen „p“ der Fall wäre?

Antwort1

Eine Möglichkeit besteht darin, die Breite der ersten Spalte mithilfe einer Savebox zu messen. Dies bedeutet, dass die erste Spalte zweimal eingegeben werden muss.

Ich habe die Tabelle so eingestellt, dass sie sich über die gesamte Spalte erstreckt. Beachten Sie, dass die Farben noch weiter reichen.

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{showframe}% MWE only
\newlength{\mywidth}
\begin{document}

\sbox0{\begin{tabular}{c}% measure first column + 2\tabcolsep
column 1 header \\
autosized column \\
some additional rows... 
\end{tabular}}%
\setlength{\mywidth}{\dimexpr \columnwidth - \wd0}% do once

\noindent \rowcolors[]{1}{}{gray!20}%
\begin{tabular}{@{}cp{\mywidth}@{}}
column 1 header & \multicolumn{1}{c}{column 2 header}\\
autosized column & This column should contain justified text, wrapping at the width of
the table instead of going past it\\
some additional rows... & some additional justified text\global\rownum=0\relax\\
\multicolumn{2}{@{}p{\columnwidth}@{}}{Justified footnotes

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ornare
sapien vel tellus rhoncus, placerat rutrum ipsum pretium. 

Maecenas vel convallis erat. Morbi facilisis, nunc molestie consequat
consectetur, velit turpis facilisis dolor, non tempor mauris nunc
vitae risus. Nullam ante mauris, volutpat ut molestie eget, congue
non velit. Nullam id maximus ligula. }\\
\end{tabular}
\end{document}

Demo

verwandte Informationen