
Ich habe eine array
(im Mathematikmodus), bei der ich die erste Spalte etwas breiter als den Rest haben möchte und der Rest eine einheitliche Breite haben soll. Wenn ich einfach schreibe
\begin{array}{c|ccc}
10000 & 1 & 20 & 300
\end{array}
dann haben die zweite, dritte und vierte Spalte jeweils eine unterschiedliche Breite, was ich vermeiden möchte. Idealerweise würde ich die Breite der ersten Spalte gerne auf zB 2cm
und die Breite der übrigen auf einstellen 1cm
.
Gibt es eine Möglichkeit, das zu tun? Ich möchte verschachtelte array
Umgebungen vermeiden.
Antwort1
Ich gehe davon aus, dass (a) die Spalten 2, 3 und 4 alle so breit sein sollten wie das breiteste Element in einer der Spalten – „300“ in der von Ihnen bereitgestellten Tabelle – und (b) dass der Inhalt dieser Spalten zentriert sein sollte. Wenn diese Interpretation richtig ist, schlage ich vor, dass Sie fortfahren, indem Sie einen neuen Spaltentyp definieren, der C
im folgenden Code aufgerufen wird, der diese Annahmen erfüllt und seinen Inhalt standardmäßig in den mathematischen Modus versetzt.
Ich habe dem Code vertikale Balken hinzugefügt, um deutlich zu machen, dass die Spalten 2, 3 und 4 tatsächlich gleich breit sind.
\documentclass{article}
\newlength\mylen
\usepackage{array} % for "\newcolumntype" macro
\newcolumntype{C}{>{\hfil$}p{\mylen}<{$\hfil}} % centered, in math mode, fixed width
\begin{document}
\[
\settowidth\mylen{300} % choose widest element in columns 2--4
\begin{array}{|c|C|C|C|}
10000 & 1 & 20 & 300\\
1 & 101 & 555 & 888\\
\end{array}
\]
\end{document}
Update, Juni 2021: In den über 4 Jahren, die seit der Veröffentlichung dieser Antwort vergangen sind, array
wurde das Paket erheblich aktualisiert. Eine der Aktualisierungen ist die Einführung des w
Spaltentyps, mit dem das obige Setup wie folgt prägnanter umgeschrieben werden konnte:
\documentclass{article}
\newlength\mylen
\usepackage{array} % for 'w' column type
\begin{document}
\[
\settowidth\mylen{300} % choose widest element in columns 2--4
\begin{array}{| c | *{3}{wc{\mylen}|} }
10000 & 1 & 20 & 300\\
1 & 101 & 555 & 888
\end{array}
\]
\end{document}
Antwort2
Eine Möglichkeit besteht mit dcolumn
:
\documentclass{article}
\usepackage{dcolumn,booktabs}
\begin{document}
\[
\begin{array}{r *{3}{D{.}{.}{3.-1}}}
\toprule
10000 & 1 & 20 & 300 \\
100 & 10 & 10 & 10 \\
\bottomrule
\end{array}
\]
\[
\begin{array}{r *{3}{D{.}{.}{3.-1}}}
\toprule
10000 & 100 & 200 & 300 \\
100 & 100 & 100 & 100 \\
\bottomrule
\end{array}
\]
\end{document}
Die zweite Tabelle zeigt, dass die Abstände gleich sind. Die Argumente für den D
Spaltentyp sind jeweils das Eingabe-Dezimaltrennzeichen, das Ausgabe-Dezimaltrennzeichen und das Zahlenformat; hier 3.-1
bedeutet „drei Ziffern im ganzzahligen Teil und keine Dezimalstelle“.
Antwort3
Eine Lösung um \hphantom
für die zweite bis vierte Spalte die gleiche Spaltenbreite zu erhalten:
\documentclass{article}
\begin{document}
\[
\begin{array}{c|ccc}
10000 & \hphantom{00}1 & \hphantom{0}20 & 300
\end{array}
\]
\end{document}
Der Spaltentyp p
funktioniert auch in array
, zB:
\documentclass{article}
\usepackage{array}
\begin{document}
\[
\begin{array}{>{\centering}p{2cm}|*{3}{>{\centering}p{1cm}}}
10000 & 1 & 20 & 300
\end{array}
\]
\end{document}
Oder ausgerichtete Spalten mit Paket siunitx
:
\documentclass{article}
\usepackage{siunitx}
\begin{document}
\[
\begin{array}{S[table-format=5]|*{3}{S[table-format=3]}}
10000 & 1 & 20 & 300
\end{array}
\]
\end{document}