ich kann mich daran erinnern, daß diese Frage hier schon einmal
gestellt wurde, aber entweder habe ich den Artikel nicht gespeichert
oder finde ihn nicht mehr. Auch die FAQ gibt keine Auskunft, also:
Welches Package ermöglicht das Rechnen in LaTeX, also Addition,
Multiplikation, Division etc. Dezimalpunkt möglichst konfigurierbar,
halt etwas, was man für Rechnungen etc. braucht. Man formuliert einige
Formeln und pappt dann oben die Stunden in eine Variable und der Rest
wird von LaTeX gemacht...
Irgendsowas wird es doch geben, oder?
Tnx,
Frank
Es gibt da mehrere Pakete die in unterschiedlicher Weise das Rechnen
unterstuetzen:
- calc
- fp
- realcalc
Hinweis:
ftp://ftp.dante.de/tex-archive/help/Catalogue/catalogue.html
ist oft sehr hilfreich bei der Suche...
...Rolf
--
.----------------------------------------------------------.
| Rolf Niepraschk -- Physikalisch-Technische Bundesanstalt |
| Abbestr. 2-12; D-10587 Berlin, Germany |
| Tel/Fax: ++49-30-3481-316/490, email: niepr...@ptb.de |
`----------------------------------------------------------'
- Marcus [PGP]
--
GPT TeX @M2: 089-345737 @BA:0951-4078029
Yours, Sebastian
Rechnungen mit LaTeX, tja.
Nachdem ich jahrelange Preise, Gesamtpreis und Mehrwertsteuer von Hand
ausgerechnet habe, tut das inzwischen tatsaechlich LaTex fuer mich.
Obwohl ich einen Ansatz anbieten kann (siehe unten), rate ich doch
dringlich jedem, der nicht mehrere zehn Rechnungen pro Monat zu
schreiben hat (dann mag sich der Entwicklungsaufwand, wenn man
ansonsten gute Gruende fuer die Verwendung von LaTeX fuer diesen Zweck
hat, vielleicht vertreten lassen), nach tools zu suchen, die explizit
fuer solche Alltagsaufgaben entwickelt wurden.
Das ist im konkreten Kontext noch nicht einmal als (La)TeX-bashing
gemeint. (Obwohl ich sehr wohl die ein oder andere Anmerkung zu einem
Thread a la "Warum (La)TeX mich wahnsinnig macht" beizusteuern
haette.) TeX und LaTeX sind IMHO (widerspreche, wer kann) eben nicht
mit der Faehigkeit, bequem damit Rechnungen schreiben zu koennen als
eines der primaeren Ziele im Sinn konzipiert worden. Dass es trotzdem
einigermassen geht, mag man zum Anlass fuer einen Lobgesang auf die
Flexiblitaet von TeX und LaTeX nehmen.
Nachdem Sebastian wieder seinen Hinweis auf fp gebracht hat, passt
jetzt wieder ein Posting von mir, das vor wenigen Monaten hier zu
lesen war. (Ich habe nur noch einen Entwurf auf meiner Platte
gefunden, das Orignalposting habe ich wohl noch leicht editiert.) Man
beachte den zwischen sachlicher Hilfe und Ironie schwebenden Ton.
Der Text folgt:
Rolf Niepraschk <niepr...@ptb.de> wrote:
>Adrian Knoth wrote:
>>
>> Gibt es irgendwo ein "format-file", das Rechnungen mit LaTeX
>> ermöglicht? Es sollte dann eine Klasse wie article oder book darstellen.
>
>Deine Frage ist missverstaendlich. Willst Du mit LaTeX rechnen oder
>Rechnungsformulare schreiben?
Wahrscheinlich will er beides: wahrscheinlich will er einfach eine
Rechnung im buchhalterischen Sinne mit Hilfe einer Formatvorlage
schreiben. Und dank Sebastians Hinweis auf fp (auf ctan zu finden:
macros/latex/contrib/other/fp) laesst sich da auch eine Geschichte
erzaehlen, mit dem Arbeitstitel "Wie bastle ich mir aus meinem
Satzsystem mit wenigen Handgriffen eine Tabellenkalkulation oder
another part of the succeeding story `How to Waste Time with LaTeX`"
und die geht ungefaehr so:
Eine Rechnung ist, unter anderem, einfach ein mit mehr oder weniger
bedacht gesetzter Text; von diesem Blickwinkel her gesehen eine ideale
Aufgabe fuer LaTeX. Unter den verschiedenen Genre von Text duerften
Rechnungen am ehesten zu dem der Briefe zaehlen. Es gibt einige auch
auf deutsche Verhaeltnisse angepasste Brief-Stile; mit g-brief, mit
akletter (das, unter dem Namen myletter noch bei teTeX 0.3.3 dabei
war, und das ich doch so interessant fand, dass ich bedaure, dass es
bei teTeX 4.0 nicht mehr von Haus aus dabei ist), meinetwegen auch mit
dinbrief sollte der grobe Rahmen erschlagen sein. Adressfenster
passend zu DIN-Fensterumschlaegen, Absenderadresse, Datum, vieles mehr
und auf jeden Fall alles, was um die eigentliche Rechnung herum so zu
stehen hat - selbst Adressdatenbanken komplett in LaTeX realisiert
sind erfunden worden.
Die eigentliche Rechnung laesst sich mehr oder weniger in einer
Tabelle anordnen; eine Kopfzeile, und dann, jede jeweils fuer sich
eine mehr oder weniger breite Zeile, die Positionen untereinander; mit
Spalten in etwa: Positionsnummer, Text, Anzahl, Einzelpreis,
Preis. Ich habe mir mal ein Makro gebastelt, das ich nicht herzeige,
weil es so grausam zusammengeruehrt ist und weil sich das mit
irgendeinem der Tabellen-Styles sowieso viel schoener machen
laesst. Im Prinzip jedenfalls schreibt sich so eine Position einer
Rechnung ziemlich simpel:
\rpos{<Text>}{<Anzahl>}{<EinzelPr.>}{<Gesamt>}
Das steht dann alles wunderbar untereinander, mit einer
Positions-Nummer vornedran, dich ich gar nicht eingeben muss, weil
LaTeX das mit Hilfe eines Zaehlers selber macht (ich kann also auch
beliebig Positionen einschieben, oder die Reihenfolge veraendern) und
das ist selbstverstaendlich voellig sinnfrei.
Nicht nur, dass ich in jeder Zeile und in der Gesamtpreisspalte selber
ausrechnen muss, was sich die Maschine aus meinen Eingaben heraus
selber ausrechnen koennte, nein, wenn sich die Rechnung nachtraeglich
aendert (oder, wem nachtraegliches Aendern einer Rechnung
buchalterisch doch etwas suspekt vorkommt, wenn sich vom Angebot
zur Rechnung die eine oder andere Position veraendert hat) muss ich
wieder zum Taschenrechner greifen.
Ich gestehe, ich habe schon mal mit diesem Problem im Kopf die
Dokumentation zu calc.sty ueberfolgen, an allen offensichtlichen
Loesungswegen wie immer blind vorbeitappend. Schoen, dass calc
Berechnungen vereinfacht, doch in Rechungen werden die Ergebnisse
gemeinhin auf zwei Nachkommastellen gerundet. Aber dieses von
Sebastian in den Raum geworfenen fp --- tja; das rechnet nicht nur,
das rundet auch.
Bleibt nur das Problem, dass fp, wie das in einigen Laendern und in
vielen Computersprachen ueblich ist, mit Gleit_punkt_zahlen
arbeitet. Und in diesem Zusamenhang stellt sich die Frage (fuer wen
das keine Frage ist, der wende sich jetzt mit Grausen): in welchem
Format gebe ich die Zahlen ein. Heimatvergessenheit und Faulheit haben
mich Gleitpunktzahlen waehlen lassen.
Ein erstes Makro, das aus Gleitpunktzahlen Gleitkommazahlen macht, ist
schnell geschrieben:
\gk#1.#2{#1,#2}
Das funktioniert allerdings nur, wenn das Makro auch wirklich mit
einer Gleitpunktzahl aufgerufen wird. Einzelpreis und Gesamtpreis in
DM werden immer Nachkommastellen haben, doch 3 Stueck sollten 3
bleiben. Mir ist nichts anderes eingefallen, als den ganzen String
Zeichen fuer Zeichen einzulesen und Punkte durch Kommas zu
ersetzen. Folgender Massen:
\def\gpzugk#1{\gpzugkRest#1\endlist}
\def\endlist{\endlist}
\def\gpzugkRest{\afterassignment\gpzugkZeichen\let\next= }
\def\gpzugkZeichen{\ifx\next\endlist\let\next\relax
\else
\if\next .{,}%
\else \next
\fi
\let\next\gpzugkRest
\fi\next}
Ruehrt man das, was evident ist, mit den Code-Schnipseln von oben
zusammen, kommt man in etwa zu:
\documentclass{article}
% ctan: macros/latex/contrib/other/fp
\usepackage{fp}
% Den Zaehler definieren, der fuer die fortlaufende
% Positionsnummer verwendet wird.
\newcounter{posnummer}
\setcounter{posnummer}{0}
% Globale Variable fuer die Endsumme.
\def\result{0.0}
% Einfaches Makro, das aus einer Gleitpunktzahl eine
% Gleitkommazahl macht.
\def\rpk#1.#2{#1,#2}
% Die Makros, die eine ganze Zahl einfach ausgeben und aus
% einer Gleitpunktzahl eine Gleitkommazahl machen (siehe
% Norbert Schwarz, Einfuehrung in TeX, 3. Auflage, S. 120f
% zur Schleifentechnik fuer unterschiedlich lange
% Parametertexte).
\def\gpzugk#1{\gpzugkRest#1\endlist}
\def\endlist{\endlist}
\def\gpzugkRest{\afterassignment\gpzugkZeichen\let\next= }
\def\gpzugkZeichen{\ifx\next\endlist\let\next\relax
\else
\if\next .{,}%
\else \next
\fi
\let\next\gpzugkRest
\fi\next}
% Einfaches Formatiergeruest fuer eine einzelne Position der
% Rechnung durch aneinandergesetzte parbox'en mit fixer Breite.
% Nur zur Demonstration; unbrauchbar und voellig haesslich.
\newcommand{\rposgeruest}[6]{%
\begin{footnotesize}
\noindent\makebox[.07\linewidth]{#1}%
\parbox[t]{.53\linewidth}{\sloppy #2}%
\parbox[t]{.1\linewidth}{\hfill #3 #4}%
\parbox[t]{.15\linewidth}{\hfill #5}%
\parbox[t]{.15\linewidth}{\hfill #6}%
\end{footnotesize}}
% Das Makro, das eine einzelne Rechungsposition ausgibt.
% Aufruf mit: \rpos{<Text>}{<Anzahl>}{<Einheit>}{<Einzelpreis>}
\newcommand{\rpos}[4]{%
\stepcounter{posnummer}%
\FPupn\posresult{#2 #4 * 2 round}%
\FPadd\result\result\posresult
\rposgeruest{\arabic{posnummer}}%
{#1}{\gpzugk#2}{#3}{\rpk#4 DM}%
{\expandafter\rpk\posresult\ DM}}
% Demo-Environment "rechnung"
\newenvironment{rechnung}{%
% Kopfzeile ausgeben
\hrule\vspace{2mm}%
\rposgeruest{Pos.}{Erl\"auterung}{Anzahl}{}{Einzelpr.}{Preis}%
\vspace{2mm}\hrule\vspace{2mm}}{%
%Abspann des environment und der Rechnung
\vspace{0mm}\hrule\vspace{2mm}%
\FPround\result\result{2}
\rposgeruest{}{Gesamtsumme}{}{}{}%
{\expandafter\rpk\result\ DM}%
\vspace{2mm}
\FPupn\mwst{\result{} 0.15 * 2 round}
\rposgeruest{}{Gesetzliche Mehrwertsteuer 7\%}{}{}{}%
{\expandafter\rpk\mwst\ DM}%
\vspace{2mm}
\FPupn\result{\result{} \mwst{} + 2 round}
\rposgeruest{}{\textbf{Endsumme}}{}{}{}%
{\textbf{\expandafter\rpk\result\ DM}}}
\begin{document}
\begin{rechnung}
\rpos{Was ist das.}{2.5}{St.}{0.02}
\rpos{Das geht auch anderst:
\begin{itemize}
\item Weil.
\item Und \"uberhaupt.
\end{itemize}}{28}{h}{12.34}
\rpos{Auch Gutschriften:}{1}{}{-380.00}
\end{rechnung}
\end{document}
Das Ganze setzt nichts anderes als ein Standard LaTeX2e und das fp
Paket (ctan: macros/latex/contrib/other/fp) voraus. teTeX-Benutzer
muessen nur die fp-Dateien im Suchbaum unterbringen und texhash
starten.
Das funktioniert auch ueber mehrere Seiten hinweg, allerdings ohne
weitere Kopfzeilen auf den Folgeseiten; das, genauso wie Uebertraege,
sei der Phantasie des Lesers ueberlassen. Genauso
Tausenderpunkte. Wer's mag, einen schicken Bindestrich anstatt 00
hinter dem Komma. usw.
rolf
> >Welches Package ermöglicht das Rechnen in LaTeX, also Addition,
> Fantasie hilft auch. calc.sty does the job.
Bin ich auch schon drauf gekommen.
Habe mal kurz reingeschaut, konnte aber auf die Schnelle nicht
finden, ob er "." oder "," als Dezimalzeichen unterstützt...
Frank
--
Frank Meissner Pixelpark Multimedia GmbH
Telefon: ++49+30 34981-589
Telefax: ++49+30 34981-555
Tja.
calc.sty
Leider habe ich fuer das Teil keine Beschreibung gefunden.
Weder auf meiner Linux-CD, noch auf dem dante-Server.
Wie wird das benutzt?
Tschuess,
Oliver
--
>Tja.
>calc.sty
>Leider habe ich fuer das Teil keine Beschreibung gefunden.
>Weder auf meiner Linux-CD, noch auf dem dante-Server.
Nanu? Zumindest 1995 gab's noch ein calc.dtx, das eine sehr gute Doku
enthielt -- ist die verschwunden?
Gru"s
Martin
--
Martin Schr"oder, M...@Dream.HB.North.DE
They that can give up essential liberty to obtain a little temporary
safety deserve neither liberty nor safety. (Benjamin Franklin)
- Marcus [PGP]