【问题标题】:How to use LaTeX Code in R Chunk in R-Markdown?如何在 R-Markdown 的 R 块中使用 LaTeX 代码?
【发布时间】:2018-05-07 21:54:59
【问题描述】:

我目前正在使用 rmarkdown 编写报告,因此我想在 r 代码块中创建部分。我发现这在 cat() 和 results="asis" 的帮助下是可能的。我对这个解决方案的问题是,我的 R 代码结果和代码没有像往常一样正确显示。

例如

---
title: "test"
output: pdf_document
---

```{r, results='asis'}
for (i in 1:10) {
  cat("\\section{Part:", i, "}")
  summary(X)
  $\alpha = `r X[1,i]`$  
}
```

几乎可以解决问题,但这里仍然存在两个问题:

  • summary() 的 R 输出显示得很奇怪,因为我猜它被解释为 LaTeX 代码
  • 我不能在这个环境中使用 LaTeX 公式,所以如果我希望每个部分都以一个方程结尾,这也可能使用 R 变量,这是不可能的

是否有人知道其中一些问题的解决方案,或者是否有一种解决方法可以在循环中创建部分并在此部分中包含 R 代码、R 输出和 LaTeX 公式?或者至少是其中之一?

非常感谢您的各种建议

【问题讨论】:

  • 你考虑过使用sweave吗?
  • 为什么要在代码块中放置部分?
  • @VictorFreg 老实说没有。实际上,我觉得说哪个是 rmarkdown、knitr、sweave 和 pandoc 有点令人困惑。是否有关于某处是什么的有用摘要?
  • @jsb 因为我有 13 个部分,其中包含完全相同的内容,只是数据不同。

标签: r pdf knitr r-markdown


【解决方案1】:

你可以在不依赖代码块的情况下完成内联之后的工作。

作为一个最小的例子。

---
title: "test"
output: pdf_document
---

```{r sect1_prep, include=FALSE}
i <- 1
```

\section{`r paste0("Part: ", i)`}

```{r sect1_body}
summary(mtcars[, i])
```

$\alpha = `r mtcars[1, i]`$

```{r sect2_prep, include=FALSE}
i <- i + 1
```

\section{`r paste0("Part: ", i)`}

```{r sect2_body}
summary(mtcars[, i])
```

$\alpha = `r mtcars[1, i]`$

生产...

如果你真的想拥有一个部分工厂,你可以考虑pander

---
title: "test"
output: pdf_document
---

```{r setup, include=FALSE}
library(pander)
panderOptions('knitr.auto.asis', FALSE)
```

```{r, results='asis', echo=FALSE}

empty <- lapply(1:10, function(x) {

  pandoc.header(paste0("Part: ", x), level = 2)
  pander(summary(mtcars[, x]))
  pander(paste0("$\\alpha = ", mtcars[1, x], "$\n"))

})

```

产生...

删除汇总表格式示例

---
title: "test"
output: pdf_document
---

```{r setup, include=FALSE}
library(pander)
panderOptions('knitr.auto.asis', FALSE)
```

```{r, results='asis', echo=FALSE}

content <- lapply(1:10, function(x) {

  head <- pandoc.header.return(paste0("Part: ", x), level = 2)
  body1 <- pandoc.verbatim.return(attr(summary(mtcars[, x]), "names"))
  body2 <- pandoc.verbatim.return(summary(mtcars[, x]))
  eqn <- pander_return(paste0("$\\alpha = ", mtcars[1, x], "$"))

  return(list(head = head, body1 = body1, body2 = body2, eqn = eqn))

})

writeLines(unlist(content), sep = "\n\n")
```

【讨论】:

  • 谢谢,第一种方法实际上是我试图避免的,因为我的代码更长,我从 1 运行到 13。但是 pander 的方法似乎很有希望我还没有考虑过,但我现在会更深入地研究它:) 谢谢!
  • 感谢您的提示,这已经是一种改进,但似乎没有什么效果是没有在表格中显示常规的 R 输出,对吗?就像线性回归 pander 总是尝试将内容放入表格中一样,有没有办法以某种方式欺骗 pander,以获得常规的 R 输出?
  • @Quastiat,您需要阅读 pander 的软件包文档。它将基于对象 class 输出,您会注意到方程式输出只是作为文本。您可以根据自己的要求进行格式化,如果您不喜欢标准输出,您可以将 pander 替换为 pandoc.verbatim 或其他任何适合您的内容。
  • 好的,谢谢,我会看看,非常感谢,这对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多