ページ指定マクロ

 印刷ダイアログで[Option]を選んだときの出力ページをコントロールするマクロは、dviout のディレクトリの par\*.pgm というファイル群で、一つのファイルが一つのマクロファイルである。その中身の意味は以下の通り。

先頭が#で始まる行は、コメント行。先頭行から続くコメント行の中で、日本語モードでは先頭が#e#以外で始まる行が必要で、その最初の行が、リストボックスに表示される(非日本語モードでは、#j#以外)。

M」で始まる空白を挟まないブロックがマクロブロックで

  Minitialize;difference;pages

の形をしていて、ページ指定範囲がこのマクロに基づいて出力される。なお、M 以下のマクロの記述部分が無い場合は、マクロの解除を意味する。

・マクロ文中では、v, w, x, y, z の5つの変数が使用可能。

pages は、「式」または「Z+」,「Z-」,「Z」,「.」を「,」で区切って並べたもので、z > 0 が成立すれば「式」の値のページの出力などを行なう。

・上記終了後はdifferenceに従って変数の値を変え、さらにzの値を1引くが、z > 0 ならば再びpagesに従ったページ出力を行なう、と繰り返す。

・「式」 とは、 変数や数を「+」または「-」で結合したもので、x+5, x+v-3 などのようなものです。

pagesの「式」の値が指定範囲に入っていなければ、 通常は空白ページが出力される。

pagesの「式」のいくつかを[ ]で囲んでブロックを作っておくと、その中に範囲内のページ出力がない場合、そのブロックの出力を無視します。[ ] のネスティングは不可。

initializedifferenceは、「代入文」を並べたもので、「代入文」 は 変数+=式,変数-=式, 変数*=式, 変数/=式 変数&=式 の何れかの形のもの。

・変数は、v = w = 0x は指定範囲の最初のページ番号、yは指定範囲の最後のページ番号、zは指定範囲のページ数、がそれぞれ代入された後、initializeによって初期値が定まる。

C 言語の形式で言えば

   v = w = 0; x = start_page; y = end_page; z = y - x + 1;
   for(initialize; z > 0; difference, z--)
      { pages の出力;}

となります。例えば

 Mv+=y,v&=1,y-=v,z-=v;y-=2,z-=1;y

は偶数ページのみの逆順出力になります。 一枚毎に手で用紙を裏返して行う両面印刷の袋とじは

 Mz+=3,z/=4;x+=4;x+3,Z+,x,Z,[x+1,Z+,x+2,Z]

両面印刷プリンターを用いた、最初のページを空白にする両面印刷袋とじは

 Mz+=4,z/=4,x-=1;x+=4;x+3,x,[x+1,x+2]