フルページのフロートがいくつかあるドキュメントについて考えてみましょう。これらのフロート ページempty
には、通常のテキスト ページで使用している完全で詳細なヘッダーを保持することは不要であり、煩わしいと考えたため、ページ スタイルを割り当てました。
しかし、その結果、フロートがテキスト ページのタイプ領域に対して少し低すぎる位置に配置されているように見えます。フロート ページのヘッダーを省略することで 2 行ほど余分に使用できるようになったため、フロートの上部が (テキスト ページの) テキスト本体の最初の行と揃っているのは、かなり不自然です。
必要なのは、フロート ページ上の文字領域を、テキスト本文とヘッダーが占める領域と同じ高さになるように変更することです。後者の領域 (少なくともヘッダーが十分に長く、適切なテキスト行を形成している場合) が、視覚的に「その」文字領域として認識されるからです (そのためのオプションです。scrguide.pdf のheadinclude
第 2 章を参照してください)。
koma-script を使用すると、ドキュメントの途中でタイプ領域を変更できます。次のコードを使用します:
\KOMAoptions{
footinclude=false,
headinclude=false
}
\recalctypearea
...ヘッダーを含むタイプ領域と、ヘッダーを含まないタイプ領域を切り替えることができます。私の MWE の後半では、フロート ページでほぼ希望どおりの効果が得られますが、もちろん、これでは解決にはほど遠いため、疑問が残ります。
フルページフロートが呼び出されるたびに、確実かつ堅牢な方法で、タイプ領域の変更を自動的にトリガーするにはどうすればよいでしょうか。
\documentclass[12pt,DIV=9]{scrartcl}
\usepackage{blindtext,floatpag}
\usepackage[automark]{scrlayer-scrpage}
%include header in type area calculation
\KOMAoptions{
footinclude=false,
headinclude=true
}
\recalctypearea
%setup headers/footers
\pagestyle{scrheadings}
\clearscrheadings
\ihead{\headmark}
\ohead{\thepage}
%make sure figure starts at top of text area
\makeatletter
\setlength{\@fptop}{0pt}
\makeatother
%no headers/footers on float pages
\floatpagestyle{empty}
\begin{document}
\section{Text with regular type area}
\Blindtext
\begin{figure}[p]
\rule{\textwidth}{\textheight}
\caption{Float with regular typearea; no headings, float could be taller (using the space taken by the headers}
\end{figure}%
\Blindtext
%changing type area in mid-document. Not very elegant
\KOMAoptions{
footinclude=false,
headinclude=false
}
\recalctypearea
\section{Text with taller type area (no headers)}
\Blindtext
\begin{figure}[p]
\rule{\textwidth}{\textheight}
\caption{Float with tall typearea, as it should be; no headings, float uses the space taken by the headers}
\end{figure}%
\Blindtext
\end{document}
追伸
もちろん、ブルートフォースアプローチもあります。@fptop
とにかく変更を使用する場合 (私はそうしています)、次のようにその値を負の値に設定することもできます。
\makeatletter
\setlength{\@fptop}{-2\baselineskip}
\makeatother
これは確かに機能しているようで、koma-script の機能を使用する必要さえなくなるため、クラスに依存しないソリューションです。しかし、非常に残酷です。
答え1
このソリューションでは\afterpage
、 と を使用して\newgeometry
、ページ全体の図をアクティブにします (その逆ではありません)。
注: キャプションを の外部の保存ボックスに入れるのは、\afterpage
キャプションが正しく番号付けされることを保証するためです (やりすぎです)。
\documentclass[12pt,DIV=9]{scrartcl}
\usepackage{blindtext,floatpag}
\usepackage[automark]{scrlayer-scrpage}
\usepackage{geometry}
\usepackage{afterpage}
\newsavebox{\tempbox}
%include header in type area calculation
\KOMAoptions{
footinclude=false,
headinclude=true
}
\recalctypearea
%setup headers/footers
\pagestyle{scrheadings}
\clearscrheadings
\ihead{\headmark}
\ohead{\thepage}
%make sure figure starts at top of text area
\makeatletter
\setlength{\@fptop}{0pt}
\makeatother
%no headers/footers on float pages
\floatpagestyle{empty}
\begin{document}
\section{Text with regular type area}
\Blindtext
\begin{figure}[p]
\rule{\textwidth}{\textheight}
\caption{Float with regular typearea; no headings, float could be taller (using the space taken by the headers}
\end{figure}%
\Blindtext
\section{Text with taller type area (no headers)}
\Blindtext
\setbox\tempbox=\vbox{\expandafter\def\csname @captype\endcsname{figure}% increment caption counter NOW
\caption{Float with tall typearea, as it should be; no headings, float uses the space taken by the headers}%
}
\afterpage{\newgeometry{noheadfoot}% automatic \clearpage
\begin{figure}[p]
\rule{\textwidth}{\textheight}
\unvbox\tempbox
\end{figure}%
\restoregeometry}
\Blindtext
\end{document}