%20em%20colunas%20espec%C3%ADficas%3F.png)
Como posso centralizar verticalmente as três primeiras colunas de forma que todos os valores nessas colunas fiquem no centro?
\begin{center}
\begin{tabular}{|c| c |c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabular}
\end{center}
Deveria ficar assim:
Editar:
Aqui está o que tentei com as perguntas coladas nos comentários:
\begin{center}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{tabularx}{|m{1in}|c|c| p{5cm}|}
\hline
\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline
Monday & 11C & 22C & A clear day with lots of sunshine. However, the strong breeze will bring down the temperatures \\ \hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. Clear spells across most of Scotland and Northern Ireland, but rain reaching the far northwest \\ \hline
Wednesday & 10C & 21C & Rain will still linger for the morning. Conditions will improve by early afternoon and continue throughout the evening. \\ \hline
\end{tabularx}
\end{center}
Ainda não funciona.
Responder1
Bem-vindo ao TeX.SE!
Por favor, considere postar um MWE completo na próxima vez. Adicionei algumas partes que faltavam à minha resposta, mas perdi a cor de fundo cinza na linha do título. Considere isso como seu dever de casa ;-)
O LaTeX basicamente conhece dois tipos de colunas. Um tipo, onde o LaTeX calcula a largura da própria coluna. As letras l
, c
e r
representam este tipo de colunas. As colunas “aumentam” em largura sempre que o autor adiciona texto a elas.
Por outro lado, temos o tipo de colunas, onde o autor define uma largura. O identificador para este tipo de coluna é, por exemplo p{<width>}
, . Você o usou para sua última coluna e definiu p{5cm}
em seu MWE. Esta coluna terá 5 cm de largura. Se o autor (ou seja, você!) adicionar mais texto, com largura superior a 5 cm, o LaTeX quebrará o texto e iniciará uma nova linha. A coluna resultante será formatada em texto justificado, como você pode ver nos seus exemplos.
Para obter os resultados desejados, tudo o que você precisa fazer é
- carregue o
array
pacote - use o
m{<width>}
tipo de coluna em vez dec
oup{<width>}
colunas
Claro, isso é apenas metade da verdade.
Os array
pacotes oferecem os m
tipos b
de colunas. Eles atuam como a p
coluna em que o usuário deve definir sua largura. O LaTeX quebrará as linhas e produzirá texto justificado. A diferença entre esses tipos de coluna é aAlinhamento vertical. A regra prática é:
p
está alinhado emP,m
está alinhado noMocioso eb
está alinhado noBottom.
(Por favor, leia o manual do array para entender o comportamento exato!)
Portanto, usar um m
tipo de coluna em sua tabela alinhará todas as linhas centralizadas verticalmente, conforme solicitado.
Mas também temos de abordar o alinhamento horizontal. As m
colunas se comportam da mesma forma que as p
colunas que acabamos de substituir. Na última coluna, esse comportamento está OK. Mas nas primeiras colunas queremos que o texto também fique centralizado horizontalmente.
Aí vem o próximo truque, oferecido pelo array
pacote. Você pode usar o >{cmd}
. Visualize o >
como uma seta, que empurra o cmd
de dentro das chaves para a coluna próxima a ele. Se você definir em sua tabela algo como
\begin{tabular}{ l >{\raggedright}p{5cm} l }
você obterá um p
tipo de coluna de 5 cm de largura no meio entre duas l
colunas usuais como primeira e última coluna dessa tabela.
Mas ele >{\raggedright}
empurra o comando \raggedright
para essa m
coluna, toda vez que você entra nesta segunda coluna. Este comando alterará o alinhamento dessa segunda coluna para ficar nivelado no lado esquerdo e irregular no lado direito.
Em vez da definição acima, você poderia ter digitado
\begin{tabular}{l p{5cm} l}
first cell & \raggedright lots of text in the second cell, which is flush left & third cell \\
next line, first cell & \raggedright again lots of text ... & third cell \\
new line first cell & \raggedright ... & ... \\
once again & \raggedright ... & end \\
\end{tabular}
Mas neste caso, você terá que digitar o \raggedright
comando toda vez que entrar na segunda coluna, o que pode se tornar irritante muito rapidamente. Em vez de digitá-lo toda vez que você entrar nessa coluna, o >{\raggedright}
truque da definição anterior fará isso automaticamente para você. Parece promissor para mim.
Para obter um código LaTeX realmente limpo, você deve adicionar \arraybackslash\hspace{0pt}
ao exemplo acima. Mas essa string monstruosa tornará seu código de entrada ilegível. Então apresento o próximo truque.
O array
pacote também oferece o \newcolumntype
comando. Você deve usá-lo no preâmbulo do seu documento (ou seja, antes \begin{document}
). Basta escolher uma letra para atuar como um novo tipo de coluna. Você solicitou um tipo de coluna centralizada. Por isso sugiro a letra “C”, que não estava definida anteriormente.
Então a solução mais simples seria
\newcolumntype{C}{>{\raggedright\arraybackslash\hspace{0pt}}m{5cm}}
e substitua todas as definições de coluna ( c
e p{5cm}
) por este tipo de coluna totalmente novo e brilhante C
.
\begin{tabular}{|C|C|C|C|}
Às vezes, uma solução tão simples tem algumas desvantagens importantes. No seu caso específico, cada coluna da sua tabela agora tem 5 cm de largura. Eu acho que não é exatamente o que você quer, certo? As três primeiras colunas não precisam ter 5 cm de largura. Como poderíamos resolver isso?
Aqui está meu próximo aprimoramento. Na primeira linha, a entrada mais larga parece ser a palavra “quarta-feira”. Então deixe o LaTeX determinar sua largura e usá-la como largura para a primeira coluna. Para fazer isso, você pode usar o comando \settowidth
para medir a largura da palavra. Mas também temos que mudar nossa nova definição de coluna C
. Temos que defini-lo de uma forma mais flexível. Através de uma inspeção cuidadosa, deve-se perceber que a C
coluna deve ter largura variável, como p{<width>}
tem. A p
coluna possui um par de colchetes. Então, vamos adicionar isso à nossa C
coluna.
\newcolumntype{C}[1]{>{\raggedright\arraybackslash\hspace{0pt}}m{#1}}
Veja a diferença? Eu adicionei [1]
no início da definição. Isso significa que a C
coluna deve ter um par de colchetes. O valor dado nesse par é indicado #1
no final da minha definição. Isso nos dá a flexibilidade desejada.
O MWE completo agora se parece com isto:
\documentclass{article}
\usepackage{array} % better control for tabular
%% Define the length of the longest day name
\newlength{\daylength}
\settowidth{\daylength}{Wednesday}
%% Create a new columntype, where the text is vertically and
%% horizontally centered. The new identifier should be "C".
\newcolumntype{C}[1]{%
>{\centering\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{center}
\begin{tabular}{|C{\daylength}| C{2cm} | C{2cm} | m{5cm} |}
\hline
Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\
\hline
Monday & 11C & 22C & A clear day with lots of sunshine.
However, the strong breeze will bring down the temperatures \\
\hline
Tuesday & 9C & 19C & Cloudy with rain, across many northern regions.
Clear spells across most of Scotland and Northern Ireland, but rain
reaching the far northwest \\
\hline
Wednesday & 10C & 21C & Rain will still linger for the morning.
Conditions will improve by early afternoon and continue throughout the evening. \\
\hline
\end{tabular}
\end{center}
\end{document}
e resulta nesta saída
Pessoalmente, eu também definiria um novo R
tipo de coluna, o que facilita uma coluna alinhada à esquerda, já que essas colunas pequenas não ficam bem quando justificadas. Vou adicioná-lo à sua pilha de trabalhos de casa. :-)
EDITAR
\arraybackslash
permite que você use novamente para \\
encerrar a linha da tabela e iniciar uma nova linha. \hspace{0pt}
permite que o LaTeX comece a quebrar na primeira palavra, o que é importante em colunas muito pequenas.