2014-11-20 2 views
3

Я хотел бы иметь свой вход R-код, напечатанный/отображаемый на светло-сером фоне и выход на белом фоне. Так, например, если мой .Rnw файл содержит этот кусок:Раскраска R вход и выход по-разному с использованием knitr

<<>>= 
t.test(zinc~sex, data = zinc.df) 
@ 

Я хотел бы вход, чтобы быть оказан с светло-серым фоном:

> t.test (цинк ~ пол, данные = zinc.df)

и вывод, который будет отображаться на белом фоне, например

Welch Два образца Т-тест

данные: цинк по полу

т = -15,08, ДФ = 2678, р-значение < 2.2e-16

(выход намеренно усеченной, но вам получить идею). Похоже, я мог бы сделать это с темами для новичков, но я не могу это увидеть. Как и многие, я не собираюсь начинать игру с пакетом листингов.

ответ

1

Это лучшее, что я могу сделать :

\documentclass[12pt,letterpaper,twoside]{book} 
\usepackage{inconsolata} 
\usepackage{listings,color} 

<<setup, include=FALSE>>= 
options(width=60) 
opts_chunk$set(fig.align='center', concordance=TRUE, fig.show='hold', size='footnotesize', prompt=FALSE, comment=NA, tidy=TRUE, results='markup', tidy.opts=list(width.cutoff=50), comment='#-#', highlight=TRUE) 
opts_knit$set(concordance=TRUE,self.contained=FALSE) 
color_block_output = function(x) { 
function(x, options) paste('\\begin{outputblock}',x,'\\end{outputblock}',sep="") 
} 
knit_hooks$set(output = color_block_output('')) 
@ 

\lstnewenvironment{outputblock}{ 
\lstset{backgroundcolor=\color{white}, 
frame=single, 
framerule=0pt, 
basicstyle=\ttfamily, 
columns=fullflexible}}{} 

\begin{document} 


<<test>>= 
print('test') 

(mat <- matrix(data=1:25,nrow=5,ncol=5)) 
@ 

\end{document} 

результат будет: enter image description here

я не найти решение для ситуации, когда нет выхода (белое пространство выглядит немного странно) и конечное серое пространство. В любом случае, это начало, надеюсь, что это поможет.

1

Ваша проблема лучше всего подходит, используя listings пакет, но это не должно быть болезненным - вот пример (обратите внимание на backgroundcolor PARM в lstdefinestyle):

\documentclass{article} 
\usepackage[utf8]{inputenc} 

\usepackage{listings} 
\usepackage{color} 

%-- Define your colors, easy to look up 
\definecolor{Rcodegreen}{rgb}{0,0.6,0} 
\definecolor{Rcodegray}{rgb}{0.5,0.5,0.5} 
\definecolor{Rcodepurple}{rgb}{0.58,0,0.82} 
\definecolor{Rbackcolour}{rgb}{0.95,0.95,0.92} 

\lstdefinestyle{customstyle}{ 
backgroundcolor=\color{Rbackcolour}, 
commentstyle=\color{Rcodegreen}, 
keywordstyle=\color{Rmagenta}, 
numberstyle=\tiny\color{Rcodegray}, 
stringstyle=\color{Rcodepurple}, 
basicstyle=\footnotesize, 
breakatwhitespace=false,   
breaklines=true,     
captionpos=b,      
keepspaces=true,     
numbers=left,      
numbersep=5pt,     
showspaces=false,     
showstringspaces=false, 
showtabs=false,     
tabsize=2 
} 

\lstset{style=customstyle} 

\title{Fooing with foo} 

\begin{document} 
\maketitle 

<<tidy=TRUE,highlight=FALSE>>= 
x <- "h3ll0 w0rld" 
cat(x, "\n") 

@ 

\end{document} 
1

Если вы работаете только с Rnw и Latex, вы можете использовать опцию background для кусков. Однако вам нужно будет написать свой кусок дважды.
(1) с echo=TRUE, eval=FALSE и background='white'

<<echo=TRUE, eval=FALSE, background='white'>>= 
@ 

(2) с echo=FALSE, eval=TRUE и background='yellow'

<<echo=FALSE, eval=TRUE, background='yellow'>>= 
@  
Смежные вопросы