TeXのレポートに貼り付けたいが、TeXではSVG形式は扱えないのでPDFにしたくなった。やってみたら思ったより面倒だったので備忘録として残す。
dotファイルの用意#
前回と同じにする。ファイル名はgraph.dot
とする。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| digraph {
graph [ rankdir="LR" ];
node [ shape="circle", fixedsize=true, height=0.6 ];
Q0 [texlbl="$q_0$"];
Q1 [texlbl="$q_1$"];
Q2 [texlbl="$q_2$"];
Q3 [texlbl="$q_3$"];
Q4 [texlbl="$q_4$"];
Q5 [texlbl="$q_5$"];
Q6 [texlbl="$q_6$"];
Q7 [texlbl="$q_7$"];
Q8 [texlbl="$q_8$"];
Q9 [texlbl="$q_9$"];
Q10 [texlbl="$q_{10}$"];
Q11 [texlbl="$q_{11}$"];
Q12 [texlbl="$q_{12}$"];
Q13 [texlbl="$q_{13}$"];
Q0 -> Q1 [label=" ", texlbl="$\varepsilon$"];
Q0 -> Q4 [label=" ", texlbl="$\varepsilon$"];
Q0 -> Q7 [label=" ", texlbl="$\varepsilon$"];
Q1 -> Q2 [label=" ", texlbl="$a$"];
Q2 -> Q3 [label=" ", texlbl="$b$"];
Q3 -> Q7 [label=" ", texlbl="$\varepsilon$"];
Q4 -> Q5 [label=" ", texlbl="$b$"];
Q5 -> Q6 [label=" ", texlbl="$b$"];
Q6 -> Q7 [label=" ", texlbl="$\varepsilon$"];
Q7 -> Q8 [label=" ", texlbl="$a$"];
Q7 -> Q0 [label=" ", texlbl="$\varepsilon$"];
Q8 -> Q9 [label=" ", texlbl="$\varepsilon$"];
Q8 -> Q11 [label=" ", texlbl="$\varepsilon$"];
Q9 -> Q10 [label=" ", texlbl="$b$"];
Q10 -> Q13 [label=" ", texlbl="$\varepsilon$"];
Q11 -> Q12 [label=" ", texlbl="$c$"];
Q12 -> Q13 [label=" ", texlbl="$\varepsilon$"];
}
|
dot → tex#
$ dot2tex graph.dot > graph.tex
tex → pdf#
駄目なパターン#
$ platex graph.tex
$ dvipdf graph.dvi
これをやると、一部が画面からはみ出したグラフが作成されてしまう。
graph.tex
のプリアンブルを見てみる。
1
2
3
4
5
6
7
8
9
10
11
12
| \documentclass{standalone}
\usepackage[x11names, svgnames, rgb]{xcolor}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{snakes,arrows,shapes}
\usepackage{amsmath}
\begin{document}
\pagestyle{empty}
\enlargethispage{100cm}
...
|
documentclass
がarticle
になっている。この設定だと、pdfのサイズがA4になる。enlargethispageでサイズを広げているようだが、なぜかうまくいっていないようだ。
article
をstandalone
に変えてみる。standalone
のときはenlargethispage
が使えないようなので、削除する。
1
2
3
4
5
6
7
8
9
10
| \documentclass{standalone}
\usepackage[x11names, svgnames, rgb]{xcolor}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{snakes,arrows,shapes}
\usepackage{amsmath}
\begin{document}
\pagestyle{empty}
...
|
これでもう一度次のコマンドを打つと、綺麗なpdfが作成される。
$ platex graph.tex
$ dvipdf graph.dvi
自動化#
いちいちstandalone
に変えてenlargepagesize
を削除するのは面倒なので、シェルスクリプトにまとめる。
例えば以下の内容をdot2pdf.sh
として保存する。
1
2
3
4
5
6
7
| dot2tex $1.dot > $1.tex
cat $1.tex\
| sed 's/\\documentclass{article}/\\documentclass{standalone}/'\
| sed 's/\\enlargethispage.*//' \
> $1.tex
platex $1.tex
dvipdf $1.dvi
|
graph.dot
と同じディレクトリに置いて、次のコマンドを実行すれば、dotからpdfが一気に作成される。
$ sh dot2pdf.sh graph