von Gast » Sa 21. Mär 2020, 09:38
Zunächst einmal hast du 32 Spalten deklariert, verwendest aber nur 31. Dazu kommt, dass du in Wirklichkeit keine einzige Zeile mehr hast, in der tatsächlich eine X-Spalte verwendet wird. Sämtliche X-Spalten sind durch \multicolumn-Anweisungen überdeckt, bei denen als Spaltendeklaration c verwendet wird. c ist aber nicht dehnbar. Du kannst die Problematik sehr gut visualisieren, wenn du einmal über die erste echte Tabellenzeile noch eine Dummy-Zeile mit 31 leeren Spalten setzt. Du wirst dann sehen, dass diese weiter nach rechts reichen als die restlichen Tabellenzeilen.
Eigentlich sieht das ganze für mich ohnehin eher nach einer Grafik als einer Tabelle aus. Deshalb würde ich empfehlen, das mit
pgf/TikZ zu machen. Wenn schon eine Tabelle, dann eher eine tabular* als eine tabularx. Allerdings funktioniert dabei das Füllen mit Farbe dann wieder nicht, weil der per \extracolsep{\fill} eingefügte Abstand nicht eingefärbt würde. Damit lande ich dann wieder bei meinem Vorschlag: Mach Grafiken besser als Bild. Ansonsten müsstest du in der Tat die Inneren Tabellen auf eine bestimmte Breite setzen statt sie einfach nur als c-Spalten zu realisieren. Das wäre in diesem Fall sogar möglich, da sowohl die Tabellenbreite als auch die Breite der einzigen nicht X-Spalte bekannt ist. Also kann man die Breite einer einzelnen Spalte einfach ausrechnen (die beiden \tabcolsep je Spalte nicht vergessen) und entsprechend \multicolumn-Zusammenfassungen als Spalten von entsprechenden Vielfachen dieser festen Breite definieren.
Man könnte auch versuchen, bei den \multicolumn wieder X-Spalten zu verwenden, muss dann aber zusätzliche Maßnahmen ergreifen, damit die Ausrichtung in allen Zellen passt. Außerdem bekommt man dann rasch einmal Probleme mit den vertikalen Linien (auf die man ohnehin besser verzichtet, wenn es eine Tabelle und keine Grafik sein soll):
\documentclass[11pt,twoside]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[table]{xcolor}
\usepackage{tabularx}
\usepackage{ragged2e}
\renewcommand{\tabularxcolumn}[1]{>{\normalsize\centering\arraybackslash}m{#1}}
\newcommand{\ctab}[1]{%
\begin{tabular}{@{}c@{}}#1\end{tabular}%
}
\newcommand{\mc}[2]{%
\multicolumn{#1}{X|}{\ctab{#2}}%
}
\newcommand{\mcc}[2]{%
\multicolumn{#1}{%
>{\columncolor{lightgray}}X|
}{\ctab{#2}}%
}
\begin{document}
\begin{tabularx} {\textwidth}{|>{\RaggedRight}m{2.9cm}|*{30}{c|}}
\hline
Merkmal & \multicolumn{30}{c|}{Merkmalsausprägung}\\
\hline
Abstraktionsgrad &
\mcc{15}{gegenständlich} &
\multicolumn{15}{c|}{formal} \\
\hline
Entstehungsart &
\mc{15}{natürlich} &
\mcc{15}{künstlich}\\
\hline
Zweck des Systems &
\mcc{10}{Örtliche und\\zeitliche\\Veränderung} &
\mc{10}{Formveränderung} &
\mc{10}{Strukturveränderung}\\
\hline
Zeitabhängig\-keit &
\mc{15}{statisch} &
\mcc{15}{dynamisch}\\
\hline
\end{tabularx}
\end{document}
Zunächst einmal hast du 32 Spalten deklariert, verwendest aber nur 31. Dazu kommt, dass du in Wirklichkeit keine einzige Zeile mehr hast, in der tatsächlich eine [tt]X[/tt]-Spalte verwendet wird. Sämtliche [tt]X[/tt]-Spalten sind durch [tt]\multicolumn[/tt]-Anweisungen überdeckt, bei denen als Spaltendeklaration [tt]c[/tt] verwendet wird. [tt]c[/tt] ist aber nicht dehnbar. Du kannst die Problematik sehr gut visualisieren, wenn du einmal über die erste echte Tabellenzeile noch eine Dummy-Zeile mit 31 leeren Spalten setzt. Du wirst dann sehen, dass diese weiter nach rechts reichen als die restlichen Tabellenzeilen.
Eigentlich sieht das ganze für mich ohnehin eher nach einer Grafik als einer Tabelle aus. Deshalb würde ich empfehlen, das mit [p]pgf[/p]/TikZ zu machen. Wenn schon eine Tabelle, dann eher eine [tt]tabular*[/tt] als eine [tt]tabularx[/tt]. Allerdings funktioniert dabei das Füllen mit Farbe dann wieder nicht, weil der per [tt]\extracolsep{\fill}[/tt] eingefügte Abstand nicht eingefärbt würde. Damit lande ich dann wieder bei meinem Vorschlag: Mach Grafiken besser als Bild. Ansonsten müsstest du in der Tat die Inneren Tabellen auf eine bestimmte Breite setzen statt sie einfach nur als [tt]c[/tt]-Spalten zu realisieren. Das wäre in diesem Fall sogar möglich, da sowohl die Tabellenbreite als auch die Breite der einzigen nicht [tt]X[/tt]-Spalte bekannt ist. Also kann man die Breite einer einzelnen Spalte einfach ausrechnen (die beiden [tt]\tabcolsep[/tt] je Spalte nicht vergessen) und entsprechend [tt]\multicolumn[/tt]-Zusammenfassungen als Spalten von entsprechenden Vielfachen dieser festen Breite definieren.
Man könnte auch versuchen, bei den [tt]\multicolumn[/tt] wieder [tt]X[/tt]-Spalten zu verwenden, muss dann aber zusätzliche Maßnahmen ergreifen, damit die Ausrichtung in allen Zellen passt. Außerdem bekommt man dann rasch einmal Probleme mit den vertikalen Linien (auf die man ohnehin besser verzichtet, wenn es eine Tabelle und keine Grafik sein soll): [code]\documentclass[11pt,twoside]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[table]{xcolor}
\usepackage{tabularx}
\usepackage{ragged2e}
\renewcommand{\tabularxcolumn}[1]{>{\normalsize\centering\arraybackslash}m{#1}}
\newcommand{\ctab}[1]{%
\begin{tabular}{@{}c@{}}#1\end{tabular}%
}
\newcommand{\mc}[2]{%
\multicolumn{#1}{X|}{\ctab{#2}}%
}
\newcommand{\mcc}[2]{%
\multicolumn{#1}{%
>{\columncolor{lightgray}}X|
}{\ctab{#2}}%
}
\begin{document}
\begin{tabularx} {\textwidth}{|>{\RaggedRight}m{2.9cm}|*{30}{c|}}
\hline
Merkmal & \multicolumn{30}{c|}{Merkmalsausprägung}\\
\hline
Abstraktionsgrad &
\mcc{15}{gegenständlich} &
\multicolumn{15}{c|}{formal} \\
\hline
Entstehungsart &
\mc{15}{natürlich} &
\mcc{15}{künstlich}\\
\hline
Zweck des Systems &
\mcc{10}{Örtliche und\\zeitliche\\Veränderung} &
\mc{10}{Formveränderung} &
\mc{10}{Strukturveränderung}\\
\hline
Zeitabhängig\-keit &
\mc{15}{statisch} &
\mcc{15}{dynamisch}\\
\hline
\end{tabularx}
\end{document}
[/code]