2011-07-24
ルビはじめました(PXrubrica パッケージ)(2)
前回の続き。
『日本語組版処理の要件』の 3.3 節の残りの部分の例を再現する。

- ルビ文字を隣接する地の文の領域に進入させる場合、文字種(平仮名、片仮名、漢字、約物、等)によって進入の可否を変える必要があるが、その判断を自動で行うのは難しい(不確実性が上がる)ので、手動で行うことを前提とする。ルビ文字全角幅まで許す(
<->
)、半角幅まで許す((-)
)、許さない(|-|
)の選択を、各ルビ命令単位で行える。場合によっては左右で異なる指定が必要なことに注意:この\ruby[<j|]{業態}{ぎよう|たい}等
*1 - 附属書 F で述べられている「熟語の構成,さらにその熟語の前後にくる文字の種類を考慮して配置する」には対応していない。無論、「結果の出力形を(手動で)求めておいて、それと一致するようにオプションを決める」ことは可能であるが、それは私の掲げる目的には沿わない。現在の熟語ルビの処理方法は、JIS X 4051 で規定されている通りで、「対応のルビ文字列の方が長くなる親文字が 1 つでもあったら全体をグループルビに切り替える」(『要件』の図 130)となっている。そしてこの場合、(JIS X 4051 に反して)途中で行分割ができなくなるという欠点をもつ。
- 上の出力例の一番最後では、「行頭・行末ではルビ文字列と親文字列の端を揃える」という様式を行っているが、これは実は、行頭・行末にあることを自動で検知しているのでなく、手動で「端を揃える」オプション(
||-|
)を入力している。先述の「前後の文字により進入の可否を決める」の話と異なり、「行頭・行末にあるか」は組版の結果を見ないと解らない(おまけに「端を揃える」オプションを入れると、それ自体のせいで位置が変わる可能性すらある)ので、この様式を行うのはあまり実用的でない。 - 実は、TeX では「行頭・行末にあるか否か(あるいは行分割されたか否か)に応じて組み方を変える」という処理が本質的に難しい。「TeX Q & A」の qa:55529 から始めるスレッドを読むと解るが、一応そういう類の処理を行う機能はある*2が、日本語のルビ処理に関しては機能不足なのである。従って、現状では、「端を揃える」を行うのは難しい。熟語ルビの途中で行分割できないのも同じ理由である。*3
- しかし、同じスレッドの中で触れられているように、ある種のトリックや pdfTeX の拡張機能*4を用いて複数パス処理を行うという(難度の高い)方法を駆使すれば可能であるはずである。余裕があればこういう拡張を行っていきたい。
\documentclass{jsarticle} \usepackage{otf} \usepackage{plext} \usepackage{pxrubrica} \rubysetup{<j>} % 熟語ルビで、隣接文字に半角までかけるのを許可するのを既定とする \rubyintergap{0.04} % ルビと親文字の間の空き(既定値は 0) \begin{document} \begin{center} %======================================= 縦組 \begin{minipage}<t>{20zw} %--------------------------------------- 3.3.8節 \rubysetup{<->} % ルビ全角までかけるのを許すのを既定値とする \ruby{人}{ひと}は\ruby{死}{し}して\ruby{名}{な}を\ruby{残}{のこ}す\par 漢字の部首には\ruby{偏}{へん}・\ruby{冠}{かんむり}・\ruby{脚}{きやく}・\ruby{旁}{つくり}がある\par 漢字の部首には\ruby{偏}{へん}、\ruby{冠}{かんむり}、\ruby{脚}{きやく}、\ruby{旁}{つくり}がある\par \newcommand*{\噂}{\CID{7642}} % \CID{...} をマクロにすると { } が不要になる この\ruby{\噂}{うわさ}の好きな人は\ruby{懐}{ふところ}ぐあいもよく、\ruby{檜}{ひのき}を\par 漢字の部首には「\ruby{偏}{へん}」「\ruby{冠}{かんむり}」「\ruby{脚}{きやく}」「\ruby{旁}{つくり}」が\par この\ruby[-|]{\噂}{うわさ}好きな人は\ruby[-|]{懐}{ふところ}具合もよく、\ruby[-|]{檜}{ひのき}材を\par \rubysetup{(-)} % ルビ半角までかけるのを許すのを既定値とする この\ruby{\噂}{うわさ}の好きな人は\ruby{懐}{ふところ}ぐあいもよく、\ruby{檜}{ひのき}を\par この\ruby{\噂}{うわさ}好きな人は\ruby{懐}{ふところ}具合もよく、\ruby{檜}{ひのき}材を\par \rubysetup{<->} % ルビ全角までに戻す \ruby{径}{こみち}を34567890123456789 123456(8。)123456789\ruby{径}{こみち}123……\par {\gtfamily 注 $\downarrow$ は少しインチキしています}\par % つまり予め行頭・行末に来ることを見越して入力を変えている \ruby[||g|]{飾り}{アクセサリー}等5678901234567890 1234567890123456共\ruby[|g||]{飾り}{アクセサリー}123……\par \end{minipage} \end{center} \end{document}
*1:この場合、熟語ルビは結局グループルビとして組まれる。親文字列とルビ文字列を中央揃えにするという性質は、進入の設定(<j|
)に影響されないことに注意(「突出禁止設定(||
)」は影響する)。結果的にルビ半角幅が左右に突出するが、左側のみが前の仮名に進入し、右側は空きを生じる。
*2:「discretionary」と呼ばれる機能。例えば、「ドイツ語旧正書法では decken を分綴すると dek- + ken となる」といった処理はこの機能で実現できる。
*3:例えば、\ruby[j]{業態}{ぎよう|たい}
はグループルビで組まれるが、〈業〉と〈態〉の間で分割することを許すと、その場合はモノルビの組み方になり、親文字とルビ文字の位置関係が変わる。
トラックバック - http://d.hatena.ne.jp/zrbabbler/20110724/1311503096
リンク元
- 100 http://zrbabbler.sp.land.to/pxrubrica.html
- 18 https://www.google.co.jp/
- 9 http://zrbabbler.sp.land.to/
- 8 http://twitter.com/
- 8 http://www.google.co.jp/url?sa=t&rct=j&q=tex ルビ 中央揃え&source=web&cd=3&ved=0CDUQFjAC&url=http://d.hatena.ne.jp/zrbabbler/20110724/1311503096&ei=mm8bT66SCpH4mAXe4YmgCg&usg=AFQjCNGBYLREpxsk
- 6 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFgQFjAA&url=http://d.hatena.ne.jp/zrbabbler/20110724/1311503096&ei=e9D7T4mWIKfkmAXKmPypBQ&usg=AFQjCNGBYLREpxskOnDsptPR05IhyGjC1Q
- 4 http://ezsch.ezweb.ne.jp/search/?sr=0001&query=噂、ツイーター
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=10&ved=0CGgQFjAJ&url=http://d.hatena.ne.jp/zrbabbler/20110724/1311503096&ei=Kea2UKuyC6vqmAWvuoCwDA&usg=AFQjCNGBYLREpxskOnDsptPR05IhyGjC1Q&sig2=eSlb4Ddb5hiHOWK19HcuJg
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=0CGUQFjAF&url=http://d.hatena.ne.jp/zrbabbler/20110724/1311503096&ei=CX0BUKzvPKuemQXY2vHqCQ&usg=AFQjCNGBYLREpxskOnDsptPR05IhyGjC1Q&sig2=Zs4uEA5zmdilBsa_XmBeIQ
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CEAQFjAD&url=http://d.hatena.ne.jp/zrbabbler/20110724/1311503096&ei=BFiFT_LYF4yUmQWotIm5Bw&usg=AFQjCNGBYLREpxskOnDsptPR05IhyGjC1Q&sig2=d9672daGREvnt-1LK_O-DQ