如何在RMarkdown中使用内联R代码阻止LaTeX块中的字符串转义?

时间:2016-10-06 11:10:46

标签: r latex r-markdown

我正在尝试使用以下内容来格式化矩阵以在RMarkdown文档中显示为LaTeX:

具有将R matrix转换为LaTeX字符串的函数:

bmatrix = function(x, digits=NULL, ...) {
 library(xtable)
 default_args = list(include.colnames=FALSE, only.contents=TRUE,
                  include.rownames=FALSE, hline.after=NULL,
                  comment=FALSE,
                  print.results=FALSE)
 passed_args = list(...)
 calling_args = c(list(x=xtable(x, digits=digits)),
               c(passed_args,
                 default_args[setdiff(names(default_args),
                 names(passed_args))]))
 cat("\\begin{bmatrix}\n",
  do.call(print.xtable, calling_args),
  "\\end{bmatrix}\n")
}

这样:

bmatrix(diag(2))

给出

\begin{bmatrix}
 1.00 & 0.00 \\ 
 0.00 & 1.00 \\ 
\end{bmatrix}

问题在于,当我在LaTeX块中内联它时:

$$
M = `r bmatrix(diag(2))`
$$

矩阵部分为空(我只得到“M =”)。

我怀疑这与RMarkdown和/或pandoc在LaTeX字符串中转义HTML实体有关。

周围有什么办法吗?

我也试过

$$
M = `r I(bmatrix(diag(2)))`
$$

但无济于事。

1 个答案:

答案 0 :(得分:2)

尝试

$$
M = 
```{r, results='asis'} 
bmatrix(diag(2))
```
$$

来自R Code Chunks

  

使用结果=' asis' chunk选项...是确保knitr不再处理原始表输出所必需的。

MWE

---
title: "Untitled"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

```{r}
bmatrix = function(x, digits=NULL, ...) {
 library(xtable)
 default_args = list(include.colnames=FALSE, only.contents=TRUE,
                  include.rownames=FALSE, hline.after=NULL,
                  comment=FALSE,
                  print.results=FALSE)
 passed_args = list(...)
 calling_args = c(list(x=xtable(x, digits=digits)),
               c(passed_args,
                 default_args[setdiff(names(default_args),
                 names(passed_args))]))
 cat("\\begin{bmatrix}\n",
  do.call(print.xtable, calling_args),
  "\\end{bmatrix}\n")
}
```

# Foo

$$
M = 
```{r, results='asis'} 
bmatrix(diag(2))
```
$$

产生

enter image description here