How to Force a Figure or Table Position in LaTeX
To place a figure or table exactly where you wrote it, load \usepackage{float} and use \begin{figure}[H] with a capital H. For softer control, \begin{figure}[htbp] tells LaTeX to try here, then top, bottom, and a floats page. [H] forces the spot but can leave whitespace, so use it only where placement really matters.
Why it happens
figure and table are floats — LaTeX moves them to avoid ugly page breaks, so they may not sit where you typed them. The optional [..] argument is a preference, not a command: h = here, t = top, b = bottom, p = floats page. Plain [h] is only a hint; [H] from the float package is the true "exactly here".
Example
\usepackage{graphicx}
\usepackage{float}
% Exactly here:
\begin{figure}[H]
\centering
\includegraphics[width=.6\textwidth]{plot}
\caption{Pinned in place}
\end{figure}
% Softer preference (what LaTeX recommends):
\begin{figure}[htbp] ... \end{figure}Frequently asked questions
I get "Unknown float option `H`".
You used [H] without the float package. Add \usepackage{float} to your preamble — it defines the capital-H specifier.
What is the difference between [h], [!h] and [H]?
[h] is a weak "here if convenient"; [!h] tells LaTeX to try harder by relaxing its spacing rules; [H] (float package) forces the exact spot with no floating at all.
My figures pile up at the end of the document.
Too many un-placeable floats queue up. Use [htbp] instead of [h], add a \clearpage where appropriate, or pin key figures with [H].
Try the fix in LetX
Open the editor, paste your code, and compile in 1 second to see the error clear — free, in your browser.
Open LetX Free