
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, 2cm
e a largura das restantes como 1cm
.
Existe uma maneira de fazer isso? Eu gostaria de evitar array
ambientes 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 C
no 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.
\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 array
pacote foi atualizado significativamente. Uma das atualizações é a introdução do w
tipo 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 D
tipo de coluna são, respectivamente, o separador decimal de entrada, o separador decimal de saída e o formato dos números; aqui 3.-1
significa “três dígitos na parte integral e nenhum dígito decimal.
Responder3
Uma solução para \hphantom
obter 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}
O tipo de coluna p
també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}
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}