マクロツイーター

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

ルビはじめました(PXrubrica パッケージ)(1)

日本語組版的なルビを出力するパッケージを作ってみた。

『日本語組版処理の要件(日本語版)』に示されているルビ出力例を再現したものを挙げる。

(縦組の例)
(横組の例)

ただ、既に公開されているのルビ出力用のパッケージ(やマクロコード)でも、上のような出力自体は可能であり、このパッケージでも技術的に新しいことは特に含まれていない。目標としているのは「TeX で実現可能なことを LaTeX のパッケージとしてまとめる」ことである。以下のようなことを念頭において設計している。

  • 個々のルビ出力において必要となる調整を、できるだけルビ出力命令のパラメタで行えるようにし、前後に調整用の LaTeX 命令を入れる必要を避ける。特に、「非本質的なトリック」(文字列に余分な空白を含ませる、等)や「TeX ハック」(\kern\penalty を直接書き込む、等)への依存を無くす。
  • 入力の容易さを重視する。
  • もちろん、汎用性を重視し、特定のフォントやレイアウトの設定に依存しないようにする。
  • 他の人が修正・改良を行いやすいように、コードをなるべく解りやすいように書く。このため、敢えて DocStrip 形式を採用した。(TeX プログラミングの世界では標準になっているので。)

上の出力のソースを挙げておく。出力の図だけでは解り難いが、「日本語組版の要件」の説明と照合すると、各オプションの意味が理解できると思う。

\documentclass{jsarticle}
\usepackage{otf}
\usepackage{plext}
\usepackage{pxrubrica}
\rubysetup{<j>} % 熟語ルビで、隣接文字に半角までかけるのを許可するのを既定とする
  % \rubysetup 自体の(パッケージの)既定値は |cj| である
\rubyintergap{0.04} % ルビと親文字の間の空き(既定値は 0)
\begin{document}

\begin{center}
%======================================= 縦組
\begin{minipage}<t>{20zw}
%--------------------------------------- 3.3.1節
\ruby{君子}{くん|し}\ruby{}{}して\ruby{}{どう}ぜず。\par
%%%% モノルビ(オプション=m)
   % 親文字中の \CID{7674} (〈倦〉異体字)を一文字と扱うため { } が必要
\ruby[m]{}{ひと}\ruby[m]{}{おし}えて\ruby[m]{{\CID{7674}}}{}まず\par
\ruby[m]{鬼門}{き|もん}\ruby[m]{方角}{ほう|がく}\ruby[m]{凝視}{ぎよう|し}する。\par
%%%% 熟語ルビ(オプション=j)
\ruby[j]{鬼門}{き|もん}\ruby[j]{方角}{ほう|がく}\ruby[j]{凝視}{ぎよう|し}する。\par
\ruby[j]{茅場町}{かや|ば|ちよう}\quad
  % 隣の文字に進入してはいけない側に〈|〉を書く
\ruby[j|]{茅場}{かや|ば}\ruby[|j]{}{ちよう}\par
%%%% グループルビ(オプション=g)
\ruby[g]{紫陽花}{あじさい}\quad \ruby[g]{坩堝}{るつぼ}\quad \ruby[g]{田舎}{いなか}\par
\rubysetup{g} % 既定値をグループルビに変更
\ruby{境界面}{インターフエース}\quad \ruby{避難所}{アジール}\quad
\ruby{顧客}{クライアント}\quad \ruby{模型}{モデル}\par
\ruby{編集者}{{editor}}\quad \ruby{{editor}}{エディター}\par
\rubysetup{j} % 既定値を熟語ルビに戻す
%--------------------------------------- 3.3.3節\ruby{}{のぼり}\quad \ruby{葦編三絶}{い|へん|さん|ぜつ}\par
  % 三分ルビは未対応
\begin{quote} % 大きな文字サイズでの例
  \LARGE\rubysizeratio{0.375} % 縮小割合を変更する(元は0.5)
  \ruby{葦編三絶}{い|へん|さん|ぜつ}
\end{quote}
%--------------------------------------- 3.3.4節
%%%% 両側ルビ(\truby 命令) (グループルビのみ)
\truby{東南}{とうなん}{たつみ}
\par\medskip % ルビの高さは無視されるのでそのままだと次行と重なる
\rubysetup{m} %------------------------- 3.3.5節\ruby{}{やく}\par
%%%% 中付き(オプション=c)←これは既定
版面の\ruby{}{}\quad
%%%% 肩付き(オプション=h)
版面の\ruby[h]{}{}\par\ruby{}{とりで}\par
  % 〈||〉を書いた側の端が揃うようになる; 〈|〉との違いに注意\ruby[||-]{}{しゆん}\quad\ruby[-||]{}{しゆん}\par\ruby[||-]{}{しゆん}\quad\ruby[|-|]{}{しゆん}\par
\rubysetup{g} %------------------------- 3.3.6節\ruby{冊子体}{コーデツクス}\par
\rubysetup{j} %------------------------- 3.3.7節
\ruby{杞憂}{き|ゆう}\quad \ruby{畏怖}{い|ふ}\par
\ruby[h]{杞憂}{き|ゆう}\quad \ruby[h]{畏怖}{い|ふ}\par\ruby{流儀}{りゆう|ぎ}\quad\ruby{無常}{む|じよう}\quad\ruby{成就}{じよう|じゆ}\par\ruby{紋章}{もん|しよう}\quad\ruby{象徴}{しよう|ちよう}\par
% 「熟語の構成を考慮する方法」は非対応
%  熟語ルビを行分割させるのは「難しい」……
\end{minipage}
\par %================================== 横組
%--------------------------------------- 3.3.1節
\ruby{君子}{くん|し}\ruby{}{}して\ruby{}{どう}ぜず。\par
\ruby[g]{編集者}{{editor}}\quad \ruby[g]{{editor}}{エディター}\par
\rubysetup{m} %------------------------- 3.3.5節
版面の\ruby{}{}\par % 横組では [h] は使用不可\ruby{}{とりで}\par
\rubysetup{g} %------------------------- 3.3.6節\ruby{冊子体}{コーデツクス}\par
\ruby{模型}{モデル}\quad \ruby{利用許諾}{ライセンス}\par
{\rubystretchprop{0}{1}{0}% 先頭・末尾を揃える方式
\ruby{模型}{モデル}\quad \ruby{利用許諾}{ライセンス}}\par
\ruby{なげきの聖母像}{ビエタ}\par % 自動的に調整される
\ruby{顧客}{クライアント}\quad \ruby{境界面}{インターフエース}\par
{\rubystretchprop{0}{1}{0}% 先頭・末尾を揃える方式
\ruby{顧客}{クライアント}\quad \ruby{境界面}{インターフエース}}\par
\rubysetup{j} %------------------------- 3.3.7節
\ruby{杞憂}{き|ゆう}\quad \ruby{畏怖}{い|ふ}\par
\end{center}

\end{document}