【问题标题】:Cannot knit rmarkdown file in PDF with kableExtra table including UTF characters无法使用包含 UTF 字符的 kableExtra 表在 PDF 中编织 rmarkdown 文件
【发布时间】:2021-06-04 10:46:27
【问题描述】:

在 Windows 10 上全新安装 R、Rtools、Rstudio 时,我无法在 PDF(pdflatex 或 xelatex)中编写以下 rmarkdown 文件,该文件包含在单元格中包含“é”字符的 kableExtra 表中。

---
title: "test"
output:
  pdf_document:
    keep_tex: yes
    latex_engine: pdflatex
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(kableExtra)
```
```{r reglementation-eu}
reglementation_table_eu <- data.frame(
  polluant = c(rep("PM10", 2), rep("PM25", 3), rep("O3", 4), rep("NO2", 3), rep("SO2", 3), "CO"),
  moyenne  = c("1 jour", "Année calendrier", rep("Annee calendrier", 3), rep("Maximum journalier de la moyenne glissante sur 8 heures", 2), rep("1 heure", 2), rep("1 heure", 2), "Annee calendrier", rep("1 heure", 2), "1 jour", "Maximum journalier de la moyenne glissante sur 8 heures"),
  limite   = c(rep("CO", 16)),
  comment  = c(rep("CO", 16))
)
validUTF8(reglementation_table_eu$moyenne)
kable(reglementation_table_eu, col.names = c("Polluant", "Période de moyenne", "Concentration légale", "Commentaires"), booktabs = T, align = "l", caption = "Europese kwaliteitsnormen voor de omgevingslucht ter bescherming van de menselijke gezondheid.") %>%
  column_spec(2, width = "2.5cm") %>%
  column_spec(3, width = "4.5cm") %>%
  column_spec(4, width = "4.5cm") %>%
  row_spec(0, bold = T) %>%
  collapse_rows(columns = 1, latex_hline = "full", valign = "top")
```

在PDF中编织时的错误信息是

Error in temp_sub(target_row, new_row, out, perl = T) : 'pattern' is invalid UTF-8 Calls: <Anonymous> ... column_spec -> column_spec -> column_spec_latex -> temp_sub

在 HTML 中编织完美工作,除了函数 validUTF8 返回

## [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE

这可能是 PDF 中问题的线索。

我错过了什么吗?谢谢!

> sessionInfo()
R version 4.1.0 (2021-05-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19043)

Matrix products: default

locale:
[1] LC_COLLATE=English_Belgium.1252  LC_CTYPE=English_Belgium.1252    LC_MONETARY=English_Belgium.1252 LC_NUMERIC=C                    
[5] LC_TIME=English_Belgium.1252    
system code page: 65001

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] kableExtra_1.3.4 rmarkdown_2.8   

loaded via a namespace (and not attached):
 [1] rstudioapi_0.13   knitr_1.33        xml2_1.3.2        magrittr_2.0.1    rvest_1.0.0       munsell_0.5.0     colorspace_2.0-1  viridisLite_0.4.0
 [9] R6_2.5.0          rlang_0.4.11      stringr_1.4.0     httr_1.4.2        tools_4.1.0       webshot_0.5.2     xfun_0.23         htmltools_0.5.1.1
[17] systemfonts_1.0.2 yaml_2.2.1        digest_0.6.27     lifecycle_1.0.0   glue_1.4.2        evaluate_0.14     stringi_1.6.2     compiler_4.1.0   
[25] scales_1.1.1      svglite_2.0.0

【问题讨论】:

  • 它对我来说很好用。文件是否以 UTF-8 编码?
  • 您可以通过在 Rstudio 中打开您的 .R/.Rmd 文件来编辑编码,然后转到“文件”->“使用编码保存...”以选择您想要的文件编码方式.
  • 我通过使用 UTF-8 的 Notepad++ 打开它来检查它的编码。无论如何,我确实通过在 Rstudio 中编码 UTF-8 来保存它。但我仍然得到同样的错误:Error in temp_sub(target_row, new_row, out, perl = T) : 'pattern' is invalid UTF-8 Calls: &lt;Anonymous&gt; ... column_spec -&gt; column_spec -&gt; column_spec_latex -&gt; temp_sub
  • 如果我在 Rstudio 中运行 2 个 R 块,我不会收到任何错误。
  • 只是为了测试,使用编码 Windows-1252 或 ISO-8859-1 保存文件并以 PDF 编译至少会生成文件 test.knit.md,但在其上运行 pandoc 时会失败(显然是由于 é 字符的错误编码)。

标签: pdf windows-10 r-markdown kableextra


【解决方案1】:

我终于找到了原因,几乎是偶然的......

我想使用 Rstudio 的新笔记本电脑安装了全新的 Windows 10 Pro。我似乎默认情况下在“区域设置”窗口中激活了测试版功能“使用 Unicode UTF-8 支持全球语言”。这会导致在 PDF 中使用 UTF-8 字符编译 kable(Extra) 时出现前面的错误消息。 取消选择它解决了这个问题。

【讨论】:

    猜你喜欢
    • 2021-03-03
    • 2021-09-15
    • 2020-03-07
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2017-02-26
    • 2021-10-29
    • 2018-11-13
    相关资源
    最近更新 更多