
Tengo array
(en modo matemático) para el cual quiero que la primera columna sea un poco más ancha que el resto, y el resto debe tener un ancho constante. si solo escribo
\begin{array}{c|ccc}
10000 & 1 & 20 & 300
\end{array}
luego, la segunda, tercera y cuarta columna tienen un ancho separado, lo cual quiero evitar. Lo ideal sería establecer el ancho de la primera columna en, por ejemplo, 2cm
y el ancho de las restantes en 1cm
.
¿Hay una manera de hacer eso? Me gustaría evitar array
entornos anidados.
Respuesta1
Supongo que (a) las columnas 2, 3 y 4 deben ser tan anchas como el elemento más ancho en cualquiera de las columnas ("300" en la tabla que proporcionó) y (b) que las El contenido de estos contenidos debe estar centrado. Si esta interpretación es correcta, le sugiero que proceda definiendo un nuevo tipo de columna, llamado C
en el código siguiente, que satisfaga estos supuestos y también coloque su contenido en modo matemático de forma predeterminada.
Agregué barras verticales al código para que sea fácilmente visible que las columnas 2, 3 y 4 son igualmente anchas.
\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}
Actualización, junio de 2021: En los más de 4 años que han pasado desde que publiqué esta respuesta, el array
paquete se ha actualizado significativamente. Una de las actualizaciones es la introducción del w
tipo de columna, con el cual la configuración anterior podría reescribirse de manera más sucinta de la siguiente manera:
\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}
Respuesta2
Una posibilidad es con 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}
La segunda tabla muestra que el espaciado es el mismo. Los argumentos del D
tipo de columna son, respectivamente, el separador decimal de entrada, el separador decimal de salida y el formato de los números; aquí 3.-1
significa “tres dígitos en la parte integral y ningún dígito decimal”.
Respuesta3
Una solución para \hphantom
obtener el mismo ancho de columna para la segunda a la cuarta columna:
\documentclass{article}
\begin{document}
\[
\begin{array}{c|ccc}
10000 & \hphantom{00}1 & \hphantom{0}20 & 300
\end{array}
\]
\end{document}
El tipo de columna p
también funciona en array
, por ejemplo:
\documentclass{article}
\usepackage{array}
\begin{document}
\[
\begin{array}{>{\centering}p{2cm}|*{3}{>{\centering}p{1cm}}}
10000 & 1 & 20 & 300
\end{array}
\]
\end{document}
O columnas alineadas con paquete 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}