
Coloco la misma tabla varias veces en mi documento principal. Para eso, el contenido de la tabla se coloca en un archivo llamado model-values.tex
. En cada \input
, modifico la parte de la tabla que se mostrará ocultando columnas con un \newcolumntype
. Utilizo esta solución porque trabajo con una tabla Gnumeric enorme (exportación TeX) y no quiero dividirla solo por razones de formato.
Ocultar ya no funciona si tengo \multicolumn
s en la tabla. El texto de estos todavía se muestra, sin importar si las columnas están ocultas. Ya probé diferentes soluciones para la columna tipo H (consulte el enlace TeX SE en los comentarios) pero el problema persiste.
Una solución: saque el encabezado del archivo y colóquelo en las distintas apariciones de la tabla. Sin embargo, si agrego o elimino columnas en model-values.tex
ese momento, es necesario cambiar todo el encabezado de la tabla. Se trata de 2 filas más para cambiar frente a solo 1 'fila' (= definición de columna) cuando el encabezado se incluye en el archivo externo.
¿Vale la pena o debería quedarme con la solución de cambiar todo el cabezal? Creo que el problema se debe al tipo de columna c
en el archivo \multicolumn
. Debería "heredar" el uno o algo así de la tabla.
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{tabularx}
% Hidden column type - different solutions on http://tex.stackexchange.com/questions/16604/easiest-way-to-delete-a-column
\newcolumntype{H}{>{\setbox0=\hbox\bgroup}c<{\egroup}@{}}
\begin{filecontents}{model-values.tex}
% Header
Model
& Param a
& \multicolumn{3}{c}{Param set A}
& \multicolumn{2}{c}{Param set B}
\\\cmidrule{3-5}\cmidrule{6-7}
&
& Param A1
& Param A2
& Param A3
& Param B1
& Param B2
\\\midrule
% Data
1 & 5 & 6 & 9 & 11 & 2 & 4\\
\end{filecontents}
\begin{document}
\section{Comparison of param set A}
Here, param set A of all models are compared, refer the table.
\begin{table}[t]
\begin{tabular}{
l % Model
c % Param a
c % Param set A: A1
c % Param set A: A2
c % Param set A: A3
H % Param set B: B1
H % Param set B: B2
}
\toprule
\input{model-values.tex}
\bottomrule
\end{tabular}
\end{table}
\clearpage
\section{Comparison of param set B}
Here, param set B of all models are compared, refer the table.
\begin{table}[t]
\begin{tabular}{
l % Model
c % Param a
H % Param set A: A1
H % Param set A: A2
H % Param set A: A3
c % Param set B: B1
c % Param set B: B2
}
\toprule
\input{model-values.tex}
\bottomrule
\end{tabular}
\end{table}
\end{document}
Respuesta1
Como las columnas múltiples generalmente abarcan más de una columna, la idea de que deba heredar "el" tipo de columna no tiene mucho sentido. Y para una columna, está explícitamente destinado a sobrescribir el tipo de columna existente.
Puede ocultar una columna múltiple con la ayuda de algunas columnas e interruptores ficticios. Pero se necesita un poco de manipulación para conseguir que los espacios entre columnas y líneas sean correctos. Y hay que tener cuidado de restablecer los valores booleanos a falso al principio:
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{filecontents}
% Hidden column type - different solutions on http://tex.stackexchange.com/questions/16604/easiest-way-to-delete-a-column
\newcolumntype{H}{@{}>{\setbox0=\hbox\bgroup}c<{\egroup}@{}}
\newif\ifhidden
\begin{filecontents}{model-values.tex}
% Header
Model
& Param a
& \ifhidden\multicolumn{3}{@{}c@{}}{}\else\multicolumn{3}{c}{Param set A}\fi
&
& \ifhidden\multicolumn{2}{@{}c@{}}{}\else\multicolumn{2}{c}{Param set B}\fi
\\\cmidrule{3-5}\cmidrule{7-8}
&
& Param A1
& Param A2
& Param A3
&
& Param B1
& Param B2
\\\midrule
% Data
1 & 5 & 6 & 9 & 11 && 2 & 4\\
1 & 5 & 6 & 9 & 11 && 2 & 4\\
\end{filecontents}
\begin{document}
\section{Comparison of param set A}
Here, param set A of all models are compared, refer the table.
\begin{table}[t]
\begin{tabular}{
l<{\global\hiddenfalse} % Model
c % Param a
c % Param set A: A1
c % Param set A: A2
c % Param set A: A3
@{}l<{\global\hiddentrue}%dummy column to hold the switch
H % Param set B: B1
H % Param set B: B2
}
\toprule
\input{model-values.tex}
\bottomrule
\end{tabular}
\end{table}
\section{Comparison of param set B}
Here, param set B of all models are compared, refer the table.
\begin{table}[t]
\begin{tabular}{
l <{\global\hiddenfalse} % Model% Model
c <{\global\hiddentrue}% Param a
H % Param set A: A1
H % Param set A: A2
H % Param set A: A3
@{}l <{\global\hiddenfalse}
c % Param set B: B1
c % Param set B: B2
}
\toprule
\input{model-values.tex}
\bottomrule
\end{tabular}
\end{table}
\end{document}