TTXによる
フォントのぞき基礎

2013年5月3日 mashabow

#mojiben0503

http://d.hatena.ne.jp/mashabow/20130426/1366986649

スペースキーで進みます

はじめに

今回の内容は

  • OpenType って気になってはいるけど
  • TTX? なにそれおいしいの?
  • どこから手をつければいいんですか><

といった初心者を対象にしています

もくじ

  1. フォントのぞき
  2. OpenType
  3. TTX
  4. TTX のオプション
  5. やってみよう
  6. 参考になる資料

フォントのぞき

フォントのぞき?

文字クラスタ界隈で

  • 「フォント手に入れたらまず中身のぞく」
  • 「フォント手に入れたらまず TTX でばらす」

みたいな話を聞いたり聞かなかったり

やりましょう

フォントのぞきに必要なもの

フォントファイルの中に、

  • どのようなデータが
  • どのように入っているか?

フォントフォーマットについて知ることが必要!

今回は OpenType フォーマットについて扱います

フォントファイルをのぞくためのツールが必要!

今回は TTX というツールを使います

きょうの方針

とっかかりをつかむ(ひとりだと多分とっつきにくい)

OpenType については概要を説明するだけ

  • 全部説明してたら時間がいくらあっても足りない
  • そもそも全部頭に入れる必要はない
  • 必要に応じて仕様書を参照すれば/ググればOK

フォントのぞきの方法に重点を置きます

フォントのぞきツールとしての TTX の使い方

必要な情報へのたどり着き方

OpenType

OpenType フォーマット

Microsoft と Adobe が策定

現在広く使われている

  • Windows, Mac, Linux, …
  • iOS, Android, Kindle, Kobo, …

OpenType の仕様書

ネット上で公開されてます! タダです!

OpenType specification version 1.6

http://www.microsoft.com/typography/otspec/

ISO/IEC 14496-22:2009 Open Font Format

http://standards.iso.org/ittf/PubliclyAvailableStandards/c052136_ISO_IEC_14496-22_2009(E).zip

両者の内容は技術的に等価

OpenType ということば

OpenType フォーマットは、実は次の2種類に分かれている

OpenType
PostScript アウトラインTrueType アウトライン
AdobeMicrosoft/Apple
拡張子 .otf拡張子 .ttf
OpenType“TrueType”

ややこしい><

どちらの意味で OpenType と言っているのか注意

今回は広義の方で使います

OpenType に入っているもの

OpenType フォントには何が入っているか?

  • グリフのアウトライン
  • 字幅
  • アセンダやディセンダの大きさ
  • 文字コード→グリフ の対応表
  • フォントの名前や作者の情報
  • ビットマップ
  • ……

いろいろある(フォントにもよる)

OpenType の構造

ではどのように入っているのか?

データの種類ごとにまとめられて格納されている

それぞれのまとまりをテーブルと呼ぶ

OpenType のテーブル

テーブルの例

グリフのアウトラインCFF , glyf
字幅hmtx, vmtx
文字コード→グリフ の対応表cmap
フォントの名前や作者の情報name

テーブルには4文字の名前がついている

必須のテーブルとそうでないテーブルがある

個々のテーブルの中身は仕様書を参照
(→ OpenType Tables

フォントファイルをのぞくには

直接フォントファイルをのぞく

  • バイナリ
  • 普通の人間にとってはわけわからん_(:3」∠)_

フォントエディタでのぞく

  • GUI で操作できるので直観的
  • とっつきやすい

TTX を使ってのぞく

  • テキスト
  • 検索・比較・編集がしやすい

TTX

TTX というツール

TTX/FontTools に含まれているコマンドラインツール

フォントファイル ⇄ TTX ファイル  の相互変換を行う

  • フォントファイル: *.otf *.ttf (*.ttc)
  • TTX ファイル: テキスト(XML文書) *.ttx

.ttx に入っている情報は元のフォントファイルの情報と同じ

  • 表現方法が違うだけで可逆的
  • .ttx の方が人間にとって読みやすい
  • 面倒なアドレス計算なんかをやってくれる

TTX というツール

Python 製:フォント界隈でよく使われている言語

LettError の Just van Rossum 作(Guido の弟)

現在のバージョンは2.3

基本0:TTX のヘルプを見る

ttx -h

あるいは

ttx

これだけでもOK

man ttx

こっちの方がちょびっと詳しい

基本1:フォント → .ttx の変換

dump (decompile)

ttx hoge.otf

hoge.ttx ができる

フォントファイルが .ttf でも同じ使い方(以下同様)

基本1:フォント → .ttx の変換

ちなみにこの状態で同じコマンドをもう一回実行すると

ttx hoge.otf

hoge#1.ttx ができる

上書きを絶対に回避してくれる

  • べんり!!
  • おせっかい!!!

さらにもう一回実行すると

ttx hoge.otf

hoge#2.ttx が(ry

基本2:.ttx → フォントの変換

compile

ttx hoge.ttx

hoge.otf ができる

すでに hoge.otf が存在している場合には、
上書きを回避してくれて hoge#1.otf などになる

.ttx の中身を編集すればフォントをいじることもできる

基本のまとめ:フォント ⇄ .ttx

ttx hoge.otf

hoge.ttx ができる

ttx hoge.ttx

hoge.otf ができる

注意!

著作権法や各フォントのライセンスに注意

日本の現行法の枠組みでは

  • 書体は著作物ではない
  • が、デジタルフォントはプログラムの著作物

フォント ⇄ .ttx の変換:複製にあたりうる

ファイルの改変:翻案にあたりうる

著作権法で認められている範囲を超えないように

注意!

著作権法や各フォントのライセンスに注意

ライセンス:メーカー・作者 ⇔ 使用者

有償フォント

  • 著作権法よりかなり厳しい制限(が多い)

無償フォント

  • 自由に使えるものもある
  • 「フリーフォント」が本当に「フリー」なのか注意

いずれにせよ、常に意識してください

TTXのオプション

さっきのやり方で変換すると

フォントによっては巨大な .ttx ができあがる
(和文フォントなど、もともとのサイズが大きいと特に)

カジュアルなフォントのぞき目的にはちょっと不便

  • ファイルがあんまりデカいと扱いづらい
  • 変換にも時間がかかる

こんなときに使えそうなオプションを紹介します

-s: テーブルをバラして出力

ttx -s hoge.otf

hoge.B_A_S_E_.ttx
hoge.C_F_F_.ttx
……
hoge._n_a_m_e.ttx
hoge._p_o_s_t.ttx
hoge.ttx      ができる

.ttx の前の部分がテーブル名に対応

フォントによって含まれるテーブルはいろいろ

-s: テーブルをバラして出力

hoge.B_A_S_E_.ttx
hoge.C_F_F_.ttx
hoge._n_a_m_e.ttx
hoge._p_o_s_t.ttx
……

アンダースコアの位置でテーブル名の大文字小文字を区別

ファイル名の大文字小文字を区別しないような
ファイルシステムでも大丈夫(Windows や Mac など)

-s: テーブルをバラして出力

hoge.ttx

<?xml version="1.0" encoding="ISO-8859-1"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="2.3">
  <GlyphOrder src="hoge.GlyphOrder.ttx"/>
  <head src="hoge._h_e_a_d.ttx"/>
  <hhea src="hoge._h_h_e_a.ttx"/>
  <maxp src="hoge._m_a_x_p.ttx"/>
       :
  <GSUB src="hoge._h_m_t_x.ttx"/>
  <DSIG src="hoge.D_S_I_G_.ttx"/>
</ttFont>

hoge.ttx の中で各テーブルの .ttx をインクルードしている

-t: 指定したテーブルだけを出力

ttx -t head hoge.otf

head テーブルだけが入った hoge.ttx ができる

ttx -t "CFF " hoge.otf

CFF テーブルだけが入った hoge.ttx ができる

テーブル名 ‘CFF ’ にスペースが入っているので、
引数に指定する場合はクオートでくくる必要がある

-t: 指定したテーブルだけを出力

ttx -t hhea -t vhea hoge.otf

hhea テーブルと vhea テーブルだけが入った
hoge.ttx ができる

複数のテーブルを指定するときには、
-t テーブル名」を複数個並べればよい

ttx -s -t hhea -t vhea hoge.otf

hoge.ttx
hoge._h_h_e_a.ttx
hoge._v_h_e_a.ttx の3ファイルができる

今回は割愛しますが、オプションはこれ以外にもあります

やってみよう

フォントのぞきの実践

なにはともあれ自分で実際にやってみるのが重要

自分が気になったところから

  • フォントのぞく ⇄ 仕様見る

を繰り返していくと、ちょっとずつわかってくる(かも!

やってみましょう

参考になる資料

参考になる資料

日本語 Web ページから:

vanilla の日記

http://vanillasky-room.cocolog-nifty.com/blog/cat43639865/index.html

T2FAnalyzer というソフトも配布されている

Web と文字

http://d.hatena.ne.jp/project_the_tower2/

OpenType 以外にもいろいろとおもしろい文字ネタが

参考になる資料

英語の資料:

Specification や Technical note

書籍

Yannis Haralambous:
Fonts & Encodings. O'Reilly Media, 2007.

  • TTX を使った OpenType の解説がある(170頁以上!)
  • PDF 版もある(誤植は直ってない

ありがとうごさいました

mashabow

http://shiromoji.net/