Dviで面付け

dvi の多面付け

a4 で生成した dvi ファイルを多面付け。CTAN から dvibook を拾ってきて……


dvitodvi "2:707@0(-0.762cm,-0.762cm)+1(20.238cm,-0.762cm)"

これで2面付け。a4 landscape になるので、dvipdfm にかけるときは dvipdfm -l を忘れずに。


dvitodvi "4:500@0(-2.54cm,-2.54cm)+1(18.5cm,-2.54cm)+2(-2.54cm,27.2cm)+3(18.5cm,27.2cm)"

4面付けはこう。a4 portrait になる。マクロにしておこうかしらん。

ただ、4面付けだとdvibook の出力が意味不明な順序になる。どうするかね。(← A4をA6に縮小して読めると思ってるのかこいつは)

ついでに、a5 で面付けしたものなら、


dvitodvi "2:0+1(14.8cm,0)"

これで2面付け。a4 landscape になるので、dvipdfm にかけるときは dvipdfm -l を忘れずに。……なんで縮小するとずれるのかしらん。

さらに a3 4面付けだと。


dvitodvi "4:0+1(14.8cm,0)+2(0,21.0cm)+3(14.8cm,21.0cm)"

てな具合い。どうですかお客さん。

dvi のページ再配置

ということで、こんどは dvitodvi の ',' セパレータの出番だ。dvibook -s4 と同等のことは


dvitodvi "4:3,0,1,2"

でできる。さきほどの a5 を a3 に割り付けた 8ページを印刷して、中央でぶったぎって 2枚重ねる(これで中綴じ8ページ)だと、


dvitodvi "8:1,6,3,4,7,0,5,2"

になるはず(さっき紙折って確かめた)。中綴じ4ページx2なら


dvitodvi "8:1,2,5,6,3,0,7,4"

でありますな。どっちを使うかは製本技術と相談してけろ。

で、こいつらはパイプが使えるので


dviselect 1:144 <6.dvi|dvitodvi "8:1,6,3,4,7,0,5,2"|   dvitodvi "4:0+1(14.8cm,0)+2(0,21.0cm)+3(14.8cm,21.0cm)" > 6m1.dvi
dviselect 145: <6.dvi|dvitodvi "4:3,0,1,2"|   dvitodvi "4:0+1(14.8cm,0)+2(0,21.0cm)+3(14.8cm,21.0cm)" > 6m2.dvi
dviconcat 6m1.dvi 6m2.dvi > 6m.dvi

で(長いので\で折り返し)148ページの面付けが完成なりよ。どーですかお客さん。

ここからは計算で。


dvitodvi '16:1,14,3,12,15,0,13,2,5,10,7,8,11,4,9,6'

これは4面付け両面2枚で合計16ページ1折りの面付け。


dvitodvi '24:1,22,3,20,23,0,21,2,5,18,7,16,19,4,17,6,9,14,11,12,15,8,13,10'

これは4面付け両面3枚で合計24ページ1折りの面付け。


dvitodvi '32:1,30,3,28,31,0,29,2,5,26,7,24,27,4,25,6,9,22,11,20,23,8,21,10,13,18,15,16,19,12,17,14'

これは4面付け両面4枚で合計32ページ1折りの面付け。


dvitodvi '40:1,38,3,36,39,0,37,2,5,34,7,32,35,4,33,6,9,30,11,28,31,8,29,10,13,26,15,24,27,12,25,14,17,22,19,20,23,16,21,18'

これは4面付け両面5枚で合計40ページ1折りの面付け。


dvitodvi '48:1,46,3,44,47,0,45,2,5,42,7,40,43,4,41,6,9,38,11,36,39,8,37,10,13,34,15,32,35,12,33,14,17,30,19,28,31,16,29,18,21,26,23,24,27,20,25,22'

これは4面付け両面6枚で合計48ページ1折りの面付け。


dvitodvi '56:1,54,3,52,55,0,53,2,5,50,7,48,51,4,49,6,9,46,11,44,47,8,45,10,13,42,15,40,43,12,41,14,17,38,19,36,39,16,37,18,21,34,23,32,35,20,33,22,25,30,27,28,31,24,29,26'

これは4面付け両面7枚で合計56ページ1折りの面付け。


dvitodvi '64:1,62,3,60,63,0,61,2,5,58,7,56,59,4,57,6,9,54,11,52,55,8,53,10,13,50,15,48,51,12,49,14,17,46,19,44,47,16,45,18,21,42,23,40,43,20,41,22,25,38,27,36,39,24,37,26,29,34,31,32,35,28,33,30'

これは4面付け両面8枚で合計64ページ1折りの面付け。


dvitodvi '72:1,70,3,68,71,0,69,2,5,66,7,64,67,4,65,6,9,62,11,60,63,8,61,10,13,58,15,56,59,12,57,14,17,54,19,52,55,16,53,18,21,50,23,48,51,20,49,22,25,46,27,44,47,24,45,26,29,42,31,40,43,28,41,30,33,38,35,36,39,32,37,34'

これは4面付け両面9枚で合計72ページ1折りの面付け。


dvitodvi '80:1,78,3,76,79,0,77,2,5,74,7,72,75,4,73,6,9,70,11,68,71,8,69,10,13,66,15,64,67,12,65,14,17,62,19,60,63,16,61,18,21,58,23,56,59,20,57,22,25,54,27,52,55,24,53,26,29,50,31,48,51,28,49,30,33,46,35,44,47,32,45,34,37,42,39,40,43,36,41,38'

これは4面付け両面10枚で合計80ページ1折りの面付け。

たぶんここらが限界。ステープラが20枚とめられないといけないので。

後半は perl で、以下のようなコードで計算させてみた。一応 dvitodvi は受けつけることは確認してみたぞよ。


$UFL = 0;
$UFR = 1;
$DFL = 2;
$DFR = 3;
$UBL = 4;
$UBR = 5;
$DBL = 6;
$DBR = 7;

$pera = $ARGV[0];
@p = 0 x ($pera * 8);

$pg = 0;

sub pe
{
  local($j) = @_;
  my($q) = $j*8;

  return if($j >= $pera);
  $p[$q+$UBR] = $pg++;
  $p[$q+$UFL] = $pg++;
  $p[$q+$DBR] = $pg++;
  $p[$q+$DFL] = $pg++;
  &pe($j + 1);
  $p[$q+$DFR] = $pg++;
  $p[$q+$DBL] = $pg++;
  $p[$q+$UFR] = $pg++;
  $p[$q+$UBL] = $pg++;
}

&pe(0);

print "$pg:" . join(',',@p) . "\n";