Mögliches Duplikat:
Wie teile ich ein Datum auf?
Weiß jemand, wie man im Parameter eines eigenen Makros das Jahr aus dem Datum extrahiert?
Nämlich,
\themacro#1{...}
wobei #1
das Datum entweder bereits im Format enthalten ist yyyy
oder im Format dd.mm.yyyy
, das in einfaches ... \themacro
konvertiert würde .yyyy
Ich hoffe, ich habe mich klar ausgedrückt. Also, einfach gesagt, ich muss nur das Jahr aus dem Datum extrahieren (falls eine Extraktion notwendig ist).
Antwort1
user1189687 hat bereits eine Lösung vorgeschlagen, die meiner Meinung nach besser ist, aber da ich bereits begonnen habe, dies zu schreiben, hier eine Lösung, falls Sie eine reine Tex-Lösung wünschen:
Hier geht es darum, zu erkennen, ob Sie sich im ersten oder im anderen Fall befinden. Das ist ganz einfach, wenn Sie das Format Ihrer Eingabe kennen. Aber hier ist es offensichtlich nicht so.
Ich würde also Folgendes tun:
\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%
Der Vorteil dieser Lösung besteht darin, dass Sie falsche Syntax erkennen und je nach Wunsch auf eine Alternative zurückgreifen oder einen Fehler auslösen können.
Ach, fast vergessen... Die Jahreszahl bekommst du natürlich als Ersatztext von \year
.
Falls vorhanden, können Sie auch \day
und erhalten \month
.
Antwort2
Probieren Sie \StrRight
es im xstring
Paket:
\documentclass{article}
\usepackage{xstring}
\def\getYear#1{\StrRight{#1}{4}}
\begin{document}
\noindent\getYear{12.12.2012}\\
\getYear{2012}
\end{document}
mit Ergebnis: