TeXの記憶(78) — トンボ付B5サイズをA4用紙に収める

B5の用紙サイズのときにtombowオプションを使ってトンボを付けると、A4用紙に印刷するとトンボがヨコにズレてしまうか、トンボが用紙の右からはみ出してしまいます。B4用紙に出力すれば収まりますが、B4用紙はちょっと大きいしA4用紙に収めたほうが便利なので、ドンボを少し移動してA4用紙に収まるように修正しました。

1019

LaTeXでトンボを出力している部分は\@outputpageという部分です。具体的には、texmf/ptex/platex/base/plcore.dtxの中に記述があります。

TeXは1ページの組版処理が終わると\@outputpageを呼び出して、この中でヘッダやフッタ、テキストエリアの本文を組み直して出力しています。トンボもこのタイミングで書き出しています。

そこで、\@outputpageの中でトンボがあるときは、ヘッダ・本文・フッタ・トンボ全体を少し左に移動してはみ出さないようにしました。

マクロの中の \@offset@amount11mm で左に11ミリ移動しています。何だか以前使っていた時はもう少し小さな値だったと思うのですが、何かが変わったのかな。まぁ、今回ちょうど良い値が11ミリということでした。こんど調べてみることにします。

52行目で出力されるトンボの位置を左に移動させるために、その前の49〜50行目で出力のポイントを左に移動しています。

54行目では、\moverightを使って\@offset@amountを引いた分だけ移動しています。

以下の定義はプリアンブルに入れておけば動作します。

\newdimen\@offset@amount
\iftombow
  \@offset@amount11mm
\else
  \@offset@amount\z@
\fi
\newdimen\@offset@margin

\def\@outputpage{%
\begingroup % the \endgroup is put in by \aftergroup
  \iftdir
    \dimen\z@\textwidth \textwidth\textheight \textheight\dimen\z@
  \fi
  \let \protect \noexpand
  \@resetactivechars
  \global\let\@@if@newlist\if@newlist
  \global\@newlistfalse
  \@parboxrestore
  \shipout\vbox{\yoko
    \set@typeset@protect
    \aftergroup\endgroup
    \aftergroup\set@typeset@protect
     \if@specialpage
       \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
     \fi
     \if@twoside
       \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
          \iftdir\let\@themargin\evensidemargin
          \else\let\@themargin\oddsidemargin\fi
       \else \let\@thehead\@evenhead
          \let\@thefoot\@evenfoot
          \iftdir\let\@themargin\oddsidemargin
          \else\let\@themargin\evensidemargin\fi
     \fi\fi
     \@@topmargin\topmargin
     \iftombow
       \@@paperwidth\paperwidth \advance\@@paperwidth 6mm\relax
       \@@paperheight\paperheight \advance\@@paperheight 16mm\relax
       \advance\@@topmargin 1in\relax \advance\@themargin 1in\relax
     \fi
     \reset@font
     \normalsize
     \normalsfcodes
     \let\label\@gobble
     \let\index\@gobble
     \let\glossary\@gobble
     \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
     \@begindvi
     \iftombow % 追加
       \moveleft\@offset@amount
     \fi
     \@outputtombow
     \vskip \@@topmargin
     \@offset@margin\@themargin\advance\@offset@margin-\@offset@amount % 追加
     \moveright\@offset@margin\vbox{% 修正
       \setbox\@tempboxa \vbox to\headheight{%
         \vfil
         \color@hbox
         \normalcolor
         \hb@xt@\textwidth{\@thehead}%
         \color@endbox
         }%                        %% 22 Feb 87
       \dp\@tempboxa \z@
       \box\@tempboxa
       \vskip \headsep
       \box\@outputbox
       \baselineskip \footskip
       \color@hbox
       \normalcolor
       \hb@xt@\textwidth{\@thefoot}%
       \color@endbox
       }%
     }%
  \global\let\if@newlist\@@if@newlist
   \global \@colht \textheight
   \stepcounter{page}%
   \let\firstmark\botmark
}

コメント