tags:

views:

428

answers:

2

I'm trying to draw a horizontal line across my diagram. The Y coordinate of the line should be halfway between points a and b (a is below b). The left and right endpoints of the line are on the bounding box of the tikzpicture. Here's how I'm doing this now, using the intersection operator:

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

This strikes me as rather roundabout. What I'd rather do is get the Y coordinate of (h0) and the X coordinates of the east and west sides of the bounding box, and compose the coordinates myself. I'd like to do this, but it isn't supported syntax:

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

Is there a way to reference individual components of coordinates that I'm missing?

+4  A: 

You can get at the components inside a let operation. Look it up in the PGF manual for the works, but from memory:

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

That'll probably need debugging... EDIT: and now has been thanks to the questioner.

Rupert Nash
Thanks! Debugging: The comma ending the `\p3` line needs to be deleted, `a.north` needs a closing ')' and `b.south` needs an opening '('. Once that's done, this works perfectly.
uckelman
+1  A: 

Alternatively, use

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

These are raw PGF commands, so it may be less convenient to use them.

Meinersbur