在 R 中调试 LaTeX 错误 - 查看依赖项

在 R 中调试 LaTeX 错误 - 查看依赖项

我已经安装了 MacTex,并且正在尝试kable使用 knitr/Rmarkdown 函数来格式化 PDF 中的表格。

当我输出我的数据时,kable(dt, format = 'latex')它工作正常,但只要我尝试添加任何类型的样式(例如booktab = Tkable_stlying())我就会收到各种错误。

我和他们玩打地鼠游戏,不断地用 Google 搜索并尝试使用不同的包,但看不到尽头。

例如,以下是我收到的几个错误:

1)

! LaTeX Error: Unknown float option `H'.
l.87 \begin{table}[H]

因此我在 .Rmd 文件中添加了以下内容:

header-includes:
   - \usepackage{float}

2)然后我收到这个错误:

! Undefined control sequence.
l.89 \centering\rowcolors

因此我加入了:

- \usepackage[table]{xcolor}

又出现了一个错误,现在我已经遇到第五次了。在 Google 上查找错误越来越困难,因为它们越来越模糊和具体。有什么建议可以解释为什么如此基本的使用kable会导致 MacTex 出现这么多问题?

在 R 中的这个调用之后总是会出现错误:

/Applications/RStudio.app/Contents/MacOS/pandoc/pandoc +RTS -K512m -RTS Payments.utf8.md 
--to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash 
--output pandoc2b922cfdb1c9.pdf 
--template /Library/Frameworks/R.framework/Versions/3.3/Resources/library/rmarkdown/rmd/latex/default-1.17.0.2.tex 
--highlight-style tango --latex-engine pdflatex 
--variable graphics=yes --variable 'geometry:margin=1in' 

我不知道如何解释这一点,但看起来 pdflatex 存在问题?

答案1

如果您Hello \foo在 Rmarkdown 中输入(没有任何 R 块),会发生什么情况?是的,kableR 函数的一些选项会出现相同的“未定义控制序列”错误。

这意味着您(或 R)编写了一个控制序列(=命令,=宏),但它实际上尚不存在(未定义),因为\foo它不是 TeX 原始命令,也不是 LaTeX 内核的宏,也没有在文档类中定义,也没有在包中定义,也没有在模板前言中定义......

如果您定义它,例如在使用之前\def\foo{Foo!}\newcommand\foo{Foo!}现在使用时\foo,LaTeX 就会知道它必须将控制序列更改为 PDF 中的“Foo!”,但除此之外......除了停止并警告您之外,LaTeX 还应该做什么?

对于生成 LaTeX 输出的 R 块,问题是一样的。例如,当您使用选项时booktabs=T,R 会包含\toprule中间.tex文件 (*) 中的命令,但不包含 的定义。这是因为定义通常只应在前言中定义一次,而不是每次使用该命令时都定义一次。因此,您有责任提供定义,在本例中,加载定义 的\toprulebooktabs(使用\usepackage{booktabs}) 。\toprule

(*) 在 Rstudio 中,转到Output Options> Advanced>Keep tex source file used to produce PDF以便您可以检查中间文件中究竟输入了什么.tex,并更清楚地看到问题。

几乎 100% 的 R 包产生的“未定义控制序列”都可以解决,包括上面的 CTAN 包,但请记住,任何定义也可以在 pandocLaTeX 模板中提供(直接或通过包),如default-1.17.0.2.tex,或在定义的文档类中提供(如article.cls)。上面的模板加载了一些非常常见的包,如amsmath但不能包含您“可能”需要的每个包。

提供正确的环境仍然是您的工作。好消息是,您可以构建自己的pandoc模板,甚至自己的文档类,包括您通常想要/需要的包(booktabsfloat等),以避免在每个文档的 YAML 标头中加载大量包。

相关内容