In LaTeX, is there a way to put a float automatically after where it is first referenced?

user66237 picture user66237 · Feb 13, 2009 · Viewed 12.1k times · Source

I am currently writing a long one-column document that contains a lot of floats (figures and tables). I know the usual b/h/p/t options for placing floats in latex. However, I was wondering if there exists a package or macro that would let me do the following automatically: place a float automatically right after it was first reference. So if the reference appears on the top of page x, then the float would most likely appear at the bottom of page x, or maybe at (the top of) page x+1. In any case it should not occur before the reference.

I know that this may be hard to achieve but then I am not a latex guru either...

(Note that this question is different from this one.)

Answer

ChrisN picture ChrisN · Feb 13, 2009

The LaTeX Companion says that the flafter package can be used to ensure that floats are never placed before their references. To use this, add the following to your document's preamble:

\usepackage{flafter}

Note that, according to this thread, what flafter does is ensure that the float never appears before its position in the LaTeX source code.

This may work well if your document only has a few floats. For documents with lots of floats, placement becomes much more difficult, and you may find that all your floats appear together at the end of the document or chapter, or you may receive a "Too many unprocessed floats” error. I suggest reading this page and this page in the UK TeX FAQ for more suggestions.