【背景】
想要在Docbook中实现word中的缩略词的效果:
【解决过程】
1.之前是记得docbook中有对应的关键词的,后来找到了,是acronym,但是去试了试:
<acronym>NVM</acronym>
结果,生成的HTML和PDF中,均没有生成我所期望的那个缩略词列表。
2.后来也找到了另外一个相关的此glossterm,后参考glossary,添加了如下代码:
<glossary><title>Example Glossary</title> <para>This is not a real glossary, it's just an example.</para> <glossdiv><title>E</title> <glossentry id="xml"><glossterm>Extensible Markup Language</glossterm> <acronym>XML</acronym> <glossdef> <para>Some reasonable definition here.</para> <glossseealso otherterm="sgml">SGML</glossseealso> </glossdef> </glossentry> </glossdiv> <glossdiv><title>N</title> <glossentry id="nvm"><glossterm>Non-Volatile Memory</glossterm> <acronym>NVM</acronym> <glossdef> <para>Non-Volatile Memory</para> </glossdef> </glossentry> </glossdiv> <glossdiv><title>S</title> <glossentry><glossterm>SGML</glossterm> <glosssee otherterm="sgml"/> </glossentry> <glossentry id="sgml"><glossterm>Standard Generalized Markup Language</glossterm><acronym>SGML</acronym> <abbrev>ISO 8879:1986</abbrev> <glossdef> <para>Some reasonable definition here.</para> <glossseealso otherterm="xml">XML</glossseealso> </glossdef> </glossentry> </glossdiv> </glossary>
效果如下:
PDF中的效果:
HTML中的效果:
3.后来又参考:glosslist,添加如下代码:
<glosslist> <glossentry><glossterm>C</glossterm> <glossdef> <para> A procedural programming language invented by K&R. </para> </glossdef> </glossentry> <glossentry><glossterm>NVM</glossterm> <glossdef> <para>Non-Volatile Memory</para> </glossdef> </glossentry> <glossentry><glossterm>Pascal</glossterm> <glossdef> <para> A procedural programming language invented by Niklaus Wirth. </para> </glossdef> </glossentry> </glosslist>
注意不能直接放在book的下面,否会出现错误:
javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: "{http://www.w3.org/1999/XSL/Format}list-block" is not a valid child of "fo:root"! (See position 75:14203) at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:302) at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:130) at org.apache.fop.cli.Main.startFOP(Main.java:174) at org.apache.fop.cli.Main.main(Main.java:205) Caused by: javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: "{http://www.w3.org/1999/XSL/Format}list-block" is not a valid child of "fo:root"! (See position 75:14203) at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:501) at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:299) ... 3 more Caused by: org.apache.fop.fo.ValidationException: "{http://www.w3.org/1999/XSL/Format}list-block" is not a valid child of "fo:root"! (See position 75:14203)
意思是,不能将glosslist直接放到root标签,此处为book,所以就去改变代码位置,将其放到我的第一章的内容中,就可以了,效果如下:
PDF中:
HTML中:
貌似pdf中的列表,基本接近所需要的效果了,就是少了表格。
4.后来参考了这个:
Subject: RE: [docbook-apps] acronyms, abbreviations, definitions
知道了glossterm.auto.link和glossentry.show.acronym set,然后就去先尝试关于缩略词自动链接的功能。
然后参考这里:
然后去添加如下代码:
<glosslist> <glossentry><glossterm>C</glossterm> <glossdef> <para> A procedural programming language invented by K&R. </para> </glossdef> </glossentry> <glossentry id="NVM"><glossterm>NVM</glossterm> <glossdef> <para>Non-Volatile Memory</para> </glossdef> </glossentry> <glossentry><glossterm>Pascal</glossterm> <glossdef> <para> A procedural programming language invented by Niklaus Wirth. </para> </glossdef> </glossentry> </glosslist> <sect1 xml:id="related_term"><title>一些相关的名词的解释</title> <sect2><title>Non-Volatile Memory非易失性存储器</title> <para><glossterm linkend="NVM">NVM</glossterm>,即NV (RAM)Memory,断电数据也不会丢失的存储器,比如Nand Flash,Nor Flash,硬盘等等。于此相对的是,断电了数据会丢失的存储器,比如DRAM等。</para> </sect2>
对应的效果如下:
PDF中:
HTML中:
然后继续折腾,自动链接的生成,代码换为:
<glosslist> <glossentry><glossterm>C</glossterm> <glossdef> <para> A procedural programming language invented by K&R. </para> </glossdef> </glossentry> <glossentry><glossterm>NVM</glossterm> <glossdef> <para>Non-Volatile Memory</para> </glossdef> </glossentry> <glossentry><glossterm>Pascal</glossterm> <glossdef> <para> A procedural programming language invented by Niklaus Wirth. </para> </glossdef> </glossentry> </glosslist> <sect1 xml:id="related_term"><title>一些相关的名词的解释</title> <sect2><title>Non-Volatile Memory非易失性存储器</title> <para><glossterm baseform="NVM">NVM</glossterm>,即NV (RAM)Memory,断电数据也不会丢失的存储器,比如Nand Flash,Nor Flash,硬盘等等。于此相对的是,断电了数据会丢失的存储器,比如DRAM等。</para> </sect2>
然后去添加对应的配置到xsl文件中:
<xsl:param name="glossterm.auto.link">1</xsl:param>
然后生成的效果,的确和上面是一样的,即实现了glossary的自动链接。
5.继续折腾给缩略图添加表格,以及希望弄成,将缩略图单独生成一页,就像插图清单等那样的效果:
希望弄个“缩略词”之类的一个表格,单独放在一页中。
6.关于想把缩略词部分,放到正文之前,目录,列表清单等之后的位置,开始尝试去找对应的xsl配置文件,倒是找到了相关配置显示部分,是在自己的,关于titlepage的配置的titlepage.templates_crl.xml,其是用来生成对应的titlepage.templates_crl.xsl的,而之前就折腾过其中的book的titlepage中各个部分,比如revhistory等。
而现在也发现了其中也有glossary的配置:
<t:titlepage t:element="glossary" t:wrapper="fo:block"> <t:titlepage-content t:side="recto"> <title t:force="1" t:named-template="component.title" param:node="ancestor-or-self::glossary[1]" margin-left="{$title.margin.left}" font-size="&hsize5;" font-family="{$title.fontset}" font-weight="bold"/> <subtitle font-family="{$title.fontset}"/> </t:titlepage-content> ... </t:titlepage>
但是后来想明白了,原来其只是配置,glossary页面的显示的效果的,而不是glossary页面本身所放的位置,所以不是我所想要的。
后来又去找,找到了相关的docbook-xsl-ns-1.76.1\fo下面的titlepage.xsl,titlepage.templates.xsl,glossary.xsl等,但好像都只是格式化显示效果的,而不是配置glossary页面所处的位置的。
而且,即使对于显示的效果,由于那一堆代码太复杂,也实在不知道如何改。
后来,继续折腾glossary,把glossary部分的源码,从book的最后,移到了引用其他chapter之前:
<?xml version='1.0' encoding="utf-8"?> ... <bookinfo> <title>【详解】如何编写Linux下Nand Flash驱动</title> ...... </bookinfo> <glossary><title>缩略词</title> <para>常用缩略词如下:</para> <glossdiv><title>B</title> ... </glossdiv> ...... </glossary> <xi:include href="preface.xml"/> <xi:include href="ch01_before_driver.xml"/> <xi:include href="reference.xml"/> </book>
然后就可以达到我所需要的,将缩略词部分,放到正文之前的效果了:
最后,基本实现了所需要的效果:
首先能让缩略词用单独一页显示出来
其次是缩略图中的每一项,要方便看,此处是虽然没有实现之前word中的表格形式,但是此处的列表,也算比较清晰可读,也更专业,所以还是可以接受的。
【总结】
1. 想要给docbook中添加对应的缩略词,其相关有很多个关键字,但是只要就是两大类:
glossary和glosslist,(链接中包含具体示例)
此处选择看起来更加专业点的glossary。
2.如果想要缩略词这个页面,放在正文之前,目录(即各种表格,图片等索引)之后,那么只需要把glossary部分的源码内容,移至相应的位置即可。此处即把glossary部分源码放到bookinfo之后,XInclude其他各个章节之前,就可以了。
转载请注明:在路上 » 【已解决】给Docbook中添加缩略词 + 自动链接到缩略词表项 + 将缩略词单独放置一页,且位于目录之后,正文之前