在 datetime2 中使用瑞典格式

在 datetime2 中使用瑞典格式

我尝试在使用 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软件包可以找出是否使用了babelpolyglossia或什么,并且可以告诉datetime2您已经请求了哪种语言。

因此您只需这样做:

\documentclass{article}

\usepackage[swedish]{babel}
\usepackage[useregional=text]{datetime2}

\begin{document}
\today
\end{document}

这会生成“2016 年 11 月 4 日”(或者您可以useregional=numeric获取您所在区域格式的数字日期)。感谢软件包tracklangdatetime2它知道需要加载datetime2-swedish.ldf,它提供了瑞典日期样式(swedishswedish-numeric)。这个文件提供了格式化文本日期样式序数部分的datetime2-swedish.ldf命令。\DTMswedishordinalswedish

这可以重新定义。例如:

\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加载的,那么覆盖的日期钩子就太晚了。除非将其作为文档类选项传递或直接传递给 ,否则选择所需的语言也为时已晚。datetime2datetime2babeldatetime2
  • 该类或其他包可能会尝试\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正在加载babelenglish这意味着主要文档语言是英语而不是瑞典语,因此您实际上会遇到类似于以下的情况:

\documentclass[swedish]{article}
\usepackage[english]{babel}

\begin{document}
\today
\end{document}

这会将主要语言设置englishswedish辅助语言。 您可以通过在加载文档类之前插入以下行来覆盖此设置:

\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}

相关内容