将R Markdown中的图像和文本居中以获得PDF报告

时间:2014-07-10 13:19:48

标签: r markdown r-markdown

我想使用R Markdown将图像和/或文本居中,然后用它编写PDF报告。

我尝试过使用:

->Text<-

->![](image1.jpg)<-

这不是诀窍!完成这项任务的其他任何方式?

11 个答案:

答案 0 :(得分:34)

我有同样的问题。我已经尝试了上面提供的所有解决方案,但没有一个能够工作......但我找到了一个适合我的解决方案,并希望其他人能够使用。

<center>

![your image caption](image.png)

</center>

此代码将以图像和标题为中心。您必须在<center>,图片代码和</center>之间留下线条,否则图片将居中但标题将会消失。

如果您希望图片具有可点击链接,则可以嵌入

之类的内容
[![your image caption](image.png)](www.link_to_image.com)

但是,标题将不再出现。

因此,如果您想要一个可点击的标题,则必须分两步完成:

<center>

![](image.png)

[your image caption](www.link_to_image.com)

</center>

同样,确保每个命令之间都有空行。如果您希望图像和标题都可以单击,则将上面的中间和最后一个代码组合在一起。我希望这有点帮助。

答案 1 :(得分:32)

如果您将R代码块的输出居中,例如情节,则可以使用fig.align option in knitr

```{r fig.align="center"}
plot(mtcars)
```

答案 2 :(得分:10)

我使用Jonathan的答案谷歌将图像插入到LaTeX中,如果你想插入一个名为image1.jpg的图像并让它居中,你的代码可能在Rmarkdown中看起来像这样

\begin{center}
\includegraphics{image1}
\end{center}

请记住,LaTex并未要求提供文件扩展名(.jpg)。这个问题帮助我得到答案。谢谢。

答案 3 :(得分:8)

您可以在R Markdown中使用原始LaTeX。试试这个:

\begin{center}
Text
\end{center}

当然有一个问题:begin{...}\end{...}之间的所有内容都被Pandoc解释为原始LaTeX,所以你不能使用这种技术来集中R代码块的输出,或Markdown内容。

答案 4 :(得分:7)

您可以使用以下方法将整个文档的中心(或其他)对齐设置为Knitr选项:

knitr::opts_chunk$set(echo = TRUE, fig.align="center")

答案 5 :(得分:2)

如果您知道您的格式是PDF,那么我看不到HTML标记如何 可能会有用...它似乎绝对不适合我。其他纯LaTeX解决方案显然可以正常工作。但是Markdown的全部目的不是做LaTeX,而是允许我相信包括HTML在内的多种格式的编译。

因此,考虑到这一点,对我有用的是Nicolas Hamilton对Color Text Stackoverflow question的回答的一种变体:

#############
## CENTER TXT
ctrFmt = function(x){
  if(out_type == 'latex' || out_type == 'beamer')
    paste0("\\begin{center}\n", x, "\n\\end{center}")
  else if(out_type == 'html')
    paste0("<center>\n", x, "\n</center>")
  else
    x
}

我将其放入我的初始设置块中。 然后,我很容易在我的.rmd文件中使用它:

`r ctrFmt("Centered text in html and pdf!")`

答案 6 :(得分:2)

乔纳森(Jonathan)给出的简单解决方案是对作弊者潘多克(欺诈)的修改。代替直接的乳胶命令,例如

\begin{center}
Text
\end{center}

您可以在YAML标头中定义自己的命令:

header-includes:
- \newcommand{\bcenter}{\begin{center}}
- \newcommand{\ecenter}{\end{center}}

然后您使用:

\bcenter
Text and more
\ecenter

这对我来说很有效,它使整个文档居中,中间有许多代码块和markdown命令。

答案 7 :(得分:2)

基于fenced div,现在有一个更好的解决方案,更加优雅,已在pandoc中实现,如here所述:

::: {.center data-latex=""}
Some text here...
:::

您需要做的就是相应地更改css文件。例如,以下块完成了该工作:

```{cat, engine.opts = list(file = "style.css")}
.center {
  text-align: center;
}
``` 

(显然,您也可以直接将块的内容键入到.css文件中...)。
tex文件包含正确的居中命令。
此方法的关键优势在于,它允许在块内编写markdown代码。
在我之前的回答中,r ctrFmt("Centered **text** in html and pdf!")不会为“文本”一词加粗,但如果在fenced div内则会加粗。

对于图像等,lua过滤器可用here

答案 8 :(得分:2)

我正在使用 beamer 从 Rmarkdown 编织 pdf,对我有用的是:

\centering
![](image1.jpg)

答案 9 :(得分:0)

所有输出类型的答案都不能以相同的方式起作用,其他答案都集中在代码块内的图形绘图而不是外部图像上。

include_graphics()函数提供了一种简单的解决方案。唯一的参数是文件名(如果位于子文件夹中,则具有相对路径)。通过将echo设置为FALSEfig.align=center,可以得到理想的结果。

```{r, echo=FALSE, fig.align='center'}
include_graphics("image.jpg")
```

答案 10 :(得分:0)

没有一个答案有效,但这个

\newcommand{\bcenter}{\begin{center}}
\newcommand{\ecenter}{\end{center}}

但是接下来的问题是它只适用于一个数字,然后不适用于任何其他数字。

我刚开始学习 R 我知道这会很困难,但最糟糕的是,我可以参考的信息很少甚至没有。