My question is the same as the one in the link Sweave syntax highlighting in output.
I have followed the suggestion by daroczig https://tex.stackexchange.com/questions/5113/how-to-colorize-syntax-using-r-sweave, and created the following test.Rnw file:
\documentclass{article}
\RequirePackage{fancyvrb}
\RequirePackage{listings}
\SweaveOpts{keep.source=TRUE}
<<SweaveListingsPreparations, results=tex, echo=FALSE, strip.white=false>>=
require(SweaveListingUtils)
SweaveListingPreparations()
setToBeDefinedPkgs(pkgs = c("SweaveListingUtils","distr"),
keywordstyles = c("\\bf\\color{blue}","\\bf\\color{red}"))
#
\begin{document}
\SweaveOpts{concordance=TRUE}
\section{Example}
This is an example with three variables in R.
<<>>=
options(continue = " ")
x <- 10
t <- 'The brown fox'
b <- TRUE
#
<<>>=
x
#
<<>>=
t
#
<<>>=
b
#
\end{document}
<<cleaup, echo=FALSE>>=
unloadNamespace("SweaveListingUtils")
#
However, I get the following error message:
Suggestions?
Since you don't have \usepackage{Sweave} in your document, Sweave will insert it. But the SweaveListingsUtils package also inserts conflicting code.
So you need to follow the advice in the SweaveListingsUtils documentation, and put in a comment
% \usepackage{Sweave}
near the start of your document. This will prevent R from inserting it.
However, do note that support for SweaveListingsUtils is ending; you are better off using knitr.
Related
I'm relatively new to Knitr. I want to run a function just once, so that next time I don't have to evaluate it, because it would yield a different result. My MWE:
First time:
\documentclass{article}
\begin{document}
<<>>=
a<<-Sys.time()
#
<<>>=
a
#
\end{document}
Second time:
\documentclass{article}
\begin{document}
<<eval=FALSE>>=
a<-Sys.time()
#
<<>>=
a
#
\end{document}
I've tried using <<- so that the variable is stored in the global environment but it doesn't work.
I want to know if there is a way to print R object directly in a text (Sweave), but directly in a line of text.
I'd like to print this code
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
YO MANNNNNNN 2+2 =
<<here, results=tex, echo=FALSE>>=
2+2
#
YEAHHHH!
\end{document}
And I want an output similar to this:
YO MANNNNNNN 2+2 = 4 YEAHHHH!
But, R is adding the answer brackets like this
YO MANNNNNNN 2+2 = [1] 4YEAHHHH!
Code:
\documentclass{article}
\begin{document}
% \SweaveOpts{concordance=TRUE}
YO MANNNNNNN 2+2 = \Sexpr{2+2} YEAHHHH!
\end{document}
n.b. For me commenting out \SweaveOpts{concordance=TRUE} worked just fine, but you made need to uncomment depending on your setup.
Prints:
YO MANNNNNNN 2+2 = 4 YEAHHHH!
Update - extra info per comment...
You can define an object within a 'chunk' to be later evaluated in line using \Sexpr{}
<<somechunk, results='tex',echo=FALSE, results='hide'>>=
x <- 2
#
Inline evaluation of x prints the number \Sexpr{x}.
I am having trouble when using "reverse" assignment operators (->) in a knitr .Rnw file. For example, I have the following simple .Rnw file
\documentclass{article}
\begin{document}
<<test>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
When I use knitr to compile into a pdf, the operator -> has been reversed so the output actually has
1:5 <- a
in it!
how can I change this?
Make tidy=FALSE a knitr chunk option rather than an R option:
\documentclass{article}
\begin{document}
<<test,tidy=FALSE>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
(I don't think tidy=FALSE does anything at all in options(), but I guess it's harmless ...)
For setting tidy=FALSE on a chunk-by-chunk basis, Ben's answer has got you covered.
To reset the option globally, use opts_chunk$set(), like so:
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy=FALSE)
#
<<test>>=
1:5 -> a
#
\end{document}
Additionally, as documented here, tidy.opts can give you finer-grained control over many aspects of the knitr's (and ultimately formatR::tidy.source()'s) tidying behavior. Perhaps unfortunately in this case, while you can tell knitr not to replace "=" with "<-" (by doing opts_chunk$set(tidy.opts=list(replace.assign=FALSE))you cannot use that option to control whether "->" is replaced by "<-".
Here's an example that uses tidy.opts
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy.opts=list(replace.assign=FALSE))
#
<<test>>=
j <- function(x) { x<-y ## x<-y will be printed on new line, with added inter-token spaces
a = 1:5 ## will be indented, but "=" won't be replaced
} ## closing brace will be moved to start of line
#
\end{document}
I am having trouble when using "reverse" assignment operators (->) in a knitr .Rnw file. For example, I have the following simple .Rnw file
\documentclass{article}
\begin{document}
<<test>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
When I use knitr to compile into a pdf, the operator -> has been reversed so the output actually has
1:5 <- a
in it!
how can I change this?
Make tidy=FALSE a knitr chunk option rather than an R option:
\documentclass{article}
\begin{document}
<<test,tidy=FALSE>>=
options(tidy=FALSE, width=50)
1:5 -> a
#
\end{document}
(I don't think tidy=FALSE does anything at all in options(), but I guess it's harmless ...)
For setting tidy=FALSE on a chunk-by-chunk basis, Ben's answer has got you covered.
To reset the option globally, use opts_chunk$set(), like so:
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy=FALSE)
#
<<test>>=
1:5 -> a
#
\end{document}
Additionally, as documented here, tidy.opts can give you finer-grained control over many aspects of the knitr's (and ultimately formatR::tidy.source()'s) tidying behavior. Perhaps unfortunately in this case, while you can tell knitr not to replace "=" with "<-" (by doing opts_chunk$set(tidy.opts=list(replace.assign=FALSE))you cannot use that option to control whether "->" is replaced by "<-".
Here's an example that uses tidy.opts
\documentclass{article}
\begin{document}
<<setup, include=FALSE, cache=FALSE>>=
opts_chunk$set(tidy.opts=list(replace.assign=FALSE))
#
<<test>>=
j <- function(x) { x<-y ## x<-y will be printed on new line, with added inter-token spaces
a = 1:5 ## will be indented, but "=" won't be replaced
} ## closing brace will be moved to start of line
#
\end{document}
How can I Sweave text with a #-sign?
Here, Sweaving and compiling is no problem:
<<echo=false,results=tex>>
cat("This is my text\n")
#
But here, compiling gives an error:
<<echo=false,results=tex>>
cat("This is #my text\n")
#
The hash sign could not be compiled in tex. I have to set the Sweave option to "tex" because I want to print different text files in a loop and each text file should be separated by a new chapter.
<<results=tex>>
for(i in d){
tx <- readLines(i)
cat(tx, sep="\n")
\chapter{i}
}
Thanks for every hint.
TIM
You have to escape the hash-sign, since it has in LaTeX a special meaning.
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
<<echo=false,results=tex>>=
cat("This is \\#my text\n")
#
\end{document}