マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

dvipdfmx で OpenType する件について (3)

前回の続き)

LaTeX サポートの作成

LaTeX サポートの要であるフォント定義ファイルの作り方については、「持ち込む話」で既に説明した。まずは、各フォントの対応先となる NFSS 属性値を決める必要がある。「M+ P Type-1」の場合、直立体のウェイトの異なる 7 つのフォントから構成されている。存在するウェイトを細→太の順に挙げると以下のようになる。*1

Thin(a), Light(l), Regular(r), Medium(m), Bold(b), Heavy(h), Black(c)

従って、シリーズ以外は「LY1/mplus1p/?/n」で固定で、シリーズ(「?」の部分)だけ異なることになる。シリーズの値として常用されるものを挙げる。(括弧なし→括弧一重→括弧二重の順で「よく使われる」)

(ul), (el), l, m, ((mb)), (sb), ((db)), b, eb, (ub)

この 2 つの属性値の対応を私は以下の方針で決めた。m は \mdseries が用いるシリーズ値であり、すなわち「既定」のシリーズである。従って、フォントファミリの中で、最も普通のウェイトをシリーズ m に充てるべきである。「Regular」というウェイトがある場合はそれが「最も普通」としていいだろう。*2残りについて、「よく使われるもの」を優先して使うことにした。その結果は以下の通りである。

Thin(a)Light(l)Regular(r)Medium(m)Bold(b)Heavy(h)Black(c)
ellmsbbebub

これで「設定すべき内容」が確定したので、定義ファイルを作ることができる。

[ly1mplus1p.fd]
\DeclareFontFamily{LY1}{mplus1p}{}
\DeclareFontShape{LY1}{mplus1p}{el}{n}{<->mplus1p-a-ly1}{}
\DeclareFontShape{LY1}{mplus1p}{l}{n}{<->mplus1p-l-ly1}{}
\DeclareFontShape{LY1}{mplus1p}{m}{n}{<->mplus1p-r-ly1}{}
\DeclareFontShape{LY1}{mplus1p}{sb}{n}{<->mplus1p-m-ly1}{}
\DeclareFontShape{LY1}{mplus1p}{b}{n}{<->mplus1p-b-ly1}{}
\DeclareFontShape{LY1}{mplus1p}{eb}{n}{<->mplus1p-h-ly1}{}
\DeclareFontShape{LY1}{mplus1p}{ub}{n}{<->mplus1p-c-ly1}{}

このファイルを $LOCAL/tex/latex/mplus1p/ に配置する。そして、実際に NFSS で LY1/mplus1p を指定する LaTeX 文書の組版を試してみる。

\documentclass{article}
\usepackage[LY1,OT1]{fontenc}
\begin{document}
\newcommand*\sampleText{% サンプルテキストをマクロにした
  ``Macros are pass\'e --- they're so mid-20th-century.''} 
\fontencoding{LY1}\fontfamily{mplus1p}
\fontseries{el}\selectfont \sampleText \par
\fontseries{l}\selectfont  \sampleText \par
\fontseries{m}\selectfont  \sampleText \par
\fontseries{sb}\selectfont \sampleText \par
\fontseries{b}\selectfont  \sampleText \par
\fontseries{eb}\selectfont \sampleText \par
\fontseries{ub}\selectfont \sampleText \par
\end{document}

これが正常に出力されれば、作業は無事完了である!

(もうちょっとだけ続くんじゃ…)

*1:括弧内は TFM 名の Weight で、こちらは単に Light や Bold 等の「名前」に対応するものを Berry 規則に従って当てればよい。各用語の用法について完全に定まっている訳ではないので、「細さの順番」については、実際の出力をみて判断しなければならない。

*2:「Regular」がない場合は「Medium」が「最も普通」とする。