在babel
包中,对于每种语言,月份名称已经定义为\month<roman number>name
命令。
我正在寻找一种解决方案,可以仅使用正确的语言为我提供月份名称,babel
并尝试了这个:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[italian, english, french]{babel}
\newcommand{\monthnametoday}[1][\languagename]{{\expandafter\selectlanguage\expandafter{#1}\csname month\romannumeral\month name\endcsname\space -- \today\relax\par}}
\begin{document}
\noindent\monthnametoday (expected: ``septembre'')\\
\monthnametoday[italian] (expected: ``settembre'')\\
{\begin{otherlanguage}{english}
\monthnametoday (expected: ``september'')
\end{otherlanguage}}
\end{document}
不幸的是,结果并不像我期望的那样:/我得到的结果:
如您所见,\today
命令已正确翻译为所选语言。但\monthXXname
宏仍停留在主语言中 :/
有什么方法可以将它们用于此目的吗?怎么用?我查看了文档babel
及其代码,但没有找到任何提示。
干杯
答案1
法语是唯一已经使用此新界面的语言。您必须自己添加其他语言的定义:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[italian, english, french]{babel}
\StartBabelCommands*{italian}{date}
\SetStringLoop{month#1name}{%
gennaio,febbraio,marzo,aprile,maggio,giugno,%
luglio,agosto,settembre,ottobre,novembre,%
dicembre}
\EndBabelCommands
\StartBabelCommands*{english}{date}
\SetStringLoop{month#1name}{%
January,February,March,April,May,June,%
July,August,September,October,November,%
December}
\EndBabelCommands
\newcommand{\monthnametoday}[1][\languagename]{{\expandafter\selectlanguage\expandafter{#1}\csname month\romannumeral\month name\endcsname\space -- \today\relax\par}}
\begin{document}
\noindent\monthnametoday (expected: ``septembre'')\\
\monthnametoday[italian] (expected: ``settembre'')\\
{\begin{otherlanguage}{english}
\monthnametoday (expected: ``september'')
\end{otherlanguage}}
\end{document}
答案2
好的,我找到了一个巧妙的方法,只使用babel
,但它不是使用默认.ldf
文件,而是使用.ini
文件。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{babel} % do not load languages here
\babelprovide[import]{french} % load french .ini file
\babelprovide[import]{english} % load english .ini file
\babelprovide[import, main]{italian} % load italian .ini file, and make it the main language
\newcommand{\monthnametoday}[1][\languagename]{{\expandafter\selectlanguage\expandafter{#1}\csname month\romannumeral\month name\endcsname\space -- \today\relax\par}}
\begin{document}
\noindent\monthnametoday (expected: ``settembre'')\\
\monthnametoday[french] (expected: ``septembre'')\\
{\begin{otherlanguage}{english}
\monthnametoday (expected: ``september'')
\end{otherlanguage}}
\end{document}
非常简单,并且运行完美:)