Previous: Divnum, Up: Diversions


9.4 出力切替え先のテキストを破棄する

出力を切替えているときは切替え先のテキストが実際に 必要となるかどうかは分からないことがよくあります。 テキストが溜っている切替え先は入力が終りに達した段階で メインの出力ストリームにすべて出力されるので、 切替え先にたまっているテキストを破棄するためのなんらかの手段が必要です。 すべての切替え先のテキストを破棄したいときは m4への入力を‘divert(-1)’とそれに続く明示的な‘undivert’ で終えるのが最も簡単でしょう。

     divert(1)
     Diversion one: divnum
     divert(2)
     Diversion two: divnum
     divert(-1)
     undivert
     ^D

このとき出力はいっさいありません。

特定の切替え先のテキストは次のマクロで消去できます。

     define(`cleardivert',
     `pushdef(`_num', divnum)divert(-1)undivert($@)divert(_num)popdef(`_num')')
     ⇒

undivertと同じように呼び出しますが、 その効果は引数として与えられた切替え先のテキストを消去することです。 (このマクロにはひどいバグがあります! それを見つけて直せるか挑戦してみてください。)