在 kableExtra table 单元格中更改文本规范/字体(粗体、斜体...)

Change bits of text specification / fontface (bold, italic,...) in a kableExtra table cell

我正在尝试在 rmakrdown 中格式化 ka​​bleExtra table 中的个别文本位,例如以下示例:

---
output: pdf_document
---
```{r, echo=FALSE}
knitr::kable(data.frame(char = c('Hey *italics*','Hello **bold**', 'Hi ~~strikethrough~~~'),
             num = c(1,2,3)))
```

但是,如果我使用 kableExtra

```{r, echo=FALSE}
library(kableExtra)
knitr::kable(data.frame(char = c('Hey *italics*','Hello **bold**', 'Hi ~~strikethrough~~~'),
             num = c(1,2,3)))
```

我会得到:

我知道 cell_spec, row_spec and column_spec 可以格式化整行列和单元格,但这不是我想要的。

我只想格式化特定单元格中的部分文本,但保留 kableExtra 的所有功能以设计我的 table。还有 text_spec(),但我没有找到任何关于如何在 table 中使用它的示例。

P.S。我不是那么先进,因此更喜欢工作示例。

解决此问题的方法是告诉 kable() 生成 Markdown table:

---
output: pdf_document
---
```{r, echo=FALSE}
library(kableExtra)
knitr::kable(data.frame(char = c('Hey *italics*','Hello **bold**', 'Hi ~~strikethrough~~~'),
             num = c(1,2,3)), format="markdown")
```

format="pandoc" 也可以,但是 format="latex"(我认为当涉及 kableExtra 时这里是默认设置)没有。

但是,正如评论中指出的那样,kableExtra 不支持 markdown,因此您无法从该包中添加所有不错的功能。如果你想要那样,唯一的解决方案可能是使用 LaTeX 标记而不是 Markdown 标记。即把输入改成这样:

---
output: pdf_document
header-includes:  \usepackage{soul}
---
```{r, echo=FALSE}
library(kableExtra)
knitr::kable(data.frame(char = c('Hey \textit{italics}','Hello \textbf{bold}', 
                                 'Hi \st{strikethrough}'),
             num = c(1,2,3)), escape = FALSE)
```

您需要 escape = FALSE 告诉 kable 不要将 LaTeX 标记显示为文本,而是将其留在那里供 LaTeX 解释。