答案1
这是一个自动化的解决方案。定义一个名为的新命令,\timeline
它有 6 个参数,其中一个是可选的。语法是
\timeline[<eventspace>]{<label>}{<start>}{<step>}{<number>}{<intervals>}
<label>
在您的示例中是“AD”。<start>
是您示例中的开始年份<label>
:30。<step>
是标记年份之间的年数:在您的示例中是 5。<number>
是标记年份的数量,在您的示例中是 11。
<eventspace>
是分配给左侧事件的长度(以厘米为单位)。默认值为 2。
<intervals>
是一个以逗号分隔的列表,其中每个条目的形式为begin/end/event
. ,event
可以为空。
例如,代码
\timeline[2.5]{A.D.}{30}{5}{11}{29/33/event 1,32/34.5/event 2,35.5/38/something,44/48/??,45.5/48/X,47/49.5/Y,47.5/52/Z,52/57.5/,61.5/63/,64/67/A}
产生输出
完整代码如下:
\documentclass{article}
\usepackage{tikz}
\definecolor{linecolor}{rgb}{0, 0.5, 0.5}
\newcommand{\timeline}[6][2]{\begin{tikzpicture}
\node[anchor=base] at (0,.15){\textsf{\textbf{\scriptsize#2}}};
\foreach [var=\n, evaluate=\n as \l using int(\n*#4+#3-#4)] in {1,...,#5}{
\node[anchor=base] at (\n,.15){\textsf{\textbf\l}};}
\foreach [var=\timea, var=\timeb, var=\event, count=\n] in {#6}{
\pgfmathsetmacro{\col}{\ifodd\n"linecolor"\else"white"\fi}
\fill[color=\col!15](-#1,-\n+1) rectangle (#5+1,-\n);
\foreach \m in {0,...,#5}{\draw[linecolor](\m,-\n+1)--(\m,-\n);}
\fill[linecolor,rounded corners=1.5mm]({(\timea-#3+#4)/#4},-\n+.65) rectangle ({(\timeb-#3+#4)/#4},-\n+.35);
\node[anchor=base, right] at (-#1,-\n+.5) {\textsf{\textbf\event}};}
\draw[linecolor](-#1,0)--(#5+1,0);
\foreach [var=\timea, var=\timeb, count=\n] in {#6}{\draw[linecolor](-#1,-\n)--(#5+1,-\n);}
\end{tikzpicture}}
%\timeline{label}{start}{step}{number}{intervals}
\begin{document}
\timeline[2.5]{A.D.}{30}{5}{11}{29/33/event 1,32/34.5/event 2,35.5/38/something,44/48/??,45.5/48/X,47/49.5/Y,47.5/52/Z,52/57.5/,61.5/63/,64/67/A}
\end{document}
答案2
使用 pgfgantt:
编辑:目前我能想到的最好的办法是:
\documentclass{standalone}
\usepackage{pgfgantt}
\begin{document}
\begin{ganttchart}[hgrid, vgrid]{30}{84}
\gantttitlelist[
title/.append style=
]{30,35,...,80}{5} \\
\ganttbar{}{30}{33}\ganttnewline
\ganttbar{}{33}{34}\ganttnewline
\ganttbar{}{36}{36}\ganttnewline
\ganttbar{}{44}{46}\ganttnewline
\ganttbar{}{46}{46}\ganttnewline
\end{ganttchart}
\end{document}
我知道这不是你想要的但我希望它会有所帮助。