使用graphiviz软件包

从man.chinaunix.net上《DEBIAN学习笔记》关于apt-rdepends工具与springgraph组合生成软件包依赖关系图入手,了解到dotty图形格式,继而知道graphviz软件包,其中包含dot/circo/fdp等filter。而springgraph似乎用一个很慢的递归算法,得到的图形反而不好看,还不如dot的结果舒服。

首先,apt-cache的dotty选项足以取代apt-rdepends的作用,而且效果更好——图形符号更丰富一点。

知道dotty工具可以编辑dotty格式的图形文件。可惜,我的系统上,说找不到字体:
wxq@wxq-desktop:~/download/dependencies$ dotty
Warning: Unable to load any usable ISO8859 font
Error: Aborting: no font found

于是,通过graphviz站的FAQ,知道对fontconfig架构的依赖。于是看了关于font-config的许多man,还扩充了原来的testLocaleUTF8.cpp:
    void showByFontConfig(const FcChar8 *src, int len)
    {
        int nchar, wchar;
        int ret = FcUtf8Len(src, len, &nchar, &wchar);
        fprintf(stdout, "\nA %sformed UTF-8 string, "
                "%d characters total, maximum char width %d",
                ret?"well":"ill",nchar, wchar);
    }
对fontconfig的架构有所了解,却没有解决dotty为什么找不到字体的问题。昨天解决了ghostscript系统的字体问题,有了一点信心,今天又被打击……

好在通过 durak.org的指点:

Q. How can I generate graph layouts in PDF?

First, create Postscript output, then use an external converter from Postscript to PDF. For example,
dot -Tps | epsf2pdf -o file.pdf
Note that URL tags are respected, to allow clickable PDF objects.

If your intention is to use the figure as PDF in some document preparation system, such as pdflatex, it is very important to use -Tps2 rather than -Tps. In general, if you really want PDF output, that is, you would like to have a -Tpdf flag, use -Tps2 before converting to PDF.

于是知道可以绕过dotty去,直接生成图片:
apt-cache dotty libtiff4-dev | fd
p -Tpng > libtiff4-dev-fdp.png
使用graphiviz软件包 - improgrammer - wanxiangqian的个人主页

这已经很满意了。要不是掌握这些支撑工具,对这个unix平台真的还没有入门呢!

顺便写了一点perl代码:
#!/usr/bin/perl
$pkgname = @ARGV[0];
printf( "pkgname=${pkgname}\n" );
$ret = `apt-cache dotty ${pkgname} | dot -Tps > ${pkgname}-dep.ps`;

可惜,graphviz系统经常死机:比如处理libgd2-dev包的时候就总是死机:
apt-cache dotty libgd2-dev | dot -Tpng > libgd2-dev-dot.png
其中中间的dot文件可以正常生成:

digraph packages {
concentrate=true;
size="30,40";
"libgd2-dev" -> "libgd2-xpm-dev";
"libgd2-dev" -> "libgd2-noxpm-dev";
"libgd2-dev" -> "libgd-dev"[color=springgreen];
"libgd2-dev" -> "libgd1g-dev"[color=springgreen];
"libgd2-dev" -> "libgd1-altdev"[color=springgreen];
"libgd-dev" -> "libgd-noxpm-dev";
"libgd-dev" -> "libgd-xpm-dev";
"libgd2-noxpm-dev" -> "libgd2-noxpm";
"libgd2-noxpm-dev" -> "libc6-dev";
"libgd2-noxpm-dev" -> "libfreetype6-dev";
"libgd2-noxpm-dev" -> "libjpeg62-dev";
"libgd2-noxpm-dev" -> "libpng12-0-dev";
"libgd2-noxpm-dev" -> "libx11-dev";
"libgd2-noxpm-dev" -> "xlibs-dev";
"libgd2-noxpm-dev" -> "libxpm-dev";
"libgd2-noxpm-dev" -> "xlibs-dev";
"libgd2-noxpm-dev" -> "zlib1g-dev";
"libgd2-noxpm-dev" -> "libgd-noxpm-dev"[color=springgreen];
"libgd2-noxpm-dev" -> "libgd-xpm-dev"[color=springgreen];
……
"mawk" [shape=box];
"lsb-cxx" [shape=box];
"libldap2" [shape=box];
"gtk2-engines-lighthouseblue" [shape=diamond];
"libpam0" [shape=hexagon];
"libgtk1.3-common" [shape=hexagon];
"gs-pdfencrypt" [shape=triangle];
"libdigest-md5-perl" [shape=triangle];
"xditview" [shape=box];
"libxkbfile-dev" [color=orange,shape=box];
"xutils-dev" [shape=box];
"apsfilter" [color=orange,shape=box];
"libungif4g" [shape=box];
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值