if-then-else Strukture in LaTeX? Differenz zwischen zwei Zeiten

cocoon

Erfahrenes Mitglied
Ich benötige einen Befehl, der mir von zwei Zeitangaben im Format HH:MM die Differenz berechnet im Format HH Stunden, MM Minuten, also z.B.

Beginn 10:30
Ende 12:15
Differenz 1 Stunde, 45 Minuten

Ich habe dank Google dazu auch fertigen LaTeX-Code gefunden und war in der Lage, diesen etwas meinen Bedürfnissen anzupassen. Leider komme ich aber an der Stelle nicht weiter, wo man folgende Fallunterscheidungen machen müsste:
- Wenn 1 Stunde, dann "Stunde" sonst "Stunden" schreiben
- Wenn 1 Minute, dann "Minute" sonst "Minuten" schreiben
- Wenn 0 Stunden, dann ganz weglassen
- Wenn 0 Minuten, dann ganz weglassen

Leider habe ich mit if-then-else-Strukturen in LaTeX keine Erfahrung. Vielleicht kann jemand von Euch helfen. Hier der Code:

Code:
% function to compute the difference between two times hh:mm
\newcount\hours
\newcount\minutes
%
\def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}
%
\newcommand{\sub}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}%
\expandafter\gettime#2\relax{\subhrs}{\submins}%
\hours=\hrs\relax
\advance\hours by -\subhrs\relax
\minutes=\mins\relax
\advance\minutes by -\submins\relax
\ifnum\minutes>59\relax
\advance\minutes by -60\relax
\advance\hours by 1\relax
\else
\ifnum\minutes<0\relax
\advance\minutes by 60\relax
\advance\hours by -1\relax
\fi
\fi
\ifnum\hours>23\relax
\advance\hours by -24\relax
\else
\ifnum\hours<0\relax
\advance\hours by 24\relax
\fi
\fi
\ifnum\hours>0\relax
\ifnum\minutes<10\relax
\xdef#1{\number\hours\,Stunden, 0\number\minutes\,Minuten}%
\else
\xdef#1{\number\hours\,Stunden, \number\minutes\,Minuten}%
\fi
\fi
\ifnum\hours=0\relax
\ifnum\minutes<10\relax
\xdef#1{0\number\minutes\,Minuten}%
\else
\xdef#1{\number\minutes\,Minuten}%
\fi
\fi
}
 
Okay, war in der Lage, es dann doch relativ unproblematisch selbst rauszufinden. Ist vielleicht nicht die eleganteste Lösung, aber es läuft und für LaTeX reicht es allemal. Der fertige Code steht unten; die Logik von if-then-else-Strukturen (mit Zahlen) in LaTeX ist wie folgt (es gibt sonst auch noch ein extra Paket für LaTeX namens ifthen, das die ganze Sache intuitiver machen soll und auch z.B. String-Vergleiche erlaubt):

Code:
% if-then-else in LaTeX
\ifnum\myvar>10\relax
   % Anweisung im if-Fall
\else
   % Anweisung im else-Fall
\fi

Code:
% function to compute the difference between two times hh:mm
\newcount\hours
\newcount\minutes
%
\def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}
%
\newcommand{\sub}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}%
\expandafter\gettime#2\relax{\subhrs}{\submins}%
\hours=\hrs\relax
\advance\hours by -\subhrs\relax
\minutes=\mins\relax
\advance\minutes by -\submins\relax
\ifnum\minutes>59\relax
\advance\minutes by -60\relax
\advance\hours by 1\relax
\else
\ifnum\minutes<0\relax
\advance\minutes by 60\relax
\advance\hours by -1\relax
\fi
\fi
\ifnum\hours>23\relax
\advance\hours by -24\relax
\else
\ifnum\hours<0\relax
\advance\hours by 24\relax
\fi
\fi

\ifnum\hours>0\relax
  \ifnum\hours=1\relax
    % 1 Stunde
    \ifnum\minutes<10\relax
      \ifnum\minutes=0\relax
        \xdef#1{\number\hours\,Stunde}%
      \else
        \ifnum\minutes=1\relax
          \xdef#1{\number\hours\,Stunde, 0\number\minutes\,Minute}%
        \else
          \xdef#1{\number\hours\,Stunde, 0\number\minutes\,Minuten}%
        \fi
      \fi
    \else
      \xdef#1{\number\hours\,Stunde, \number\minutes\,Minuten}%
    \fi
  \else
    % x Stunden
    \ifnum\minutes<10\relax
      \ifnum\minutes=0\relax
        \xdef#1{\number\hours\,Stunden}%
      \else
        \ifnum\minutes=1\relax
          \xdef#1{\number\hours\,Stunden, 0\number\minutes\,Minute}%
        \else
          \xdef#1{\number\hours\,Stunden, 0\number\minutes\,Minuten}%
        \fi
      \fi
    \else
      \xdef#1{\number\hours\,Stunden, \number\minutes\,Minuten}%
    \fi
  \fi
\else
  \ifnum\minutes<10\relax
	  \ifnum\minutes=1\relax
	    \xdef#1{0\number\minutes\,Minute}%
	  \else
	    \xdef#1{0\number\minutes\,Minuten}%
	  \fi
	\else
	  \xdef#1{\number\minutes\,Minuten}%
	\fi
\fi
}
 

Neue Beiträge

Zurück