2006/08/02

LaTeXで、ページの残りが少なかったら次に続く要素を改ページしたい。
あくまでも自分用のメモ。
% ページの残りが指定した数値より少なかったら改ページを促す
% \ifnoroomthenpagebreak{20mm} とか
\def\estimate@restpage{%
\dimen@\vsize \advance\dimen@ -\pagetotal%
\advance\dimen@ -\pageshrink%
\advance\dimen@ -\pagedepth%
\advance\dimen@ -\pagestretch
\advance\dimen@ -\pagefilstretch%
\advance\dimen@ -\pagefillstretch%
\advance\dimen@ -\pagefilllstretch}%
\newcommand{\ifnoroomthenpagebreak}[1]{%
\estimate@restpage%
\ifdim\dimen@<#1%
\ifdim\dimen@>7pt \pagebreak\fi\fi}

\estimate@restpage で「残りページのつもりの値」を見積もってるんだけど、なんかどうしても1行分だけ残っちゃうみたいで、次のページの先頭付近が「残り 6pt くらい」だと見なされてしまう(場合がある)。その補正が最後の「> 7pt」。高さが 7pt しかない行はあんまりないので、この \ifnoroomthenpagebreak コマンドで改ページされなくてもどのみちこの位置では改ページされる可能性が高い。だから実用上は意図どおりの結果が得られることになる。とはいえ、このあたりの挙動がいまいち不明なので、そのままどんな場合でも安心して使うことはできないと思う。

にしても、一連の値「\pageほにゃらら」についてのドキュメントはどこ?(そもそもLaTeXのドキュメントが……)
結局参考になったのは、TRALICSというLaTeXからXMLへのコンバータのドキュメントだった。

TRALICS : a LaTeX to XML translator (P)
http://www-sop.inria.fr/miaou/tralics/doc-p.html

どうでもいいけど、こっちはXMLからLaTeXへのコンバータを作るのに精一杯なわけで、LaTeXからXMLを吐き出すなんて気が遠くなる。

0 件のコメント: