如何插入下个月,如/今天?

如何插入下个月,如/今天?

我想创建一个命令来插入下个月(相对于当前月份),如下所示:

\command-> 十一月

类似于\today

  • 该命令不能硬编码,因为文档在语言之间切换(与 的工作方式相同\today)。
  • 我想在序言中使用此命令。
  • 输出应该是本地化的,即在其他地方\today应该像往常一样运行。

做到这一点的最好方法是什么?

答案1

得到这样的工作:

\usepackage{datetime}
\usepackage{advdate}

\newdateformat{mydate}{\monthname[\THEMONTH]}

(...)

{\AdvMonth{1} \mydate \today}

答案2

这是一个使用datetime2一些模块化算法的解决方案。

\documentclass{article}
\usepackage[french,english]{babel}
\usepackage[T1]{fontenc}
\usepackage[calc]{datetime2}
\ExplSyntaxOn
\NewDocumentCommand{\nextmonth} {} {
\int_eval:n {12 - \int_mod:nn {\month}{12}}{=}{0}}
\DTMmonthname{\nxtmnth:n}}
\ExplSyntaxOff
\begin{document}
Today is: \today

Next month is \nextmonth
\selectlanguage{french}

En français: \nextmonth

\end{document}

答案3

要进行模十二代数运算,可以使用 expl3,\int_mod:nn其中结果的绝对值小于模的绝对值,并且结果的符号与要计算整数余数的表达式相同:

可能提供计算结果

12 - (
         (
             % With \int_mod:nn for doing the mod-12-calculation this
             % expression yields a non-negative number...
             12 - ( 
                      % ... because this is in range -11..+11 :
                      (   ⟨number of current month⟩
                        + ⟨amount of months to add or subtract⟩
                      ) mod 12 
                  )
         ) mod 12  
         % With \int_mod:nn the result of mod-12-calculation of a
         % non-negative number is in range 0..11.
     )

datetime2's\DTMmonthname可以解决问题:

\documentclass{article}
\usepackage[french,english]{babel}
\usepackage[T1]{fontenc}
\usepackage[calc]{datetime2}
\ExplSyntaxOn
\NewDocumentCommand{\MonthInRelationToCurrentMonth} {m} {
  \exp_args:Nf \DTMmonthname
               {\int_eval:n {12-\int_mod:nn {12-(\int_mod:nn{\month+(#1)}{12})}{12}}}
}
\ExplSyntaxOff
\newcommand\NextMonth{\MonthInRelationToCurrentMonth{1}}%
\newcommand\PreviousMonth{\MonthInRelationToCurrentMonth{-1}}%
\newcommand\ThisMonth{\MonthInRelationToCurrentMonth{0}}%

\begin{document}
\bigskip\hrule\bigskip
\noindent In English
\bigskip\hrule\bigskip
\noindent 
Today is \today.\\
Previous month was \PreviousMonth.\\
This month is \ThisMonth.\\
Next month will be \NextMonth.

\bigskip\hrule\bigskip

\noindent 
This month is \MonthInRelationToCurrentMonth{0}.\\
This month is  \MonthInRelationToCurrentMonth{+0}.\\
One month later will be \MonthInRelationToCurrentMonth{+1}.\\
Two months later will be \MonthInRelationToCurrentMonth{2}.\\
Three months later will be \MonthInRelationToCurrentMonth{3}.\\
Four months later will be \MonthInRelationToCurrentMonth{4}.\\
Five months later will be \MonthInRelationToCurrentMonth{+5}.\\
Six months later will be \MonthInRelationToCurrentMonth{+6}.\\
Seven months later will be \MonthInRelationToCurrentMonth{7}.\\
Eight months later will be \MonthInRelationToCurrentMonth{8}.\\
Nine months later will be \MonthInRelationToCurrentMonth{9}.\\
Ten months later will be \MonthInRelationToCurrentMonth{10}.\\
Eleven months later will be \MonthInRelationToCurrentMonth{11}.\\
Twelve months later will be \MonthInRelationToCurrentMonth{12}.\\
Thirteen months later will be \MonthInRelationToCurrentMonth{13}.\\
Twenty months later will be \MonthInRelationToCurrentMonth{+20}.

\bigskip\hrule\bigskip

\noindent 
This month is \MonthInRelationToCurrentMonth{0}.\\
This month is  \MonthInRelationToCurrentMonth{-0}.\\
One month earlier was \MonthInRelationToCurrentMonth{-1}.\\
Two months earlier was \MonthInRelationToCurrentMonth{-2}.\\
Three months earlier was \MonthInRelationToCurrentMonth{-3}.\\
Four months earlier was \MonthInRelationToCurrentMonth{-4}.\\
Five months earlier was \MonthInRelationToCurrentMonth{-5}.\\
Six months earlier was \MonthInRelationToCurrentMonth{-6}.\\
Seven months earlier was \MonthInRelationToCurrentMonth{-7}.\\
Eight months earlier was \MonthInRelationToCurrentMonth{-8}.\\
Nine months earlier was \MonthInRelationToCurrentMonth{-9}.\\
Ten months earlier was \MonthInRelationToCurrentMonth{-10}.\\
Eleven months earlier was \MonthInRelationToCurrentMonth{-11}.\\
Twelve months earlier was \MonthInRelationToCurrentMonth{-12}.\\
Thirteen months earlier was \MonthInRelationToCurrentMonth{-13}.\\
Twenty months earlier was \MonthInRelationToCurrentMonth{-20}.

\newpage
\selectlanguage{french}

\bigskip\hrule\bigskip
\noindent En français:
\bigskip\hrule\bigskip
\noindent 
Aujourd'hui, c'est \today.\\
Le mois précédent était \PreviousMonth.\\
Ce mois-ci est \ThisMonth.\\
Le mois prochain sera \NextMonth.

\bigskip\hrule\bigskip

\noindent 
Ce mois-ci, c'est \MonthInRelationToCurrentMonth{0}.\\
Ce mois-ci, c'est \MonthInRelationToCurrentMonth{+0}.\\
Un mois plus tard sera \MonthInRelationToCurrentMonth{+1}.\\
Deux mois plus tard sera \MonthInRelationToCurrentMonth{2}.\\
Trois mois plus tard sera \MonthInRelationToCurrentMonth{3}.\\
Quatre mois plus tard sera \MonthInRelationToCurrentMonth{4}.\\
Cinq mois plus tard sera \MonthInRelationToCurrentMonth{+5}.\\
Six mois plus tard sera \MonthInRelationToCurrentMonth{+6}.\\
Sept mois plus tard sera \MonthInRelationToCurrentMonth{7}.\\
Huit mois plus tard sera \MonthInRelationToCurrentMonth{8}.\\
Neuf mois plus tard sera \MonthInRelationToCurrentMonth{9}.\\
Dix mois plus tard plus tard sera \MonthInRelationToCurrentMonth{10}.\\
Onze mois plus tard plus tard sera \MonthInRelationToCurrentMonth{11}.\\
Douze mois plus tard plus tard sera \MonthInRelationToCurrentMonth{12}.\\
Treize mois plus tard plus tard sera \MonthInRelationToCurrentMonth{13}.\\
Vingte mois plus tard plus tard sera \MonthInRelationToCurrentMonth{+20}.

\bigskip\hrule\bigskip

\noindent 
Ce mois-ci, c'est \MonthInRelationToCurrentMonth{0}.\\
Ce mois-ci, c'est \MonthInRelationToCurrentMonth{+0}.\\
Un mois plus tôt, c'était \MonthInRelationToCurrentMonth{-1}.\\
Deux mois plus tôt, c'était \MonthInRelationToCurrentMonth{-2}.\\
Trois mois plus tôt, c'était \MonthInRelationToCurrentMonth{-3}.\\
Quatre mois plus tôt, c'était \MonthInRelationToCurrentMonth{-4}.\\
Cinq mois plus tôt, c'était \MonthInRelationToCurrentMonth{-5}.\\
Six mois plus tôt, c'était \MonthInRelationToCurrentMonth{-6}.\\
Sept mois plus tôt, c'était \MonthInRelationToCurrentMonth{-7}.\\
Huit mois plus tôt, c'était \MonthInRelationToCurrentMonth{-8}.\\
Neuf mois plus tôt, c'était \MonthInRelationToCurrentMonth{-9}.\\
Dix mois plus tôt, c'était \MonthInRelationToCurrentMonth{-10}.\\
Onze mois plus tôt, c'était \MonthInRelationToCurrentMonth{-11}.\\
Douze mois plus tôt, c'était \MonthInRelationToCurrentMonth{-12}.\\
Teize mois plus tôt, c'était \MonthInRelationToCurrentMonth{-13}.\\
Vingte mois plus tôt, c'était \MonthInRelationToCurrentMonth{-20}.

\end{document}

在此处输入图片描述

相关内容