43859
文字のルビを付けたいと考えています。  
XSL-FOではどのような記述になりますか？

  * ルビを付ける文字について何か留意点があれば併せて教えてください。
CC BY-SA 4.0
2018-05-07T07:34:00.183
43834
2018-05-08T04:26:02.877
25399
question
xsl xsl-fo
XSL-FOでルビを付ける
XSL 1.1にはルビを表すオブジェクトはありませんので、自力でつけるか、FOプロセッサの拡張機能を使用することになります．

以下は、fo:block中にfo:inline-
containerを配置し、その中にルビに対応したfo:blockと本文に対応したfo:blockを並べて表現した例です．

[![モノルビの例](https://i.stack.imgur.com/2JbaJ.png)](https://i.stack.imgur.com/2JbaJ.png)

該当部分のFOは次のようになります．ルビのfo:blockのパディングをマイナス値にして位置を調整しています．

```

    <fo:block space-after="1mm">■ モノルビの例</fo:block>
    <fo:block line-height="1.6" line-stacking-strategy="max-height">９条
        <fo:inline-container alignment-baseline="text-after-edge" start-indent="0mm" end-indent="0mm" text-indent="0mm">
            <fo:block
                font-size="0.5em" line-height="1.0em" padding-before="-1.0em" text-align-last="center">
                <fo:inline>かい</fo:inline>
            </fo:block>
            <fo:block line-height="1em"
                text-align-last="center">壊</fo:block>
        </fo:inline-container><fo:inline-container alignment-baseline="text-after-edge" start-indent="0mm" end-indent="0mm" text-indent="0mm">
            <fo:block
                font-size="0.5em" line-height="1.0em" padding-before="-1.0em" text-align-last="center">
                <fo:inline>けん</fo:inline>
            </fo:block>
            <fo:block line-height="1em"
                text-align-last="center">憲</fo:block>
        </fo:inline-container>
    </fo:block>
    
```

代表的なFOプロセッサのAH Formatterの拡張機能である`<axf:ruby>`を使用すれば、もっと簡単にルビを生成できます．

```

    <fo:block space-after="1mm">■ モノルビの例（AH Formatter拡張機能）</fo:block>
    <fo:block line-height="1.6" line-stacking-strategy="max-height">９条
        <axf:ruby>
            <axf:ruby-base>壊</axf:ruby-base>
            <axf:ruby-text>かい</axf:ruby-text>
        </axf:ruby><axf:ruby>
            <axf:ruby-base>憲</axf:ruby-base>
            <axf:ruby-text>けん</axf:ruby-text>
        </axf:ruby>
    </fo:block>
    
```

AH Formatterの拡張機能を使用した組版例  
[![AH
Formatterの拡張機能を使用した例](https://i.stack.imgur.com/Oqd1S.png)](https://i.stack.imgur.com/Oqd1S.png)

ルビにはその他にもグループルビなどの種類があります．以下のW3C技術ノートを参考にして実装方法を考えるのも良い勉強になると思います．

日本語組版処理の要件（日本語版）  
3.3 ルビと圏点処理  
<https://www.w3.org/TR/jlreq/ja/#ruby_and_emphasis_dots>

※ なお最初のサンプルはオープンソースのFOPでも試しましたが、fo:inline-
containerの処理に不具合があるらしく、正常な組版結果を得ることができませんでした．
CC BY-SA 4.0
2018-05-08T04:26:02.877
43859
2018-05-08T04:26:02.877
9503
43834
answer