Estoy convirtiendo un diagrama que hice anteriormente tikz
usando nodos y positioning
. Definí todos los nodos relativamente (por ejemplo right = of <other node>
), pero por alguna razón las dos últimas filas de nodos están desplazadas hacia la derecha. Mi sospecha es que configuré relativamente las ubicaciones de los nodos incorrectos, pero no estoy seguro de qué solucionaría el problema.
A continuación se muestra mi base de código actual:
\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}
A continuación se muestra el resultado que obtengo:
Y a continuación se muestra el resultado deseado desde el que estoy convirtiendo:
NOTA: Las flechas de la imagen original son una característica que planeo agregar después de que se resuelva el desplazamiento.
Respuesta1
De forma predeterminada, below
significa "alinear mi north
ancla con el south
ancla de este otro nodo". Y eso es lo que TikZ lo hace. Pero desea que los nodos se desplacen hacia la izquierda, porque desea colocar dos debajo de uno. Creo que lo más fácil es colocar el nodo final de la segunda fila antes que los dos anteriores.
Por ejemplo,
\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}
También actualicé su código para evitar el uso obsoleto de arrows
y \tikzstyle
. Tenga en cuenta que text centered
no tiene sentido si lo tiene align=center
y eso minimum width=3cm
no hace nada, ya que text width
siempre es más grande.
Respuesta2
Aquí hay una respuesta ligeramente diferente que utiliza un nodo ficticio y se agregan algunas alturas mínimas para que las cajas se vean más uniformes.
\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}
Respuesta3
algo similar a otra respuesta, sin embargo, el estilo de los nodos se determina de manera diferente y se calcula el ancho de "la corte suprema", porque la imagen se dibuja de abajo hacia arriba. en consecuencia los nodos no están fuera de lugar:
%\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}