Open KobayashiToshi opened 1 year ago
@kidayasuo @KobayashiToshi moving this to simple-ruby repository???
敏先生のJDLReq_ルビ22_12.txtをmarkdownにしました
2022.12.05(小林敏)
行頭の●■などは見出しのレベルを示す. 行頭の“*”の記号のあるものは注である.
ルビの字詰め方向の配置処理については,いろいろな処理法が採用されている.そこで,JLReqでは,過去に行われていた処理例を紹介する意味もあり,一つのことに複数の処理方法や,かなり複雑な処理方法を示している.また,ルビ処理では,さまざまなケースが出現し,また,ある要求事項を組版で実現しようとすると矛盾が出てしまう例もある(注の“複雑な処理となる例”参照).こうした事項まで考慮して自動処理を行うためには,かなり複雑な方法となる(JLRrqの付属書“F 熟語ルビの配置方法”がその例であるが,この方法でもいくつかの問題は残る).
そこで,ある程度の品質を確保しながら,機械的な処理に対応した単純化した処理方法を検討する必要がある.ここでは,特に字詰め方向の処理について簡便なルビ処理方法を実現するための方法を示した.JLReqとは異なり,何を選べばよいか,何が重要であるかを考慮し,配置方法を一つに絞ることにした(どのような事項を考慮したかは後述する).
*複雑な処理となる例 できるだけ字間を空けないという条件を満たすために,親文字からはみ出したルビを漢字には掛けないが,仮名には掛ける,とする処理方針がある.しかし,前後が同じ仮名又は漢字となる場合はよいとしても,親文字の前が仮名で,後ろが漢字といったときに,ルビ文字の字数によっては見た目のバランスを壊す場合も出てくる(親文字が1字の例を図〓に示す,上側が漢字には掛けないが,仮名に掛けるとした方針で処理した例).親文字が複数で,親文字全体にルビを対応させる場合でも,同様である(図〓参照).こうした問題を解決するためには,ルールをさらに追加しないといけない(活字組版では個別箇所のケースに応じて配置位置を工夫していたので,その箇所ごとに適当に処理できた).
また,ルビ文字が片仮名の場合,単語としてのまとまりがあり,前後の仮名にも掛けないという処理方法もあった(実際にもルビの字数によっては,仮名にも掛けないとした方が見た目のバランスはよい(図〓参照,下側が仮名に掛けないとした方針で処理した例).これを実現するためにも,さらなるルールの追加が必要となる.
こうした複雑さは,“できるだけ字間を空けないという条件”は満たさないが,前後の仮名にも,はみ出したルビは掛けないという単純なルールにすれば解決できる.
以下に示した行送り方向の配置処理方法については,理想ではないが,誤読されないということを考慮し,例外のあまりでない,また,機械的に処理できる簡便な配置処理方法の一案である.
なお,ここでの用語は,JLReq(日本語組版処理の要件,Requirements for Japanese TextLayout)による.
ルビ(ruby)とは,文字及び語のそばに付けて,その読み,意味などを示す小さな文字のことで,振り仮名(ふりがな)ともよばれている.ルビが付けられたとき,その対象となる文字を親文字という.ルビの配置処理を説明する前に,ルビの使用例をいくつか示す.
*ルビの使用 日本における漢字表記の基準とされてきた“当用漢字表”(1946年11月16日,内閣訓令・告示)の“使用上の注意”において,“ふりがなは,原則として使わない”とあったことから,以前はルビの使用は少なかった.しかし,“当用漢字表”を改正した“常用漢字表”(1981年10月1日,内閣訓令・告示)の“答申前文”には,“読みにくいと思われるような場合は,必要に応じて振り仮名を用いるような配慮をするのも一つの方法であろう”とある.こうしたことから,今日ではルビの使用が増えている.
Webでのルビの使用例は,その処理が簡単でなかったことから現状では少ないが,組版処理上の問題が改善されていけば,書籍,雑誌,新聞などのルビの使用状況から判断して,今後は増えていくものと思われる.
ただし,ルビの使用法は,今日ではいろいろの目的で使用され,また,その組版処理の方法も,書籍などでは,各種の方法が行われている.こうした方法のすべての対応する必要はないであろうが,どこまで対応していけばよいかは議論していく必要がある.ここでは,そのした点も配慮して,ルビの組版処理について解説していくことにする.
いくつかのルビの使用例を,以下に示す.
図〓 お寺(てら)の鐘(かね)が
図〓 の夢(ドリーム)を
*親文字が1文字のルビ 漢字の読み方を平仮名で示す場合は平仮名ルビ,別の言語で片仮名で示す場合は片仮名ルビと呼び,行送り法の配置処理を変える処理法もあるが,ここでは,同一の処理方法を採用した.
図〓 それは杞憂(きゆう)である 新しい戯曲(ぎきよく)を書く
*熟語のルビ 熟語は言葉としてのまとまりがあるが,漢字1字1字に対応した読み方があり,それをルビで示すことになる.従って,熟語の場合,漢字1字1字に対応した読み方を示すことを重視した配置方法と,漢字1字1字の対応は無視しないが,熟語としてのまとまりを重視した配置方法とがある.
図〓 親の田舎(いなか)に行く
*熟字訓のルビ 熟字訓の場合,通常の熟語と異なり,漢字1字1字に対応した読みではなく,熟語をまとまりとして読むので,親文字全体に対してルビを対応させることになる.
図〓 大聖堂(カテドラル)の尖塔(ミナレツト)を
*言語の意味を片仮名で示す この場合も,漢字1字1字に対応した読みではなく,親文字全体に対してルビを対応させせることになる.
図〓 盃に泡盛(沖縄県で作られる,米を原料とした蒸留酒)をなみなみと注がせて,さらには……
*語句を説明するルビ 語句を説明する注記を行間に配置する方法は,これまでルビとは異なるものとして考えられてきた(行間註などと呼ばれていた).しかし,親文字と対応させ,行間に配置するという点ではルビと同じ処理になるので,ここでは,これらも含めた処理方法を考えた.
(1)ルビ文字の文字サイズは指定による.ただし,デフォルトは親文字サイズの1/2とする(図〓). (2)ルビ文字のフォント,文字の変形,その他の装飾は指定による.ただし,デフォルトは親文字と同じにする. (3)ルビの行送り方向の配置位置は,横組では親文字の上側,縦組では右側とする(図〓).
*ルビの行送り方向の配置位置 ルビを親文字の両側に配置する方法も行われている.ただし,これを実現する場合は,ルビの行送り方向の配置位置を選択できるようにする必要がある.なお,ルビを親文字の両側に配置する例は多くない.そこで,このドキュメントでは,末尾に〈参考〉として,その処理方法を解説しておく.
(4)ルビ文字と親文字の行送り方向の間隔(行間)は,指定による.ただし,デフォルトは行間をゼロする(親文字の文字の外枠とルビ文字の外枠を接して配置するとする)(図〓). (5)ルビ文字を同一行内で折り返して2行以上にする場合の行間は指定による.ただし,デフォルトは行間をゼロとする. (6)ルビ文字に使用する文字種は,特に制限しない.漢字や約物も使用できるものとする.
字詰め方向のルビの配置処理は,大きくは以下の2つとする.
(1)親文字と組み合わせたルビ文字列については,2行にわたる分割(以下,分割という)を不可とする(以下,A方式のルビという).
*ルビ文字列の分割 図〓の例では,まとまりのある親文字列の“磁”と“石”との字間で分割を認めている.しかし,“石”に対応したルビの“しやく”については分割は不可である.
図〓 磁石(じしやく)
(2)親文字と組み合わせたルビ文字列については,分割を可とする(以下,B方式のルビという).ただし,親文字列の属する本文において分割を不可とする箇所(例:句読点の前)では,親文字列及びルビ文字列ともに分割してはならない.
いずれかにするかは指定による.ただし,デフォルトはA方式とする.
前述したようにA方式のルビにおける字詰め方向については,従来多くの配置方法が行われており,ケースによっては,個別の箇所の状況により配置が工夫されていた例もあった,ここでは,以下のような事項を考慮し,また前提とし,配置ルールを簡便化するようにした.
*複雑な処理となる例 できるだけ字間を空けないという条件を満たすために,親文字からはみ出したルビを漢字には掛けないが,仮名には掛ける,とする処理方針がある.しかし,前後が同じ仮名又は漢字となる場合はよいとしても,親文字の前が仮名で,後ろが漢字といったときに,ルビ文字の字数によっては見た目のバランスを壊す場合も出てくる(親文字が1字の例を図〓に示す,上側が漢字には掛けないが,仮名に掛けるとした方針で処理した例).複数の親文字の場合でも,同様である(図〓参照).こうした問題を解決するためには,ルールをさらに追加しないといけない(活字組版では個別箇所のケースに応じて配置位置を工夫していたので,その箇所ごとに適当に処理できた).
また,ルビ文字が片仮名の場合,単語としてのまとまりがあり,前後の仮名にも掛けないという処理方法もあった(実際にもルビの字数によっては,仮名にも掛けないとした方が見た目のバランスはよい(図〓参照,下側が仮名に掛けないとした方針で処理した例).これを実現するためにも,さらなるルールの追加が必要となる.
こうした複雑さは,“できるだけ字間を空けないという条件”は満たさないが,前後の仮名にも,はみ出したルビは掛けないという単純なルールにすれば解決できる.
(1)ルビは,親文字の読み方又は意味を示すものである.そこで,誤読されないことを第一とした.具体的には,親文字列からはみ出したルビ文字は,前後に配置する漢字だけでなく,仮名にも掛けない方式とした.
*前後の文字に掛ける処理 親文字からルビ文字列がはみ出した場合,前後の文字に掛けるか掛けないかでは,主なものとして以下のような方法がある. ①親文字の前後の文字には,アキのある約物を除き,掛けない. ②親文字の前後の漢字には掛けないが,仮名や一部の約物には親文字サイズの1/2を掛ける. ③親文字の前後の文字には,文字種を限らないで親文字サイズの1/4を掛ける. なお,この処理は,親文字が1字でも2字以上の場合のルビで共通であるが,原則的な処理として②を選択した場合,ルビ文字が片仮名の親文字全体に対してルビを対応させる場合のルビに限り①とする方式もある.
*ルビのはみだしと文字の変形 漢字の読み方を示すルビには,3字となるケースは多いが,4字又は5字となる例は少ない.そこで,ルビが3字の場合,ルビ文字を変形(左右を縮小する長体又は天地を縮小する平体)して親文字からはみ出さないようにする方法もある.ただし,ルビが4字又は5字となると,ルビの変形にも限界があるので,ある程度のはみ出しは出てくる.
(2)縦組と横組とで配置処理法を変えることなく,共通の処理ができる方法とした.具体的には,親文字が1字の場合,親文字列とルビ文字列の中心をそろえる方式のみとした.
*親文字が1字の場合のルビ 親文字が1字の場合,従来は,以下のような方法が行われていた. ①親文字列の先頭とルビ文字列の先頭をそろえる. ②親文字列とルビ文字列の中心をそろえる. ③親文字列の先頭とルビ文字列の先頭をそろえることを原則とするが,ルビ文字列の字数,親文字列の前後に配置される文字種,行頭又は行末などにより,①や②だけでなく,それとは異なる配置法とするというかなり複雑な配置方法.
(3)2レベルの処理方式とした.第1レベルでは,親文字及びルビ文字(両者を合わせて,以下,親文字群という)のみの情報から,親文字とルビ文字の配置関係を決める.第2レベルでは,親文字群の前後に配置する文字を考慮して,行の中での親文字群の配置位置を確定する.逆に言えば,第1レベルで決めた親文字とルビ文字の配置関係は,親文字群の前後に配置する文字により修正することはしない.また,親文字群が行頭又は行末に配置されることにより,親文字とルビ文字の配置関係を直し,親文字の先頭又は末尾を行頭又は行末にそろえる配置方法は採用しない.つまり,第1レベルで決定した事項は,第2レベルでは修正しない方式とした.
*2レベルの処理方式 複数の親文字である熟語にあって,熟語としてのまとまりを重視する配置法では,親文字の字間で2行にわたる分割を認めている.分割された場合は,分割前の親文字とルビの配置位置は変化する.しかし,例えば3字で構成された親文字列の場合,親文字は3字,1字+2字,2字+1字の3つの組合せがあるが,それぞれの場合において,親文字とルビの配置位置は,それだけで決定され,その配置位置は変化しない.
(4)ルビの配置方法として,JLReqやJIS X 4051(日本語文書の組版方法)では,複数の方法が示されているケースがあるが,ここでは上記の方針で1つの方法に限定した.また,ここで示した処理法は,原則としてJIS X 4051で規定している方法によった.ただし,処理系定義として採用できる処理方法(オプション)を採用した場合がある.例えば,はみ出したルビを仮名にも掛けないという方法は,JIS X 4051では処理系定義として採用できる方式である. (5)ルビ文字の文字サイズを大きく(逆に小さく)したいという要求がある.そこで,ルビの文字サイズは,親文字の文字サイズの1/2を初期値(デフォルト値)として採用し,図版では,ルビの文字サイズは親文字の文字サイズの1/2で示したが,空きなどのサイズはルビ文字の文字サイズを基準とするのではなく,親文字の文字サイズを基準として規定することにより,ルビの文字サイズが親文字の文字サイズの1/2以外であっても採用できる配置方法とした.
親文字1字にルビを対応させるルビの配置処理は,次による.
なお,前述の“配置ルールで考慮した事項”の(3)の2レベルの処理方式でいえば,以下の説明の(1),(2)及び(3)項は,第1レベルの親文字及びルビ文字の配置処理であり,(4)及び(5)項は,第2レベルの親文字群(親文字及びそれに付随するルビ文字)を行中に配置する処理である.
(1)ルビの字数が2字以上の場合は,ルビ文字列の字間はベタ組とする.なお,ルビ⽂字が連数字中の⽂字(cl-24),単位記号中の⽂字(cl-25),欧文用間隔(cl-26),欧⽂⽤⽂字(cl-27)のように固有の字幅を持つ⽂字の場合には,それぞれの⽂字の固有の字幅に応じて配置する(図〓参照). (2)ルビ文字列と親文字の字詰め方向の中心をそろえて配置する(図〓参照). (3)親文字が1字の場合,親⽂字とそれに付くルビ⽂字の⽂字列は,⼀体として扱い,分割してはならない. (4)親文字よりルビ文字列の全長が長い場合,親文字からはみ出したルビ文字を親文字の前⼜は後ろに配置する文字に掛けてはならない(図〓参照).
ただし,次に掲げる句点類(cl-06)など,その後ろ又は前に空きがある約物などにはルビを掛ける(図〓参照).(ここで,句点類(cl-06)などの処理に差をつけたのは,句点類(cl-06)などは,文章の区切りとして重要な役割を果たしており,これらの後ろや前後の空きをできるだけ一定していることが望ましく,特にこれらの空きが大きくなると,区切りの意味を変える恐れがあること,また,冒頭の注の“複雑な処理となる例”で述べたような問題もでないことによる.)
(5)親文字列よりルビ文字列の全長が長い場合,行頭ではルビ文字列の先頭を行頭にそろえ(図〓参照),行末ではルビ文字列の末尾を行末にそろえる(図〓参照).行頭又は行末において,親文字の前後にアキが生じていても,ルビ文字が行頭又は行末に接していれば,それでよいとする処理方法であり,JIS X 4051でも採用され,実際にも行われている方法である.
親文字2字以上の場合,ルビ文字が1字の場合と2字以上の場合に分けられる.ルビ文字が2字以上の場合は,以下の3つの処理方法がある.
(1)親文字全体に対してルビを対応させて配置する.
*親文字全体に対してルビを対応させる場合のルビ ベタ組にした親文字列とルビ文字列の全長が異なる場合,主なものとして以下のような方法がある. ①短い方の文字列の先頭,末尾及び字間を空ける.先頭及び末尾と字間との比率は,原則として1/2にする. ②短い方の文字列の字間だけを空け,両方の長さをそろえる. ③親文字列とルビ文字列ともにベタ組とし,それぞれの先頭,末尾又は中心をそろえる.
(2)各親文字1字1字にルビを対応させて配置する.
*各親文字1字1字にルビを対応させるルビ 従来この処理を行う場合,親文字を一体として,それにルビを対応させるのではなく,親文字の1字1字に対してルビをさせていた.しかし,熟語などをまとまりとして音読する場合を考慮すると,親文字を一体として,それにルビを対応させたうえで,かつ,個々の親文字とルビを対応させることが望ましい.
(3)各親文字1字1字にルビは対応しているが,各親文字1字1字に対応するルビ文字列の長さが該当する親文字の字幅よりはみ出さない場合は,(2)と同じ処理を行い,そうでない場合は(1)の処理を行う.
上記の(1)は,親文字を一体として,それにルビを対応させた場合の処理方法であり,(2)及び(3)は,親文字全体をルビを対応させるとともに,親文字の各文字に対してルビを対応させた場合の処理方法である.(2)又は(3)のいずれかとするかは,指定による.個々の漢字の読み方を示すことを重視すれば(2)となり,熟語としてもまとまりを重視すれば(3)となる.子供を対象とする本では(2)の方式が多く,一般の人を対処とする書籍などでは(3)とする方式が多い.
*熟語のルビ 親文字(熟語)のルビの配置処理として以下のような方法がある. ①各親文字1字1字に対応させてルビを配置する. ②親文字全体に対応させてルビを配置する. ③ルビの字数により①又は②と同じ配置にする. ④熟語内で各親文字と対応するルビが親文字からはみ出さない場合は①の配置とし,各親文字と対応するルビが親文字からはみ出した場合は,熟語内における前後の別の漢字に親文字サイズで1/2まで掛かってよいが,各親文字と対応するルビ1字は少なくとも該当する親文字に掛かっていないといけない,という処理を行う.ただし,この方法には,いくつかのバリエーションがあるが,主な方法はJLRrqの付属書“F 熟語ルビの配置方法”に示した方法である.
親文字2字以上で,ルビ文字が1字の場合は,親文字列はベタ組とし,親文字列とルビ文字列の中心をそろえて配置する.
ここでは連数字中の⽂字(cl-24),単位記号中の⽂字(cl-25),欧⽂⽤字(cl-27)のように固有の字幅を持った文字(以下,この項では“欧文用文字等”という)と,平仮名(cl-15),⽚仮名(cl-16),漢字等(cl-19)など(以下のこの項では“仮名等”という)の2つに分けて,その組合せで配置方法を説明する.欧文用文字等は,複数の文字をまとめて読むので,字間を空ける処理は,できるだけ避けたいという事情があるからである.いずれの場合も最初に,それぞれをベタ組にした場合のルビ文字列の全長と,親文字列の全長を比較し,配置方法を決める.この場合のルビ文字列の全長と親文字列の全長が同じときは,それぞれをベタ組とし,ルビ文字列及び親文字列の字詰め方向の中心をそろえて配置する(図〓参照).それ以外の場合の配置処理は,次による.(なお,前述の2レベルの処理方式でいえば,以下の説明の(1), (2),(3)及び(4)項は,第1レベル,(5)項は,第2レベルの配置処理である.)
(1)ルビ文字及び親文字が“仮名等”の場合は,次による.
*ルビ文字及び親文字の字間を空ける処理 ルビ文字が2字以上で,親文字列全体に対してルビを対応させる場合,ルビ文字の全体と親文字の全体とが対応していることが望ましい.文字列の長さが異なる場合,親文字又はルビ文字の字間を空けて,それぞれの全長をそろえる,それぞれをベタ組にして文字列の中心をそろえるなど,いくつかの処理方法がある.親文字もルビ文字も漢字や仮名の場合において,ここで採用した方法は,活字組版の時代でも,見た目のバランスが良いといわれていた,前後のアキ1に対し,字間を2の比率で空ける方法である.これに対し,欧文用文字等では,全体の対応よりは,欧文用文字等のまとまりを重視し,字間を空ける処理を採用しないこととした.
(2)ルビ文字が仮名等,かつ,親文字が欧文用文字等の場合は,次による(図〓参照).
(3)ルビ文字が欧文用文字等,かつ,親文字が仮名等の場合は,次による(図〓参照).
*ルビと欧文用間隔 ルビ文字が2字以上で,親文字列全体に対してルビを対応させる場合,親文字列又はルビ文字列に欧文用間隔(cl-26)を含むときがあるが,ここでは適用範囲外とした.文字列の長さをそろえる調整に使用する方法と使用しない方法がある.JIS X 4051では文字列の長さの調整に使用しない方法を規定している.
(4)この方式の場合,親⽂字列とそれに付くルビ⽂字の⽂字列は,⼀体として扱い,分割してはならない.
*親文字列全体に対してルビを対応させる場合の分割 ルビ文字が2字以上で,親文字列全体に対してルビを対応させる場合,親文字及びルビは一体として扱い分割禁止であるが,活字組版において複合語などでは分割していた.行の調整処理で極端な調整となる例もあったからである.このことを考慮すると,このケースでも親文字とルビの組合せを考慮した分割ができることが望ましいといえよう.
(5)親文字列よりルビ文字列の全長が長い場合,親文字からはみ出したルビ文字を前⼜は後ろに配置する文字に掛けてよいかどうかは“3.2 親文字が1字の場合のルビの配置方法”で説明した方法による(図〓参照).また,親文字列よりルビ文字列の全長が長い場合の行頭又は行末での配置処理も,“3.2 親文字が1字の場合のルビの配置方法”の処理で説明した方法による.
個々の親文字にルビ文字を配置する方法は,“3.2 親文字が1字の場合のルビの配置方法”による(図〓に例を示す).なお,各親文字間で,各親文字とルビ文字の組合せを維持したうえで,分割を可とする.
ルビ文字が2字以上で,親文字のまとまりを重視する場合の配置処理は,次による.なお,前述の2レベルの処理方式でいえば,以下の説明の(1),(2)及び(3)項は,第1レベル,(4)項は,第2レベルの配置処理である.
(1)親文字のまとまりを重視する場合でも,各親文字とルビ文字とが対応している.この各親文字に対応したそれぞれのルビ文字列をベタ組にした場合において,各親文字に対応したそれぞれのルビ文字列のすべてにおいて,その全長が親文字の文字サイズ以下のときは,次による.
(2)各親文字に対応したそれぞれのルビ文字列をベタ組にした場合において,各親文字に対応したそれぞれのルビ文字列の全長が1つでも親文字の文字サイズを越えるときは,7.2.1 ルビ文字が2字以上で,親文字列全体に対してルビを対応させる場合と同じ配置処理とする(図〓,図〓参照).
(3)各親文字間で,各親文字とルビ文字の組合せを維持したうえで,分割ができるものとする.この場合,行末又は行頭で親文字が1字となったときは,“3.2 親文字が1字の場合のルビの配置方法”と同じ配置処理とし,親文字が2字以上となったときは,ここで説明した配置処理とする(図〓参照).
(4)ルビ文字列の全長が親文字列の全長より長い場合,親文字からはみ出したルビ文字を親文字の前⼜は後ろに配置する文字に掛けてよいかどうかは,“3.2 親文字が1字の場合のルビの配置方法”の配置処理と同じとする.また,親文字列よりルビ文字列の全長が長い場合の行頭又は行末での配置処理も,“3.2 親文字が1字の場合のルビの配置方法”で説明した方法による.
字間処理は,本文と同じとする.ただし,先頭又は末尾に配置する括弧類,句読点の前又は後ろの二分アキは確保しないものとする.また,分割する場合の処理は,本文の処理と同じとし(可能な位置ではルビ文字列は分割できる),行末にアキがでた場合には,そのアキを確保し,行の調整処理は行わない.
そろえ処理は,次による.デフォルトは(1)とする.
(1)行頭そろえ 親文字列とルビ文字列の字詰め方向の先頭をそろえる. (2)行末そろえ 親文字列ルビ文字列の字詰め方向の末尾をそろえる. (3)中央そろえ 親文字列とルビ文字列の字詰め方向の中心をそえる.ただし,文字列の長さがゼロ(親文字がempty)の親文字が行末にある場合を除き,かつ親文字列が分割されないで同一行にある場合にのみ,この処理を行い,そうでない場合は(1)とする. (4)均等割り 親文字列とルビ文字列の字詰め方向の長さをそろえ,ルビ文字列の字間を均等にあける.ただし,親文字列が分割されないで同一行にあり,かつルビ文字列の全長が親文字より短い場合のみ,この処理を行い,そうでない場合及び文字列の長さがゼロ(親文字がempty)の親文字の場合は(1)とする.
*均等割りの処理 文字列中に全角でない文字を含んでいても,また,約物を含んでいても,アキは均等とする.(ルビの場合,処理が複雑になるので,できるだけ単純になる方法としたが,処理系で細かく間上げる処理方法を採用することは否定しない.以下の字間を均等に空ける場合も同様とする.)
*行頭・行末そろえ 行頭・行末そろえは,処理が複雑になることから,採用しないこととした.
ルビ文字列が親文字列より長くなった場合は,前後の行にはみ出すか,又は同一行内で折り返す.いずれによるかは指定による.
(1)前後の行にはみ出す場合は,次の順序でルビ文字列を配置する.
(2)同一行内で折り返す場合は,次の順序でルビ文字列を配置する.
なお,ルビが複数行となり,行間よりルビの行送り方向の幅が大きなる場合は,行間を広げ,親文字等が重ならないようにする.
両側にルビを配置する場合,その処理は複雑になるが,簡単な方法として,ルビの種類を考慮し,その組合せで配置方法を決めることができる.なお,親文字からはみ出したルビ文字の前後の文字との関係,行頭・行末の配置処理は,片側にルビが付く場合と同じである.
(1)ルビの種類について,以下の名称を使用する.
(2)両側ルビの組合せ A方式のルビの組合せとしては,次がある.
さらに,A方式とB方式の組合せがある.
JIS X 4051では,前項の①,②及び③の組合せの配置方法のみを規定している.ただし,③は,連続するモノルビを一つのグループルビとして扱う処理なので,結果として,その配置方法は,②である.
ところで,④のモノルビと熟語ルビとの組合せは,熟語ルビの熟語を構成する個々の漢字とそれに対応するルビ文字との組合せを一つのモノルビとして扱えば,①の方法が採用でき,⑤の一方が熟語ルビで片方が熟語ルビ又はグループルビの組合せは,熟語ルビをグループルビとして扱えば,②の方法が採用できる.
このように,③及び⑤は②の配置方法と同じ,④は①の配置方法と同じと考えてよい.そこで,③,④及び⑤の配置処理は,①又は②の配置方法を参照してもらうこととし,ここでは,①及び②の配置方法を説明する.
なお,ルビ文字をどちら側に配置するかは,指定による.
モノルビとモノルビの組合せでは,ルビ文字列の字間はベタ組とし,それぞれのルビ文字列と親文字列とは,字詰め方向の中心をそろえて配置する(図〓参照).その他は,前述したモノルビの配置方法と同じである.
両側のルビ文字列がともに親文字より短い場合は,前述した“グループルビの配置方法”により配置する.ルビ文字が同項でいう仮名等の場合は,それぞれのルビ文字列の字間とその前後を空けて配置する(図〓参照).
親文字より長いルビ文字列を含む場合は,長い方のルビ文字列の長さに従い,前述した“グループルビの配置方法”により配置する.親文字が同項でいう仮名等の場合は,親文字列の字間とその前後を空ける.次に,その(仮名等の場合は字間を空けた)親文字列の長さ(前後の空きは含めない)に応じて残りの短い方のグループルビの配置方法を決める.
短い方のグループルビのルビ文字列の長さが(字間を空けた)親文字列長以上の場合は,ルビ文字列はベタ組とし,ルビ文字列と親文字列の字詰め方向の中心をそろえて配置する(図〓参照).
短い方のグループルビのルビ文字列の長さが(字間を空けた)親文字列長未満の場合は,字間を空けた親文字の長さにそろえて,前述の“グループルビの配置方法”で配置する.ルビ文字が同項でいう仮名等の場合は,ルビ文字列の字間とその前後を空ける(図〓参照).
いずれの場合でも,その他は,前述したグループルビの配置方法と同じである.
A方式とB方式との組合せにおいては,まずA方式のルビの配置処理を行い,そのうえでB方式のルビを配置する.
なお,均等割りの指定があった場合は,行頭そろえとする.
モノルビとグループルビの組合せの場合,次のような方法も考えられる.
まずモノルビとした各親文字とルビの配置を決め(以下,そのまとまりを“モノルビ親文字群のブロック”と呼ぶ),次にそのモノルビ親文字群のブロックを字間を空けないでベタ組で並べ,その全長に対し,グループルビを対応させる処理を行う.グループルビ文字列が,モノルビ親文字群のブロックを並べた全長より短い場合は,グループルビ文字列の字間と先頭・末尾を空ける.長い場合は,モノルビ親文字群のブロック間と全体の先頭・末尾を空ける,という方法である.この方法は,モノルビの親文字とルビとの対応で,ルビ文字列が親文字の字幅以下の場合は,問題がないが,親文字の字幅を超える場合は,グループルビとしてみるとバランスがよい配置とはいえない場合が出てくる.
そこで,すべてのモノルビにおいて親文字の字幅以下の場合と,字幅を超えるケースを含む場合に分け,前者は各モノルビを親文字に配置し,親文字をベタ組で並べ,その上で,グループルビを親文字列に配置する処理を行う.後者はモノルビ全体をグループにし,グループルビとグループルビの組合せという配置方法とする.
この方法は,熟語ルビと熟語ルビの組合せでも適用できる.具体的には,熟語ルビの各親文字とルビ文字列の長さを比べ,次の3つの場合に分ける. (1)すべてのルビ文字列の長さが親文字の字幅以下の場合 (2)片方で一部のルビ文字列で親文字の字幅を超えるケースを含む場合 (3)両側で一部のルビ文字列で親文字の字幅を超えるケースを含む場合
そのうえで,(1)はモノルビとモノルビの組合せのルール,(2)はモノルビとグループルビの組合せで,すべてのモノルビ文字列の長さが親文字の字幅以下の場合のルール,(3)はグループルビとグループルビの組合せのルールを適用するという方法である.
さらに,この方法は,熟語ルビとグループルビの組合せでも考えることができる.熟語ルビの各親文字とルビ文字の対応において,すべてのルビ文字列の長さが親文字の字幅以下の場合と,一部のルビ文字列で親文字の字幅を超えるケースを含む場合に分け,前者はモノルビとグループルビの組合せで,すべてのモノルビ文字列の長さが親文字の字幅以下の場合のルール,後者はグループルビとグループルビの組合せのルールを適用するという方法である.
両側にルビを付けた行が重なると,行間の設定によっては,隣り同士の行のルビが重なるケースが出る.これは避けないといけない.以下のような方法が考えられる. (1)あらかじめ隣り同士のルビ文字が重ならないように,文書全体の行間を設定しておく. (2)重なりが発生した該当する行間だけを広げて,ルビが重ならないようにする.この場合,重なった前の行のルビと,後ろのルビが重ならないだけでなく,例えば,その間は本文文字サイズの四分は空けるとする方法も行われていた. (3)該当する行間ではなく,両側にルビの付いた行そのものを複数の行の領域に配置する.両側にルビの付いた行を,例えば,2行分のスペース(2行取り)とする. (4)重なりが発生した行間だけではなく,該当する段落全体の行間を広げて,ルビが重ならないようにする.
なお,活字組版では,ルビが多く付く,あるいはルビと共に注の合印などが多く入る場合は(1)の方法,ルビが少ない場合は(2)又は(3)の方法がとられていた.しかし,Webの自動処理を考えると(3)の処理でよいであろう.この方法で該当する行に整数行の領域(例えば2行取り)を割り当てれば,行位置の乱れは,その部分だけですみ,段組とした場合などでは,隣りの段との行位置がそろう.
“simple-ruby”を改定したものです. モノルビ,グループルビ,熟語ルビの用語は使用しない方法で説明しています.ただし,“参考 両側ルビの配置処理”で,説明の便宜としてモノルビ,グループルビ,熟語ルビの用語を使用しています. なお,従来のルビはA方式(この部分は,処理方法としては変更はありません),折り返しが可能なルビ(行間注的なものです)はB方式.冒頭に“ルビとその使用”として,ルビの使用例を示しておきました. JDLReq_ルビ22_12.txt