我在Ubuntu 13.04上使用DockBook 4.5和RenderX's XEP。 DocBook翻译由Ubuntu提供。
我将图像浮动到右侧(它使用XEP工作,但没有FOP),我需要为图像添加边距。看起来DocBook没有使用边距,因此文本被卡在图像中。
DocBook在Figure floats上有一个页面。不幸的是,它对我没用,并且HTML示例不适用。
DocBook还有一个FO Parameter Reference页面,但它没有列出包含所有数字,浮点数和边距的属性。
我尝试将以下替换添加到我的自定义book-style.xsl
(之前为0):
<xsl:attribute name="margin-left">6pt</xsl:attribute>
<xsl:attribute name="margin-right">6pt</xsl:attribute>
但它导致了一些错误:
Document book.xml does not validate
compilation error: file book-style.xsl line 16 element attribute
element attribute only allowed within a template, variable or param
compilation error: file book-style.xsl line 17 element attribute
element attribute only allowed within a template, variable or param
...
如何为图形或图像指定浮动边距?
答案 0 :(得分:1)
正如OP的评论中所提到的那样,只需使用以下内容就足以在向右或向左浮动的数字上引入边距:
<xsl:attribute-set name="figure.properties">
<xsl:attribute name="margin-left">6pt</xsl:attribute>
<xsl:attribute name="margin-right">6pt</xsl:attribute>
</xsl:attribute-set>
我认为我原来的答案(下面)不必要地复杂化了。
名为floater
的模板(请参阅http://www.sagehill.net/docbookxsl/SideFloats.html#CustomSideFloat)输出fo:float
格式化对象。此模板采用start.indent
和end.indent
参数,默认值为0.当figure
模板调用floater
时,遗憾的是这些默认值没有更改,导致您看到的问题
您只需在匹配figure
的模板中使用一个小修补程序即可使其正常工作(请参阅下面代码中的注释)。因此,请将以下内容添加到自定义层:
<xsl:template match="figure">
<xsl:variable name="param.placement"
select="substring-after(normalize-space($formal.title.placement),
concat(local-name(.), ' '))"/>
<xsl:variable name="placement">
<xsl:choose>
<xsl:when test="contains($param.placement, ' ')">
<xsl:value-of select="substring-before($param.placement, ' ')"/>
</xsl:when>
<xsl:when test="$param.placement = ''">before</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$param.placement"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="figure">
<xsl:choose>
<xsl:when test="@pgwide = '1'">
<fo:block xsl:use-attribute-sets="pgwide.properties">
<xsl:call-template name="formal.object">
<xsl:with-param name="placement" select="$placement"/>
</xsl:call-template>
</fo:block>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="formal.object">
<xsl:with-param name="placement" select="$placement"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="floatstyle">
<xsl:call-template name="floatstyle"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$floatstyle != ''">
<xsl:call-template name="floater">
<xsl:with-param name="position" select="$floatstyle"/>
<xsl:with-param name="content" select="$figure"/>
<!-- The following two lines added to introduce a 10pt 'margin' for floats (right or left) -->
<xsl:with-param name="start.indent">10pt</xsl:with-param>
<xsl:with-param name="end.indent">10pt</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$figure"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>