我正在排版一本包含每日冥想练习的书。一共有 366 个练习(每天一个,包括 2 月 29 日)。
章节标题的默认样式是在章节标题上显示文本“第 3 章”(例如)。
我希望将“第 3 章”替换为与练习相对应的年份日期,在这种情况下为“1 月 3 日”。继续前进,它将到达“第 31 章”=>“1 月 31 日”,然后是“第 32 章”=>“2 月 1 日”。
如果有一种巧妙的方法来生成章节名称,这样我就不必输入 366 个章节名称,那就太酷了,但我也可以接受对它们进行硬编码。
我最关心的是它在目录中如何显示。我希望它显示“日期 章节标题 页码”。
最后,让事情复杂化的是,在标有日期的章节之前和之后有一些带标题的材料,我想将它们显示在目录中,但没有与之关联的日期(之前是简介和关于,之后是附录和词汇表)。
我不确定它是否相关,但每个章节都是一页。
以下是我目前所掌握的信息:
\documentclass[openany]{book}
\usepackage{advdate}
\usepackage{datetime}
\newdateformat{noyear}{\monthname[\THEMONTH] \THEDAY
\SetDate[01/01/2020] % January 1 in a year with a leap day
\renewcommand{\chaptername}{}
\renewcommand{\thechapter}{\noyear\today \AdvanceDate[1]}
\begin{document}
\maketitle
\tableofcontents
\chapter*{Introduction}
\addcontentsline{toc}{chapter}{Introduction}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter*{Appendices}
\addcontentsline{toc}{chapter}{Appendices}
\end{document}
我遇到了两个问题:
- 目录中的章节标题上方显示有“1 月 1 日”文字。
- 日期没有增加。我尝试将其包含
\AdvanceDate[1]
在正文中(每次调用之后\chapter
),但这只会增加章节标题的日期,而不会增加目录中的日期。
答案1
projlib-datetime
作为软件包的一部分,软件包ProjLib
提供了一个命令(如果您愿意,如果名称未被使用,则\ProjLibDate
名称也有效),用于将数字日期时间字符串转换为自然语言。例如,在您的例子中,您可以使用(也有效)来获取“1 月 1 日”。\TheDate
\ProjLibDate{01-01}
1-1
因此,只需定义一个宏,将数字转换80
为相应的日期字符串(本例中为)3-20
,并将其翻译成自然语言。如下所示(和\GetDateStringFromNumber
之间的代码)。\ExplSyntaxOn
\ExplSyntaxOff
其余部分基本上就是文档的设置。我只添加了一点titletoc
以确保日期和标题在目录中不会重叠。
以下是完整的代码。
\documentclass{book}
\usepackage{projlib-datetime}
\ExplSyntaxOn
\int_new:N \g_kerkeslager_month_int
\int_new:N \g_kerkeslager_day_int
\bool_new:N \g_kerkeslager_need_update_bool
\cs_new:Nn \__kerkeslager_get_date_update:n
{
\bool_if:NT \g_kerkeslager_need_update_bool
{
\int_compare:nNnTF { \g_kerkeslager_day_int } > { #1 }
{
\int_gincr:N \g_kerkeslager_month_int
\int_gsub:Nn \g_kerkeslager_day_int { #1 }
}
{
\bool_set_false:N \g_kerkeslager_need_update_bool
}
}
}
\NewDocumentCommand \GetDateStringFromNumber { m }
{
\int_gset:Nn \g_kerkeslager_day_int { #1 }
\int_gset:Nn \g_kerkeslager_month_int { 1 }
\bool_set_true:N \g_kerkeslager_need_update_bool
\__kerkeslager_get_date_update:n { 31 }
\__kerkeslager_get_date_update:n { 29 }
\__kerkeslager_get_date_update:n { 31 }
\__kerkeslager_get_date_update:n { 30 }
\__kerkeslager_get_date_update:n { 31 }
\__kerkeslager_get_date_update:n { 30 }
\__kerkeslager_get_date_update:n { 31 }
\__kerkeslager_get_date_update:n { 31 }
\__kerkeslager_get_date_update:n { 30 }
\__kerkeslager_get_date_update:n { 31 }
\__kerkeslager_get_date_update:n { 30 }
\__kerkeslager_get_date_update:n { 31 }
\ProjLibDate { \int_use:N \g_kerkeslager_month_int - \int_use:N \g_kerkeslager_day_int }
}
\ExplSyntaxOff
\usepackage{titletoc}
\titlecontents{chapter}
[8em]
{}
{\contentslabel{7.5em}}
{\hspace*{-7.5em}}
{\titlerule*[1pc]{}\contentspage}
\renewcommand{\chaptername}{}
\renewcommand{\thechapter}{\GetDateStringFromNumber{\arabic{chapter}}}
\begin{document}
\tableofcontents
\chapter*{Introduction}
\addcontentsline{toc}{chapter}{Introduction}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter{Ham}
\chapter{Spam}
\chapter{Eggs}
\chapter*{Appendices}
\addcontentsline{toc}{chapter}{Appendices}
\end{document}
另外,例如,如果您说法语,添加\usepackage[french]{babel}
,您将获得: