Jos*_*ich 19 equation r roxygen2
我正在使用\deqn{}{}roxygen2来记录包中函数的方程式.LaTeX(第一个参数deqn)渲染得很好,因为在LaTeX方程中忽略了空格,但是我对ASCII(第二个参数deqn)表示有问题.
问题是我的格式被破坏了(看起来roxygen将整个deqn命令放在"单行"上,然后将该行包裹在~60列左右).有没有办法强制roxygen2保存.R文件中的roxygen命令/注释中的空格格式?
我在文件中有以下代码example.R:
#'Example
#'
#'deqn ASCII example
#'
#'\deqn{ \sigma = \sqrt{ \frac{Z}{n} \sum
#' \left[ \textstyle\frac{1}{2}\displaystyle
#' \left( \log \frac{H_i}{L_i} \right)^2 - (2\log 2-1)
#' \left( \log \frac{C_i}{O_i} \right)^2 \right] }
#'}{sqrt(N/n * runSum(0.5 * log(OHLC[,2]/OHLC[,3])^2 -
#' (2*log(2)-1) * log(OHLC[,4]/OHLC[,1])^2, n))}
#'
#'@param x An example parameter
#'@return A example result
#'@author Joshua Ulrich
#'@keywords ts
#'@export
"example" <-
function(x) {
}
Run Code Online (Sandbox Code Playgroud)
我使用以下R代码生成example.Rd文件:
library(roxygen2)
setwd("dir/containing/example.R/")
dir.create("man",FALSE)
roclet <- rd_roclet()
roc_proc(roclet, "example.R", ".")
roc_out(roclet, "example.R", ".")
Run Code Online (Sandbox Code Playgroud)
您可以在命令行使用此命令生成example.Rd文件的文本表示:
R CMD Rd2txt dir/containing/example.R/man/example.Rd
Run Code Online (Sandbox Code Playgroud)
上面命令输出的Details部分如下所示:
sqrt(N/n *
runSum(0.5 * log(OHLC[,2]/OHLC[,3])^2 - (2*log(2)-1) *
log(OHLC[,4]/OHLC[,1])^2, n))
Run Code Online (Sandbox Code Playgroud)
而我希望它看起来像:
sqrt(N/n * runSum(0.5 * log(OHLC[,2]/OHLC[,3])^2 -
(2*log(2)-1) * log(OHLC[,4]/OHLC[,1])^2, n))
Run Code Online (Sandbox Code Playgroud)
Jos*_*ich 13
根据Hadley Wickham的说法,在未来版本的roxygen中将删除换行.因此,roxygen2的解决方案是对文件(或包)进行氧化,然后手动更新受影响.Rd文件中的文本方程式.
这个答案没有解决您的 ASCII 问题,但它目前是我在 HTML 中渲染乳胶方程时的首选方法,所以我希望这对您有所帮助。
看一看 mathjaxr 包(CRAN,GitHub)。您可以使用install.packages("mathjaxr")或安装它remotes::install_github("wviechtb/mathjaxr")。
它引入了一个宏\loadmathjax,从MathJax加载必要的 JavaScript来渲染乳胶方程。然后使用宏\mjeqn{latex}{ascii}or\mjdeqn{latex}{ascii}代替\eqnor\deqn就可以了。
在您的具体示例中,我们将有以下内容:
#' Example
#'
#' Example mathjax function
#'
#' \loadmathjax
#' \mjdeqn{ \sigma = \sqrt{ \frac{Z}{n} \sum
#' \textstyle\frac{1}{2}\displaystyle
#' \left\[ \left( \log \frac{H_i}{L_i} \right)^2 - (2\log 2-1) \left( \log \frac{C_i}{O_i} \right)^2 \right] }
#' }{ASCII representation}
example <- function(a, b, c) {}
Run Code Online (Sandbox Code Playgroud)
(注意开方括号被转义了)
如果您使用 RStudio,您可能会遇到\loadmathjax宏的一些问题。要快速预览内容,请执行以下操作:
devtools::document(roclets = c('rd', 'collate', 'namespace')))preview_rd("example.Rd")以预览文档完成后,您可以通过以下步骤检查最终结果:
devtools::document(roclets = c('rd', 'collate', 'namespace'))devtools::install()).rs.restartR()?example无论哪种方式都应该产生以下结果: