从包含日期的参数中提取年份

从包含日期的参数中提取年份

可能重复:
我该如何分割约会?

有人知道如何从自己的宏的参数中的日期中提取年份吗?

即,

\themacro#1{...}

其中#1包含已经采用格式yyyy或采用格式的日期dd.mm.yyyy\themacro将转换为纯文本yyyy...

我希望我已经说清楚了,好吧,简单地说,我只需要从日期中提取年份(如果需要提取的话)。

答案1

user1189687 已经提出了一个我认为更好的解决方案,但是由于我已经开始写这篇文章,如果您想要一个简单的 tex 解决方案,那么这里是:

这里的重点是要认识到您是处于第一种情况还是另一种情况。如果您知道输入的格式,那么做到这一点就很简单。但在这里,显然您不知道。

所以我会这样做:

\makeatletter

\def\@themacro #1.#2\end@themacro{%
  \def\@tempyr{#1}%
  \def\@temprem{#2}%
}%
%
\def\themacro #1 {%
  \let\day\relax%
  \let\month\relax%
  \let\year\relax%
  \let\@tempyr\relax%
  \let\@temprem\relax%
  \@themacro#1.\relax\end@themacro% get day or year
  \if\relax\@temprem\relax%
    \if\relax\@tempyr\relax%
      \GenericError{}{Wrong date format}{}{}% Manage the error
    \else%
      \edef\year{\expandafter\noexpand\@tempyr}%
    \fi%
  \else%
    \edef\day{\expandafter\noexpand\@tempyr}%
    \expandafter\@themacro\@temprem\end@themacro% get month
    \if\relax\@temprem\relax%
      \GenericError{}{Wrong date format}{}{}% Manage the Error
    \else%
      \edef\month{\expandafter\noexpand\@tempyr}%
      \expandafter\@themacro\@temprem\end@themacro% get year
      \if\relax\@temprem\relax%
        \edef\year{\expandafter\noexpand\@tempyr}%
      \else%
        \GenericError{}{Wrong date format}{}{}% Manage the Error
      \fi%
    \fi%
  \fi%
}%
\makeatother%

此解决方案的优点是,您可以根据需要检测错误的语法并进行回退或抛出错误。

哦,我差点忘了......您当然会得到年份作为替换文本\year

如果它们存在,您还可以获得\day\month

答案2

\StrRight在包装内试用xstring

\documentclass{article}

\usepackage{xstring}
\def\getYear#1{\StrRight{#1}{4}}

\begin{document}

\noindent\getYear{12.12.2012}\\
\getYear{2012}

\end{document}

结果:

在此处输入图片描述

相关内容