诊断 R 包构建警告:“创建 PDF 版本时出现 LaTeX 错误”

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

构建软件包时,我收到以下警告:

* checking PDF version of manual ... WARNING
LaTeX errors when creating PDF version.
This typically indicates Rd problems.

我什至不知道如何开始诊断这个问题。 有没有一个工具可以告诉我问题出在哪个 .Rd 文件中?

在检查文档步骤中,我没有收到任何有关我的 Rd 文件的警告......

r error-handling package
8个回答
76
投票

尝试

R CMD Rd2pdf mypackage
创建手册,也可能设置
--no-clean
选项来保留临时文件。这应该允许您调试触发错误的 LaTeX 代码。


19
投票

虽然@Dirk的答案也帮助我解决了问题,但我想添加一点,这可能对最近的更新者特别有帮助。也就是说,更新到 3.1.3 后还没有遇到其他 LaTeX/R 麻烦的人。这个问题比建筑问题更普遍。对我来说,在 OS X 上,问题是

R CMD Rd2pdf
以及
R CMD CHECK
预期
texi2dvi
位于
/usr/local/bin
,而它位于
/usr/bin
。 符号链接有助于解决该问题。在终端类型上:

# to check whether the same issue exists for you
which texi2dvi
# if so
cd /usr/local/bin
ln -s /usr/bin/texi2dvi

当然,如果第一行返回其他内容,您需要调整此处的符号链接。


7
投票

根据评论和我自己的经验得出结论,问题通常似乎是缺少某些 TeX 字体,最常见的是

  • inconsolata.sty
  • upquote.sty

首先你必须找到存储 TeX 字体的正确目录 - 在我的例子中是:

C:\Program Files\R\R-3.3.0\share\texmf\tex\latex

然后您可以在这里下载:

只需将它们复制到相应的文件夹中,在许多情况下问题就会得到解决(我的情况也是如此)。这应该适用于所有操作系统。


5
投票

...另一个原因是您还没有安装 MikTex。

  1. 此处下载 MikTex 并按照对话框提示进行安装。我发现默认值是合理的并且对我来说效果很好。

  2. 尝试再次构建 R 包。现在应该可以了。


2
投票

就我而言,运行

devtools::check()
devtools::document()
时都没有错误,但是运行
R CMD check mypackage_version.tar.gz
时出现错误:

* checking PDF version of manual ... WARNING
LaTeX errors when creating PDF version.
This typically indicates Rd problems.
LaTeX errors found:
* checking PDF version of manual without hyperrefs or index ... ERROR

RStudio Community 的这个问题中,他们指出了 LATEX 安装的问题。 我在 R markdown Cookbook 中建议了 LATEX 安装:TinyTex。 我通过在 R 控制台中运行解决了该问题

tinytex::latexmk(file = "../mypackage.Rcheck/mypackage-manual.tex")

此命令自动更新我的 LATEX 安装,因此创建了输出文件 mypackage-manual.pdf。此后,我在运行时没有收到任何与 PDF 相关的错误

R CMD check
:

* checking PDF version of manual ... OK
* DONE

1
投票

如果您使用的是 Ubuntu,只需通过以下命令安装 Tex Live:

apt-get install texlive
如果您使用 Rstudo,请重新启动它。


1
投票

此错误通常是由包中的 Unicode 字符引起的。在这些情况下,错误消息可能如下所示。

See the inputenc package documentation for explanation.
Type  H <return>  for immediate help.
! Package inputenc Error: Unicode character  (U+009D)
(inputenc)                not set up for use with LaTeX.

您可以使用

tools::showNonASCIIfile()
查找包中的任何 Unicode 字符。这是检查函数和文档中这些字符的简单方法:

# functions
functions <- list.files(path = './R', all.files = T, recursive = T, full.names = T)
lapply(X=functions, FUN = tools::showNonASCIIfile)

# documentation
docs <- list.files(path = './man', all.files = T, recursive = T, full.names = T)
lapply(X=docs, FUN = tools::showNonASCIIfile)

0
投票

首先,@dirk-eddelbuettel 在当前问题中的方法确定了丢失的 tex 包(在我的例子中是“makeindex”)。

system("R CMD Rd2pdf --no-preview --output=./documentation-peek.pdf ." )

# ... <omitted pages of output> ...
# Warning in sys2(makeindex, shQuote(idxfile)) : '"makeindex"' not found
# Error in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet,  : 
#    unable to run 'makeindex' on 'Rd2.idx'
# Error in running tools::texi2pdf()

然后 @pedro-lima 在 https://stackoverflow.com/a/69968791/1082435 中的回答适用于我的具体案例。

tinytex::tlmgr_install("makeindex")
© www.soinside.com 2019 - 2024. All rights reserved.