与 babel 相关的 datetime2 警告:未安装日期时间语言模块“英语”

与 babel 相关的 datetime2 警告:未安装日期时间语言模块“英语”

当我尝试将 datetime2 包与 babel(英语)结合使用时,我在日志中收到以下警告:

软件包 datetime2 警告:输入行 1913 上未安装日期时间语言模块‘english’。

这很奇怪,原因如下:

  1. 我想使用 datetime2 的默认设置,ISO 样式格式 (yyyy-mm-dd) 来输出我的日期。这不需要额外的软件包。
  2. Babel 似乎将默认的 ISO 样式格式重写为本地化的英语设置,这不是我想要的。
  3. 尽管它做了一些我不想做的事情,但它还是做了正确地。那么为什么 datetime2 仍然抱怨缺少模块?
  4. datetime2 指定的行不存在。我的 mwe 不到 20 行,它仍然指定第 1913 行。
  5. ETA:如果我在 babel 之前加载 datetime2,模块警告就会消失。但是,datetime2 文档建议加载 datetime2babel 以防止 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}

以下是我得到的结果:

我得到了什么

但是这是我想要的(只有通过不加载 babel 才能得到): 我想要的是

答案1

本质上,问题在于“英语”这一语言的规范。英语有很多变体,因此根据DateTime2 手册,它将使用默认格式(参见第 7 页和第 8 页)。如果您希望使用英语,而不是“英国”或其他方言,则需要提供其他具体信息,否则您将收到警告。请注意,您在/usepackageBabel 之后设置了 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)。

相关内容