У меня есть свой собственный код преамбулы, который создает форматы списков, которые я хочу для Sinput и Soutput.Я пытаюсь выяснить, как заставить knitr использовать их в документе, компилируемом в LaTeX.Я тестировал с крючками Kintr, и я просто не могу понять, как заставить их работать.Я НЕ хочу, чтобы Sweavel.sty или Sweave.sty были вставлены в верхнюю часть моего документа.
Я хочу, чтобы фрагмент кода R выглядел так, как я получаю со своим стилем списков = Rinput:
Не результатЯ вижу с knitr:
Мне кажется, я понимаю, что мог бы поиграть с цветовой схемой knitr, чтобы имитировать вывод из списков, но я нене хочу, отчасти потому, что я не думаю, что все получится точно так же.
Вот MRE:
\documentclass[11pt,letterpaper,english]{extarticle}
\usepackage{lmodern}
\renewcommand{\sfdefault}{lmss}
\renewcommand{\ttdefault}{lmtt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\setlength{\parskip}{\medskipamount}
\setlength{\parindent}{0pt}
\usepackage{color}
\usepackage{babel}
\usepackage[unicode=true,pdfusetitle,
bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,
breaklinks=true,pdfborder={0 0 0},pdfborderstyle={},backref=false,colorlinks=true]
{hyperref}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
\special{papersize=\the\paperwidth,\the\paperheight}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
\usepackage[natbibapa]{apacite}
\@ifundefined{date}{}{\date{}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
%\VignetteIndexEntry{Instructions for guides using knitted code chunks}
%\VignetteEngine{knitr}
%\VignetteBuilder{stationery::rnw2pdf}
%\VignetteEncoding{UTF-8}
\usepackage[includehead, includefoot,
lmargin=1in,
rmargin=1in,
tmargin=0.75in,
bmargin=1.0in,
headheight=0pt,
headsep=0pt,
marginparwidth=0pt,
footskip=1.5\baselineskip,
]{geometry}
%% 20180215: this does not cooperate with knitr, but someday we hope
%% it might.
%% This controls display of code chunks
\usepackage{ae,fancyvrb,relsize,listings}
\providecommand{\Sweavesize}{\normalsize}
\providecommand{\Rsize}{}
\renewcommand{\Rsize}{\normalsize}
\providecommand{\Routsize}{\scriptsize}
\providecommand{\Rcolor}{\color[rgb]{0.1, 0.1, 0.1}}
\providecommand{\Routcolor}{\color[rgb]{0.2, 0.2, 0.2}}
\providecommand{\Rcommentcolor}{\color[rgb]{0.101, 0.43, 0.432}}
\providecommand{\Rbackground}{\color[gray]{0.91}}
\providecommand{\Routbackground}{\color[gray]{0.935}}
% Can specify \color[gray]{1} for white background or just \color{white}
\lstdefinestyle{Rinput}{
language=R,
escapechar=`,
fancyvrb=false,%
tabsize=2,%
breaklines=true,
breakatwhitespace=true,%
captionpos=b,%
frame=single,%
framerule=0.2pt,%
framesep=1pt,%
showstringspaces=false,%
basicstyle=\Rsize\Rcolor\ttfamily,%
columns=fixed%,
\lst@ifdisplaystyle\scriptsize\fi,%,
commentstyle=\Rcommentcolor\ttfamily,%
identifierstyle=,%
keywords=\bfseries,%
keywordstyle=\color[rgb]{0, 0.5, 0.5},
escapeinside={(*}{*)},
literate={~}{{$\sim$}}1{==}{{=\,=}}2{--}{{-\,-}}2,
alsoother={$},
alsoletter={.<-},%
otherkeywords={!,!=,~,$$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,/},%
backgroundcolor=\Rbackground,%
numbers=left,%
stepnumber=5,
firstnumber=1,
numberstyle={\tiny}
}%
% Other options of interest:
% frame=single,framerule=0.1pt,framesep=1pt,rulecolor=\color{blue},
% numbers=left,numberstyle=\tiny,stepnumber=1,numbersep=7pt,
% keywordstyle={\bf\Rcolor}
\lstdefinestyle{Routput}{fancyvrb=false,
literate={~}{{$\sim$}}1{R^2}{{$R^{2}$}}2{^}{{$^{\scriptstyle\wedge}$}}1{R-squared}{{$R^{2}$}}2,%
basicstyle=\Routcolor\Routsize\ttfamily,%
backgroundcolor=\Routbackground,
language=R,
escapechar=`,
fancyvrb=false,%
tabsize=2,%
breaklines=true,
breakatwhitespace=true,%
captionpos=b,%
frame=single,%
framerule=0.2pt,%
framesep=1pt,%
showstringspaces=false,%
columns=fixed%,
\lst@ifdisplaystyle\scriptsize\fi,%
identifierstyle=,%
keywords=\bfseries,%
keywordstyle=\color[rgb]{0, 0.5, 0.5},
escapeinside={(*}{*)},
literate={~}{{$\sim$}}1 {==}{{=\,=}}2,
alsoother={$},
alsoletter={.<-},%
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,/},
numbers=left,
numberstyle={\tiny}
}
\let\Schunk\relax
\let\Sinput\relax
\newenvironment{Schunk}{}{}
\let\Scode\relax
\let\Soutput\relax
\lstnewenvironment{Sinput}{\lstset{style=Rinput}}{}
\lstnewenvironment{Scode}{\lstset{style=Rinput}}{}
\lstnewenvironment{Soutput}{\lstset{style=Routput}}{}
\lstset{tabsize=2, breaklines=true, style=Rinput, breakatwhitespace=true}
\makeatother
\usepackage{listings}
\renewcommand{\lstlistingname}{\inputencoding{latin9}Listing}
\begin{document}
<<ignoremeRoptions, echo=FALSE>>=
tdir <- "tmpout"
if(!dir.exists(tdir)) dir.create(tdir, showWarnings=FALSE)
opts.orig <- options()
options(width=75, prompt=" ", continue=" ")
options(useFancyQuotes = FALSE)
set.seed(12345)
pdf.options(onefile=FALSE,family="Times",pointsize=10)
library(stationery)
## Chunk output
library(knitr)
opts_chunk$set(fig.path="tmpout/t-", split=FALSE,
ae=FALSE, fig.height=3, fig.width=5, comment=NA)
@
Here is a listings object that uses the style I want to offer with
R input code chunks. I reflects the style=Rinput that I have in my
preamble.
\inputencoding{latin9}\begin{lstlisting}
library(stationery)
initWriteup("rnw2pdf-guide-knit")
\end{lstlisting}
\inputencoding{utf8}
This is the color scheme preferred by knitr, which I want to replace
with a listings environment.
<<lib10, results="hide">>=
library(stationery)
initWriteup("rnw2pdf-guide-knit")
@
I want inout/output series of chunks to look in a certain way. Here
is input
\inputencoding{latin9}\begin{lstlisting}[style=Rinput]
set.seed(112)
x <- rnorm(1000)
\end{lstlisting}
\inputencoding{utf8}
and this output, using listings style Routput, has slightly smaller
font:
\inputencoding{latin9}\begin{lstlisting}[style=Routput]
[1] 0.04619816
\end{lstlisting}
\inputencoding{utf8}
Rather than what I get from knitr:
<<lib20>>=
x <- rnorm(1000)
mean(x)
@
Try as I might, I am unsuccessful in preventing the pastel tooty-fruity
colors preferred by knitr. I tried editing the knitr code base to
replace the code in render\_listings, but ended up breaking the whole
thing.
<<session10, echo=F>>=
## Please don't delete this.
sessionInfo()
@
\end{document}