UP | HOME |

Cómo definir las cabeceras de knitr en un documento LaTeX

Cómo definir las cabeceras de knitr en un documento LaTeX

Cuando se emplean documentos .Rnw o .tex con cabeceras precompiladas (Precompilar un preámbulo en LaTeX) conviene introducir el preámbulo que incorpora el paquete knitr de R cuando compila un fichero .Rnw. Además, el color del marginnote se vuelve chiflado con el knitr, por lo que conviene redefinirlo.

%% mifichero.tex
  \documentclass[a4paper,nobib,notoc]{tufte-book}

  %% ============================================================
  %% knitr
  %% ============================================================

  \usepackage[]{graphicx}\usepackage[]{xcolor}
  \usepackage{alltt}
  \IfFileExists{upquote.sty}{\usepackage{upquote}}{}

  \makeatletter
  \@ifundefined{hlnum}{
  \makeatletter
  % maxwidth is the original width if it is less than linewidth
  % otherwise use linewidth (to make sure the graphics do not exceed the margin)
  \def\maxwidth{ %
  \ifdim\Gin@nat@width>\linewidth
  \linewidth
  \else
  \Gin@nat@width
  \fi
  }
  \makeatother%maxwidth

  \definecolor{fgcolor}{rgb}{0.345, 0.345, 0.345}
  \newcommand{\hlnum}[1]{\textcolor[rgb]{0.686,0.059,0.569}{#1}}%
  \newcommand{\hlstr}[1]{\textcolor[rgb]{0.192,0.494,0.8}{#1}}%
  \newcommand{\hlcom}[1]{\textcolor[rgb]{0.678,0.584,0.686}{\textit{#1}}}%
  \newcommand{\hlopt}[1]{\textcolor[rgb]{0,0,0}{#1}}%
  \newcommand{\hlstd}[1]{\textcolor[rgb]{0.345,0.345,0.345}{#1}}%
  \newcommand{\hlkwa}[1]{\textcolor[rgb]{0.161,0.373,0.58}{\textbf{#1}}}%
  \newcommand{\hlkwb}[1]{\textcolor[rgb]{0.69,0.353,0.396}{#1}}%
  \newcommand{\hlkwc}[1]{\textcolor[rgb]{0.333,0.667,0.333}{#1}}%
  \newcommand{\hlkwd}[1]{\textcolor[rgb]{0.737,0.353,0.396}{\textbf{#1}}}%
  \let\hlipl\hlkwb

  \usepackage{framed}
  \makeatletter
  \newenvironment{kframe}{%
  \def\at@end@of@kframe{}%
  \ifinner\ifhmode%
  \def\at@end@of@kframe{\end{minipage}}%
  \begin{minipage}{\columnwidth}%
  \fi\fi%
  \def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep
  \colorbox{shadecolor}{##1}\hskip-\fboxsep
  % There is no \\@totalrightmargin, so:
  \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
  \MakeFramed {\advance\hsize-\width
  \@totalleftmargin\z@ \linewidth\hsize
  \@setminipage}}%
  {\par\unskip\endMakeFramed%
  \at@end@of@kframe}
  \makeatother%kframe

  \definecolor{shadecolor}{rgb}{.97, .97, .97}
  \definecolor{messagecolor}{rgb}{0, 0, 0}
  \definecolor{warningcolor}{rgb}{1, 0, 1}
  \definecolor{errorcolor}{rgb}{1, 0, 0}
  \newenvironment{knitrout}{}{} % an empty environment to be redefined in TeX
  }{} % Fin knitr
  \makeatother%hlnum


  %% ============================================================
  %% knitr y marginnote
  %% ============================================================

  %% El marginnote se vuelve tonto con los colores con el knitr. Hemos introducido el color{black}
  \makeatletter
  \renewcommand\marginnote[2][0pt]{%
  \ifthenelse{\boolean{@tufte@loadnatbib}}{%
  \let\cite\@tufte@infootnote@cite%   use the in-sidenote \cite command
  }{}%
  \gdef\@tufte@citations{}%           clear out any old citations
  \marginpar{\hbox{}\vspace*{#1}\@tufte@marginnote@font\@tufte@marginnote@justification\@tufte@margin@par\vspace*{-1\baselineskip}\noindent\color{black} #2}%
  \@tufte@print@citations%            print any citations
  \ifthenelse{\boolean{@tufte@loadnatbib}}{%
  \let\cite\@tufte@normal@cite%       go back to using normal in-text \cite command
  }{}%
  }
  \makeatother

  \begin{document}

  \begin{knitrout}
  \definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}\begin{kframe}
  \begin{alltt}
  \hlnum{1}\hlopt{:}\hlnum{10}
  \end{alltt}
  \begin{verbatim}
  ##  [1]  1  2  3  4  5  6  7  8  9 10
  \end{verbatim}
  \end{kframe}
  \end{knitrout}

  \end{document}