Ocultar \multicolumnas

Ocultar \multicolumnas

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 \multicolumns 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.texese 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 cen 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}

información relacionada