自己顕示欲の開放治療所

erg, programming and something.

別名:Laughing and Grief 雑記

Latin and Greekは習ったこともない

真面目な記事の他、特定の方には不快と思われる事柄に関して言及を行うことがあります。ちょっと頑張りますが、Blog内で解決できなかった場合要望があれば別ページに技術記事は書き直します

EWBとpTeXのフォントの話

この記事はEWBアドベントカレンダー2019の8日目の記事です。

adventar.org

2019-12-09追記:

ということで、NFSSはLaTeXのフォント管理機構で記法はBerry則に沿ったもの、ということで修正します。

pTeXのフォントまわり

私のように、自我を確立したときには\TeX{}Liveがあったような世代だと(誇張)、 出力はPDFでフォントは全て埋め込まれているのが当然と思いがちですが、 日本語フォントは印刷時埋め込みであった頃の気持ちを想像する必要があります。

PSファイル(もしくはPDF)に出力する際、所持していないフォントについてはフォント指定のみして 実際のフォントは印刷機で引っ張ってもらうわけです。現代の端末埋め込みPDFビューアで文字が読めないときは、このフォントがない場合の代替でのフォント表示機能が無いケースがあります。 PDFビューアを作るのはPDFを作るより難しいので仕方無いですね。ただしKindleオメーは頑張れや。

EWBのユーザ側では体裁ファイル入力に各パラメータを打ち込むだけなので難しいことはないのですが (後日予定)、バックエンドというかクラスファイルでゴリゴリp\LaTeX{}が動いていて この話をしないとどうしようもありません。

正直分かりが得られていないのでツッコミ待ちの部分もあります。

まずは関連用語から。

NFSS

\LaTeX{}でフォントを取り扱う際の管理機構です。名前の記法はBerry則に沿ったもの、ということです。 ランポート本にはフォント関連の詳細については「ローカルガイドを読め」くらいしか書いてなかったですね。

ということで、

zrbabbler.hatenablog.com (2019年12月09日閲覧)

例えば「日本語横書き用Ryumin-Light」だとJY1/rmn/l/nとなります。Ryuminだから rmnね、といった感じになるので、初学者にかなり厳しいつくりな気がする……。 名前空間は何語フォントタイプかということで多少分けられるしフォント名の箇所も多少長くなっても 問題無いものの、基本的に有名フォント以外の選択肢が無い時代の産物という印象を感じます。 \TeX{}が把握している(仮想)フォントを呼び出したりする際に使います。

VF

バーチャルフォント(VF)、混植に際して多くの無邪気な若者を沈めてきた関門ですね。 「仮想フォント」というときはTFMとVFの組を指します多分。

TFMから引っ張ったフォント情報を\TeX{}に渡す際の橋渡しが役割のハズ。

概略については

あたりが良いのではないでしょうか。

TFMとJFM

フォントメトリクスとその日本語拡張版です。p\TeX{}がフォントの情報を読む際は基本的にここから読み込みます。バイナリ形式なので直接弄ることは推奨されません。

PLとJPL

「TFM、JFMの持つプロパティの視覚化」と以下のサイトであります。ここからTFM、JFMを生成できる、ハズ。

EWBの命令

まあ用語解説で分かる通り面倒臭そう、ということでEWBはよく使うフォントについては\TeX{}のフォント設定を プリセットで設定を用意してくれています。\pTeX{}標準にプラスする形だと思います、多分。 現在では\TeX{}Liveでp\TeX{}を入れたら 入ってくる中に含まれるものもあるでしょう。

#
# 体裁入力ファイル
#
...

基本組
        書体            Ryumin-Light       # 和文書体
        変形            正体                     # 指定項目:
                                                        # 正 体 / か な /
                                                        # 長 体 1/ 長 体 2/ 長 体 3/ 長 体 4/
                                                        # 平 体 1/ 平 体 2/ 平 体 3/ 平 体 4/
                                                        # 斜 体 1/ 斜 体 2/ 斜 体 3
         級数            13Q                     # 単 位 : Q/pt
         字送り        13 歯                    # 単 位 : 歯 /pt/mm
         強調書体     GothicBBB-Medium #和文書体
         強調変形     正体                     # 指定項目 :    
                                                         # 正 体 / か な /
                                                         # 長 体 1/ 長 体 2/ 長 体 3/ 長 体 4/
                                                         # 平 体 1/ 平 体 2/ 平 体 3/ 平 体 4/
                                                         # 斜 体 1/ 斜 体 2/ 斜 体 3
         強調級数     13Q                      # 単 位 : Q/pt
         強調字送り 13 歯                     # 単 位 : 歯 /pt/mm
         欧文書体     PCTimes-Roman # 欧文書体
         欧文級数     13Q                      # 単 位 : Q/pt
         欧文ベー ス ラ イ ン    0.03 字
         欧文強調書体 PCHelvetica      # 欧文書体
...
基本組終り
        
...

コピペに失敗したので、上の体裁入力がEWB-Shelfのパース可能なものかは分かりませんが、概ね日本語で設定ができます。

体裁入力で入れたフォントのパラメータは、p\LaTeX{}に入るときは 例えば次のような命令になります。

\DeclareCompositFont{honmon}[0.00,0.00,0.00,1.00]{13.00Q}[13.00H]{JY1/rmn/l/n}[13.00Q]{JE1/rmn/l/n}[0.000zh]

体裁入力ファイルでの入力がどういったものであるかは都合上本日は省きますが、日本語のフォントサイズ・フォント、従属欧文のサイズ・フォント、ベースラインシフトなどの設定が書かれています。

ここで取り出しましたるはDVDメディアに入ったEWB、からewb_baseのスタイルファイル。 これewb2latex.clsと違ってハンドブックのソースには入らないEWB本体付属のスタイルファイルなんで、流石に動作を予想するのは無理があるので、見ます。

% ewbbase3_3.sty

\def\DeclareCompositFont#1{%
  \@ifnextchar[{\@newcomposit{#1}}%
               {\@newcomposit{#1}[]}}

\def\@newcomposit#1[#2]#3{%
  \@ifnextchar[{\i@newcomposit{#1}[#2]{#3}}%
               {\i@newcomposit{#1}[#2]{#3}[#3]}}
\def\i@newcomposit#1[#2]#3[#4]#5{%
  \@ifnextchar[{\ii@newcomposit{#1}[#2]{#3}[#4]{#5}}%
               {\ii@newcomposit{#1}[#2]{#3}[#4]{#5}[#3]}}
\def\ii@newcomposit#1[#2]#3[#4]#5[#6]#7{%
  \@ifnextchar[{\iii@newcomposit{#1}[#2]{#3}[#4]{#5}[#6]{#7}}%
               {\iii@newcomposit{#1}[#2]{#3}[#4]{#5}[#6]{#7}[\z@]}}
\def\iii@newcomposit#1[#2]#3[#4]#5[#6]#7[#8]{%
  \expandafter\ewb@ifdefinable\csname cf@@#1\endcsname{}%
  \expandafter\ewb@definefont\csname cfj@#1\endcsname #5/#3\@nil\relax
  \expandafter\ewb@definefont\csname cfe@#1\endcsname #7/#6\@nil\relax
  \global\@namedef{cf@@#1}{%
    \def\cf@curj{#5}\def\cf@jsize{#3}%
    \def\cf@cure{#7}\def\cf@esize{#6}%
    \fontsize{#6}{\baselineskip}%
    \@nameuse{cfj@#1}\@nameuse{cfe@#1}%
    \hokuri=#4\relax
    \iftdir\tbaselineshift=#8\else\ybaselineshift=#8\fi
    \if#2\relax\relax\else\def\cf@color{#2}\ewbcolor{#2}\fi
}}
\def\ewb@definefont#1#2/#3/#4/#5/#6\@nil{%
  \expandafter\gdef\noexpand #1{%
    \DeclareFixedFont{#1}{#2}{#3}{#4}{#5}{#6}%
    #1}%
}

という訳で、最終的?に\DeclareFixedFontを使っています。 ベースラインシフトや縦・横での動作の違いも入っていますね(\iftdir\tbaselineshift=#8else\ybaselineshift=#8\fi)。

体裁入力ファイルで常にフルのパラメータを入れなくても対応できるようになっている、 という理解でいいんでしょうか。\TeX{}で書くのとEWBからのコンバート時に 補完するのとどっちが楽かは難しいですが、\TeX{}側で持っていればギリギリの 調整が利くということなんでしょうか。

\DeclareFixedFont {<cmd>} {<ENC>} {<family>} {<series>} {<shape>} {<size>}

に渡されるとき、上の体裁ファイルはおおよそ以下の形と推測され

\DeclareFixedFontp\TeX{}改修版です。 初期(1995)は和文フォントの定義はできなかったようです。

honmonとあるように、各編集トリガ箇所でのフォント設定はそれぞれ独立に設定できます。

キモの部分は、これ.texじゃなくてewb2latex.clsというクラスファイルの中身として出力されるというところでしょうか。

Next

小組みもしくはテーブルあたりですかね。

明日は@hid_alma1026さんです。