ルビのようだけどルビではないものたち

![表示例](http://densyodamasii.com/wp-content/uploads/2020/11/column82_01.png)
　某所の会議でルビ／ふりがなに関する話題になった時に、ルビ的な組版処理をしているけれども少なくとも狭義の意味ではルビとは言いがたい組版要素の話が出ました。紙の本のデータのEPUB化の際にもしばしば取り扱いを悩む要素を多く含んでいますので、ちょっとまとめて書いておきたいなと思います。なお、InDesignやIllustratorなどのDTPアプリケーションでは<strong>「タブ機能を使った複数行テキストの位置合わせ」</strong>や、<strong>「アンカーボックスを使った要素の配置」</strong>に相当する話になるかと思います。JLREQ的には<strong><a href="https://www.w3.org/TR/jlreq/#tab_setting">「3.6 Tab Setting タブ処理」</a></strong>に関連します。そのつもりで読んでください。

<div style="padding-left:1em" class="clear">
<h3 style="border-bottom: medium solid gray">さまざまな例</h3>
　例えば以下のようなものたちです。

<ul>
	<li>語学学習系コンテンツでよく出てくる、例文に並行して記述される和訳、発音記号、品詞など</li>
	<li>DTPデータ内ではルビの機能を使用して行間に挿入されている注の合印</li>
	<li>漢文訓読の返り点や送り仮名など</li>
</ul>

　注の合印や漢文の返り点などは今は上付き・下付きの指定でコーディングされるケースが多いかと思いますが、本来的には本文テキストの横に並行して置いておきたいという要望が強いかと思います。実際<strong>注の合印などはInDesignでルビの機能を使って配置している例は良く目にします</strong>ので、ずっと組版的にはニーズはあったと見るべきでしょう。<br />


　また、円城塔氏が<strong><a href="https://www.sinkan.jp/pages/interview/interview102/index.html" rel="noopener" target="_blank">「文字渦」</a></strong>でやったような、ルビの体裁で本文とは違う内容のテキストをエンドレスで書くような表現も狭義での「ルビ」とは言いがたいでしょう。<br />

　こういった組版要素はいずれも本文と並行して記述され、またリフロー化の際には<strong>行末で本文と並んで折り返される挙動になることが表組みとは異なります</strong>。単純なHTMLのテーブル要素ではカバーできないのです。<br />

　ここでは仮にこういうものたちを<strong>「並行注」</strong>と呼称することにします。
</div>

<div style="padding-left:1em" class="clear">
<h3 style="border-bottom: medium solid gray">無理矢理組版再現できなくはなさそうだけど…</h3>
　上記の例のうち、おそらく一番複雑なものになりそうな語学学習系コンテンツをコード化できそうかを考えてみます。
 
<pre class="lang:xhtml decode:true " >&lt;div style="display:inline-block;width:11em;"&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;Humpty Dumpty &lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;ハンプティ・ダンプティ&lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;名詞&lt;/span&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;width:4em;"&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;sat &lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;すわった&lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;動詞&lt;/span&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;width:3em;"&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;on &lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;〜に&lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;前置詞&lt;/span&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;width:3em;"&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;a wall&lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;塀&lt;/span&gt;
  &lt;span style="display:inline-block;width:100%;"&gt;名詞&lt;/span&gt;
&lt;/div&gt;</pre> 

　以上のような感じで、一応ブラウザレベルでの動作は確認できました（図ではわかりやすくするために各ブロックに背景色を指定しています）。きちんと行末でブロックごと折り返されています。<br />

　ただし、1点解決不可能な問題があります。<strong>「各ブロックの幅を明示的に指定する必要がある」</strong>点です。表示フォントをコンテンツ作成側が強制できるような環境であれば問題にはならないですが、そうでない場合に、例えば<strong>「ユーザーがプロポーショナル幅のフォントを表示フォントに指定した」</strong>ような場合に各ブロック間に不規則な幅のスペースが空くことになりそうです。<br />

　また、コードも正直相当煩雑になりますし、さらにdisplay:inline-blockの入れ子はかなりトリッキーにも思えますので、ビューアによっては表示の問題が出そうです。本によってはこういうものはかなり頻出しますので、可能ならばもっと簡単な記法で書きたいところです。
</div>

<div style="padding-left:1em" class="clear">
<h3 style="border-bottom: medium solid gray">ルビの記法の延長で書けるようになれば嬉しい</h3>
　より簡単な記法の候補として思いつくのが、「ルビ」のそれです。ルビはまだCSSの規格としては審議中の段階ですが、肩付きルビや両側ルビのような複雑な指定が将来使えるようになるかどうかはともかく、基本的なルビはもう現在使用して問題ない状況なのでその延長は考えてもよいかと思います。例えば、以下のような形はどうでしょうか？
 
<pre class="lang:xhtml decode:true " >&lt;span class="parallelnote"&gt;&lt;span class="main"&gt;Humpty Dumpty&lt;/span&gt;&lt;span class="note1"&gt;ハンプティ・ダンプティ&lt;/span&gt;&lt;span class="note2"&gt;名詞&lt;/span&gt;&lt;/span&gt;
&lt;span class="parallelnote"&gt;&lt;span class="main"&gt;sat &lt;/span&gt;&lt;span class="note1"&gt;すわった&lt;/span&gt;&lt;span class="note2"&gt;動詞&lt;/span&gt;&lt;/span&gt;
&lt;span class="parallelnote"&gt;&lt;span class="main"&gt;on &lt;/span&gt;&lt;span class="note1"&gt;〜に&lt;/span&gt;&lt;span class="note2"&gt;前置詞&lt;/span&gt;&lt;/span&gt;
&lt;span class="parallelnote"&gt;&lt;span class="main"&gt;a wall&lt;/span&gt;&lt;span class="note1"&gt;塀&lt;/span&gt;&lt;span class="note2"&gt;名詞&lt;/span&gt;&lt;/span&gt;</pre> 

　当然まだ専用タグなどはなく、全部spanタグにclass名で書いたので複雑に見えますが、要するに<strong>rubyタグ内のrt要素に当たるものをrb要素の後に複数個連続で並べただけ</strong>なので構造としてはシンプルかと思います。このような記法で書いてきちんと「並行注」的な挙動が得られるようになるなら嬉しいところです。
</div>