为什么 memoir 在打印 \thedate 时不尊重 babel

为什么 memoir 在打印 \thedate 时不尊重 babel

为什么无法识别其自身之外的memoir特定语言日期(带有) ?\today\maketitle

当我在之后添加这样的元数据时,它工作正常\begin{document},但我以前从未这样做过(我应该这样做吗?如果是,为什么?)

请参阅以下 MWE

\documentclass{memoir}
\usepackage[brazil]{babel}
\title{A title}
\author{A. Uthor}
\date{\today}
\begin{document}
\maketitle

thedate: \thedate
\end{document}

在此处输入图片描述

与(之前article需要在这里打印因为之后会被删除)相反:@date\maketitle

\documentclass{article}
\usepackage[brazil]{babel}
\makeatletter
\newcommand\thedate{\@date}
\makeatother
\title{A title}
\author{A. Uthor}
\date{\today}
\begin{document}
thedate: \thedate

\maketitle
\end{document}

在此处输入图片描述

答案1

memoir\thedate通过“冻结”论证来定义\date 在发布声明的此刻

\date出现在序言中时,尚未选择任何语言(因此\today扩展为美式英语格式的当前日期)。 仅在处理 时才会将语言切换为巴西葡萄牙语\begin{document}

解决方案:

\documentclass{memoir}
\usepackage[brazil]{babel}
\begin{document}

\title{A title}
\author{A. Uthor}
\date{\today}

\maketitle

thedate: \thedate
\end{document}

或者(但我不建议这样做)

\documentclass{memoir}
\usepackage[brazil]{babel}

\title{A title}
\author{A. Uthor}
\selectlanguage{brazil}
\date{\today}

\begin{document}

\maketitle

thedate: \thedate
\end{document}

在此处输入图片描述

更激烈的措施是修补该\date命令以延迟定义\thedate

\documentclass{memoir}
\usepackage[brazil]{babel}
\usepackage{etoolbox}

\makeatletter
\patchcmd\date
 {\protected@xdef\thedate{#1}}
 {\AtBeginDocument{\protected@xdef\thedate{#1}}}
 {}{}
\makeatother

\title{A title}
\author{A. Uthor}
\date{\today}

\begin{document}

\maketitle

thedate: \thedate
\end{document}

相关内容