In diesem Minimalbeispiel habe ich eine TikZ-Matrix samt gezeichneten Linien, nur zur Strukturerkennung: Open in writeLaTeX
\documentclass{article} \usepackage{tikz} \usetikzlibrary{matrix} \begin{document} \begin{tikzpicture} \matrix [matrix of nodes, nodes={draw, minimum width=2em}, row sep=-\pgflinewidth, column sep=-\pgflinewidth] { & A, B, C & \\ D & E & F \\ G, H & & I \\ }; \end{tikzpicture} \end{document} Bisher verbreitern die Zellen einfach ihre Spalte:
Wie kann ich erreichen, dass die Zellen mit "A, B, C" und "G, H" jeweils 3 bzw. 2 Spalten überspannen? |
Wenn für alle Spalten gleich breit sind, dann lässt könnte man das wie unten stehend lösen. Die gleiche Breite kann man durch Vorgabe von Open in writeLaTeX
\documentclass[tikz,margin=5mm]{standalone} \usetikzlibrary{matrix} \newlength\textbreite \newcommand\mc[2]{% |[ draw=none, xshift=(-\iabst-.5\pgflinewidth),yshift=(-\iabst-.5\pgflinewidth), inner ysep=0pt ]|% \makebox[\textbreite][l]{% \pgfmathsetlength\textbreite{#1*(\textbreite+2*\iabst)-2*\iabst} \tikz\node[draw,inner ysep=\iabst]{% \makebox[\textbreite]{#2}% };% }% }% \usepackage{blindtext} \begin{document} \settowidth\textbreite{breites Wort}% Ermitteln der Textbreite \begin{tikzpicture} \newcommand\iabst{0.3em} % Abstand zwischen Text und Zellenrand \matrix [matrix of nodes, nodes={ draw=gray!30, text width=\textbreite, align=center, inner sep=\iabst, }, row sep=-\pgflinewidth, column sep=-\pgflinewidth ] { \mc{3}{ABC}\\ D & E& F \\ \mc{2}{GH}& & breites Wort\\ }; \end{tikzpicture} \end{document} Soll nur die erste (oder letzte) Zeile über die ganze Tabellenbreite gehen, dann kann man diese auch nachträglich einfügen. Dabei spielt die Breite der einzelnen Spalten keine Rolle mehr: Open in writeLaTeX
\documentclass[tikz,margin=5mm]{standalone} \usetikzlibrary{matrix,calc} \begin{document} \begin{tikzpicture} \matrix (m)[matrix of nodes, draw, nodes={minimum width=2em}, ] { D&E&F\\ G &ein paar Worte& I \\ }; \path let \p1=(m.east),\p2=(m.west),\n1={\x1-\x2-\pgflinewidth} in (m.north) node[draw, anchor=south, minimum width=\n1,yshift=-\pgflinewidth] {Ein breiter Titel}; \end{tikzpicture} \end{document} Es gibt aber auch die Möglichkeit Inhalte nachträglich in die Matrix einzufügen, wenn man den entsprechenden Platz vorsieht. Damit sich der Aufwand in Grenzen hält, gebe ich eine ausreichend große, einheitliche Zellenhöhe vor. Open in writeLaTeX
\documentclass[tikz,margin=5mm]{standalone} \usetikzlibrary{matrix,calc} \tikzset{ zusatz/.style={draw=green!30, anchor=south west, minimum width=#1,yshift=-\pgflinewidth,minimum height=2em } } \begin{document} \begin{tikzpicture} \newcommand\hoehe{2em} \matrix (m)[matrix of nodes,draw, nodes={draw=gray!30,minimum height=\hoehe,font=\strut}, row sep=-\pgflinewidth, column sep=-\pgflinewidth ] { XD&E&F\\ &&R\\ A&B&C\\[\hoehe] G &ein paar Worte& IXX \\ }; \path let \p1=(m-4-2.east),\p2=(m-1-1.west),\n1={\x1-\x2-\pgflinewidth} in (m-1-1.west|-m-3-1.north)node[zusatz=\n1]{zwei Spalten}; \path let \p1=(m-4-3.east),\p2=(m-1-1.west),\n1={\x1-\x2-\pgflinewidth} in (m-1-1.west|-m-4-3.north)node[zusatz=\n1]{drei Spalten}; \end{tikzpicture} \end{document} beantwortet 13 Mär '14, 13:25 esdd Sehr gut! Da sich bei mehreren Tabellen die Breiten wohl unterscheiden, ziehe ich
(13 Mär '14, 13:37)
Felix
|