Array: Breite für bestimmte Spalten festlegen

Array: Breite für bestimmte Spalten festlegen

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 2cmund die Breite der übrigen auf einstellen 1cm.

Gibt es eine Möglichkeit, das zu tun? Ich möchte verschachtelte arrayUmgebungen 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 Cim 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.

Bildbeschreibung hier eingeben

\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, arraywurde das Paket erheblich aktualisiert. Eine der Aktualisierungen ist die Einführung des wSpaltentyps, 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 DSpaltentyp sind jeweils das Eingabe-Dezimaltrennzeichen, das Ausgabe-Dezimaltrennzeichen und das Zahlenformat; hier 3.-1bedeutet „drei Ziffern im ganzzahligen Teil und keine Dezimalstelle“.

Bildbeschreibung hier eingeben

Antwort3

Eine Lösung um \hphantomfü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}

Ergebnis

Der Spaltentyp pfunktioniert 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}

Ergebnis

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}

Ergebnis

verwandte Informationen