여러 개의 \tikzpictures에서 노드를 정렬하는 방법은 무엇입니까?

여러 개의 \tikzpictures에서 노드를 정렬하는 방법은 무엇입니까?

나는 이 코드를 가지고 있습니다 :

\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}

이 결과는 다음과 같습니다. sf_spectra_test

노드가 서로 정렬되도록 세 개의 연속체를 정렬하고 싶습니다. 그렇게 하는 가장 좋은 방법은 무엇입니까?

답변1

그 이유는 물론 가장 왼쪽 레이블의 너비가 다르기 때문입니다. 따라서 해결 방법은 text width모든 레이블을 동일하게 설정하는 것입니다.

every label/.style={text width=3cm,align=center}

3cm라벨 자체에 따라 조정해야 할 수도 있습니다 .


부록: 엄밀히 말하면 AboAmmar가 지적한 것처럼 가장 왼쪽 노드에 대해서만 이 작업을 수행하면 됩니다.그의 대답.

따라서 첫 번째 다이어그램의 경우 다음과 같이 코드를 수정할 수 있습니다.

label={[text width=3cm,align=center]below:Alternate past}

또는 아래에 게시한 코드의 경우 스타일 text width=3cm,align=center에서 를 제거 widelabels하고 사용하세요.\node [place,"Alternate past" {widelabels,text width=3cm,align=center}] (n1) {};


chains재미삼아 및 라이브러리를 사용하여 이러한 항목을 그리는 대체 접근 방식을 제안합니다 quotes. 를 사용하면 chains자동으로 노드 위치를 지정하고 결합할 수 있으며 quotes라이브러리는 레이블을 추가하는 대체 방법을 제공합니다.

\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}

여기에 이미지 설명을 입력하세요

답변2

Torbjørn은 이미 문제를 설명하고 해결 방법을 보여주었습니다. 따라서 그에게 녹색 체크 표시를 해주세요. 나는 읽고 유지하기 쉬운 접근 방식을 제안하고 싶습니다. 즉, tikzpicture환경에 매크로를 사용하는 것입니다.

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}

n1노드 레이블 , n2, .. 등을 넣었 \linegraph지만 현재 작성된 대로 사용되지 않으므로 삭제해야 합니다. 또한 \linegraph페이지 너비까지 원하는 수의 항목을 허용합니다. 출력은 위와 동일합니다.

여기에 이미지 설명을 입력하세요

물론 Torbjørn이 했던 것처럼 체인을 사용하여 비슷한 작업을 수행할 수도 있습니다.

답변3

또 다른 쉬운 수정 방법은 가장 왼쪽에 있는 레이블 3개를 정렬하는 것입니다. 그러면 다른 모든 항목은 그대로 유지됩니다. 예를 들어, \newcommand{\ALIGN}[1]{\makebox[6em]{#1}}이러한 노드를 정렬하려면 이 명령을 사용하십시오.

\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}

여기에 이미지 설명을 입력하세요

관련 정보