2
1

Ich möchte einen neuen Befehl mit \newcommand erstellen. Dieser soll in einer tikzpicture Umgebung verwendet werden. Wenn ich den Code unten Erstellen möchte bekomme ich folgende Fehlermeldung:

Package pgfkeys Error: I do not know the key '/tikz/below of=node1' and I am going to ignore it. Perhaps you misspelled it. ...artstop{node2}{Textinhalt}{below of=node1}

Open in Online-Editor
\documentclass{standalone}
\pagestyle{empty}

\usepackage[utf8]{inputenc}
\usepackage{tikz}

\tikzstyle{startstop} = [ % Start Stop Shape
    rectangle, rounded corners,
    minimum width=3cm, minimum height=1cm,
    text centered, text width=3cm,
    draw=black, fill=red!30
    ]

\newcommand{\startstop}[3]{\node ({#1}) [startstop, {#3}] {#2};}

\begin{document}
    \begin{tikzpicture}[node distance=2cm, auto]    
        \node (node0) [startstop] {Start};
        \node (node1) [startstop, below of=node0] {Text};   
        \startstop{node2}{Textinhalt}{below of=node1}   
    \end{tikzpicture}
\end{document}

Wenn ich als 3. Argument meinem Befehl nur ein Wort übergebe funktioniert der Befehl einwandfrei. Wie kann ich meinen Befehl ändern, sodass ich ihn wie unten benutzen kann?

gefragt 29 Mai '16, 16:58

raccoon's gravatar image

raccoon
2612
Akzeptiert-Rate: 0%

bearbeitet 31 Mai '16, 07:36

saputello's gravatar image

saputello
11.1k154365


Lasse die Klammern um das dritte Argument weg:

Open in Online-Editor
\newcommand{\startstop}[3]{\node ({#1}) [startstop, #3] {#2};}

Ich würde außerdem den Stil mit \tikzset definieren. \tikzstyle gilt offiziell als veraltet.

Open in Online-Editor
\documentclass{standalone}
\pagestyle{empty}

\usepackage[utf8]{inputenc}
\usepackage{tikz}

\tikzset{
  startstop/.style = { % Start Stop Shape
    rectangle, rounded corners,
    minimum width=3cm, minimum height=1cm,
    text centered, text width=3cm,
    draw=black, fill=red!30
  }
}

\newcommand{\startstop}[3]{\node ({#1}) [startstop, #3] {#2};}

\begin{document}
    \begin{tikzpicture}[node distance=2cm, auto]    
        \node (node0) [startstop] {Start};
        \node (node1) [startstop, below of=node0] {Text};   
        \startstop{node2}{Textinhalt}{below of=node1}   
    \end{tikzpicture}
\end{document}

Anmerkung: mit der jetzigen Definition

Open in Online-Editor
\newcommand{\startstop}[3]{\node ({#1}) [startstop, #3] {#2};}

kann man nicht mehr ohne weiteres eckige Klammern in #3 verwenden. Eine bessere Definition wäre daher

Open in Online-Editor
\newcommand{\startstop}[3]{\node ({#1}) [{startstop, #3}] {#2};}

Beim Auslesen des Arguments, das der eckigen Klammer folgt wird im Prozess dann dieses äußere Paar eckiger Klammern entfernt. Danke an @saputello für den Hinweis.

Permanenter link

beantwortet 29 Mai '16, 17:02

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 30 Mai '16, 11:40

Vielen Dank für die schnelle Hilfe!

(29 Mai '16, 17:04) raccoon
1

Dann muss man aber wissen, dass das dritte Argument als optionales Argument verwendet wird und eckige Klammern darin Probleme bereiten. Kann man durch \newcommand{\startstop}[3]{\node ({#1}) [{startstop, #3}] {#2};} vermeiden, also indem man startstop, mit in die geschweiften Klammern nimmt. Alternativ könnte man auch das Leerzeichen weglassen: \newcommand{\startstop}[3]{\node ({#1}) [startstop,{#3}] {#2};} Dieses wird nämlich durch die Klammern signifikant. Das hat aber den Nachteil, dass man nicht mehrere Optionen als drittes Argument angeben kann. Deshalb besser die andere Lösung.

(30 Mai '16, 08:52) saputello

@saputello Danke für Dein scharfes Auge! :) Ich hab die Antwort um einen Hinweis ergänzt.

(30 Mai '16, 11:40) cgnieder

@saputello, clemens: Vorschlag wegen der eckigen Klammern: \newcommand{\startstop}[3]{\node ({#1}) [startstop, style={#3}] {#2};}

(30 Mai '16, 23:24) Qrrbrbirlbel
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
×13
×13

gestellte Frage: 29 Mai '16, 16:58

Frage wurde gesehen: 7,873 Mal

zuletzt geändert: 31 Mai '16, 07:36