【问题标题】:Color of captions becames fgcolor (knitr, Rnw)字幕颜色变为 fgcolor (knitr, Rnw)
【发布时间】:2020-09-17 21:30:02
【问题描述】:

将 knitr 与 Rnw 文件一起使用时,在块内创建的字幕的字体颜色变为 fgcolor。

这个问题类似于knitr kable: Text color in PDF from RNW is grey。这个解决方案在这种情况下没有用。

有什么办法可以解决这个问题吗?破解 knit_hooks$set(plot = myfunction)?如何? 谢谢。

% Minimal.Rnw
\documentclass{tufte-book}
\begin{document}
Color of normal font is black.
<<fig.env='marginfigure',fig.cap="The color of the font of the caption is fgcolor">>=
plot(1:10)
@
\begin{marginfigure}
    \caption{This color is black.}
\end{marginfigure}
\end{document}

编辑我:

我发布了一个可行的解决方案以供将来参考。 Benoit 指出了关键的勾号fig.show='hide'。不幸的是,它没有编写图形环境。所以我创建了一个名为colorcaption 的新钩子来解决这个问题。使用您想要的颜色调用此选项(blackredgreen、...)。

% Minimal.Rnw
\documentclass{tufte-book}
\begin{document}
<<echo=FALSE>>=
library(knitr)
knit_hooks$set(colorcaption = function(before, options, envir){
    ## Hacked from hook_plot_custom
    if (before) return() # run hook after the chunk
    ext = "pdf" #  original: options$fig.ext %n% dev2ext(options$dev)
    hook = knit_hooks$get('plot')
    ##
    n = options$fig.num
    if (n == 0L) n = options$fig.num = 1L # make sure fig.num is at least 1
    res = unlist(lapply(seq_len(n), function(i) {
        options$fig.cur = i
        hook(fig_path(ext, options, i), knitr:::reduce_plot_opts(options))
    }), use.names = FALSE)
    res <- paste(res, collapse = '')
    ## My hack. Put the color after the end of kframe
    sub("\\end{kframe}",paste0("\\end{kframe}\\color{",options$colorcaption, "}"),res,fixed=TRUE)
})
@
Color of normal font is black. 
<<colorcaption='red',fig.show='hide',fig.env='marginfigure',fig.cap="The color of the font of the caption is colorcaption",>>=
1:10
plot(1:10)
10:1
@
Hello
\begin{marginfigure}
    \caption{This color is black.}
\end{marginfigure}
\end{document}

【问题讨论】:

    标签: r knitr rnw


    【解决方案1】:

    这应该可以满足您的需求,前提是您的 R 代码块生成的图存储在 figure 文件夹中:

    \documentclass{tufte-book}
    \begin{document}
    Color of normal font is black.
    <<test1, fig.show = 'hide'>>=
    plot(1:10)
    @
    
    \begin{marginfigure}
    \includegraphics[width = \textwidth]{figure/test1-1}
    \caption{this is now the correct color}
    \end{marginfigure}
    
    \begin{marginfigure}
        \caption{This color is black.}
    \end{marginfigure}
    \end{document}
    

    或者您可以在序言中(重新)定义fgcolor

    \documentclass{tufte-book}
    \definecolor{fgcolor}{RGB}{0,0,0}
    \begin{document}
    Color of normal font is black.
    <<fig.env='marginfigure',fig.cap="The color of the font of the caption is fgcolor">>=
    plot(1:10)
    @
    \begin{marginfigure}
        \caption{This color is black.}
    \end{marginfigure}
    \end{document}
    

    【讨论】:

    • 谢谢!我没有考虑自己写环境。另一种可能性是重新定义 fgcolor (\definecolor{fgcolor}{rgb}{0, 0, 0}),但我不确定这种更改如何影响块的高光。
    • 我刚刚编辑了我的答案以添加另一个,也许是更好的可能性。重新定义 fgcolor 不会影响这个简单示例的语法高亮显示。
    猜你喜欢
    • 2017-05-15
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多