# [Xy-pic] Macros in xygraph

Ross Moore ross at maths.mq.edu.au
Sun Oct 17 14:46:42 CEST 2004

On 17/10/2004, at 6:47 AM, Alan P Sexton wrote:

>
> I am having great difficulty getting macros in xygraph working. I know
> about using \POS to restart the parser but I can't get it to work
> right.

Inside a graph, you can use the "graph-escape" mechanism.
This is often more convenient than using \POS.

> The following is for Hasse diagrams: I need to be able to draw filled
> nodes as well as empty nodes. Hence I use \circ and \bullet and change
> the frames around them to circular and change the size of the frame to
> make the lines touch the nodes but not cross into the centre of the
> \circ nodes.

The Xy-pic <objects>   @{*}  and  @{o}  can be used to
create zero-sized filled & open circles.
These are preferable to  \bullet  and  \circ  which may be shaped
and/or sized differently according to which font is used.

>
> The fully expanded version works perfectly. The macroised version shows
> very strange behavior: the locations are being set correctly (as can be
> seen from the lines drawn) but the objects are being dropped in the
> wrong places. Also the frames around the positions where the objects
> should be dropped have not been set correctly. Can anyone explain what
> I
> am doing wrong and how to fix it?
>
> \xygraph{
> []
> *-<1.5pt,1.5pt>[o]{\circ}="A"
> [dr]
> *-<1.5pt,1.5pt>[o]{\bullet}="B"
> [ur]
> *-<1.5pt,1.5pt>[o]{\circ}="C"
> "A"-"B"
> "B"-"C"
> }

>
> \vspace{2cm}
>
> \newcommand{\node}{\POS*-<1.5pt,1.5pt>[o]{\circ}}
> \newcommand{\nodeFill}{\POS*-<1.5pt,1.5pt>[o]{\bullet}}
>
> \xygraph{
> []
> \node="A"
^^^^^^ ----  no, this is quite wrong !
> [dr]
> \nodeFill="B"
> [ur]
> \node="C"
> "A"-"B"
> "B"-"C"
> }

You cannot just call TeX macros like this within an  xygraph .
You need to wrap them inside a !-escape as shown below.

This is the correct way to do it:

\xygraph{
[] !{\node}="A"
[dr] !{\nodeFill}="B"
[ur] !{\node}="C"
"A"-"B"
"B"-"C"
}

Here's how to make it shorter, neater,
and self-contained using graph-escapes
(rather than TeX macro definitions):

\xygraph{
!~O{[]*-<1.5pt,1.5pt>[o]{\circ}}
!~F{[]*-<1.5pt,1.5pt>[o]{\bullet}}
[] !O="A"
[dr] !F="B"
[ur] !O="C"
"A"-"B"
"B"-"C"
}

or  (ditching the \circ and \bullet )

\xygraph{
!~O{[]*+<2.5pt>[o]@{o}}
!~F{[]*+<2.5pt>[o]@{*}}
[] !O="A"
[dr] !F="B"
[ur] !O="C"
"A"-"B"
"B"-"C"
}

Hope this helps,

Ross

>
> _______________________________________________
> xy-pic mailing list
> http://tug.org/mailman/listinfo/xy-pic
>
------------------------------------------------------------------------
Ross Moore                                         ross at maths.mq.edu.au
Mathematics Department                             office: E7A-419
Macquarie University                               tel: +61 +2 9850 8955
Sydney, Australia                                  fax: +61 +2 9850 8114
------------------------------------------------------------------------