!未定义的控制序列。与 R/Rmarkdown/knitr

问题描述 投票:0回答:5

我是新来的,但我在 R 上花了几个小时。我正在使用 R 包 Drake 与 knit 的组合。 但是我的 Rmarkdown 文件有错误。我有一个与 drake 示例类似的结构(https://github.com/ropensci/drake),我在其中加载数据,制作图表,然后绘制图表和统计分析的汇总表(使用 R 包) kableextra)。

当我选择 .tex 文件时,一切正常,我的 Rmarkdown 文件上有以下几行

  output: latex_document

  tables: true
  graphics: yes 

以及德雷克计划

report = rmarkdown::render(
knitr_in("Reports/report.Rmd"),
output_file = "report.tex")

但是当我想要一个已编译的 pdf 文件作为输出,其中 rmarkdown 标头包含以下几行:

output:
  pdf_document: 
    latex_engine: xelatex

tables: true
graphics: yes

和德雷克

report = rmarkdown::render(
knitr_in("Reports/report.Rmd"),
output_format = "pdf_document",
output_file = "report.pdf")

我收到一条错误消息:

`! Undefined control sequence.
<template> ...\hskip 1sp\d@llarbegin \columncolor 
                                                  [HTML]{BBBBBB}\ignorespaces 
l.178 \em{Predictors} & \em
                           {Coefficients} & \em{SE} & \em{P-value} & \em{Coe...

x fail report
Erreur : target report failed.
diagnose(report)$error$message:
  LaTeX failed to compile report.tex. See https://yihui.org/tinytex/r/#debugging for     debugging tips. See report.log for more info.`

于是我就在网上搜索了这个错误,并到易辉网站上进行了查找。我从计算机上卸载了所有 TexLive,我卸载并重新安装了 rmarkdown 和tinytex。但它不起作用并且仍然出现此错误。 该错误发生在 kableextra 包中的表之前。所以我发现其他人说添加

options(kableExtra.latex.load_packages = FALSE)
可以帮助或在 rmarkdown 的标题上添加
booktabs̀
makecell
。但它仍然不起作用:-/我错过了任何想法或潜在的链接吗?

更新可重现的示例

---
title: "Knitr and analysis"
author: "VJ"

output:
  pdf_document: 
    latex_engine: xelatex
    
tables: true
graphics: yes
---

# Example


```{r content, echo = FALSE, include=FALSE}
#tinytex::install_tinytex()
# output:
#   pdf_document: 
#     latex_engine: xelatex
#pdf_document or latex_document
#latex_engine: xelatex
library(glmmTMB)
library(tinytex)
library(drake)
library(tidyverse)
library(pander)
#options(kableExtra.latex.load_packages = FALSE)
library(kableExtra)
options(kableExtra.latex.load_packages = FALSE)
data("iris")
```


```{r analysis qty, echo = FALSE}
    #outputs table from four model 

fitFc = glmmTMB(Sepal.Width ~ Petal.Length +
                      Species, 
                    iris,
                    family = gaussian)



fitFc1 <- as.data.frame(coef(summary(fitFc))$cond) 
varname1 <- c("Intercept", "PL", "Plant 1 - Versicolor", "Plant 2 - Virginica")
fitFc1 <- cbind(varname1,fitFc1)
rownames(fitFc1) <- NULL

m1 <- fitFc1 %>% select(1,2,3,5) %>% 
  rename("Predictors" = 1,
         "Coefficients" = 2,
         "SE" = 3,
         "pvalue" = 4) %>% 
  mutate(pvalue = format.pval(pvalue, eps = .001, digits = 1)) %>% 
  mutate_at(vars(-pvalue, -Predictors), ~round(., 2))


#bold significant pvalue and then create output summary from glmm
m1$pvalue<- cell_spec(m1$pvalue, bold = ifelse(m1$pvalue< 0.05, TRUE, FALSE))

kable(m1, format = "latex", booktabs = T, caption = "Summary of linear model (LMMs).",
      col.names = c("Predictors",
                    "Coefficients",
                    "SE",
                    "P-value"), escape = F) %>% 
  kable_styling(latex_options = c("hold_position")) %>% 
  column_spec(2:4,background = "#BBBBBB") %>% 
  kable_styling() %>%
  add_header_above(c(" " = 1, "LMM1" = 3), bold = T) %>% 
  row_spec(0, bold = FALSE, italic = T)

```

这是我的 sessionInfo() 的详细信息

Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=fr_FR.UTF-8       LC_NUMERIC=C               LC_TIME=fr_FR.UTF-8       
 [4] LC_COLLATE=fr_FR.UTF-8     LC_MONETARY=fr_FR.UTF-8    LC_MESSAGES=fr_FR.UTF-8   
 [7] LC_PAPER=fr_FR.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C       

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

other attached packages:
 [1] kableExtra_1.1.0 tinytex_0.25     pander_0.6.3     sjstats_0.18.0   sjPlot_2.8.4    
 [6] glmmTMB_1.0.2.1  lmerTest_3.1-2   lme4_1.1-23      Matrix_1.2-18    ggeffects_0.15.1
[11] effects_4.2-0    carData_3.0-4    cowplot_1.0.0    forcats_0.5.0    stringr_1.4.0   
[16] dplyr_1.0.0      readr_1.3.1      tidyr_1.1.0      tibble_3.0.1     ggplot2_3.3.2   
[21] tidyverse_1.3.0  drake_7.12.4     purrr_0.3.4     

loaded via a namespace (and not attached):
 [1] minqa_1.2.4         colorspace_1.4-1    ellipsis_0.3.1      sjlabelled_1.1.6   
 [5] estimability_1.3    parameters_0.8.2    fs_1.4.2            rstudioapi_0.11    
 [9] farver_2.0.3        fansi_0.4.1         mvtnorm_1.1-1       lubridate_1.7.9    
[13] xml2_1.3.2          splines_4.0.2       knitr_1.29          sjmisc_2.8.5       
[17] jsonlite_1.7.0      nloptr_1.2.2.2      broom_0.5.6         dbplyr_1.4.4       
[21] effectsize_0.3.2    compiler_4.0.2      httr_1.4.1          emmeans_1.4.8      
[25] backports_1.1.8     assertthat_0.2.1    survey_4.0          cli_2.0.2          
[29] htmltools_0.5.0     prettyunits_1.1.1   tools_4.0.2         igraph_1.2.5       
[33] coda_0.19-3         gtable_0.3.0        glue_1.4.1          Rcpp_1.0.5         
[37] cellranger_1.1.0    vctrs_0.3.1         nlme_3.1-147        insight_0.9.0      
[41] xfun_0.16           rvest_0.3.5         lifecycle_0.2.0     statmod_1.4.34     
[45] MASS_7.3-51.6       scales_1.1.1        hms_0.5.3           parallel_4.0.2     
[49] TMB_1.7.18          RColorBrewer_1.1-2  yaml_2.2.1          stringi_1.4.6      
[53] bayestestR_0.7.2    filelock_1.0.2      boot_1.3-25         storr_1.2.1        
[57] rlang_0.4.7         pkgconfig_2.0.3     evaluate_0.14       lattice_0.20-41    
[61] labeling_0.3        tidyselect_1.1.0    magrittr_1.5        R6_2.4.1           
[65] generics_0.0.2      base64url_1.4       txtq_0.2.3          DBI_1.1.0          
[69] mgcv_1.8-31         pillar_1.4.4        haven_2.3.1         withr_2.2.0        
[73] survival_3.2-3      nnet_7.3-14         performance_0.4.8   modelr_0.1.8       
[77] crayon_1.3.4        utf8_1.1.4          rmarkdown_2.3.3     progress_1.2.2     
[81] grid_4.0.2          readxl_1.3.1        blob_1.2.1          reprex_0.3.0       
[85] digest_0.6.25       webshot_0.5.2       xtable_1.8-4        numDeriv_2016.8-1.1
[89] munsell_0.5.0       viridisLite_0.3.0   mitools_2.4```        
latex r-markdown knitr kableextra pander
5个回答
3
投票

当我收到此类问题时,我尝试做的第一件事就是在外部的 R 控制台中重现错误

drake
。通常,这些类型的错误不是由于
drake
本身造成的,而是由于
drake
需要您编写额外的自定义代码。在这种情况下,报告将使用 RStudio IDE 中的 Knit 按钮运行,而不是使用
rmarkdown::render("report.Rmd")
。这让我相信问题出在报告中的某个地方,我们的 TeX 配置,
tinytex
kable
kableExtra
pander
。我建议将此问题重新发布为 R Markdown/LaTeX 问题,而不是
drake
问题,以便您可以找到合适的人来帮助您。

详细说明我的尝试:

  1. 当我按下 RStudio IDE 中的 Knit 按钮时,报告正常运行并生成一个看起来合理的
    report.pdf
    文件。
  2. 当我在
    rmarkdown::render("report.Rmd")
    外部的 R 控制台中使用
    drake
    运行报告时,我得到
    "! Undefined control sequence. <template> ...\hskip 1sp\d@llarbegin \columncolor [HTML]{BBBBBB}\ignorespaces"
  3. 当我注释掉
    column_spec(2:4,background = "#BBBBBB")
    并再次运行
    rmarkdown::render("report.Rmd")
    时,我收到一个新错误:
    "! Extra alignment tab has been changed to \cr. <recently read> \endtemplate

另一件事:R 社区正试图淘汰

iris
数据集,因为它与优生学研究有关:https://armchairecology.blog/iris-dataset/https://www.garrickadenbuie.com/博客/让-从-iris 上移动/。请尽可能避免。
penguins
数据集是一个很好的替代品:https://github.com/allisonhorst/palmerpenguins。这是您的报告的一个版本,使用
penguins
而不是
iris

---
title: "Knitr and analysis"
author: "VJ"
output:
  pdf_document: 
    latex_engine: xelatex
tables: true
graphics: yes
---

# Example

```{r content, echo = FALSE, include=FALSE}
library(glmmTMB)
library(tinytex)
library(drake)
library(tidyverse)
library(pander)
library(kableExtra)
options(kableExtra.latex.load_packages = FALSE)
library(palmerpenguins)
```

```{r analysis qty, echo = FALSE}
fitFc <- glmmTMB(bill_length_mm ~ bill_depth_mm + species, penguins, family = gaussian)
fitFc1 <- as.data.frame(coef(summary(fitFc))$cond) 
fitFc1$variable <- rownames(fitFc1)
rownames(fitFc1) <- NULL
m1 <- fitFc1 %>%
  select(variable, everything()) %>%
  select(1,2,3,5) %>% 
  rename("Predictors" = 1, "Coefficients" = 2, "SE" = 3, "pvalue" = 4) %>% 
  mutate(pvalue = format.pval(pvalue, eps = .001, digits = 1)) %>% 
  mutate_at(vars(-pvalue, -Predictors), ~round(., 2))
m1$pvalue <- cell_spec(m1$pvalue, bold = ifelse(m1$pvalue< 0.05, TRUE, FALSE))
kable(
  m1,
  format = "latex",
  booktabs = T,
  caption = "Summary of linear model (LMMs).",
  col.names = c("Predictors", "Coefficients", "SE", "P-value"), escape = F) %>% 
  kable_styling(latex_options = c("hold_position")) %>% 
  column_spec(2:4,background = "#BBBBBB") %>% 
  kable_styling() %>%
  add_header_above(c(" " = 1, "LMM1" = 3), bold = T) %>% 
  row_spec(0, bold = FALSE, italic = T)
```

1
投票

与上面的@hamagust一样,我也在Rmarkdown中遇到了“LaTeX无法编译.tex”和“!未定义的控制序列”错误,但不涉及kable或kableextra。

经过一番痛苦之后,我发现问题与使用换行符“ ”在报告正文中(代码块之外)。相反,请遵循here提供的建议并使用“\linebreak”,并包含“空”字符(ALT+255)以防止降价抱怨没有“没有尽头”。

这是值得注意的,因为在代码块内的循环内,当包裹在

cat()
中时,换行符 似乎工作得很好。 ́_(ツ)_/́


0
投票

所以,我把我的请求放到了GitHub上,终于解决了,感谢朱浩!

我做了什么:

  • 删除
    options(kableExtra.latex.load_packages = FALSE)
  • 更新 kableExtra 包 v1.2 为
    devtools::install_github("haozhu233/kableExtra")
  • 重新启动我的 R 会话
  • 奔跑
report = rmarkdown::render(
    #envir = new.env(),  
    knitr_in("Reports/report.Rmd"),
    output_format = "pdf_document",
    output_file = "report.pdf") 

请注意,如果您更新软件包,它应该可以在有或没有

envir = new.env() 
的情况下工作

请参阅此处的原始答案:https://github.com/haozhu233/kableExtra/issues/501


0
投票

我有一个类似的(“LaTeX 无法编译 .tex”和“!未定义的控制序列”)问题要编织成 PDF(尽管不适用于 .docx),但不涉及

kableextra
,所以,我认为它可以是分享我的案例是如何解决的好主意......

我有:

   knitr::opts_chunk$set(
        echo = FALSE,
        message = FALSE,
        collapse=FALSE,
        warning = FALSE,
        results='asis'
    )

尝试在循环中包含一些字幕...herehere等几个地方列出的解决方案都不起作用,例如更新软件包或重新安装

TinyTeX
...

我注意到在你的情况的错误消息中有一个“忽略空格”,对于另一个问题,“|”,对我来说有“忽略空格” '...所以,我意识到它可能有一些格式和新行定义...

所以,经过一番尝试,我发现

results='asis'
造成了所有麻烦......删除它解决了。


-1
投票

!未定义的控制序列。 @currentHref ->表。 高度表

错误:LaTeX 无法编译 Chapter-1....tex。请参阅https://yihui.org/tinytex/r/#debugging了解调试技巧。有关详细信息,请参阅第 1 章....日志。 执行停止 如何在Rmarkdown中解决上述问题

© www.soinside.com 2019 - 2024. All rights reserved.