0

With some org-mode code I am writing, I get the expected images placement when exporting to HTML5 format, but the wrong one when exporting to PDF.

This is the syntax I am using:

#+TITLE: Article title
#+DATE: 2023-02-02
#+AUTHOR: me <me@gmail.com>
#+EMAIL: me@gmail.com
#+LANGUAGE: en
#+OPTIONS: toc:2
#+LaTeX_HEADER: \author{me}
#+HTML_DOCTYPE: html5


** Chapter1 title

Bla bla 1...

#+CAPTION: Image caption
#+NAME:   fig:plot1
[[./MyArticle_files/plot1.png]]

bla bla 2:

#+NAME:   fig:plot2
[[./MyArticle_files/plot2.png]]

bla bla 3:

#+NAME:   fig:plot3
[[./MyArticle_files/plot3.png]]

bla bla 4.

** Chapter2 title

In HTML5, I get the text and the images in the same sequence as in the org-mode file. In PDF, I get:

** Chapter1 title

Bla bla 1...

bla bla 2:

bla bla 3:

bla bla 4.

** Chapter2 title

plot1.png

plot2.png

plot3.png

To make the conversion, I am using Pandoc:

pandoc -s ./text.org -t html5 -o ./text.html
pandoc -s ./text.org -o ./text.tex
pandoc -s ./text.org -o ./text.pdf

This is the tex conversion output:

% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[
]{article}
\usepackage{amsmath,amssymb}
\usepackage{lmodern}
\usepackage{iftex}
\ifPDFTeX
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
  \usepackage{unicode-math}
  \defaultfontfeatures{Scale=MatchLowercase}
  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
  \usepackage[]{microtype}
  \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
  \IfFileExists{parskip.sty}{%
    \usepackage{parskip}
  }{% else
    \setlength{\parindent}{0pt}
    \setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
  \KOMAoptions{parskip=half}}
\makeatother
\usepackage{xcolor}
\usepackage{graphicx}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
% Set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
\ifLuaTeX
\usepackage[bidi=basic]{babel}
\else
\usepackage[bidi=default]{babel}
\fi
\babelprovide[main,import]{english}
% get rid of language-specific shorthands (see #6817):
\let\LanguageShortHands\languageshorthands
\def\languageshorthands#1{}
\author{me}
\ifLuaTeX
  \usepackage{selnolig}  % disable illegal ligatures
\fi
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\urlstyle{same} % disable monospaced font for URLs
\hypersetup{
  pdftitle={Article title},
  pdfauthor={me \textless me@gmail.com\textgreater{}},
  pdflang={en},
  hidelinks,
  pdfcreator={LaTeX via pandoc}}

\title{Article title}
\author{me \textless me@gmail.com\textgreater{}}
\date{2023-02-02}

\begin{document}
\maketitle

\hypertarget{chapter1-title}{%
\subsection{Chapter1 title}\label{chapter1-title}}

Bla bla 1\ldots{}

\begin{figure}
\centering
\includegraphics{./MyArticle_files/plot1.png}
\caption{Image caption}
\end{figure}

bla bla 2:

\begin{figure}
\centering
\includegraphics{./MyArticle_files/plot2.png}
\caption{}
\end{figure}

bla bla 3:

\begin{figure}
\centering
\includegraphics{./MyArticle_files/plot3.png}
\caption{}
\end{figure}

bla bla 4.

\hypertarget{chapter2-title}{%
\subsection{Chapter2 title}\label{chapter2-title}}

\end{document}

The following line should be in charge of setting the figures placement:

\def\fps@figure{htbp}

and among the h, t, b and p parameters, h should have priority, which is the one specifying figures to be placed in the same position as indicated in the source file.

For some reason, this detail is not picked when converting from tex to PDF.

Pietro
  • 12,086
  • 26
  • 100
  • 193
  • 2
    What does the `.tex` file that Org mode produced look like? The first figure is a float (because of the caption), so it could "float" to wherever LaTeX want to put it, depending on its size and any placement options, but the rest should not be floats, so they should stay put relative to their surrounding text. But if they are all floats for some reason, then you might get what you see. So add the body of your `.tex` file to your question so we can see what's going on. – NickD Mar 08 '23 at 21:03
  • @NickD - Could it be this line: `\def\fps@figure{htbp}` – Pietro Mar 10 '23 at 12:22
  • 1
    `pandoc` apparently makes every image float, whereas the native Org mode exporter does that only for captioned images (the first one in your example): the others are not floats at all. So you have to make sure that your floats don't float :-) – NickD Mar 10 '23 at 13:24

1 Answers1

0

As explained here, add the following file (named, e.g., "disable_float.tex"):

\usepackage{float}
\let\origfigure\figure
\let\endorigfigure\endfigure
\renewenvironment{figure}[1][2] {
    \expandafter\origfigure\expandafter[H]
} {
    \endorigfigure
}

And call Pandoc with:

pandoc -H ./disable_float.tex -s ./orgtest.org -o ./orgtest.pdf
Pietro
  • 12,086
  • 26
  • 100
  • 193