Dickere \cline und Zellen diagonal durchstreichen

Tabellen und Grafiken erstellen und anordnen


Pitti1614
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 24. Mär 2015, 11:18

Dickere \cline und Zellen diagonal durchstreichen

Beitrag von Pitti1614 »

Hallo zusammen,

ich muss eine Word-Vorlage in eine Tex-Vorlage umwandeln und damit leider auch sehr hässliche Tabellen, die jedem Latex-Ideal wiedersprechen, erstellen. Bei dieser Tabelle komme ich nicht weiter.

Ich benötige ein dickere \cline ([1.25pt]) oder eine dickere \hhline für den oberen Tabellenrand, wobei die erste Zelle des Headers fehlt. Irgendwo muss da sicher noch ein {\arrayrulewidth}{1.25pt} hin, aber meine Versuche waren nicht gerade erfolgreich.

Ein weiteres Problem besteht darin, z.B. die Zellen in Spalte f diagonal (von links oben nach rechts unten) durchzustreichen. Versuche mit \backslashbox{}{} oder \diabox{}{} sind leider nicht auf die Zellengröße einstellbar.

Ich hoffe es kann mir jemand bei dieser unschönen Tabelle weiterhelfen.

Lieben Dank,
Marlen
\documentclass[pagesize,a4paper,10pt,twoside,numbers=noenddot,BCOR=15mm]{scrreprt}

\usepackage{hhline}
\usepackage[dvips,table,xcdraw]{xcolor}


\begin{document}

		\begin{tabular}[h!]{>{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}  >{\raggedright\arraybackslash}p{0.25cm} | >{\centering\arraybackslash}p{2.5cm} | >{\centering\arraybackslash}p{1.5cm} | >{\centering\arraybackslash}p{2.0cm} | >{\centering\arraybackslash}p{1.25cm} | >{\centering\arraybackslash}p{1.25cm} !{\vrule width 1.25pt} >{\centering\arraybackslash}p{1.5cm} !{\vrule width 1.25pt}}

\hhline{|*1{>{\arrayrulecolor{white}}-}>{\arrayrulecolor{black}}|*7{-}}
\arrayrulecolor{black}%	
 
  & \cellcolor[gray]{.6} a & \cellcolor[gray]{.6} b & \cellcolor[gray]{.6} c & \cellcolor[gray]{.6} d & \cellcolor[gray]{.6} e & \cellcolor[gray]{.6} f & \cellcolor[gray]{.6} g \\ 
\noalign{\hrule height 1.25pt}

\multicolumn{7}{!{\vrule width 1.25pt} l}{\cellcolor[gray]{.6} \textbf{Text}} & \cellcolor[gray]{.6} \\
\noalign{\hrule height 1.25pt}

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} bla} &  &  &  &  &  &  & hier steht viel Text drin, damit Zelle groesser wird \\

\cline{2-8}

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  &  &  \\

\cline{2-8}
	
\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  &  &  \\

\cline{2-8}
	
\noalign{\hrule height 1.25pt}

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} bla} &  &  &  &  &  &  &  \\

\cline{2-8} 

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  &  &  \\

\cline{2-8}	
	
\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  &  &  \\

\cline{2-8}	

\noalign{\hrule height 1.25pt}

	\end{tabular}	


\end{document} 

Besserwisser

Beitrag von Besserwisser »

Das Paket booktabs unterstützt u. a. auch ein optionales Argument für die Liniendicke oder auch die Änderung der Voreinstellungen für die Liniendicken. Will man vertikale Linien verwenden, sollte man allerdings den Extraabstand über und unter den horizontalen Linien abschalten (siehe dazu die [d]booktabs[/d]-Anleitung).

Wenn es ganz schlimm kommt, kann man auch die matrix-Bibliothek von tikz/pgf verwenden. Damit kann man dann wirklich alle Arten von Linien, Kästen etc. um und in Tabellenzellen pinseln.

Pitti1614
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 24. Mär 2015, 11:18

Beitrag von Pitti1614 »

Vielen Dank für die Hinweise.
Mit booktabs konnte ich eine dickere \cmidrule wie gewünscht zeichnen.

Weiterhin bleibt aber noch das Problem mit den diagonal durchgestrichenen Tabellenzeilen. Der Lösungsvorschlag mit tikz/pgf würde zwar funktionieren, aber da der Tabelleninhalt später variabel ist (und ich dieses Kommando für viele weitere Tabellen verwenden muss), müsste ich jede Tabelle am Ende ausmessen in cm damit ich die Linien an die richtige Stelle setzen kann.

Es muss eine einfachere Lösung geben.

Nachfolgend habe ich meine Versuche mit \backslashbox dargestellt. Für sehr kleine Spalten (a) ist die Breite nicht mehr einstellbar. Für größere Zellen (f) nicht auf Zellenlänge.

Hat noch jemand eine andere Idee?
\documentclass[pagesize,a4paper,10pt,twoside,numbers=noenddot,BCOR=15mm]{scrreprt}

\usepackage{hhline}
\usepackage[dvips,table,xcdraw]{xcolor}
\usepackage{booktabs}

\usepackage{slashbox}


\begin{document}

		\begin{tabular}[h!]{>{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}  >{\raggedright\arraybackslash}p{0.25cm} | >{\centering\arraybackslash}p{2.5cm} | >{\centering\arraybackslash}p{1.5cm} | >{\centering\arraybackslash}p{2.0cm} | >{\centering\arraybackslash}p{1.25cm} | >{\centering\arraybackslash}p{1.25cm} !{\vrule width 1.25pt} >{\centering\arraybackslash}p{1.5cm} !{\vrule width 1.25pt}}

\cmidrule[1.25pt](l{-.125em}){2-8}\noalign{\vskip -2.7pt}
 
  & \cellcolor[gray]{.6} a & \cellcolor[gray]{.6} b & \cellcolor[gray]{.6} c & \cellcolor[gray]{.6} d & \cellcolor[gray]{.6} e & \cellcolor[gray]{.6} f & \cellcolor[gray]{.6} g \\ 
\noalign{\hrule height 1.25pt}

\multicolumn{7}{!{\vrule width 1.25pt} l}{\cellcolor[gray]{.6} \textbf{Text}} & \cellcolor[gray]{.6} \\
\noalign{\hrule height 1.25pt}

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} bla} & \backslashbox[0.25cm]{}{} &  &  &  &  & \backslashbox[1.25cm]{}{} & hier steht viel Text drin, damit Zelle groesser wird \\

\cline{2-8}

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  & \backslashbox[1.25cm]{}{} &  \\

\cline{2-8}
	
\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  & \backslashbox[1.25cm]{}{} &  \\

\cline{2-8}
	
\noalign{\hrule height 1.25pt}

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} bla} &  &  &  &  &  &  &  \\

\cline{2-8} 

\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  &  &  \\

\cline{2-8}	
	
\multicolumn{1}{!{\vrule width 1.25pt} >{\raggedright\arraybackslash}p{1.7cm} !{\vrule width 1.25pt}}{\cellcolor[gray]{.6} } &  &  &  &  &  &  &  \\

\cline{2-8}	

\noalign{\hrule height 1.25pt}

	\end{tabular}	



\end{document}
[/code]

Besserwisser

Beitrag von Besserwisser »

Pitti1614 hat geschrieben:Der Lösungsvorschlag mit tikz/pgf würde zwar funktionieren, aber da der Tabelleninhalt später variabel ist (und ich dieses Kommando für viele weitere Tabellen verwenden muss), müsste ich jede Tabelle am Ende ausmessen in cm damit ich die Linien an die richtige Stelle setzen kann.
Wieso das denn? AFAIK kann man bei tikz nodes mit Namen versehen und dann relativ beispielsweise zu den Ecken des nodes arbeiten.

Pitti1614
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 24. Mär 2015, 11:18

Beitrag von Pitti1614 »

Ok, ich verstehe was du meinst. Du hast nicht zufällig ein Beispiel dazu? Das tikz/pgf Manual ist doch recht groß und (für mich) kompliziert...

Noch so einer

Beitrag von Noch so einer »

Ganz kurz und schnell:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
  \matrix (m) [matrix of nodes, row sep=-0.4pt, % Liniendicke
    nodes={rectangle, draw, minimum width=4em,font=\strut},nodes in empty cells]
  {
          & Z1S2\\
    Z2S1 & Z2S2 \\
    Z3S1 & Z3S2 \\
  };
  \draw (m-1-1.north west) -- (m-1-1.south east);
\end{tikzpicture}
\end{document}
Die Anleitung zur matrix-Bibliothek ist übrigens nicht sehr lang. Und die Erklärung zur Referenzierung von nodes auch nicht.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Hier ist der Vorschlag von Noch so einer mal noch ein wenig ausgebaut:
\documentclass[margin=10pt]{standalone} 
\usepackage{tikz} 
\usetikzlibrary{matrix} 
\begin{document} 
\begin{tikzpicture} 
  \matrix (m) [matrix of nodes,
  draw,
  row sep=-\pgflinewidth,column sep=-\pgflinewidth,% Liniendicke 
  inner sep=0pt,
  nodes={rectangle, draw=none,
    text width=4em,font=\strut,
    inner xsep=\tabcolsep,inner ysep=.3em
  },
  nodes in empty cells,
  column 1/.style={align=left},
  column 2/.style={align=center}
  ]{ 
        & \\
        & Z1S2 und noch mehr Text\strut\\ 
   Z2S1 & Z2S2 \\ 
   Z3S1 & Z3S2 \\
   Z4S1 & Z4S2 \\ 
  };
  % gestrichene Zellen
  \draw (m-2-1.north west) -- (m-3-1.north east);
  % Linien zwischen Zeilen
  \foreach \r in {2,4,5}\draw(m-\r-1.north-|m.west)--(m-\r-1.north-|m.east);
  % dickere Linien zwischen Zeilen
  \foreach \r in {1,3}\draw[line width=1.25pt](m-\r-1.north-|m.west)--(m-\r-1.north-|m.east);
  % Linien zwischen Spalten
  \draw(m-1-1.east|-m.north)--(m-1-1.east|-m.south);
\end{tikzpicture} 
\end{document}
Gruß
Elke

Bild
Dateianhänge
gl_tabgestr.png
gl_tabgestr.png (8.87 KiB) 3294 mal betrachtet

Pitti1614
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 24. Mär 2015, 11:18

Beitrag von Pitti1614 »

Hallo Elke,

ich danke dir vielmals für deine Hilfe. Das ist genau das was ich gesucht habe!

Grüße,
Marlen

Antworten