나는 이 코드를 가지고 있습니다 :
\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}
노드가 서로 정렬되도록 세 개의 연속체를 정렬하고 싶습니다. 그렇게 하는 가장 좋은 방법은 무엇입니까?
답변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}