chronosys 时间轴,“月日,年”而不是“日月年”以及完整数字日期问题

chronosys 时间轴,“月日,年”而不是“日月年”以及完整数字日期问题

对于以下内容:

\documentclass{article}
\usepackage{chronosys}
\catcode`\@=11
\def\chron@selectmonth#1{\ifcase#1\or January\or February\or March\or April\or%
 May\or June\or July\or August\or September\or October\or November\or December\fi}

\begin{document}

    \startchronology[startyear=15,stopyear=16]

\chronoevent{15/03/15}{Assassination of Caesar} 

     \stopchronology 

\end{document}

生成:

在此处输入图片描述

时间线事件是否可以采用月日年格式,例如 2015 年 3 月 15 日?

此外,我无法让这个时间线反映出 2015 年至 2016 年的情况。相反,我似乎只能在一端使用“15”,在另一端使用“16”。

当我尝试使用时:

    \startchronology[startyear=2015,stopyear=2016]

该计划在时间顺序上根本没有反映任何日期。

chronosys 包文档,对我来说,似乎没有什么帮助。

谢谢,如果我被困在目前包本身的日期格式中,我将很感激这些信息。

答案1

我不会对您的第一个问题发表评论,因为@JP-Ellis 已经完美地回答了这个问题。但是修补代码以更改日期格式并不难,尽管代码chronosys有点混乱。@JP-Ellis 已经找到了正确的文件和行,所以这里有一个补丁来更改日期格式。

\documentclass{article}
\usepackage{chronosys}
\usepackage{etoolbox}

\makeatletter\catcode`\!=11
\def\chron@selectmonth#1{\ifcase#1\or January\or February\or March\or April\or%
 May\or June\or July\or August\or September\or October\or November\or December\fi}

\patchcmd{\dochronoevent}{%
\if!chreventdate\hbox to\z@{%
  \hss \if!chreventifcolorbox \expandafter\!chreventcolorbox\fi
  {\!chr@eventdatestyle{%
    \if!chreventspecifiedday %
      {\!chr@eventdatesstyle{\!chreventday}}\!chr@eventdatesseparation
    \fi
  {\!chr@eventdatesstyle{%
    \if!chreventspecifiedmonth 
      \if!chreventconversionmonth\expandafter \chron@selectmonth
      \fi 
      \!chreventmonth
    \fi
    }%
  }%
  \if!chreventspecifiedmonth\if!chreventyear \!chr@eventdatesseparation\fi\fi 
  \if!chreventyear{\!chr@eventdatesstyle{\!chreventyear}}\fi%
  }}%
  \hss
}%
\fi
}{%
\if!chreventdate\hbox to\z@{%
  \hss \if!chreventifcolorbox \expandafter\!chreventcolorbox\fi
  {\!chr@eventdatesstyle{%
    \if!chreventspecifiedmonth 
      \if!chreventconversionmonth\expandafter\chron@selectmonth
      \fi 
      \!chreventmonth\!chr@eventdatesseparation%
    \fi
    }%
  {\!chr@eventdatestyle{%
    \if!chreventspecifiedday%
      {\!chr@eventdatesstyle{\!chreventday}},%
    \fi%
  }%
  \if!chreventspecifiedmonth\if!chreventyear\!chr@eventdatesseparation\fi\fi 
  \if!chreventyear{\!chr@eventdatesstyle{\!chreventyear}}\fi%
  }}%
  \hss
}%
\fi
}{%
\message{Patching chronosys successful.}%
}{%
\message{Patching chronosys failed.}%
}
\makeatother


\begin{document}

\startchronology[startyear=2015,stopyear=2016]
\chronoevent{15/03/2015}{Assassination of Caesar} 
\stopchronology 

\end{document}

输出:

时间系统

答案2

正如我在上面的评论中提到的,修改日期看起来会很困难,因为chronosys似乎没有提供任何方法来实现。因此,唯一的方法是修改包本身的一部分(据我所知,日期的打印从 的第 513 行左右开始chronosyschr.tex,尽管在我看来这不必要地复杂)。

现在关于没有出现的事件,这似乎只是因为该程序包期望整整一年,也就是说,它期望15/03/2015否则它将日期记录为第 15 年:

\documentclass{article}
\usepackage{chronosys}

\makeatletter
\def\chron@selectmonth#1{\ifcase#1\or January\or February\or March\or April\or%
  May\or June\or July\or August\or September\or October\or November\or December\fi}

\begin{document}
\startchronology[startyear=2010,stopyear=2016]
  \chronoevent{4/7/2012}{Discovery of the Higgs boson}
\stopchronology
\startchronology[startyear=10,stopyear=16]
  \chronoevent{19/8/14}{Augustus, the first Roman emperor, dies and is declared to be a god}
\stopchronology 
\end{document}

输出

答案3

更多信息chronos请参见这个答案

chronos 的当前版本可在以下位置获得:
https://tex.stackexchange.com/a/342699/ (2016年12月6日)

不管怎样,chronos现在可以更轻松地完成此操作:

      date format={ B d, Y},

格式中的每个字符要么被转换为日期格式的一个元素,要么按原样传递。这包括标点符号和空格。(请注意,宏等在这里不起作用,因为宏将被分解并逐个标记地“翻译”。)

格式代码大部分是 GNUdate命令提供的格式代码的子集,其中有一些与 GNU 无关的额外代码。

  • a简短的星期名称,例如Mon
  • A完整的星期名称,例如Monday
  • b短月份名称,例如Jan
  • B完整月份名称,例如January
  • d月中的某天,例如23
  • E时代例如BCECE
  • m月份数,例如01
  • q如果年份是公元前则减去
  • Q如果年份是公元前,则减去;
  • y年份的最后两位数字,例如66
  • Y例如年1066

基本上,这会自定义用于排版事件日期的代码。此格式的精简版本也可用于自定义时间线上年份标签的外观。也可以在时间线的每一端添加时代标签,以避免每年都包含CE或出现混乱。BCE

因此时间线可以排版如下:

\begin{tikzpicture}
  [
    chronos={%
      start date=2015-01-01,
      end date=2016-01-01,
      timeline height=2.5mm,
      timeline width=100mm,
      timeline line={shorten >=-10mm, -{Triangle Cap[length=10mm]}},
      timeline years=above,
      date format={ B d, Y},
    }
  ]
  \chronosevent{2015-03-15}{Assassination of Caesar}
\end{tikzpicture}

生产

时间线

默认情况下不再有年份零,但如果需要,可以使用 恢复year zero

相关内容