通常,当有太多待处理的浮动材料(图形、表格等)时,LaTeX 会放弃将其放置在当前页面上,并生成一个“浮动页面”仅包含浮动元素,然后再继续处理主要内容。我想做的几乎就是这样,但不完全是:将单个图形放在自己的页面上前当前段落将继续。我不需要这个数字专门通过浮动机制传递,但如果需要的话,它可以。
不同于TeX.SE 上也有类似的问题,我希望图形在自己的页面上发出,而不是追溯性地塞进前一页的文本底部,所以从 TeX 的操作方式来看,这在原则上听起来并非不可能:当前页面尚未被 TeX 发送出去并被遗忘,完全有可能在它之前发送另一个页面。然而,我认识到 TeX 分页可能仍会决定分页前当前行或当前段落,因此仅从\shipout
主文档执行而不进入输出例程是不正确的(甚至忘记它也不能与页眉等很好地配合),并且我对 LaTeX 输出例程的秘密了解不够,无法对其进行修补以执行此操作。
(避免X/Y 问题:我实际上希望我的图表出现在跨页的左页,而我的文本出现在右页,但我认为在 LaTeX 中如果没有全局优化的分页。)
如果这相关的话,我目前正在使用 KOMA-Script,scrlayer-scrpage
和geometry
,但我愿意在必要时进行切换(也许除了怪兽即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}