在 kable 中更改文本颜色,在 Rmarkdown 中,在带有 % 标签的乳胶中导致编织时不需要的“\”继续 % 标签

changing text colour in kable, in Rmarkdown, in latex with % label leads to unwanted "\" proceeding % label when knit

我正在尝试在大型 Rmarkdown 文档中编写 table。 table 代表农场的疾病水平,因此有些以百分比表示。当疾病水平高于目标时,我想通过将字体颜色更改为红色来突出显示。当文本没有 % 标签时,这很好用,但是当我转义 % 标签时,PDF 文档中的 % 标签总是以不需要的“”开头。我是一名兽医,不是数据科学家,我在这上面花了很多时间,但找不到答案。

原始文档非常复杂,从许多来源提取数据以生成当前疾病水平和目标,使用闪亮的输入来确定各种选项,因此无法使用原始文档中的代码。但是我在下面制作了一个非常小的可重现示例

require(kableExtra)
require(scales)
library(knitr)
require(tidyverse)
knitr::opts_chunk$set(echo = TRUE)
MDF = data.frame(a = label_percent()(.07),b = label_percent()(.05))
MDF$a = as.character(MDF$a)
MDF$b = as.character(MDF$b)
MDF[1,] = apply(MDF[1,],2,function(f) gsub("%", "\\%", f))
MDF = MDF %>% mutate(a = cell_spec(a, color = ifelse(a > 6,"red","black")))
kable(MDF, "latex", escape = F, booktabs = T)

据我所知,问题是条件格式单元格中的百分号被转义了两次,一次是通过 gsub ,一次是通过 kable 本身,所以你最终得到在您的乳胶代码中插入了一个额外的 \textbackslash()。因此,解决您的问题的一种选择是仅手动转义您未应用条件格式的列中的百分号:

---
title: "Untitled"
output: pdf_document
---

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

```{r}
require(kableExtra)
require(scales)
library(knitr)
require(tidyverse)

MDF = data.frame(a = .07, b = .05) %>% 
  mutate(across(c(a, b), percent)) %>% 
  # Escape percent sign in column b only
  mutate(across(c(b), ~ gsub("%", "\\%", .x))) %>% 
  mutate(a = cell_spec(a, color = ifelse(a > 6,"red","black")))
  
kable(MDF, "latex", escape = F, booktabs = T)
```