Визуализация таблицы kableExtra с цветами и символами Юникода в PDF с помощью RMarkdown - PullRequest
0 голосов
/ 03 июня 2018

Я недавно узнал, как создавать удивительные таблицы с 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, но когда я вставил этот точный код в файл RMarkdown, настроенный на вязку в PDF, это привело меня к часамкроличья дыра в попытке отладки различных латексных ошибок, связанных с символами юникода в таблице, числовыми знаками в спецификациях цвета, вызывающих проблемы, сносками, ошибками, которые указывают ! Misplaced \noalign., о которых мне еще предстоит выяснить источник, и т. д..

Я включу текст полного Rmd-файла в конце этого.Я на Mac, если это имеет значение.Использование BasicTex и tlmgr для установки отсутствующих латексных пакетов.

Есть ли (1) способ сохранить мою таблицу kableExtra, которая выглядит ТОЧНО, как я хочу, когда она отображается в RStudio, в масштабируемый файл PDF, который нене задействовать RMarkdown?Сегодня я поиграл с функцией write2pdf(), но снова столкнулся с проблемами юникода.Я также попытался связать его с html и преобразовать с помощью вызова pandoc, но это убрало большую часть необходимого мне форматирования таблицы.

Возможно, я упускаю какое-то простое решение, хотя ...или (2) кто-нибудь может мне сказать, какие изменения заставит этот код Rmd правильно отображать мою диаграмму в PDF?Сам код R работает нормально.Думаю, это какая-то проблема с латексом.

Большое спасибо за любую помощь.

---
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 Ответ

0 голосов
/ 04 июня 2018

Есть несколько проблем.

  1. cell_spec будет вставлять необработанный HTML-код, если вы не попросите его вставить код LaTeX.Для этого используйте format = "latex".

  2. Вам необходимо указывать символы в коде LaTeX, а не в разметке HTML.xelatex должен поддерживать такие вещи, как "\\symbol{9650}" для "&#9650", но я не смог ничего показать: возможно, у меня не установлены шрифты.Вместо этого вы можете использовать символы 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
...