Extrahieren Sie das Jahr aus dem Parameter, der das Datum enthält

Extrahieren Sie das Jahr aus dem Parameter, der das Datum enthält

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 #1das Datum entweder bereits im Format enthalten ist yyyyoder im Format dd.mm.yyyy, das in einfaches ... \themacrokonvertiert 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 \dayund erhalten \month.

Antwort2

Probieren Sie \StrRightes im xstringPaket:

\documentclass{article}

\usepackage{xstring}
\def\getYear#1{\StrRight{#1}{4}}

\begin{document}

\noindent\getYear{12.12.2012}\\
\getYear{2012}

\end{document}

mit Ergebnis:

Bildbeschreibung hier eingeben

verwandte Informationen