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 年。

當我嘗試使用以下方法:

    \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-06)

無論如何,chronos現在可以更輕鬆地完成此操作:

      date format={ B d, Y},

格式中的每個字元要么被轉換為日期格式的元素,要么按原樣傳遞。這包括標點符號和空格。 (請注意,宏等在這裡不起作用,因為宏將被分解並逐個標記地「翻譯」。)

格式代碼大部分是 GNUdate指令提供的格式代碼的子集,還有一些與 GNU 無關的附加內容。

  • a簡短的工作日名稱,例如Mon
  • A工作日的完整名稱,例如Monday
  • b簡短的月份名稱,例如Jan
  • B完整的月份名稱,例如January
  • d一個月中的某一天,例如23
  • E時代例如BCECE
  • m月份數例如01
  • q如果年份是 BCE,則減去
  • Q如果年份是 BCE,則減去;
  • y年份的最後兩位數字,例如66
  • Y年例如1066

基本上,這自訂了用於排版事件日期的程式碼。此格式的精簡版本還可用於自訂時間軸本身上年份標籤的外觀。或者,可以在時間軸的每一端添加時代標籤,以避免包含CEBCE包含每年的混亂。

所以時間軸可以排版如下:

\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

相關內容