読者です 読者をやめる 読者になる 読者になる

にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

「、」「。」を「,」「.」で表示するフォントをつくる

概要

「、」「。」の文字を「,」「.」の形で表示するフォントを ttx を使って作成し、句読点として「、」「。」を使った文章を、文字列の情報に変更を加えないままで「,」「.」で表示できるようにする。

モチベーション

理系では日本語で論文を書く時には、読点としてカンマ「,」、区点としてピリオド「.」を用いることが通例である。しかし日本語入力のデフォルトはテンマルであって、カンマピリオドを使う場合はIMEの設定を変えるか、入力するキーを変える必要がある*1
私は普段パソコンで文章を書く時はテン・マル「、」「。」を使っており、カンマピリオドを使うためにわざわざ切替えるのは面倒である。そのため、最終的にカンマピリオドで文章を出力しなければならないとすると、文章の中のテンマルをカンマピリオドに置換する必要がある。

そこで、「、」「。」の文字コードをカンマピリオドで表示するようなフォントを作成することができれば、フォントをそれに置き換えるだけで、テンマルがカンマピリオドに置換された様に見える。以下では「、」「。」の文字コードをカンマピリオドで表示するようにフォントを改変する方法について述べる。

やること

今回はフォントの中の cmap を変更した。 cmap とは文字コードをフォント内のグリフで表示するために使われる、Unicode値からフォント内のグリフの内部IDへの割当てである。この割当てを変更すれば、表示されるグリフを変えることができる。

今回関係がある文字とUnicodeの値は以下のようになっている。

U+3001 IDEOGRAPHIC COMMA
U+3002 IDEOGRAPHIC FULL STOP
U+FF0C FULLWIDTH COMMA
U+FF0E FULLWIDTH FULL STOP

U+3001で表示されるグリフをコンマのものに、U+3002で表示されるグリフをピリオドのものに変更できればよい。

用意するもの

今回は、IPAex明朝に ttx を使って変更を加えることにする。今回はWindowsにて行ったが、MacLinuxでも同様にできるはずである。

手順

ttxファイルの作成

コマンドプロンプトでIPAex明朝のフォントファイルと同じディレクトリに移動し、以下のようにコマンドを実行する。

ttx ipaexm.ttf

すると、 ipaexm.ttx ファイルができあがる。これはttfファイルに含まれる情報をテキストベース記したXMLファイルで編集が容易であり、同じ ttx コマンドによってttfファイルに戻すことができる。

ttxファイルの編集

このttxファイルをテキストエディタなどで開く。すると、

      <map code="0xff0c" name="aj636"/><!-- FULLWIDTH COMMA -->
      <map code="0xff0e" name="aj637"/><!-- FULLWIDTH FULL STOP -->

と書かれている部分がある。ここから、「,」(0xff0c)のグリフは“aj636”、「.」(0xff0e)のグリフは“aj637”に結びつけられていることわかる。

また、別のところに次のように書かれている部分がある。(一箇所だけではない)

      <map code="0x3001" name="aj634"/><!-- IDEOGRAPHIC COMMA -->
      <map code="0x3002" name="aj635"/><!-- IDEOGRAPHIC FULL STOP -->

これを次のように変更する。

      <map code="0x3001" name="aj636"/><!-- IDEOGRAPHIC COMMA -->
      <map code="0x3002" name="aj637"/><!-- IDEOGRAPHIC FULL STOP -->

要するに、「、」(0x3001)「。」(0x3002)の文字コードに対して「,」「.」のグリフを示すように変更している。
この変更をファイル内の別の部分についても行う。(自分がやった時には三箇所あった)

変更した後に保存する。

ttfファイルの生成

ttx ipaexm.ttx

を実行すると ipaexm#1.ttf などの名前でフォントファイルが生成され、これが求めるフォントファイルである。
これを普通のIPAex明朝のフォントファイルと置換えるとテンマルがコンマピリオドで表示されるようになる。

まとめ

  • 「、」「。」の文字を「,」「.」の形で表示するフォントを作成する方法を示した。句読点として「、」「。」を使った文章を、文字列の情報に変更を加えないままで「,」「.」の図形で表示できるようになった。
  • この方法によって作成したフォントを埋め込んだPDFでは、画面上では「,」「.」として表示されるが選択してコピーしテキストエディタなどに貼り付けると「、」「。」となる文字が存在する。これは文字コードとしては「、」「。」を保持しているからで、このことが問題になる場合もあるかもしれない。
  • フォントを改変することになるので、フォントのライセンスによってはこの方法は使用することができない。
  • (2015/02/10追記)「、」と「,」および「。」と「.」の形を区別して使っているテキストには用いることができない。句読点以外に使われる例もあり、注意が必要

*1:親指シフト(NICOLA)では「、。」と「.,」は別キーに割り当てられていて打ち分けることができる。また漢直入力用のソフトである漢直Winではモード切替で「、。」と「,.」の入力を切替ることができる