%%
%% `leaflet.sty' version 0.8 <1996/04/23>
%%                           by Mizuho SANADA (sanada@orion.kyukyo-u.ac.jp)
%%
%%     leaflet.sty is an add-on extension for
%%        2up.tex/2up.sty (fileversion 1.2, filedate 93/01/28).
%%
%% Document in Japanese is attached after the line \endinput. <------ %%%%%
%%
%% function: provides targetlayouts `Leaflet' and `leaflet'
%%                                (modification of [Bb]ooklet layout)
%% 
%%                      e.g. 12 pages on 3 sheets of paper
%% 
%%                 [Ll]eaflet (option default)    cf. original [Bb]ooklet
%%        sheet       1st     2nd    3rd              1st     2nd    3rd    
%%        face       [4:1]   [8:5]  [12: 9]          [12: 1] [10:3]  [8:5]
%%        back       [2:3]   [6:7]  [10:11]          [ 2:11] [ 4:9]  [6:7]
%% 
%%
%% usage: \documentstyle[...,2up,leaflet,...]{...}
%%        \targetlayout{twosided,Leaflet}
%% 
%% option: \fourpageleafs[n] % n is the number of paper
%%                           % which will be folded together.
%%                           % default: n=1
%% 
%%                  e.g. n=2, 24 pages on 6 sheets of paper
%%
%%           sheet  1st   2nd      3rd     4th       5th     6th
%%           face  [8:1] [6:3]   [16: 9] [14:11]   [24:17] [22:19]
%%           back  [2:7] [4:5]   [10:15] [12:13]   [18:23] [20:21]
%% 
%% 
%%
%% Because leaflet.sty has many fragments of 2up.tex, 
%% copying must be done under the copying conditions of original 2up.tex.
%%
%% The following are the copyright and the copying conditions of original 2up.tex.
%% --- begin ---
%%%%
%%%% COPYRIGHT 1992, 1993 by Timothy Van Zandt, tvz@Princeton.EDU
%%%%
%%%% COPYING:
%%%%   Copying of part or all of this file is allowed under the following
%%%%   conditions only:
%%%%   (1) You may freely distribute unchanged copies of the file. Please
%%%%       include the documentation when you do so.
%%%%   (2) You may modify a renamed copy of the file, but only for personal
%%%%       use or use within an organization.
%%%%   (3) You may copy fragments from the file, for personal use or for use
%%%%       in a macro package for distribution, as long as credit is given
%%%%       where credit is due.
%%%%
%%%%   You are NOT ALLOWED to take money for the distribution or use of
%%%%   this file or modified versions or fragments thereof, except for
%%%%   a nominal charge for copying etc.
%%%%
%% ---  end  --- 
%%
\ifx\TwoUpLoaded\undefined%
  \errhelp{leaflet.sty is an add-on extension for 2up.sty 
           and does not work without original 2up.sty(2up.tex).  
           You must load 2up.sty(2up.tex) file before.
  }
  \errmessage{leaflet.sty ERROR: 2up.sty not loaded! ****  }
  \endinput
\fi
%
% Registers and macros used only for [Ll]eaflet layout:
\begingroup
  \let\newcount\relax
  \gdef\leaflet@registers{%
    \newcount\leaflet@leafs
    \leaflet@leafs=1
    \newcount\@max@bookletpage
    \@max@bookletpage=4
    \newcount\@turnpg
    \newcount\bookletpage
    \bookletpage=0
    \newcount\@last@bookletpage
    \@last@bookletpage=0
    \newcount\leaflet@page
    \leaflet@page=0
    \newcount\leftpagenumber
    \newcount\rightpagenumber
    \@leftpagefalse
    \let\booklet@loop\Leaflet@loop
    \let\save@booklet\save@blankpage
    \def\fourpageleafs[##1]{\leaflet@leafs=##1\relax%
       \multiply\@max@bookletpage by\leaflet@leafs%
       \multiply\@turnpg by\leaflet@leafs%
       \prep@leafletbox}%
    \multiply\maxdeadcycles by 20}
\endgroup
%
\begingroup
  \let\newbox\relax
  \gdef\prep@leafletbox{%
    \ifnum\@turnpg>\@last@bookletpage
      \loop
        \begingroup
          \globaldefs=1
          \advance\@last@bookletpage by 1
          \expandafter\newbox\csname bookletbox\the\@last@bookletpage\endcsname
        \endgroup
      \ifnum\@turnpg>\@last@bookletpage
      \repeat
    \fi}
\endgroup
%
\def\target@Leaflet{%
  \leaflet@registers
  \@turnpg=4
  \prep@leafletbox
  \def\ship@@@leftpage{\ship@Leaflet\@leftpage}%
  \def\ship@@@rightpage{\ship@Leaflet\@rightpage}%
  \def\twoup@eject{\twoup@eject@Leaflet}%
  \expandafter\process@targetlayout}
%
\def\target@leaflet{%
  \leaflet@registers
  \@turnpg=2
  \prep@leafletbox
  \def\ship@@@leftpage{\ship@leaflet@left}%
  \def\ship@@@rightpage{\ship@leaflet@right}%
  \def\twoup@eject{\twoup@eject@leaflet}%
  \expandafter\process@targetlayout}
%
%  macros for [Ll]eaflet option:
%
\def\pages@leaflet{%
  \ifnum\bookletpage=\@max@bookletpage\global\bookletpage=0\fi
  \global\advance\leaflet@page by 1
  \global\advance\bookletpage by 1\relax}%
\def\save@leaflet#1{%
  \message{[p\the\count\z@]box<\the\bookletpage> }
  \begingroup
    \globaldefs=1
    \@last@bookletpage\bookletpage
    \expandafter\setbox\csname bookletbox\the\bookletpage\endcsname\box#1%
  \endgroup}
%
% With the Leaflet layout, 4n pages are saved and then shipped.
% 
\def\ship@Leaflet#1{%
  \pages@leaflet
  \save@leaflet{#1}%
  \ifnum\bookletpage=\@max@bookletpage
    \leftpagenumber\@max@bookletpage
    \rightpagenumber=1
    \Leaflet@loop%
    \global\@last@bookletpage=0\relax
  \fi}%
\def\Leaflet@loop{%
  \message{[\ifodd\rightpagenumber\the\leftpagenumber:\the\rightpagenumber
                 \else\the\rightpagenumber:\the\leftpagenumber\fi]in}
  \make@bookletpage\leftpagenumber
  \make@bookletpage\rightpagenumber
  \ship@twoup
  \Booklet@@loop}
%
% With the leaflet layout, pages 1 to 2n are saved and then
%  shipped with pages 2n+1 to 4n.
%
\def\ship@leaflet@left{%
    \pages@leaflet
    \ifnum\bookletpage>\@turnpg\ship@@leaflet@left%
    \else\save@leaflet\@leftpage\fi}%
\def\ship@leaflet@right{%
    \pages@leaflet
    \ifnum\bookletpage>\@turnpg\ship@@leaflet@right%
    \else\save@leaflet\@rightpage\fi}%
\def\ship@@leaflet@left{%
    \message{[p\the\count\z@:<\the\@last@bookletpage>]in}
    \setbox\@rightpage=%
      \expandafter\box\csname bookletbox\the\@last@bookletpage\endcsname
    \ship@twoup
    \global\advance\@last@bookletpage by -1\relax}
\def\ship@@leaflet@right{%
    \message{[<\the\@last@bookletpage>:p\the\count\z@]in}
    \setbox\@leftpage=%
      \expandafter\box\csname bookletbox\the\@last@bookletpage\endcsname
    \ship@twoup
    \global\advance\@last@bookletpage by -1\relax}
%
%
\def\save@blankpage#1{%
  \pages@leaflet
  \save@leaflet{#1}%
}
%
% This is the definition of \twoup@eject with the Leaflet option:
\def\twoup@eject@Leaflet{%
  \ifnum\@last@bookletpage>0
    \ifnum\bookletpage=\@max@bookletpage
       \leftpagenumber\@max@bookletpage
       \rightpagenumber=1
       \Leaflet@loop
    \else
       \twoup@eject@booklet
    \fi
  \fi}
%
% This is the definition of \twoup@eject with the leaflet option:
\def\twoup@eject@leaflet{%
  \ifnum\@last@bookletpage>0
    \ifnum\bookletpage>\@turnpg\else		% < 1/2 booklet ->less leaf need
      \@max@bookletpage\bookletpage
      \advance\@max@bookletpage by 3
      \divide\@max@bookletpage by 4
      \multiply\@max@bookletpage by 4
      \@turnpg=\@max@bookletpage
      \divide\@turnpg by 2
      \ifnum\@turnpg<\bookletpage
        \leftpagenumber\@turnpg
        \rightpagenumber\@turnpg
        \advance\rightpagenumber by 1
        \let\Booklet@@loop\leaflet@eject@@loop
        \Leaflet@loop
      \fi
    \fi
    \ifnum\@last@bookletpage>0
      \loop
        \begingroup
        \if@leftpage
          \global\setbox\@leftpage\hbox{}%
          \make@@halfpage\@leftpage\ship@@@leftpage
          \global\@leftpagefalse
         \else
          \global\setbox\@rightpage\hbox{}%
          \make@@halfpage\@rightpage\ship@@@rightpage
          \global\@leftpagetrue
        \fi
        \endgroup
      \ifnum\@last@bookletpage>0
      \repeat
    \fi
  \fi}
%
\def\leaflet@eject@@loop{%
  \global\advance\@last@bookletpage by -2
  \advance\rightpagenumber by 1
  \advance\leftpagenumber by -1
  \ifnum\rightpagenumber>\bookletpage\else\expandafter\Leaflet@loop\fi}
%%
\endinput


From: e76349g@kyu-cc.cc.kyushu-u.ac.jp (Mizuho SANADA)
Newsgroups: fj.comp.texhax
Subject: leaflet.sty-minor modification for 2up.tex
Date: 23 Apr 96 20:40:49
Organization: Computer Center, Kyushu University

真田＠九州共立大というものです。

TeX で 2up 出力する 2up.sty がありますが、予定していた順でページを出
力できなかったので、必要に迫られてこれの修正版を作ってみました。

すでに同様なものが作られているのではと思い、他のマクロを探すか修正する
か迷いましたが、探すより修正する方が早そうだったのでやってみたところ、
半日ほどで目的は果たせました。

はたして需要があるかどうかもわかりませんが、ここに投稿するのはその
ときのマクロを整理したものです。

なお、2up.sty の詳しい紹介が『UNIX MAGAZINE』'95年5月号の岩熊哲夫、
古川徹生 両氏の「スタイルファイル活用法 13」に載っていますので参照
してください。以下の説明もこの記事を参考にしています。

2up.tex/2up.sty は各地の ftp サイトにあります。私は、

ftp.riken.go.jp
  Location: /pub/tex-archive/macros/latex2e/contrib/other/seminar/inputs/2up.sty

から ftp しました。ドキュメントが充実していますから、seminar パッケー
ジをまとめて ftp するのがいいでしょう。


名称 leaflet.sty
機能 2up.sty(2up.tex)にレイアウト 'Leaflet' と 'leaflet' を追加する。

      あくまで追加なので、オリジナルの 2up.sty が必要です。
      対応するバージョンは fileversion 1.2, filedate 93/01/28 です。


  ○オリジナルのレイアウト booklet との相違

    2up.sty の [Bb]ooklet レイアウトは、「一枚の用紙の表裏に2ページずつ
    印刷し、印刷した紙を重ねて二つ折りにすると、冊子ができる」というもの
    です。例えば、 12ページの場合、3枚の用紙に次のように印刷されます。

     　　 1枚目   2枚目  3枚目
     表　[12: 1] [10:3]  [8:5]
     裏  [ 2:11] [ 4:9]  [6:7]  　　（番号は印刷されるページです。）


     [Ll]eaflet レイアウトも「一枚の用紙の裏表に2ページずつ印刷」しますが、
     「用紙を二つ折りにした後で重ねる」ところが違います。
     上と同じ場合、次のようになります。

     　　1枚目   2枚目   3枚目
     表　[4:1]   [8:5]  [12: 9]
     裏  [2:3]   [6:7]  [10:11]

     折って重ねただけではバラバラになるので、ホッチキスなどで固定する必要
     があるでしょう。このとき、表紙を用意しておいて全体を包むようにすると、
     背表紙付きのようになります。一方、[Bb]ooklet レイアウトは"平綴じ"と
     いったところでしょう。


オプション
     これだけではあまりに*しょうもない*のでオプションを付けました。(^^;
     「決めた枚数ずつ重ねて二つ折りにし、さらに重ねると冊子になる。」
     というもので、重ねて折るときの重ねる枚数を指定するオプションです。
     ページ数が多くないと意味がないので24ページ（6枚）の例を示します。
     「2枚重ね」を指定した場合、次のようになります。

     　　1枚目 2枚目    3枚目   4枚目     5枚目   6枚目
     表　[8:1] [6:3]   [16: 9] [14:11]   [24:17] [22:19]
     裏  [2:7] [4:5]   [10:15] [12:13]   [18:23] [20:21]

     ここで、1枚目と2枚目を重ねて二つ折りにすると、1ページから8ページまで
     の冊子になります。同じように、3枚目と4枚目、5枚目と6枚目をそれぞれ重
     ねて二つ折りにし、9-16ページと、17-24ページの部分冊子をつくり、これら
     3冊の部分冊子を重ねると全体の冊子が完成するわけです。
  
     *しょうもない*の屋上屋を架すだけかもしれませんが、書籍のつくりをまね
    たものと思ってください。


Leaflet レイアウトと leaflet レイアウト
     Leaflet レイアウトは重ねて折る枚数（N枚とする。デフォルトは1枚）毎に、
     出力する4Nページ（1枚に付き4ページ）をboxに保存しておき、出力ページ
     が揃ったところで、2ページずつ（左右の配置を決めて）出力します。

     leaflet レイアウトでは、
     重ね折りの部分冊子に出力する4Nページの前半(1～2N)までは保存し、
     後半(2N+1～4N)の各ページを処理する毎に[2N:2N+1],[2N+2:2N-1]...[4N:1]
     の順で出力します。
     要するに、leaflet レイアウトは、保存するページを必要最小限にしたとい
     うことです。一方、オリジナルの [Bb]ooklet レイアウトは、全てのページ
     を最後まで保存し、一気に出力するようになっています。BigTeX ならこの
     くらい何でもないのかも知れませんが、（詳しい方、教えてください）フロー
     ト環境や複雑なpictureで痛い目にあったことがあるので、ついでに作って
     みました。多分必要なかったとおもいますが、*もしかしたら* leaflet で
     は出力できて Leaflet ではできない場合があるかも知れません。


使用法
     LaTeX209 で動作を確認しました。（LaTeX2e では使えるかどうかわかりません）
     
   ○ オプションスタイルとして 2up.sty と共に使用します。
     \documentstyle[...,2up,leaflet,...]{...}
　　　　　　　　　　　　^^^^^^^^^^^^
     ＊必ず＊ 2up.sty を先に指定してください。先にないとエラーになります。

     （plainTeX では全く試していません。LaTeX の命令は使っていないつもりなので、
       2up.tex に続けてinputして使えるかも知れません。）


   ○ レイアウトの選択
     \targetlayout{twosided,Leaflet}
                            ^^^^^^^
     オリジナルと同じやり方です。レイアウト名が増えただけです。
     ただし、twosided を指定しなかった場合と、topbottom を指定した場合に
     意味のある順番でページが出力されるかどうか全く試していません。
     なお、エラーメッセージには手を付けていないので、エラーメッセージのレ
     イアウト名のリストに [Ll]eaflet はありません。


   ○ 部分冊子の用紙枚数指定
     \fourpageleafs[n]
                    ^--- n は数字

     レイアウトを選択した後で指定してください。[]は必須です。
     このコマンドを使わなければデフォルトの 1 のままです。


BUG
    最後のページが4の倍数でないと空白のページが出力されますが、leaflet 
    の場合\fourpages[n] で n>2 で指定していると、極端に空白ページが多く
    なることがあり得ます。これは leaflet では部分冊子の一番内側になるペー
    ジから出力するため、最後のページが部分冊子の 2n+1 ページまでの場合、
    残りの 2n-1 ページが空白ページにならざるを得ないのです。
    Leaflet では最後の部分冊子を出力する時に、用紙の数を必要最小限に抑え
    ているので空白ページが無闇に多くなることはないのですが、元の n が大
    きかった場合、かなりのアンバランスが生じます。leaflet でも最後が 2n 
    ページまでの場合は Leaflet と同じになります。このあたりは手作業でな
    んとかするしかないのが`仕様'です。

    また、この動作は、用紙の数 n と最後のページの値によって決まるわけで
    すが、あらゆる組合せはとても試せないので、BUGが残っている可能性が大
    いにあります。


    現在処理中のページをbox に保存したとか、ページをどのように組み合わせ
    たかを表示させています。うるさかったら、\message コマンドの行をコメ
    ントアウトして下さい。


その他
    作った動機を簡単に説明しておきます。この新学期に学生に配布する冊子
    (B5)を約 80 部作ることにしたのですが、原稿が遅れたために PS と非PS 
    のプリンタどちらでも印刷できるようにしたかったのです。PSプリンタの方
    が奇麗なのですが、使える時間帯が限られたので。

    前にも書きましたが、ある程度の厚さがあれば背表紙つきのようにできるの
    で、\maketitle などでできるはじめの方のページを自動的に本文と別に印
    刷するようにできるといいかもと思っています。

======
                     九州共立大学 電気工学科  真田瑞穂
                      e76349g@kyu-cc.cc.kyushu-u.ac.jp
                           sanada@orion.kyukyo-u.ac.jp

