如何使用“babel”中的“\monthiname”、“\monthiiname”等命令?

如何使用“babel”中的“\monthiname”、“\monthiiname”等命令?

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}

非常简单,并且运行完美:)

在此处输入图片描述

相关内容