使用 RMarkdown 将带有颜色和 unicode 字符的 kableExtra 表渲染为 PDF

标签 r latex r-markdown knitr kable

我最近学习了如何使用包含 unicode 符号的 kableExtra 制作很棒的表格,以便它们可以用作我的绘图的解释表。

library(dplyr)
library(kableExtra)

data.frame(
  Symbol = c("●", "●", "▲"),
  Description = c("bla bla bla", "bla bla bla", "bla bla bla"),
  Result = c("bla bla bla", "bla bla bla", "bla bla bla")
) %>%
  mutate(
    Symbol = cell_spec(Symbol, color = c("yellow", "pink", "pink"), escape = F)
  ) %>%
  kable(escape = F, align = c("c", "l", "l")) %>%
  kable_styling(full_width = F)

生成如下所示的漂亮表格:enter image description here

我现在想自动将其渲染成 PDF,但是当我将这段确切的代码粘贴到设置为编织成 PDF 的 RMarkdown 文件中时,这让我陷入了一个长达数小时的兔子洞,试图调试与相关的各种 latex 错误表中的 unicode 字符、导致问题的颜色规范中的数字符号、脚注、声明 的错误!错位的\noalign. 我还没有弄清楚来源等

我将在最后包含完整 Rmd 文件的文本。如果这有所作为,我正在使用 Mac。使用 BasicTex 和 tlmgr 安装缺少的 latex 包。

是否有 (1) 一种方法可以将我的 kableExtra 表保存到不涉及 RMarkdown 的可缩放 PDF 文件中,该表在 RStudio 中呈现时看起来完全符合我的要求?我今天尝试了 write2pdf() 函数,但又遇到了 unicode 问题。我还尝试将它编织成 html 并通过调用 pandoc 将其转换,但这删除了我需要的大部分表格格式。

也许我在那里缺少一些简单的解决方案,但是...或者 (2) 是否有人能够告诉我哪些更改会使此 Rmd 代码正确地将我的图表呈现为 PDF? R 代码本身工作正常。我猜这是某种 Latex 问题。

非常感谢您的帮助。

---
title: ""
output:
  pdf_document:
    latex_engine: xelatex
---

```{r, echo=FALSE, results="asis"}
# TODOREQ: add "much" grammars for acute levels
# TODOREQ: change "levels of concern" to the respective guideline name.
# TODO: Change to groupby/summarize
# TODO: Factor out package loading and global variables into a single setup file

# Packages
suppressMessages(library(ggplot2))
suppressMessages(library(extrafont))
suppressMessages(library(kableExtra))
suppressMessages(library(dplyr))


  table_info <- data.frame(Symbol=c("&#9650", "&#9670", "&#2795"),
                       Name=c("Name1", "Name2", "Name3"),
                       Description=c("Description1", "Description2",
                                     "Description3"),
                       Results=c("Bad", "Good", "Bad"),
                       Color=c("#ffde71", "#394f38",
                               "#09a2dd"))

  ktable <- table_info %>%
    mutate(Symbol = cell_spec(Symbol, color = Color, escape = FALSE)) %>%
    select(-Color) %>%
    kable(escape = FALSE, align = c("c", "l", "l")) %>%
    kable_styling(full_width = FALSE)

  ktable


```

最佳答案

有几个问题。

  1. cell_spec 将插入原始 HTML 代码,除非您要求它插入 LaTeX 代码。使用 format = "latex" 来做到这一点。

  2. 您需要在 LaTeX 代码中指定符号,而不是 HTML 标记。 xelatex 应该支持 "\\symbol{9650}" for "▲",但我无法显示任何内容up: 也许我没有安装字体。相反,您可以使用 AMS 符号;实心圆是 "$\\bullet$",向上的实心三角形是 "$\\blacktriangle$"。我没有查你的其他人,但如果你幸运的话,你会在 https://www.rpi.edu/dept/arc/training/latex/LaTeX_symbols.pdf 中找到他们.

  3. 常规的 kable 表格在 LaTeX 中很难看;使用 booktabs = TRUE 选项以获得更好的选项。

所以这就是您的 ktable 规范应该是这样的:

  table_info <- data.frame(Symbol=c("$\\bullet$", "$\\bullet$", "$\\blacktriangle$"),
                       Name=c("Name1", "Name2", "Name3"),
                       Description=c("Description1", "Description2",
                                     "Description3"),
                       Results=c("Bad", "Good", "Bad"),
                       Color=c("#ffde71", "#394f38",
                               "#09a2dd"))

  ktable <- table_info %>%
    mutate(Symbol = cell_spec(Symbol, color = Color, format = "latex", 
                              escape = FALSE)) %>%
    select(-Color) %>%
    kable(escape = FALSE, align = c("c", "l", "l"), booktabs = TRUE) %>%
    kable_styling(full_width = FALSE)

  ktable

关于使用 RMarkdown 将带有颜色和 unicode 字符的 kableExtra 表渲染为 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670838/

相关文章:

r - 在 lyx 中使用 tikzDevice 不起作用

r - 当函数生成 LaTeX 代码时,我想在 RMarkdown 文档中显示 LaTeX 结果

knitr - 将 rmarkdown 文档编织到投影仪演示文稿时如何使用不同目录中的引用书目?

java - 将稀疏矩阵从 R 移至 Java

r - 根据现有变量的值创建特定数量的新变量

r - 在向量的每个分量后面添加 "\\\hline "

R markdown ioslides 代码块的增量模式

r - 在 ggplot2 中添加标签并更改 x 轴刻度

r - 使用 Rs mongolite 正确(插入?更新?)将数据添加到现有集合

java - 在 java 中替换 bibtex 或 latex {\dg} 字符串命令