¿Cómo hacer referencia a los argumentos definidos en un "nuevo comando"?

¿Cómo hacer referencia a los argumentos definidos en un "nuevo comando"?

Qué estoy haciendo:
Quiero hacer un dibujo (como se muestra a continuación) para ilustrar la contracción de algunos intervalos en nodos en una línea.
Intervalos

Primero, defino un newcommandintervalo for (es decir, \op) con tres argumentos: punto inicial, punto final y el nombre. Luego, se dibuja una línea (o una cadena). Por último, se conectan el intervalo y su correspondiente nodo en la línea. El código completo es: (Nota:También puedes leer y modificar el código compartido enCompartidoLátexantes de que se acepte cualquier respuesta.)

\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}

Lo que quiero hacer:
Como puede ver, en el último paso (intervalo de conexión y su nodo correspondiente en la línea) he codificado las coordenadas de los puntos iniciales y finales de cada intervalo como \draw [cedge] (0,2) to (a); \draw [cedge] (2,2) to (a);. Seguramente es tedioso y propenso a errores. Por lo tanto,

¿Existe alguna forma elegante de hacer referencia a los dos puntos (como argumentos de newcommand) de cada intervalo sin código rígido?

Respuesta1

En su \opcomando, puede nombrar cada límite de su intervalo (usándolo #3como parte del nombre).

\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}

información relacionada