
다음 타임라인의 레이블을 수직으로 정렬하여 모두 기준선에 배치된 것처럼 보이도록 하려면 어떻게 해야 합니까(하단에 수직으로 정렬됨)? 예를 들어, \tau
및 는 \tau+1
아직 하단에 수직으로 정렬되지 않았습니다. 그래서 배치를 사용하고 싶지만 \x
y 방향 정렬은 가변적이어야 합니다( -2mm
현재는 고정되어 있지 않음).
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[thick,x=0.5cm]
\newcommand*{\mylabshift}{0.25}
\draw[->] (-1,0) -- (27,0) node[below=2mm]{Time};
\foreach \x in {0,1, 4,5, 9,10, 14, 19,20, 25}
\draw(\x, 1.2mm) -- (\x, -1.2mm);
\foreach \x/\what in {0/0, 1/1, 2.5/\dots, 4/\tau, 5+\mylabshift/\tau+1, 7.25/\dots, 9/t, 10+\mylabshift/t+1, 12.25/\dots, 14/t+h, 19-3*\mylabshift/T-h, 20+5*\mylabshift/T-h+1, 25/T}
\node[below] at (\x,-2mm) {$\what$};
\end{tikzpicture}
\end{document}
답변1
업데이트
환경을 정의 timeline
하고 \event<*>[* or num or dimen]{num or dimen}{text}
이벤트를 추가하는데 사용합니다.
- 먼저
*
텍스트를$...$
. - 선택적 인수는 눈금의 x 좌표이며
*
눈금을 설정하지 않는 데 사용됩니다. 기본적으로 다음 인수와 동일합니다. - 첫 번째 필수 인수는 이벤트 노드의 x 좌표입니다.
- 두 번째 필수 주장은 텍스트입니다.
\documentclass[tikz, margin=1cm]{standalone}
\makeatletter
\newtoks\t@event@toka%
\newtoks\t@event@tokb%
\newif\ifevent@math%
\newif\ifevent@comp%
\newenvironment{timeline}[1][0.25]{%
\begingroup%
\let\event@tmpa\pgfutil@empty%
\let\event@tmpb\pgfutil@empty%
\let\event@tmpc\pgfutil@empty%
\let\event@tmpd\pgfutil@empty%
\edef\event@min{\the\maxdimen}%
\edef\event@max{-\event@min}%
\def\event{%
\pgfutil@ifnextchar-%
{\event@compfalse\event@}%
{\event@comptrue\event@-}%
}%
\def\event@-{%
\pgfutil@ifnextchar*%
{\event@mathtrue\event@@}%
{\event@mathfalse\event@@*}%
}%
\def\event@@*{%
\pgfutil@ifnextchar[\event@@@{\@dblarg{\event@@@}}%
}%
\def\event@@@[##1]##2##3{%
\edef\event@tmpb{%
\noexpand\node[anchor=base] at (##2, -7mm)%
{\ifevent@math$##3$\else##3\fi};%
\ifx##1*\else%
\noexpand\draw (##1, -1.2mm) -- (##1, 1.2mm);%
\fi%
}%
\t@event@toka=\expandafter{\event@tmpa}%
\t@event@tokb=\expandafter{\event@tmpb}%
\edef\event@tmpa{\the\t@event@toka\the\t@event@tokb}%
\ifx##1*\else%
\event@set@axismax{##1}%
\fi%
\event@set@axismax{##2}%
}%
\def\event@set@axismax##1{%
\tikz@checkunit{##1}%
\iftikz@isdimension%
\pgf@process{\pgfpoint{##1}{0pt}}%
\else%
\pgf@process{\pgfpointxy{##1}{0}}%
\fi%
\pgfmathparse{\the\pgf@x}%
\let\event@cur\pgfmathresult%
\pgfmathsetmacro\event@min{%
\event@cur < \event@min ? \event@cur : \event@min}%
\pgfmathsetmacro\event@max{%
\event@cur > \event@max ? \event@cur : \event@max}%
}%
}{%
\t@event@toka=\expandafter{\event@tmpa\\}%
\edef\event@tmpa{%
\noexpand\matrix (a) [row sep=5pt] {%
\noexpand \draw[->] (\event@min pt - 1cm, 0) -- (\event@max pt + 1cm, 0);%
\the\t@event@toka%
};%
}%
\event@tmpa%
\endgroup%
}
\makeatother
\begin{document}
\begin{tikzpicture}[thick,x=0.5cm]
\newcommand*{\mylabshift}{0.25}
\begin{timeline}
\event*{0}{0}
\event*{1}{1}
\event*[*]{2.5}{\cdots}
\event*{4}{\tau}
\event*[5]{5+\mylabshift}{\tau+1}
\event*[*]{7.25}{\cdots}
\event*{9}{t}
\event*[10]{10+\mylabshift}{t+1}
\event*[*]{12.25}{\cdots}
\event*{14}{t+h}
\event*[19]{19-3*\mylabshift}{T-h}
\event*[20]{20+5*\mylabshift}{T-h+1}
\event*{25}{T}
\end{timeline}
\end{tikzpicture}
\end{document}
원래 답변
anchor= base
텍스트를 정렬하는 데 사용합니다 .
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[thick,x=0.5cm]
\newcommand*{\mylabshift}{0.25}
\draw[->] (-1,0) -- (27,0) node[anchor=base, yshift=-7mm]{Time};
\foreach \x in {0,1, 4,5, 9,10, 14, 19,20, 25}
\draw(\x, 1.2mm) -- (\x, -1.2mm);
\foreach \x/\what in {
0/0, 1/1, 2.5/\dots, 4/\tau, 5+\mylabshift/\tau+1, 7.25/\dots, 9/t,
10+\mylabshift/t+1, 12.25/\dots, 14/t+h, 19-3*\mylabshift/T-h,
20+5*\mylabshift/T-h+1, 25/T
}
\node[anchor=base] at (\x,-7mm) {$\what$};
\end{tikzpicture}
\end{document}