
Я размещаю одну и ту же таблицу несколько раз в своем основном документе. Для этого содержимое таблицы помещается в файл с именем 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}