Передайте параметр класса/пакета/темы в R с помощью knitr

Передайте параметр класса/пакета/темы в R с помощью knitr

У меня есть beamerдокумент с Rфрагментами, скажем, «template.Rnw», который я компилирую с knitrпомощью «compile PDF» вRStudio. Я определил тему 'mytheme.sty'. Я хотел бы иметь возможность назвать тему Frenchи назвать ее так в верхней части документа:

    \usetheme[French]{mytheme}

Эта «французская» тема определяет параметры форматирования этикеток для графических изображений, которые отличаются от стиля США, например, $1,000,000.00напечатанных как 1 000 000,00$.

Я подумал, что могу создать логическое значение French == 1внутри «mytheme.sty», а затем передать его в Rфрагмент для использования в условном выражении if (French) { # set the French styles here.

Но, для начала, я не знаю, как передать LaTeXзначение счетчика (скажем) в Rкусок. Также, возможно, есть лучший подход. Если да, я бы хотел узнать. Ниже мой MWE (Предупреждение:не компилируется!)

шаблон.Rnw

\documentclass{beamer}
\usetheme{mytheme}
%\usetheme[French]{mytheme}

<<'setup', include=FALSE>>=
library(knitr)
library(ggplot2)
library(scales)
@

% I'd want to hide this chunk inside mytheme.sty or similar
<<'formats', include=FALSE>>=
# Create euro currency symbol in plot labels with library(scales)
euro <- function(x) {
paste0("€", format(x, big.mark = ",", decimal.mark = ".", trim = TRUE,
    scientific = FALSE))
} 
# French style formatting for euro labels
euroFrench <- function(x) {
paste0(format(x, big.mark = " ", decimal.mark = ",", trim = TRUE,
    scientific = FALSE), " €")
} 
# French style formatting for dollar labels
dollarFrench <- function(x) {
paste0(format(x, big.mark = " ", decimal.mark = ",", trim = TRUE,
    scientific = FALSE), " $")
} 
#  Toggle On/Off to set formats to French or US
if (French) {  # Here reads the boolean French set by the option [French]
  euro <- euroFrench      # set the custom 'euro' style to custom 'euroFrench'
  dollar <- dollarFrench  # overwrite the default 'dollar' styles of library(scales)
}
@

\begin{document}
\begin{frame}
\frametitle{One day I will be a dual-axis euro/dollar plot}
<<'plot', out.width='1\\linewidth'>>=
df <- data.frame(x = c(0, .0001, .0002, .0003), y = c(0, 1000000, 2000000, 3000000))
ggplot(data = df, aes(x = x, y = y)) + geom_line() + theme_classic(30) + scale_x_continuous(labels = dollar) + scale_y_continuous(labels = euro)
@
\end{frame}
\end{document}

mytheme.sty

\newcounter{French}
\newif\if@themeFrench%
\@themeFrenchfalse%
\DeclareOption{French}{\@themeFrenchtrue}%
\ProcessOptions%
\if@themeFrench% 
\setcounter{French}{1}
@
\fi

Сюжет получено Rвне класса beamer.

введите описание изображения здесь

решение1

Не существует способа (по крайней мере, простого) передать переменные LaTeX в R. Обратное гораздо проще, т.е. использовать переменные R для записи LaTeX.

\documentclass{article}
<<include=FALSE>>=
French <- 1
@

<<results='asis'>>=
if (French == 1) cat('\\usepackage[French]{mytheme}')
@

\begin{document}

...

\end{document}

Связанный контент