Ich habe diesen Code:
\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}
Ich möchte die drei Kontinua so ausrichten, dass die Knoten aneinander ausgerichtet sind. Wie geht das am besten?
Antwort1
Der Grund hierfür ist natürlich, dass die Beschriftungen ganz links unterschiedliche Breiten haben. Daher besteht eine Problemumgehung darin, die Breite text width
aller Beschriftungen auf die gleiche Breite zu setzen, beispielsweise mit
every label/.style={text width=3cm,align=center}
Abhängig von den Etiketten selbst müssen diese 3cm
möglicherweise angepasst werden.
Nachtrag: Genau genommen müssen Sie dies nur für den Knoten ganz links tun, wie AboAmmar inseine Antwort.
Daher könnten Sie Ihren Code einfach so ändern, dass er beispielsweise für das erste Diagramm Folgendes enthält:
label={[text width=3cm,align=center]below:Alternate past}
Oder entfernen Sie für den unten geposteten Code das text width=3cm,align=center
aus dem widelabels
Stil und verwenden Sie\node [place,"Alternate past" {widelabels,text width=3cm,align=center}] (n1) {};
Nur zum Spaß hier ein Vorschlag für einen alternativen Ansatz zum Zeichnen solcher Dinge unter Verwendung der Bibliotheken chains
und quotes
. Mit chains
können Sie die Knoten automatisch positionieren und verbinden, und die quotes
Bibliothek bietet eine alternative Methode zum Hinzufügen von Beschriftungen.
\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}
Antwort2
Torbjørn hat das Problem bereits erklärt und gezeigt, wie man es behebt – also geben Sie ihm das grüne Häkchen. Ich möchte einen Ansatz vorschlagen, der einfacher zu lesen und zu pflegen ist: Verwenden Sie ein Makro für die tikzpicture
Umgebungen.
Hier ist eine kompaktere Version Ihres 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}
Ich habe Knotenbeschriftungen n1
, n2
, .. usw. eingefügt \linegraph
, aber so wie sie derzeit geschrieben sind, sollten sie gelöscht werden, da sie nicht verwendet werden. Außerdem \linegraph
wird eine beliebige Anzahl von Elementen akzeptiert – natürlich bis zur Seitenbreite. Die Ausgabe ist die gleiche wie oben:
Natürlich könnten Sie etwas Ähnliches mit Ketten machen, wie Torbjørn es getan hat.
Antwort3
Eine weitere einfache Lösung besteht darin, nur die drei Beschriftungen ganz links auszurichten. Alles andere bleibt unverändert. Verwenden Sie beispielsweise diesen Befehl, \newcommand{\ALIGN}[1]{\makebox[6em]{#1}}
um diese Knoten auszurichten.
\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}