2012-10-17 31 views
7

Tôi có mã sau và kết quả là hình ảnh bên dưới. Như bạn có thể thấy, đó là một chút đông đúc xung quanh các cạnh và các nhãn cạnh, đặc biệt là xung quanh "^ a". Cách tốt nhất để tạo ra chỉ là một chút nhiều không gian hơn, để người ta có thể thấy rõ nhãn nào thuộc về cạnh nào?Graphviz --- nhãn cạnh quá gần cạnh khác

digraph finite_state_machine {                                             
    pad=0.2; 
    { 
     rank=same; 
     node [shape = point, style = invis]; q_0; 
     node [shape = doublecircle, style = solid]; q_5; 
     node [shape = circle]; 
     q_1 [ label = <<i>q<sub>1</sub></i>> ]; 
     q_2 [ label = <<i>q<sub>2</sub></i>> ]; 
     q_3 [ label = <<i>q<sub>3</sub></i>> ]; 
     q_4 [ label = <<i>q<sub>4</sub></i>> ]; 
     q_5 [ label = <<i>q<sub>5</sub></i>> ]; 
     q_0 -> q_1; 
     q_1 -> q_2 [ label = "." ]; 
     q_1 -> q_2 [ label = <&epsilon;>, constraint=false ]; 
     q_2 -> q_1 [ label = <&epsilon;>, constraint=false ]; 
     q_2 -> q_3 [ label = <<i>a</i>> ]; 
     q_3 -> q_4 [ label = <<i>^a</i>> ]; 
     q_3 -> q_4 [ label = <&epsilon;>, constraint=false ]; 
     q_4 -> q_3 [ label = <&epsilon;>, constraint=false ]; 
     q_4 -> q_5 [ label = <<i>b</i>> ]; 
    } 
} 

enter image description here

+0

Tôi nghĩ bạn có thể thử đặt 'minlen = 5' khi bạn xác định các cạnh của mình. Ví dụ - 'q_1 -> q_2 [minlen = 5, label = <ε>, constraint = false];' – Raj

+0

Điều đó không thành công lắm. Tôi đã thử nó trên cạnh epsilon từ q4 đến q3. Các egde trở nên dài hơn, tăng khoảng cách giữa các nút, nhưng không thực sự đi bất kỳ cao hơn, do đó vấn đề vẫn còn. – oskarkv

+1

Bạn có thể sử dụng cổng để làm cong các cạnh hơn, như sau: http://stackoverflow.com/questions/18515529/graphviz-place-edge-label-on-the-other-side-ii/18698294#18698294 –

Trả lời

8

Không có attribute trong Graphviz để điều chỉnh lề/đệm xung quanh nhãn cạnh. Gần nhất, bạn có thể có được hiệu ứng bạn yêu cầu là sử dụng \n để giới thiệu các dòng trống phía trên/bên dưới nhãn của bạn để buộc không gian.

Rõ ràng, điều này sẽ không tự động chia tỷ lệ thành bất kỳ thứ gì.

Cách khác, bạn có thể thử sử dụng thuộc tính ranksep để bắt buộc trong một số không gian bổ sung.

5

Nếu xlabel không giải quyết được, thì việc bao bọc nhãn trong bảng đôi khi có thể là công việc. Ví dụ:

q_1 -> q_2 [ label = <<table cellpadding="10" border="0" cellborder="0"> 
         <tr><td>&epsilon;</td></tr> 
         </table>>, 
      constraint = false ]; 

Để thêm nhiều khoảng trống hơn một mặt khác, bạn có thể thêm ô trống. Đoạn mã sau đó nhanh chóng trở thành (nhiều hơn) không thể đọc được, nhưng bạn có thể sử dụng một tập lệnh sed đơn giản để xử lý trước tệp dấu chấm của bạn.

Các vấn đề liên quan