2016年9月15日

jlreq.clsにおけるJFM

半分くらい自分用メモでまとめておく.

LuaTeX-jaの場合

文字クラス16までと19,27についてはJFM+(x)kanjiskipで対処する.原則としては,附属書BDEにおける表1表2表3をそのままうつしている.文字クラスの番号も原則そのままだが,

  • 文字クラス3(ハイフン類)は字幅が文字により異なるため,300/301/302とわけている.
  • 文字クラス19はJFM内では0にしてある.
という点が異なる.

欧文文字も文字クラス0として扱われるので,和文文字と欧文文字の差は(x)kanjiskipで対処する.表によると,文字クラス19(漢字)と文字クラス27(欧文文字)の差は,前後に9,10,11,15,16,19が来るときであるので,ここはJFMグルーを設定しない.ここの空白はいずれも19との間が0 plus 0.25,27との間が0.25 plus 0.25 minus 0.125*1である(単位はzw)ので,これらをkanjiskipとxkanjiskipに設定する.

行末との間はend_adjustを設定する.

優先順位

優先順位はLuaTeX-jaにおけるluatexja-adjustを使う.$n$段階目を優先$3 - n$にするようにしてある.伸びや縮みがない場合は0である.kanjiskipは伸び縮みの順に(1,0),xkanjiskipは(-3,0).

行頭​始め括弧類

行頭の​始め括弧類の字下げは,段落直後が二分,全角,全角二分のいずれか,折り返し行頭が天付きまたは二分のいずれかである.(全ての組み合わせが許されるわけではない.3.1.5).段落直後は"parbdd"との間で処理する.これは文字クラス90に配置している.折り返し行頭が二分の場合は,始め括弧類の字幅を全角とし,その代わり始め括弧類を後ろに配置する時のJFMグルーから全て二分引く.

ぶら下げ組

文字クラス6(句点類),7(読点類)のend_adjustに-0.5を追加する.

行頭​始め括弧類やぶら下げ組の時は異なるJFMを採用することになるが,これはJFM内分でjlreq.open_bracket_posやjlreq.burasageを参照することで分岐させている.つまり,

\directlua{jlreq = {} jlreq.open_bracket_pos="nibu_tentsuki"}
<JFMロード>
とすると,段落行頭初め括弧が二分の空き,折り返し行頭初め括弧が天付きとなるJFMがロードされる.

pTeX / upTeXの場合

LuaTeX-ja用のJFMから機械的に変換している.(変換スクリプトはluajfm2pl.lua.)変換前に,全く同じ振る舞いをするクラスはまとめる処理をしている*2.またクラス番号は255までなので,それ以上の値は別の値にうつしている.優先順位やend_adjustといったpTeX / upTeXのJFMにない機能は無視される.

行頭​始め括弧類

"parbdd"はないので,\everyparで対処する.常に\inhibitglueを発行し,段落行頭二分(よって折り返し行頭は天付き)の時はマイナス二分の空白を入れる.

ぶら下げ組

句読点の幅を0にし,句読点の後に入るglueを全て+0.5する.(おそらく)OTFパッケージや大島先生と乙部さんが作成されたものと同じ.

LuaTeX-jaのように変数の値で別のJFMを生成することはできないので,括弧の幅を1にしたJFMとぶら下げ組を有効にしたJFMを別々に作っている.(全部で2×2=4個のJFMとなる.)括弧の幅を1にしたJFMにはzを,ぶら下げ組を有効にしたJFMにはbをつける.つまりjlreq.tfm/bjlreq.tfm/zjlreq.tfm/bzjlreq.tfmが作られる.upTeX用JFMには更にuをつける.縦書き用には末尾に-vをつける.

*1
いわゆる四分空き
*2
具体的には(9,10,11),(12,13),(15,16)をまとめているようだ.

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です