tikz 節點向右偏移

tikz 節點向右偏移

我正在將之前製作的圖表轉換為tikz使用節點和 positioning.我相對地定義了所有節點(例如right = of <other node>),但由於某種原因,最後兩行節點向右偏移。我懷疑我相對地設置了錯誤節點的位置,但我不確定如何修復它。

以下是我目前的程式碼庫:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage[margin=1in]{geometry}

\usetikzlibrary{shapes.geometric, arrows, positioning}
\tikzstyle{red-rounded-rectangle} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=red!30, align=center]
\tikzstyle{green-rounded-rectangle} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=green!30, align=center]
\tikzstyle{blue-rounded-rectangle} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=blue!30, align=center]

\begin{document}

\begin{figure}[h]
\centering
\begin{tikzpicture}[node distance=0.5cm]
\node (scotus) [green-rounded-rectangle, text width = 10cm]{
{\Huge \textbf{The Supreme Court}}
};
\node (state) [green-rounded-rectangle, right = of scotus, text width=4cm]{
{\large \textbf{State Supreme Court}}\\
Highest Law of the State
};
\node (12-appeals) [red-rounded-rectangle, below = of scotus,, text width = 4cm]{
{\large \textbf{12 Federal Courts of Appeals}}\\
Hears Appeals from lower courts. Geographically distributed.
};
\node (94-district) [blue-rounded-rectangle, below = of 12-appeals,, text width=4cm]{
{\large \textbf{94 District Courts}}\\
Hears cases and deals verdicts. \textit{Judge Judy} except federal.
};
\node (court-appeals) [red-rounded-rectangle, below = of scotus, right = of 12-appeals,, text width=4cm]{
{\large \textbf{Court of Appeals for the Federal Circuit}}\\
Hears special federal appeals. (e.g. patents)
};
\node (legis-courts) [blue-rounded-rectangle, below= of court-appeals, right = of 94-district, text width = 4cm]{
{\large \textbf{Legislative Courts}}\\
Weaker Courts created by Congress. (E.g. \textit{Court of Military Appeals})
};
\node (state-appeals) [red-rounded-rectangle, below  = of  state, right = of court-appeals, text width = 4cm]{
{\large \textbf{State Court of Appeals}}\\
Hears Appeals from Trials on a Case-By-Case basis.
};
\node (trial-court) [blue-rounded-rectangle, below = of state-appeals, right = of legis-courts, text width=4cm]{
{\large \textbf{Trial Court}}\\
Your typical \textit{Judge Judy} case. Hears either criminal or civil cases, and deals verdicts.
};
\end{tikzpicture}
\end{figure}

\end{document}

以下是我得到的輸出: 在此輸入影像描述

以下是我要轉換的所需輸出: 在此輸入影像描述

注意:原始圖片中的箭頭是我計劃在解決偏移後添加的功能。

答案1

預設情況下,below表示「將我的north錨點與south另一個節點的錨點對齊」。這就是蒂kZ 確實如此。但是您希望節點向左移動,因為您希望將兩個節點放在一個節點下。我認為最簡單的方法是將第二行的最後一個節點放在前面的兩個節點之前。

例如,

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows.meta, positioning}
\tikzset{
  red-rounded-rectangle/.style={rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=red!30, align=center},
  green-rounded-rectangle/.style={rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=green!30, align=center},
  blue-rounded-rectangle/.style={rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=blue!30, align=center},
}
\begin{document}
\begin{tikzpicture}[node distance=0.5cm, >/.tip=Latex, thick]
  \node (scotus) [green-rounded-rectangle, text width = 10cm]{
    {\Huge \textbf{The Supreme Court}}
  };
  \node (state) [green-rounded-rectangle, right = of scotus, text width=4cm]{
    {\large \textbf{State Supreme Court}}\\
    Highest Law of the State
  };
  \node (state-appeals) [red-rounded-rectangle, below  = of  state, text width = 4cm]{
    {\large \textbf{State Court of Appeals}}\\
    Hears Appeals from Trials on a Case-By-Case basis.
  };
  \node (12-appeals) [red-rounded-rectangle, left=of state-appeals -| scotus, text width = 4cm] {
    {\large \textbf{12 Federal Courts of Appeals}}\\
    Hears Appeals from lower courts. Geographically distributed.
  };
  \node (94-district) [blue-rounded-rectangle, below = of 12-appeals,, text width=4cm]{
    {\large \textbf{94 District Courts}}\\
    Hears cases and deals verdicts. \textit{Judge Judy} except federal.
  };
  \node (court-appeals) [red-rounded-rectangle, right = of scotus |- state-appeals, text width=4cm]{
    {\large \textbf{Court of Appeals for the Federal Circuit}}\\
    Hears special federal appeals. (e.g. patents)
  };
  \node (legis-courts) [blue-rounded-rectangle, below= of court-appeals, text width = 4cm]{
    {\large \textbf{Legislative Courts}}\\
    Weaker Courts created by Congress. (E.g. \textit{Court of Military Appeals})
  };
  \node (trial-court) [blue-rounded-rectangle, below = of state-appeals,  text width=4cm]{
    {\large \textbf{Trial Court}}\\
    Your typical \textit{Judge Judy} case. Hears either criminal or civil cases, and deals verdicts.
  };
  \draw [->] (trial-court) edge (state-appeals) (state-appeals) edge (state) (state) edge (scotus) (legis-courts) edge (court-appeals) (court-appeals) edge (scotus.south -| court-appeals) (94-district) edge (12-appeals) (12-appeals) -- (12-appeals |- scotus.south) ;
\end{tikzpicture}
\end{document}  

我還更新了您的程式碼以避免不建議使用arrows\tikzstyle。請注意,如果您有並且沒有任何作用,則text centered毫無意義,因為它總是更大。align=centerminimum width=3cmtext width

一致的法院

答案2

這是一個稍微不同的答案,使用虛擬節點並添加一些最小高度以使盒子看起來更均勻。

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage[margin=1in]{geometry}

\usetikzlibrary{shapes.geometric, arrows, positioning}
\tikzset{red-rounded-rectangle/.style={rectangle, rounded corners, minimum
width=3cm, minimum height=2.2cm,text centered, draw=black, fill=red!30,
align=center,text width = 4.5cm},green-rounded-rectangle/.style={rectangle, rounded corners,
minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=green!30,
align=center,minimum height=1.5cm},blue-rounded-rectangle/.style = {rectangle, rounded corners,
minimum width=3cm, minimum height=2cm,text centered, draw=black, fill=blue!30,
align=center,text width = 4.5cm}}

\begin{document}

\begin{figure}[h]
\centering
\begin{tikzpicture}[node distance=0.5cm,font=\sf]
\node (scotus) [green-rounded-rectangle, text width = 10cm]{
{\Huge \textbf{The Supreme Court}}
};
\node (state) [green-rounded-rectangle, right = of scotus]{
{\large \textbf{State Supreme Court}}\\
Highest Law of the State
};
\node[below =1.5cm of scotus,xshift=0.4cm](dummy){};
\node (12-appeals) [red-rounded-rectangle,left=of dummy]{
{\large \textbf{12 Federal Courts of Appeals}}\\
Hears Appeals from lower courts. Geographically distributed.
};
\node (94-district) [blue-rounded-rectangle, below = of 12-appeals,]{
{\large \textbf{94 District Courts}}\\
Hears cases and deals verdicts. \textit{Judge Judy} except federal.
};
\node (court-appeals) [red-rounded-rectangle, below = of scotus, right = of 12-appeals]{
{\large \textbf{Court of Appeals for the Federal Circuit}}\\
Hears special federal appeals. (e.g. patents)
};
\node (legis-courts) [blue-rounded-rectangle, below= of court-appeals, right = of 94-district]{
{\large \textbf{Legislative Courts}}\\
Weaker Courts created by Congress. (E.g. \textit{Court of Military Appeals})
};
\node (state-appeals) [red-rounded-rectangle, below  = of  state, right = of court-appeals]{
{\large \textbf{State Court of Appeals}}\\
Hears Appeals from Trials on a Case-By-Case basis.
};
\node (trial-court) [blue-rounded-rectangle, below = of state-appeals, right = of legis-courts, text width=4.5cm]{
{\large \textbf{Trial Court}}\\
Your typical \textit{Judge Judy} case. Hears either criminal or civil cases, and deals verdicts.
};
\draw[thick,-latex] (trial-court)--(state-appeals);
\draw[thick,-latex] (legis-courts)--(court-appeals);
\draw[thick,-latex] (94-district)--(12-appeals);
\draw[thick,-latex] (state-appeals)--(state);
\draw[thick,-latex] (court-appeals)--(court-appeals|-scotus.south);
\draw[thick,-latex] (12-appeals)--(12-appeals|-scotus.south);
\draw[thick,-latex] (state)--(scotus);
\end{tikzpicture}
\end{figure}

\end{document}

在此輸入影像描述

答案3

與其他答案有些相似,但是,節點樣式確定不同,並且計算“最高法院”的寬度,因為圖像是從下到上繪製的。因此節點不會放錯位置:

%\documentclass{article}
%\usepackage[utf8]{inputenc}
%\usepackage{tikz}
%\usepackage[margin=1in]{geometry}
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta, calc, positioning}

\begin{document}
%\begin{figure}[htb]
%\centering
    \begin{tikzpicture}[
node distance = 6mm and 4mm,
   box/.style = {rectangle, rounded corners, thick,
                 draw=#1!70!gray, fill=#1!30,
                 text width=4cm, minimum height=1cm, align=flush center,
                 font=\sffamily\linespread{.8}\selectfont}
                        ]
% first row, on the bottom
\node (94-district)     [box=blue]
   {\textbf{94 District Courts}\\
    \scriptsize
    Hears cases and deals verdicts. \textit{Judge Judy} except federal.};
\node (legis-courts)    [box=blue, right=of 94-district]
   {\textbf{Legislative Courts}\\
    \scriptsize
    Weaker Courts created by Congress. (E.g. \textit{Court of Military Appeals})};
\node (trial-court)     [box=blue, below right=0mm and 4mm of legis-courts.north east]
   {\textbf{Trial Court}\\
    \scriptsize
    Your typical \textit{Judge Judy} case. Hears either criminal or civil cases, and deals verdicts.};
% second row
\node (12-appeals)      [box=red, above=of 94-district]
   {\textbf{12 Federal Courts of Appeals}\\
    \scriptsize
    Hears Appeals from lower courts. Geographically distributed.};
\node (court-appeals)   [box=red, above=of legis-courts]
   {\textbf{Court of Appeals for the Federal Circuit}\\
    \scriptsize
    Hears special federal appeals. (e.g. patents)};
\node (state-appeals)   [box=red, above=of trial-court]
   {\textbf{State Court of\\ Appeals}\\
    \scriptsize
    Hears Appeals from Trials on a Case-By-Case basis.};
% third row
% firs calculate spreme court node width
\path   let \p1 = ($(12-appeals.west)-(court-appeals.east)$),
            \n1 = {veclen(\x1,\y1)} in
        node (scotus)
            [box=green, font=\sffamily\Huge\bfseries,
             text width=\n1-2*\pgfkeysvalueof{/pgf/inner xsep},
             above=of $(12-appeals.north)!0.5!(court-appeals.north)$]
            {The Supreme Court};
\node (state)       [box=green, right = of scotus]
   {\large\textbf{State Supreme Court}\\
    \scriptsize
    Highest Law of the State};
\draw [-Stealth, thick]
    (trial-court)   edge (state-appeals)
    (state-appeals) edge (state)
    (state)         edge (scotus)
    (legis-courts)  edge (court-appeals)
    (court-appeals) edge (scotus.south -| court-appeals)
    (94-district)   edge (12-appeals)
    (12-appeals)     to  (12-appeals |- scotus.south) ;

\end{tikzpicture}
%\end{figure}
\end{document}

在此輸入影像描述

相關內容