在rmarkdown中使用文本变量

时间:2019-09-03 14:38:15

标签: r r-markdown knitr

我想将文本变量用于knitr的html,pdf和word输出。 这是我目前在markdown中使用的代码

我要设置一个变量

  

var <-“只是一些文本”

这样我就不需要在3次不同的时间写文字了

(请对错误的代码表示歉意,我对此很陌生)

For HTML Only
```{asis, echo=is_html_output()}
  <p>just some text</p>
```
For PDF Only
\color{ecbblue}{\scriptsize{just some text}}

For DOCX Only
```{asis, echo=is_word_output()}
just some text

2 个答案:

答案 0 :(得分:2)

如果您想在 LaTex 中工作,可以使用以下代码:

\usepackage{xspace}
newcommand{\VarName}{text to insert\xspace}

然后随时随地

  

要插入的文字

例如,您可以执行以下操作:

\color{blue}{\scriptsize{\VarName}}

将按您的意愿以蓝色返回要插入的文本。实际上,这仅适用于文本变量。


编辑:当另一个答案很好时,如果您想用R的方式做,我建议改用pander软件包,它确实做得很好,甚至更简单。

install.packages("pander")
library("pander")

对于R块中的 LaTeX(PDF),只需:

pander(cat("\\textcolor{red}{", var ,"}"))
对于R块中的 HTML ,只需执行以下操作:

pander(cat("<span style=color:red>", var, "</span>"))

答案 1 :(得分:2)

您可以在不可见的代码块中定义变量,然后以内联表达式输出。这样,您就无需处理<p>等。

---
output:
  pdf_document: default
  word_document: default
  html_document: default
---

```{r, include=FALSE}
var <- "just some text"
h2 <- "Text2"
```

## `r h2`

`r if(knitr::is_latex_output()) paste("\\textcolor{blue}{\\scriptsize", var, "}") else var`

请注意,我使用的是\textcolor而不是\color,因为后者不带参数,并且会使后面的所有文本也变成蓝色。