タイムラインのラベルを下部に垂直に揃えるにはどうすればよいでしょうか?

タイムラインのラベルを下部に垂直に揃えるにはどうすればよいでしょうか?

次のタイムラインのラベルを垂直に揃えて、すべてがベースライン上に配置されているように見えるようにするにはどうすればよいでしょうか (つまり、下部で垂直に揃えます)? たとえば、\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 座標です。
  • 2 番目の必須引数はテキストです。
\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}

関連情報