Я новичок в graphviz и мог бы немного помочь с улучшением макета.
Для моего класса uni мне нужно нарисовать граф для конечного автомата. Код следующий:
digraph fsm{
//rankdir=LR; //left-right orientation
node[shape=Mrecord]
S00[label="{S0|1111111111}"];
S01[label="{S1|0110010101}"];
S02[label="{S2|1000010110}"];
S03[label="{S3|1000010110}"];
S04[label="{S4|0100010101}"];
S05[label="{S5|0010110101}"];
S06[label="{S6|0011001001}"];
S07[label="{S7|0011001001}"];
S08[label="{S8|0010100101}"];
S09[label="{S9|0100100000}"];
S10[label="{S10|0100100000}"];
S11[label="{S11|0000000000}"];
S12[label="{S12|0100100000}"];
//S0
S00 -> S00[label="t<8s"];
S00 -> S01[label="t>8s"];
S00 -> S09[label="NM"];
//S1
S01 -> S01[label="t<1s"];
S01 -> S02[label="t>1s"];
S01 -> S09[label="NM"];
//S2
S02 -> S02[label="t<6s"];
S02 -> S03[label="t>6s"];
S02 -> S09[label="NM"];
//S3
S03 -> S03[label="t<7s"];
S03 -> S04[label="t>7s OR I_NS OR I_HS-F"];
S03 -> S09[label="NM"];
//S4
S04 -> S04[label="t<1s"];
S04 -> S05[label="t>1s"];
S04 -> S09[label="NM"];
//S5
S05 -> S05[label="t<1s"];
S05 -> S06[label="t>1s"];
S05 -> S09[label="NM"];
//S6
S06 -> S06[label="t<2s"];
S06 -> S07[label="t>2s"];
S06 -> S09[label="NM"];
//S7
S07 -> S07[label="t<4s"];
S07 -> S08[label="t>4s OR I_HS OR I_NS-F"];
S07 -> S09[label="NM"];
//S8
S08 -> S08[label="t<1s"];
S08 -> S01[label="t>1s"];
S08 -> S09[label="NM"];
//S9
S09 -> S09[label="t<1.5s"];
S09 -> S10[label="t>1.5s"];
//S10
S10 -> S10[label="t<0.5s"];
S10 -> S11[label="t>0.5s"];
S10 -> S12[label="t>0.5s"];
//S11
S11 -> S11[label="t<0.5s"];
S11 -> S10[label="t>0.5s"];
S11 -> S12[label="t>0.5s"];
//S12
S12 -> S12[label="t<1.5s"];
S12 -> S00[label="t>1.5s"];
}
Вывод следующий:
Так что да, это работает. Но это очень некрасиво.
Есть какие-нибудь советы, как улучшить макет?
Больше всего меня беспокоит небольшое расстояние между краями и текстом, перекрытие краев и изгибы по краям от S4-S7 до S9.
Любой вклад очень ценится.