マクロツイーター

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

BXjscls の新しいやつ(v1.8)

TeX Live での収録は 2018 から。

前回の記事の続きで、今度は 1.7c → 1.8 の変更点の話。

あるいは、jlreq クラスのクラスオプションの真似事がしたかった、という話。

base と jbase が両方とも指定できる話

従来は、base(欧文基底フォントサイズ)と jbase(和文基底フォントサイズ)のオプションは高々一方しか指定できなかった。従って、例えば「欧文は 12Q、和文は 11Q にしたい」と思って

\documentclass[uplatex,dvipdfmx,ja=standard,
  a4paper,base=12Q,jbase=11Q]{bxjsarticle}

と書いても、base=12Q は無視されて、欧文基底フォントサイズは既定の和文スケール値に基づいて決まる(11Q ÷ 0.924715)、という挙動になっていた。

新版では、base と jbase の両方が指定された場合はそれらを正として扱い、両者の値に基づいて和文スケール値を決定する(scale は指定されていても無視される)、という動作になる。なので上掲の指定は意図通りの結果になる。要するに jlreq の fontsize/jafontsize/jafontscale の関係と同じ。

補足

base/jbase/scale の値を決定するロジック:

  • base と jbase が両方指定済なら、scale をそれらに従属させる(指定を無視)
  • それ以外の場合は従来版と同じで、次のようになる:
    • scale は指定済ならそれに従い、非指定なら既定値(0.924715)。
    • base と jbase は、一方が指定済ならそれに従い、他方をそれと scale から求める。両方とも非指定なら base を 10pt とする。
  • jsclasses と互換の基底フォントサイズオプションは、base または jbase の指定と等価になる: 例えば、17ptbase=17.28pt と同じ、12Qjbase=12Q と同じ。

行長を指定する話(textwidth オプション)

textwidth=<寸法> で一行の長さを指定できる。実際の値は全角幅の整数倍に補正される。要するに jlreq の line_length オプションと同じ。

% 1行40字詰にする
\documentclass[uplatex,dvipdfmx,ja=standard,
  a4paper,textwidth=40zw]{bxjsarticle}
処理方法

bxjsbook 以外の場合、内部で geometry を利用してレイアウト設定をする際に、width オプションで所与の長さを指定する。つまり、次の命令を実行したのと等価になる。

\setpagelayout{width=40\zw}

bxjsbook の場合は、geometry の width で指定されるのは \fullwidth であり、行長の方はクラスの textwidth-limit というオプションで指定されるのであった。従って、textwidthtextwidth-limit と同等の役割のもの(ただし引数は長さ)として扱われる。

行数を指定する話(number-of-lines オプション)

number-of-lines=<整数> で一ページあたりの行数を指定できる。要するに jlreq の number_of_lines オプションと同じ。

% 1ページ25行にする
\documentclass[uplatex,dvipdfmx,ja=standard,
  a4paper,number-of-lines=25]{bxjsarticle}
処理方法

内部で geometry を利用してレイアウト設定をする際に、lines オプションで所与の値を指定する。つまり、次の命令を実行したのと等価になる。

\setpagelayout{lines=25}

※こちらは geometry の設定と常に等価となるので、あまり存在意義がない。要するに jlreq の真似事をしたかった、ということ。

もっと jlreq の真似をしたい話

以上、jlreq クラスと仕様を合わせるような改修を入れたのであるが、オプションの名前が両者で食い違っているとそれほどメリットはないだろう。このため、jlreq と互換のオプション指定ができるようにした。

  • paper={<横幅>,<縦幅>}paper={<横幅>}{<縦幅>} と同値。
  • fontsize=<長さ>base=<長さ> と同値。
  • jafontsize=<長さ>jbase=<長さ> と同値。
  • jafontscale=<実数>scale=<実数> と同値。
  • line_length=<長さ>textwidth=<長さ> と同値。
    ※わざわざ textwidth の名前で新設した理由は、既存の textwidth-limit と合わせるため。
  • number_of_lines=<整数>number-of-lines=<整数> と同値。
    ※BXJS では複数語のオプション名はハイフン区切り。

\pagelayout+ 命令

(あとで書きたいね)

その他諸々

  • pxcjkcat との組み合わせで発生する、パラグラフマークに関するバグを修正した。
  • 「全角の整数倍に切り捨てる」計算の際に多少の誤差を考慮するようにした。((TeX の寸法の演算は固定小数点だから“丸め誤差”は発生しない。しかし、(u)pLaTeX において“実際の全角幅”(zw)と“規約上の全角幅”(\jsZw)の間にある誤差の影響を受けるケースが存在した。))
  • “二文字フォント命令”が使われた場合の警告が、少し豪華になった。(わーい)