타임라인의 레이블을 하단에 수직으로 정렬하는 방법은 무엇입니까?

타임라인의 레이블을 하단에 수직으로 정렬하는 방법은 무엇입니까?

다음 타임라인의 레이블을 수직으로 정렬하여 모두 기준선에 배치된 것처럼 보이도록 하려면 어떻게 해야 합니까(하단에 수직으로 정렬됨)? 예를 들어, \tau및 는 \tau+1아직 하단에 수직으로 정렬되지 않았습니다. 그래서 배치를 사용하고 싶지만 \xy 방향 정렬은 가변적이어야 합니다( -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}

관련 정보