Цвет надписей становится fgcolor (knitr, Rnw)

При использовании Knitr с файлами Rnw цвет шрифта подписей, созданных внутри фрагмента, становится fgcolor.

Эта проблема аналогична knitr kable: цвет текста в PDF от RNW — серый. В данном случае это решение бесполезно.

Есть ли способ решить эту проблему? Взламывание вязаных крючков $ set (сюжет = моя функция)? Как? Спасибо.

% 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}

Пример цвета

РЕДАКТИРОВАТЬ I:

Я публикую рабочее решение для дальнейшего использования. Бенуа указал на ключевой тик fig.show='hide'. К сожалению, он не пишет среду рисунка. Поэтому я создаю новый хук под названием colorcaption, который решает эту проблему. Вызовите эту опцию с желаемым цветом (black, red, green,...).

% 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}

Пример цвета в окружении рисунка


person Emilio Torres Manzanera    schedule 30.05.2020    source источник


Ответы (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}
person Benoit    schedule 30.05.2020
comment
Благодарю вас! Я не учёл написания окружения самостоятельно. Другая возможность — переопределить fgcolor ( \definecolor{fgcolor}{rgb}{0, 0, 0}), но я не уверен, как это изменение повлияет на выделение фрагментов. - person Emilio Torres Manzanera; 30.05.2020
comment
Я только что отредактировал свой ответ, чтобы добавить еще одну, может быть, даже лучшую возможность. Переопределение fgcolor не повлияло на подсветку синтаксиса в этом простом примере. - person Benoit; 30.05.2020