首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在用rmarkdown::kableExtra::column_spec()在循环中呈现笔记本时,()返回未定义的控制序列

在用rmarkdown::kableExtra::column_spec()在循环中呈现笔记本时,()返回未定义的控制序列
EN

Stack Overflow用户
提问于 2022-09-05 15:28:55
回答 1查看 172关注 0票数 1

我在R标记文档中使用针织品来创建pdf报告中的表。一栏包含冗长的产品描述,我通常会对其进行包装。由于某种原因,latex编译开始返回一个错误。

更新渲染成功一次,但是第二次呈现笔记本会导致错误。我真正的用例是一个循环,在这个循环中,我为不同的产品组多次呈现相同的笔记本。类似于bookdown中描述的用例,其中报告“针对一个国家的每个州”。

无法呈现pdf文档的可复制示例

文件/tmp/notebook.Rmd

代码语言:javascript
运行
复制
---
title: "Test document"
output: pdf_document
---

```{r setup}

图书馆(Dplyr)

代码语言:javascript
运行
复制
```{r}

虹膜%>%

代码语言:javascript
运行
复制
knitr::kable(format="latex") %>%
代码语言:javascript
运行
复制
kableExtra::column_spec(2, width = "10em")
代码语言:javascript
运行
复制

使用R命令将文件编译为pdf文档:

代码语言:javascript
运行
复制
rmarkdown::render("notebook.Rmd")

Update:第二次运行render命令以查看错误。

返回错误

代码语言:javascript
运行
复制
/usr/bin/pandoc +RTS -K512m -RTS notebook.knit.md --to latex --from markdown+autolink_bare_uris+tex_math_single_backslash --output notebook.tex --lua-filter /home/paul/R/x86_64-pc-linux-gnu-library/4.2/rmarkdown/rmarkdown/lua/pagebreak.lua --lua-filter /home/paul/R/x86_64-pc-linux-gnu-library/4.2/rmarkdown/rmarkdown/lua/latex-div.lua --self-contained --highlight-style tango --pdf-engine pdflatex --variable graphics --variable 'geometry:margin=1in'
[WARNING] Deprecated: --self-contained. use --embed-resources --standalone
! Undefined control sequence.
<argument> r|>{\raggedleft \arraybackslash
                          s                 }p{10em}|r|r|l
l.117 ...\raggedleft\arraybackslash}p{10em}|r|r|l}

Error: LaTeX failed to compile notebook.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See notebook.log for more info.

呈现到html很好。

代码语言:javascript
运行
复制
---
title: "Test document"
output: html_document
---

```{r setup}

图书馆(Dplyr)

代码语言:javascript
运行
复制
```{r}

虹膜%>%

代码语言:javascript
运行
复制
knitr::kable(format="html") %>%
代码语言:javascript
运行
复制
kableExtra::column_spec(2, width = "10em")
代码语言:javascript
运行
复制

这没有错误地呈现。

EN

Stack Overflow用户

回答已采纳

发布于 2022-09-05 17:44:44

在RStudio中,当我单击Knit时,它对我有效,但当我像您一样运行rmarkdown::render("notebook.Rmd")时,它就不起作用了。在一些人玩了一遍,看看区别是什么(特别是我要求一个latex_document而不是pdf_document,这样我就可以看到tex代码)之后,我发现Knit按钮添加了大量在rmarkdown::render()调用中不存在的额外依赖项。

我想我明白为什么有时候这对你有用。kableExtra在加载时设置所有额外的依赖项,但前提是在knitr LaTeX运行期间加载它。所以,当您第一次运行它时,它会工作,但是第二次,它已经被加载,所以它没有设置那些依赖项。它们需要在运行期间进行设置,不会从上一次运行中继续运行。

因此,解决方法是在调用kableExtra之前卸载rmarkdown::render()。这样,它将在处理文档的过程中加载,并且一切都应该是好的。通过这样做

代码语言:javascript
运行
复制
unloadNamespace("kableExtra")
rmarkdown::render("notebook.Rmd")

unloadNamespace("kableExtra")行也可以在第一次使用kableExtra之前放入文档本身。

代码语言:javascript
运行
复制
---
title: "Test document"
output: pdf_document
---

```{r setup}

图书馆(Dplyr)

unloadNamespace("kableExtra")

代码语言:javascript
运行
复制
```{r}

虹膜%>%

代码语言:javascript
运行
复制
knitr::kable(format="latex") %>%
代码语言:javascript
运行
复制
kableExtra::column_spec(2, width = "10em")
代码语言:javascript
运行
复制
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73611678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档