![显示日期索引](https://linux22.com/image/383855/%E6%98%BE%E7%A4%BA%E6%97%A5%E6%9C%9F%E7%B4%A2%E5%BC%95.png)
我写了一个文档,讲述了一个长达几个月的故事,我想在最后显示主要日期的索引。例如,我想输入类似(法语格式):的内容On January the first \indexdate{01/01/2018}...
,因此最终的索引将如下所示。
- 2018
January, 1st : 2
January, 3rd : 4, 6
January, 21th : 12-13, 15
有没有一个包可以让我做这样的事情?或者,是否有可能创建这样的索引而不必手动计算时间戳或每个日期的排序?谢谢!
答案1
概念证明应该可以轻松适应您的目的和语言。
\documentclass{article}
\usepackage{imakeidx}
\usepackage{etoolbox}
\usepackage[english]{datetime2}
\usepackage[level]{fmtcount}
\makeindex
\newcommand{\indexdate}[1]{% date in format MM-DD
\index{#1@\computedate{#1}}%
}
\makeatletter
\newrobustcmd{\computedate}[1]{\compute@date#1\@nil}
\def\compute@date#1-#2\@nil{%
\DTMenglishmonthname{#1}\space\ordinalnum{#2}%
}
\makeatother
\begin{document}
This happened on January 1st\indexdate{01-01}.
This happened on July 4th\indexdate{07-04}.
This happened on December 25th\indexdate{12-25}.
\clearpage
This happened on October 31st\indexdate{10-31}.
This happened on January 1st\indexdate{01-01}.
This happend on January 13th\indexdate{01-13}.
\printindex
\end{document}
实际上没有必要跟\indexdate
在日期后面,这里这样做只是为了方便验证输出。
为了正确排序,以数字格式(两位数)表示日期非常重要。
如果标题被修改为
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{imakeidx}
\usepackage{etoolbox}
\usepackage[french]{datetime2}
\usepackage[level]{fmtcount}
\makeindex
\newcommand{\indexdate}[1]{% date in format MM-DD
\index{#1@\computedate{#1}}%
}
\makeatletter
\newrobustcmd{\computedate}[1]{\compute@date#1\@nil}
\def\compute@date#1-#2\@nil{%
\DTMfrenchordinal{#2} \DTMfrenchmonthname{#1}%
}
\makeatother
与之前相同的文档主体将产生