Verschachtelte if-then-else Struktur in LaTeX?

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Verschachtelte if-then-else Struktur in LaTeX?

von talueng » Do 17. Jun 2010, 17:44

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
}

von KOMA » Mo 31. Mai 2010, 20:57

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.

\ifthenelse

von Stefan Kottwitz » Mo 31. Mai 2010, 17:13

Hallo talueng,

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

Viele Grüße,

Stefan

Verschachtelte if-then-else Struktur in LaTeX?

von talueng » Mo 31. Mai 2010, 13:48

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]

Nach oben