【问题】
docbook中使用table表格,遇到过很多次,需要给table的某个位置,添加对应的注释。
之前已经折腾过,借鉴官网的Linking from other elements,已经实现用的xreflabel的方法,效果如下:
HTML:
PDF:
其对应源码为:
1 2 3 4 5 6 7 | < 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:
1 2 3 4 5 6 7 8 9 10 11 12 | < 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:
1 2 3 4 5 | < 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,参考代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < 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)