用deqn和roxygen记录方程。

问题描述 投票:19回答:2

我用的是 \deqn{}{} 用 roxygen2 来记录包中函数的方程。 LaTeX (是 deqn)可以很好地显示,因为在LaTeX公式中,白色空间被忽略,但我在ASCII码方面有一个问题(第二个参数是 deqn)表示。

问题是我的格式化被破坏了(似乎roxygen把整个的 deqn 命令在 "单行 "上,然后在大约60列左右的地方包装这一行)。) 有没有办法强制roxygen2保留.R文件中roxygen commandscomments中的白色空间格式?

我在一个文件里有以下代码。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
2个回答
15
投票

根据Hadley Wickham的说法,在以后的roxygen版本中,行包会被删除。 所以roxygen2的解决方法是对文件(或包)进行roxygen化,然后在受影响的 .Rd 文件。


2
投票

这个答案并没有解决你的ASCII码问题,但是目前在HTML中渲染乳胶方程时,它是我常用的方法,所以我希望这能帮助你。

请看一下mathjaxr包 (CRAN, GitHub). 您可以通过以下两种方式安装 install.packages("mathjaxr")remotes::install_github("wviechtb/mathjaxr").

它引入了一个宏观 \loadmathjax 中加载必要的JavaScript。MathJax 来渲染乳胶方程。然后使用宏 \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. 重新启动R会话.rs.restartR()
  4. 预览文件与 ?example

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

rendered mathjax equation

© www.soinside.com 2019 - 2024. All rights reserved.