如何使用Knitr作为引擎在R包中添加PDF格式的vignette
R包使用knitr将现有PDF导入为Vignette的解决方案
你之前两次尝试失败的原因如下:
- 第一种使用
.asis文件的方案失败,是因为你用错了knitr的引擎名,正确的静态asis引擎名称为knitr::asis,而非knitr::asis_output - 第二种Rmd+
\includepdf的方案失败,是因为你没有加载pdfpagesLaTeX宏包,\includepdf命令由该宏包提供,默认的pdf_document输出格式不会自动引入。
以下是两种可行的实现方案:
方案1:直接使用knitr的asis引擎(无需额外编译,推荐给完全固定的PDF)
操作步骤:
- 在
vignettes/目录下放入你的PDF文件,将其命名为和待生成的vignette同名,比如你希望vignette索引名为my_guide,就把PDF命名为my_guide.pdf - 同目录下新建
my_guide.asis文件,内容仅需两行:
%\VignetteIndexEntry{你想要展示的Vignette标题} %\VignetteEngine{knitr::asis}
- 确认你的包
DESCRIPTION文件中包含以下配置:
VignetteBuilder: knitr Suggests: knitr
构建包时knitr会直接将你提供的PDF作为对应的vignette输出,无需额外编译步骤。
方案2:Rmd封装方案(适合需要在PDF前后加额外R内容、和现有Rmd vignette逻辑统一的场景)
操作步骤:
- 在
vignettes/目录下放入你的file.pdf,同时新建同名file.Rmd,内容如下:
--- title: "你想要展示的Vignette标题" output: pdf_document: extra_dependencies: "pdfpages" vignette: > %\VignetteIndexEntry{你想要展示的Vignette标题} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- \includepdf[pages=-]{file.pdf}
其中[pages=-]参数代表导入PDF的所有页,你也可以自定义页码范围。
2. 确认你的包DESCRIPTION文件中包含以下配置:
VignetteBuilder: knitr Suggests: knitr, rmarkdown
这种方案的优势是你可以在\includepdf前后添加R代码块、文本说明等内容,和普通Rmd vignette的使用逻辑完全一致。
内容的提问来源于stack exchange,提问作者Waldir Leoncio
相关产品推荐
相关产品推荐

