我希望日历日期的格式为 DD.MM.YYYY
因为我来自德国,所以我使用\usepackage[ngerman]{babel}
。babel
这会破坏我对 的重新定义\today
以使用前导零,我不知道为什么我无法重新定义它。如果babel
被注释掉,它就可以正常工作。但可以定义一个产生所需格式的新命令,请参阅下面的 MWE。有人能解释一下为什么不能重新定义吗\today
?重新定义它是否安全,或者我是否可以分解一些依赖于 的东西,\today
这样会更明智\todayx
?
平均能量损失
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\newcommand{\leadingzero}[1]{\ifnum #1<10 0\the#1\else\the#1\fi}
\renewcommand{\today}{\leadingzero{\day}.\leadingzero{\month}.\the\year}
\newcommand{\todayx}{\leadingzero{\day}.\leadingzero{\month}.\the\year}
\begin{document}
\today \\
\todayx
\end{document}
答案1
babel
在开始时就进行定义\begin{document}
,因此即使\today
重新定义后 \usepackage{babel}
这还不够,但将其放在\AtBeginDocument
- 钩子中就可以了。这不需要额外的软件包(尽管有很好的软件包,例如datetime
或datetime2
!)
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\newcommand{\leadingzero}[1]{\ifnum #1<10 0\the#1\else\the#1\fi}
\AtBeginDocument{%
\renewcommand{\today}{\leadingzero{\day}.\leadingzero{\month}.\the\year}
\newcommand{\todayx}{\leadingzero{\day}.\leadingzero{\month}.\the\year}
}
\begin{document}
\parindent=0em
\today
\todayx
\end{document}
答案2
您可以datetime
使用ddmmyyyy
选项和\renewcommand{\dateseparator}{.}
分隔符来加载包。
输出
代码
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage[ddmmyyyy]{datetime}
\renewcommand{\dateseparator}{.}
\setlength{\parindent}{0cm}
\newcommand{\leadingzero}[1]{\ifnum #1<10 0\the#1\else\the#1\fi}
%\renewcommand{\today}{\leadingzero{\day}.\leadingzero{\month}.\the\year}
\newcommand{\todayx}{\leadingzero{\day}.\leadingzero{\month}.\the\year}
\begin{document}
Today: \today
Todayx: \todayx
\end{document}
答案3
为了完整起见,下面是datetime2
解决方案,但请注意,虽然它使用了一种基本数字样式,但它也需要datetime2-german
(隐式加载)以防止干扰babel
。
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage[style=ddmmyyyy,datesep=.]{datetime2}
\begin{document}
\today
\end{document}
生成: