我已经安装了 MacTex,并且正在尝试kable
使用 knitr/Rmarkdown 函数来格式化 PDF 中的表格。
当我输出我的数据时,kable(dt, format = 'latex')
它工作正常,但只要我尝试添加任何类型的样式(例如booktab = T
或kable_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 块),会发生什么情况?是的,kable
R 函数的一些选项会出现相同的“未定义控制序列”错误。
这意味着您(或 R)编写了一个控制序列(=命令,=宏),但它实际上尚不存在(未定义),因为\foo
它不是 TeX 原始命令,也不是 LaTeX 内核的宏,也没有在文档类中定义,也没有在包中定义,也没有在模板前言中定义......
如果您定义它,例如在使用之前\def\foo{Foo!}
或\newcommand\foo{Foo!}
现在使用时\foo
,LaTeX 就会知道它必须将控制序列更改为 PDF 中的“Foo!”,但除此之外......除了停止并警告您之外,LaTeX 还应该做什么?
对于生成 LaTeX 输出的 R 块,问题是一样的。例如,当您使用选项时booktabs=T
,R 会包含\toprule
中间.tex
文件 (*) 中的命令,但不包含 的定义。这是因为定义通常只应在前言中定义一次,而不是每次使用该命令时都定义一次。因此,您有责任提供定义,在本例中,加载定义 的\toprule
包booktabs
(使用\usepackage{booktabs}
) 。\toprule
(*) 在 Rstudio 中,转到Output Options
> Advanced
>Keep tex source file used to produce PDF
以便您可以检查中间文件中究竟输入了什么.tex
,并更清楚地看到问题。
几乎 100% 的 R 包产生的“未定义控制序列”都可以解决,包括上面的 CTAN 包,但请记住,任何定义也可以在 pandoc
LaTeX 模板中提供(直接或通过包),如default-1.17.0.2.tex
,或在定义的文档类中提供(如article.cls
)。上面的模板加载了一些非常常见的包,如amsmath
但不能包含您“可能”需要的每个包。
提供正确的环境仍然是您的工作。好消息是,您可以构建自己的pandoc
模板,甚至自己的文档类,包括您通常想要/需要的包(booktabs
、float
等),以避免在每个文档的 YAML 标头中加载大量包。