Criando uma tabela especial com diferentes comprimentos de linha em látex

Criando uma tabela especial com diferentes comprimentos de linha em látex

Como posso ter uma mesa como a imagem a seguir em látex? insira a descrição da imagem aqui

Responder1

Uma solução possível. Eu sugironão usando as linhas verticais, mas sim obooktabspacote. Para alinhamento horizontal 20você pode explorar omultirowpacote, enquanto para alinhamento vertical você pode calcular a largura da maior entrada das primeiras colunas através docalcpacote.

insira a descrição da imagem aqui

\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 booktabspacote para obter linhas horizontais bem espaçadas desenhadas por \toprule, \midrule, etc.

Para centralizar verticalmente a segunda entrada na primeira coluna, use uma \multirowinstrução.

Você também pode automatizar o trabalho de deixar a primeira coluna sempre em negrito.

Finalmente, se você quiser usar o tabularxpacote, 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 Xtipo de coluna fornecido pelo tabularxpacote.

A primeira tabela abaixo usa um tabularambiente e a segunda usa um tabularxambiente com largura total definida como 0.7\textwidth. A segunda tabela também é definida em sans-serif.

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

informação relacionada