Seite 1 von 2

Tikzpicture - Morphologischer Kasten, Tabellenbreite

Verfasst: So 31. Jul 2016, 22:45
von Bachi
Hallo in die Runde,

ich habe die Herausforderung, dass ich in einer tikzpicture-Matrix zwar alles hinbekomme habe, was man für einen Morphologischen Kasten braucht (Matrix an sich zzgl. der Kennzeichnung der Lösungsvarianten), aber ich bin ratlos, wie ich
a) einen Zeilenumbruch in den Spalten erzeugen kann und
b) die Spalte linksbündig ausrichten kann.

Problem ist beim aktuellen Stand, dass die Matrix (selbst bei sehr kleiner Schrift) über die Seite "hinauswandert".

Anbei der Code (nach Rückmeldung von Bartman jetzt auch hier korrigiert):
\RequirePackage{fix-cm}
\documentclass[a4paper,,12pt, ngerman]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[automark]{scrpage2} %%%%%KOpfzeile
\pagestyle{scrheadings}	%%%%%KOpfzeile
\clearscrheadfoot			%%%%%KOpfzeile
\ofoot{\pagemark}		%%%%%KOpfzeile
\ohead[\pagemark]{\headmark}		%%%%%KOpfzeile
\automark[chapter]{section}	%%%%%KOpfzeile
\automark[section]{subsection}

\usepackage{setspace}
\onehalfspacing
\usepackage{blindtext}
\usepackage{mdwlist}
\usepackage{geometry}
\geometry{width=15cm, left=3cm, right=4cm, top=2.5cm, bottom=2.5cm}
\usepackage{graphicx}
\usepackage{float}
\usepackage{longtable}
\usepackage{xcolor}
\usepackage{standalone}

\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{positioning,shapes,shadows,arrows}

\usepackage{tabu} 
\usepackage{colortbl}

\usepackage{booktabs}
\usepackage{array} 
\usepackage{multirow}  

\usepackage{hyperref} 
\usepackage[figure]{hypcap} 

\usepackage{diagbox}

%%%%%%%%
\newlength\bildhoehe
\setlength\bildhoehe{1cm}
\newcommand\bildbreite{1cm}
\newcommand\schrift{\footnotesize}% Einstellung für Bildbeschriftungen
\newcommand\zeilenabstand{.75\tabcolsep}

\newcommand\grafik[2]{%
  \begin{minipage}{\bildbreite}
    \centering\raisebox{.75\tabcolsep}{%
      \parbox[b]{\linewidth}{\hspace*{0pt}\raggedright\schrift#1}}\newline%
    \includegraphics[width=\linewidth,height=\bildhoehe]{#2}%
  \end{minipage}%
}

\newcommand\LV{\rule{0pt}{0.5\bildhoehe}}% Stütze, liefert nötige Höhe für Endpunkte

\tikzset{vp/.style={circle,fill,inner sep=2pt}}
\newcommand\verbindungslinie[3]{
  \foreach [remember=\p as \lastp (initially #2)] \p in {#3}
    \draw[#1]([yshift=.5\bildhoehe]\lastp.south)node[vp]{}--([yshift=.5\bildhoehe]\p.south)node[vp]{};
}

\begin{document}

\begin{center}
\begin{tiny}

  \begin{minipage}{\linewidth}
    \captionof{table}{Morphologischer Kasten}\label{tab:table6} 
    
    \begin{tikzpicture}[
        very thick,
        nodes={inner sep=0.0ex}
      ]
      \matrix[
          matrix of nodes ,
          inner sep=0pt,
          row sep=10pt,
          column 2/.style={minimum width=0.5cm},
        ](m)
       {
          1&größenveränderbare Mechanismen in Heizkörpern
            &{}{Ofen}
            &{}{Holz}           
          & {}{Stein}
            &{}{Text zum Test}
            &{}{Schlauch mit Innendruck}\\
          2&Auch hier kann etwas neues stehen
            &{}{ausziehbar}
            &{}{faltbar}
            &{}{aufblasbar}
            &{}{}\\
          3&Gehäuseöffnung
            &{}{Drehdeckel}
            &{}{Klappdeckel}
            &{}{Deckel mit Verklippung}
            &{}{}\\
          4& größenveränderbare Mechanismen in Heizkörpern            
            &{}{Plane}
            &{}{Kunststoff}
            &{}{Leichtmetall}
            &{}{Glas}
            &{}{Hier geht der Text schnell bis Ende Seite}\\
	
            5& größenveränderbare Mechanismen in Heizkörpern
            &{}{mit einer Hand}
            &{}{mit zwei Händen}
            &{}{automatisch}
            &{}{}
            &{}{}\\
            6& 
            &{}{}
            &{}{}
            &{}{}
            &{}{}
            &{}{}\\
          &&{}&{}&{}&{}\\
        };
% Kopfzeile
        \node(ul)[anchor=south west] 
          at ([yshift={\zeilenabstand+\aboverulesep+\belowrulesep}]m.north west)
          {Teilfunktion};
        \node(or)[anchor=south east] at (ul.north-|m-1-2.east){Lösungsvarianten};
        \foreach[count=\i from 3] \l in {1,2,3,4,5}
          \node[anchor=base] at (or.base-|m-1-\i){\l};
% Tabellenlinien
        \draw[line width=\lightrulewidth](or.north-|ul.west)--(or.east|-ul.south)
          ([yshift=-\aboverulesep]ul.south-|m.west)
            --([yshift=-\aboverulesep]ul.south-|m.east);
        \draw[line width=\heavyrulewidth]([yshift=\belowrulesep]or.north-|m.west)
            --([yshift=\belowrulesep]or.north-|m.east)
          ([yshift={-\aboverulesep-\zeilenabstand}]m.south west)
            --([yshift={-\aboverulesep-\zeilenabstand}]m.south east);
% Verbindungslinien
        \verbindungslinie{red}{m-1-3}{m-2-4,m-3-4,m-4-3,m-5-4,m-6-3}
        \verbindungslinie{blue}{m-1-5}{m-2-3,m-3-4,m-4-4,m-5-4,m-6-4}
        \verbindungslinie{green}{m-1-7}{m-2-5,m-3-4,m-4-4,m-5-5,m-6-4}
        \foreach \f/\p/\t in {red/m-6-3/LV1,blue/m-6-4/LV2,green/m-6-5/LV3}
          \node[\f,below,font=\bfseries]at(\p){\t};
    \end{tikzpicture}
  \end{minipage}
  \end{tiny}
\end{center}

\end{document}
Ich freue mich über Tipps!

Verfasst: So 31. Jul 2016, 23:34
von Bartman
Bachi hat geschrieben:Problem ist beim aktuellen Stand, dass die Matrix (selbst bei sehr kleiner Schrift) über die Seite "hinauswandert".
Mancher Leser Deines Beitrages möchte sich das vielleicht ansehen, braucht dafür aber ein Beispiel, mit welchem sich ein PDF erzeugen lässt. Dazu fehlt leider etwas. Ein Minimalbeispiel könnte helfen, Dir zu helfen.
\begin{tiny}
Kann ich Schriftgrößenumschaltungen auch als Umgebungen verwenden?
Bachi hat geschrieben:a) einen Zeilenumbruch in den Spalten erzeugen kann
\matrix[
   matrix of nodes,
   inner sep=0pt,
   row sep=10pt,
   column sep=15pt,% Vergrößern des Spaltenabstandes
   column 2/.style={text width=2cm}
](m)

Verfasst: Mo 1. Aug 2016, 21:42
von Bachi
Hallo Bartman,

ich habe schon versucht, ein Minimalbeispiel zu erzeugen - eigentlich ist die Tabelle 32 Zeilen lang ...
Aber stimmt, ich hatte Kommandozeilen von begin{document} rausgenommen. Das war wohl nicht die beste Idee ...

Ich habe mir deinen link angesehen bzgl. Schriftgrößenbefehlen
- die Schriftgröße ist nicht das Problem, sondern dass der Text für die Spalten zu lang ist und daher die Matrix über das Blatt raus geht.

Ich suche also noch einem Tipp, wie ich in diese (für mich komplexe) Matrix einen Zeilenumbruch integrieren (oder auch erzwingen) kann.


Ich habe den vollständigen CODE, aus dem (bei mir) direkt ein PDF wird (hoffe es funktioniert bei dir auch)
bei meiner (Eingangs-)Frage korrigiert[/b]

Verfasst: Mo 1. Aug 2016, 23:31
von Bartman
In Deinem Eröffnungsbeitrag fehlen jetzt die Code-Tags für die Hervorhebung des Quelltextes am Anfang und am Ende Deines Beispiels.
Bachi hat geschrieben:die Schriftgröße ist nicht das Problem, sondern dass der Text für die Spalten zu lang ist und daher die Matrix über das Blatt raus geht.
Hast Du das geänderte optionale Argument
column 2/.style={text width=2cm}
des \matrix-Befehls in meinem Beitrag gelesen und in Deinem Beispiel ausprobiert?

Verfasst: Mo 1. Aug 2016, 23:46
von Bachi
Guten Abend Bartman,

ich habe es eben probiert:
folgende Befehle geändert:
\matrix[
          matrix of nodes ,
          inner sep=0pt,
          row sep=10pt,
          column sept=15pt,
          column 2/.style={text width=2cm},
        ](m)
Ergebnis:
! Package pgfkeys Error: I do not know the key '/tikz/column sept', to which yo
u passed '15pt', and I am going to ignore it. Perhaps you misspelled it.

See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.

Hast du noch einen anderen Tipp für mich?
Ich probiere alles aus, was du mir schreibst ;-)

Zu Deiner Anmerkung:
In Deinem Eröffnungsbeitrag fehlen jetzt die Code-Tags für die Hervorhebung des Quelltextes am Anfang und am Ende Deines Beispiels.
--> Ich schreibe das sofort hier rein, wenn du mir verrätst, was ein Code-Tag ist .... :-|

Verfasst: Mo 1. Aug 2016, 23:53
von Bartman
column sept=15pt,
Siehst Du den Tippfehler?

Verfasst: Di 2. Aug 2016, 00:02
von Bachi
:roll: ja - wer tippen kann ist klar im Vorteil ;-)

Also 1 Schritt funktioniert, die Spalte 2 kann ich so verkleinern und damit entsteht der Zeilenumbruch = Jippi!.

Mein Problem bleiben leider die Spalten 3-7, die gehen leider immer noch über das Blatt hinaus.

Hast du noch einen Tipp für mich!

Verfasst: Di 2. Aug 2016, 00:11
von Bartman
Bachi hat geschrieben:Mein Problem bleiben leider die Spalten 3-7, die gehen leider immer noch über das Blatt hinaus.
Abschnitt 20.3.3 in der Dokumentation des Pakets tikz.
column 2/.style={text width=2cm},
Die Zahl 2 steht für die zweite Spalte in der Matrix. Was schließt Du daraus?

Ich habe es zwar nicht getestet, aber ich vermute, die vielen geschweiften Klammern in Deiner Matrix werden nicht gebraucht.

Verfasst: Di 2. Aug 2016, 09:43
von Bachi
Lieber Bartman,

IT WORKS! *YES! - cool*
\matrix[
matrix of nodes ,
inner sep=0pt,
row sep=10pt,
column sep=15pt,
column 2/.style={text width=3cm}, 
column 3/.style={text width=1.5cm}, 
column 4/.style={text width=1.5cm}, 
column 5/.style={text width=1.5cm}, 
column 6/.style={text width=1.5cm}, 
column 7/.style={text width=1.5cm}, 
](m)
Du hast mir mega geholfen - hab vielen Dank!

Ob es die vielen geschweiften Klammern in meiner Matrix braucht?
Das weiß ich ehrlich gesagt nicht. Ich bin blutiger Latex-Anfänger für meine Bachelorarbeit und hab dafür echt irre viel über Latex gelernt und bin sehr vom dem Programm begeistert.
Die Kommandozeilen für den Morphologische Kasten hab ich im Netz gefunden und dann weiter daran gebastelt, dass er für meine Darstellung passt - nur an der Spaltenbreite bin ich gescheitert ...
Selbst erstellen könnte ich diese Matrix aber wohl nicht ...

Herzliche Grüße!

Verfasst: Di 2. Aug 2016, 13:03
von Stefan Kottwitz
>> In Deinem Eröffnungsbeitrag fehlen jetzt die Code-Tags für die Hervorhebung
>> des Quelltextes am Anfang und am Ende Deines Beispiels.
>Ich schreibe das sofort hier rein, wenn du mir verrätst, was ein Code-Tag ist .... :-|

Man schreibt [CODE] an den Beginn der Codezeilen und [/CODE] an das Ende. Es gibt auch einen "Schalter" über dem Eingabefeld, ganz oben unter dem Titelfeld, mit der Aufschrift "Code". Den kann man zum Öffnen und Schließen einer Code-Umgebung anklicken. Ich habe das mal für Deinen Beitrag oben gemacht, sieh es als Info zum nächsten Mal. Code wird dadurch lesbarer und kann sogar direkt im LaTeX Online-Editor ausgeführt werden.

Stefan