以下の内容はhttps://nikkie-ftnext.hatenablog.com/entry/sphinx-revealjs-meets-sphinxcontrib-mermaidより取得しました。


sphinx-revealjs製スライドにMermaidによる図を表示する

はじめに

PyCon mini Shizuoka 2024 continue、1日ありがとうございました! nikkieです。

登壇準備からSphinxまわりの小ネタです。
スライド作成にはattakeiさんのsphinx-revealjsを使っています。

目次

sphinx-revealjs製スライドにMermaidによる図を表示

こちらのスライドがそれです。
https://ftnext.github.io/2025-slides/pyconshizu/logging-with-nullhandler.html#/24/2

Logging Flowの図(簡易版)をMermaidで書いています1

SphinxのドキュメントにMermaidによる図を埋め込んだことがあった

2023年のXP祭り ワークショップ2の資料にて
https://ftnext.github.io/small-technical-2023/chapter-refactoring.html#id7

sphinxcontrib-mermaidを使っています。

この拡張によりmermaidディレクティブが有効になります3

.. mermaid::

    sequenceDiagram
        省略

sphinx-revealjs製スライドでも埋め込める理由

sphinx-revealjsでもmermaidディレクティブを使いました。
https://github.com/ftnext/2025-slides/blob/75a2490ecc9d3a7b805f69dff4d51954ff8f31b9/source/pyconshizu/gleanings.rst.txt#L153

.. mermaid:: logging-propagate-flow.mmd

(ファイルも指定できるのです)

sphinx-revealjsと組合せても動く理由を見ていきましょう。
sphinxcontrib-mermaidのREADMEより

the HTML builder will simply render this as a div tag with class="mermaid"

より具体的に知るべく実装を見ると
https://github.com/mgaitan/sphinxcontrib-mermaid/blob/1.0.0/sphinxcontrib/mermaid/__init__.py#L518-L525

def setup(app):
    app.add_node(
        mermaid,
        html=(html_visit_mermaid, None),
        # 省略
    )
    # 省略

html=(html_visit_mermaid, None)は、HTMLビルダーのvisitor functionの設定です。
ref: https://www.sphinx-doc.org/ja/master/extdev/appapi.html#sphinx.application.Sphinx.add_node

これまでの経験から、sphinx-revealjsはHTMLビルダーと理解しています。
sphinx.ext.githubpagesが動くかを見たときに、RevealjsHTMLBuilderStandaloneHTMLBuilderを継承しており、アウトプット形式がHTMLであることを確認しました。

Sphinxの挙動をより詳細に理解する余地はありますが、sphinxcontrib-mermaidはsphinx-revealjsと一緒に動いているので、今回はここまでとします。

裏話

  • Mermaidで画像にして4スライドに載せる方法もありましたが、致命的にうまくいっていないわけでもないので決行しました
  • スライドの背景色を黒から白に変えたのは、mermaidディレクティブで黒い線と文字で描画するために何も見えなくなる問題に対処して
  • 該当スライドのリロードが必要になる理由はよく分かっていません(宿題事項)
    • 記事を書いていて気付いたのですが、Reveal.js側のMermaid埋め込みの情報を見に行ってもいいかも

終わりに

sphinx-revealjsのスライドにsphinxcontrib-mermaidでMermaidによる図を埋め込めます!
よりうまく使いこなす伸びしろがありそうですが、また次に触るときに考えたいと思います。




以上の内容はhttps://nikkie-ftnext.hatenablog.com/entry/sphinx-revealjs-meets-sphinxcontrib-mermaidより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14