Wie verweise ich auf die in einem „newcommand“ definierten Argumente?

Wie verweise ich auf die in einem „newcommand“ definierten Argumente?

Was mache ich:
Ich möchte ein Bild zeichnen (wie unten gezeigt), um die Kontraktion einiger Intervalle zu Knoten in einer Linie zu veranschaulichen.
Intervalle

Zuerst definiere ich ein newcommandIntervall (also \op) mit drei Argumenten: Startpunkt, Endpunkt und Name. Dann wird eine Linie (oder eine Kette) gezeichnet. Schließlich werden das Intervall und der entsprechende Knoten in der Linie verbunden. Der gesamte Code lautet: (Notiz:Sie können den freigegebenen Code auch unterGemeinsam genutztes Latexbevor eine Antwort akzeptiert wird.)

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usetikzlibrary{calc, chains}

\title{Reference Arguments in Newcommand}
\author{hengxin}
\date{31 December 2013}

\begin{document}
\begin{tikzpicture}[]

% new command: inverval
\newcommand{\op}[3] % #1: start point; #2: end point; #3: interval name
{
  \coordinate (start) at #1;    % start point
  \coordinate (end) at #2;  % end point
  \coordinate (mid) at ($0.5*#1 + 0.5*#2 + (0,0.8cm)$);

  \draw[ultra thick, blue, |-|] (start) -- (end); % draw the interval
  \node (#3) [font = \huge] at (mid) {#3};  % attach the operation name
}

% define three intervals
\op{(0,2)}{(2,2)}{$a$};
\op{(4,3)}{(6,3)}{$b$};
\op{(7,2)}{(10,2)}{$c$};

% contract them into single nodes in a line (or a chain)
\begin{scope}[font = \huge, start chain = schedule, node distance = 3.0cm, every     join/.style = {very thick, ->, red}]
  \foreach \opi in {a, b, c}
    \node (\opi) [circle, draw, on chain, join, label = {[] below : $\opi$}] {};
\end{scope}

% connect interval and its corresponding node in the line
\begin{scope}[cedge/.style = {->, dashed, draw, thick}]
  \draw [cedge] (0,2) to (a);
  \draw [cedge] (2,2) to (a);

  \draw [cedge] (4,3) to (b);
  \draw [cedge] (6,3) to (b);

  \draw [cedge] (7,2) to (c);
  \draw [cedge] (10,2) to (c);
\end{scope}

\end{tikzpicture}
\end{document}

Was ich machen will; was ich vorhabe zu tun:
Wie Sie sehen, habe ich im letzten Schritt (Intervall und entsprechenden Knoten in der Linie verbinden) die Koordinaten der Start- und Endpunkte jedes Intervalls fest codiert, wie \draw [cedge] (0,2) to (a); \draw [cedge] (2,2) to (a);. Das ist sicherlich mühsam und fehleranfällig. Daher

Gibt es für mich eine elegante Möglichkeit, die beiden Punkte (als Argumente von newcommand) jedes Intervalls ohne Festcode zu referenzieren?

Antwort1

Sie können in Ihrem \opBefehl jede Grenze Ihres Intervalls benennen (mit #3als Teil des Namens).

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, chains}
\begin{document}
\begin{tikzpicture}
  % new command: inverval
  \newcommand{\op}[3]{ % #1: start point; #2: end point; #3: operation name
    \coordinate (start #3) at #1;   % start point
    \coordinate (end #3) at #2; % end point

    \draw[ultra thick, blue, |-|] (start #3) -- (end #3) % draw the interval
    node[pos=.5,above=8mm,font=\huge, text=black] {$#3$}; % attach the operation name
  }
  % define three intervals
  \op{(0,2)}{(2,2)}{a};
  \op{(4,3)}{(6,3)}{b};
  \op{(7,2)}{(10,2)}{c};
  % contract them into single nodes in a line (or a chain)
  \begin{scope}[font=\huge, start chain=schedule, node distance=3.0cm,
    every join/.style={very thick, ->, red}]
    \foreach \opi in {a, b, c} {
      \node [circle,draw,on chain,join,label={[]below:$\opi$}] (\opi) {};
    }
  \end{scope}
  % connect interval and its corresponding node in the line
  \begin{scope}[cedge/.style = {->, dashed, draw, thick}]
    \foreach \interval in {a,b,c}{
      \draw [cedge] (start \interval) to (\interval);
      \draw [cedge] (end \interval) to (\interval);
    }
  \end{scope}
\end{tikzpicture}
\end{document}

verwandte Informationen