Rmarkdown图像超前于文本

8

我正在使用以下YAML设置编写一个Rmarkdown PDF文档:

---
output: 
  pdf_document:
    fig_caption: true 
    fig_crop: true
    toc_depth: 3
  header-includes:
  - \usepackage{hyperref}
 ---

我在文档正文中使用了几个PNG图像,使用以下语法:

Paragraph 1..........

![Caption](path/image.png)

Paragraph 2....

当文档被渲染时,图像会按预期出现在文本中,在段落1段落2之间。然而,在某些情况下,我得到了一些不可预测的结果,其中渲染的图像出现在段落2之后,我无法解决它。

6个回答

6

我遇到了同样的问题。如果你在图片周围加上“段落”标签,那么图片就会与文本在同一行显示。

Paragraph 1...

<p>
![](image.png)
</p>

Paragraph 2...

1
它适用于PDF。我正在将其编织为PDF,在添加了<p>标签后,我得到了正确的结果。 - troh
1
嗯...也许在pandoc中发生了一些奇怪的事情。但是<p>是HTML,而不是TeX,所以这是一个相当奇怪的hack。 - user3603486
对我来说不起作用 - undefined

4

在处理类似的问题时,我使用了 \FloatBarrier(来自 placeins 包)来控制位置。我不是最有经验的 knitrrmarkdownLaTeX 用户,但之前已经得到过成功。

基本上,这些图片会“浮动”,你可以通过设置屏障来控制它们不能浮动到哪里。这个描述简单粗糙,但你可能会发现这个技巧很有效。


2
\FloatBarrier 用于限制浮动,但我认为这不是 OP 所期望的。他希望图像根本不浮动。不幸的是,在编写 RMD 时,这是不可能的,请参见 Yihui 的此答案。此外,您应该添加 \FloatBarrier 需要 placeins 包。 - CL.
@user2706569,所以,至少按照我设想的解决方案,我所问的是不可能的? - Ryan Erwin
你可以在图片后使用\FloatBarrier,这会防止图像出现在障碍物之后。然而,“干净的LaTeX”解决方案是使用float包中的H位置。但是,在编写Markdown时不可能使用此方法。为什么要在想要PDF输出时编写Markdown?引用Yihu(上面的链接):“如果您选择Markdown因其简单性,则不应期望从中获得太多功能,即使使用强大的工具如pandoc。底线:Markdown不是LaTeX。它是为HTML而设计的,而不是LaTeX。” - CL.
你使用它是因为你在编写R代码,并且想要创建动态报告,对吧?就像我在回答中说的那样,我不是这些东西的专家;我仅仅碰巧为自己解决了一个类似的问题。在我看来,“你为什么不用LaTeX直接写呢?”是一个相当激烈的要求。注意你所询问的“为什么想要pdf时要使用markdown?”和@YiHui所建议的“别期望太多”的区别。这种区别是巨大而关键的。 - rbatt
@user2706569 请看上面(抱歉多余评论)。 - rbatt
@rbatt 我知道从Markdown转换到LaTeX需要(一些|很多|...)努力,我不想冒犯你的回答。我的观点是,似乎许多人编写Markdown的目标是生成PDF,然后他们想知道如何控制PDF的某些细节。然而,这不是Markdown的设计目的 - 基本上这些问题是XY问题。我建议使用LaTeX来解决“X”问题;您的答案为“Y”问题提供了(可能是最好的)解决方案。 - CL.

3

\ 新行似乎有效。

R的历史和概述

![R编程](Images/R.PNG)\ 新行

输入图像说明


1

&nbsp;会插入垂直间距

为了保持您的图题,确保在Rmarkdown文档中,![]仍然在单独的段落中(上下分别用空行隔开)

### Heading 1 ![This is my figure caption](`r fig_var`){width=400px} 

&nbsp;

### Heading 2

其中fig_var是一个包含图像完整路径的r变量


0

一个选项是添加

\newpage

以类似Floatbarrier的方式进行操作。这并不太优雅,但似乎可以工作。

为了更清晰地说明,考虑上面的例子:

Paragraph 1..........

![Caption](path/image.png)

Paragraph 2....

为了避免图片移动到第二段前面,你可以采取以下措施:
Paragraph 1..........

![Caption](path/image.png)

\newpage

Paragraph 2....

你能提供一个如何在问题中提供的代码示例中使用 newpage 的例子吗? - Tom Aranda

0

这个问题没有正确答案。

  1. 尝试添加 fig.show='hold' 以保持图像在应该的位置
  2. 段落可能被跳过,因为Latex会尝试使用最少的空间来适应文本/图像。

我使用了(1)解决了我的问题,并且为了“处理”(2),您可以根据段落1和2之前和之后的内容,在适当的位置使用\pagebreak

只有在看到pdf结果后才能完成此操作,通过更好地将相关图像适合于下一页(更多空间)。当然,这也意味着在p1、p2或图像之前或之后添加分页符(例如)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接