我正在将之前制作的图表转换为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
另一个节点的锚点对齐”。这就是 Ti钾Z 确实如此。但是您希望将节点向左移动,因为您希望将两个节点放在一个节点下面。我认为最简单的方法是将第二行的最后一个节点放在前两个节点之前。
例如,
\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=center
minimum width=3cm
text 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}