3

我正在尝试使用 r markdown、kable 和 kableExtra 输出乳胶表。当我使用选项 row.names=FALSE 而不是 row.names=TRUE 时,乳胶代码会生成 \vphantom 代码,这会产生创建 pdf 的错误。似乎问题与 row_spec 选项有关。

这是 Rmarkdown 代码(.Rmd 文件):

---
title: "Test"
output:
pdf_document: 
fig_caption: true
keep_tex: true
---

{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)


{r}
library(knitr)
library(kableExtra)

temp <- mtcars[1:5,1:5]

kable(temp, format = "latex", booktabs = F,row.names=F)  %>%
kable_styling(position = "center") %>%
row_spec(1, bold = T, background = "red")

错误是:

!扫描使用 \check@nocorr@ 时发现禁止的控制序列。\par l.105 ...color{red} \textbf{21.0 &\vphantom{1} 6} & \textbf{160} & \textbf{...

您对正在发生的事情有任何疑问吗?

4

1 回答 1

3

这是由数据框中的重复行引起的,因为第 1 行和第 2 行是相同的。

查看row_spec_latex的代码,当 kableExtra 用于 kable 表时,它会检查重复的行。如果找到,它会将vphantom参数插入到fix_duplicated_rows_latex内部函数中。然后这个 vphantom 插入会破坏textbf函数的格式。

这似乎是一个小错误,因此值得在 kableExtra 中将其报告为问题:https ://github.com/haozhu233/kableExtra 。我确信vphantom添加它是有充分理由的,但怀疑这是预期的结果。

支持代码:

---
output: pdf_document
---

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

library(knitr)
library(kableExtra)
temp <- mtcars[1:5,1:5]
```

```{r}
# Keeping the row names (means all rows are unique)
kable(temp, format = "latex", booktabs = F)  %>%
  kable_styling(position = "center") %>%
  row_spec(1, bold = T, color = "red")
```

```{r}
# Highlighting second row (which doesn't have the vphantom statement)
kable(temp, format = "latex", booktabs = F, row.names=F)  %>%
  kable_styling(position = "center") %>%
  row_spec(2, bold = T, color = "red")
```

在此处输入图像描述

于 2018-02-28T00:06:21.563 回答