経緯

先日,こういう情報が流れてきました:

MathJax CDN shutting down on April 30, 2017.

内容としては,「MathJaxの自前CDNサーバーを4/30に閉じますよ」って話で,「ローカルに落としとくか代替となるクラウドサーバーを使ってね」ということです。

さてこのMathJaxというのは,HTMLドキュメントなどで数式を綺麗に出してくれるライブラリです。Markdownなど利用していると,$$$などでTeX記法の数式を挟み込むと数式をレンダリングしてくれる機能を提供してくれたりします。

このMathJaxですが,R Markdownの数式でも利用されていますし,RStudioのリアルタイムプレビュー機能もおそらくは利用されています。ということは,R Markdownなどに影響が出るかもしれないのです。というわけで調べてみました。

調査結果

RStudioの場合

RStudioはbuildの際にMathJaxを組み込んでいるようです。Ubuntu版だと/usr/lib/rstudio/resources/mathjax-26/にいました。きっちりと確認してませんが,Rmdファイル編集中に表示されるリアルタイム数式プレビューはlocalのを利用しているはずなので,おそらくは大丈夫だと思います。

R Markdownの場合

結論から言うと,影響を受けます

まず,html_documentをデフォルトで出力した場合,Pandocに送られる内容は以下の記事にまとめてます:

RStudioの”knit HTML”でPandocに送っている内容 - Qiita

このurlは,まさに最初に紹介したMathJaxの記事で記載されている,停止するCDNサーバーです。なおこれは現在のversionでも変更がないのを確認しています。

したがって,このままですと4/30以降にknitしたRmdでは,MathJaxを標準設定のままではうまく表示されない可能性があります。したがって対応を考える必要があるでしょう。

なお,すでに作ってきたhtml_documentの場合はどうなるかというと,こちらも影響を受けます。ただ,self_contained: TRUE(デフォ値)にしてれば組み込まれるんで大丈夫じゃないか? と思われるかもしれません。ですが,MathJaxはself_contained: TRUEであっても直接WebのCDNから読みこむように設定してあります。理由は省略しますが,気になる方はコメントで書き込んでください。

対策

影響する範囲

rmarkdownパッケージは完全に影響を受けます。あとR Markdownのテンプレートなどを提供するパッケージにも影響します。たとえばxaringanパッケージは確実に影響を受けるでしょう。

基本的な考え方

MathJaxは先の記事で代替となる場所を示していますので,そちらを利用するように調整すればOKです。

YAMLフロントマターに,以下のような感じで追加してKnitすればOKです:

---
output:
  html_document:
    mathjax: "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
---

これで差し替わります。またURLの途中にある数値(version)を書き換えてやればそれに対応したものが当たるようになります。

すでに生成したドキュメントについて

Rmdがあるのであれば,再度レンダリングするのがはやいかと。Rmdがないのであれば,サイトなどのHTMLを編集する必要があります。

パッケージ側を編集する

rmarkdownをフォークするなりして,該当箇所を修正したもので使っていくという方法もあります。あるいはプルリクを出してそのものを変更していく,という方法もあります。

ひとまず該当箇所を修正してプルリクを出してみたけど,どうなるかな…

雑感

てことで調べてみて行動してみたけれど,RStudioやR Markdownまわりで全然話題になってないのよ…影響ない,とは思えないんだけど間違ってるのかな。不安でしょうがないです。

Enjoy!