2021年6月30日

upLaTeX / LuaLaTeX対応クラスファイルを作ろう

pLaTeXのみに対応した既存のクラスファイルがある場合に,upLaTeX / LuaLaTeXに対応したクラスファイルに改変するために変更する箇所を思い当たるだけ書いてみる.

upLaTeX対応

説明書の「pTeX との対照表」が便利です.

  • フォントエンコーディングを変更します.横書きならばJY2,縦書きならばJT2とします.

  • JFMを変更している場合は対応するものに変更します.ただし,(悪名高きmin10をデフォルトとするpLaTeXと違い)upLaTeXのデフォルトJFMはよいとされているので,そもそもJFMの変更を行う必要がないかもしれません,

    標準で提供されているJFMは次があります.(他にもmin10のupLaTeX版のumin10とかあるけど省略.)JFMの指定方法はpLaTeXと同じです.

    • upjisr-h, upjisg-h: pLaTeXにおけるjisおよびjisgのupLaTeX版(けどちょっとすごそう).デフォルト.ただし,pLaTeXのjis,jisgが文字サイズを0.962216倍していたのに対して,upjisr-hとupjisg-hは1倍です.従ってpLaTeXにおける出力にあわせたいならばTeX側で縮小してやる必要があります.
    • upjisr-v, upjisg-v: upjisr-h, upjisg-hの縦書き版.デフォルト.

    例えば次のようにあったとします.

    \DeclareFontShape{JY1}{mc}{m}{n}{<-> s * [0.961] jis}{}

    次のようにするとupLaTeX対応になります.0.9247は上の0.961にjis/jisg由来の0.962216をかけた値です.

    \DeclareFontShape{JY2}{mc}{m}{n}{<-> s * [0.9247] upjisr-h}{}

    数値がやっかいに見えるかもしれませんが,要するに和文と欧文のサイズ比を決めてやってそれを指定すればよいだけです.pLaTeXではその決めた値を0.962216で割ってやる必要がありましたが,upLaTeXではそのようなことは必要なくなり,より自然に指定できます.やっかいなのはpLaTeXの方でしょう.

  • 必要ならば読み込んでいるパッケージをupLaTeX版に変更します.例えばotfパッケージにはオプションuplatexを渡します.

LuaLaTeX対応

  • LuaTeX-jaを読み込みます.\RequirePackage{luatexja}とします.

  • \NeedsTeXFormat{pLaTeX2e}となっていた場合\NeedsTeXFormat{LaTeX2e}とします.

  • フォントエンコーディングを変更します.横書きならばJY3,縦書きならばJT3とします.

  • JFMの変更を行います.LuaTeX-jaもjisに対応するJFMがデフォルトになっているので,そもそも変更する必要がないかもしれません.

    LuaTeX-jaでも\DeclareFontShapeでJFMを指定できますが,指定方法はpLaTeXやupLaTeXとちょっと異なります.次のようにします.

    \DeclareFontShape{JY3}{mc}{m}{n}{<->s*[0.9247]\ltj@stdmcfont:jfm=ujis;-kern}{}

    LuaTeXを使う場合は,使うフォント自身もこの段階で適用します.\ltj@stdmcfontにはシステムでのデフォルトのフォントが入っています.-kernはフォントのカーニング情報を使わないようにするための指定です.

    標準で提供されているJFMは次があります.pLaTeXと異なり,明朝体とゴシックでJFMを分ける必要はありません.

    • ujis, ujisv: デフォルトのJFM.とりあえずこれを使えばよい.OTFパッケージ+upTeXで使われているJFMがもと.ujisが横書きでujisvが縦書き.
    • jis: pLaTeXにおけるjisを移植したもの.もとのjisがそうであるように,こちらのjisも文字の形が正方形ではない.
  • 読み込みパッケージを必要に応じて変更します.pLaTeXで標準添付されていたパッケージはLuaTeX-jaでも添付されているが,名前が変わっています.

    • jsize10.clo → ltjsize10.clo.他のサイズも同様にltを頭につける.
    • plext → lltjext

    そのほか,そのままでは使えないパッケージが存在します.例えばotfパッケージは代わりにluatexja-otfパッケージを使う必要があります.エラー出たらググれ.

  • \pagewidth\pageheightを設定する.これらは紙面のサイズです.多くの場合は\paperwidth\paperheightと一致させればよいでしょう.

    \setlength{\pagewidth}{\paperwidth}
    \setlength{\pageheight}{\paperheight}

    また,\specialを使って紙サイズの設定をしている場合は\specialの発行をやめておきます.上の設定で紙サイズはLuaTeXが認識できる状態になります.

  • 長さの指定にzwzhを使っている場合は\zw\zhに直します.またQHは使えませんので,対応する値に計算し直します.1Q=1H=0.25mmです.

  • もし\magを使っているようならばやめます.

  • 必要ならば\fnfixbottomtrueします.(その効果についてはLuaTeX-jaのマニュアル2.4節を参照.)

  • \kanjiskip\xkanjiskipの設定は次のようにします.

    \ltjsetparameter{kanjiskip=0zw plus .1zw minus .01zw}
    \ltjsetparameter{xkanjiskip=0.25em plus 0.15em minus 0.06em}

    その他のパラメータ設定も\ltjsetparameterを通じて行います.取得は\ltjgetparameterです.禁則処理などの設定もこれらを通じて行います.どのようなパラメータの設定と取得が可能かはLuaTeX-jaのマニュアルをご覧ください.縦書きか横書きかの判定もパラメータ取得を通じて行います.

    なお,kanjiskipxkanjiskipに対しては,次のような高速に行う記述法も用意されています.

    \ltj@setpar@global
    \ltjsetkanjiskip 0zw plus .1zw minus .01zw
    \ltjsetxkanjiskip 0.25em plus 0.15em minus 0.06em
    
  • 縦書きが混在している場合の注意.\wdなどで取得できるボックスの幅は,pLaTeXと異なり,内部ボックスの組方向に依存して決まります.そのため,このような値を利用しているマクロは書き換えが必要になる可能性があります.詳細はLuaTeX-jaマニュアル6.2節をご覧ください.

0 件のコメント:

コメントを投稿

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