tikz và bản vẽ các nút

Sep 27 2020

Tôi muốn mở rộng ví dụ "các nút" này bằng cách thêm 6 nút nữa nhưng tôi không thể thấy logic đằng sau mã mẫu này. Tôi không thể hiểu các quan hệ của (a), (b) và (c) và cách chúng thực sự được sử dụng. Ai đó có thể giải thích điều này với tôi? Đây là liên kết đầu ra:https://texample.net/tikz/examples/nav1d/

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\pagestyle{empty}
%
\tikzstyle{int}=[draw, fill=blue!20, minimum size=2em]
\tikzstyle{init} = [pin edge={to-,thin,black}]

\begin{tikzpicture}[node distance=2.5cm,auto,>=latex']
    \node [int, pin={[init]above:$v_0$}] (a) {$\frac{1}{s}$};
    \node (b) [left of=a,node distance=2cm, coordinate] {a};
    \node [int, pin={[init]above:$p_0$}] (c) [right of=a] {$\frac{1}{s}$};
    \node [coordinate] (end) [right of=c, node distance=2cm]{};
    \path[->] (b) edge node {$a$} (a);
    \path[->] (a) edge node {$v$} (c);
    \draw[->] (c) edge node {$p$} (end) ;
\end{tikzpicture}

\end{document}

Trả lời

2 Zarko Sep 27 2020 at 13:15
  • câu hỏi của bạn không hoàn toàn rõ ràng ...
  • ví dụ đã sử dụng khá cũ, do đó nó sử dụng cú pháp hiện không dùng nữa ( tikzstylethay vì tikzset, v.v.)
  • giả sử rằng tất cả các nút đều nằm trong chuỗi, có cùng kích thước và nội dung, bạn có thể vẽ chúng bằng chainsthư viện, cho các nhãn của quotesthư viện sử dụng cạnh và xác định kiểu cho mọi cạnh và chân:
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta,
                chains,
                positioning,
                quotes}

\begin{document}
    \begin{tikzpicture}[
node distance = 12mm,
  start chain = going right, 
   int/.style = {draw, fill=blue!20, minimum size=2em, font=\large, 
                 on chain},
 every edge/.style = {draw, -Latex},
every edge quotes/.style = {auto, font=\footnotesize, text depth=0.25ex},
  every pin/.style = {pin edge={Latex-,thin,black}, font=\footnotesize}
                        ]
% nodes vith pin above
\coordinate[on chain] (in);
\node (a) [int, pin=$v_0$] {$\frac{1}{s}$};
\node (b) [int, pin=$p_0$] {$\frac{1}{s}$};
\node (c) [int, pin=$p_1$] {$\frac{1}{s}$};
\node (d) [int, pin=$p_2$] {$\frac{1}{s}$};
\node (e) [int, pin=$p_3$] {$\frac{1}{s}$};
\coordinate[on chain] (out);
% connection between nodes
\draw   (in)    edge ["$a$"] (a) 
        (a)     edge ["$v$"] (b) 
        (b)     edge ["$p$"] (c)
        (c)     edge ["$p_1$"] (d)
        (d)     edge ["$p_2$"] (e)
        (e)     edge ["$p_3$"] (out) ;
    \end{tikzpicture}
\end{document}

Nếu bạn muốn có nhiều nút hơn trong chuỗi, chỉ cần thêm chúng vào đã có sẵn. Nếu bạn không cần điều kiện bắt đầu, chỉ cần thả pinvào chúng.

Chỉnh sửa: Ví dụ mà bạn cung cấp, có hai phần:

  • Định nghĩa của các kiểu (trong đó cú pháp không được sử dụng nữa, ngày nay nó phải được viết là:
\tikzset{
  int/.style = {draw, fill=blue!20, minimum size=2em},
 init/.style = {pin edge={to-,thin,black}}
         }

hoặc như các tùy chọn của tikzpicture:

\begin{tikzpicture}[node distance=2.5cm,auto,>=latex',
 int/.style = {draw, fill=blue!20, minimum size=2em},
init/.style = {pin edge={to-,thin,black}}
               ]
  • Nội dung hình ảnh, nơi bạn vẽ những gì bạn muốn có trên hình ảnh. Điều này bạn có thể làm theo nhiều cách khác nhau. Ví dụ,
    • sử dụng các nút od định vị tuyệt đối:
\node (<name>) [<style>] at (<x coordinate>,<y coordinate>) {<node content>};
  • sử dụng các nút od định vị tương đối:
\node (<name 1>) [<style 1>] at (<x coordinate>,<y coordinate>) {<node content>};
\node (<name 2>) [<style 2>, above right=of <name 1>]  {<node content>};

nơi <node 2>sẽ được định vị ở trên và bên trái từ nút <node 2>cho khoảng cách nút được khai báo trong tikzsethoặc tùy chọn như được thực hiện trong ví dụ minh họa ở trên.

  • những dòng bạn có thể vẽ như
\draw[<option>] (<coordinate 1>) -- (<coordinate 2>);

nơi <option>bạn có thể sử dụng ví dụ initnhư được thực hiện trong MWE được hiển thị (Ví dụ làm việc tối thiểu) trong câu hỏi của bạn và đối với tọa độ, hãy sử dụng tên của các nút.

hoặc sử dụng cách tiếp cận nâng cao hơn như được sử dụng trong câu trả lời của tôi.

  • đối với các tùy chọn khác, bạn cần làm quen với gói TikZ và thư viện của chúng. Hướng dẫn sử dụng là một phần trong quá trình cài đặt LaTeX của bạn hoặc bạn có thể tìm thấy nó trên CTAN (sử dụng google cho tikz.sty ).
  • Manula rất lớn, vì vậy để bắt đầu đọc Hướng dẫn và Hướng dẫn phần I và hơn phần III: TikZ ist kein Zeichenprogramm .
  • Nếu bạn gặp khó khăn trong việc vẽ một số hình ảnh của mình, hãy yêu cầu ở đây để được trợ giúp cụ thể. Tại thời điểm này, vui lòng cung cấp MWE, nơi tái tạo sự cố của bạn, để mọi người có thể giúp bạn dễ dàng hơn (Chuẩn bị MWE, ví dụ trong câu trả lời của tôi, nhiều lần giúp bạn tìm ra giải pháp hoặc tự mình phát hiện ra lỗi trong mã)
  • Trang web không nhằm mục đích đưa ra các hướng dẫn chung về cách sử dụng tikzgói.
2 jsbibra Sep 27 2020 at 08:01

Dưới đây là lời giải thích đầy đủ--

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary {arrows.meta,graphs,shapes.misc}
\usetikzlibrary{arrows}
\begin{document}
    \pagestyle{empty}
    %no headers and footers just a blank page
    \tikzstyle{int}=[draw, fill=blue!20, minimum size=2em]
    %macro for (draw)ing square, (fill) inside color blue, default size 2em
    \tikzstyle{init} = [pin edge={to-,thin,black}]
    %macro for arrows/ edges
    
    \begin{tikzpicture}[node distance=2.5cm,auto,>=latex']
        %separation between nodes 2.5cm, type of arrows defined with >=latex
        \node [int, pin={[init]above:$v_0$}] (a) {$\frac{1}{s}$};
        %call the int macro for square named (a), and the init macro for the arrow 
        pointing (to-a), label above the arrow is v_0, and text inside the named node 
        is  {$\frac{1}{s}$}
        \node (b) [left of=a,node distance=2cm, coordinate] {a};
        %node named (b) placed left of node named (a), tec=xt inside the node is {a}
        \node [int, pin={[init]above:$p_0$}] (c) [right of=a] {$\frac{1}{s}$};
        %same as first node named (a)
        \node [coordinate] (end) [right of=c, node distance=2cm]{};
        %same as node named (end) after node named (c)
        \path[->] (b) edge node {$a$} (a);
        %draw an arrow from node b to node a, label above the arrow  {$a$}
        \path[->] (a) edge node {$v$} (c);
        %same as arrow above
        \draw[->] (c) edge node {$p$} (end) ;
        %same as arrow above
    \end{tikzpicture}
\end{document}