【问题】
docbook中使用table表格,遇到过很多次,需要给table的某个位置,添加对应的注释。
之前已经折腾过,借鉴官网的Linking from other elements,已经实现用的xreflabel的方法,效果如下:
HTML:
PDF:
其对应源码为:
<row><entry>10</entry><entry><xref linkend="channel_mode"/>(两个单声道)</entry></row> ...... </table> <tip id="channel_mode" xreflabel="双声道"> <title>双声道</title> 双声道文件由两个独立的单声道所组成。大多数解码器把双声道输出成立体声,但是实际上,不是所有的双声道都是立体声的。 </tip>
很明显,用xreflabel的效果不是很好。
一是没有对应的标号(序号,1,2,3,4等)
二是还要专门制定对应的xreflabel部分的内容
三是还要专门弄个对应的tip或者note,去存放对应table的注释
所有的一切,看起来都不够专业和不够方便。
而后来折腾docbook过程中:
又学会了co和callout,知道co可以在源码中使用,然后html中可以通过鼠标点击实现co和callout互相跳转:
【已解决】Docbook中的callout图片在programlisting中不显示 -> xsltproc不支持areaspec
但是后来发现pdf中不支持鼠标点击,然后又去花时间解决了该问题:
【全部解决】Docbook生成的PDF中callout不能点击跳转(而HTML中却可以)
然后现在遇到了一个,之前就遇到的问题:
在给一个table的不同位置添加注释,希望可以找到更好的方法,那就好了,就不用再用那个很傻的xreflabel的方法了。
【解决过程】
1.突然想起来,之前好像看到某处说是co可以放在任何位置的,所以就去试试,在table中的相应位置,添加co:
<table><title>xxx</title> <tgroup cols="6"> ... <thead> <row>...<entry>控制字符<co id="co.ctrl_char" linkends="co.note.ctrl_char" /></entry>...</row> </thead> <tbody> ... </tbody> </tgroup> </table>
然后再table之外,加上一个calloutlist:
<calloutlist> <callout id="co.note.ctrl_char" arearefs="co.ctrl_char"> <para>即在C语言中或其他地方如何表示。</para> </callout> </calloutlist>
然后编译出来的html和pdf中,就都实现了一直所梦寐以求的效果了:
HTML:
PDF:
即,table中某处添加了注释,而且是对应的标号的形式,该标号还可以点击,可以跳转到对应的注释的部分,
更加不错的是,注释部分的标号,也是可以点击以跳转,回到table中相应位置的。
以非常好的方式,实现给table中添加注释的功能。
【总结】
想要更好的方法,给table添加注释的话,可以用co,参考代码如下:
<table><title>xxx</title> <tgroup cols="6"> ... <thead> <row>...<entry>控制字符<co id="co.ctrl_char" linkends="co.note.ctrl_char" /></entry>...</row> </thead> <tbody> ... </tbody> </tgroup> </table> <calloutlist> <callout id="co.note.ctrl_char" arearefs="co.ctrl_char"> <para>即在C语言中或其他地方如何表示。</para> </callout> </calloutlist>
转载请注明:在路上 » 【已解决】找到更好的方法,给Docbook中的表格(table)添加注释(note) -> 用co(和calloutlist,callout)