pLaTeXフォントの部分的変更に関する覚書

やりたかったこと

  • pLaTeX文書において,できるだけ簡便な指定で部分的に「文字修飾可能な等幅組み」をする
  • 半角文字は全角文字の半分の幅にする
  • できれば英数字はタイプライタ体になってほしい

問題

  • \texttt{}では日本語フォントが単に太字ゴシックになるだけで,しかも文字幅は上記のようにならない
  • 任意のフォントを上記のようなコマンドに割りあてる仕方がわからない
  • そもそもフォントを追加し,使えるフォントを増やす方法もよくわからない
  • フォント自体の指定の仕方がよくわからない

前提

現状

  • 問題は解決せず,やりたかったことは実現できていない
  • メトリックとかフォントマップとかに関わるファイルを触ったので,やったことだけは忘れないようにしたい

やったこと

メトリックファイルとフォントマップの追加

メトリック(フォントを組む幅や相対的なサイズなど)を記述したファイル (.tfm) と,メトリックとフォントファイル自体とを関連づけるフォントマップ (.map) というものがあり,これらは新しいtexliveには標準で付帯しているLCDF Typetoolsを使う.
ない場合はTeXのパッケージ管理ツールtlmgrを利用してインストールできるが,そもそもこれがないという場合はディストリビューション自体が古いか,完全にインストールできていないかの可能性が高いので,texlive自体を更新したほうがいい.
TeXliveの更新もtlmgrでできるらしいが,やり方はわかりませんので調べてください.

で,LCDF Typetoolsの中のotftotfmというコマンドを使って,OpenTypeフォントからTFMファイルとフォントマップファイルを生成する.
やり方はTeX Wikiの該当ページを完全に鵜呑みにするしかなかった(ので,後々微妙に間違ってるのか,そうでもないのかよくわからない事態に陥る).
https://texwiki.texjp.org/?TeX%E3%81%A8%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88

が,生成したかったOsaka-MonoフォントはTrueTypeで,このコマンドでは処理できなかったので,ウェブのツールでOpenTypeに変換した.
これも正しかったのかどうかはわからないが,一応動作はするようになった.

otftotfm --no-type1 -e 7t -fkern -fliga OsakaMono.otf -n OsakaMono > Osaka.map

フォントマップはMonoにしなかったのは,このあと同様に無印のOsakaフォントを処理したからで,フォントマップはまとめてしまって構わないらしいため.
二回目以降の上記コマンドの実行には,標準出力からのファイルの作成を命令する > ではなく,既存のファイルへの追記を命令する >> を使って出力する.

上のコマンドを必要なだけ実行したら,

tex testfont

を実行する.必要に応じてsudo権限で実行する.割とややこしいので詳細は該当Wikiページ参照.

なお,これを書くためにWikiの該当ページを見直していて,Font Difinitionファイルというのを作っていないことに気づいた.
フォントのなになにのシェイプが定義されていません的なメッセージだったので,これが問題に関係している可能性がある.
しかしもう疲れたので今はやらない.

なお,MacOSのフォントは一箇所にまとまっておらず散らばっている.どこにあるのかは調べてください.
フォントそのものを移動すると面倒が生じかねないので,シンボリックリンクを貼ってやる.

ln -s /Library/Fonts/Osaka.otf /usr/local/texlive/texmf-local/fonts/opentype/osaka

tfmファイルなどもこのディレクトリに作ればいいっぽい.ちなみにデフォルトではtexmf-localまでしかないのでこの下は作る.
しかしmktexlsrやってもパスを通しても,あんまりちゃんとこのあたりのディレクトリを見てくれていないんだよなあ…

TeXファイルの記述

上記のWikiページにも(よく見ると)書いてあったし,他にもhttp://d.hatena.ne.jp/zrbabbler/20110911/1315737566に詳しいが,本文中でフォントを指定する方法は,要するに通常のフォント指定のコマンドに別のフォントを割り当てるというのが手っ取り早いらしい.

\usepackage[OT1]{fontenc}
\renewcommand{\ttdefault}{Osaka}

\begin{document}

\ttfamily
This sentence is written in a typewriter font.

\end{document}

なんだが,よくわかっていないものの,そもそも和文フォントというのはJY1(横書き)かJT1(縦書き)でエンコードすべきものらしく,上のotftotfmの段階で間違っていたらしい.
しかし,上記のfontenc.styは欧文フォントエンコーディングにしか対応していない?らしい.
もっというと,どうやらこのfontenc.styは必須ではないらしいが,ではなにをしているのかというのもよくわからない.

結果

結局OsakaMonoでttfamilyを出力することはできず,等幅にもならなかった.さらにいうと,ワードのようにフォントだけ変えれば位置関係やサイズが揃うわけではなく,それらのことはメトリックという概念によってコントロールしているらしいことがわかった.であれば,そのためのメトリックを改めて記述してやれば,フォントがなんであろうと等幅で組むことができるということではないだろうか.
あと,フォント定義をしていないこととエンコーディングが間違っていたことがも問題であるように思われるので,これはおいおい試す.

参考(本文で挙げたもの以外)
http://www.geocities.co.jp/texuttex/jfontsettings.html
https://qiita.com/zr_tex8r/items/297154ca924749e62471
https://qiita.com/zr_tex8r/items/15ec2848371ec19d45ed
http://d.hatena.ne.jp/zrbabbler/20130210/1360488604
http://www.fugenji.org/~thomas/texlive-guide/font_setup.html
http://d.hatena.ne.jp/tama_sh/20120505/1336203065