【发布时间】:2015-05-18 00:27:47
【问题描述】:
在 RMarkdown 中有没有办法指定字体颜色?
浏览chunk options时似乎没有选项
【问题讨论】:
标签: r r-markdown
在 RMarkdown 中有没有办法指定字体颜色?
浏览chunk options时似乎没有选项
【问题讨论】:
标签: r r-markdown
我创建了一个这样的函数:
## Color Format
colFmt <- function(x,color) {
outputFormat <- knitr::opts_knit$get("rmarkdown.pandoc.to")
if(outputFormat == 'latex') {
ret <- paste("\\textcolor{",color,"}{",x,"}",sep="")
} else if(outputFormat == 'html') {
ret <- paste("<font color='",color,"'>",x,"</font>",sep="")
} else {
ret <- x
}
return(ret)
}
然后你可以像这样内联使用它:`r colFmt("MY RED TEXT",'red')`,无论是在 Latex 还是 HTML 文档上工作,都会呈现彩色文本。
【讨论】:
rmarkdown::render 进行 pdf 输出,这会在我的 tex 文件中转换为 $\backslash$。因此从字面上打印字符串而不是将其解释为乳胶。很烦人。你有什么想法吗?
xtable 内部,根据我的回答。
<font> 标记现已过时。浏览器可以随时删除它的支持。
对于 PDF 和 HTML,获取可以使用降价突出显示修改的彩色文本:see the rmarkdown book。 Pandoc过滤器是最好的选择。
对于 Microsoft Word,您必须首先创建一个具有自定义样式的 Template_MS.docx。警告:为段落着色(段落样式)和少数单词着色(字符样式)创建不同的样式。这是您制作新样式时的一个选项。
在 YAML 中添加:
---
output:
word_document:
reference_docx: Template_MS.docx
---
接下来:
For <span custom-style="Character1">few words</span> of colored text.
对于段落。
<div custom-style="Paragraph1">Paragraph of colored text. Blabla. Blabla.</div>
Nota Bene:
+ 不要对段落和几个词使用相同的样式,这很麻烦。
+ 如果它不起作用,请检查您的样式是否适用于 MS 中的段落 ou 字符。
+ 如果它不起作用,请安装更新版本的 pandoc。
【讨论】:
output: bookdown::word_document2: reference_docx: Template_MS.docx
与输出格式无关的解决方案是使用 kableExtra 包中的专用 text_spec() 函数:
Roses are `r kableExtra::text_spec("red", color = "red")`,
violets are `r kableExtra::text_spec("blue", color = "blue")`
【讨论】:
其他人提供了 Word 以外的输出答案。对于 Word,您可以借助参考 Word 文档使用 Pandoc 自定义样式语法来完成此操作。首先,在您的 reference.docx 模板中,创建一个新的 Word 样式,其名称短而独特。如果您希望您的字体颜色应用于整个段落,您可以使用默认的“链接段落和字符”样式类型。如果您只想用颜色强调段落中的某些单词,则需要选择“字符”样式类型。更改字体颜色(以及您需要的任何其他样式)并保存 reference.docx 文件。
然后,在您的 .Rmd 文件中,您可以使用如下标记:
<div custom-style=“DivCol”>Whole paragraph of colored text</div>
Just a <span custom-style=“SpanCol”>few words</span> of colored text
关于样式名称的一个词 - 由于我不明白的原因,此过程不适用于样式名称“Span_Add”,但“SpanAdd”很好。
【讨论】:
这似乎在 pdf 和 html 这两种输出格式中都非常有效:
Roses are $\color{red}{\text{beautiful red}}$,
violets are $\color{blue}{\text{lovely blue}}$.
希望对你有帮助。
【讨论】:
我基本上使用了 Nicholas Hamilton 的答案,但是因为我使用了 xtable 和 print,所以我在某些乳胶序列被转义时遇到了一些问题。即,\\textcolor 被转换为$\backslash$textcolor。我可以通过以下方式避免消毒来解决问题:
```{r results='asis'}
tbl = data.frame(a = letters[1:10], b = 1:10 / 10)
tbl$b = ifelse(tbl$b < 0.5, colFmt(tbl$b, "red"), colFmt(tbl$b, "green"))
print(xtable(tbl), sanitize.text.function = identity)
```
然后我不得不手动清理一些字符,例如%,但至少\textcolor 已正确应用。当然,这可以通过扩展您自己的清理功能来避免。
【讨论】:
print(xtable(tbl), sanitize.text.function = identity)
sanitize.text.function = identity 让您不必创建一个简单的内联函数
@Ben Bolker 提供的链接上给出的答案:
Roses are <span style="color:red">red</span>,
violets are <span style="color:blue">blue</span>.
如果您选择 HTML (ioslides) 作为输出格式,则可以。
但是,如果您选择 pdf (beamer) 作为输出格式,它将不起作用。如果要创建 pdf,请使用 LaTeX 语法:
Roses are \textcolor{red}{red}, violets are \textcolor{blue}{blue}.
【讨论】:
undefined control sequence \textcolor。命令是pandoc ./main.md -o ./main.pdf。正文中的文字是最简单的\textcolor{red}{red}。你用什么翻译命令?
header-includes: \usepackage{xcolor}