Rmarkdown Latex如何在输出PDF时对齐图片和kbl表格?

3

我有以下的 Rmarkdown 试验:

---
title: "Test kableExtra"
date: "3/20/2021"
output: pdf_document
classoption: landscape
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(kableExtra)

```

# R Markdown

```{r echo=FALSE}
library(knitr)
library(xtable)

dt <- mtcars[1:5, 1:6]

t1 <- kbl(dt, booktabs = T)
t2 <- kbl(dt, booktabs = T)

t3 <- ggplot(dt,aes(x=mpg,y=cyl)) +
  geom_point()

png(file="plot1.png",width=200,height=200)
print(t3)
dev.off() # close the png file

```
Some Text

\begin{table}[!h]
    \begin{minipage}{.5\linewidth}
      \centering
```{r echo=FALSE}
t1
```
\end{minipage}%
    \begin{minipage}{.5\linewidth}
      \centering
    \includegraphics[width=\textwidth]{plot1.png}
    \end{minipage}
\end{table}

输出结果

当您编织它时,它可以正常工作,但我希望图形和表格在顶部对齐。 有什么好主意吗?

如果您有更好的想法将ggplot放在kbl表旁边,欢迎交流!

谢谢, 迈克尔

1个回答

2
以下代码可能会有所帮助:
---
title: "Test kableExtra"
date: "3/20/2021"
output: pdf_document
header-includes:
  - \usepackage{multicol}
  - \newcommand{\btwocol}{\begin{multicols}{2}}
  - \newcommand{\etwocol}{\end{multicols}}
classoption: landscape
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(kableExtra)
```

# R Markdown

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis 
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore 
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.

\btwocol

```{r echo=FALSE, results="asis", message=FALSE}
# sample data
dt <- mtcars[1:5, 1:6]

# create the table
t1 <- kable(dt, booktabs = TRUE)

# create the plot
t3 <- ggplot(dt,aes(x=mpg, y=cyl)) +
  geom_point()

# print the table 
print(t1)

cat("\\columnbreak")

# print the plot
print(t3)

cat("\\pagebreak")
```

\etwocol

enter image description here

注意事项:

  1. 概念上的解决方案在这里被提出,但我无法重现那里的代码。

  2. 为了留下一个最小的例子,我简化了你的初始代码。也就是说,我删除了表格t2的代码以及对library(knitr)library(xtable)的调用。

  3. 对你的初始代码的其他更改包括:

    • 在Rmd文件的YAML部分的header-includes下调用LaTeX软件包和命令

    • 添加一些lorem ipsum文本,以更清楚地看到对象相互对齐的方式

    • 在生成表格和图表的R代码块中设置results="asis"

    • 使用函数kable()而不是kbl()。如果您使用kbl(),则表格与图表稍有偏差(我不知道为什么)。建议您使用这两个函数进行测试。


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