gpt4 book ai didi

r - 为单 block 输出定义字体

转载 作者:行者123 更新时间:2023-12-03 23:08:23 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

您可以在 css 文件或使用 in_header 调用的 tex 文件中创建所需的样式。在 YAML 中,取决于您的输出。
然后您创建一个 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 中。如果您不希望您的文本被视为 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")`

关于r - 为单 block 输出定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43202591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com