[metapost] question about 'Trees' in metapost

Stephan Hennig mailing_list at arcor.de
Tue Oct 21 14:01:43 CEST 2008

Christian Salas schrieb:

> i am following the examples given by Goossens et al book (2008) on the 
> use of 'Trees' in metapost.

Interesting, I have to watch out for that book in the library.

> My question is simple: they provide an example with 3 leves (Food; 
> fruits/vegetable; apples--bananas/potatoes-peas). Now i want to add one 
> more level, let say within the sub-sublevel potatoes, i want to create 2 
> new subsubsub levels. How can i achieve that?

There are no sub-...-levels in MetaObj's trees.  All tree objects
actually have height two (or one in some terminology).  That is, tree
objects consist of exactly one root node (first argument) and an
arbitrary number of direct child nodes (second list argument).  Trees
(in computer science terminology) that have second order child nodes
have to be constructed by nesting tree objects.  In the example below a
frame is drawn around all tree objects to emphasize tree structure.

One problem of MetaObj trees is that construction needs an enormous
number of variables.  There is an alternative, streamlined construcors,
described in section "Advanced operations" in the MetaObj manual, but
that doesn't really make the code more readable.  What's missing for
MetaObj is a macro (or even an external tool) that translates a graph
from one of the standard graph formats into MetaObj code.

One last hint: if you read the MetaObj manual, start with section 7,
"Standard Library -- Gallery", and section 5, "Advanced operations" in
that order.

Best regards,
Stephan Hennig

input metaobj


%%% Create tree 'potatoes'.
  newBox.potR(btex potatoes etex);
  newBox.potA(btex papaA etex);
  newBox.potB(btex papaB etex);
  newTree.potatoes(potR)(potA, potB);

%%% Create tree 'vegetables'.
  newBox.pea(btex peas etex);
  newBox.vegR(btex vegetables etex);
  newTree.vegetables(vegR)(potatoes, pea);

%%% Create tree 'fruits'.
  newBox.fruR(btex fruits etex);
  newBox.fruA(btex apples etex);
  newBox.fruB(btex oranges etex);
  newBox.fruC(btex bananas etex);
  newTree.fruits(fruR)(fruA, fruB, fruC);

%%% Create tree 'food'.
  newBox.fooR(btex food etex);
  newTree.food(fooR)(fruits, vegetables);

  food.c = origin;

More information about the metapost mailing list