年表添加任意间隙

年表添加任意间隙

我正在尝试使用包年表在我的文档中显示时间线,但是它却出现了奇怪的情况。

我正在使用以下代码:

\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}

结果是:

在此处输入图片描述

相关内容