
Como posso ter uma mesa como a imagem a seguir em látex?
Responder1
Uma solução possível. Eu sugironão usando as linhas verticais, mas sim obooktabs
pacote. Para alinhamento horizontal 20
você pode explorar omultirow
pacote, enquanto para alinhamento vertical você pode calcular a largura da maior entrada das primeiras colunas através docalc
pacote.
\documentclass{article}
\usepackage{booktabs,calc,multirow}
\newlength\wdx% for vertical alignment
\setlength{\wdx}{\widthof{66}}
\begin{document}
\begin{table}
\centering
\addtolength{\tabcolsep}{10pt}% increase distance between cells
\begin{tabular}{cccccc}
\toprule
\textsf{x} & \multicolumn{5}{c}{\textsf{y}}\\
\cmidrule(l{\wdx}r{\wdx}){1-1}\cmidrule(l){2-6}
10 & 22 & 33 \\
\multirow{2}[2]{\wdx}{20} & 45 & 34 & 88 & 77 & 80 \\
& 34 & 67\\
66 & 12 & 10 & 45 & 66\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
Responder2
Se você precisar usar uma régua vertical em sua tabela, sugiro que você também insira "struts" para obter melhor espaçamento vertical acima e abaixo das linhas horizontais desenhadas por \hline
. Em geral, porém, acho preferível construir tabelassemregras verticais e usar o booktabs
pacote para obter linhas horizontais bem espaçadas desenhadas por \toprule
, \midrule
, etc.
Para centralizar verticalmente a segunda entrada na primeira coluna, use uma \multirow
instrução.
Você também pode automatizar o trabalho de deixar a primeira coluna sempre em negrito.
Finalmente, se você quiser usar o tabularx
pacote, digamos porque deseja atingir uma largura pré-especificada da tabela e se deseja que o conteúdo seja centralizado (o que parece ser o caso na captura de tela que você postou), você também precisará para definir uma versão especial e "centralizada" do X
tipo de coluna fornecido pelo tabularx
pacote.
A primeira tabela abaixo usa um tabular
ambiente e a segunda usa um tabularx
ambiente com largura total definida como 0.7\textwidth
. A segunda tabela também é definida em sans-serif.
\documentclass[10pt,a4paper]{article}
\usepackage{multirow,array}
% define "struts" as suggested by Claudio Beccari in
% a piece in TeX and TUG News, Vol. 2, 1993.
\newcommand\T{\rule{0pt}{2.6ex}} % = `top' strut
\newcommand\B{\rule[-0.9ex]{0pt}{0pt}} % = `bottom' strut
\newcommand\TB{\T\B} % top-and-bottom strut
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
\begin{tabular}{>{\bfseries}c|ccccc}
x & \multicolumn{5}{c}{\bfseries y\B}\\
\hline
10 & 22 & 33\TB\\
\hline
\multirow{2}{*}{20} & 45 & 34 & 88 & 77 & 80\T\\
& 34 & 67\B \\
\hline
66 & 12 & 10 & 45 & 66\T\\
\end{tabular}
\bigskip
\textsf{ % switch to sans-serif for the second table
\begin{tabularx}{0.7\textwidth}{>{\bfseries}C|CCCCC}
x & \multicolumn{5}{c}{\bfseries y\B}\\
\hline
10 & 22 & 33\TB\\
\hline
\multirow{2}{*}{20} & 45 & 34 & 88 & 77 & 80\T\\
& 34 & 67\B \\
\hline
66 & 12 & 10 & 45 & 66\T\\
\end{tabularx}}
\end{document}
Responder3
Uma solução utilizando, além de array
, apenas o makecell
pacote. Uma vantagem é que é possível ter linhas muito menos compactas com o \makecell*
comando (ele adiciona\jot
simetricamentena parte superior e inferior de uma célula, ao contrário de \renewcommand{\arraystretch}{…}
. Outra é a possibilidade de alterar a espessura das linhas (como booktabs
, mas mantendo a possibilidade de usar linhas verticais).
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{array, makecell}
\begin{document}
\begin{table}
\centering\sffamily
\addtolength{\tabcolsep}{10pt}% increase distance between cells
\begin{tabular}{c!{\vline width1pt}*{5}{c}}
\makecell*{x} & \multicolumn{5}{c}{y}\\
\Xhline{1pt}
\makecell*{10} & 22 & 33 \\
\hline
\makecell{20\\[-2.5ex]}& \makecell*[tc]{45\\34} & \makecell[tc]{34\\67} & 88 & 77 & 80 \\
\hline
\makecell*{66} & 12 & 10 & 45 & 66
\end{tabular}
\end{table}
\end{document}