扩展 \today 为英语而不是印地语

扩展 \today 为英语而不是印地语
  \documentclass{article}
    \usepackage{polyglossia}
    \usepackage[Latin,Devanagari]{ucharclasses}
    \setmainfont{Mangal}
    \newfontfamily{\devanagarifont}{Mangal}
    \newfontfamily{\englishfont}[Ligatures=TeX]{Garamond}
    \setmainlanguage{hindi}
    \setotherlanguage{english}
    \setTransitionsFor{Latin}
      {\hyphenrules{english}\englishfont}
      {\hyphenrules{hindi}\devanagarifont}
    \setTransitionsFor{Devanagari}
      {\hyphenrules{hindi}\devanagarifont}
      {\hyphenrules{english}\englishfont}
    \begin{document}
    \today 
    आज सोमवार है 
    \end{document}

我希望 \today 扩展为 19-04-2021 或 2021 年 4 月 19 日,而不是 2021 年 12 月 19 日,当我使用印地语作为主要语言时就会发生这种情况。但是,如果我选择英语作为主要语言,则印地语不会自动排版,除非将其指定为 \hindi 我也不希望这样。请帮忙

答案1

这个问题比看上去要复杂一些。您可以重新定义\today序言中的宏,使其始终以英语打印日期,但polyglossia随后将其改回\begin{document}使用当前语言。

\AfterEndPreamble为了解决这个问题,您可以使用包中的进行重新定义etoolbox,该操作在的末尾执行\begin{document},因此在重新定义之后polyglossia

Skillmon 评论中的版本\NewCommandCopy\todayORIG\today适用于 2020 年 10 月或更新版本的 LaTeX。如果您有旧版本,可以\LetLtxMacro从包中使用letltxmacro

请注意,您需要将重新定义行 \usepackage{polyglossia},否则不起作用。所以:

\LetLtxMacro{\todayORIG}{\today}
\usepackage{polyglossia}
\AfterEndPreamble{\renewcommand\today{\textenglish{\todayORIG}}}

完整 MWE:

\documentclass{article}
\usepackage{etoolbox}
\usepackage{letltxmacro}
\LetLtxMacro{\todayORIG}{\today}
\usepackage{polyglossia}
\AfterEndPreamble{\renewcommand\today{\textenglish{\todayORIG}}}
\usepackage[Latin,Devanagari]{ucharclasses}
\setmainfont{Noto Serif Devanagari}
\newfontfamily{\devanagarifont}{Noto Serif Devanagari}
\newfontfamily{\englishfont}[Ligatures=TeX]{DejaVu Serif}
\setmainlanguage{hindi}
\setotherlanguage{english}
\setTransitionsFor{Latin}
   {\hyphenrules{english}\englishfont}
   {\hyphenrules{hindi}\devanagarifont}
\setTransitionsFor{Devanagari}
   {\hyphenrules{hindi}\devanagarifont}
   {\hyphenrules{english}\englishfont}

\begin{document}
\today 

आज सोमवार है 
\end{document}

结果:

在此处输入图片描述

(请注意,今天实际上不是星期一,但是没关系)

相关内容