我尝试在使用 datetime2 包时使用瑞典日期格式。我找到了以下链接 https://www.ctan.org/pkg/datetime2-swedish 但我不明白如何调用这个。有人能帮我吗?这就是我想做的事情:
\documentclass[paper=a4,fontsize=11pt]{article}
\usepackage{datetime2}
\begin{document}
\begin{minipage}{1\textwidth}
\begin{flushright}
\Large{ \textbf{ Joe Biden }}
\noindent
\hfill \today
\end{flushright}
\end{minipage}
\end{document}
我想写例如 2016 年 11 月 4 日
从答案和评论中可以看出,这个问题是由于我使用的模板中使用的 temp.cls 文件造成的。虽然它也有不使用这个文件时的问题的答案。
谢谢!
答案1
@daleif 的答案中的评论变得有点复杂,所以如果我尝试在这里将其总结为其他答案的扩展,可能会更容易。
LaTeX 的默认格式为\today
美式格式,格式为“2016 年 11 月 4 日”。例如:
\documentclass{article}
\begin{document}
\today
\end{document}
babel
使用该选项加载的包重新swedish
定义\today
为使用瑞典语形式“2016 年 11 月 4 日”:
\documentclass{article}
\usepackage[swedish]{babel}
\begin{document}
\today
\end{document}
但是,如果您想进行一些细微的修改(例如使用“4e”而不是“4”),则无法自定义此功能,并且也没有提供格式化特定日期的功能。该datetime2
软件包提供了这项额外的功能,但它需要知道您在文档中使用的语言。幸运的是,datetime2
加载该tracklang
软件包可以找出是否使用了babel
或polyglossia
或什么,并且可以告诉datetime2
您已经请求了哪种语言。
因此您只需这样做:
\documentclass{article}
\usepackage[swedish]{babel}
\usepackage[useregional=text]{datetime2}
\begin{document}
\today
\end{document}
这会生成“2016 年 11 月 4 日”(或者您可以useregional=numeric
获取您所在区域格式的数字日期)。感谢软件包tracklang
,datetime2
它知道需要加载datetime2-swedish.ldf
,它提供了瑞典日期样式(swedish
和swedish-numeric
)。这个文件提供了格式化文本日期样式序数部分的datetime2-swedish.ldf
命令。\DTMswedishordinal
swedish
这可以重新定义。例如:
\documentclass{article}
\usepackage[swedish]{babel}
\usepackage[useregional=text]{datetime2}
\renewcommand*{\DTMswedishordinal}[1]{\number#1e}
\begin{document}
\today
\end{document}
这将产生“2016 年 11 月 4 日”。
其他变化包括将语言指定为文档类选项:
\documentclass[swedish]{article}
\usepackage{babel}
\usepackage[useregional=text]{datetime2}
\renewcommand*{\DTMswedishordinal}[1]{\number#1e}
\begin{document}
\today
\end{document}
事实上,datetime2
可以不用 来使用babel
。例如
\documentclass{article}
\usepackage[swedish]{datetime2}
\renewcommand*{\DTMswedishordinal}[1]{\number#1e}
\begin{document}
\today
\end{document}
可能出错的事情:
- 包加载顺序错误。如果是在之后而不是之前
babel
加载的,那么覆盖的日期钩子就太晚了。除非将其作为文档类选项传递或直接传递给 ,否则选择所需的语言也为时已晚。datetime2
datetime2
babel
datetime2
该类或其他包可能会尝试
\today
在文档开头重新定义。例如,以下内容模仿了执行此操作的类:\AtBeginDocument{\def\today{\ifcase\month\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 \space \number \day, \number \year}} \documentclass{article} \usepackage[swedish]{babel} \usepackage[useregional=text]{datetime2} \renewcommand*{\DTMswedishordinal}[1]{\number#1e} \begin{document} \today \end{document}
由于 中的重新定义,现在产生了“2016 年 11 月 4 日”
\AtBeginDocument
。
也有可能在之后加载的另一个包datetime2
会做类似的事情。为了提供一种方法来抵消这种情况,datetime2
提供了\DTMtoday
(1.4 版新增)它是datetime2
的版本\today
。您可以直接使用它或\today
在文档开头重新定义:
\AtBeginDocument{\def\today{\ifcase\month\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 \space \number \day, \number \year}}
\documentclass{article}
\usepackage[swedish]{babel}
\usepackage[useregional=text]{datetime2}
\renewcommand*{\DTMswedishordinal}[1]{\number#1e}
\begin{document}
\DTMtoday
\end{document}
这样会生成“4e nomber 2016”,尽管\today
这又回到了原来的美国风格。或者:
\AtBeginDocument{\def\today{\ifcase\month\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 \space \number \day, \number \year}}
\documentclass{article}
\usepackage[swedish]{babel}
\usepackage[useregional=text]{datetime2}
\renewcommand*{\DTMswedishordinal}[1]{\number#1e}
\begin{document}
\let\today\DTMtoday
\today
\end{document}
如果您有一个datetime2
无法识别的旧版本\DTMtoday
,那么您可以像这样保存并恢复datetime2
的版本:\today
\AtBeginDocument{\def\today{\ifcase\month\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 \space \number \day, \number \year}}
\documentclass{article}
\usepackage[swedish]{babel}
\usepackage[useregional=text]{datetime2}
\let\dtmtoday\today
\renewcommand*{\DTMswedishordinal}[1]{\number#1e}
\begin{document}
\let\today\dtmtoday
\today
\end{document}
事实证明,问题是因为您的类文件temp.cls
正在加载babel
。english
这意味着主要文档语言是英语而不是瑞典语,因此您实际上会遇到类似于以下的情况:
\documentclass[swedish]{article}
\usepackage[english]{babel}
\begin{document}
\today
\end{document}
这会将主要语言设置english
为swedish
辅助语言。 您可以通过在加载文档类之前插入以下行来覆盖此设置:
\PassOptionsToPackage{main=swedish}{babel}
这将确保babel
识别出这swedish
是主要文档语言。
答案2
4e november
你真的像瑞典人那样写吗?在 DK 我们用4. november
这是一个可以运行的示例,但并未提供完全正确的输出。
\documentclass[a4paper,swedish]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[useregional=text]{datetime2}
\begin{document}
\today
\end{document}