我正在使用 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
环境浮动,这不是您想要的。为此,您有几个选择:
添加
float
包裹它提供了H
浮点说明符,允许你使用\usepackage{float}% http://ctan.org/pkg/float %... \begin{figure}[H] %... \caption[<ToC>]{<regular>} \end{figure}
阻止浮子移动。
添加
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 块外面的行。