「フォント」の版間の差分

提供:Turgenev's Wiki
(Notion-MW)
 
(Notion-MW)
タグ: 置換
1行目: 1行目:
フォントに関する話題。[[AFDKOによるOpenTypeフォントの作成|AFDKOによるOpenTypeフォントの作成]] も参照。
<span id="ttxの使用例&#58;-フォント名の変更"></span>
== ttxの使用例&#58; フォント名の変更 ==
=== ttx ===
<strong>ttx</strong>はフォントの中身(またはその一部)をxmlに変えていじってからまたフォントに戻すことができるツールで、[https://github.com/fonttools/fonttools fonttools]に含まれている。入れるのは簡単で、Pythonをインストールしてからpip install fonttoolsとすればよい。またttxは[https://github.com/adobe-type-tools/afdko AFDKO](使えるコマンド一覧は[https://github.com/adobe-type-tools/afdko/blob/develop/docs/AFDKO-Overview.md こちら])をインストールすることによっても入れられる。こちらもpip install afdkoでよい。
なお、名前からするとtruetypeフォントにしか対応していなさそうだが、opentypeにも使える。実はopentypeはtruetypeの後継で、形式的に全く無関係なわけではなく、AFDKOのツールもこの両方に対応しているものが多い。
truetypeとopentypeの通常の拡張子はそれぞれ.ttfと.otfだが、.tt<strong>c</strong>や.ot<strong>c</strong>と末尾がcになっているものはフォントコレクションといって複数のttfやotfが一緒にされたものである。
現在、ttxはttcをxmlにすることはできるが、それを<strong>ttcに戻すことはできない</strong>([https://github.com/fonttools/fonttools/issues/17 https://github.com/fonttools/fonttools/issues/17])(というより多分、ttcを出力すること自体が全くできない)(当然otcもできない)ので、コレクションをフォント単体に分割する必要がある。これはAFDKOの<strong>otc2otf</strong>(これも名前に反してttcにも使える)を使うとできる。従って、ttcやotcを使う場合は、<strong>最初からAFDKOをインストール</strong>するほうがよい。
なお、どうせ選ばれるフォントは1つなので、分割して名前を変えたフォントを再びコレクションに戻す必要はないだろう(必要であれば<strong>otf2otc</strong>(名前もさっきと逆なので注意)が使える)。
=== フォントファイルの選定 ===
名前を変えるための元になるフォントファイルを選ぶ。ttf、ttc、otf、otcのどれかの拡張子のものを選べばよい。新たにダウンロードしてもよいし、インストール済みのC&#58;\Windows\FontsやC&#58;\Users\username\AppData\Local\Microsoft\Windows\Fontsから選んでもよい。以降で誤操作のおそれがあるので作業用フォルダにコピーしておくのがよい。
ところで、C&#58;\Windows\Fontsはエクスプローラーだとコントロールパネル扱いで独特の表示がされていて、コマンドプロンプトで見るなどしないとファイルの拡張子がわからない。個人的にはシンボリックリンクを作成(cmdでmklink /J linkname targetname)してそこ経由で行くのがおすすめだが、そんなことをしなくても実は日本語フォントの拡張子は普通その4種類のどれかなのであまり問題はない。普通のフォルダと同様にフォントファイルのコピーはできるので、他のフォルダに貼り付けて、万が一違ったら考えればいいだろう。日本語フォント以外だとたまに「.fon」とかで終わる謎のフォントがあるがこれが使えるのかは知らない。
なお、フォントファイルをコピーするとなるとライセンスの問題が一応気になるが、同一PCにインストールする分には大丈夫かと思われる。改変についても、合理的な目的と個人利用の範囲であり、倫理的にもあまり問題はないだろう。もちろん、pdfビューアの表示以外でこの改変フォントをわざわざ使用するのはよろしくないかもしれないし、そうする意味もないだろう。
=== otc2otf ===
ttcやotcを選んだ場合はこれで分割する必要がある。といっても使い方も何もなく、<code>otc2otf filename</code>を実行するだけである。フォント名に従ってわかりやすいファイル名で出力される。
=== ttxで名前の変更 ===
いよいよ名前の変更を行う。ttfやotfのデータはいくつかの「テーブル」に分かれているが、今回使用するのはそのうちの「name」というテーブルである。ttxでこれを取り出すには
<pre class="dummy_str_visual_basic">ttx -t name fontfile.ttf</pre>
とする。tはtableの頭文字である。これで、fontfile.ttxというXMLが出力される。
中身はとても簡明で、メモ帳でも問題なく編集できる。
<div style="overflow:auto;width: 100%; max-width: 1200px; white-space:nowrap; border:1px solid; padding-left: 10px; padding-right: 10px;" class="mw-collapsible">
<div>例えばこのような感じ</div>
<div class="mw-collapsible-content">
(このデータは[http://fonts.jp/hanazono/ 花園フォント]と同じく[https://glyphwiki.org/wiki/GlyphWiki:%e3%83%a1%e3%82%a4%e3%83%b3%e3%83%9a%e3%83%bc%e3%82%b8 GlyphWiki]のデータをもとにしたフォントとして筆者が最近公開した[https://github.com/ge9/NazonoMincho https://github.com/ge9/NazonoMincho]のものである)
<pre class="dummy_str_visual_basic">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;ttFont sfntVersion=&quot;OTTO&quot; ttLibVersion=&quot;4.38&quot;&gt;
  &lt;name&gt;
    &lt;namerecord nameID=&quot;1&quot; platformID=&quot;1&quot; platEncID=&quot;0&quot; langID=&quot;0x0&quot; unicode=&quot;True&quot;&gt;
      NazonoMincho Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;2&quot; platformID=&quot;1&quot; platEncID=&quot;0&quot; langID=&quot;0x0&quot; unicode=&quot;True&quot;&gt;
      Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;3&quot; platformID=&quot;1&quot; platEncID=&quot;0&quot; langID=&quot;0x0&quot; unicode=&quot;True&quot;&gt;
      0.001;YHVH;NazoMin
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;5&quot; platformID=&quot;1&quot; platEncID=&quot;0&quot; langID=&quot;0x0&quot; unicode=&quot;True&quot;&gt;
      Version 0.001;hotconv 1.1.0;makeotfexe 2.6.0
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;6&quot; platformID=&quot;1&quot; platEncID=&quot;0&quot; langID=&quot;0x0&quot; unicode=&quot;True&quot;&gt;
      NazoMin
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;16&quot; platformID=&quot;1&quot; platEncID=&quot;0&quot; langID=&quot;0x0&quot; unicode=&quot;True&quot;&gt;
      NazonoMincho
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;1&quot; platformID=&quot;1&quot; platEncID=&quot;1&quot; langID=&quot;0xb&quot; unicode=&quot;True&quot;&gt;
      謎乃明朝 Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;2&quot; platformID=&quot;1&quot; platEncID=&quot;1&quot; langID=&quot;0xb&quot; unicode=&quot;True&quot;&gt;
      Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;4&quot; platformID=&quot;1&quot; platEncID=&quot;1&quot; langID=&quot;0xb&quot; unicode=&quot;True&quot;&gt;
      謎乃明朝 Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;16&quot; platformID=&quot;1&quot; platEncID=&quot;1&quot; langID=&quot;0xb&quot; unicode=&quot;True&quot;&gt;
      謎乃明朝
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;1&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x409&quot;&gt;
      NazonoMincho Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;2&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x409&quot;&gt;
      Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;3&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x409&quot;&gt;
      0.001;YHVH;NazoMin
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;4&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x409&quot;&gt;
      NazonoMincho Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;5&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x409&quot;&gt;
      Version 0.001;hotconv 1.1.0;makeotfexe 2.6.0
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;6&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x409&quot;&gt;
      NazoMin
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;16&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x409&quot;&gt;
      NazonoMincho
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;1&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x411&quot;&gt;
      謎乃明朝 Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;2&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x411&quot;&gt;
      Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;4&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x411&quot;&gt;
      謎乃明朝 Regular
    &lt;/namerecord&gt;
    &lt;namerecord nameID=&quot;16&quot; platformID=&quot;3&quot; platEncID=&quot;1&quot; langID=&quot;0x411&quot;&gt;
      謎乃明朝
    &lt;/namerecord&gt;
  &lt;/name&gt;
&lt;/ttFont&gt;</pre>
</div></div>
色々と名前っぽい欄があってどれを変えたらいいのかわからないので、とりあえず名前っぽいものを手当たり次第全部変えることにしている。
使う文字としては、「&#45;」(ハイフン)を先頭に2つか3つほど付けるのがおすすめ。ハイフンはASCIIコード順でも全ての英数字より前で(意外と数字より後の記号も多い)、多くのフォント名で問題なく使われ、またOffice系のソフトで内部的に使われているとみられる「+見出しのフォント」「+本文のフォント」のような「+」で始まるフォント名と競合する心配もない(+は&#45;よりさらに前)。「0」を1つ付けるだけだと、意外と「01」とかで始まるフォントがあってそれに負けたりするので注意。
.ttxファイルを書き換え終わったら、次のコマンドで元のフォントファイルに適用する。
<pre class="dummy_str_visual_basic">ttx -m fontfile.ttf fontfile.ttx</pre>
mはmergeの頭文字である。ttfとttxの順番を間違えやすいので注意すること。基本的に、マージの時に使うフォントファイルは1つ、対してttxファイルは(今回の例とは違って複数のテーブルを一気にマージする場合は)複数あるかもしれないと考えると、1つしかない方を&#45;mの引数にするほうが簡明だと思われるので、それで覚えられる。といっても&#45;tの引数には複数のテーブルを指定できるわけだが…
問題がなければ、fontfile&#35;1.ttfのようなファイルが生成される(既存ファイルへの上書きは回避される)。ダブルクリックで開いてみて、名前が変わっていることを確認する。
[[Category:IT]]{{#seo:|title={{FULLPAGENAME}} - Turgenev's Wiki}}
[[Category:IT]]{{#seo:|title={{FULLPAGENAME}} - Turgenev's Wiki}}

2023年11月24日 (金) 11:02時点における版