我知道,这是一个老话题,我已经了解了 LaTeX 中浮动环境的一般功能。我想给它尽可能多的自由,并且总体上喜欢放置浮动的方式。
但我在写论文时有一个限制:图表必须放在第一个参考文献的页码之前或页码上。例如,我在第 3 页上有对图 1 的引用,那么图表可以放在第 1、2 或 3 页,但不能放在 >=4 页。
我知道 LaTeX 永远不会将浮动元素放置在源代码中第一次出现的位置之前,因此在源代码中,浮动元素必须位于引用之前。但我如何控制它不会移动到太远的末尾?将所有浮动元素都放在节的开头是没有意义的,因为其中一些会放置得太早。
我希望你能帮助我解决这个问题。
非常感谢。
答案1
浮动行为和交换非常复杂。我的建议是像平常一样布局文档,而不考虑您提到的任何要求\label
。\ref
然后,最后再担心可能会改变布局。
我的建议是利用它\ref
并让它告诉你它\label
引用的是出现在当前位置之前还是之后。下面我重新定义了\ref
如果它不符合你的限制,就会发出警告 - 你可以在编译结束时轻松检查。由于建议的解决方案使用\label
-\ref
系统本身,你可能必须在第一次编译时至少编译两次。
这是一个可以调整的最小示例:
\documentclass{article}
\usepackage{lipsum,graphicx,refcount}
\makeatletter
\setrefcountdefault{99999}
\let\oldref\ref
\renewcommand{\ref}[1]{%
\label{#1*}%
\ifnum\getpagerefnumber{#1*}<\getpagerefnumber{#1}% \ref on page < \label
\@latex@warning{...figure `#1' is on page \getpagerefnumber{#1},
but referenced on \getpagerefnumber{#1*}}%
\fi
\oldref{#1}%
}
\makeatother
\begin{document}
\sloppy% Just for this example
\tableofcontents
\listoffigures
\section{A section}
\lipsum[1-50]
Figure~\ref{fig:first}. % This is fine...
Figure~\ref{fig:second}.% ...but this creates a warning.
\begin{figure}[ht]
\centering\includegraphics[width=.5\linewidth]{example-image}
\caption{A figure}\label{fig:first}
\end{figure}
\lipsum[1-50]
\begin{figure}[ht]
\centering\includegraphics[width=.5\linewidth]{example-image}
\caption{A figure}\label{fig:second}
\end{figure}
\lipsum[1-50]
\begin{figure}[ht]
\centering\includegraphics[width=.5\linewidth]{example-image}
\caption{A figure}\label{fig:third}
\end{figure}
\lipsum[1-50]
\begin{figure}[ht]
\centering\includegraphics[width=.5\linewidth]{example-image}
\caption{A figure}\label{fig:fourth}
\end{figure}
\lipsum[1-50]
\begin{figure}[ht]
\centering\includegraphics[width=.5\linewidth]{example-image}
\caption{A figure}\label{fig:fifth}
\end{figure}
\lipsum[1-50]
\begin{figure}[ht]
\centering\includegraphics[width=.5\linewidth]{example-image}
\caption{A figure}\label{fig:sixth}
\end{figure}
\lipsum[1-50]
\begin{figure}[ht]
\centering\includegraphics[width=.5\linewidth]{example-image}
\caption{A figure}\label{fig:seventh}
\end{figure}
Figure~\ref{fig:sixth}. % This is fine...
Figure~\ref{fig:seventh}.% ...but this is not, as the figure was pushed to the following page.
\end{document}
输出.log
(某处):
LaTeX 警告:...图“fig:second”位于第 20 页,但在第 10 页被引用 放第 31 行。
通过警告,您可以识别所使用的标签、相应的页码(和\label
)\ref
以及输入文件中的行。
在上面的例子中,第一个 s 和后续的\ref
s之间应该没有区别。\label