Pandoc Markdown 中的 Latex 图形出现在文本之前

Pandoc Markdown 中的 Latex 图形出现在文本之前

我正在使用 pandoc 将 markdown 转换为 pdf,但我需要放置一些比

  ![Alt text](image.png)

所以我使用这样的东西:

  # 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}

然后我使用以下命令:

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

并且 test_fig.sty 有:

 \usepackage{graphicx}

生成的 pdf 首先有图形,然后有标题。

答案1

这很可能是因为figure环境浮动,这不是您想要的。为此,您有几个选择:

  1. 添加float包裹它提供了H浮点说明符,允许你使用

    \usepackage{float}% http://ctan.org/pkg/float
    %...
    
    \begin{figure}[H]
    %...
    \caption[<ToC>]{<regular>}
    \end{figure}
    

    阻止浮子移动。

  2. 添加caption(或超小capt-of) 包并将您的图形包裹在内,minipage以使图像和标题保持在一起。使用方法如下:

    \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}
    %...
    

有关图形放置的更多信息,请参阅如何影响 LaTeX 中图形和表格等浮动环境的位置?将表格/图片放在靠近提及的地方

上述提议纯粹由 LaTeX 驱动。


如果您想在 pandoc 中管理它,请考虑将以下内容添加到名为的文件中float_adjustment.tex并将其放在您的项目文件夹中:

\usepackage{float}
\floatplacement{figure}{H}

然后使用 pandoc 标头将此文件作为序言的一部分包含进去

---
title: “标题”
作者:“一位作者”
日期:“`r 格式(Sys.time(),'%d %B %Y')`”
输出:
  rmarkdown::pdf_document:
    fig_caption:是的        
    包括:  
      in_header: 图形放置.tex
---

所有数字都应通过 ERE 浮点规范强制就位[H]

答案2

一个简单的解决方案是添加一行反斜杠和空格紧跟在数字之后,后面跟着一个空白行:

![Alt text](image.png)
\ 

Some text after the figure...

不要忘记反斜杠后的空格!这似乎在 Pandoc 1.12.4.2 上有效。

编辑:正如评论中指出的那样,这将抑制图形标题。

答案3

我不喜欢使用两步编译(Latex -> sed -> pdf)的解决方案。

您可以覆盖数字Latex 模板中的环境:

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

这样你仍然可以使用直接pdf生成。

答案4

Pandoc 生成 tex 输出,其中包含使用放置选项定义的所有表格和图形[htbp]。不过,这不是一个大问题,因为您可以使用 sed 将所有实例更改[htbp][H]例如

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

基本上,只需使用 pandoc 生成 tex 输出,然后运行 ​​tex 引擎(两次),就可以了。您还需要确保该float包确实在您的模板文件(包含您的 tex 前言)中使用:

\usepackge{float}

注意:虽然在默认的 Latex 模板中float使用了该包,但它仅在您实际使用表格时才使用:

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

...我只是移动\usepackage{float}到了自定义模板中 if 块外面的行。

相关内容