最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】找到更好的方法,给Docbook中的表格(table)添加注释(note) -> 用co(和calloutlist,callout)

Docbook crifan 2328浏览 0评论

【问题】

docbook中使用table表格,遇到过很多次,需要给table的某个位置,添加对应的注释。

之前已经折腾过,借鉴官网的Linking from other elements,已经实现用的xreflabel的方法,效果如下:

HTML:

之前用xreflabel给table添加注释 html中的效果

PDF:

之前用xreflabel给table添加注释 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:

html中实现了给table中添加注释

PDF:

pdf中实现了给table添加注释

即,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)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.172 seconds, using 22.15MB memory