在当前图之前(而不是之后)手动发布整页图

在当前图之前(而不是之后)手动发布整页图

通常,当有太多待处理的浮动材料(图形、表格等)时,LaTeX 会放弃将其放置在当前页面上,并生成一个“浮动页面”仅包含浮动元素,然后再继续处理主要内容。我想做的几乎就是这样,但不完全是:将单个图形放在自己的页面上当前段落将继续。我不需要这个数字专门通过浮动机制传递,但如果需要的话,它可以。

不同于TeX.SE 上也有类似的问题,我希望图形在自己的页面上发出,而不是追溯性地塞进前一页的文本底部,所以从 TeX 的操作方式来看,这在原则上听起来并非不可能:当前页面尚未被 TeX 发送出去并被遗忘,完全有可能在它之前发送另一个页面。然而,我认识到 TeX 分页可能仍会决定分页当前行或当前段落,因此仅从\shipout主文档执行而不进入输出例程是不正确的(甚至忘记它也不能与页眉等很好地配合),并且我对 LaTeX 输出例程的秘密了解不够,无法对其进行修补以执行此操作。

(避免X/Y 问题:我实际上希望我的图表出现在跨页的左页,而我的文本出现在右页,但我认为在 LaTeX 中如果没有全局优化的分页。)

如果这相关的话,我目前正在使用 KOMA-Script,scrlayer-scrpagegeometry,但我愿意在必要时进行切换(也许除了怪兽memoir)。 M(N)WE:

\documentclass[a4paper]{scrartcl}
\usepackage{geometry}
\usepackage{scrlayer-scrpage}
\usepackage{lipsum}
\title{Hello world} \author{John Doe} \date{}
\begin{document}

% Page 1 and start of page 2 (I want 1 and 3)
\maketitle
\lipsum[1-5]

% Paragraph on page 2 (I want 3) anchoring a big figure
\lipsum*[6][1-3]
\begin{figure}
  % FIXME This ends up on page 3, but I want it on page 2
  \rule{\textwidth}{.8\textheight}
\end{figure}
\lipsum*[6][4-100]

% Some more text that ends up on pages 2 and 4 (I want 3 and 4)
\lipsum[7-10]

\end{document}

答案1

在您的示例文档中,该图在逻辑上适合放在前两段和后面几段之间。为什么不把它放在那里? --- GOM

% placefigprob.tex  SE 574884

\documentclass[a4paper]{scrartcl}
\usepackage{geometry}
\usepackage{scrlayer-scrpage}
\usepackage{lipsum}
\usepackage{comment}
\usepackage{afterpage}

\newcommand{\showfig}{%
\begin{figure}
   FIXME This ends up on page 3, but I want it on page 2
  \rule{\textwidth}{.8\textheight}
\end{figure}
}
\title{Hello world} \author{John Doe} \date{}
\begin{document}

\maketitle
\textbf{ Page 1 and start of page 2 (I want 1 and 3)} \\
%\maketitle
\lipsum[1-2]
\showfig
\lipsum[3-5]

\textbf{Paragraph on page 2 (I want 3) anchoring a big figure} \\
\lipsum*[6][1-3]
\begin{comment}
\begin{figure}
   FIXME This ends up on page 3, but I want it on page 2
  \rule{\textwidth}{.8\textheight}
\end{figure}
\end{comment}
%\showfig
\lipsum*[6][4-100]

\textbf{ Some more text that ends up on pages 2 and 4 (I want 3 and 4)} \\
\lipsum[7-10]

\end{document}

以上是对您的 MWE 的半修改。

答案2

浮点数总是按照其创建顺序按类型打印。另一方面,可以在图形前插入一个表格,或者专门创建一个新的浮点类型来绕过队列。

此解决方案使用了 afterpage,它将始终打印在下一页(或列)上。请注意,\parindent与图形不同,它没有设置为 0pt。

\documentclass[a4paper]{scrartcl}
\usepackage[showframe]{geometry}
\usepackage{scrlayer-scrpage}
\usepackage{afterpage}
\usepackage{lipsum}
\title{Hello world} \author{John Doe} \date{}
\begin{document}
\maketitle
\lipsum[1-5]
\lipsum*[6][1-3]
\afterpage{\vspace*{0pt plus 1fil}\noindent\rule{\textwidth}{.8\textheight}\newpage}% will put \rule on next page
\lipsum*[6][4-100]
\lipsum[7-10]

\end{document}

相关内容