[R-pkg-devel] How to write a 'cases' environment in .Rd files?

Marius Hofert m@r|u@@ho|ert @end|ng |rom uw@ter|oo@c@
Fri Aug 12 13:00:50 CEST 2022


Hi,

Thanks everyone for your suggestions. I now went with the easiest solution, namely something of the form

\deqn{F(x) = \left\{\begin{array}{ll}
1,&\text{if}\ x > 0,\\
0,&\text{if} x = 0.
\end{array}\right.}{...}

which worked flawlessly (and avoids having to type the formula twice or define a macro as suggested by Ivan).

Cheers,
Marius

________________________________________
From: matthias-gondan <matthias-gondan using gmx.de>
Sent: Friday, August 12, 2022 03:09
To: Ivan Krylov; Marius Hofert
Cc: r-package-devel using r-project.org
Subject: Re: [R-pkg-devel] How to write a 'cases' environment in .Rd files?

I am currently developing an R package that translates R expressions to Html and Latex, things like dbinom(x, size, prob) to P\left(x; N, \pi\right)

Generation of Rd files may be an interesting use case. It's still at an early stage, I appreciate contributions and interesting feature requests.

github.com/mgondan/mathml




Von meinem/meiner Galaxy gesendet


-------- Ursprüngliche Nachricht --------
Von: Ivan Krylov <krylov.r00t using gmail.com>
Datum: 12.08.22 08:16 (GMT+01:00)
An: Marius Hofert <marius.hofert using uwaterloo.ca>
Cc: r-package-devel using r-project.org
Betreff: Re: [R-pkg-devel] How to write a 'cases' environment in .Rd files?

On Thu, 11 Aug 2022 18:43:44 +0000
Marius Hofert <marius.hofert using uwaterloo.ca> wrote:

> Since recently, r-devel-linux-x86_64-debian-clang and
> r-devel-linux-x86_64-debian-gcc trigger the note 'Undefined control
> sequence: \cases in F(x) = \cases{...', possibly due to KaTeX
> rendering help pages. I looked around quite a bit but couldn't find a
> way to implement 'cases' environments. For example,
> https://katex.org/docs/supported.html#environments mentions
> \begin{cases} \end{cases}, so I tried
>
> \deqn{F(x) = \begin{cases}
> 1,&\text{if}\ x > 0,\\
> 0,&\text{if} x = 0.}}{...}
>
> but that triggers:
>
> ...
> * checking PDF version of manual ... WARNING
> LaTeX errors when creating PDF version.
> This typically indicates Rd problems.
> LaTeX errors found:
> ! Misplaced alignment tab character &

There is a possible workaround, but it's the opposite of beautiful. You
can use conditional text to compile one version of the formula for HTML
help and another one for PDF help:

\ifelse{html}{\eqn{\begin{cases}...}}{\eqn{\cases{...}}{ascii}}

It's as tedious as it looks. For extra style(?) points, you can put a
three-argument user-defined macro in man/macros/whatever.Rd that
forwards its arguments to one of the \ifelse branches. As far as I
remember, \newcommand{}{} has to fit on one line, but in R ≥ 3.6.0,
macros themselves can take multi-line arguments.

If you're targeting an earlier version of R, you can make multi-line
arguments work by forcing R to cache the parse tree of the man page
while building a source tarball with a newer R version using
\Sexpr[stage=build]{}, costing you some time during R CMD build and a
slightly larger source tarball. (It's an implementation detail that one
normally shouldn't depend upon. Thankfully, as of 2022, there won't be
any newer versions of R ≤ 3.5.x to break it.) Support for
man/macros/*.Rd only appeared in R-3.2.0, so I haven't researched
compatibility tricks for even older versions of R.

--
Best regards,
Ivan

______________________________________________
R-package-devel using r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


More information about the R-package-devel mailing list