[Rd] Use of MathJax (or something similar) in .Rd files

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Tue May 5 15:37:30 CEST 2020

The package is really nice, I recommend it.  Package writers should
install it, but users of their help pages don't need it unless they're
working offline.  Even then, because of the way MathJax works, they get

"The probability density function of a normal distribution is given by
$f(x) = \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2},$ where $$\mu$$
denotes the mean of the distribution and $$\sigma$$ its standard deviation."

For a user who is online, or who has the mathjaxr package installed,
this would be displayed with the equation as a display equation, and mu
and sigma displayed properly inline.  To obtain that output I used this
input in an Rd file:

"The probability density function of a normal distribution is given by
\mjdeqn{f(x) = \frac{1}{\sqrt{2\pi} \sigma}
e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2},}{f(x) = 1/(sqrt(2
pi) sigma) e^-((x - mu)^2/(2 sigma^2)),} where \mjeqn{\mu}{mu} denotes
the mean of the distribution and \mjeqn{\sigma}{sigma} its standard
deviation."

A frill that might be possible to add would be a test for a remote
connection, and a fallback to the ascii display if it's not there.  It
already has a display-time test for the presence of the MathJax files
locally.

Maybe once all the kinks are worked out this could be incorporated into
the R distribution.  However, it's not really needed there, since it
works so well as a contributed package already.

Duncan Murdoch

On 05/05/2020 9:11 a.m., Viechtbauer, Wolfgang (SP) wrote:
> Hi All,
>
> After some tinkering, and with support from Duncan, I put together a package that allows for easy inclusion of MathJax equations in Rd files. The package has been submitted to CRAN, but those who want to try this out already can get it here:
>
> https://github.com/wviechtb/mathjaxr
>
> or in other words:
>
> install.packages("remotes")
> remotes::install_github("wviechtb/mathjaxr")
>
> Package authors can then use the \loadmathjax macro to enable its use and the \mjeqn{latex}{ascii} and \mjdeqn{latex}{ascii} macros for including inline and displayed equations.
>
> Feedback and suggestions more than welcome!
>
> Best,
> Wolfgang
>
>> -----Original Message-----
>> Sent: Thursday, 30 April, 2020 15:58
>> To: Viechtbauer, Wolfgang (SP); r-devel
>> Subject: Re: [Rd] Use of MathJax (or something similar) in .Rd files
>>
>> Thank you.  This is a very useful idea!
>>
>> Best,
>> Ravi
>> ________________________________________
>> From: R-devel <r-devel-bounces using r-project.org> on behalf of Viechtbauer,
>> Wolfgang (SP) <wolfgang.viechtbauer using maastrichtuniversity.nl>
>> Sent: Thursday, April 30, 2020 6:59:02 AM
>> To: r-devel
>> Subject: Re: [Rd] Use of MathJax (or something similar) in .Rd files
>>
>> Thanks Gabor and Duncan! It works. For those interested, I added this to the
>> beginning of the \details{} section:
>>
>> \if{html}{\out{
>> <script id="MathJax-script" async
>>     src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
>> </script>
>> }}
>>
>> And then I can use:
>>
>> \if{html}{\out{$$B_{x(a,b)} = \int_0^x t^{a-1} (1-t)^{b-1} dt$$}}
>>
>> or
>>
>> \if{html}{\out{$B_{x(a,b)} = \int_0^x t^{a-1} (1-t)^{b-1} dt$}}
>>
>> to render the equation (inline or as 'displaymath'). I'll try to add MathJax
>> locally next.
>>
>> Best,
>> Wolfgang
>>
>>> -----Original Message-----
>>> From: Duncan Murdoch [mailto:murdoch.duncan using gmail.com]
>>> Sent: Thursday, 30 April, 2020 12:22
>>> To: Viechtbauer, Wolfgang (SP); r-devel
>>> Subject: Re: [Rd] Use of MathJax (or something similar) in .Rd files
>>>
>>> On 30/04/2020 6:15 a.m., Viechtbauer, Wolfgang (SP) wrote:
>>>> Interesting. I gave this a try, but couldn't make this work. One would
>>> have to infuse something like
>>>>
>>>> <script id="MathJax-script" async
>>>>      src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
>>>> </script>
>>>>
>>>> or
>>>>
>>>> <script id="MathJax-script" async
>>>>      src="<url-to-your-site>/mathjax/tex-chtml.js">
>>>> </script>
>>>>
>>>> into the .html file, but just adding this to the .Rd file (directly or
>>> wrapped with \if{html}{}) doesn't do that (it just gets printed). If
>>> somebody has already successfully done this, I would be interested in
>>> hearing how.
>>>
>>> You'd need to wrap that code in \out (inside the conditional, i.e.
>>> something like
>>>
>>> \if{html}{\out{<script id="MathJax-script" async
>>> src="<url-to-your-site>/mathjax/tex-chtml.js"></script>}}
>>>
>>> Duncan Murdoch
>>>
>>>>
>>>> Best,
>>>> Wolfgang
>>>>
>>>>> -----Original Message-----
>>>>> From: Gábor Csárdi [mailto:csardi.gabor using gmail.com]
>>>>> Sent: Thursday, 30 April, 2020 11:51
>>>>> To: Viechtbauer, Wolfgang (SP)
>>>>> Cc: r-devel
>>>>> Subject: Re: [Rd] Use of MathJax (or something similar) in .Rd files
>>>>>
>>>>> You can probably already do this using the \if{html} conditional, and
>>>>> either including the matchjax js files in the package, or getting them
>>>> >from a CDN.
>>>>>
>>>>> Gabor
>>>>>
>>>>> On Thu, Apr 30, 2020 at 9:13 AM Viechtbauer, Wolfgang (SP)
>>>>> <wolfgang.viechtbauer using maastrichtuniversity.nl> wrote:
>>>>>>
>>>>>> Hello All,
>>>>>>
>>>>>> I am wondering if there has ever been any discussion/consideration
>> given
>>>>> to incorporating MathJax (or something similar) into R for rendering
>>>>> equations in .Rd files. I know that equations are rendered beautifully
>> in
>>>>> the pdf manuals, but I suspect the majority of users primarily look at
>>> the
>>>>> html help files when using R. While I am comfortable reading something
>>> like
>>>>> "B_x(a,b) = integral_0^x t^(a-1) (1-t)^(b-1) dt", it would definitely be
>>>>> nicer if this was shown as a 'proper' equation.
>>>>>>
>>>>>> Best,
>>>>>> Wolfgang
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>