有没有办法确保给定的浮动对象(例如图形)始终放置在输出 PDF 中的特定页面上?例如,“此图形应始终放置在第 2 页的顶部。”
我通常可以通过\begin{figure}[t]
然后在该环境中移动直到找到最终出现在所需输出页面上的位置来实现这种行为,但这感觉不是很有原则,而且每次我对前面的文本进行任何更改时,我可能都必须再次移动环境。
是的,我知道这在某种程度上违背了漂浮的目的 :-)
答案1
您可以将请求的页面隐藏在浮动的宽度中(使其比第 4 页的页面宽 4sp,或者启用双列支持,将值加倍,为第二列添加一个),然后调整t
在[htb]
参数中查找(2 的幂表示)的代码以报告t
此类过宽的浮动不存在,直到找到适当的页面。
\documentclass{article}
\usepackage{placeonpage}
\usepackage{lipsum}
\begin{document}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on page 4}
\placeonpage{4}
\end{figure}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on page 6}
\placeonpage{6}
\end{figure}
\lipsum\lipsum\lipsum\lipsum
\end{document}
两列示例
\documentclass[twocolumn]{article}
\usepackage{placeonpage}
\usepackage{lipsum}
\begin{document}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on top page 4}
\placeonpage{4}
\end{figure}
\begin{figure}[b]
\centering
\rule{3cm}{3cm}
\caption{A figure on bottom page 5}
\placeonpage{5}
\end{figure}
\begin{figure}[t]
\centering
\rule{3cm}{3cm}
\caption{A figure on top right page 6}
\placeonrightcolumn{6}
\end{figure}
\begin{figure*}[t]
\centering
\rule{7cm}{3cm}
\caption{A spanning figure on top page 8}
\placeonpage{8}
\end{figure*}
\lipsum\lipsum\lipsum\lipsum
\lipsum\lipsum\lipsum\lipsum
\end{document}
placeonpage.sty
\let\latex@getfpsbit\@getfpsbit
\def\@getfpsbit#1{%
\ifnum\numexpr2*\c@page\if@firstcolumn\else+1\fi\relax
<\numexpr\wd\@currbox-%
\ifdim\f@depth=\z@\columnwidth\else\textwidth\fi\relax
\@tempcnta\z@
\else
\latex@getfpsbit#1%
\fi
}
\def\placeonpage#1{%
\hrule height 0pt depth 0pt width \dimexpr\hsize+\numexpr2*(#1)\relax sp\relax}
\let\placeoleftcolumn\placeonpage
\def\placeonrightcolumn#1{%
\hrule height 0pt depth 0pt width \dimexpr\hsize+\numexpr2*(#1)+1\relax sp\relax}
答案2
一般来说,不是。您认为在代码中如何将图形放在 30 页文档的末尾,但期望它出现在第二页。
您可以使用非浮动图形并使用包\captionof
中的功能caption
为其添加标题。
类似于(纠正拼写错误并添加文本后)
\documentclass...
\usepackage{caption}
\begin{document}
Bunch of text
\includegraphics{...}
\captionof{Non floating illustration}
More text etc...