Скрыть \multicolumn's

Скрыть \multicolumn's

Я размещаю одну и ту же таблицу несколько раз в своем основном документе. Для этого содержимое таблицы помещается в файл с именем model-values.tex. В каждом \inputя изменяю отображаемую часть таблицы, скрывая столбцы с помощью \newcolumntype. Я использую это решение, поскольку работаю с огромной таблицей Gnumeric (экспорт TeX) и не хочу разделять ее только из соображений форматирования.

Скрытие больше не работает, если \multicolumnв таблице есть s. Текст этих столбцов все равно отображается, независимо от того, скрыты ли столбцы. Я уже пробовал разные решения для столбца типа H (см. ссылку TeX SE в комментариях), но проблема осталась.

Одно из решений: вынуть заголовок из файла и поместить его в несколько вхождений таблицы. Однако, если я добавлю или удалю столбцы model-values.tex, то придется изменить весь заголовок таблицы. Это еще 2 строки для изменения по сравнению с только 1 'строкой' (= определение столбца), когда заголовок включен во внешний файл.

Стоит ли это того или мне следует остановиться на решении с изменением всего заголовка? Я думаю, проблема в типе столбца cв \multicolumn. Он должен «унаследовать» тип таблицы или что-то в этом роде.

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

решение1

Поскольку multicolumn в общем случае охватывает более одного столбца, идея, что он должен наследовать "тип" столбца, не имеет особого смысла. А для одного столбца он явно подразумевает перезапись существующего типа столбца.

Вы можете скрыть многоколоночный формат с помощью некоторых фиктивных столбцов и переключателей. Но для этого нужно немного повозиться, чтобы получить правильные пробелы между столбцами и строками. И нужно быть осторожным, чтобы сбросить булевы значения на false в начале:

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

Связанный контент