hanmenパッケージ
はじめに
hanmenパッケージというLaTeXパッケージを作った。ダウンロードは以下からできる。
hanmenパッケージとは、版面の設計1を厳密に行うためのパッケージである。たとえば、38字×40行で文書を作りたい、といったときにhanmenパッケージは有用である。
従来、LaTeXでは版面の設計が煩雑であった。特に縦組みの場合、geometryパッケージが使えないので厄介である2。そこで、縦組みでも版面設計がやりやすいようにと作ったのがhanmenパッケージである。
基本的な使い方
基本的な使い方は簡単である。プリアンブルに次のように書き込む。
\usepackage[Q=15,H=24,W=38,L=40]{hanmen}
そうすると、
- 文字サイズ 15級
- 行送り 24歯
- 行長 38字
- 行数 40行
に設定できる。Q
は文字サイズの単位「級」に、H
は行送りの単位「歯」に、W
はwidthに、L
はlinesに由来している。なお、デフォルトではQ=11.5、H=19、W=42、L=17に設定してある。
各種オプション
g
グリッド線を表示させる(g
に代入する値は上のW
で指定した文字数と同じか、または近い整数値を入れる)。これで原稿用紙のようなマス目を表示させることができる。
\usepackage[g=38]{hanmen}
tate
縦組みにする。
\usepackage[tate]{hanmen}
ヘッダ・フッタ
ヘッダ・フッタの位置の調整。
\usepackage[headheight=13mm, headsep=1mm, footskip=3mm]{hanmen}
上下左右の余白調整
デフォルトでは、版面は左右中央に配置される。
左右中央のいずれかに版面を寄せたい場合には、ノド、小口、天、地の広さを直接手動で指定することができる。なお当然ながら、ノドと小口を両方指定したり、天と地を両方指定したりすることはできない(基本的に、hanmenパッケージはベタ組するためのパッケージなので)。もし間違えて両方指定した場合はエラーが出るようにしてある。
% ノドと天の広さを指定
\usepackage[nodo=20mm, ten=15mm]{hanmen}
% 小口と地の広さを指定
% \usepackage[koguchi=20mm, chi=15mm]{hanmen}
また、ノド、小口、天、地の広さを直接指定するだけでなく、既存の値に加算することもできる(それぞれ、addnodo
、addkoguchi
、addten
、addchi
というオプションで指定できる。なおこれらオプションは同時に指定してもエラーは生じない)。
% ノドと天の広さを指定した後、広さを足す
\usepackage[nodo=20mm, ten=15mm, addnodo=5mm, addten=1zw]{hanmen}% ノドは25mm、天は15mm+1zwで指定される
% 小口と地の広さを指定した後、広さを足す
% \usepackage[koguchi=20mm, chi=15mm, addkoguchi=-5mm, addchi=2mm]{hanmen}% 小口は15mm、地は17mmで指定される
なお、版面を少しだけ小口側に寄せたり、天側に寄せたりしたい場合、以下のようにする(このオプションは正直インターフェースが微妙なので現在私自身は使っていないが、古い文書も処理できるよう残しておいた。現在の仕様では、同じことをするのにaddkoguchi
などを使ったほうが分かりやすいであろう)。
\usepackage[ko=3mm]{hanmen}%% 3mm小口寄せ
% \usepackage[te=4mm]{hanmen}%% 4mm天寄せ
% \usepackage[addkoguchi=-3mm]{hanmen}%% `\usepackage[ko=3mm]{hanmen}`と同値。この指定方法のほうがユーザーインターフェースとして分かりやすいであろう。
単位変更
文字サイズ単位・行送り単位にQやHではなくptを使う。
\usepackage[Q=13, H=20, pt]{hanmen}% 文字サイズが13pt、行送りが20ptになる。
% \usepackage[Q=13, H=20, ptj]{hanmen} % Wordに合わせたptのサイズにするには ptj とすること。
jisfontzoom
このパッケージは新ドキュメントクラス(jsbook.cls、jsarticle.clsなど)で使うことを想定している。旧ドキュメントクラス(jarticle.cls、tbook.clsなど)で使う場合、jisfontzoomオプションを付けないと、文字サイズが正しく設定されない。
\usepackage[jisfontzoom]{hanmen}
adjustfontsize
このオプションは廃止した。デフォルトで、このオプションはつねに有効となるような挙動になった。
もともとは次のようにしていた。
hanmenパッケージのデフォルトの動作では、
\normalsize
しか再定義されない。\small
なども文字サイズを変更するには次のオプションをつける。\usepackage[adjustfontsize]{hanmen}
しかしフォントサイズを再定義したくないときというのがあまりないと思われたため、このオプションは廃止した。
develop
開発用コマンドが使えるようになるオプション。開発用コマンドについては下記参照。
\usepackage[develop]{hanmen}
pass
版面を一切いじらない。
\usepackage[pass]{hanmen}
提供されるコマンド
\newhanmen
\newhanmen
というコマンドが提供される。これは、本文中で、
\newhanmen{Q=11.5,H=19,W=42,L=17}
などとすると、文書の途中から基本版面を再設定できるコマンドである。上記のオプションはすべてここでも使うことができる。
なお、一度代入した値は、\newhanmen
を実行するごとにリセットされる3。例えば\usepackage[Q=13, nodo=20mm]{hanmen}
とオプションつきでパッケージを読み込んでいた場合に、\newhanmen
後もノドの広さを20mmに保ちたいなら、必ず\newhanmen{Q=15, nodo=20mm}
のようにノドの広さをもう一度指定しなければならない。
\switchwritingdirection
本文領域はそのままに、組方向だけ変えたい場合に使えるのが \switchwritingdirection
である4。本文中、このコマンドを記述すると組方向だけが切り替わる。例えば、横書きのときこのコマンドを挿入すると、その箇所で\clearpage
され、次ページから縦書きになる。
\pagegridon
\usepackage[g=50]{hanmen}
とやる代わりに、\pagegridon{g=50}
としてもグリッド線を表示できる。また、
\pagegridon{g=26, column=2, columnskip=28.5}
とすると、26字×2段組の場合にもうまくグリッド線が表示される。columnskipは、一段の文字数+段間の広さ。この例だと、一段が26字あり、段間の広さが2.5字分あるとの想定で(26+2.5=28.5なので)columnskip=28.5
としてある(段間の広さをミリメートルで指定できるようにもしたかったが、技術力不足により実現していない)。
\pagegridcolor
グリッド線の色を変更するコマンド。
\pagegridcolor{HTML}{e5abbe}
% \pagegridcolor{rgb}{0.8,0.85,1}% rgbやcmykでももちろん指定可能。
のように宣言すると、色を変えることができる。色の指定の仕方はxcolorパッケージの\definecolor
と同様である。
\showhanmen、\calchanmen
\showhanmen
は、現在設定している版面設計の値を出力するコマンド。例えば、ノドの広さを指定したときに、小口の広さがいくらになっているか確認したい、というときこのコマンドは便利である。
\calchanmen
は、版面をいくらで設定すればよいか計算してくれるコマンド。しかし自分で定義しておきながら、使い方を忘れた。例えば、本文ページとおまけページとで文字サイズや組方向を変えたいというときがあるが、おまけページを作るとき何字×何行にすれば本文ページと余白の広さが同じくらいになるかを計算してくれる、というコマンドだったはず……。
これらは開発用コマンドである。開発用コマンドを使うには、パッケージを読み込む際にdevelop
オプションをつけておくこと(版面設計し終わったらこれらコマンドは基本的に不要なので、普段無駄にコマンドが定義されたり依存パッケージが増加したりするのを防ぐため、オプションをつける仕様とした)。
\clearevenpage、\clearoddpage
\clearevenpage
は偶数ページになるまで\clearpage
するコマンド。\clearoddpage
は奇数ページになるまで\clearpage
するコマンド。既存のコマンドに\cleardoublepage
があるが、このコマンドは縦書きのとき不便なので新たにコマンドを定義したわけである。
提供される機能
正確な単位の導入
\bQ
および \bbp
を導入した。これによって、和文文字に関して、より正確に文字サイズを設定できるようになった。
事情を知らない人には意味が分からないだろうが、LaTeXの文字サイズ単位に関しては複雑な事情があり、そのため上のように新たに単位を導入する必要に迫られるのである。詳しくは、吉永氏によるクラスファイルにおける文字サイズの設定などを参照せよ。
tateオプション時の自動調整
hanmenパッケージ読み込み時、tate
オプションを与えると、自動的にPDFが右綴じになる。また、\cleardoublepage
が奇数起こしとなるよう再定義される。
パッケージ更新履歴
2017年2月18日
- 初版。
2018年1月18日
- 依存パッケージとして必須だったnombre_for_fancyhdr.styは、今回の変更により、必要なくなった。
W
オプションに非整数値を入れることができるようになった。これにより、段間を2.5文字分にするといった組版が可能となった。W
オプションの挙動変更に伴い、グリッド線を表示するオプションの使いかたが変更された。これまでは\newhanmen{grid}
と指定したが、今回から\newhanmen{g=50}
というふうに指定する仕様とした。
2019年9月2日
- オプションを追加し、ユーザーインターフェースを改良した。これにより、
\usepackage[nodo=20mm]{hanmen}
といったふうにノドの広さを直接指定したりできるようになった。 - 他にも色々と改良した。
2020年5月15日
- ユーザーインターフェースをやや改良した。
- コマンドの名称を変更した(旧コマンドも残してある)。
- いくつか機能追加した(addnodoやdevelopなどのオプションを追加)。
- 逆に、削除した機能もある。
\fontsizeX
などのフォントサイズ変更用コマンドは使っていなかったので削除した。 - グリッド線の色を変更し、薄い緑色とした。
2021年4月12日
- 細かなバグを修正。
2022年6月9日
- adjustfontsizeオプションを廃止した。
- LuaLaTeXに対応させた。
\pagegridcolor
コマンドを導入した。
既知の問題
- otfパッケージのオプションで
scale=1
と指定するような場合に対応できていない。そもそもjlreq.cls同様、フォントスケールは自由に定義できるようにしたほうがよいかもしれない。
参考文献
- 村上智一(TomOne)『よくわかるLaTeX小説 All You Need Is LaTeX』(PARALLEL ACT、2014年)。「LaTeXにおける版面設計」に書いたような版面設計の方法などについてこの本から学ばせていただきました。
-
「版面の設計」とは何かについては、詳しくは「基本版面(レイアウト)の設計」(外部サイト)などを参照せよ。 ↩︎
-
ただしこの状況は、阿部紀行氏によって開発中のjlreq.clsの登場により変化しつつある。このクラスファイルは、従来のクラスファイルに比べて非常に柔軟であり、縦書きの場合でもごく容易に版面設計が行なえるようになっている。 ↩︎
-
旧バージョン(v0.7以前)では、
\usepackage[Q=13, nodo=20mm]{hanmen}
とした場合、Q=13
やnodo=20mm
といった値はリセットされず、そのまま使われたため、さらに続けて\newhanmen{koguchi=20mm}
とするとエラーとなっていた(nodo
とkoguchi
を同時に指定することはできないため)。しかしこの挙動は分かりづらいと思われたため、仕様を変更した。つまり\newhanmen
したとき最初に指定した値は引き継がれずそのつどリセットされるようにした。 ↩︎ -
旧バージョン(v0.7以前)ではこのコマンドは
\hanmenchangedir
という名称だったが、やや妙な命名だったと思い直し、命名し直した。ただし旧バージョン時に作成された文書にも対応できるよう、\hanmenchangedir
というコマンドも\switchwritingdirection
のコピーとして残してある。 ↩︎