
¿Cómo puedo tener una mesa como la siguiente imagen en látex?
Respuesta1
Una posible solución. yo sugierono usar las líneas verticales, sino más bien elbooktabs
paquete. Para la alineación horizontal 20
se puede aprovechar elmultirow
paquete, mientras que para la alineación vertical puede calcular el ancho de la entrada más grande de las primeras columnas a través delcalc
paquete.
\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}
Respuesta2
Si debe utilizar una regla vertical en su tabla, le sugiero que también inserte "puntales" para obtener un mejor espacio vertical por encima y por debajo de las líneas horizontales dibujadas por \hline
. Sin embargo, en general me parece preferible construir tablassinreglas verticales y usar el booktabs
paquete para obtener líneas horizontales bien espaciadas dibujadas por \toprule
, \midrule
, etc.
Para centrar verticalmente la segunda entrada en la primera columna, use una \multirow
instrucción.
También puedes automatizar el trabajo de hacer que la primera columna esté siempre en negrita.
Finalmente, si desea utilizar el tabularx
paquete, digamos porque desea lograr un ancho preespecificado de la tabla, y si desea que el contenido esté centrado (que parece ser el caso en la captura de pantalla que publicó), también necesitará para definir una versión especial "centrada" del X
tipo de columna que proporciona el tabularx
paquete.
La primera tabla a continuación usa un tabular
entorno y la segunda usa un tabularx
entorno con el ancho total establecido en 0.7\textwidth
. La segunda tabla también está ambientada en 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}
Respuesta3
Una solución que utiliza, además de array
, únicamente el makecell
paquete. Una ventaja es que uno puede tener filas mucho menos apretadas con el \makecell*
comando (agrega\jot
simétricamenteen la parte superior e inferior de una celda, a diferencia de \renewcommand{\arraystretch}{…}
. Otra es la posibilidad de cambiar el grosor de las líneas (como booktabs
, pero manteniendo la posibilidad de usar líneas verticales).
\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}