如何在XSL FO中插入水平拆分内联元素?

时间:2016-06-16 11:31:10

标签: xml layout xslt-2.0 xsl-fo

我想知道是否以及如何将水平分割(50:50)多行内联元素插入当前行(fo:block)。

这张照片应该描述我的意思: enter image description here

<fo:block>100mm<fo:inline>+4mm</fo:inline><fo:inline>-4mm</fo:inline>text...</fo:block>

正如您所看到的那样,内联数据“100mm将正常进行,然后特定数据”+ 4mm“和”-4mm“进展为行高50%并分层在另一行上。之后其余内容将加入。

这甚至可能吗? 我使用AntennaHouse Formatter进行渲染。

2 个答案:

答案 0 :(得分:2)

MathML是你的朋友:

    <fo:block>This is my data: <fo:instream-foreign-object>
            <math xmlns="http://www.w3.org/1998/Math/MathML">
                <msubsup>
                    <mi>100mm</mi>
                    <mi>+4mm</mi>
                    <mi>-4mm</mi>
                </msubsup>
            </math>
        </fo:instream-foreign-object> and here it goes on...</fo:block>

MathML rendered in AH Formatter GUI.

请参阅,例如https://www.data2type.de/en/xml-xslt-xslfo/math-ml/presentation-markup/scripts-and-limits/subscripts-superscripts/

如果您要包含大量MathML,可以将MathML的名称空间声明放在XSLT的xsl:stylesheet元素上,这样命名空间就可以放在整个样式表的范围内,并且也会结束在你的结果的fo:root上。

答案 1 :(得分:0)

Martin Honnen所描述的基本解决方案也有效:

<fo:block start-indent="0">
    This is my data: 100mm
    <fo:inline-container baseline-shift="4.25pt">
        <fo:block text-align="right" font-size="4.25pt">+5mm</fo:block>
        <fo:block text-align="right" font-size="4.25pt">-5mm</fo:block>
    </fo:inline-container> and here it goes on...
</fo:block>

这给出了所需的输出。 enter image description here

感谢您的帮助。