构建软件包时,我收到以下警告:
* checking PDF version of manual ... WARNING
LaTeX errors when creating PDF version.
This typically indicates Rd problems.
我什至不知道如何开始诊断这个问题。 有没有一个工具可以告诉我问题出在哪个 .Rd 文件中?
在检查文档步骤中,我没有收到任何有关我的 Rd 文件的警告......
尝试
R CMD Rd2pdf mypackage
创建手册,也可能设置 --no-clean
选项来保留临时文件。这应该允许您调试触发错误的 LaTeX 代码。
虽然@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
当然,如果第一行返回其他内容,您需要调整此处的符号链接。
根据评论和我自己的经验得出结论,问题通常似乎是缺少某些 TeX 字体,最常见的是
inconsolata.sty
和upquote.sty
首先你必须找到存储 TeX 字体的正确目录 - 在我的例子中是:
C:\Program Files\R\R-3.3.0\share\texmf\tex\latex
然后您可以在这里下载:
只需将它们复制到相应的文件夹中,在许多情况下问题就会得到解决(我的情况也是如此)。这应该适用于所有操作系统。
...另一个原因是您还没有安装 MikTex。
从此处下载 MikTex 并按照对话框提示进行安装。我发现默认值是合理的并且对我来说效果很好。
尝试再次构建 R 包。现在应该可以了。
就我而言,运行
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
如果您使用的是 Ubuntu,只需通过以下命令安装 Tex Live:
apt-get install texlive
如果您使用 Rstudo,请重新启动它。
此错误通常是由包中的 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)
首先,@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")