Seite 1 von 1

Verschachtelte if-then-else Struktur in LaTeX?

Verfasst: Mo 31. Mai 2010, 13:48
von talueng
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:
% 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
}
[/code]

\ifthenelse

Verfasst: Mo 31. Mai 2010, 17:13
von Stefan Kottwitz
Hallo talueng,

willkommen im Forum!
Du könntest das ifthen-Paket verwenden, das bietet einen Befehl \ifthenelse.

Viele Grüße,

Stefan

Verfasst: Mo 31. Mai 2010, 20:57
von KOMA
Angesichts der bereits im Code-Schnippsel vorgeführten Fallunterscheidungen (bezüglich größer Null und kleiner zehn) ist die Lösung eigentlich naheliegend. Folgende Änderung bei den 14 Zeilen vor der schließenden geschweiften Klammer am Ende:
\ifnum\hours>0\relax
\ifnum\minutes<10\relax
\xdef#1{\number\hours\,Stunde\ifnum\hours=1\relax\else n\fi, 0\number\minutes\,Minute\ifnum\minutes=1\relax\else n\fi}%
\else
\xdef#1{\number\hours\,Stunde\ifnum\hours=1\relax\else n\fi, \number\minutes\,Minute\ifnum\minutes=1\relax\else n\fi}%
\fi
\fi
\ifnum\hours=0\relax
\ifnum\minutes<10\relax
\xdef#1{0\number\minutes\,Minute\ifnum\minutes=1\relax\else n\fi}%
\else
\xdef#1{\number\minutes\,Minute\ifnum\minutes=1\relax\else n\fi}%
\fi
\fi
Das ganze ist mangels vollständigen Minimalbeispiels (← dies ist ein geprüfter Link mit relevanten Informationen!) ungetestet.

Verfasst: Do 17. Jun 2010, 17:44
von talueng
Danke Euch beiden! Hatte mir dann zunächst das o.g. Paket angeguckt, das mir aber Fehler geschmissen hat. Anschließend habe ich mir nochmals genau den Code angeguckt und irgendwann dann auch den \ifnum-Befehl verstanden und bin damit zu einer eigenen Lösung gekommen.

Für Interessierte die Lösung untenstehend.
% 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
}