【问题标题】:Documenting equations with deqn and roxygen用 deqn 和 roxygen 记录方程
【发布时间】:2012-12-12 01:42:53
【问题描述】:

我正在使用 \deqn{}{} 和 roxygen2 来记录包中函数的方程。 LaTeX(deqn 的第一个参数)渲染得很好,因为在 LaTeX 方程中忽略了空格,但我对 ASCII(deqn 的第二个参数)表示存在问题。

问题是我的格式被破坏了(看起来 roxygen 将整个 deqn 命令放在“单行”上,然后将该行包装在大约 60 列左右)。有没有办法强制 roxygen2 保留 .R 文件中我的 roxygen 命令/cmets 中的空白格式?

我在一个文件中有以下代码,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

上述命令输出的详细信息部分如下所示:

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))

【问题讨论】:

标签: r equation roxygen2


【解决方案1】:

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

【讨论】:

  • 如果你想给予荣誉,你必须按Like按钮。
  • 他在 2013 年回复了 not done in roxygen3。现在是 2019 年,我们仍然在 roxygen2,这个问题没有任何改变。手动更新.Rd 文件太可怕了。
【解决方案2】:

这个答案没有解决您的 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() 重新启动 R 会话
  4. 使用?example 预览文档

无论哪种方式都应该产生以下结果:

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2011-01-19
    • 2012-04-23
    • 1970-01-01
    • 2016-10-23
    相关资源
    最近更新 更多