编织成PDF时如何修复kableExtra中重叠的单元格背景?

How to fix overlapping cell background in kableExtra when knitting to PDF?

提问人:Ben_89 提问时间:10/26/2023 更新时间:10/26/2023 访问量:31

问:

我正在创建一个表格,其中包含我的 R Markdown 报告,该报告被编织成 PDF。我使用函数将一些简单的条件格式应用于一些运行良好的列。但是,当我编织成 PDF 时,结果是一个格式奇怪的单元格背景,它与我的行组标题略有重叠(见下图)。发生这种情况很烦人,所以我想知道是否有人可以将任何技巧添加到下面的示例代码中来解决这个问题?kableExtracell_spec()kableExtra

我是 LaTeX 编码的新手,仍然不太了解这门语言,所以非常感谢任何帮助!谢谢。

enter image description here

---
title: >
  `\vspace{-1.8cm}`{=latex}
header-includes: 
 - \usepackage{geometry}
 - \geometry{top=0.1in,left=0.1in,bottom=0.1in,right=0.1in}
 - \usepackage[default]{sourcesanspro}
 - \usepackage[T1]{fontenc}
 - \usepackage{fancyhdr}
 - \pagestyle{fancy}
 - \fancyhf{}
 - \addtolength{\headheight}{3.0cm}
 - \rhead{\LARGE Vertical Alignment of Header Text}
 - \fancypagestyle{plain}{\pagestyle{fancy}}
 - \renewcommand{\headrulewidth}{0pt}
mainfont: SourceSansPro
output: pdf_document
editor_options:
  chunk_output_type: console
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  echo = FALSE,
  message = FALSE,
  warning = FALSE,
  dev = "cairo_pdf"
  )
```

```{r}
library(tidyverse)
library(kableExtra)
```

```{r cars}
# Create example data.
set.seed(1)
x <- paste0("var", 1:10)
d <- data.frame(name = paste("Player", LETTERS[1:25]))
d[x] <- round(rnorm(25, 100, 30), 1)
d$group = rep(paste("Group", 1:5), each = 5)
```

```{r}
# Apply cell_spec() to a few columns.
tbl <- d %>%
  mutate(across(var5:var9,
                ~cell_spec(.x,
                           background = case_when(
                             .x > mean(.x) + sd(.x) ~ "#EAE2F6",
                             .x < mean(.x) - sd(.x) ~ "#FEFEDA",
                             .default = "white"
                             )
                           )
                ))
```

```{r}
# Table output.
kbl(tbl[, 1:11],
    booktabs = TRUE,
    escape = FALSE,
    align = c("l", rep("c", ncol(tbl) - 1))) %>%
  kable_styling(latex_options = c("HOLD_position"),
                font_size = 8.5) %>%
  add_header_above(c(" " = 1, "Header 1" = 4, "Header 2" = 3,
                     "Header" = 3)) %>%
  pack_rows(index = table(fct_inorder(tbl$group)), background = "#ED1B2F",
            color = "white", bold = TRUE)
```
r-markdown kable kableextra

评论


答: 暂无答案