Furantsu Kafuka
13-06-2012, 19:33
Hallo.
Ich versuche gerade eine Funktion zu schreiben, die Euro-Beträge ausgibt, und prüft, ob Euro/Cent 0 bzw. leer gelassen worden sind und dementsprechend die Ausgabe abändert.
(Wie ich 's in C++ machen würde)
#include <iostream>
using namespace std;
void Preis(int Hauptargument, int optionalArgument);
int main()
{
Preis(0,0); // ---
Preis(50,0); // 50,--- €
Preis(100,50); // 100,50 €
Preis(0,99); // 99 Cent
}
void Preis(int Hauptargument, int optionalArgument)
{
if((Hauptargument)&& (Hauptargument>0))// ist Hauptargument belegt und ist es größer als 0 [Pseude-Abfrage, da der Wert in LaTeX auch 'leer' (ungleich 0) sein kann ]
{
if((optionalArgument) && optionalArgument>0) // Cent-Betrag existiert und ist größer als 0
cout << Hauptargument << "," << optionalArgument << " €" << endl;
else // Cent-Betrag existiert nicht oder ist kleiner als 1
cout << Hauptargument << ",--- €" << endl;
}
else
{
if((optionalArgument) && optionalArgument>0) // Cent-Betrag existiert und ist größer als 0
cout << optionalArgument << " Cent" << endl;
else // Weder Euro noch Cent sind gültig
cout << "---" << endl;
}
}
Und hier meine LaTeX-Implementation (unkompilierbar, wegen \Preis)
%---------------------------------------------------------------------------
\documentclass%%
%---------------------------------------------------------------------------
[fontsize=11pt,%% Schriftgroesse
%---------------------------------------------------------------------------
% Satzspiegel
paper=a4,
%---------------------------------------------------------------------------
% Formatierung
draft=off%% Entwurfsmodus
]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\DeclareUnicodeCharacter{20AC}{\texteuro}
\usepackage{xparse,l3int}
\newcommand{\Zahl}[1]{\textsc{%\fontfamily{lmssq}\selectfont
#1}%\fontfamily{iwonalc}\selectfont
}
\DeclareDocumentCommand{\Preis}{m O{\NoValue}} {%
\newcount\ArgA
\newcount\ArgB
\ArgA=#1
\ArgB=#2
% Cent wurden NICHT übergeben
\IfNoValueTF {#2}
{
% auch keine Euro-Angabe
\IfNoValueTF {#1}
{
---
}{% vielleicht eine Euro-Angabe
\ifnum\value{\ArgA}<1 % Null oder kleiner, ergo ungültig!
---
\else
\Zahl{#1},--- € % ja, es gibt eine Euro-Angabe
\fi
}
}% Cent wurden übergeben
{
% Euro-Angabe ist leer
\IfNoValueTF {#1}%
{%
\ifnum\value{\ArgB}<1 % Cent-Betrag beträgt null oder kleiner -- ungültig!
---
\else% Immerhin ist der Cent-Betrag gültig
\Zahl{#2} Cent
\fi
}% Euro-Angabe ist nicht leer
{
\ifnum\value{\ArgA}<1 % Euro-Betrag ist null oder kleiner, also Cents ausgeben.
\Zahl{#2} Cent
\else%
\Zahl{#1},\Zahl{#2} €
\fi
}
}
}
%\DeclareDocumentCommand{\Preis}{m O{\NoValue}} {%
\newenvironment{Kosten}{%
\begin{tabular}{lll}\toprule
\bfseries Artikel &\bfseries Anzahl &\bfseries Kosten pro Stk. \\
\midrule}{\end{tabular}}
\newcommand{\KostenEintrag}[4]{\enquote{#1}&\Zahl{#2}&\Preis{#3}[#4]\\}
\begin{document}
\begin{Kosten}
\KostenEintrag{Die unendliche Geschichte}{1}{20}{50}
\KostenEintrag{Momo}{1}{10}{}
\end{Kosten}
\end{document}
Ich versuche gerade eine Funktion zu schreiben, die Euro-Beträge ausgibt, und prüft, ob Euro/Cent 0 bzw. leer gelassen worden sind und dementsprechend die Ausgabe abändert.
(Wie ich 's in C++ machen würde)
#include <iostream>
using namespace std;
void Preis(int Hauptargument, int optionalArgument);
int main()
{
Preis(0,0); // ---
Preis(50,0); // 50,--- €
Preis(100,50); // 100,50 €
Preis(0,99); // 99 Cent
}
void Preis(int Hauptargument, int optionalArgument)
{
if((Hauptargument)&& (Hauptargument>0))// ist Hauptargument belegt und ist es größer als 0 [Pseude-Abfrage, da der Wert in LaTeX auch 'leer' (ungleich 0) sein kann ]
{
if((optionalArgument) && optionalArgument>0) // Cent-Betrag existiert und ist größer als 0
cout << Hauptargument << "," << optionalArgument << " €" << endl;
else // Cent-Betrag existiert nicht oder ist kleiner als 1
cout << Hauptargument << ",--- €" << endl;
}
else
{
if((optionalArgument) && optionalArgument>0) // Cent-Betrag existiert und ist größer als 0
cout << optionalArgument << " Cent" << endl;
else // Weder Euro noch Cent sind gültig
cout << "---" << endl;
}
}
Und hier meine LaTeX-Implementation (unkompilierbar, wegen \Preis)
%---------------------------------------------------------------------------
\documentclass%%
%---------------------------------------------------------------------------
[fontsize=11pt,%% Schriftgroesse
%---------------------------------------------------------------------------
% Satzspiegel
paper=a4,
%---------------------------------------------------------------------------
% Formatierung
draft=off%% Entwurfsmodus
]{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\DeclareUnicodeCharacter{20AC}{\texteuro}
\usepackage{xparse,l3int}
\newcommand{\Zahl}[1]{\textsc{%\fontfamily{lmssq}\selectfont
#1}%\fontfamily{iwonalc}\selectfont
}
\DeclareDocumentCommand{\Preis}{m O{\NoValue}} {%
\newcount\ArgA
\newcount\ArgB
\ArgA=#1
\ArgB=#2
% Cent wurden NICHT übergeben
\IfNoValueTF {#2}
{
% auch keine Euro-Angabe
\IfNoValueTF {#1}
{
---
}{% vielleicht eine Euro-Angabe
\ifnum\value{\ArgA}<1 % Null oder kleiner, ergo ungültig!
---
\else
\Zahl{#1},--- € % ja, es gibt eine Euro-Angabe
\fi
}
}% Cent wurden übergeben
{
% Euro-Angabe ist leer
\IfNoValueTF {#1}%
{%
\ifnum\value{\ArgB}<1 % Cent-Betrag beträgt null oder kleiner -- ungültig!
---
\else% Immerhin ist der Cent-Betrag gültig
\Zahl{#2} Cent
\fi
}% Euro-Angabe ist nicht leer
{
\ifnum\value{\ArgA}<1 % Euro-Betrag ist null oder kleiner, also Cents ausgeben.
\Zahl{#2} Cent
\else%
\Zahl{#1},\Zahl{#2} €
\fi
}
}
}
%\DeclareDocumentCommand{\Preis}{m O{\NoValue}} {%
\newenvironment{Kosten}{%
\begin{tabular}{lll}\toprule
\bfseries Artikel &\bfseries Anzahl &\bfseries Kosten pro Stk. \\
\midrule}{\end{tabular}}
\newcommand{\KostenEintrag}[4]{\enquote{#1}&\Zahl{#2}&\Preis{#3}[#4]\\}
\begin{document}
\begin{Kosten}
\KostenEintrag{Die unendliche Geschichte}{1}{20}{50}
\KostenEintrag{Momo}{1}{10}{}
\end{Kosten}
\end{document}