Thursday, December 18, 2008

写了一个parser把数据文件用tgf/tikz可视化了

数据文件大概是对一个array的描述,形式如下:
ARRAY: 16 16
TIME: 24
TIMECONSTRAINT: 20

NUMSUBPROBLEMS: 11
BEGIN SUBPROBLEM 1
NUMBLOCKS: 0
NUMNETS: 3
NET S1_R1_M1
NUMPINS: 3
PIN R1
...

大概思想是,逐行读入后根据信息打印对应的tikz代码。
其中几个重要的point是:
1. \def \xxxx {} 定义一个常量
2. \providecommand可以在不存在这个命令时定义一个命令,否则忽略代码。
这样就可以wrap tikz的代码,使得对于数据的描述更精确了。(如blockage本来只是一个rectangle,我定义成\blockage)
3. 使用fp这个宏包可以在tex文件里进行数学运算
4. 使用tikz的node library可以方便地定义node以及node之间的edge
5. tikz里面的foreach可以提供简单的循环
6. tikz里面可以定义style,形式如下:
\begin{tikzpicture}[scale=\scale,
    %inner sep=1cm*\scale*\half,
    inner sep=0,
    minimum size=1cm*\scale,
    >=latex,
    pins/.style={rectangle,draw,fill=brown,font=\scriptsize},
    arrow/.style={->,very thick},
    block/.style={gray}]
即在开始画图时的option里定义,以上例子定义了pins,arrow,block几种style

最后的一个大问题是,如何格式化生成的tex文件,感谢newsmth的maplelove,可以利用vim的非交互式功能格式化。
代码如下:
vim -c "normal gg=G" -c wq test.tex

但是发觉郁闷的是,vim对tex文件的格式化并不好。

效果图如下:
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh93LU_ql4EHZqZfwRh5ys26SLe3TvzbxxaEj0ec9dBAijxmtj3dsOI8iINcYV8Tfeu8-r9quHBVVlMfKzXFivFydGYu4UKfCnFZK7ncRCJt61kaUjUlWsfsLGj2N4o1ycpP9kZvh7DQu8/

No comments: