Hallo zusammen, ich erstelle mir für jedes Bild eine tex datei in der ich das tikz Bild erstelle (siehe Code unten). Diesen binde ich dann über den Befehl input im Hauptfile in einer figure Umgebung ein. Dies funktioniert soweit ganz gut. Jetzt habe ich das Problem sobald ich zwei Ablaufdiagramme einbinde bekomme ich die Fehlermeldung im zweiten Bild undefinied control sequenz. Das Problem taucht auch auf wen ich beides mal das gleiche Bild laden möchte. Wenn ich dies nur einmal mache klappt es.

Öffne in Overleaf
\usepackage{tikz}
\usetikzlibrary{positioning,calc,shapes,arrows,shapes.multipart}
% Define block styles
\tikzset{
    pap/.style={
        draw,
        minimum height=7mm,
        font=\ttfamily\footnotesize,
        align=flush center,
        on grid
    },
    papDecision/.style = {
        diamond,
        draw, 
        text width = 20 mm, 
        align = center, 
        text badly centered,
        inner sep = 1 pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papStart/.style = {
        rectangle,
        draw, 
        align = center, 
        text width = 3cm, 
        text badly centered,
        inner sep = 4 pt,
        rounded corners=10pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papEnd/.style = {
        rectangle,
        draw, 
        align = center, 
        text width = 3cm, 
        text badly centered,
        inner sep = 4 pt,
        rounded corners=10pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papData/.style = {
        trapezium,
        draw, 
        align = center, 
        text width = 20 mm, 
        text badly centered,
        inner sep = 4 pt,
        trapezium left angle=70,
        trapezium right angle=110,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papPredProc/.style = {
        draw,
        rectangle split,
        rectangle split horizontal,
        rectangle split parts = 3,
        rectangle split empty part width=-8pt,
        align = center, 
        %       text width = 4.5 em, 
        text badly centered,
        %        inner sep = 4 pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papProcess/.style = {
        rectangle,
        draw,
        align = center, 
        text width = 3cm, 
        text badly centered,
        %inner sep = 2 pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papLine/.style = {
        draw,
        -stealth,
        font=\ttfamily\footnotesize,
        %line width = 1,
    },
}

\newcommand{\papYes}{ja}
\newcommand{\papNo}{nein}

\begin{tikzpicture}[node distance = 2cm, auto]

% Place nodes
\node [papStart] (Start1){Start};
\node [papProcess, below of = Start1,yshift= 2mm] (pro4){funktion6};

\node [papDecision, below of = pro4, yshift= -20mm] (dec2){test};

\node [papPredProc,  right of = dec2,xshift=25mm] (predproc2){\nodepart{two}\shortstack{funktion5}};
\node [papPredProc, below of = dec2,yshift= -10mm] (predproc3){\nodepart{two}\shortstack{funktion4}};
\node [papDecision, below of = predproc3, yshift= -20mm](dec3){Anzahl m?};

\node [papPredProc, below of = dec3, xshift=-25mm, yshift= -20mm](predproc4){\nodepart{two}\shortstack{funktion1}};
\node [papPredProc, below of = dec3, yshift= -20mm](predproc5){\nodepart{two}\shortstack{funktion2}};
\node [papPredProc, below of = dec3, xshift=26mm, yshift= -20mm](predproc6){\nodepart{two}\shortstack{funktion3}};
\node [papEnd, below of = predproc5, yshift= -20mm] (End) {Ende};

% Draw edges
\path [papLine] (Start1) -- (pro4);
\path [papLine] (pro4) -- (dec2);
\path [papLine] (dec2) -- node [above] {\papYes} (predproc2);
\path [papLine] (dec2) -- node [right] {\papNo} (predproc3);
\path [papLine] (predproc3) -- (dec3);
\path [papLine] (dec3) -- node [right] {m = 1} (predproc4);
\path [papLine] (dec3) -- node [right] {m = 2} (predproc5);
\path [papLine] (dec3) -- node [right] {m < 2} (predproc6);

\path [papLine] (predproc4) -- (End);
\path [papLine] (predproc5) -- (End);
\path [papLine] (predproc6) -- (End);

\end{tikzpicture}

gefragt 08 Feb '19, 16:05

Stromp%C3%A4dagoge's gravatar image

Strompädagoge
5126
Akzeptiert-Rate: 0%

2

\usepackage und \usetikzlibrary funktionieren nicht in einer figure-Umgebung, sondern gehören einmalig in die Dokumentpräambel. Dieselbe \newcommand-Anweisung kann man zwar ggf. tatsächlich mehrfach in unterschiedlichen figure-Umgebungen verwenden, aber natürlich nur, wenn die dadurch definierten Anweisungen nicht bereits außerhalb der figure-Umgebung definiert sind. Die unvollständig angegebene Fehlermeldung kann ich dagegen nicht nachvollziehen, daher …

(08 Feb '19, 16:22) saputello
2

Könntest Du bitte ein Minimalbeispiel einfügen? Also ein möglichst kurzes, aber komplettes Dokument, von \documentclass{...} bis zu \end{document}, was das Problem zeigt. Würdest Du bitte außerdem Fehlermeldungen wörtlich als Code-Block aus der log-Datei zitieren? Das vereinfacht die Bearbeitung erheblich und ist meist eine Garantie für eine Lösung.

(08 Feb '19, 16:22) saputello

Mir scheint, hier sollen irgendwelche Unterdateien mit Graphiken in ein Hauptdokument eingebunden werden. Das hätte ich vermutlich komplett mit \uspackage{standalone} gemacht. So wie hier: https://texwelt.de/wissen/fragen/23094/standalonesty-wie-kann-ich-von-einem-hauptdokument-auf-ein-unterdokument-einwirken/23104

(11 Feb '19, 18:41) cis

Das hat den Vorteil, dass man Inhalte separat als Unterdokumente erstellen und bearbeiten kann und die dann (ohne großartige Änderungen am Dokumentrahmen) mit \includestandalone einfügen kann. Aber mangels eines Minimalbeispiels habe ich mich jetzt nicht weiter damit beschäftigt...

Allerdings kannte ich subfiles.sty (aus der Antwort) nicht; und weiß nicht, ob das Paket nochmal anderes kann oder macht.

(11 Feb '19, 18:41) cis

Davon abgesehen, dass ich mit deinem Codeschnipsel das Problem selbst leider nicht nachvollziehen kann, sei ein etwas anderes Vorgehen vorgeschlagen:

Das Paket subfiles bietet die Möglichkeit, Unterdokumente zu einem Hauptdokument zu erstellen, die selbst ebenfalls als eigenständige Dokumente verarbeitet werden können, solange das Hauptdokument verfügbar ist. Dabei wird nämlich die Dokumentpräambel des Hauptdokuments automatisch auch von den Unterdokumenten mit verarbeitet. Damit das ganze funktioniert, wird im Hauptdokument lediglich das Paket subfiles per \usepackage{subfiles} geladen. Im Hauptdokument wird das Unterdokument per Anweisung \subfile geladen. Das Unterdokument verwendet als Klasse subfiles. Als Option wird bei \documentclass[…]{subfiles} der Name des Hauptdokuments angegeben. Wird das Unterdokument alleine verarbeitet, so liest die Klasse subfiles die Dokumentpräambel des Hauptdokuments einschließlich der dortigen Klasse. Wird es dagegen per \subfile im Hauptdokument geladen, so wird alles bis zum \begin{document} des Unterdokuments, also die gesamte Dokumentpräambel des Unterdokuments ignoriert.

Beispiel (abgeleitet von deinem leider unvollständigen und trotzdem sehr großen Codeschnipsel): Wir erstellen zunächst das Hauptdokument mit dem Dateinamen test-subfiles.tex:

Öffne in Overleaf
\documentclass[DIV=12]{scrartcl}
\usepackage{subfiles}
\usepackage{tikz}
\usetikzlibrary{positioning,calc,shapes,arrows,shapes.multipart}
% Define block styles
\tikzset{
    pap/.style={
        draw,
        minimum height=7mm,
        font=\ttfamily\footnotesize,
        align=flush center,
        on grid
    },
    papDecision/.style = {
        diamond,
        draw, 
        text width = 20 mm, 
        align = center, 
        text badly centered,
        inner sep = 1 pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papStart/.style = {
        rectangle,
        draw, 
        align = center, 
        text width = 3cm, 
        text badly centered,
        inner sep = 4 pt,
        rounded corners=10pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papEnd/.style = {
        rectangle,
        draw, 
        align = center, 
        text width = 3cm, 
        text badly centered,
        inner sep = 4 pt,
        rounded corners=10pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papData/.style = {
        trapezium,
        draw, 
        align = center, 
        text width = 20 mm, 
        text badly centered,
        inner sep = 4 pt,
        trapezium left angle=70,
        trapezium right angle=110,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papPredProc/.style = {
        draw,
        rectangle split,
        rectangle split horizontal,
        rectangle split parts = 3,
        rectangle split empty part width=-8pt,
        align = center, 
        %       text width = 4.5 em, 
        text badly centered,
        %        inner sep = 4 pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papProcess/.style = {
        rectangle,
        draw,
        align = center, 
        text width = 3cm, 
        text badly centered,
        %inner sep = 2 pt,
        font=\ttfamily\footnotesize,
        %line width = 1,
        minimum width = 30mm,
        minimum height = 7mm,
    },
    papLine/.style = {
        draw,
        -stealth,
        font=\ttfamily\footnotesize,
        %line width = 1,
    },
}

\newcommand{\papYes}{ja}
\newcommand{\papNo}{nein}

\begin{document}
\begin{figure}
  \centering
  \subfile{test-subfiles-sub.tex}
  \caption{Die Abbildung zum ersten Mal}
\end{figure}

\begin{figure}
  \centering
  \subfile{test-subfiles-sub.tex}
  \caption{Die Abbildung zum zweiten Mal}
\end{figure}
\end{document}

Wie zu sehen ist, habe ich das Laden von TikZ, dessen Bibliotheken, dessen Einstellungen, sowie alle Definitionen in die Dokumentpräambel dieses Hauptdokuments gesteckt. (Der unschöne Wert für Option DIV war leider notwendig, um die Abbildungen auf eine Seite zu bekommen. Normalerweise würde ich diesen Wert nicht empfehlen.)

Als nächstes folgt das Unterdokument test-subfiles-sub.tex:

Öffne in Overleaf
\documentclass[test-subfiles.tex]{subfiles}
\begin{document}
\begin{tikzpicture}[node distance = 2cm, auto]

% Place nodes
\node [papStart] (Start1){Start};
\node [papProcess, below of = Start1,yshift= 2mm] (pro4){funktion6};

\node [papDecision, below of = pro4, yshift= -20mm] (dec2){test};

\node [papPredProc,  right of = dec2,xshift=25mm] (predproc2){\nodepart{two}\shortstack{funktion5}};
\node [papPredProc, below of = dec2,yshift= -10mm] (predproc3){\nodepart{two}\shortstack{funktion4}};
\node [papDecision, below of = predproc3, yshift= -20mm](dec3){Anzahl m?};

\node [papPredProc, below of = dec3, xshift=-25mm, yshift= -20mm](predproc4){\nodepart{two}\shortstack{funktion1}};
\node [papPredProc, below of = dec3, yshift= -20mm](predproc5){\nodepart{two}\shortstack{funktion2}};
\node [papPredProc, below of = dec3, xshift=26mm, yshift= -20mm](predproc6){\nodepart{two}\shortstack{funktion3}};
\node [papEnd, below of = predproc5, yshift= -20mm] (End) {Ende};

% Draw edges
\path [papLine] (Start1) -- (pro4);
\path [papLine] (pro4) -- (dec2);
\path [papLine] (dec2) -- node [above] {\papYes} (predproc2);
\path [papLine] (dec2) -- node [right] {\papNo} (predproc3);
\path [papLine] (predproc3) -- (dec3);
\path [papLine] (dec3) -- node [right] {m = 1} (predproc4);
\path [papLine] (dec3) -- node [right] {m = 2} (predproc5);
\path [papLine] (dec3) -- node [right] {m < 2} (predproc6);

\path [papLine] (predproc4) -- (End);
\path [papLine] (predproc5) -- (End);
\path [papLine] (predproc6) -- (End);

\end{tikzpicture}
\end{document}

Führe ich nun für das Unterdokument test-subfiles-sub.tex einen LaTeX-Lauf durch, so erhalte ich:

klzzwxh:0014

Führe ich hingegen für das Hauptdokument test-subfiles.tex einen LaTeX-Lauf durch, so erhalte ich ein Dokument mit zwei Seiten:

klzzwxh:0018

Fehlermeldungen treten in beiden Fällen nicht auf. Trotzdem sei darauf hingewiesen, dass das Paket subfiles auch Grenzen hat. So funktionierten frühere Versionen davon nicht gut mit beamer. Dafür hat das Paket den Vorteil, dass die Einstellungen des Hauptdokuments beispielsweise bezüglich der Schriftwahl und der Größe des Satzspiegels oder auch bezüglich definierter Farben automatisch übernommen werden, so dass hier Übertragungsfehler unwahrscheinlich sind.

Als alternatives Vorgehen wäre außerdem denkbar, dass man die Abbildungen generell mit Hilfe von standalone als externes Dokument erzeugt. Dann besteht die Möglichkeit im Hauptdokument gar nicht mehr den TikZ-Code der jeweiligen Abbildung zu laden, sondern mit \includestandalone das PDF der externen Abbildung. Dabei muss man dann jedoch selbst Sorge dafür tragen, einheitliche Einstellungen bezüglich Fonts etc. aus dem Hauptdokument in die Abbildungen zu übernehmen. Dazu kann man solche Einstellungen beispielsweise in einer eigene Datei auslagern, die man dann sowohl in der Dokumentpräambel des Hautdokuments lädt als auch in der Dokumentpräambel der Bilddokumente. Hier besteht natürlich immer die Gefahr, dass man eine wichtige Einstellung vergisst. Außerdem muss man einen Build-Prozess etablieren, der dafür sorgt, dass alle Bilder erzeugt werden, bevor diese im Hauptdokument geladen werden. Aktiviert man -shell-escape, geschieht das auch automatisch, wenn man Option mode entsprechend setzt (siehe dazu die Anleitung zu Paket standalone. Dafür kann man auf diesem Weg sogar Abbildungen in das Hauptdokument einbinden, die mit unverträglichen Paketen erstellt wurden.

Wie gesagt: Ich kann das angedeutete Problem mit deinem Code nicht nachvollziehen. Daher sei auch für den Fall, dass diese Antwort das Problem löst, darum gebeten, die Frage trotzdem für andere Hilfesuchende nachvollziehbar zu machen.

Permanenter link

beantwortet 10 Feb '19, 14:51

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 13 Feb '19, 12:01

Danke. Das hat ja schon geholfen. Es lag am usetikzlibrary. Das hat bei erneutem aufrufen zur Fehlermeldung geführt.

Die Idee über usepackage{subfiles} istnatürlich elegant und wurde dementsprechend angepasst.

Herzlichen Dank!!

(11 Feb '19, 10:42) Strompädagoge
1

Bitte nicht das Antwortfeld für einen Danke-Kommentar missbrauchen! Wichtige Informationen (wie ein echtes Minimalbeispiel) bitte in die Frage einfügen!

(11 Feb '19, 11:19) saputello

@Strompädagoge Ich habe Deine "Antwort" in einen Kommentar umgewandelt. Du kannst gern stets direkt die Frage editieren und Zusätze einfügen. Hier sind Antworten stets "echte" Antworten, keine Gespräche oder Rückfragen oder Zusatzinfos, sondern Lösungen. Editieren der Frage ist jederzeit möglich und erwünscht. Das verbessert die Übersicht erheblich für die Archivierung der Lösungen. Ungewohnt und anders als in Webforen, doch innovativ und nutzbarer. Bemerkungen gern wie hier als Kommentare.

(12 Feb '19, 07:53) gast3
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×28

gestellte Frage: 08 Feb '19, 16:05

Frage wurde gesehen: 4,085 Mal

zuletzt geändert: 13 Feb '19, 12:03