【问题】
Docbook中,之前已经可以实现等的居中对齐了,以及也实现了formal(figure,table,equation等)的标题的中间对齐:
现在对于其中输出的上述的formal的主题内容,即表格table,equation等内容,也想要让其居中对齐,这样才和标题统一。而这部分的需求,对于输出的PDF中,本身由于是自动填充了pdf中的页面的宽度,所以是已经实现了,不需要额外设置,而HTML中,由于默认是左对齐的,所以需要额外设置。
目前的效果是这样的:
希望将HTML中的表格等formal的主体内容,也都是设置为中间对齐。
【解决过程】
1.刚开始不知道如何去设置。
后来想到了,对于原先普通的word文档,其可以另存为HTML网页的,然后可以先去将其中的表格部分设置为中间对齐,然后参考其源码,看看其源码是如何写的,然后再想办法把对应的配置参数,加入到HTML的xsl配置文件中去。
然后就去找了个之前的word,设置某表格为中间对齐,然后另存为HTMl,然后得到其相应源码为:
可以看到,对于表格主体内容对齐的话,是对应的div中添加align为center,即可。
2.然后就去找HTML的xsl配置,哪里对应着这个表格主体内容的div的。
尝试了几次后,得到了正确的位置,即
docbook-xsl-ns-1.76.1\html\formal.xsl
中formal.object的配置部分中的class="{$class}-contents"的div,然后添加了对应align为center:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | <!--============================================================================ formal(figure/table/equation/example/...) setting =============================================================================--> <!-- follow are copied from docbook-xsl-ns-1.76.1\html\formal.xsl --> < 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"> --> < p class = "title" align = "center" > <!-- add align to center of header for table/figure/... --> < b > < xsl:copy-of select = "$title" /> </ b > </ p > </ xsl:otherwise > </ xsl:choose > </ xsl:template > < xsl:template name = "formal.object" > < xsl:param name = "placement" select = "'before'" /> < xsl:param name = "class" > < xsl:apply-templates select = "." mode = "class.value" /> </ xsl:param > < xsl:call-template name = "id.warning" /> < xsl:variable name = "content" > < div class = "{$class}" > < xsl:call-template name = "anchor" > < xsl:with-param name = "conditional" select = "0" /> </ xsl:call-template > < xsl:choose > < xsl:when test = "$placement = 'before'" > < xsl:call-template name = "formal.object.heading" /> <!-- <div class="{$class}-contents"> --> < div class = "{$class}-contents" align = "center" > <!-- add align to center for body of table/figure/.. --> < xsl:apply-templates /> </ div > <!-- HACK: This doesn't belong inside formal.object; it should be done by the table template, but I want the link to be inside the DIV, so... --> < xsl:if test = "local-name(.) = 'table'" > < xsl:call-template name = "table.longdesc" /> </ xsl:if > < xsl:if test = "$spacing.paras != 0" >< p /></ xsl:if > </ xsl:when > < xsl:otherwise > < xsl:if test = "$spacing.paras != 0" >< p /></ xsl:if > < div class = "{$class}-contents" >< xsl:apply-templates /></ div > <!-- HACK: This doesn't belong inside formal.object; it should be done by the table template, but I want the link to be inside the DIV, so... --> < xsl:if test = "local-name(.) = 'table'" > < xsl:call-template name = "table.longdesc" /> </ xsl:if > < xsl:call-template name = "formal.object.heading" /> </ xsl:otherwise > </ xsl:choose > </ div > < xsl:if test = "not($formal.object.break.after = '0')" > < br class = "{$class}-break" /> </ xsl:if > </ 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 = "class" >< xsl:value-of select = "$class" />-float</ xsl:with-param > < xsl:with-param name = "floatstyle" select = "$floatstyle" /> < xsl:with-param name = "content" select = "$content" /> </ xsl:call-template > </ xsl:when > < xsl:otherwise > < xsl:copy-of select = "$content" /> </ xsl:otherwise > </ xsl:choose > </ xsl:template > |
得到了想要的效果,即HTML中表格等主体内容,也是中间对齐了:
【总结】
想要设置HTML中formal的(除了标题title外的)主体内容也是中间对齐的话,是要找到HTML的xsl中关于formal的设置,是在docbook-xsl-ns-1.76.1\html\formal.xsl中的
<xsl:template name="formal.object">
然后把对应的:
<div class="{$class}-contents">
改为:
<div class="{$class}-contents" align="center" >
即可实现HTML中输出的formal(表格,图片等)的主体内容部分,都是中间对齐了。
转载请注明:在路上 » 【已解决】Docbook中输出HTML的表格设置为居中对齐