Возможный дубликат:
Как разделить свидание?
Кто-нибудь знает, как извлечь год из даты в параметре собственного макроса?
А именно,
\themacro#1{...}
где #1
содержатся либо дата, уже указанная в формате yyyy
, либо дата в формате 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}
с результатом: