[Rd] Sweave processes \Sexpr in commented LaTeX source (2.3.1patched and 2.4.0)

Marc Schwartz (via MN) mschwartz at mn.rr.com
Wed Sep 20 17:00:43 CEST 2006


On Wed, 2006-09-20 at 12:20 +0200, Peter Dalgaard wrote:
> Friedrich Leisch <friedrich.leisch at stat.uni-muenchen.de> writes:
> 
> > >>>>> On Tue, 19 Sep 2006 19:14:39 -0500,
> > >>>>> Marc Schwartz (MS) wrote:
> > 
> >   > Hi all,
> >   > On FC5, using:
> > 
> >   >   Version 2.3.1 Patched (2006-08-06 r38829)
> > 
> >   > and today's
> > 
> >   >   R version 2.4.0 alpha (2006-09-19 r39397)
> > 
> >   > with the following .Rnw file:
> > 
> > 
> >   > \documentclass[10pt]{article}
> >   > \begin{document}
> > 
> >   >    This line should print '2': \Sexpr{1 + 1}
> >   > %% This line should NOT print '2': \Sexpr{1 + 1}
> > 
> >   > \end{document}
> > 
> > 
> >   > The \Sexpr in the second line is processed even though the line is
> >   > commented. This results in the following .tex file content (in the case
> >   > of R 2.4.0):
> > 
> > 
> >   > \documentclass[10pt]{article}
> >   > \usepackage{/home/marcs/R.Files/SourceCode/R-alpha/share/texmf/Sweave}
> >   > \begin{document}
> > 
> >   >    This line should print '2': 2
> >   > %% This line should NOT print '2': 2
> > 
> >   > \end{document}
> > 
> > 
> > 
> >   > Shouldn't Sweave just generally ignore commented LaTeX code? In
> >   > reviewing Sweave.R I did not see a check for this, so perhaps there are
> >   > circumstances where one wants a \Sexpr in commented LaTeX code
> >   > processed. An example escapes me at the moment however.
> > 
> > Sweave does not parse the LaTeX part of the document at all (which
> > makes it a lot easier), all it does is looking for its own "magic
> > strings" and replacing those, wherever they might occur.
> > 
> > If we would start to respect comments, we would need a some kind of
> > parser for LaTeX, which we currently don't need ... and starting to
> > parse LaTeX would also open a can of worms of possible requests (what
> > to do with Sexpr inside verbatim, etc, etc).
> 
> ..not to mention TeX comments inside Sexpr (e.g. %*%...). Skipping
> lines with % as the first character might be a viable compromise
> though. 

Fritz and Peter,

Thanks for your replies.

First, for some context on what I was doing.

I have a large .Rnw file and was in the process of doing some debugging.
I had set some R chunks to 'eval=false' in the process. This resulted in
some R objects not being created that were in turn used in the
subsequent \Sexpr's.

Thus, using (C-c ;) in emacs/auctex to comment some blocks of LaTeX
code, I then ran Sweave and of course noted errors which I tracked down
to the evaluation of the (presumably) commented \Sexpr's.

I think that Peter's approach would be a reasonable option, at least in
this scenario and perhaps others, without getting into the need to parse
the LaTeX code for '%'s preceding a '\Sexpr'. This would, I believe,
require modifying the current 'docexpr' regex's in Sweave.R.

An alternative of sorts, would be to add another Sweave option,
something like:

  \SweaveOpts{eval.Sexpr=false}

which could be placed prior to a section where one wanted to disable the
evaluation of Sexpr's and then re-enable it with a:

  \SweaveOpts{eval.Sexpr=true}

at a subsequent point in the .Rnw file.

The option would of course default to 'true'. This would make the
solution more "global" and again not require the need to parse the LaTeX
code.

Food for thought.

Best regards,

Marc




More information about the R-devel mailing list