m4: Improved cleardivert

 
 17.6 Solution for 'cleardivert'
 ===============================
 
 The 'cleardivert' macro (⇒Cleardivert) cannot, as it stands, be
 called without arguments to clear all pending diversions.  That is
 because using undivert with an empty string for an argument is different
 than using it with no arguments at all.  Compare the earlier definition
 with one that takes the number of arguments into account:
 
      define(`cleardivert',
        `pushdef(`_n', divnum)divert(`-1')undivert($@)divert(_n)popdef(`_n')')
      =>
      divert(`1')one
      divert
      =>
      cleardivert
      =>
      undivert
      =>one
      =>
      define(`cleardivert',
        `pushdef(`_num', divnum)divert(`-1')ifelse(`$#', `0',
          `undivert`'', `undivert($@)')divert(_num)popdef(`_num')')
      =>
      divert(`2')two
      divert
      =>
      cleardivert
      =>
      undivert
      =>