使用knitr
和Rmarkdown,我使用代码获取文件内容(分析输出),代码如下:
{r comment='', echo=FALSE}
cat(readLines('/filepath/filename.out'), sep = '\n')
我希望使用字体Courier New复制filename.out
的内容,但是在编写Rmarkdown文档时希望将普通文本用于Times New Roman。
我无法弄清楚如何做到这一点(我不想在整篇文档中要求Courier New)。
答案 0 :(得分:2)
您可以在YAML中使用in_header
调用的css文件或tex文件中创建所需的样式,具体取决于您的输出。
然后创建一个R函数,将此样式应用于文本。
.Courier {
font-family: Courier New, Courier, monospace;
}
如果输出只是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 {
""
}
}
```
如果文本文件中有类似降档的语法,如# Title
,则会将其读作markdown语法。但标题之间的文字将在Courier中。如果您不希望将文字读作markdown语法,则可以删除\\nopandoc{
中的beginStyleFmt
以及}
函数中相应的endStyleFmt
。
`r beginStyleFmt("Courier", type = "div")`
```{r comment='', echo=FALSE, results='asis'}
cat(readLines('/filepath/filename.out'), sep = '\n')
```
`r endStyleFmt("Courier", type = "div")`