
Ich platziere dieselbe Tabelle mehrmals in meinem Hauptdokument. Dazu wird der Inhalt der Tabelle in einer Datei namens abgelegt model-values.tex
. Bei jedem \input
ändere ich den anzuzeigenden Teil der Tabelle, indem ich Spalten mit einem ausblende \newcolumntype
. Ich verwende diese Lösung, weil ich mit einer riesigen Gnumeric-Tabelle arbeite (TeX-Export) und diese nicht nur aus Formatierungsgründen aufteilen möchte.
Das Ausblenden funktioniert nicht mehr, wenn ich \multicolumn
s in der Tabelle habe. Der Text dieser wird weiterhin angezeigt, egal ob die Spalten ausgeblendet sind. Für die Spalte vom Typ H habe ich bereits verschiedene Lösungen probiert (siehe TeX SE-Link in den Kommentaren), aber das Problem besteht weiterhin.
Eine Lösung: Nehmen Sie den Header aus der Datei und fügen Sie ihn in die verschiedenen Vorkommen der Tabelle ein. Wenn ich jedoch Spalten hinzufüge oder lösche model-values.tex
, muss der gesamte Tabellenkopf geändert werden. Das bedeutet, dass zwei weitere Zeilen geändert werden müssen, im Vergleich zu nur einer „Zeile“ (= Spaltendefinition), wenn der Header in der externen Datei enthalten ist.
Lohnt sich das oder sollte ich bei der Lösung bleiben, bei der ich den gesamten Kopf ändere? Ich denke, das Problem liegt am Spaltentyp c
in \multicolumn
. Er sollte den der Tabelle „erben“ oder so etwas.
\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}
Antwort1
Da Multicolumn im Allgemeinen mehr als eine Spalte umfasst, macht die Idee, dass es „den“ Spaltentyp erben soll, wenig Sinn. Und für eine Spalte ist es ausdrücklich dazu gedacht, den vorhandenen Spaltentyp zu überschreiben.
Man kann eine Mehrfachspalte mit Hilfe einiger Dummy-Spalten und Schalter verbergen. Allerdings muss man ein bisschen herumfummeln, um die Abstände zwischen den Spalten und den Zeilen richtig hinzubekommen. Und man sollte darauf achten, die Booleans am Anfang auf false zurückzusetzen:
\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}