【问题】
docbook中的图片被设置为了center对齐:
接着也就想要把图片(和其他表格等)的标题,也设置为中间对齐,这样也才方便阅读。
【解决过程】
1.找到FO中有figure的设置:
所以去试试。但是没看出怎么改。
2. 后参考:Title fonts and sizes,去试试。
然后给HTML和PDF都添加了这个配置:
<!--============================================================================
formal(figure/table/equation/example/...) setting
=============================================================================-->
<!-- http://www.sagehill.net/docbookxsl/TitleFontSizes.html#FormalTitleProperties -->
<xsl:attribute-set name="formal.title.properties"
use-attribute-sets="normal.para.spacing">
<xsl:attribute name="font-weight">bold</xsl:attribute>
<xsl:attribute name="font-size">12pt</xsl:attribute>
<xsl:attribute name="hyphenate">false</xsl:attribute>
<xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
<xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
<xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
<xsl:attribute name="text-align">center</xsl:attribute>
</xsl:attribute-set>然后生成的PDF中,图片的标题是中间对齐了:
但是HTML中的图片的标题,还是左对齐。
3.后来又把上述设置,单独给FO了,然后对于HTML,又找到了
docbook-xsl-ns-1.76.1\html\formal.xsl
中相关的设置,然后添加了对应的text-align,变成:
<!--============================================================================
formal(figure/table/equation/example/...) setting
=============================================================================-->
<xsl:template name="formal.object.heading">
<xsl:param name="object" select="."/>
<xsl:param name="title">
<xsl:apply-templates select="$object" mode="object.title.markup">
<xsl:with-param name="allow-anchors" select="1"/>
</xsl:apply-templates>
</xsl:param>
<xsl:choose>
<xsl:when test="$make.clean.html != 0">
<xsl:variable name="html.class" select="concat(local-name($object),'-title')"/>
<div class="{$html.class}">
<xsl:copy-of select="$title"/>
</div>
</xsl:when>
<xsl:otherwise>
<p class="title" text-align="center">
<b>
<xsl:copy-of select="$title"/>
</b>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>然后生成的HTML中,还是没有中间对齐效果。
然后就想到了,顺便去看看生成的源码,然后发现,HTML语法高亮的源码中:
<p class="title" align="center"><b>图 1.4. Nand Flash引脚功能说明</b></p>
text-align是没有语法高亮的,所以突然想到了,HTML中,对应的text-align的是align,所以就去改为:
<!--============================================================================
formal(figure/table/equation/example/...) setting
=============================================================================-->
<xsl:template name="formal.object.heading">
<xsl:param name="object" select="."/>
<xsl:param name="title">
<xsl:apply-templates select="$object" mode="object.title.markup">
<xsl:with-param name="allow-anchors" select="1"/>
</xsl:apply-templates>
</xsl:param>
<xsl:choose>
<xsl:when test="$make.clean.html != 0">
<xsl:variable name="html.class" select="concat(local-name($object),'-title')"/>
<div class="{$html.class}">
<xsl:copy-of select="$title"/>
</div>
</xsl:when>
<xsl:otherwise>
<p class="title" align="center">
<b>
<xsl:copy-of select="$title"/>
</b>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>然后生成的HTML中,对应的图片等的标题,就都是中间对齐显示了:
【总结】
对于想要给figure的标题设置为中间对齐的话:
(1)对于PDF:
对应的FO中的配置为:
<!--============================================================================
formal(figure/table/equation/example/...) setting
=============================================================================-->
<!-- http://www.sagehill.net/docbookxsl/TitleFontSizes.html#FormalTitleProperties -->
<xsl:attribute-set name="formal.title.properties"
use-attribute-sets="normal.para.spacing">
<xsl:attribute name="font-weight">bold</xsl:attribute>
<xsl:attribute name="font-size">12pt</xsl:attribute>
<xsl:attribute name="hyphenate">false</xsl:attribute>
<xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
<xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
<xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
<xsl:attribute name="text-align">center</xsl:attribute>
</xsl:attribute-set>其中上述除了text-align部分的配置,是在
docbook-xsl-ns-1.76.1\fo\formal.xsl
中拷贝出来的。
(2)对于HTML:
对应的html的配置是:
<!--============================================================================
formal(figure/table/equation/example/...) setting
=============================================================================-->
<xsl:template name="formal.object.heading">
<xsl:param name="object" select="."/>
<xsl:param name="title">
<xsl:apply-templates select="$object" mode="object.title.markup">
<xsl:with-param name="allow-anchors" select="1"/>
</xsl:apply-templates>
</xsl:param>
<xsl:choose>
<xsl:when test="$make.clean.html != 0">
<xsl:variable name="html.class" select="concat(local-name($object),'-title')"/>
<div class="{$html.class}">
<xsl:copy-of select="$title"/>
</div>
</xsl:when>
<xsl:otherwise>
<p class="title" align="center">
<b>
<xsl:copy-of select="$title"/>
</b>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>其中除了align="center"之外,都是从:
docbook-xsl-ns-1.76.1\html\formal.xsl
拷贝出来的。
转载请注明:在路上 » 【已解决】如何设置Docbook中的图片的标题为中间对齐


