Ocultar \multicolunas

Ocultar \multicolunas

Coloco a mesma tabela várias vezes no meu documento principal. Para isso, o conteúdo da tabela é colocado em um arquivo chamado model-values.tex. Em cada \input, altero a parte da tabela a ser exibida, ocultando colunas com um \newcolumntype. Eu uso esta solução porque trabalho com uma tabela Gnumeric enorme (exportação de TeX) e não quero dividi-la apenas por motivos de formatação.

Ocultar não funciona mais se eu tiver \multicolumns na tabela. O texto destes ainda é exibido, não importa se as colunas estão ocultas. Já tentei diferentes soluções para a coluna tipo H (ver link TeX SE nos comentários) mas o problema persiste.

Uma solução: tirar o cabeçalho do arquivo e colocá-lo nas diversas ocorrências da tabela. No entanto, se eu adicionar ou eliminar colunas model-values.tex, todo o cabeçalho da tabela precisará ser alterado. São mais 2 linhas a serem alteradas versus apenas 1 'linha' (= definição de coluna) quando o cabeçalho é incluído no arquivo externo.

Vale a pena ou devo continuar com a solução de mudar a cabeça inteira? Acho que o problema é por causa do tipo de coluna cno arquivo \multicolumn. Deve 'herdar' a tabela ou algo assim.

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

Responder1

Como multicoluna geralmente abrange mais de uma coluna, a ideia de que ela deveria herdar "o" tipo de coluna não faz muito sentido. E para uma coluna, pretende-se explicitamente substituir o tipo de coluna existente.

Você pode ocultar uma multicoluna com a ajuda de algumas colunas e opções fictícias. Mas é preciso alguns ajustes para obter os espaços entre as colunas e as linhas corretamente. E deve-se ter cuidado ao redefinir os booleanos para falsos no início:

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

informação relacionada