用deqn和roxygen记录方程

时间:2012-12-26 13:56:13

标签: r equation 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) {
}

我使用以下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", ".")

您可以在命令行使用此命令生成example.Rd文件的文本表示:

R CMD Rd2txt dir/containing/example.R/man/example.Rd

上述命令输出的 Details 部分如下所示:

sqrt(N/n *
  runSum(0.5 * log(OHLC[,2]/OHLC[,3])^2 - (2*log(2)-1) *
  log(OHLC[,4]/OHLC[,1])^2, n))

虽然我希望它看起来像:

sqrt(N/n * runSum(0.5 * log(OHLC[,2]/OHLC[,3])^2 -
         (2*log(2)-1) * log(OHLC[,4]/OHLC[,1])^2, n))

2 个答案:

答案 0 :(得分:13)

According to Hadley Wickham,将在未来版本的roxygen中删除换行。因此,roxygen2的解决方案是对文件(或包)进行氧化,然后手动更新受影响的.Rd文件中的文本方程式。

答案 1 :(得分:6)

这个答案不能解决您的ASCII问题,但是目前这是在HTML中渲染乳胶方程式时的首选方法,所以希望对您有所帮助。

看看mathjaxr软件包(CRANGitHub)。您可以使用install.packages("mathjaxr")remotes::install_github("wviechtb/mathjaxr")安装它。

它引入了一个宏\loadmathjax,该宏从MathJax加载了必要的JavaScript以渲染乳胶方程。然后使用宏\mjeqn{latex}{ascii}\mjdeqn{latex}{ascii}而不是\eqn\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) {}

(请注意方括号已转义)

如果使用RStudio,则\loadmathjax宏可能会遇到一些麻烦。要快速预览内容,请执行以下操作:

  1. 生成文档(Ctrl + Shift + D或devtools::document(roclets = c('rd', 'collate', 'namespace'))
  2. 致电preview_rd("example.Rd")预览文档

完成后,您可以按照以下步骤检查最终结果:

  1. 生成文档(Ctrl + Shift + D或devtools::document(roclets = c('rd', 'collate', 'namespace'))
  2. 安装软件包(Ctrl + Shift + L或devtools::install()
  3. 使用.rs.restartR()
  4. 重新启动R会话
  5. 使用?example预览文档

任何一种方法都应产生以下结果:

rendered mathjax equation