更改无标题的全页浮动字体区域

更改无标题的全页浮动字体区域

考虑一个包含几个全页浮动元素的文档。您为这些浮动页面指定了empty页面样式,因为您认为在这些页面上保留常规文本页面上使用的完整、冗长的页眉是不必要的,而且会分散注意力。

但结果是,现在浮动元素相对于文本页面的类型区域来说位置有点太低了。由于浮动元素页面上的标题被省略,所以多出了大约两行,因此浮动元素的顶部与文本正文的第一行(在文本页面上)对齐,这非常尴尬:

在此处输入图片描述

您想要的是修改类型区域(在浮动页面上),使其高度与文本主体加标题所占区域一样高。因为后者区域(至少如果我们的标题足够长,形成一行合适的文本)在视觉上被我们视为“那个”类型区域(因此headinclude选择此选项,请参阅 scrguide.pdf,第 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}

相关内容