LoginSignup
1
0

LaTeXでPlantUMLのファイルを読み込む

Last updated at Posted at 2024-02-11

LaTeXでPlantUMLを使う(本来のやり方)

$\LaTeX$にはplantumlパッケージなるものがあり、以下のような使い方をします。

\documentclass{scrartcl}
\usepackage{plantuml}

\begin{document}
  \begin{plantuml}
    @startuml
    Alice -> Bob: test
    @enduml
  \end{plantuml}
\end{document}

しかし、この方法には欠点があります。

  • VSCodeでハイライトが効かない
  • PlantUML部分が長いと$\LaTeX$ファイルの管理が大変
  • 環境変数PLANTUML_JARを設定する必要がある

そこで、PlantUMLファイル(.pu)を\includegraphicsで直接読み込めるようにしてみました。

(PlantUMLファイルをVSCodeで編集する方法に関してはこの記事を参考にしてください)

LaTeXでPlantUMLファイルを読み込もう

環境はLuaLaTeXです。それ以外の環境だと動かない可能性があります。

方針

epstopdfパッケージを使うと、\epstopdfDeclareGraphicsRuleコマンドで、\includegraphicsで特定の拡張子のファイルのときのみ変換処理を施すということが可能になります。この仕様を利用します。

方法

必要なソフトウェア:

  • Pythonをインストールしておきます
  • PlantUMLをダウンロードしてplantuml.jarにリネームし、$\LaTeX$ファイルがあるディレクトリに配置します
  • InkscapeもインストールしてPATHを通します
  • Javaも最新版を入れておきましょう

以下のスクリプトを「pu2pdf.py」という名前で作成します。

pu2pdf.py
from sys import argv
import os

if len(argv) == 3:
    cat = 'cat'
    if os.name == 'nt':
        cat = 'type'
    tmp_dir = 'svg-inkscape'
    os.makedirs(tmp_dir, exist_ok=True)
    svg = os.path.join(tmp_dir, argv[1] + '.svg')
    os.system(cat + ' ' + argv[1] + ' | java -jar plantuml.jar -charset UTF-8 -tsvg -pipe > ' + svg)
    os.system('inkscape -z --file=' + svg + ' --export-pdf=' + argv[2])

また、$\LaTeX$ファイルのプリアンブル部分にはこのように書きます。

\usepackage{graphicx}
\usepackage{epstopdf}
\epstopdfDeclareGraphicsRule{.pu}{pdf}{.pdf}{
  python pu2pdf.py #1 \OutputFile
}

あとは、$\LaTeX$の本体部分でこのようにすれば、PlantUMLのファイルを使うことができます。

\includegraphics{ファイル名.pu}

lualatex -shell-escape ファイル名.texを実行します。この-shell-escapeオプションがないと動きません。

Pythonスクリプトの解説

Windows環境にも対応するため、Windows環境の場合はcatコマンドの代わりにtypeコマンドを使用します。

次にPlantUMLを呼び出し、パイプを利用してPlantUMLファイルの内容を流し込みます。また、リダイレクトを利用してSVGに吐き出します。

最後にInkscapeを呼び出してSVGからPDFに変換します。

余談: Pandocでも使える

Pandocでも使えます(yamlでheader-includesを使ってプリアンブルに宣言する必要はある)。

![キャプション](ファイル名.pu)
1
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
1
0