array: define a largura para determinadas colunas

array: define a largura para determinadas colunas

Eu tenho um array(no modo matemático) para o qual quero que a primeira coluna seja um pouco mais larga que as demais, e o restante deve ter uma largura consistente. Se eu apenas escrever

\begin{array}{c|ccc}
10000 & 1 & 20 & 300
\end{array}

então a segunda, terceira e quarta colunas têm larguras separadas, o que desejo evitar. Idealmente, eu gostaria de definir a largura da primeira coluna como, por exemplo, 2cme a largura das restantes como 1cm.

Existe uma maneira de fazer isso? Eu gostaria de evitar arrayambientes aninhados.

Responder1

Estou assumindo que (a) as colunas 2, 3 e 4 devem ser tão largas quanto o elemento mais largo em qualquer uma das colunas - "300" na tabela que você forneceu - e (b) que o o conteúdo desses conteúdos deve ser centralizado. Se esta interpretação estiver correta, sugiro que você proceda definindo um novo tipo de coluna, chamado Cno código abaixo, que satisfaça essas suposições e também coloque seu conteúdo no modo matemático por padrão.

Adicionei barras verticais ao código para tornar facilmente visível que as colunas 2, 3 e 4 são de fato igualmente largas.

insira a descrição da imagem aqui

\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}

Atualização, junho de 2021: Nos mais de 4 anos que se passaram desde que publiquei esta resposta, o arraypacote foi atualizado significativamente. Uma das atualizações é a introdução do wtipo de coluna, com o qual a configuração acima poderia ser reescrita de forma mais sucinta da seguinte forma:

\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}

Responder2

Uma possibilidade é com 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}

A segunda tabela mostra que o espaçamento é o mesmo. Os argumentos para o Dtipo de coluna são, respectivamente, o separador decimal de entrada, o separador decimal de saída e o formato dos números; aqui 3.-1significa “três dígitos na parte integral e nenhum dígito decimal.

insira a descrição da imagem aqui

Responder3

Uma solução para \hphantomobter largura de coluna igual da segunda à quarta coluna:

\documentclass{article}
\begin{document}
\[
  \begin{array}{c|ccc}
    10000 & \hphantom{00}1 & \hphantom{0}20 & 300
  \end{array}
\]
\end{document}

Resultado

O tipo de coluna ptambém funciona em array, por exemplo:

\documentclass{article}
\usepackage{array}
\begin{document}
\[
  \begin{array}{>{\centering}p{2cm}|*{3}{>{\centering}p{1cm}}}
    10000 & 1 & 20 & 300
  \end{array}
\]
\end{document}

Resultado

Ou colunas alinhadas com package 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

informação relacionada