# [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:
>
>         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.

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