(10日目) blockdiag のフォントを切り替える
今日は最新の blockdiag で搭載されたフォント切り替え機能について紹介します。
かんたんなフォント指定
blockdiag は文字を描画する際に TrueType フォントを利用しています。
blockdiag は起動時にオプションを指定しない場合、
TrueType フォントがインストールされていないか探索します。*1
よく利用されるフォント指定方法は -f (--font)オプションを利用して TrueType フォントを指定する方法です。
$ blockdiag -f /path/to/font.ttf input.diag
この指定を行うと指定したフォントで文字の描画を行います。
実際に同じ図を複数のフォントでレンダリングしてみましょう。
サンプルには以下のソースを利用しました。
blockdiag { default_fontsize = 24; ABC -> def -> あいうえお -> 文章; }
- IPA フォント (ゴシック)
- IPA フォント (明朝)
- さざなみフォント (ゴシック)
- ヒラギノフォント
- AppleGothic
それぞれのフォントによって出力される文字がそれぞれ異なっていることがわかるかと思います。
世の中にはフリーのもの、有償のものを含め本当にたくさんのフォントがあるので、
興味が有る方はタイポグラフィやレタリングについて調べてみるととても楽しいと思います。
複雑なフォント指定 (複数のフォントを切り替える)
-f オプションを利用したフォントを切り替え方についてご紹介しましたが、
図の表現として一部の要素だけフォントを切り替えたいケースがあります。
blockdiag 1.1.0 では複数のフォントを切り替える方法として fontmap という考え方が導入されました。
fontmap は TrueType フォントと名前(フォントファミリー名)の対をリストにしたものです。
fontmap ファイル
fontmap を理解するには、実際の fontmap 定義ファイルを見てもらうのがわかりやすいと思います。
fontmap ファイルは以下のようなファイルです。
[fontmap] serif = /usr/share/fonts/truetype/ipafont/ipamp.ttf serif-bold = /usr/share/fonts/truetype/ipafont/ipamp.ttf sansserif = /usr/share/fonts/truetype/ipafont/ipagp.ttf monospace = /usr/share/fonts/truetype/ipafont/ipam.ttf cursive = /usr/share/fonts/truetype/ipafont/ipam.ttf cursive-italic = /usr/share/fonts/truetype/ipafont/ipam.ttf fantasy = /usr/share/fonts/truetype/ipafont/ipam.ttf
fontmap ファイルは一般的な ini 形式のファイルで、fontmap セクション([fontmap]) の中に
複数のフォントをリストアップしたものです。
フォントをリストアップする際、左辺にはフォントファミリー(font-family)名を記載します。
フォントファミリーは 1〜3つのパートからなる文字列です。
[フォント名称]-[総称ファミリ]-[スタイル]
それぞれのパートは以下の役割を持っています。
- フォント名称 (省略可)
- フォントの名称を指定する。自由に指定することができる。
- 総称ファミリ (必須)
- スタイル (省略可)
- フォントの装飾を指定する
- normal(装飾なし), bold(太字), italic(斜体), oblique(斜体) のいずれかの値を取る
- 省略時は normal として扱われる
例えば AppleGothic, ヒラギノ, IPAフォント(ゴシック/明朝)を利用する場合は
次のような fontmap ファイルを定義します。*2
[fontmap] apple-sansserif: /System/Library/Fonts/AppleGothic.ttf hiragino-sansserif: /Library/Fonts/Hiragino Sans GB W3.otf ipa-sansserif: /Users/tkomiya/fonts/ipagp.otf ipa-serif: /Users/tkomiya/Fonts/ipamp.otf
フォントの切り替え (fontfamily)
さて、fontmap を定義してしまえば、あとは図の定義でフォントを切り替えながら利用するだけです。
blockdiag では 2つの方法でフォントを切り替えることができます。
- default_fontfamily
- 図全体に反映されるフォント設定です。
- fontmap のフォントファミリーを指定します。
- 初期値は sansserif-normal です
- 要素毎の fontfamily 設定
- 要素ごとに設定されるフォント設定です。
- defualt_fontfamily より優先されて適用されます。
この2つを組み合わせると、特定の箇所だけ文字を大きくすることができます。
blockdiag { default_fontsize = 16; default_fontfamily = "ipa-sanserif"; // 標準のフォントを IPA ゴシックに設定 AppleGothic [fontfamily = "apple-sansserif"]; ヒラギノゴシック [fontfamily = "hiragino-sansserif"]; IPAゴシック; IPA明朝 [fontfamily = "ipa-serif"]; }
blockdiag で変換する際、--fontmap ファイルを fontmap ファイルを指定し忘れないようにします。
$ blockdiag --fontmap fontmaprc input.diag
フォントサイズの調整
ここまではフォント(書体)の話をしていましたが、文字描画の構成要素の一つに大きさ、つまりフォントサイズもがあります。
blockdiag では2つの方法でフォントサイズを変更することができます。
- default_fontsize 設定
- 図全体に反映されるフォントサイズ設定です。
- 初期値は 11 ポイントです。
- 要素毎の fontsize 設定*3
- 要素ごとに設定されるフォントサイズ設定です。
- default_fontsize より優先されて適用されます。
この2つを組みわせると、全体の文字を大きくしたり、特定の箇所だけ文字を大きくまたは小さくすることができます。
blockdiag { default_fontsize = 16; // 標準のフォントサイズを 16 ポイントに設定 小さい文字 [fontsize = 12]; // フォントサイズを小さくする 普通の文字; // 設定しない = 標準のフォント(16ポイント)を使用 大きい文字 [fontsize = 24]; // フォントサイズを大きくする }
まとめ
blockdiag では -f オプションと fontmap の二種類のフォント指定方法があります。
このふたつを使い分けて、ドキュメンテーションに役立ててください。
fontmap の仕組みが複雑すぎてすみません orz *4