PR{}
,R CMD build
的行为都不同。有关宏的详细信息,请参阅编写R扩展。
Rd文件不包含PR{}
:时的示例
$ R CMD build test
* checking for file 'test/DESCRIPTION' ... OK
* preparing 'test':
* checking DESCRIPTION meta-information ... OK
* installing the package to process help pages
* saving partial Rd database
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
* building 'test_0.1.tar.gz'
Rd文件包含PR{}
:时的示例
$ R CMD build test
* checking for file 'test/DESCRIPTION' ... OK
* preparing 'test':
* checking DESCRIPTION meta-information ... OK
* installing the package to process help pages
* saving partial Rd database
* building the PDF package manual # <- this
Hmm ... looks like a package # <- this
Converting Rd files to LaTeX # <- this
Creating pdf output from LaTeX ... # <- this
Saving output to 'xxx/test.pdf' ... # <- this
Done # <- this
* checking for LF line-endings in source and make files and shell scripts
* checking for empty or unneeded directories
* building 'test_0.1.tar.gz'
额外的阶段(即building the PDF package manual
,在旧计算机上可能很慢…(是由于在.build_packages()
中调用了..Rd2pdf()
。然而,我不明白是什么触发了这个阶段。此外,它只针对PR{}
触发,而不针对其他宏(如CRANpkg{}
和doi{}
(触发。
有人能追溯发生了什么以及为什么?这个问题仅基于基R函数。我不使用package:devtools
之类的帮助程序。
最小测试包
包装结构:
test
test/man
test/man/one.Rd
test/R
test/R/one.R
test/DESCRIPTION
test/NAMESPACE
test/man/one.Rd
:
name{one}
alias{one}
title{Get One}
description{
Rd file containing or not the PR macro:
PR{1} % comment/uncomment this line as needed
but containing other macros:
CRANpkg{ggplot2} and doi{10.1002/wics.147}
}
usage{
one()
}
test/R/one.R
:
one <- function() 1
test/DESCRIPTION
:
Package: test
Version: 0.1
Title: Test
Author: Nobody
Maintainer: Nobody <no@body.org>
Description: Test.
License: GPL-3
test/NAMESPACE
:
export(one)
使用构建、检查和安装
$ R CMD build test
$ R CMD check test_0.1.tar.gz
$ R CMD INSTALL test_0.1.tar.gz
以下是导致这种差异的机制的解释。
您可以在file.path(R.home(), "share/Rd/macros/system.Rd")
的文件中看到系统宏定义。PR
的定义是
newcommand{PR}{Sexpr[results=rd]{tools:::Rd_expr_PR(#1)}}
你提到的其他定义是
newcommand{CRANpkg}{href{https://CRAN.R-project.org/package=#1}{pkg{#1}}}
newcommand{doi}{Sexpr[results=rd,stage=build]{tools:::Rd_expr_doi("#1")}}
CRANpkg
宏不执行R代码,因此不会触发软件包安装。
doi
宏在构建时执行代码。
就在你链接的代码上方,你可以看到这个测试:
needRefman <- manual &&
parse_description_field(desc, "BuildManual", TRUE) &&
any(vapply(db,
function(Rd)
any(getDynamicFlags(Rd)[c("install", "render")]),
NA))
manual
变量默认为TRUE
,但命令行选项--no-manual
将其设置为FALSE
。测试的下一部分说,您可以通过DESCRIPTION
文件中的字段来抑制手册。
getDynamicFlags()
函数在Rd文件中查找在安装或渲染时执行的代码,而不是在构建时执行的,因此doi
宏不会触发参考手册的构建。
PR
宏在运行时没有指定阶段,文档在默认运行时间上似乎是静默的,但显然getDynamicFlags(Rd)[c("install", "render")]
为它返回了TRUE
。我猜默认时间是呈现时间,以防在R的某个未来版本中错误数据库的URL发生更改。[编辑:文档确实说默认时间是"install"
。]
因此,要抑制此构建,请将BuildManual: false
放在DESCRIPTION
文件中,或将--no-manual
放在R CMD build
命令行中。
R的Bugzilla上R-core的响应:
PR
宏最初仅在R自己的NEWS.Rd中使用,其中stage
并不真正适用。Sexpr的
stage=install
默认值可能有历史原因:构建后来实施。我同意stage=build
通常在非基础包装,以避免炸毁与PDF手册的防水布球。A.由于CCD_ 39宏,部分Rd-db通常无论如何都被包括在内。我还没有检查我们是否/如何在不破坏NEWS.Rd的情况下修改公关宏处理。请注意,WRE中提到的宏仅作为
newcommand
;我认为它没有普遍的用途。目前尚不清楚是哪只虫子跟踪器a";PR#";将在一个已贡献的包的帮助下参考。可能是最好在这里简单地包含错误报告的纯URL。如果您仍然想使用它,可以将
RdOpts{stage=build}
设置为Rd文件的开头。(由于错误18073,这需要R>=4.1.0。(