2018年12月5日

jlreq.clsの(x)kanjiskipの話.こんなんが流れてきたので.(反射的にkanjiskipなんだろうと思ったけど,それを0pt plus 0pt minus 0ptにしても字間にはあまり影響がないということなので,結局関係ない話である.)xkanjiskipもkanjiskipも同じなので,以下はkanjiskipのみ.42462c1以降に基づく.

kanjiskipを変更することは仕様としては認めていないのだが,想定はしている.具体的には,

\newcommand{\jlreqkanjiskip}{0pt plus 0.4pt minus 0.5pt}
\documentclass{jlreq}
とすれば,文書内でのkanjiskipが0pt plus 0.4pt minus 0.5ptとなる.なお,pLaTeX / upLaTeX / LuaLaTeXすべてで有効.

文章中で変更したい場合はもう少し注意が必要である.jlreqのkanjiskipの扱いは次の通り.

  • 組む際に参照されるのはレジスタ\kanjiskip(pLaTeX / upLaTeX)/ \ltjsetparameterで設定できるLuaTeX-jaのkanjiskipパラメータ(LuaLaTeXの時)
  • 文字サイズの変更の際に,\kanjiskipまたはkanjiskipパラメータを更新する.その際にはマクロ\jlreqkanjiskipの中身を参照する.

従って,\jlreqkanjiskipを更新しても即時では変更が反映されず,\kanjiskipまたはkanjiskipパラメータの更新が必要である.逆に,文字サイズの変更命令が現れないような短い間だけ変更したいならば,\kanjiskipまたはkanjiskipパラメータの変更のみでよい.

このように,変更できる手段を用意したのは次の理由による.

  • 「均等割り」のような,kanjiskipを使った手法が存在するので,それへが使えるようにするため.
  • jlreqのkanjiskipは0pt plus 0.25zw minus 0ptとかなり広がりやすく,適切ではないと考える人がいるかもしれない.

JFMとkanjiskipとxkanjiskipと

kanjiskipの値(0pt plus 0.25zw minus 0pt)は次で決めている.

  • 文字間グルーは「日本語組版処理の要件」における表1,表3,表6により定める.
  • 原則として,文字間グルーはJFMで指定する.ただし,漢字類(cl-19)と漢字類との間はkanjiskip,漢字類と欧文用文字(cl-27)との間はxkanjiskipで設定することとし,JFM内でのグルーは設定しない.
  • kanjiskipには漢字類同士の間のグルー(0pt plus 0.25zw minus 0pt)を,xkanjiskipには漢字類と欧文用文字との間のグルー(0.25zw plus 0.25zw minus 0.125zw)を設定する.
  • 表によれば,平仮名(cl-15)と漢字類との間のグルーは,漢字類同士の間のグルーと優先順位まで含めて全く同じである.このように優先順位を込めて漢字類同士の間のグルーと全く同じサイズのグルーが設定されている場所のグルーは,JFM内では設定しない.従ってこの間のグルーはkanjiskipにより支配される.xkanjiskipに対応する部分も同じである.
  • LuaTeX-jaでは,優先順位を表の通りに設定する.

2 件のコメント:

  1. 結論:Lua(La)TeX を使いましょう

    返信削除
  2. ふと思ったのですが、元記事では(u)pLaTeX使ってるのでjlreqが使うフォントのカーニング情報が有効のままになってて(※)
    フォントのカーニング+jlreqのグルーで幅が余計に開いて見えるとか……?いやそんな単純な話ではないのは分かってるのですが
    (※LuaLaTeX-jaパッケージではフォントのカーニング情報はデフォルトで無効)

    返信削除

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