【问题标题】:How can I retain the initial white space in a line when writing Rd documentation?编写 Rd 文档时如何保留一行中的初始空白?
【发布时间】:2013-03-04 04:53:28
【问题描述】:

在尝试为自己找到关于this question 的解决方案时,我发现自己陷入了尝试编写有效的 Rd 标记的过程中。我想要的是添加一个名为Raw Function Code 的部分并将函数的代码放在它下面。通过编写脚本来修改 Rd 文件以包含

,我在这方面取得了有限的成功
\section{Raw Function Code}{\code{
# some piece of R script will eventally provide this part of the text
}}

但是,即使我在 .Rd 文件中手动适当地分隔文本(使用空格或制表符),每行的初始空白似乎也会被剥离,留下一个不受欢迎的功能。我注意到,如果我在空白之前提供一个起始字符,则会保留空白。但是,我不想提供起始字符,因为我希望人们能够直接从生成的 PDF 中复制和粘贴。

我已经查看了parseRd 并且我知道 LaTeX 有三种类型的文本- 像,R-like 和逐字。我试图将我的函数代码放在 \code 和 \verb 中,但似乎都没有产生预期的结果。我可以做些什么来保留我最初的空白?

【问题讨论】:

  • 你试过\begin{verbatim} ... \end{verbatim}
  • \begin 和 \end 是使用 R CMD Rd2pdf 时的未知宏。也许我必须使用 Rdconv,然后在乳胶而不是 Rd 中添加我的额外代码。没有办法在代码中添加缩进似乎很奇怪。

标签: r literate-programming roxygen2 rd


【解决方案1】:

\section 宏包含 LaTeX 类型的文本,但如果你想写代码,你可以使用\synopsis 宏,即

\synopsis
# some piece of R script will eventally provide this part of the text
} 

这有一个问题;你不能给这个部分命名,它会自动命名为另一个使用部分。同样的事情可以通过使用\examples 宏来实现,但是现在该部分的名称是Examples,这可能更加可疑(更不用说您可能已经有Examples 部分了)。

【讨论】:

  • 哇,真令人沮丧。 \examples\usage 宏正是我想要的。它们处于类 R 模式。 \synopsis 处于逐字模式,这是可行的,但低于标准。似乎 \Sexpr 应该能够提供我想要的但部分? == 有时...谁知道那是什么意思。
  • 看起来 '\Sexpr' 可以在部分内部工作,并且使用选项 eval=FALSE,results=rd 和 echo=TRUE 它会完全按照您的意愿工作,但我可以让它正常工作。 ..
  • 理论上应该可以。在实践中,我无法让它工作。我偶然发现了“阶段”和“结果”选项,但没有找到可靠的组合。我不知道你是说你是不是能够让它工作。如果你是,请分享 .Rd 代码作为答案。
  • 抱歉,打错地方了 :) 不幸的是我也无法正常工作。
  • 这不会在行首保留空格。
【解决方案2】:

如果不修改 Rd 代码的用法或示例部分,这是不可能的。有关可用的解决方法,请参阅 Hemmo 的答案。它以逐字模式生成文本,这是次优的,但总比没有好。

(此答案设置为社区 Wiki,以防这种情况发生变化。此结果是截至 R-2.15.1 的最新结果)

【讨论】:

    【解决方案3】:

    如果你想要一个超级hacky的方法,你可以使用\Sexpr来制作零宽度字符并在它们之间添加空格:

    #' first line \cr
    #'\Sexpr{"\u200B"} \Sexpr{"\u200B"} \Sexpr{"\u200B"} \Sexpr{"\u200B"} indented line
    

    然而,一个警告 - 你的包将构建良好,但 R CMD CHECK 会抛出一个合适的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多