Re: ルビの折り返しの挙動

田村さん、石井さん、

例をありがとうございます。

Chromeの実装にぜっんぜん関係ないのですが、教えてくださった例たちはなかなか味わいがありました。

154文字の例は、これは一体何がしたいんでしょうね。80文字ほどの漢文にsup/subで送り仮名と返り点をつけて154文字、その全体に「モトム」の3文字のルビ。これはデータ作成の際のバグなんじゃないでしょうかね。原本にはこのようなルビは見当たりません(下のイメージの最初の行の一番下から「憧市様」が始まります)ので、岩波文庫にしたときに編者がつけたんでしょうか。こちらは電子データがないので見てません。

「釈迦牟尼仏能為甚難希有之事」の例は同じく漢文的な例ですが、こちらはわかりやすいです。漢字だけで書かれたお経と、その読みの、もっと細かくつけられるはずの対応を、なんらかの理由でずらずらと長くしてしまっている。

「抜けて広い道を」は内容は説明っぽくありませんが、形式としては行間注ですかね。これも原本にはありません(「抜けて広い道を」の部分が下のイメージの7行目の先頭近くから始まります)ので、後の版の編者が付け加えたんでしょうかね。

青空文庫からのサンプルという性質からか、どれも、この例は丁寧にレイアウトしなくては、と思わせるようなものではなくて、フォールバックとして表示が破綻していなければ良し、という印象を持ちました。


> 日本人の氏名が漢字4文字のケースが多いため、3文字はダメだろうと試しておりません。

了解。4文字まとめてルビをつける例が結構多いんですか? ただ四文字熟語も、そういう言葉があるくらいには多そうなので、4文字は行がとても短い場合でなければ合理的に思えます。

> 「親文字が4文字以内かつルビが8文字以内なら分割しない」としています。
> ルビが9文字で親文字が2文字なら分割することがあります。


了解です。



石井さんの、読売新聞の例、これなんですよね、リグレッションだと思わせてしまう例。

実験してみるとデータが<ruby><rb>嘔</rb><rt>おう</rt><rb>吐</rb><rt>と</rt></ruby>となっていたら、「お・うと」となったりはしませんね。ただ、折り返さない場合に「嘔吐」の上に「おうと」が均等には配置されず、ルビのサイズが1/2より大きいのか、下の上の例のように「嘔」と「吐」の間にアキが生まれるようです。下は<ruby><rb>嘔吐</rb><rt>おうと</rt></ruby>です。データをきちんとすると表示が残念になってしまうのは残念かも。


木田




> 2024/06/07 15:20、TAMURA, Kent <tkent@google.com>のメール:
> 
> 
> 
> On Thu, Jun 6, 2024 at 2:59 PM 木田泰夫 <kida@mac.com <mailto:kida@mac.com>> wrote:
>> 田村さん、
>> 
>> ありがとうございます!
>> 
>> ざっと試してみましたが、「短いルビは分割しない」を有効にしないと違和感のあるケースが多くなってリグレッションのように感じるように思いました。
>> 
>> 「短いルビは分割しない」を有効にすると、違和感がなくなるのですが、これは五文字以上の親文字にほとんど会わないからですね。前に挙げていただいた青空文庫のページですが、親文字が154文字というのはどのあたりにあるでしょう? 文が長大で、探してみたのですが見つけられませんでした。
> 
>  親文字が154文字は、
> https://www.aozora.gr.jp/cards/001930/files/58400_69157.html#:~:text=%E3%81%AB%E3%83%AB%E3%83%93%E4%BB%98%E3%81%8D%EF%BC%BD-,%E2%80%BB%E6%86%A7%E5%B8%82%E6%A7%98,-%EF%BC%BB%EF%BC%83%E5%B7%A6%E3%81%AB%E3%80%8C%E3%82%BF%E3%83%8A%E3%83%A2%E3%83%8E%E3%83%95%E3%82%A6

> で「※憧市様」をページ内検索して見つけてください。
> 
> 他の長い<ruby>の例です:
> https://www.aozora.gr.jp/cards/001404/files/49966_44769.html#:~:text=%E3%82%92%E6%9D%B1%E5%8D%97%E3%81%AB-,%E6%8A%9C%E3%81%91%E3%81%A6%E5%BA%83%E3%81%84%E9%81%93%E3%82%92,-%E4%B8%83%E7%94%BA%E5%8F%82 「抜けて広い道を」を検索
> https://www.aozora.gr.jp/cards/000256/files/1412_24371.html#:~:text=%E5%83%A7%E4%B8%80%E5%90%8C%E3%80%80%EF%BC%88%E5%90%88%E5%94%B1%EF%BC%89-,%E9%87%88%E8%BF%A6%E7%89%9F%E5%B0%BC%E4%BB%8F%E8%83%BD%E7%82%BA%E7%94%9A%E9%9B%A3%E5%B8%8C%E6%9C%89%E4%B9%8B%E4%BA%8B,-%E3%81%97%E3%82%83%E3%81%8B%E3%82%80 「釈迦牟尼仏能為甚難希有之事」を検索
> 
> 
>> 
>> ルビの折り返しはフォールバックですので、ある程度長くて折り返しに困る場合に限定するのが良さそうに感じます。その意味で、4文字の閾値は良いかもしれません。一行が短い場合、4文字は長いようにも感じますが、そもそも行が短いこと自体もある意味例外的ですのでまあ良しかなと。3文字は試されましたか?
> 
> 日本人の氏名が漢字4文字のケースが多いため、3文字はダメだろうと試しておりません。
>  
>> 
>> 親文字が短く、ルビが長い場合にはどのような処理になりますか?
> 
> 「親文字が4文字以内かつルビが8文字以内なら分割しない」としています。
> ルビが9文字で親文字が2文字なら分割することがあります。
>  
>> 
>> もう少し試してみます。
>> 
>> 木田
>> 
>> 
>>> 2024/06/06 7:31、TAMURA, Kent <tkent@google.com <mailto:tkent@google.com>>のメール:
>>> 
>>> みなさま、
>>> 
>>> Google Chrome 127 (現在 Dev と Canary チャネル)で、chrome://flags/#enable-experimental-web-platform-features
>>> を有効化するとルビ内の折り返しが可能になります。この状態では「短いルビは分割しない」挙動は
>>> 有効になっておらず、chrome://flags/#ruby-short-heuristics で有効化できます。お試しください。
>>> 
>>> 
>>> On Mon, Apr 1, 2024 at 12:17 PM TAMURA, Kent <tkent@google.com <mailto:tkent@google.com>> wrote:
>>>> Google 田村です。
>>>> みなさま、フィードバックありがとうございます。
>>>> 
>>>> みなさまの意見と社内での議論から、以下のような方針にする予定です。
>>>> 
>>>> * できるだけルビの折り返しは行わないよう、親文字が短いルビ内では折り返ししないという経験則をブラウザに組み込む。
>>>>   * 熟語ルビの分割が好ましくない。
>>>>   * ウェブブラウザというソフトウェアの特性上、できるだけ現在と挙動を変えない方が好ましい。
>>>>   * 青空文庫のテキストを調査したところ、親文字4文字以内で全ルビの 99.4% を占めました。最初は4文字以内は折り返しできないようにして、それが厳しすぎるようなら2文字に緩和するかもしれません。
>>>> * ルビの入れ子には対応しない
>>>> 
>>>> 
>>>> 補足:
>>>> * 折り返しの処理においては「ruby-base と ruby-text のペア」を単位として考えます。「<ruby>師<rt>し</rt>匠<rt>しょう</ruby> 」は「 <ruby>師<rt>し</ruby><ruby>匠<rt>しょう</ruby>」と同じ扱いになります。
>>>> * ルビの分割で親文字がなくルビテキストのみになるケースや、ルビテキストがなく親文字だけになるケースはできるだけ避けるようにします。しかし、どうしても避けられないケースはあります。例えば [1] は親文字が154文字、ルビテキストが3文字の<ruby>があります。これが4行以上に分割されるとどうしてもルビテキストがない親文字が出てきます。
>>>> 
>>>> [1] https://www.aozora.gr.jp/cards/001930/files/58400_69157.html

>>>> 
>>>> 
>>>> 
>>>> On Fri, Mar 15, 2024 at 11:55 AM TAMURA, Kent <tkent@google.com <mailto:tkent@google.com>> wrote:
>>>>> みなさま、
>>>>> 
>>>>> Google 田村です。
>>>>> Google Chrome でルビ内の折り返しができるプロトタイプを作成し、基本的な動作が問題ないことを確認しました。
>>>>> 現状の css-ruby / HTML スペックから逸脱せずにルビの折り返しを出荷しようと考えていますが、以下の点についてフィードバックをいただきたいと思います。
>>>>> 
>>>>> * 短いルビの中では折り返したくないという要求
>>>>>   A) ブラウザ側でルビが短いかどうか判断して折り返し可否を決める
>>>>>   B) ブラウザ側で判断せず、ページ著者が折り返したくないルビに  white-space:nowrap を付ける
>>>>>   C) ブラウザ側で判断せず、ページ著者が折り返したいルビに  white-space:normal を付ける
>>>>> 
>>>>> Bでも許容できるでしょうか。
>>>>> どうしてもAが必要という場合、「親文字とルビテキストの均等割付け前の幅がともに行全体の幅の 1/10 以下なら折り返し不可」という基準はいかがでしょうか。
>>>>> 
>>>>> * <ruby> の入れ子
>>>>>   <ruby>が入れ子になっている状態で内側の <ruby> 内での折り返しをサポートするのは難しく、費用対効果が低いと考えています。入れ子の場合、内側の <ruby> はすべて折り返し不可としても実用上問題ないでしょうか。
>>>>> Google Chrome と Safari は <rtc> をサポートしてないため、一つの親文字に複数のルビテキストを付けるには <ruby> を入れ子にする必要があります。複数ルビと折り返しの同時サポートが必要かどうか知りたいと思います。
>>>>> 
>>>>> 
>>>>> 挙動やアルゴリズムの詳細は以下のドキュメントに記述してあります。
>>>>> https://docs.google.com/document/d/1hzvrwoE_0aw08X_CaU40zV5bXbMQjY2SHQHj3Np4sDo/edit?usp=sharing

>>>>> 
>>>>> 
>>>>> 
>>>>> On Sun, Sep 17, 2023 at 12:54 PM 木田泰夫 <kida@mac.com <mailto:kida@mac.com>> wrote:
>>>>>> JLReq TF の皆様 + Google 田村さん、
>>>>>> 
>>>>>> ルビの折り返しに必要な計算をどのように減らすことができるのか、6月の Nat さんとのミーティングに引き続いて、9/15に Google 石井さん、田村さん(ルビのコードを書いたその人)とミーティングを行いました。
>>>>>> 
>>>>>> 結論
>>>>>> ・ありがたいことに、2024年の計画において来年早々ルビの折り返しの実験をしてくださるとのこと。JLReq TF はその評価などで最大限の協力を行う。二種類のフィードバックが欲しいとのこと。一つは組版仕様の問題(e.g, 敏先生)、もう一つは Computer Science 的な考慮(e.g. Nat)
>>>>>> ・田村さん、Kent Tamura <tkent@google.com <mailto:tkent@google.com>> さんが JLReq TF に加わってくださる🎉
>>>>>> 
>>>>>> 議論のかい摘み
>>>>>> ・オーバーハングが難しいと言うより、ルビが長い場合に難しくなるのではないか?
>>>>>> ・オーバーハングは周りの文字の条件を決めずに1/3というやり方もある。と敏先生に教えてもらった
>>>>>> ・折り返す場合はいろいろな妥協、サボりをしてかまわない
>>>>>> ・分割後のルビや親文字の禁則やリガチャの影響がややこしく影響しそう。ルビの方が長いと考えて処理を始めたら、これらの影響で親文字の方が長くなったり。
>>>>>> ・rt が一つなら比較的単純? → rt があったらそれぞれ独立の ruby として考えれば?
>>>>>> ・折り返す場合の多くは行間注的なもの、すなわち範囲の後ろがいい加減になって良いものではないか?(そうでもない)
>>>>>> ・絵文字のように、ルビを世界中で流行せられないかな
>>>>>> ・結局アルゴリズムの設計をしてみないとわからないことが多い。フローチャートか、コードで示す。
>>>>>> 
>>>>>> 参考:Nat さんとのミーティングの結果の recap
>>>>>> ルビのオーバーハングを無効にすることで計算が簡略化できる。無効にすることの悪影響を軽減するため、ルビが折りたたまれる場合にのみオーバーハングを無効にする、オーバーハングを行うことの価値が大きいく、折り返すメリットが少ない短いルビは折り返しを行わない、などが考えられる。jlreq-d には簡略化する方法と同時に、より洗練された方法についても記述してほしい。
>>>>>> 
>>>>>> 木田
>>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> TAMURA, Kent 
>>>>> Software Engineer, Google 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> TAMURA, Kent 
>>>> Software Engineer, Google 
>>>> 
>>>> 
>>> 
>>> 
>>> -- 
>>> TAMURA, Kent 
>>> Software Engineer, Google 
>>> 
>>> 
>> 
> 
> 
> -- 
> TAMURA, Kent 
> Software Engineer, Google 

Received on Saturday, 8 June 2024 07:55:03 UTC