我在主文档中多次放置同一张表格。为此,表格的内容放置在名为的文件中model-values.tex
。每次\input
,我都会通过使用隐藏列来更改要显示的表格部分\newcolumntype
。我使用此解决方案是因为我使用一个巨大的 Gnumeric 表格(TeX 导出),并且我不想仅出于格式原因而拆分它。
如果表格中有 s,则隐藏不再起作用\multicolumn
。无论列是否隐藏,这些文本仍会显示。我已经尝试了针对 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
由于多列通常跨越多个列,因此它应该继承“该”列类型的想法没有多大意义。对于一个列,它明确意味着覆盖现有的列类型。
您可以借助一些虚拟列和开关来隐藏多列。但需要进行一些调整才能正确获取列和行之间的空间。并且应该小心在开始时将布尔值重置为 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}