0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mermaid-cliで出力されるSVGをWebブラウザ以外でも正常に読めるようにする

Posted at

対処方法へのショートカット

フローチャート等の様々なダイアグラムを定義するマークアップ言語のMermaid。以下のような記法。

カレーの作り方.mmd
flowchart TD
    A[材料を準備する] --> B[玉ねぎを炒める]
    B --> C[肉を加えて炒める]
    C --> D[野菜を加える(にんじん・じゃがいも)]
    D --> E[水を加えて煮込む]
    E --> F[アクを取る]
    F --> G[材料が柔らかくなるまで煮る]
    G --> H[火を止めてルーを入れる]
    H --> I[ルーを溶かす]
    I --> J[再び火をつけて煮込む]
    J --> K[完成!盛り付ける]

Mermaid記法で記述されたテキストからダイアグラム画像を出力するコマンドラインツールのmermaid-cliを使えばお手軽に画像化できて便利。上記のテキストは以下のように画像化できる。
curry.jpg
PNGだけでなくベクター画像のSVGやPDFの出力もできる。

しかしながら、mermaid-cliで出力されるSVGをWebブラウザ以外で読もうとしても正常に読み込まない。例えば、Inkscapeで読み込むと、
curry_inkscape.jpg

PDFで出力して、pdf2svgでSVGを生成すれば正常に読めるが、これだとテキストがパスデータになっていたりして不便。何とか直接生成されるSVGを読めるようにしたい。

原因

mermaid-cliで出力されるSVGには一部の環境でサポートされないCSSが含まれるかららしい。
参考
Mermaid Live Editorでも同じ症状なので、おそらく公式の実装の仕様。

対処方法

mermaid-js公式のissueで紹介されている方法を参考に以下の手順で修正。

  1. 設定ファイルを書く。
config.json
{ "flowchart": { "htmlLabels": "false" } }
  1. mmdcを実行する時に↑の設定ファイルを適用する。
$ mmdc -c config.json -i [Mermaidテキストファイル名] -o [SVGファイル名]
  1. 出来上がったSVGに対し、以下のように書き換え。
$ cat [元のSVGファイル名] | sed 's/root{--mermaid-font-family/root{mermaid-font-family/' > [変更後のSVGファイル名]

Inkscapeで読み込んでみる。
curry_converted.jpg

👍

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?