TL;DR: .nojekyll
という名前の空ファイルをgithub pagesのルートに入れる
タイトルの通りの現象が起きて困っていた。
解決策の拍子抜け感に比べて状況としては結構こんがらがっていたのだが、順に説明していこうと思う。
以前に書いた方法で、Gitbookを使って生成したHTML/CSS/JSその他をgh-pages
ブランチにぶち込んだ。そこで数式表示のためにmathjax
を使っていたのだが、何か読み込みと実行とのタイミングがずれているらしく、ページを開いただけでは数式が出てこず、移動せずにF5などでページを更新して初めて数式が出てくるようになった。普通の人はWebページを開いたあとで戯れに一度更新してみたりはしない。よってこれは問題だ。
これを解決するために、mathjax
の設定として"forceSVG": true
を追加した。これでページ生成時にsvg
ファイルも一緒に設定され、html
ファイルはそれを読み込むだろうから、mathjax
の実行タイミングの問題は解決するはずだ。
ところでここで完全に別の問題が起きたので、並行して無理やり解決した。その問題はというと、mathjax
関連のJSコードから、Error: TypeError: speech.processExpression is not a function
なるエラーが出てファイル生成が中止されてしまうというものだ。これは、最終的にこの人の解決策を流用することにした。
mathjax
が古いAPIを叩いていることが原因らしいので、この呼び出しを全てtoSpeech
にすれば解決する。未だにNPMがどうやってパッケージを管理しているか理解していないので、ローカルにダウンロードされてきたパッケージのソースコードを直接sed
した。GitHub pages用のファイルが生成されるまでの一瞬だけ動けばそれでいいんだよ!!!
というわけでこの問題は解決したのでページが生成されるようになったのだが、見てみると何故かmathjax
の画像が全て404になっている。生成できていないのかと思ってGitHubを見に行くと、gh-pages
ブランチには同名のファイルがある。中身も正しい画像だった。だがその名前をコピペしてもGitHub pagesでは404 File Not Foundになる。完全にわけがわからなかった。
そこで「github pages file 404」とかで検索するとStackoverflowで似たような問題に出くわしている人がいた。以下の回答が今回は有用だった(most votedでもbest answerでもなかったので質問者の問題は別のところにあったのだろうが)。
How to fix HTTP 404 on Github Pages? - Stack Overflow
私はすでに忘れていたがGitHub pagesはjekyllを使って書くと想定されているので、jekyll的に無視するべきファイルは無視するようになっている。_
で始まる名前のファイルなどだ。mathjax
は_mathjax_XXXXXXXX.svg
みたいなファイルを生成するので、ものの見事に全て無視されていた。というわけで、GitHub pagesに「このページはJekyllとは関係ないですよ」と伝える必要がある。これは、.nojekyll
という名前のからのファイルをGitHub pagesのルートにおけば良い。
というわけで、最初の問題、「ページを更新しないと数式が表示されない」が解決した。めでたしめでたし。面倒くさすぎるだろ何だこれ