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, 10:58

raccoon's gravatar image

raccoon
261
Akzeptiert: 100%

bearbeitet 31 Mai, 01:36

saputello's gravatar image

saputello
18.4k22352


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, 11:02

Clemens's gravatar image

Clemens
19.0k113060

bearbeitet 30 Mai, 05:40

Vielen Dank für die schnelle Hilfe!

(29 Mai, 11: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, 02:52) saputello

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

(30 Mai, 05:40) Clemens

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

(30 Mai, 17:24) Qrrbrbirlbel
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×10
×6
×6

Frage gestellt: 29 Mai, 10:58

Frage wurde angeschaut: 497 Mal

Zuletzt aktualisiert: 31 Mai, 01:36