Moin Christoph,
entschuldige bitte die späte Antwort, ich war mal wieder `im Auftrag des Herrn' (Chef) unterwegs...
Umsetzbar ist Dein Ansinnen schon, allerdings willst Du die Zellen umsortieren, wenn Du in `\befehl1' alles für Soll deklarieren willst und in `befehhl2' alles für Haben, die Ausgabe aber nach wie vor Soll/Haben in einer Zeile haben soll. Dazu könntest Du Dir die Argumente aus befehl1/befehl2 in Macros zwischenspeichern und hinterher entsprechend anders herum ausgeben.
\befehl1 +2 würde ich auch nicht starr auf je 2 Wertepaare + Summe auslegen wollen. Die Summen könntest Du direkt an die bilanz-Umgebung angeben (so entsprechend definiert), \befehl1 + 2 würde ich für je ein Wertepaar auslegen. Zur Demo:
Code:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
\usepackage{showframe}%<-- nur zur Demo
%
\newlength\foolen
\settowidth\foolen{1.000.000,00}% oder was auch immer
%
\newcounter{haben}
\newcounter{soll}
\newcounter{loop}
\newcommand*\loopmax{0}
\newcommand\haben[2]{%
\typeout{\protect\haben\space außerhalb bilanz-Umgebung!}%
}%
\newcommand\soll[2]{%
\typeout{\protect\soll\space außerhalb bilanz-Umgebung!}%
}%
\newcommand*\habensumme{0}
\newcommand*\sollsumme{0}
\makeatletter
\newenvironment{bilanz}[3][\linewidth]{%
\renewcommand\haben[2]{%
\stepcounter{haben}%
\@namedef{haben\the\value{haben}txt}{##1}%
\@namedef{haben\the\value{haben}val}{##2}%
}%\haben{text}{wert}
\renewcommand\soll[2]{%
\stepcounter{soll}%
\@namedef{soll\the\value{soll}txt}{##1}%
\@namedef{soll\the\value{soll}val}{##2}%
}%\soll{text}{wert}
\renewcommand*\sollsumme{#2}%
\renewcommand*\habensumme{#3}%
\setcounter{haben}{0}%
\setcounter{soll}{0}%
\begin{center}% mittig zum Textblock
\begin{minipage}{#1}% damit sich kein Seitenumbruch zwischen makebox und tabularx verirren kann
}{%
\ifnum\value{haben}>\value{soll}%
\edef\loopmax{\the\value{haben}}%
\else
\edef\loopmax{\the\value{soll}}%
\fi
\setcounter{loop}{0}%
\noindent% Zeile nicht einziehen
\makebox[0pt][l]{% Breite = Null, links ausrichten
\parbox[t]{\linewidth}{% den tatsächlichen Inhalt auf Breite der minipage ziehen
\centering Konto%
}%
}% <-- Zeilenende auskommentieren,
% die folgende tabularx an der Grundlinie der obersten Zeile ausrichten:
\begin{minipage}[t]{\linewidth}
\raggedright
\begin{tabularx}{\linewidth}[t]{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
Soll &\multicolumn{2}{c}{}& Haben\\
\hline
\end{tabularx}
\@whilenum \value{loop}<\loopmax \do {%
\stepcounter{loop}% analog zu \soll/\haben: erst den Zähler erhöhen
\typeout{+++ H(\thehaben), S(\thesoll), M(\loopmax), L(\theloop)}% nur zur Info
\begin{tabularx}{\linewidth}{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
\@nameuse{soll\the\value{loop}txt} & \@nameuse{soll\the\value{loop}val}%
& \@nameuse{haben\the\value{loop}txt} & \@nameuse{haben\the\value{loop}val}%
\end{tabularx}
}
\begin{tabularx}{\linewidth}{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
\cline{2-2}\cline{4-4}&&&\\[-2ex]
Summe & \sollsumme & Summe & \habensumme
\end{tabularx}
\end{minipage}
\end{minipage}
\end{center}
}
\makeatother
%% Dokument ====================
\begin{document}
\begin{bilanz}{1.000.000,00}{1.000.000,00}
\soll{Maschinen}{500.000,00}
\haben{Eigenkapital}{1,00}
\soll{Forderungen aus Lieferungen}{499.999,01}
\haben{Fremdkapital}{999.999,00}
\soll{Lohnkosten}{0,99}
\end{bilanz}
\end{document}
wobei, die tabularx-Umgebung musste ich hier zerstückeln, weil die hier verwendete \@whilenum-Anweisung nicht direkt aus einer Tabellenzelle aufgerufen werden kann, um weitere Tabellenzellen zu generieren (beim & würde besagte Zelle (und damit eine (La)TeX-Gruppe) beendet, wodurch der \@whilenum (so innerhalb einer T-Zelle aufgerufen) sein eigenes Ende nicht mehr mitbekommt...
Und ja, die Ausgabe hab ich noch nicht optimiert
Ob Du da eine Doktorarbeit draus machen willst, überlass ich Dir
Gruß
Lesezeichen