【问题标题】:Define font for single chunk output定义单块输出的字体
【发布时间】:2017-04-04 08:58:28
【问题描述】:

使用knitr和Rmarkdown,我使用代码来获取文件的内容(分析的输出),代码如下:

{r comment='', echo=FALSE}
cat(readLines('/filepath/filename.out'), sep = '\n')

我希望filename.out的内容用Courier New字体复制,但在编织Rmarkdown文档时希望普通文本有Times New Roman。

我不知道该怎么做(我不想为整个文档要求 Courier New)。

【问题讨论】:

标签: r knitr r-markdown


【解决方案1】:

您可以在 css 文件或在 YAML 中使用 in_header 调用的 tex 文件中创建所需的样式,具体取决于您的输出。 然后创建一个 R 函数,将这种样式应用于您的文本。

定义所需样式的css文件

.Courier {
  font-family: Courier New, Courier, monospace;
}

latex 文件来定义所需的样式

如果你的输出只有 LateX,你可以将这些命令直接放在你的文档中。

\newenvironment{Courier}{\ttfamily}{\par}
% Trick to avoid pandoc escaping texte between \begin and \end
\newcommand{\nopandoc}[1]{#1} 

用于包含在块中的长文本输出的样式格式函数

这些函数适用于 HTML 或 LateX/PDF 输出:

```{r, echo=FALSE}
    beginStyleFmt <- function(textstyle, type = "span") {
  outputFormat <- knitr:::pandoc_to()
  if (outputFormat %in% c('latex', 'beamer')) {
    if (type %in% c("div", "p")) {
      paste0("\\nopandoc{\\begin{", textstyle, "}}\n")
    } else {
      paste0("\\nopandoc{\\", textstyle, "{")
    }
  } else if (outputFormat == 'html') {
      paste0("<", type, " class='", textstyle, "'>")
  } else {
    ""
  }
}

endStyleFmt <- function(textstyle, type = "span") {
  outputFormat <- knitr:::pandoc_to()
  if (outputFormat %in% c('latex', 'beamer')) {
    if (type %in% c("div", "p")) {
      paste0("\n\\nopandoc{\\end{", textstyle, "}}")
    } else {
      paste0("}}")
    }
  } else if (outputFormat == 'html') {
      paste0("</", type, ">")
  } else {
    ""
  }
}
```

文档中的代码块

如果您在文本文件中有一些类似 markdown 的语法,例如 # Title,它将被读取为 markdown 语法。但是标题之间的文本将在 Courier 中。如果您不希望您的文本被视为降价语法,您可以删除 beginStyleFmt 中的 \\nopandoc{endStyleFmt 函数中对应的 }

`r beginStyleFmt("Courier", type = "div")`
```{r comment='', echo=FALSE, results='asis'}
cat(readLines('/filepath/filename.out'), sep = '\n')
```
`r endStyleFmt("Courier", type = "div")`

【讨论】:

  • 谢谢。一些快速尝试使这项工作没有成功(使用降价代码,输出格式为 PDF)。我会从你的博客开始进一步研究。
  • 是的。我修改了beginend 函数,以及代码块的语法,你现在应该可以让它工作了。顺便说一句,对你来说,LateX 代码可以直接写在你的 Rmd 文件中。
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 2022-10-04
  • 2012-12-30
  • 1970-01-01
相关资源
最近更新 更多