I think of m4 as a switchyard for data streams. There are various internal flows, e.g. to or from arguments, and to or from macro definitions. divert() affects only the (normally) external output flow, capturing it instead somewhat like a macro definition--but eventually simply copied to the external output (not via macro expansion). "Somewhat like" recognizes the fact that a new define() for an old name replaces text, whereas a new divert() to the same destination adds text.
I hope this helps. Doug. On Thu, Jun 20, 2024 at 12:21 PM René Nyffenegger <m...@renenyffenegger.ch> wrote: > I have a file with the following content: > > define(show_arguments, `arg-1 = $1 > arg-2 = $2 > ') > > divert(1)A`'divert(0)a > > show_arguments( > divert(1)X`'divert(0)1st, > divert(1)Y`'divert(0)2nd) > > divert(1)B`'divert(0)b > > - - - - - > > m4 processes this file to: > > a > > arg-1 = X1st > arg-2 = Y2nd > > > b > AB > > - - - - - - > > I expected the > divert(1)X`'divert(0) > and > divert(1)Y`'divert(0)2nd) > > to divert the X and Y so that it is emitted at the end. > > Can someone explain why this is not the case? > > Thanks > > Rene > > >