Possível duplicata:
Como faço para dividir uma data?
Alguém sabe como extrair o ano da data no parâmetro da própria macro?
Nomeadamente,
\themacro#1{...}
onde #1
contém a data já no formato yyyy
ou no formato dd.mm.yyyy
, que \themacro
seria convertido para simples yyyy
...
Espero ter sido claro, bom, simplesmente falando, só preciso extrair o ano da data (se a extração for necessária).
Responder1
user1189687 já propôs uma solução que considero melhor, mas como já comecei a escrever isso, aqui está se você quiser uma solução de texto simples:
A questão aqui é reconhecer que você está no primeiro caso ou no outro. É trivial fazer isso se você souber o formato de sua entrada. Mas aqui, aparentemente você não.
Então o que eu faria seria:
\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%
A vantagem desta solução é que você detecta sintaxe incorreta e pode ter um substituto ou gerar um erro, conforme desejar.
Ah, quase esqueci... É claro que você recebe o ano como texto substituto de \year
.
Caso existam, você também pode obter \day
e \month
.
Responder2
Experimente \StrRight
no xstring
pacote:
\documentclass{article}
\usepackage{xstring}
\def\getYear#1{\StrRight{#1}{4}}
\begin{document}
\noindent\getYear{12.12.2012}\\
\getYear{2012}
\end{document}
com resultado: