Seite 1 von 1

Tikz Objekte ändern

Verfasst: So 17. Mai 2015, 10:27
von dirkst19
Hallo zusammen!

Ich arbeite momentan mit Programmablaufplänen und benutze \tikzstyle
Dort hat man ja vordefinierte Objekte zum Beispiel Kreise, Rechtecke oder Decision-Objekte.

Ich brauche nun aber ein anderes Objekt:

Bild

Kann man das irgendwie definieren und anschließend genauso verwenden, wie die vordefinierten geometrischen Objekte?
%Definition der Blöcke
\tikzstyle{block1} = [rectangle, draw, fill=cyan, 
    text width=9em, text centered, rounded corners, minimum height=4em]
\tikzstyle{line} = [draw, -latex']
\tikzstyle{block2} = [rectangle, draw, fill=green2, 
    text width=9em, text centered, rounded corners, minimum height=4em]
\tikzstyle{block3} = [rectangle, draw, fill=blue, 
    text width=9em, text centered, rounded corners, minimum height=4em]

\begin{figure}[h]
\centering
\label{fig:struktur}

\begin{tikzpicture}[scale=0.4]
    % Place nodes
 
\node [block3] (E) {\textcolor{white}{\textbf{ja}}};
\node [block2, below of =E, node distance=3cm] (D) {\textcolor{white}{\textbf{Auto}}};
%\node [block2, right of =D, node distance=8cm] (I) {\textcolor{white}{\textbf{Düpp}}};
\node [block1, below of =D, node distance=3cm] (IT) {\textcolor{white}{\textbf{Bereich}}};
\node [block1, left of =IT, node distance=4.5cm] (MS) {\textcolor{white}{\textbf{MFS}}};
\node [block1, right of =IT, node distance=4.5cm] (AC) {\textcolor{white}{\textbf{Advancedl}}};

    % Draw edges
   
\path [line] (AC) |- (D);
\path [line] (MS) |- (D);
\path [line] (IKT) -- (D);
%\path [line] (I) -| (D);
\path [line] (D) -- (E);

\end{tikzpicture} 
\end{figure}

Verfasst: So 17. Mai 2015, 11:38
von Stefan Kottwitz
Hi,

sehr gut, dass Du ein Code-Beispiel postest!

Der Code hat dann richtig Wert, wenn man ihn testen kann. Nur beim Draufschauen sieht man meistens nicht schon viel, gerade wenn das Problem nicht simpel ist. Wenn ich den Code oben übersetze, habe ich einen Haufen Probleme:
  • Ich muss selber Dokumentklasse aussuchen und ein Rahmendokument zum Übersetzen bauen.
  • Ich muss TikZ laden (das sehe ich ja noch direkt) und vmtl. Zusatzpakete, wie z.B. für die Umlaute.
  • Ich kriege einen Fehler, weil die Farbe green2 nicht definiert ist. Das muss ich ändern z.B. auf green. Du hast sicher Deine eigene Farbdefinition.
  • Dann der nächste Fehler, weil der Pfeil-Typ -latex' nicht definiert ist. Ich weiß noch, dass ich die arrows-Library dafür brauche, und lade sie mit \usetikzlibrary{arrows}.
  • Dann kommt "Package pgf Error: No shape named IKT is known". Der ist hier im Beispiel weggelassen worden.
An dem Punkt habe ich aufgegeben.

Es wäre schön, wenn Du Deine Fragen mit Code versiehst, der direkt testbar ist, also einem echten Minimalbeispiel. Vielleicht haben 10 weitere Leser das schon wie ich versucht und es dann gelassen - viel unnötige Arbeit. Besser wäre, ein lauffähiges kleines Beispiel anzugeben und vor dem Posten kurz zu testen. Ein wenig mehr Mühe in die Frage investiert und es den Helfern leichter gemacht, ist meist die Garantie für eine Lösung.

Stefan

Verfasst: So 17. Mai 2015, 11:55
von Stefan Kottwitz
Übrigens ist es nicht mehr empfohlen, \tikzstyle zu verwenden. Stattdessen sollte man Stile lokal setzen in eckigen Klammern an TikZ-Umgebungen oder Scopes, oder man verwendet \tikzset dafür. Bei Deinem Beispiel wäre das etwa so umgeschrieben:
\tikzset{
  block1/.style = {rectangle, draw, fill=cyan, 
    text width=9em, text centered, rounded corners, minimum height=4em},
  block2/.style = {rectangle, draw, fill=green, 
    text width=9em, text centered, rounded corners, minimum height=4em},
  block3/.style = {rectangle, draw, fill=blue, 
    text width=9em, text centered, rounded corners, minimum height=4em},
  line/.style = {draw, -latex'},
}
Man kann Stile auch verknüpfen, das macht es übersichtlicher, und das Verändern einfacher, man braucht nur an einer Stelle etwas anzupassen, und die Stile, die erben, passen sich mit an - nicht etwa jeden Block einzeln analog ändern zu müssen:
\tikzset{
  block/.style  = {rectangle, draw, text width=9em, text centered,
                   rounded corners, minimum height=4em},
  block1/.style = {block, fill=cyan},
  block2/.style = {block, fill=green},
  block3/.style = {block, fill=blue},
  line/.style     = {draw, -latex'},
}
Definitionen anderer bzw. eigener solcher Objekte habe ich übrigens schon in unserem Partnerforum TeXwelt.de gesehen - TikZ ist dort das vielleicht beliebteste Thema, jedenfalls mit den meisten Fragen und Antworten. Ich tippe mal drauf, man könnte einen shape definieren, es aber noch einfacher mit pic machen.

Stefan

Verfasst: So 17. Mai 2015, 13:35
von esdd
Such mal im pgfmanual nach der Knotenform signal.

Gruß
Elke

Edit: Hier ist noch ein kurzes Beispiel, aber beachte unbedingt die Hinweise von Stefan.
\documentclass[tikz,margin=10pt]{standalone}
\usetikzlibrary{shapes.symbols}
\begin{document}
\tikz\node[
    signal,signal to = east,
    fill=blue!80!black!40,draw=blue!70!black,
    text width=6em,align=center,
    font=\color{white}\bfseries,
    minimum height=4em
  ]{MWE?};
\end{document}
Bild