【问题标题】:RMarkdown: How to change the font color?RMarkdown:如何更改字体颜色?
【发布时间】:2015-05-18 00:27:47
【问题描述】:

在 RMarkdown 中有没有办法指定字体颜色?

浏览chunk options时似乎没有选项

【问题讨论】:

    标签: r r-markdown


    【解决方案1】:

    我创建了一个这样的函数:

    ## 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 文档上工作,都会呈现彩色文本。

    【讨论】:

    • 使用最新的 Rstudio 和 rmarkdown::render 进行 pdf 输出,这会在我的 tex 文件中转换为 $\backslash$。因此从字面上打印字符串而不是将其解释为乳胶。很烦人。你有什么想法吗?
    • 万一,这是否发生在使用 xtable 的表中?
    • 如你所见,是的,确实在 xtable 内部,根据我的回答。
    • 请注意,HTML &lt;font&gt; 标记现已过时。浏览器可以随时删除它的支持。
    • @Nicholas Hamilton:感谢您提供非常有用的事实!我需要如何调整它以使用透明颜色?见我的SO question here
    【解决方案2】:

    对于 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。

    【讨论】:

    • 这对我不起作用。相反,我不得不将以下内容添加到我的 YAML 中(请注意,较大的差距是因为我无法在评论中添加换行符),这是基于 link:output: bookdown::word_document2: reference_docx: Template_MS.docx
    【解决方案3】:

    与输出格式无关的解决方案是使用 kableExtra 包中的专用 text_spec() 函数:

    Roses are `r kableExtra::text_spec("red", color = "red")`,
    
    violets are `r kableExtra::text_spec("blue", color = "blue")`
    

    【讨论】:

      【解决方案4】:

      其他人提供了 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”很好。

      【讨论】:

      • 我在其他地方读到下划线会导致块名称等问题,所以我认为这就是原因。他们建议在这些情况下使用破折号“-”而不是下划线“_”:github.com/rstudio/bookdown/issues/313bookdown.org/yihui/rmarkdown/r-code.html
      • 刚刚确认此解决方案也适用于常规 .md 文件。 Pandoc 在没有 R 的 knittr 的情况下将其转换为 .docx。
      • 这似乎对我不起作用。我需要做些什么来启用跨度标签的使用吗?
      【解决方案5】:

      这似乎在 pdf 和 html 这两种输出格式中都非常有效:

      Roses are $\color{red}{\text{beautiful red}}$, 
      violets are $\color{blue}{\text{lovely blue}}$.
      

      希望对你有帮助。

      【讨论】:

      • 这对我来说可以改变内联文本颜色。谢谢你的建议。只是给其他人的注释,这是 LaTex 语法而不是 R
      • 这对我也有效!我想指出它正在推进 LaTeX 功能,这可能并不总是可能的。例如,我想如果您有特定的文本字体,它可能会导致字体问题。
      • 在 Jupyter 中也能很好地工作,因为它支持 MathJax(Tex 和 LaTex 的子集)jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/…
      【解决方案6】:

      我基本上使用了 Nicholas Hamilton 的答案,但是因为我使用了 xtableprint,所以我在某些乳胶序列被转义时遇到了一些问题。即,\\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 让您不必创建一个简单的内联函数
      • 我认为您之前的评论已经足够了,但我已经编辑了我的答案以反映更好的做法。
      【解决方案7】:

      @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}.
      

      【讨论】:

      • 你能澄清一下 pdf 部分吗——我不能让它工作:undefined control sequence \textcolor。命令是pandoc ./main.md -o ./main.pdf。正文中的文字是最简单的\textcolor{red}{red}。你用什么翻译命令?
      • 亲爱的 Ayrat,我在 RStudio 中使用 markdown,所以我对 pandoc 命令不是很熟悉。它可能与颜色命令无关,而是您的系统设置有问题。例如,请参见:stackoverflow.com/questions/37156696/…
      • 如果您使用的是 R Markdown 并出现类似错误,请在序言部分添加 header-includes: \usepackage{xcolor}
      • dr-harper.github.io/rmarkdown-cookbook/… 在这里您还可以找到有关如何使用 LaTeX 添加颜色的完整示例。
      猜你喜欢
      • 2011-05-20
      • 2012-02-20
      • 2011-06-19
      • 1970-01-01
      • 2013-11-14
      • 2014-01-19
      • 2015-01-02
      • 2014-05-03
      • 1970-01-01
      相关资源
      最近更新 更多