GhostでもMathJaxでLaTeXのようにきれいな数式を表現する

GhostでもMathJaxでLaTeXのようにきれいな数式を表現する
Photo by Bozhin Karaivanov / Unsplash

本ブログではCMSにGhostを使っている。

たまぁに、数式を使う記事を書きたくなるが、GhostではLaTeXで記述したってうまいことしてくれるMarkdownはない。

どうやらウェブサイトでLaTeXのような気レインは数式を表示するのにはMathJaxというJavaScriptによる描画エンジンを使えばいいらしい。

導入が無茶苦茶簡単だったわりに、いざ使うときにつまずいたのはここだけの話。

お話の前に

Ghostではすべてのページにコードを挿入する機能がDashboardにある。

今回はその機能を使わない

数式を使う記事なんて限られているので、使う記事にだけスニペットを挿入して運用していく方向性でいく。

「いやいや俺の書く記事に数式が出てこないものなんてない!LaTeXで数式を書きまくる!」って人はDashboardのCode Injectionに以下のスニペットを突っ込めばいい。

MathJaxを導入する

Getting Startedからドキュメントを開く。

MathJax
Beautiful math in all browsers.

Web IntegrationからStart Nowボタンをクリックすると導入の手順を教えてくれる。

現時点ではMathJax version 4が2024年にでた最新版だそう。セキュリティとかそういうのを重視てくれた良い感じのバージョンっぽいので、MathJax version 4を使います。

<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js"></script>

書きたい記事のPost settingsからCode Injectionを開き、Headerにコードをペタッと貼り付ければ「MathJaxのエンジン」は導入できる。

設定を書き込む

LaTeXに慣れている人なら気づいたと思うが、設定もお忘れなくということだ。具体的には、$がよくつかわれるものだからLaTeXの文脈で使われているかどうか判断できないからデフォでインライン数式が無効化されてる。

とりあえず私が以前使ったテンプレートを共有するが、自分なりにカスタマイズをAIに頼むなりして使うといいだろう。

<script>
window.MathJax = {
  tex: {
    inlineMath: [['$', '$'], ['\\(', '\\)']],
    displayMath: [['$$', '$$'], ['\\[', '\\]']],
    // TeX エンジンの完全初期化
    packages: {'[+]': ['base', 'newcommand', 'configmacros']},
    processEscapes: true,
    processEnvironments: true
  },
  startup: {
    typeset: true  // 初期組版を有効化
  }
};
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js"></script>

使い方

ディスプレイ数式は$$数式$$と書けばOKで、インライン数式は$数式$と書けばいい。

Previewで数式を確認できますよ。

入力中は脳内でLaTeX数式を書き上げる必要がありますが、そんなものはお手の物ですよね?

どんな感じの記事になるかを確認したければ僕の記事を見てどーぞ。

LogicoolのStreamCamがいいなって話
LogicoolのWebカメラの一つ、StreamCamをコロナによるオンラインミーティング以降からずっと使ってきている。結局当時はカメラオフの場面が多く、さほど使うことがなかったが、大学生となりカメラをオンにしたミーティングに参加する機会が多くなった。 StreamCamStreamCamを購入。1080p 60 FPS、高性能オートフォーカスと露出、縦方向ビデオ / ポートレート方向、汎用マウント、USB-C、デュアルマイクなどが特徴ですLogitech きっかけは使っているラップトップのちょっとした不具合(キーボードバックライトが点灯しなくなった)を修理する際、メーカーのミスで画面を割ってしまい、ディスプレイの交換修理になった。出張修理ということで、メーカー委託の業者が修理してくれたのだが、ディスプレイ交換の際、内臓Webカメラを指でべったり触ってしまったらしく、カメラの保護フィルムの粘着層に指紋がついてしまったようで、使い物にならないほど白ぼけてしまった。 とはいえ別にオンライン授業で高画質な映像を届ける機会などないし、複数回にわたる修理で呆れていたので、特に何もせずその

MathJaxを使って数式を書いたよ

Read more

TailscaleのSubnet Routesを消す

SynologyのNASにTailscaleを導入し、便利に使っている。 TailscaleにはSubnet routersという機能がある。 これは、Tailscaleネットワークに接続されたデバイスが、そのデバイスが接続されているローカルネットワーク(サブネット)全体へのアクセスを他のTailscaleデバイスに提供できる機能だ。つまり、Subnet routerとして設定されたデバイスを経由することで、Tailscaleネットワーク上の他のデバイスから、そのローカルネットワーク内の機器にアクセスできるようになる。 Subnet routers · Tailscale DocsUse subnet routers to give devices outside your local network access to services within specific subnets. Extend your private network with Tailscale.Tailscale 便利そうだなと思って設定をしてみたものの、結局使うことがなかった。 公式ドキュメント

By Sakashita Yasunobu

Boids

群れに指揮者はいない 鳥の群れは、誰かが指示を出しているわけではない。魚の群れも同じ。それぞれが周囲を見て、少しだけ動く。その繰り返しが、全体として秩序ある動きを生む。 これを1986年にCraig Reynoldsがコードで再現した。名前は Boids(bird + oid)。個体に与えるルールは3つだけ。 1. Separation ── 近すぎたら離れる 2. Alignment ── 周囲と同じ方向を向く 3. Cohesion ── 群れの中心に寄る これだけで、群れは群れらしく動く。 なぜ作ったか 群れの動きは、見ていて飽きない。 * 単純なルールから複雑な動きが生まれる ── 創発(emergence)の典型例。設計していないのに、設計したかのように見える。 * 自分のブログに置きたかった ── 静的なページに、動くものがあると空気が変わる。 * Web Components で作りたかった ── どこにでも持っていける部品として。 設計の話 見えないときは止める 画面外でアニメーションを回し続けるのは無駄。Inte

By Sakashita Yasunobu

Days Elapsed

一年を「面」で見る 一年は365日。数字で見ると多いけど、並べてみると案外少ない。 12ヶ月を並べて、過去を塗りつぶして、今日を光らせる。それだけのカレンダーを作った。進捗バーが「一次元」なら、これは「二次元」の進捗表示。 Year Progress一年は50週ちょっとしかない 2026年を週で数えると、52週とちょっと。 カレンダーで見ると長そうなのに、週で数えると急に短くなる。そんな感覚を形にしたくて、このページの上の方に進捗バーを置いた。 やっていることは単純で、「今年が何%進んだか」をリアルタイムで表示しているだけ。 なぜ作ったか 理由は3つある。 1. 時間を「量」として見たかった ── イベントや予定ではなく、単純に「どれだけ経ったか」を数値で見たかった。 2. 目に見える形にしたかった ── 抽象的な「一年」を、動く数字に落とすとどう感じるか試したかった。 3. 自分の場所に置きたかった ── 誰かのツールを借りるのではなく、自分のブログに自分で作ったものを置きたかった。 実装の話 せっかく作るなら、

By Sakashita Yasunobu