可能的重複:
如何分割約會?
有誰知道如何在自己的宏參數中從日期中提取年份?
即,
\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}
結果: