Gitbookで生成したファイルがGitHub pagesに無視される

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なるエラーが出てファイル生成が中止されてしまうというものだ。これは、最終的にこの人の解決策を流用することにした。

Error: TypeError: speech.processExpression is not a function · Issue #2 · kgryte/tex-equation-to-svg · GitHub

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のルートにおけば良い。

というわけで、最初の問題、「ページを更新しないと数式が表示されない」が解決した。めでたしめでたし。面倒くさすぎるだろ何だこれ