Verwendung eines einzelnen Arguments von zwei Argumenten

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Benutzeravatar
lunen
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Mi 18. Mai 2016, 23:37

Verwendung eines einzelnen Arguments von zwei Argumenten

Beitrag von lunen »

Hallo,

ich habe folgenden Code geschrieben (in Anlehnung an der Vorlage von http://www.latextemplates.com/template/wile-e-invoice)

\documentclass{scrreprt}
\usepackage{fp}
\usepackage{xpatch}
\usepackage{booktabs}

% Running variables
\gdef\variableA{0}
\gdef\variableG{0}

\gdef\TotalA{0} 
\gdef\TotalB{0} 
\gdef\TotalC{0} 
\gdef\TotalG{0}

\newenvironment{testtable}
{
	\begin{tabular}{p{0.45\textwidth} p{0.15\textwidth} p{0.15\textwidth} p{0.15\textwidth}}
		\textbf{Dienstleistung} & \textbf{Anzahl} & \textbf{Einzelpreis} & \textbf{Betrag} \\
		\toprule[0.5pt]\endhead
}{Summe Netto &&& \num{\TotalA}\,\euro \\%
	    \bottomrule[1.5pt]
	    \FPiflt\variableG{0} % <- hier soll eigentlich der rabatt-name rein, aber wie?
	    &&&%
		\FPiflt\variableG{0} \num{\variableG}\,\euro\\% <- das ist die Zahl aus dem Rabatt
		\FPiflt\variableG{0} Gesamtsumme (rabattiert)&&&%
		\FPiflt\variableG{0} \num{\TotalG}\,\euro\\%
		\else %
	    \fi % 
	\end{tabular}
}

\newcommand{\testitem}[3]{%the invoice item
	\FPmul\gross{#2}{#3}\FPround\gross{\gross}{2} % 
	\global\let\variableA\gross % 
	\FPeval{\sumage}{round(\TotalA + \variableA, 2)} %
	\global\let\TotalA\sumage % 
	% Output the table row
	#1 & % Item name
	\num{#2} & % Quantity
	\num{#3}\,\euro & % Rate
	\num{\variableA}\,\euro \\  % Subtotal
}

\newcommand{\rabatt}[2]{%
	\FPneg\gross{#2}\FPround\gross{\gross}{2} % 
	\global\let\variableG\gross% 
	\FPeval{\discount}{round(\TotalA + \variableG, 2)}%
	\global\let\TotalG\discount% 
	%Das funktioniert zwar, sitzt aber an der falschen Stelle, es soll unter die \bottomrule stehen
	#1 %rabatt name
	&&&
	\num{\variableG}\\
	}

\begin{document}

\begin{testtable}
    \testitem{Keks}{5}{2}\\
    \testitem{Dose}{1}{10}\\
\midrule
    \rabatt{Rabatt für Keksliebhaber}{10}
\end{testtable}

\end{document}

Ich suche nach einer Möglichkeit, nur das erste Argument, welches ein String von Buchstaben ist, von \rabatt zu verwenden, um es in der Tabelle an der richtigen Position auszugeben, analog, wie ich die Zahl bzw. die entsprechende Variable ausgegeben habe. Wenn ich versuche, die Argumente analog wie die \testitem auszugeben, positioniert TeX die logischerweise da, wo ich den Befehl verwende.

Vielen Dank.
Gruß
lunen

Warum nicht gleich mit Ether statt mit einem Keton, knallt noch besser; für die Entsorgung sollte man allerdings den Kampfmittelräumdienst kommen lassen

gast

Re: Verwendung eines einzelnen Arguments von zwei Argumenten

Beitrag von gast »

Dein Code ist nicht lauffähig, weil er jede Menge nicht definierter Anweisungen enthält. Bitte halte dich an die Minimalbeispiel-Anleitung.

Desweiteren verstehe ich nicht, warum du \rabatt verwendest, wenn du gar keine komplette Tabellenzeile mit einer Berechnung aus dem zweiten Argument ausgeben willst, sondern nur das erste. Dann kannst du doch gleich Rabatt für Keksliebhaber schreiben. Du kannst natürlich auch etwas wie:

\newcommand*{\Rabatt}[2]{#1}

definieren. Sinn kann ich darin aber keinen erkennen.


Benutzeravatar
lunen
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Mi 18. Mai 2016, 23:37

Re: Verwendung eines einzelnen Arguments von zwei Argumenten

Beitrag von lunen »

Hallo,

Verzeihung, dass der Code doch nicht lauffähig ist, ich habe es nur in Overleaf getestet gehabt.

Das Ziel ist es, mittels \rabatt eine einfacherer Handhabung zu gestalten. Sprich: ich will den Namen Rabatt für Keksliebhaber nicht feststehend haben, sondern freiwählen könne. Klar, kann ich das fest einpflegen und als festen Wert in der Tabelle zu stehen haben. Aber wenn ich z.B. eine Rechnung über Bonbons erstelle, kann ich schlecht Rabatt für Keksliebhaber schreiben...

Zu den nicht definierten Anweisungen:
Da habe ich leider nicht ganz verstanden, wo TeX das Problem sieht. Wenn du dazu einen Hinweis hast, wie ich das besser gestalten kann, bin ich dir sehr dankbar.

Liebe Grüße
lunen

Warum nicht gleich mit Ether statt mit einem Keton, knallt noch besser; für die Entsorgung sollte man allerdings den Kampfmittelräumdienst kommen lassen

gast

Re: Verwendung eines einzelnen Arguments von zwei Argumenten

Beitrag von gast »

Das gezeigte Beispiel funktioniert so auch nicht auf Overleaf. Also nochmal: Beachte bitte die Minimalbeispiel-Anleitung. Und ich weiß noch immer nicht, was das soll. Warum kannst du in deiner testtable nicht entweder einfach \rabatt{Rabatt für Keksliebhaber}{10} durch Rabatt für Keksliebhaber ersetzen oder meinetwegen \rabatt wie für \Rabatt gezeigt definieren?


Antworten