在 Latex 中使用 TikZ 建立框圖時出現問題

在 Latex 中使用 TikZ 建立框圖時出現問題

我遇到了一個愚蠢的問題。我似乎無法連接最後兩個盒子。我也想要|.|在其中一個盒子裡,但我不知道它是如何完成的。有人可以幫我解決這個問題嗎?

\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

\resizebox{16cm}{2cm}{%
    \begin{tikzpicture}[auto,
    node distance = 12mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     outer sep=0pt, on chain},
     block/.default = 18mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=14mm] {a};    % block name is A-1
\node   [block=12mm] {b};
\node   [block=22mm] {c};
\node   [block=15mm] {d};
\node   [block=22mm] {e};    % block name is A-4
\node   [block=22mm] {f};    % block name is A-6
\node   [block=12mm] {g};
\node   [block=24mm] {h};    % block name is A-8
\node   [block=24mm] {i};    % block name is A-8
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
    (A-1) edge  (A-2)    % text on arrow is between " and "
    (A-2) edge  (A-3)
    (A-3) edge  (A-4)
    (A-4) edge  (A-5)
    (A-5) edge  (A-6)
    (A-6) edge  (A-7);
    (A-7) edge (A-8);
    (A-8) edge (A-8);
    \end{tikzpicture}
    }
\end{document}

答案1

由 i 標記的最後一個區塊具有 name A-9,如果您輸入分號,則需要新增新的繪製指令。我希望我正確地理解了您的模數條請求。

\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

\resizebox{16cm}{2cm}{%
    \begin{tikzpicture}[auto,
    node distance = 12mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     outer sep=0pt, on chain},
     block/.default = 18mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=14mm] {a};    % block name is A-1
\node   [block=12mm] {b};
\node   [block=22mm] {c};
\node   [block=15mm] {d};
\node   [block=22mm] {e~$|.|$};    % block name is A-4
\node   [block=22mm] {f};    % block name is A-6
\node   [block=12mm] {g};
\node   [block=24mm] {h};    % block name is A-8
\node   [block=24mm] {i};    % block name is A-9
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
    (A-1) edge  (A-2)    % text on arrow is between " and "
    (A-2) edge  (A-3)
    (A-3) edge  (A-4)
    (A-4) edge  (A-5)
    (A-5) edge  (A-6)
    (A-6) edge  (A-7)
    (A-7) edge (A-8)
    (A-8) edge (A-9);
    \end{tikzpicture}
    }
\end{document}

答案2

  • 我對這個 mwe 很熟悉:-)
  • 你應該分析你在 mwe 中使用的程式碼...那麼您將觀察到最後一個節點的名稱是A-9(而不是A-8您在 mwe 中註意到的那樣)
  • 對於最常見的尺寸,您應該選擇預設尺寸,例如block/.default=22mm,僅對於其餘的寫入所需的文字寬度(您真的需要如此不同的節點尺寸嗎?我將僅使用18mmnad 9mm,請參閱下面的 mwe )
  • 您可以像在文字中一樣在節點中編寫數學表達式,例如 $|\cdot|$
  • *不要使用\resizebox{16cm}{....它會調整圖像中所有內容的大小,並使其變得醜陋。而是重新計算節點寬度和節點距離,它們的總和為 16 公分:

    14mm + 12mm + 22mm + 15mm + 22mm + 22mm +12mm +24mm +24mm + 9x2x(內間隔) +8*(節點距離)=318 mm

    幾乎是兩倍長。我建議將所有圖像元素長度減半(請參閱下面的 mwe)並使用較小的字體大小,例如footnotesize

從 mwe 來看,您將在節點之間的箭頭上新增文字。如果是這種情況,您可以使用庫join中的巨集來繪製它們chains

考慮以上意見和建議,您的 mwe 變成:

\documentclass[margin=3mm]{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

    \begin{tikzpicture}[
    node distance = 7mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     font=\footnotesize, inner sep=1mm, outer sep=0pt,
                     on chain, join=by -Stealth},
     block/.default = 12mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=6mm] {a};    % block name is A-1
\node   [block=6mm] {b};
\node   [block]     {$|\cdot|$};
\node   [block=6mm] {d};
\node   [block]     {e};    % block name is A-4
\node   [block]     {f};    % block name is A-6
\node   [block=6mm] {g};
\node   [block]     {h};
\node   [block]     {i};    % block name is A-9
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
    \end{tikzpicture}
\end{document}

筆記:如果您想在節點之間標記箭頭,則應該join從區塊樣式定義和圖像新增中刪除選項:

\draw [-Stealth]
    (A-1) edge ["$\alpha$"]    (A-2) 
    (A-2) edge ["$\beta$"]     (A-3)
    (A-3) edge ["$\gamma$"]    (A-4)
    (A-4) edge ["$\epsilon$"]  (A-5)
    (A-5) edge ["$\zeta$"]     (A-6)
    (A-6) edge ["$\theta$"]    (A-7)
    (A-7) edge ["$\iota$"]     (A-8)
    (A-8) edge ["$\kappa$"]    (A-9);

並在圖像選項中添加:

every edge quote/.append style = {font=\footnotesize}

在此輸入影像描述

繪製圖像需要大量的耐心、準確性和時間...

相關內容