PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umgebung bei newcommand



atero
07-11-2009, 13:23
Hi,

ich möchte gerne Knoten mit tikz zeichnen und verwende hierzu diesen Befehl:

\begin{tikzpicture}
\draw (0,0) node[fill,circle,inner sep=0pt,minimum size = 2mm] (meinLabel1) {};
\draw (1,1) node[fill,circle,inner sep=0pt,minimum size = 2mm] (meinLabel2) {};
\end{tikzpicture}
Die draw-Befehle würde ich gerne abkürzen:

\newcommand{\myNode}[3]{\draw ( {#1} ,{#2} ) node[fill,circle,inner sep=0pt,minimum size = 2mm] ({#3}) {}; }


\begin{tikzpicture}
\myNode (0,0, meinLabel1);
\myNode (1,1, meinLabel2);
\end{tikzpicture}

Hier bekomme ich aber die Fehlermeldung "Extra } or forgotten \endgroup". Ich vermute das Problem ist, dass bei der newcommand-Definition die tikzpicture-Umgebung fehlt. Im myNode-Kommando für jeden Node eine eigene tikzpicture Umgebung erstellen geht denke ich nicht, da ja auch Kanten zwischen den Knoten gezogen werden sollen. Hat jemand eine Idee ob/wie man dieses Problem lösen kann?

Gruß und vielen Dank
atero

u_fischer
07-11-2009, 15:44
Du definierst einen Befehl mit 3 Argumenten. Also musst du auch 3 Argumente angeben:


\documentclass{article}
\usepackage{tikz}

\begin{document}
\newcommand{\myNode}[3]{\draw (#1,#2) node[fill,circle,inner sep=0pt,minimum size = 2mm] (#3) {}; }
\begin{tikzpicture}
\myNode{0}{0}{meinLabel1};
\myNode {1}{1}{meinLabel2};
\end{tikzpicture}


\end{document}

atero
07-11-2009, 18:10
auf die Idee, dass es daran liegen könnte bin ich gar nicht gekommen :o
[zu meiner Verteidigung: alle Beispiele die ich gesehen habe waren nur mit einem Parameter und die Fehlermeldung war auch nicht so richtig hilfreich]

Vielen Dank!!

atero
07-11-2009, 20:10
für die Zahlen 0 bis 9 klappt das Ganze jetzt wunderbar, nur Kommazahlen, negative Zahlen und Zahlen größer 9 gehen nicht. Hat mir hierzu vielleicht auch noch jemand einen Tipp?

rais
08-11-2009, 11:03
Moin moin,

für die Zahlen 0 bis 9 klappt das Ganze jetzt wunderbar, nur Kommazahlen, negative Zahlen und Zahlen größer 9 gehen nicht.
nunja, da das Komma im verwendeten \draw-Befehl zur Parametertrennung dient, nimmste besser Punkt statt Komma ... oder wie würdest Du so etwas deuten: \draw(1,2,3)? x=1,2 und y=3 oder x=1 und y=2,3?
Ggf. hilft Dir auch, die ersten beiden Parameter zusammenzufassen, etwa


\newcommand{\myNodeii}[2]{\draw (#1) node[fill,circle,inner sep=0pt,minimum size = 2mm] (#2) {}; }

dann heißt es halt


\myNodeii{1.25,5.1}{foo};

Zu Deinen Werten <0 bzw. >9: achte ggf. darauf, daß dieser Wert auch noch auf Deinem Papier landet.
Ansonsten: siehe http://www.minimalbeispiel.de.

MfG

atero
09-11-2009, 00:30
danke für den Hinweis, aber um die Dezimalstellen abzutrennen hatte ich schon einen Punkt verwendet (auch wenn ich es Kommazahl genannt habe) ;)
Das mit dem Parameter zusammenfassen ist eine gute Idee.

Mein Problem habe ich inzwischen auch gelöst:

So sah mein Kommando aus:

\newcommand{\myNode}[3]{\draw ( #1 ,#2 ) node[fill,circle,inner
sep=0pt,minimum size = 2mm] (#3) {}; }
und es hat nicht funktioniert.
Dann habe ich es mit dem Code von u_fischer probiert:

\newcommand{\myNode}[3]{\draw (#1,#2) node[fill,circle,inner sep=0pt,minimum size = 2mm] (#3) {}; }
So funktioniert es, keine Ahnung warum. Habs gerade bei einem Minimalbeispiel getestet, da gingen beide. Naja, hauptsache es funktioniert. Vielen Dank für eure Hilfe!