当我尝试将 datetime2 包与 babel(英语)结合使用时,我在日志中收到以下警告:
软件包 datetime2 警告:输入行 1913 上未安装日期时间语言模块‘english’。
这很奇怪,原因如下:
- 我想使用 datetime2 的默认设置,ISO 样式格式 (yyyy-mm-dd) 来输出我的日期。这不需要额外的软件包。
- Babel 似乎将默认的 ISO 样式格式重写为本地化的英语设置,这不是我想要的。
- 尽管它做了一些我不想做的事情,但它还是做了正确地。那么为什么 datetime2 仍然抱怨缺少模块?
- datetime2 指定的行不存在。我的 mwe 不到 20 行,它仍然指定第 1913 行。
- ETA:如果我在 babel 之前加载 datetime2,模块警告就会消失。但是,datetime2 文档建议加载 datetime2后babel 以防止 babel 覆盖其默认设置。无论如何它都会这样做。
请帮忙?
我提供了一个 mwe(我正在使用 xelatex):
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage{datetime2}
% ---------------------------------------------------------------------------- %
\begin{document}
\tableofcontents
\section{Setting the Date}
\subsection{This contains a date}
Here I'm setting a date.
\today
\end{document}
以下是我得到的结果:
答案1
本质上,问题在于“英语”这一语言的规范。英语有很多变体,因此根据DateTime2 手册,它将使用默认格式(参见第 7 页和第 8 页)。如果您希望使用英语,而不是“英国”或其他方言,则需要提供其他具体信息,否则您将收到警告。请注意,您在/usepackage
Babel 之后设置了 DateTime2 指令,DateTime2 将 Babel 中的“英语”作为语言,而您已将其设置为“英语”。
因此,要做您想做的事情,即获取您所说的“ISO 样式格式”的日期 (yyyy-mm-dd),您需要用 替换\usepackage{datetime2}
最小工作示例 (mwe) 中的指令\usepackage[style=iso,showisoZ=false]{datetime2}
。
要分解选项,style=iso 会为您提供 ISO 格式,showisoZ=false 会停止“Z”(如果您输入了其他选项)并将时区设置为 UTC 格式 - 请参阅手动的(但在我建议的编辑中它实际上并不是必需的 - 你可以省略那部分)。
第 22 页手动的显示替代方案,即在 mwe\DTMsetdatestyle{iso}
之前的行中添加。\today
我不确定你在 4 中的观点,但我怀疑它实际上是在其代码中进一步报告该问题(有点像编程中的“堆栈跟踪”),因为这似乎是软件处于错误状态的常见响应。
关于你的第 5 点,这是正确的 - 你应该在 Babel 之后加载 DateTime2。但是,正如第 9 页所示,手动的, 你能之前就做好(但在这个例子中,手册使用的是 Polyglossia,而不是 Babel)。