# Latex Figures appear before text in pandoc markdown

I am using pandoc to convert markdown to pdf, but I need to place some figures with more formating than the

  ![Alt text](image.png)


so I use something like this:

  # Document with figures

This document have figures but they appear before the title

\begin{figure}
\centering
{\includegraphics[width=2.5in]{some_figure.png}}
\caption{Comparing Dq from different p-model}
\end{figure}


and then I use the following command:

 pandoc -H test_fig.sty test_fig.md -o test_fig.pdf


and test_fig.sty have:

 \usepackage{graphicx}


the resulting pdf have first the figure and then the title.

-

## migrated from stackoverflow.comMar 10 '13 at 1:37

This question came from our site for professional and enthusiast programmers.

This is most likely because the figure environment floats, which is not what you're after. For this you have a couple of options:

1. Add the float package which provides the H float specifier, allowing you to use

\usepackage{float}% http://ctan.org/pkg/float
%...

\begin{figure}[H]
%...
\caption[<ToC>]{<regular>}
\end{figure}


stopping the float from moving around.

2. Add the caption (or the super-tiny capt-of) package and wrap your figure inside a minipage to keep the image and caption together. Use it as follows:

\usepackage{caption}% http://ctan.org/pkg/caption
%\usepackage{capt-of}% http://ctan.org/pkg/capt-of
%...

\noindent\begin{minipage}{\textwidth}
%...
\captionof{figure}[<ToC>]{<regular>}
\end{minipage}
%...


For more information on the placement of figures, see How to influence the position of float environments like figure and table in LaTeX? and Keeping tables/figures close to where they are mentioned.

The above proposal are purely LaTeX-driven.

-

Pandoc generates tex output with all of the tables and figures defined with the [htbp] placement options. This isn't a massive problem though, since you can use sed to change all instances of [htbp] to [H] e.g.

sed -i 's/begin{figure}$htbp$/begin{figure}$H$/g' tex/out.tex


Basically, just use pandoc to generate the tex output, then run your tex engine afterwards (twice) and you'll be good to go. You'll also need to make sure that the float package is actually being used in your template file (which contains your tex preamble):

\usepackge{float}


NOTE: Although in the default latex template, the float package is used, but it's only used if you're actually using tables:

$if(tables)$
\usepackage{ctable}
\usepackage{float}
$endif$


...I just moved \usepackage{float} to the line outside of the if block in my custom template.

-
Do you mean s/begin{figure}$[htbp]*$/begin{figure}[H]/g ? – Marc van Dongen Nov 5 '13 at 14:38
Nope, the square brackets in this case are literal and not a regex character grouping; [htbp] should become [H]. – agosse Nov 6 '13 at 13:03
Wouldn't the $[htbp]$' be more robust? It would work for placement involving _any_ subset of htbp. (BTW I use sed a lot. I wasn't aware of the-i flag. Useful that.) – Marc van Dongen Nov 6 '13 at 13:08
Sure it will be more robust - in case pandoc changes the way it writes figures in the future. For now, probably not needed, but do whatever makes you happy. :-) – agosse Nov 7 '13 at 12:17

I don't like the solution to use a 2-step compilation (Latex -> sed -> pdf).

You can overwrite the figure environment in your Latex template:

% Overwrite \begin{figure}[htbp] with \begin{figure}[H]
\usepackage{float}
\let\origfigure=\figure
\let\endorigfigure=\endfigure
\renewenvironment{figure}[1][]{%
\origfigure[H]
}{%
\endorigfigure
}


In this way you can still use the direct pdf generation.

-

A simple solution is to add a line with a backslash and space immediately after the figure, followed by a blank line:

![Alt text](image.png)
\

Some text after the figure...
`

Do not forget the space after the backslash! This seems to work on Pandoc 1.12.4.2.

-
Worked for me, nice tips for little projects (reports, articles) without to have to override templates. Thanks – Metal3d Nov 16 '15 at 13:43
I like this one too - but am curious as to what that backslash does? – Tom Kimber Dec 22 '15 at 12:14
In Pandoc Markdown, a backslash followed by a newline generates a hard line break. The tex file will have an inline image (no figure environment) followed by a hard line break. The image will be without caption. The same can be achieved with spaces add the and of the line (after the image) and then no empty lines before the next paragraph. – hlg Feb 4 at 10:02