マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

bxpapersize パッケージのチョットアレな使い方

先日の記事で bxpapersize の“幸せな LaTeX ユーザ向け”の使い方は説明し終わったので、ここではチョットアレな人向けの高度な使い方を解説する。

文書の途中で出力用紙サイズを変える話

実は \papersizesetup 命令は文書本体中でも使うことができる。つまり、文書の途中で出力用紙サイズを変更できることになる。実際にそれを行った場合、「(非同期で)ページ出力が発生した際に、その時に有効であった size パラメタの設定値」が適用されることになる。また、size パラメタの変更は局所的代入の扱いになる。

\documentclass[a5paper]{article}
\usepackage{bxpapersize}% 'size=real'が既定で設定される
\begin{document}
First!
\newpage % ページ出力発生, 出力サイズはa5paper
{% グループ開始
  \papersizesetup{size=a4paper}
  Second!
  \newpage % ページ出力発生, 出力サイズはa4paper
}% グループ終了, sizeパラメタはrealに戻る
Last!
\end{document}% ページ出力発生, 出力サイズはa5paper

例によって、「bxpapersize は出力用紙サイズを変えるだけ」なので、この例の 2 ページ目は奇妙な出力になる。

ちなみに、size=real は「ページ出力発生時に、その時の \paperwidth/height の値を出力サイズに設定する」という意味なので、real が指定されている状態で文書中で \paperwidth/height の値が変わった場合にも、出力用紙サイズは変更される。

※DVI ウェアの中には「出力サイズが異なるページが混在した DVI」を正常に処理できないものがあることに注意。

機能の一時的な無効化

active パラメタを true/false に設定するとパッケージの機能が有効/無効になる。無効化されている間に出力されたページには「(bxpapersize パッケージは)出力用紙サイズを設定しない」状態になる。その場合の実際の出力がどうなるかは DVI ウェアやエンジンに依存する。

TeX のボックスをそのまま出力してしまう話

size パラメタの値を box にすると、「出力(\shipout)しようとする TeX ボックスの寸法をそのまま出力用紙サイズに設定する」という動作になる。

\documentclass[a4paper]{article}
\usepackage{bxpapersize}
\begin{document}
{\LaTeX} is wonderful!

%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TeX code BEGIN
\begingroup
  \papersizesetup{size=box}
  % ボックスを直接shipoutするぞ
  \shipout\hbox{{\TeX} is chaotic!!}
\endgroup
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TeX code END
\end{document}% "LaTeXの"ページ出力発生, 出力サイズはa4paper

これをコンパイルすると、1 ページ目は「{\TeX} is chaotic!!」の組版結果のボックスがそのままの寸法で出力される。2 ページ目は通常の LaTeX の処理によるページが A4 判で出力される。