Seite 1 von 1

Tikz-Grafik wird nicht erstellt /syntex.gz(busy)

Verfasst: Mo 24. Aug 2015, 19:34
von Arjen
Guten Abend in die Runde,

ich fange gerade an mit Flowcharts und Tikz. Leider dauert, das compilen sehr lange bzw. es wird überhaupt keine pdf-Datei erstellt.


Datei.synctex.gz(busy) wird aber erstellt.


Anbei der Code

%
\documentclass{article} 
\usepackage[utf8]{inputenc} 
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{decision} = [diamond, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{arrow} = [thick,->,>=stealth]

\begin{document} 
	\begin{tikzpicture}[auto, node distance=4cm,>=latex']
	\node(start)[startstop]{Start};
	\draw [arrow] (start) -- (in1)
	\node (in1) [process, right of=start] {Input};
	\node (pro1) [process, right of=in1] {Process 1};
	\node (pro2) [process, below of=pro1] {Kicker};
	\node (arjen) [process, above of=pro2] { 2};
	\node (pro3) [process, left of=pro2] {DC};
	\node (pro5) [io, above of=pro3,yshift=-2cm] {das};
	\node (pro4) [decision, left of=pro3] {AR};
	\end{tikzpicture}
\end{document}  


Danke.

Gruß,

Arjen

Verfasst: Mo 24. Aug 2015, 19:41
von Noch so einer
Ich bekomme da die Fehlermeldung
! Package pgf Error: No shape named in1 is known.

See the pgf package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.14    \draw [arrow] (start) -- (in1)
Außerdem dürfte am Ende der Zeile ein Semikolon fehlen, wenn ich mich nicht irre. Wobei mir nicht wirklich klar ist, worauf das hinaus laufen soll.

Verfasst: Mo 24. Aug 2015, 19:46
von u_fischer
Du darfst Fehlermeldungen nicht ignorieren (bzw. wenn du sie nicht siehst, dann solltest du anders kompilieren, z.B. auf der Eingabeaufforderung.

Deinem \draw [arrow] (start) -- (in1); fehlt das schließende Semikolon. Außerdem kommt es zu früh, in1 ist noch gar nicht definiert.

Verfasst: Mo 24. Aug 2015, 20:00
von Besserwisser
Erst die nodes definieren, dann die Verbindungen zeichnen:
\documentclass{article} 
\usepackage[utf8]{inputenc} 
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{decision} = [diamond, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{arrow} = [thick,->,>=stealth]

\begin{document} 
   \begin{tikzpicture}[auto, node distance=4cm,>=latex']
   \node(start)[startstop]{Start};
   \node (in1) [process, right of=start] {Input};
   \node (pro1) [process, right of=in1] {Process 1};
   \node (pro2) [process, below of=pro1] {Kicker};
   \node (arjen) [process, above of=pro2] { 2};
   \node (pro3) [process, left of=pro2] {DC};
   \node (pro5) [io, above of=pro3,yshift=-2cm] {das};
   \node (pro4) [decision, left of=pro3] {AR};
   \draw [arrow] (start) -- (in1);
\end{tikzpicture}
\end{document}
Ergibt ohne Fehlermeldung bereits nach Sekunden:
Bild

Verfasst: Mo 24. Aug 2015, 20:15
von Stefan Kottwitz
Hallo Arjen!

In dem Beispiel ist manches an Syntax dabei, was sich inzwischen weiterentwickelt hat. Ich gebe das mal als Inspiration an:
  • Nach arrows gibt es jetzt nun auch die arrows.meta-Bibliothek mit sehr vielen Einstell-Möglichkeiten für Pfeilspitzen.
  • Mit der positioning-Bibliothek kann man eine weitere, eher empfohlene Syntax verwenden, in der Weise right = of start, oder noch mehr wie
    above right = 2cm and 3cm of start schreiben.
  • \tikzstyle wird nicht mehr empfohlen und ist daher auch kaum dokumentiert. Es wird empfohlen, je nach Absicht auch Stile lokal zu setzen (als Optionen in eckigen Klammern), für globale Stile gibt es die Syntax \tikzset{name/.style = {...}, ...} u.a. (auch mit append style zum Anhängen), was natürlich nicht einfacher aussieht.
  • Hier haben einige Stile etwas gemeinsam, da könnte man einen Grundstil erstellen und die andern drauf aufbauen lassen. Nur als Idee. Macht gleichzeitige Veränderungen einfacher, man dreht ja doch immer mal hier oder da, bis es perfekt wird.
Stefan

Verfasst: Mo 24. Aug 2015, 20:36
von Stefan Kottwitz
Hallo Arjen,

auch da ich TikZ gern mag, und es super finde, dass Du damit anfängst, zeige ich gern mal ein Beispiel. Ich habe neulich auch einen Flowchart erstellt. Ich gehe ungefähr so vor:
  1. Lade TikZ und Bibliotheken
  2. Definiere Stile
  3. Definiere weitere Makros für sich ähnelnde Sachen
  4. Positioniere Nodes (vorzugsweise einfach als Matrix)
  5. Zeichne Verbindungspfeile (-> oder to oder edge mit node label)
Alle Punkte "leben" natürlich und werden während der Bearbeitung noch ergänzt. Außer Makros verwende ich noch for-Schleifen zur Code-Optimierung.

Ich gebe mal meinen Code an, und danach ein paar Infos. Das Beispiel ist in Englisch, weil ich es für ein englischsprachiges Buch verfasst hatte, als eines von ca. hundert Beispielen darin.
\documentclass{article}
\usepackage[a4paper,vmargin=3cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix,calc,shapes}
\tikzset{
  treenode/.style = {shape=rectangle, rounded corners,
                     draw, anchor=center,
                     text width=5em, align=center,
                     top color=white, bottom color=blue!20,
                     inner sep=1ex},
  decision/.style = {treenode, diamond, inner sep=0pt},
  root/.style     = {treenode, font=\Large, bottom color=red!30},
  env/.style      = {treenode, font=\ttfamily\normalsize},
  finish/.style   = {root, bottom color=green!40}
}
\newcommand{\yes}{edge node [above] {yes}}
\newcommand{\no}{edge  node [left]  {no}}
\begin{document}
\begin{tikzpicture}[-latex]
  \matrix (chart)
    [
      matrix of nodes,
      column sep      = 3em,
      row sep         = 5ex,
      column 1/.style = {nodes={decision}},
      column 2/.style = {nodes={env}}
    ]
    {
      |[root]| Formula           &                \\
      single-line?               & equation       \\
      centered?                  & gather         \\
      aligned at relation sign?  & align, flalign \\
      aligned at several places? & alignat        \\
      first left, centered,
        last right?              & multline       \\
      & & |[decision]| numbered? \\
      & & |[treenode]| Add a \texttt{*} & |[finish]| Done \\
    };
  \draw
    (chart-1-1) edge (chart-2-1)
    \foreach \x/\y in {2/3, 3/4, 4/5, 5/6} {
      (chart-\x-1) \no (chart-\y-1) }
    \foreach \x in {2,...,6} {
       (chart-\x-1) \yes (chart-\x-2) }
   (chart-7-3) \no  (chart-8-3)
   (chart-8-3) edge (chart-8-4);
 \draw
   (chart-6-1) -- +(-2,0) |- (chart-1-1)
     node[near start,sloped,above] {no, reconsider};
  \foreach \x in {2,...,6} {
   \draw (chart-\x-2) -| (chart-7-3);}
 \draw   (chart-7-3)  -| (chart-8-4)
   node[near start,above] {yes}; 
\end{tikzpicture}
\end{document}
Bild
  • Die meisten Chart-Strukturen sind eh rechteckig, da macht eine Matrix das Positionieren einfach. Die Abstände von Zeilen und Spalten kann man immer noch justieren. Einfacher als bei einzeln gesetzten Nodes.
  • Sachen, die sich wiederholen, mache ich in for-Schleifen. Es lohnt sich echt, \foreach mal im TikZ-Handbuch anzusehen. Das kannst Du auf der Kommandozeile (Terminal-Fenster oder cmd auf Windows) mit texdoc tikz aufrufen, oder online hier: TikZ.
  • Ansonsten mache ich mir gern weitere Makros. Dann braucht man nur an einer Stelle zu ändern, alles passt sich an. Gilt auch für wie oben vererbte Stile.
Stefan

Verfasst: Mo 24. Aug 2015, 22:41
von Arjen
Super, danke für die ganzen Vorschläge :D


Gruß,

Arjen