Изменение области текста для полностраничных плавающих элементов без заголовков

Изменение области текста для полностраничных плавающих элементов без заголовков

Рассмотрим документ с парой полностраничных плавающих элементов. Этим плавающим страницам вы назначили стиль emptyстраницы, поскольку посчитали ненужным и отвлекающим сохранять на этих страницах полные, подробные заголовки, которые вы используете на обычных текстовых страницах.

Однако следствием этого является то, что теперь float выглядит так, будто он расположен слишком низко по отношению к области текста на страницах. С двумя дополнительными строками, которые стали доступны благодаря исключению заголовков на страницах float, довольно неловко видеть, как верхняя часть float выравнивается с первой строкой основного текста (на страницах с текстом):

введите описание изображения здесь

То, что вам нужно, это изменить область текста (на плавающих страницах) таким образом, чтобы она была такой же высокой, как область, занимаемая текстовым телом плюс заголовки. Поскольку именно эта последняя область (по крайней мере, если наш заголовок достаточно длинный, образуя надлежащую строку текста) визуально воспринимается нами как "область текста" (отсюда и опция 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, а не наоборот.

Примечание: размещение подписей в поле сохранения за пределами is \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}

Связанный контент