「Graphviz」- 绘制表格 @20210331

问题描述

我们经常需要绘制网络报文、内存数据结构等等的示意图。这些示意图,多半是种“表格“结构:
pasted_image.png

我们需要使用标记语言绘制这种表格(比如,在 Zim 中(总之我们有这种需求))。

该笔记将记录:如何使用 Graphviz 绘制表格,以及整理相关文档。

解决方法

我们这里以绘制在 x86 Protected Mode 下的 GDT 段描述符为例。

如下为绘制”GDT 段描述符表格“的 DOT 代码:

digraph G {

    graph [pad="0.5", nodesep="0.5", ranksep="2", fontsize=10];
    node [shape=plain, fontsize=10,
        fontname="Microsoft YaHei"];

    Foo [label=<
        <table border="0" cellborder="1" cellspacing="0" cellpadding="2">
            <tr>
                <td colspan="0" width="10" >00</td>
                <td colspan="0">01</td>
                <td colspan="0">02</td>
                <td colspan="0">03</td>
                <td colspan="0">04</td>
                <td colspan="0">05</td>
                <td colspan="0">06</td>
                <td colspan="0">07</td>
                <td colspan="0">08</td>
                <td colspan="0">09</td>
                <td colspan="0">10</td>
                <td colspan="0">11</td>
                <td colspan="0">12</td>
                <td colspan="0">13</td>
                <td colspan="0">14</td>
                <td colspan="0">15</td>
                <td colspan="0">16</td>
                <td colspan="0">17</td>
                <td colspan="0">18</td>
                <td colspan="0">19</td>
                <td colspan="0">20</td>
                <td colspan="0">21</td>
                <td colspan="0">22</td>
                <td colspan="0">23</td>
                <td colspan="0">24</td>
                <td colspan="0">25</td>
                <td colspan="0">26</td>
                <td colspan="0">27</td>
                <td colspan="0">28</td>
                <td colspan="0">29</td>
                <td colspan="0">30</td>
                <td colspan="0">31</td>
            </tr>
            <tr>
                <td colspan="8">Base address (31-24)</td>
                <td colspan="1">G</td>
                <td colspan="1">D/B</td>
                <td colspan="1">L</td>
                <td colspan="1">A</td>
                <td colspan="4">Segment Limit (19-16)</td>
                <td colspan="1">P</td>
                <td colspan="2">DPL</td>
                <td colspan="1">S</td>
                <td colspan="4">Type</td>
                <td colspan="8">Base Address (23-16)</td>
            </tr>
            <tr>
                <td port="2" colspan="16">Base Address (15-0)</td>
                <td port="2" colspan="16">Segment Limit(15-0)</td>
            </tr>
        </table>
    >];
}

如下是使用该 DOT 代码生成的图片:
diagram.png

已知问题

我们发现:1)我们无法固定格子(Cell)的大小。当文本过长时,格子会变宽(失去比例);2)编写 HTML 也算不上便捷;

针对该问题(绘制这种“字节插图”),我们可以使用 bytefield 处理

相关链接

Graphviz - label attribute
Graphviz (dot) examples
Graphviz: HTML like labels

参考文献

Creating Table Relationship Diagrams with GraphViz
Graphviz (dot) examples

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值