如何更改 rmarkdown 中 kable table 中单元格的字体 (bold/italics)?

How to change fontface (bold/italics) for a cell in a kable table in rmarkdown?

有没有办法在 rmarkdown 中格式化 table 中的单个单元格?我正在使用 kable 生成一个 table 如下:

library(knitr)
kable(data.frame(c('a','b','c'),c(1,2,3)))

我想在最后一行加粗 "c" 并在 table 的末尾添加一条水平线。有什么指点吗?

使用 pander 突出显示单元格、行或列非常漂亮 straightforward:

> df <- data.frame(c('a','b','c'),c(1,2,3))
> emphasize.strong.cells(which(df == 3, arr.ind = TRUE))
> pander(df)

-------------------------------
 c..a....b....c..   c.1..2..3. 
------------------ ------------
        a               1      

        b               2      

        c             **3**    
-------------------------------

但是在 table 中添加水平线超出了 markdown table specifications 的范围。

只是将问题概括为包括其他字体。 Pandoc 提供了其他方法来轻松重新格式化文本,如 RMarkdown Cheatsheet:

中所述
  • 斜体可以使用*italics*
  • 实现
  • 粗体可以使用**bold**
  • 实现
  • 可以使用 ~~strikethrough~~
  • 来实现删除线

此输出将支持多种输出方式,包括PDFhtmlword:

这是一个基本示例:

---
output: pdf_document: default
---

```{r}
knitr::kable(data.frame(char = c('*a*','**b**','~~c~~'),
                 num = c(1,2,3)))
```

使用函数应用格式

为了更容易 select 单元格重新格式化,我整理了以下函数 format_cells

format_cells <- function(df, rows ,cols, value = c("italics", "bold", "strikethrough")){

  # select the correct markup
  # one * for italics, two ** for bold
  map <- setNames(c("*", "**", "~~"), c("italics", "bold", "strikethrough"))
  markup <- map[value]  

  for (r in rows){
    for(c in cols){

      # Make sure values are not factors
      df[[c]] <- as.character( df[[c]])

      # Update formatting
      df[r, c] <- paste0(markup, df[r, c], markup)
    }
  }

  return(df)
}

它允许用户 select 需要重新格式化的单元格行和列以及 select 要应用的样式。如果 row/column 中的多个值需要重新格式化,则可以同时 select 编辑多个单元格。这是一个例子:

library(tidyverse)

df <- data.frame(char = c('a','b','c'),
                 num = c(1,2,3))

df %>%
  format_cells(1, 1, "italics") %>%
  format_cells(2, 2, "bold") %>%
  format_cells(3, 1:2, "strikethrough") %>%
  knitr::kable()

Further Reading: the kableExtra package has been written to offer a lot of extra controls of styling of tables. However, the advice is different for the different types of output, and therefore there are different approaches for HTML and LaTeX

这也有效:第一个参数是行号,因此您可以通过编程方式将行加粗 或列使用 column_spec。

library(kableExtra)

library(tidyverse)


kable(data.frame(letter =c('a','b','c'),number =c(1,2,3)))%>%
  kable_styling()%>%
  row_spec(3,bold=T,hline_after = T)