[ESS] \Sexp{} problem, how to add syntax="SweaveSyntaxNoweb" option to M-n s?

Marc Schwartz marc_schwartz at me.com
Tue Mar 23 22:31:22 CET 2010


On Mar 23, 2010, at 3:30 PM, Charles C. Berry wrote:

> On Tue, 23 Mar 2010, Marc Schwartz wrote:
> 
>> On Mar 23, 2010, at 7:20 AM, Werner W. wrote:
>> 
>>> Hi,
>>> 
>>> I am currently getting into Emacs & ESS on Windows and it starts to feel like a very nice environment to program in R and Sweave. However, I have a little problem: is it possible to add the option syntax="SweaveSyntaxNoweb" to the issued command when pressing M-n s? Right now I always get an "Undefined control sequence" error from the latex compiler since Sweave is not replacing the \Sexpr{} command at all. I know that this is no problem when I add the above option. I looked at the ess-swv.el file but could figure out how to add an option. It would be great if someone had a hint towards the solution for me.
> 
> 
> I doubt that this solves the problem with \Sexpr{}, but you can copy
> 
> ess-swv-run-in-R into your .emacs file , (possibly) rename it,  and edit the line
> 
> 	"local({..od <- getwd(); setwd(%S); %s(%S); setwd(..od) })"
> 
> to add whatever options you want. I use this strategy to force use of the weaver() driver:
> 
>       "local({..od <- getwd(); require(weaver);setwd(%S); %s(%S,driver=weaver()); setwd(..od) })"
> 
> which command I renamed 'ess-swv-run-weaver-in-R'. Then with
> 
> (defun ess-swv-weave-weaver ()
>   "Run Sweave on the current .Rnw file."
>   (interactive)
>   (ess-swv-run-weaver-in-R "Sweave"))
> 
> (define-key noweb-minor-mode-map "\M-n\M-s" 'ess-swv-weave-weaver)
> 
> I can type M-n M-s and force use of the weaver driver
> 
> 
>>> 
>>> Thanks so much,
>>> Wern
>> 
>> 
>> Typically, when the \Sexpr's are not being evaluated, that is being replaced with a scalar, it is an indication that the sweave.sty file is not being found, as it is in that file, that the relevant code is located.
>> 
> 
> Huh?
> 
>> cat("Select a letter:\\Sexpr{sample(letters,1)}\n",file="oneLetter.Rnw")
>> Sweave("oneLetter.Rnw")
> Writing to file oneLetter.tex
> Processing code chunks ...
> 
> You can now run LaTeX on 'oneLetter.tex'
>> readLines("oneLetter.tex")
> [1] "Select a letter:r"
>> 
>> Sweave("oneLetter.Rnw",syntax="SweaveSyntaxNoweb")
> Writing to file oneLetter.tex
> Processing code chunks ...
> 
> You can now run LaTeX on 'oneLetter.tex'
>> readLines("oneLetter.tex")
> [1] "Select a letter:g"
>> 
> 
> \Sexpr{} inserts the result into the tex file with either the default options or syntax="SweaveSyntaxNoweb"
> 
> And I get a similar result when I open oneLetter.Rnw with emacs and type M-n s.
> 
> Does Sweave.sty really figure into this??
> 
> HTH,
> 
> Chuck


Chuck,

I may very well be wrong and I was going from perhaps faulty memory from some time ago. There was a period of time when I was still on Fedora and I believe, after a clean version upgrade, I was having problems with .Rnw files, where the \Sexpr's were not being processed. 

That being said, I cannot now (on OSX) replicate the problem, so unless something has changed in the intervening time frame, my memory may be faulty.

The only other conflict that I know of is if the R2HTML package gets loaded, which is in the Sweave FAQ. That was not my issue in the past, as I have not used that package. So I am still at a loss to explain the prior behavior or apparently, correctly recall the fix.

Thanks,

Marc



More information about the ESS-help mailing list