
¿Cómo se pueden alinear verticalmente las etiquetas en la siguiente línea de tiempo, de modo que parezca que todas están ubicadas en una línea base (es decir, alineadas verticalmente en la parte inferior)? Por ejemplo, \tau
y \tau+1
aún no están alineados verticalmente en la parte inferior. Entonces quiero usar la ubicación en \x
pero la alineación en la dirección y debe ser variable (no fijada en -2mm
este momento)
\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}
Respuesta1
ACTUALIZAR
Defina timeline
el entorno y utilícelo \event<*>[* or num or dimen]{num or dimen}{text}
para agregar eventos.
- Primero
*
envolverá el texto con$...$
. - El argumento opcional es la coordenada x del tick, utilícelo
*
para no establecer ningún tick. Por defecto es el mismo que el siguiente argumento. - El primer argumento obligatorio es la coordenada x del nodo del evento.
- El segundo argumento obligatorio es el texto.
\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}
Respuesta original
Úselo anchor= base
para alinear el texto.
\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}