Tengo este código:
\documentclass{tufte-latex}
\usepackage{tikz}
\begin{document}
\section{Some variables to play with}
\subsection{Time}
\begin{tikzpicture}[place/.style={circle,draw=gray,fill=gray,very thick}]
\sffamily
% put points on graph
\node (n1) at (1,0) [place,label=below:{Alternate past}] {};
\node (n2) at (3,0) [place,label=below:{Present}] {};
\node (n3) at (5,0) [place,label=below:{Near future}] {};
\node (n4) at (7,0) [place,label=below:{Far future}] {};
% \foreach \x [evaluate={\y=int(\x+1);}] in {1,...,9}
\draw[gray,very thick] (1,0) -- (7,0);
\end{tikzpicture}
\subsection{Hard vs. soft SF}
\begin{tikzpicture}[place/.style={circle,draw=gray,fill=gray,very thick}]
\sffamily
% put points on graph
\node (n1) at (1,0) [place,label=below:{2001}] {};
\node (n2) at (3,0) [place,label=below:{Alien}] {};
\node (n3) at (5,0) [place,label=below:{Blade Runner}] {};
\node (n4) at (7,0) [place,label=below:{WOTW}] {};
% \foreach \x [evaluate={\y=int(\x+1);}] in {1,...,9}
\draw[gray,very thick] (1,0) -- (7,0);
\end{tikzpicture}
\subsection{Optimism vs. pessimism}
\begin{tikzpicture}[place/.style={circle,draw=gray,fill=gray,very thick}]
\sffamily
% put points on graph
\node (n1) at (1,0) [place,label=below:{Star Trek}] {};
\node (n2) at (3,0) [place,label=below:{Neutron Star}] {};
\node (n3) at (5,0) [place,label=below:{WOTW}] {};
\node (n4) at (7,0) [place,label=below:{New Rose Hotel}] {};
% \foreach \x [evaluate={\y=int(\x+1);}] in {1,...,9}
\draw[gray,very thick] (1,0) -- (7,0);
\end{tikzpicture}
\end{document}
Lo que produce este resultado:
Quiero alinear los tres continuos para que los nodos queden alineados entre sí. ¿Cuál es la mejor manera de hacer eso?
Respuesta1
La razón de esto es, por supuesto, que las etiquetas situadas más a la izquierda tienen diferentes anchos. Por lo tanto, una solución es establecer text width
el mismo valor de todas las etiquetas, con, por ejemplo,
every label/.style={text width=3cm,align=center}
Es 3cm
posible que sea necesario ajustarlos, dependiendo de las propias etiquetas.
Anexo: estrictamente hablando, solo necesita hacer esto para el nodo más a la izquierda, como señala AboAmmar ensu respuesta.
Por lo tanto, podría modificar su código para que tenga, por ejemplo, para el primer diagrama,
label={[text width=3cm,align=center]below:Alternate past}
O, para el código que publiqué a continuación, elimine el text width=3cm,align=center
del widelabels
estilo y use\node [place,"Alternate past" {widelabels,text width=3cm,align=center}] (n1) {};
Sólo por diversión, aquí hay una sugerencia para un enfoque alternativo para dibujar este tipo de cosas, usando las bibliotecas chains
y quotes
. Con chains
él puede obtener el posicionamiento y la unión automáticos de los nodos, y la quotes
biblioteca proporciona un método alternativo para agregar etiquetas.
\documentclass{tufte-handout}
\usepackage{tikz}
\tikzset{
place/.style={circle,draw=gray,fill=gray,very thick,on chain,join},
widelabels/.style={below,text width=3cm,align=center,font=\sffamily},
mychain/.style={start chain,node distance=2cm,every join/.style={gray, very thick}}
}
\usetikzlibrary{quotes,chains}
\begin{document}
\section{Some variables to play with}
\subsection{Time}
\begin{tikzpicture}[mychain]
% put points on graph
\node [place,"Alternate past" widelabels] (n1) {};
\node [place,"Present" widelabels] (n2) {};
\node [place,"Near future" widelabels](n3) {};
\node [place,"Far future" widelabels](n4) {};
\end{tikzpicture}
\subsection{Hard vs. soft SF}
\begin{tikzpicture}[mychain]
% put points on graph
\node [place,"2001" widelabels] (n1) {};
\node [place,"Alien" widelabels] (n2) {};
\node [place,"Blade runner" widelabels](n3) {};
\node [place,"WOTW" widelabels](n4) {};
\end{tikzpicture}
\subsection{Optimism vs. pessimism}
\begin{tikzpicture}[mychain]
% put points on graph
\node [place,"Star Trek" widelabels] (n1) {};
\node [place,"Neutron Star" widelabels] (n2) {};
\node [place,"WOTW" widelabels](n3) {};
\node [place,"New Rose Hotel" widelabels](n4) {};
\end{tikzpicture}
\end{document}
Respuesta2
Torbjørn ya ha explicado el problema y mostrado cómo solucionarlo, así que dale la marca verde. Quiero sugerir un enfoque que sea más fácil de leer y mantener: usar una macro para los tikzpicture
entornos.
Aquí hay una versión más compacta de su MWE:
\documentclass{tufte-book}
\usepackage{tikz}
%usage: \linegraph{item1,item2, ...}
\newcommand\linegraph[1]{%
\begin{tikzpicture}[place/.style={circle,draw=gray,fill=gray,very thick, radius=1mm},
every label/.style={text width=3cm,align=center}
]
\foreach \word [count=\x, remember=\x as \lastx] in {#1} {
\node (n\x) at (2*\x-1,0) [place,label=below:{\word}] {};
}
\draw[gray,very thick] (1,0) -- (2*\lastx-1,0);
\end{tikzpicture}
}
\begin{document}
\section{Some variables to play with}
\subsection{Time}
\linegraph{Alternate past, Present, Near future, Far future}
\subsection{Hard vs. soft SF}
\linegraph{2001, Alien, Blade runner, WOTW}
\subsection{Optimism vs. pessimism}
\linegraph{Star Trek, Neutron Star, WOTW, New Rose Hotel}
\end{document}
He colocado etiquetas de nodo n1
, n2
, .., etc. \linegraph
, pero tal como están escritas actualmente, deberían eliminarse porque no se utilizan. Además, \linegraph
aceptará cualquier número de elementos, hasta el ancho de la página, por supuesto. El resultado es el mismo que el anterior:
Por supuesto, podrías hacer algo similar usando cadenas como lo ha hecho Torbjørn.
Respuesta3
Otra solución fácil es simplemente alinear las tres etiquetas situadas más a la izquierda y todo lo demás se mantendrá intacto. Utilice, por ejemplo, este comando \newcommand{\ALIGN}[1]{\makebox[6em]{#1}}
para alinear estos nodos.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\section{Some variables to play with}
\subsection{Time}
\newcommand{\ALIGN}[1]{\makebox[6em]{#1}}
\begin{tikzpicture}[place/.style={circle,draw=gray,fill=gray,very thick}]
\sffamily
% put points on graph
\node (n1) at (1,0) [place,label=below:\ALIGN{Alternate past}] {};
\node (n2) at (3,0) [place,label=below:{Present}] {};
\node (n3) at (5,0) [place,label=below:{Near future}] {};
\node (n4) at (7,0) [place,label=below:{Far future}] {};
\draw[gray,very thick] (1,0) -- (7,0);
\end{tikzpicture}
\subsection{Hard vs. soft SF}
\begin{tikzpicture}[place/.style={circle,draw=gray,fill=gray,very thick}]
\sffamily
% put points on graph
\node (n1) at (1,0) [place,label=below:\ALIGN{2001}] {};
\node (n2) at (3,0) [place,label=below:{Alien}] {};
\node (n3) at (5,0) [place,label=below:{Blade Runner}] {};
\node (n4) at (7,0) [place,label=below:{WOTW}] {};
\draw[gray,very thick] (1,0) -- (7,0);
\end{tikzpicture}
\subsection{Optimism vs. pessimism}
\begin{tikzpicture}[place/.style={circle,draw=gray,fill=gray,very thick}]
\sffamily
% put points on graph
\node (n1) at (1,0) [place,label=below:\ALIGN{Star Trek}] {};
\node (n2) at (3,0) [place,label=below:{Neutron Star}] {};
\node (n3) at (5,0) [place,label=below:{WOTW}] {};
\node (n4) at (7,0) [place,label=below:{New Rose Hotel}] {};
\draw[gray,very thick] (1,0) -- (7,0);
\end{tikzpicture}
\end{document}