[Rd] Possible bug in the Rd parser?

Duncan Murdoch murdoch at stats.uwo.ca
Sat Oct 10 20:00:40 CEST 2009


On 10/10/2009 8:07 AM, Mathieu Ribatet wrote:
> Dear list,
> 
> I got an automatic email complaining than some of my packages didn't
> pass 'R CMD check' for R-2.10.0 alpha anymore. Both of them make use of
> the "cases" LaTeX environment.
> 
> Inspecting the log outputs I got:
> 
>         LaTeX errors when creating PDF version.
>         This typically indicates Rd problems.
>         LaTeX errors found:
>         ! Misplaced alignment tab character &.
> 
> I noticed that the Rd parser changed quite recently and that '#', '_'
> and '&' must not be escaped according to "Writing R extensions".
> However, the problematic .Rd portion seems (to me) OK
> 
>         \deqn{\theta(h) =
>             \begin{cases}
>             u_\beta \left(\mu +  \frac{\nu(h)}{\Gamma(1 - \xi)}
>         \right),&\xi \neq 0\\
>             \exp\left(\frac{\nu(h)}{\sigma}\right),&\xi = 0
>             \end{cases}
>           }{u_beta (mu + nu(h) / Gamma(1 - \xi)), if \xi < 1,
>             exp(nu(h)/sigma), otherwise}
> 
> Removing the alignment tab character '&' solves the issue but doesn't
> produce the expected LaTeX output. Do I miss something with the new Rd
> parser requirements?

I think the new parser is working properly, but there is something wrong 
with your LaTeX.  When I paste that block into a test file and run it 
through the 2.9 parser, the \\ gets converted to \bsl{}, and garbage 
results.  The new parser faithfully reproduces what you wrote, but for 
some reason it's not legal LaTeX.

I suspect the problem is that the text is generated within a \deqn{} 
macro, which is defined in Rd.sty.  Something you're doing is not 
allowed in that context.

It's helpful to run

Rcmd Rd2dvi --no-clean test.Rd

to be able to examine the LaTeX produced by R (which will be saved in a 
temporary directory; the --no-clean tells R not to delete it at the end).

I don't know LaTeX well enough to tell you the best workaround for this, 
but one option is to used the recently added \if or \ifelse and \out 
macros instead of \deqn.  Of course, that will make your Rd file 
unusable in earlier versions, so it's not necessarily the best idea.

Duncan Murdoch



More information about the R-devel mailing list