マクロツイーター

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

bxjsbook に関する残念な話

bxjsbook が極めてアレな事案

BXJS クラスは原則として*1 JS クラスのページレイアウトのデザインを踏襲している。しかし、現状の bxjsbook については、上の図にみるように本文領域の水平位置が jsbook と比べて明らかに違う、という残念な事態になっている。jsbook は書籍用の文書クラスであり、本文領域を極端にノド(書籍の綴じた部分)の側に寄せたデザインになっているのであるが、このノド側のマージンの幅について、bxjsbook では誤って本来の値の 2 倍の値に設定されているのである。

※ちなみに、上図の出力に対するソースは以下の通り。

[jsbook の方]
% upLaTeX 文書
\documentclass[uplatex,a4paper]{jsbook}
\usepackage{bxjalipsum}
\begin{document}
\chapter{吾輩はアレである}
\jalipsum[1-10]{wagahai}
\end{document}
[bxjsbook の方]
% upLaTeX 文書
\documentclass[uplatex,dvipdfmx,a4paper,ja=standard]{bxjsbook}
\usepackage{bxjalipsum}
\begin{document}
\chapter{吾輩はアレである}
\jalipsum[1-10]{wagahai}
\end{document}

この中で使われている「bxjalipsum パッケージ」については以下の記事を参照されたい。

bxjsbook が極めてアレな理由

jsbook の左右マージンの設定(基底フォントサイズが 10pt の場合)は以下のようになっている。

マージン領域を 36mm 確保し、それを左右で均等に配置する。

※なお、ここでいう“マージン領域”は \fullwidth(ヘッダ・フッタ領域の横幅)に相対するものである。「\fullwidth\textwidth の違い」の話は後に回す。

それに合わせるように、bxjsbook では、次のように geometry のパラメタを設定している……。*2

hmargin=36mm, hmarginratio=1:1

だけどこの設定は正しくない。hmargin パラメタは元々は「hmargin={‹左マージン›,‹右マージン›}」という書式であり、「hmargin=36mm」と書くと、「hmargin={36mm,36mm}」の省略形とみなされる。つまり左右のマージンがともに 36mm になって、全部で 72mm になってしまうのである。

正しい設定は、要するに「左右ともに 18mm」ということだから、次のようになる。

hmargin=18mm

要するに、今の bxjsbook のレイアウトは“マチガッテル”のである。

「bxjsbook が極めてアレ」への対処

マチガッテルので修正したい。しかしこの事案については、修正前と修正後のレイアウトの違いがかなり顕著であるため影響が大きい。*3そこで、以下のような対処方針を取ることにした。

  • 近い将来にリリースされる予定の“1.3 版”において、bxjsbook のレイアウトを“修正後”のものに変更する。
  • その上で、“修正雨”のレイアウトを選択できるようにクラスオプション layout を新設する。
    • layout=v2 : “修正後”のレイアウト(jsbook と同様のもの)を使う。
    • layout=v1 : “修正前”のレイアウト(1.2 版と同様のもの)を使う。
  • この layout オプションは少なくとも 1.x 版の間は提供され続ける。((ただし、layout=v1 についても layout=v2 についても、レイアウトが今後“全く変わらない”ことを保証するものではない。BXJS クラスのレイアウトについて、小規模な修正は従来ずっと行われていたわけであり、この状況は今後も継続される。))

そして、1.3 版へ向けた経過措置として、“1.2a 版”をリリースした。

この 1.2a 版では既に新設の layout オプションが使用可能になっているが、その既定値は layout=v1 である。従って、文書ソースを変更しなければレイアウトは 1.2 版以前のものと変わらない。


お願い

現在 bxjsbook クラスを用いた文書を作成している方は、以下の何れかの対処をお願いします。

  • jsbook と同じレイアウトの方がよい場合は、(1.2a 版にアップデートした上で)クラスオプションに“layout=v2”を追加してください。1.3 版以降ではこちらが既定となるためオプションは不要になります。
  • 現行のレイアウトを保持したいという場合は、クラスオプションに“layout=v1”を追加してください。

自分の手違いでお手数をかけてしまい申し訳ありません。

*1:敢えて変えている箇所も存在する。

*2:実際には基底フォントサイズが 10pt 以外である時のための対策が入る。

*3:jsbook のレイアウトは“癖が強い”、つまり、本文領域がかなりノド側に寄っているため、“修正前”の方がよいと考える人も現れそうである。