2009-10-19 33 views
15

Estoy tratando de dibujar una línea horizontal en mi diagrama. La coordenada Y de la línea debe estar a medio camino entre los puntos a y b (a está debajo de b). Los puntos finales izquierdo y derecho de la línea se encuentran en el cuadro delimitador de la tikzpicture. Así es como lo estoy haciendo ahora, utilizando el operador de cruce:¿Cómo obtener un componente de una coordenada tikz/PGF?

\coordinate (h0) at ($(a.north)!0.5!(b.south)$); 
\draw (h0 -| current bounding box.west) -- (h0 -| current bounding box.east);

Esto me parece más bien rotonda. Lo que prefiero hacer es obtener la coordenada Y de (h0) y las coordenadas X de los lados este y oeste del cuadro delimitador, y componer las coordenadas yo mismo. Me gustaría hacer esto, pero no es compatible con la sintaxis:

\coordinate (h0) at ($(a.north)!0.5!(b.south)$); 
\draw (current bounding box.west.x,h0.y) -- (current bounding box.east.x,h0.y);

¿Hay una manera de hacer referencia a los componentes individuales de las coordenadas que me falta?

Respuesta

15

Puede obtener los componentes dentro de una operación let. Búsquelo en el manual de PGF de las obras, pero a partir de la memoria:

\draw 
    let 
    \p1=($(a.north)!0.5!(b.south)$), 
    \p2=(current bounding box.west), 
    \p3=(current bounding box.east) 
    in 
    (\x2,\y1) -- (\x3, \y1); 

Eso probablemente necesitaremos depuración ... EDIT: y ahora ha sido gracias a la pregunta.

+0

Gracias! Depuración: la coma que termina con la línea '\ p3' necesita ser eliminada,' a.north' necesita un cierre ')' y 'b.south' necesita una apertura '('. Una vez hecho esto, esto funciona perfectamente. – uckelman

5

Alternativamente, utilice

\pgfextractx{<dimension>}{<point>} 
\pgfextracty{<dimension>}{<point>} 

Estos son los comandos prima PGF, lo que puede ser menos conveniente para usarlos.

+0

hah ! muchas gracias ... he estado buscando esto durante las últimas 2 horas ... – leemes

+2

Pero '' realmente necesita ser un punto pg de bajo nivel para que funcione con puntos definidos usando '\ coordinate at .. .', tiene que decir '\ pgfpointanchor {coordinate} {center}', ya que '\ coordinate (coordinate) at (1,2);' define un nodo de coordenadas de forma (teniendo un ancher llamado center) y \ pgfpointanchor returns el punto de bajo nivel pgf para este ancla. – leemes

Cuestiones relacionadas