matriz: establece el ancho para ciertas columnas

matriz: establece el ancho para ciertas columnas

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, 2cmy el ancho de las restantes en 1cm.

¿Hay una manera de hacer eso? Me gustaría evitar arrayentornos 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 Cen 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.

ingrese la descripción de la imagen aquí

\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 arraypaquete se ha actualizado significativamente. Una de las actualizaciones es la introducción del wtipo 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 Dtipo de columna son, respectivamente, el separador decimal de entrada, el separador decimal de salida y el formato de los números; aquí 3.-1significa “tres dígitos en la parte integral y ningún dígito decimal”.

ingrese la descripción de la imagen aquí

Respuesta3

Una solución para \hphantomobtener 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}

Resultado

El tipo de columna ptambié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}

Resultado

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}

Resultado

información relacionada