\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}
结果:
(请注意,今天实际上不是星期一,但是没关系)