"R CMD构建"的行为取决于Rd内容


无论Rd文件是否包含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。(

相关内容

  • 没有找到相关文章

最新更新