Tengo una tabla con un título horizontal encima de las columnas múltiples. En algunos casos, el título horizontal es más ancho que las columnas múltiples. Esto da como resultado columnas distribuidas de manera no equitativa que no se ven bien. Necesito solucionar este problema distribuyendo equitativamente las columnas entre el espacio. Este es un script de muestra con una figura.
\documentclass[10pt]{article}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
\newcommand*\rot{\rotatebox{90}}
\begin{document}
\begin{table}
\caption{MyTable}
\centering
\resizebox{\textwidth}{!} {
\begin{tabular} {@{} lc*{14}l @{}}
\hline
\\
\multicolumn{1}{c}{Column1}
&&\multicolumn{3}{c}{Column2}
&&\multicolumn{3}{c}{ColumnLongTitle}
&&\multicolumn{2}{c}{Column3}
&&\multicolumn{2}{c}{Column4}
\\
\cmidrule(lr){1-1}
\cmidrule(lr){3-5}
\cmidrule(lr){7-9}
\cmidrule(lr){11-12}
\cmidrule(lr){14-15}
\\
& \vline &\rot{Title1} & \rot{Title2} & \rot{Title3}
& \vline & \rot{Title1} & \rot{Title2} & \rot{Title3}
& \vline & \rot{Title1} & \rot{Title2}
& \vline & \rot{Title1} & \rot{Title2}
\\ \hline
Row1 & \vline & {} & \cmark & {} & \vline & \cmark & {} & {} & \vline & & \cmark & \vline & \cmark & {} & \\
\hline
Row2 & \vline & \cmark & {} & {} & \vline & \cmark & {} & {} & \vline & {} & \cmark & \vline & \cmark & {} & \\
\hline
Row3 & \vline & {} & \cmark & {} & \vline & \cmark & {} & {} & \vline & {} & \cmark & \vline & \cmark & {} & \\
\hline
\end{tabular}
}
\end{table}
\end{document}
EDITAR 2:Probé la solución proporcionada por @Bernard. Pero hay otro problema. Cuando necesito agregar texto largo en la primera fila, toda la tabla se distorsiona. ¿Puede aclarar cómo evitar tal problema? La longitud de mi texto varía. Tengo un texto bastante largo en la celda más a la izquierda de cada fila. Este es un ejemplo de script que puede ejecutar para ver el problema.
\documentclass[10pt]{article}
%\usepackage{showframe}
%\renewcommand\ShowFrameLinethickness{0.3pt}
\usepackage{graphicx}
\usepackage{booktabs, tabularx, caption, makecell}
\setcellgapes{3pt}
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
\newcommand*\rot{\rotatebox{90}}
\begin{document}
\begin{table}
\caption{MyTable}
\centering\makegapedcells
\begin{tabularx}{\linewidth}{@{} l|*{3}{>{\centering\arraybackslash}X} |*{3}{>{\centering\arraybackslash}X}| *{2}{>{\centering\arraybackslash}X}| *{2}{>{\centering\arraybackslash}X}|@{}}
\hline
\multicolumn{1}{c}{Column1}
&\multicolumn{3}{c}{Column2}
&\multicolumn{3}{c}{ColumnLongTitle}
&\multicolumn{2}{c}{Column3}
&\multicolumn{2}{c}{Column4}
\\
\cmidrule(lr){1-1}
\cmidrule(lr){2-4}
\cmidrule(lr){5-7}
\cmidrule(lr){8-9}
\cmidrule(lr){10-11}
\addlinespace
&\rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2}
& \rot{Title1} & \rot{Title2}
\\\hline
AAAAAAAAAAAAAAAAAAAAAAAA & {} & \cmark & {} & \cmark & {} & {} & & \cmark & \cmark & {} \\
\hline
Row2 & \cmark & {} & {} & \cmark & {} & {} & {} & \cmark & \cmark & {} \\
\hline
Row3 & {} & \cmark & {} & \cmark & {} & {} & {} & \cmark & \cmark & {} \\
\hline
\end{tabularx}
\end{table}
\end{document}
Respuesta1
Puede hacer que el ancho natural de las columnas sea más ancho que el tramo. También me deshice de todas las columnas vacías porque parecían confusas.
\documentclass[10pt]{article}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
\newcommand*\rot[1]{\rotatebox{90}{#1 }}
\usepackage{array}
\begin{document}
\begin{table}
\caption{MyTable}
\setlength\extrarowheight{4pt}
\centering
%\resizebox{\textwidth}{!} {% scaling tables is evil but of you do do it,. you need a % here
\begin{tabular*}{\textwidth} {@{\extracolsep{\textwidth minus \textwidth}}
l|ccc|ccc|cc|cc@{}}
\hline
\multicolumn{1}{@{}c}{Column1}
&\multicolumn{3}{c}{Column2}
&\multicolumn{3}{c}{\makebox[0pt]{ColumnLongTitle}}
&\multicolumn{2}{c}{Column3}
&\multicolumn{2}{c@{}}{Column4}
\\
\cmidrule(lr){1-1}
\cmidrule(lr){2-4}
\cmidrule(lr){5-7}
\cmidrule(lr){8-9}
\cmidrule(lr){10-11}
\multicolumn{1}{@{}c}{}
&\rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2}
& \rot{Title1} & \rot{Title2}
\\ \hline
Row1 & & \cmark & & \cmark & & & & \cmark & \cmark & \\
\hline
Row2 & \cmark & & & \cmark & & & & \cmark & \cmark & \\
\hline
Row3 & & \cmark & & \cmark & & & &\cmark & \cmark & \\
\hline
\end{tabular*}
\end{table}
\end{document}
Respuesta2
Una solución con tabularx
y makecell
. Eliminé las líneas verticales y la columna vacía. Si el encabezado de la columna tiene dos ensanches, escríbalo en un \thead
comando, que permite descansos.
\documentclass[10pt]{article}
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.3pt}
\usepackage{graphicx}
\usepackage{booktabs, tabularx, caption, makecell}
\setcellgapes{3pt}
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
\newcommand*\rot{\rotatebox{90}}
\begin{document}
\begin{table}
\caption{MyTable}
\centering\makegapedcells
\begin{tabularx}{\linewidth}{@{} l|*{3}{>{\centering\arraybackslash}X} |*{3}{>{\centering\arraybackslash}X}| *{2}{>{\centering\arraybackslash}X}| *{2}{>{\centering\arraybackslash}X}|@{}}
\hline
\multicolumn{1}{c}{Column1}
&\multicolumn{3}{c}{Column2}
&\multicolumn{3}{c}{ColumnLongTitle}
&\multicolumn{2}{c}{Column3}
&\multicolumn{2}{c}{Column4}
\\
\cmidrule(lr){1-1}
\cmidrule(lr){2-4}
\cmidrule(lr){5-7}
\cmidrule(lr){8-9}
\cmidrule(lr){10-11}
\addlinespace
&\rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2}
& \rot{Title1} & \rot{Title2}
\\\hline
Row1 & {} & \cmark & {} & \cmark & {} & {} & & \cmark & \cmark & {} \\
\hline
Row2 & \cmark & {} & {} & \cmark & {} & {} & {} & \cmark & \cmark & {} \\
\hline
Row3 & {} & \cmark & {} & \cmark & {} & {} & {} & \cmark & \cmark & {} \\
\hline
\end{tabularx}
\end{table}
\end{document}
Una variante, si las celdas de la primera columna contienen texto más largo: la primera columna es una X
columna de tipo, dos veces más ancha que el paquete de geometría 10 other
X columns in the cell. Also, I loaded the
, para márgenes horizontales más sensibles si no tiene notas marginales:
\documentclass[10pt]{article}
\usepackage[showframe]{geometry}
\usepackage{graphicx}
\usepackage{booktabs, tabularx, caption, makecell}
\setcellgapes{3pt}
\newcolumntype{Y}{ >{\hsize=2\hsize\arraybackslash}X}
\newcolumntype{Z}{ >{\hsize=0.9\hsize\centering\arraybackslash}X}
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
\newcommand*\rot{\rotatebox{90}}
\begin{document}
\begin{table}
\caption{MyTable}
\centering\makegapedcells
\begin{tabularx}{\linewidth}{@{}Y|*{3}{Z} |*{3}{Z}| *{2}{Z}| *{2}{Z}|@{}}
\hline
\multicolumn{1}{c}{Column1}
&\multicolumn{3}{c}{Column2}
&\multicolumn{3}{c}{ColumnLongTitle}
&\multicolumn{2}{c}{Column3}
&\multicolumn{2}{c}{Column4}
\\
\cmidrule(lr){1-1}
\cmidrule(lr){2-4}
\cmidrule(lr){5-7}
\cmidrule(lr){8-9}
\cmidrule(lr){10-11}
\addlinespace
&\rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2} & \rot{Title3}
& \rot{Title1} & \rot{Title2}
& \rot{Title1} & \rot{Title2}
\\\hline
AA AAA AAA AA AA AAA AAA AAA AAA & {} & \cmark & {} & \cmark & {} & {} & & \cmark & \cmark & {} \\
\hline
Row2 & \cmark & {} & {} & \cmark & {} & {} & {} & \cmark & \cmark & {} \\
\hline
Row3 & {} & \cmark & {} & \cmark & {} & {} & {} & \cmark & \cmark & {} \\
\hline
\end{tabularx}
\end{table}
\end{document}
Respuesta3
Ligeramente modificadoBernardorespuesta:
\documentclass[10pt]{article}
\usepackage{geometry}
\usepackage{rotating}
\usepackage{booktabs, makecell, tabularx}
\setcellgapes{3pt}
\renewcommand\theadfont{\normalsize}
\newcolumntype{C}{>{\setlength\hsize{0.7\hsize}\centering \arraybackslash}X}
\newcolumntype{L}{>{\setlength\hsize{3.0\hsize}\raggedright\arraybackslash}X}
\newcommand\mcn[2]{\multicolumn{#1}{c}{#2}}
\usepackage{caption}
\usepackage{pifont}% http://ctan.org/pkg/pifont
\newcommand{\cmark}{\ding{51}}
\newcommand{\xmark}{\ding{55}}
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.3pt}
\renewcommand*\ShowFrameColor{\color{red}}
\begin{document}
\begin{table}
\caption{My Table}
\centering
\makegapedcells
\settowidth\rotheadsize{\theadfont Title 3}
\begin{tabularx}{\linewidth}{@{} L | *{3}{C} | *{3}{C} | *{2}{C} | *{2}{C} @{}}
\hline
\mcn{1}{Column1} & \mcn{3}{Column2} & \mcn{3}{ColumnLongTitle}
& \mcn{2}{Column3} & \mcn{2}{Column4} \\
\cmidrule(lr){1-1}\cmidrule(lr){2-4}\cmidrule(lr){5-7}
\cmidrule(lr){8-9}\cmidrule(lr){10-11}
& \rothead{Title1} & \rothead{Title2} & \rothead{Title3}
& \rothead{Title1} & \rothead{Title2} & \rothead{Title3}
& \rothead{Title1} & \rothead{Title2}
& \rothead{Title1} & \rothead{Title2} \\
\hline
AAAAAAAAAAAA AAAAAAAAAAAA
& & \cmark & & \cmark & & & & \cmark & \cmark & \\
\hline
Row 2 & \cmark & & & \cmark & & & & \cmark & \cmark & \\
\hline
Row 3 & & \cmark & & \cmark & & & & \cmark & \cmark & \\
\hline
\end{tabularx}
\end{table}
\end{document}
Principales diferencias:
- para encabezados rotados se usa
\rothead
desde el paquetemakecell
- definió un nuevo comando
\mcn{...}{...}
como acceso directo para\multicolumn{...}{c}{...}
- eliminó todas las llaves sobrantes en celdas vacías