從包含日期的參數中提取年份

從包含日期的參數中提取年份

可能的重複:
如何分割約會?

有誰知道如何在自己的宏參數中從日期中提取年份?

即,

\themacro#1{...}

其中#1包含已採用 formatyyyy或 in format的日期dd.mm.yyyy,它將\themacro轉換為普通yyyy...

我希望我說清楚了,簡單來說,我只需要從日期中提取年份(如果需要提取)。

答案1

user1189687 已經提出了一個我認為更好的解決方案,但由於我已經開始寫這個,如果您想要一個純文字解決方案,這裡是:

這裡的要點是要認識到您處於第一種情況或另一種情況。如果您知道輸入的格式,那麼這件事就很簡單了。但在這裡,顯然你不知道。

所以我會做的是:

\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}

結果:

在此輸入影像描述

相關內容