我正在尝试使用包年表在我的文档中显示时间线,但是它却出现了奇怪的情况。
我正在使用以下代码:
\begin{chronology}[5]{0}{30}{4ex}{\textwidth}
\event[0]{2}{$P_5$} % 2
\event[2]{3}{\color{gray}switch}
\event[3]{5}{$P_4$} % 2
\event[5]{6}{\color{gray}switch}
\event[6]{8}{$P_3$} % 2
\event[8]{9}{\color{gray}switch}
\event[9]{11}{$P_2$} % 2
\event[11]{12}{\color{gray}switch} %%%%%% gap
\event[12]{14}{$P_1$} % 2
\event[14]{15}{\color{gray}switch}
\event[15]{16}{$P_5$} % 1
\event[16]{17}{\color{gray}switch}
\event[17]{19}{$P_4$} % 2
\event[19]{20}{\color{gray}switch}
\event[20]{22}{$P_2$} % 2
\event[22]{23}{\color{gray}switch} %%%%%% gap
\event[23]{25}{$P_1$} % 2
\event[25]{26}{\color{gray}switch}
\event[26]{28}{$P_4$} % 2
\event[28]{29}{\color{gray}switch}
\event[29]{30}{$P_1$} % 1
\end{chronology}
这应该会产生一个完全填充的时间轴,但如下图所示,有两个间隙。可能是什么问题?
截屏:
答案1
该软件包存在错误。chronology
环境中定义了一些计数器和长度,因此多次使用会触发错误。此外,该\event
命令的条件语句\ifx #1e...\else...\fi
似乎没有按照作者的预期执行,并且导致了奇怪的行为。
在下面的代码中,我解决了长度和计数器的多重定义问题(将它们从环境中移除),并且还抑制了条件。这些更改似乎解决了问题,但最好的办法是联系包作者。
修改时必须始终使用可选参数\event
。
\documentclass{article}
\usepackage{chronology}
\newcounter{step}\newcounter{stepstart}\newcounter{stepstop}%
\newcounter{yearstart}\newcounter{yearstop}\newcounter{deltayears}%
\newlength{\xstart}\newlength{\xstop}%
\newlength{\unit}\newlength{\timelinewidth}%
\newsavebox{\timelinebox}%
\renewenvironment{chronology}[5][5]{%
\setcounter{step}{#1}%
\setcounter{yearstart}{#2}\setcounter{yearstop}{#3}%
\setcounter{deltayears}{\theyearstop-\theyearstart}%
\setlength{\unit}{#4}%
\setlength{\timelinewidth}{#5}%
\pgfmathsetcounter{stepstart}%
{\theyearstart+\thestep-mod(\theyearstart,\thestep)}%
\pgfmathsetcounter{stepstop}{\theyearstop-mod(\theyearstop,\thestep)}%
\addtocounter{step}{\thestepstart}%
\begin{lrbox}{\timelinebox}%
\begin{tikzpicture}[baseline={(current bounding box.north)}]%
\draw [|->] (0,0) -- (\thedeltayears*\unit+\unit, 0);%
\foreach \x in {1,...,\thedeltayears}%
\draw[xshift=\x*\unit] (0,-.1\unit) -- (0,.1\unit);%
\addtocounter{deltayears}{1}%
\foreach \x in {\thestepstart,\thestep,...,\thestepstop}{%
\pgfmathsetlength\xstop{(\x-\theyearstart)*\unit}%
\draw[xshift=\xstop] (0,-.3\unit) -- (0,.3\unit);%
\node at (\xstop,0) [below=.2\unit] {\x};}%
}
{%
\end{tikzpicture}%
\end{lrbox}%
\raisebox{2ex}{\resizebox{\timelinewidth}{!}{\usebox{\timelinebox}}}}%
\renewcommand{\event}[3][e]{%
\pgfmathsetlength\xstop{(#2-\theyearstart)*\unit}%
\pgfmathsetlength\xstart{(#1-\theyearstart)*\unit}%
\draw[fill=black,draw=none,opacity=0.5,rounded corners=.2\unit]%
(\xstart,-.2\unit) rectangle%
node[opacity=1,rotate=45,right=.5\unit] {#3} (\xstop,.2\unit);%
}%
\begin{document}
\noindent\begin{chronology}[5]{0}{30}{3ex}{\textwidth}
\event[0]{2}{$P_5$} % 2
\event[2]{3}{\color{gray}switch}
\event[3]{5}{$P_4$} % 2
\event[5]{6}{\color{gray}switch}
\event[6]{8}{$P_3$} % 2
\event[8]{9}{\color{gray}switch}
\event[9]{11}{$P_2$} % 2
\event[11]{12}{\textcolor{gray}{switch}} %%%%%% gap
\event[12]{14}{$P_1$} % 2
\event[14]{15}{\color{gray}switch}
\event[15]{16}{$P_5$} % 1
\event[16]{17}{\color{gray}switch}
\event[17]{19}{$P_4$} % 2
\event[19]{20}{\color{gray}switch}
\event[20]{22}{$P_2$} % 2
\event[22]{23}{\color{gray}switch} %%%%%% gap
\event[23]{25}{$P_1$} % 2
\event[25]{26}{\color{gray}switch}
\event[26]{28}{$P_4$} % 2
\event[28]{29}{\color{gray}switch}
\event[29]{30}{$P_1$} % 1
\end{chronology}
\end{document}
答案2
该问题已在该软件包的 1.1.1 版本中修复。
请注意,自 1.1 版本以来,有一个新的语法,如下所示:
#1 (optional) = stepsize,
#2 = yearstart,
#3 = yearstop,
#4 = postscaledtimelinewidth,
#5 (optional) = prescaledtimelinewidth
示例的代码如下所示:
% arara: pdflatex
\documentclass{article}
\usepackage{chronology}
\begin{document}
\begin{chronology}[5]{0}{30}{\textwidth}[1.2\textwidth]
\event[0]{2}{$P_5$}
\event[2]{3}{\color{gray}switch}
\event[3]{5}{$P_4$}
\event[5]{6}{\color{gray}switch}
\event[6]{8}{$P_3$}
\event[8]{9}{\color{gray}switch}
\event[9]{11}{$P_2$}
\event[11]{12}{\color{gray}switch}
\event[12]{14}{$P_1$}
\event[14]{15}{\color{gray}switch}
\event[15]{16}{$P_5$}
\event[16]{17}{\color{gray}switch}
\event[17]{19}{$P_4$}
\event[19]{20}{\color{gray}switch}
\event[20]{22}{$P_2$}
\event[22]{23}{\color{gray}switch}
\event[23]{25}{$P_1$}
\event[25]{26}{\color{gray}switch}
\event[26]{28}{$P_4$}
\event[28]{29}{\color{gray}switch}
\event[29]{30}{$P_1$}
\end{chronology}
\end{document}
结果是: