Wie richte ich Knoten in mehreren \tikzpictures aus?

Wie richte ich Knoten in mehreren \tikzpictures aus?

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}

Das Ergebnis lautet: sf_spectra_test

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 widthaller 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 3cmmö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=centeraus dem widelabelsStil 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 chainsund quotes. Mit chainskönnen Sie die Knoten automatisch positionieren und verbinden, und die quotesBibliothek 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}

Bildbeschreibung hier eingeben

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 tikzpictureUmgebungen.

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 \linegraphwird eine beliebige Anzahl von Elementen akzeptiert – natürlich bis zur Seitenbreite. Die Ausgabe ist die gleiche wie oben:

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

verwandte Informationen