TeXの記憶(123)—左ページ専用floatを作る

書籍の中には奇数ページ(または偶数ページ)だけ別デザインのレイアウトの場合があります。図表を奇数ページにまとめて、本文中には入れないといったデザインです。

0413

LaTeXで強制的にページすると、当たり前ですが本文を修正するとズレていってしまいます。今回のマクロは奇数ページを専用のフロート環境にして、何とか実現しようとしたものです。

新規のフロート環境は2のn乗の番号がふられます。デフォルトのフロートはたいていfigure (2^0), table(2^1)だけですから、2^2を使うことにしました。

奇数ページ用に専用の垂直ボックスを用意しました。こうすれば奇数ページの中身が多すぎてもそのページの下にはみ出すだけなので、後のページに影響を与えません。

これの残念なところは、本文の変更によってOddPage環境を挿入する場所を調整しないとズレてしまうところです。うまい位置を決める試行錯誤が必要になって、それはそれで無駄な時間が費やされてしまいます。

まぁ、これはフロートの性質なのでしかたないのですが面倒です。

\documentclass{jbook}

\makeatletter

% 奇数ページ専用の\vboxを定義
\newbox\Oddpage@box
% 専用ボックスの高さ
\newdimen\Oddpage@ht

% figure(2^0),table(2^1)に続く3つめのフロートとして定義
\def\ftype@Oddpage{4}       % 2^n

\newenvironment{OddPage}
{\Oddpage@ht=.99\textheight % 100%でもページ収まるけど、念のため小さく設定
  \setbox\Oddpage@box=\vbox\bgroup} % 奇数ページ用のボックス開始
{\egroup                            % 奇数ページ用ボックスを閉じる
  \@float{Oddpage}
  \vbox to \Oddpage@ht{%              新たにvboxを作ってから
    % 仕事では罫線などを入れることが多い
    % \rlap{\includegraphics{keisenTop.eps}}%
    \box\Oddpage@box                % 奇数ページ用ボックスの中身を出力
    % \rlap{\includegraphics{keisenBot.eps}}%
    \vfill}%
\end@float}

\makeatother

\begin{document}

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
...省略...
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□■
\begin{OddPage}
奇数ページです。\par
△△△
...省略...
△△△
はみ出してもOK
\end{OddPage}
●□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
...省略...
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□▼▲□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
...省略...

\end{document}

コメント