PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sog. T-Konto aus der Buchhaltung erstellen



Maverick
03-11-2022, 14:40
Hallo,

mit diesem Minibeispiel kann man ein sog. T-Konto aus der Buchhaltung generieren.


%% Präambel ====================
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
%
%% Dokument ====================
\begin{document}
% Kontoblatt
\begin{tabular}{lrc|clr}
\multicolumn{3}{l@{\protect\makebox[0pt]{Konto}}}{Soll} &&&
\multicolumn{1}{r}{Haben}\\
\hline
kurzer Kontenname & 1 &&& ein sehr, sehr langer Kontenname & 3\\
kurzer Kontenname & 2 &&& ein sehr langer Kontenname & 4\\[1ex]
\cline{2-2}\cline{6-6}&&&\\[-2ex]
Summe & X &&& Summe & X
\end{tabular}
% Kontoblatt Ende
\end{document}

Weiß jemand, wie man es hinkriegt, dass "Konto" immer genau in Seitenmitte steht und die Zahlen "1" und "2" links neben dem Mittelstrich?

Danke für deine Hilfe!

LG Christoph

rais
06-11-2022, 13:13
Moin moin,


Weiß jemand, wie man es hinkriegt, dass "Konto" immer genau in Seitenmitte steht und die Zahlen "1" und "2" links neben dem Mittelstrich?

wenn's wirklich ein Mittelstrich sein soll, muss die Summe der Spaltenbreiten auf beiden Seiten des Striches identisch sein, Das geht am Einfachsten, wenn man konstante Spaltenbreiten vorgibt. Das tabularx-Paket kann dabei helfen, der Tabelle eine bestimmte Breite vorzugeben.
Der breite Abstand vom Mittelstrich kommt von Deinen inhaltlosen c-Spalten, hier wird mindestens eine Breite von 2\tabcolsep reserviert. Unten hab ich den Abstand komplett abgestellt (das @{} vorm |), geh aber davon aus, dass Du nicht wirklich sooo dicht an die Linie damit wolltest ;)


%% Präambel ====================
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
\usepackage{showframe}%<-- nur zur Demo
%
\newlength\foolen
\settowidth\foolen{xxx}% oder was auch immer
%
%% Dokument ====================
\begin{document}
\begin{center}% mittig zum Textblock
\begin{minipage}{\linewidth}% damit sich kein Seitenumbruch zwischen makebox und tabularx verirren kann
\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{tabularx}{\linewidth}[t]{X>{\raggedleft}p{\foolen}@{}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
\multicolumn{2}{l}{Soll} & \multicolumn{2}{r@{}}{Haben}\\
\hline
kurzer Kontenname & 1 & ein sehr, sehr langer Kontenname & 3\\
kurzer Kontenname & 2 & ein sehr langer Kontenname & 4\\[1ex]
\cline{2-2}\cline{4-4}&&&\\[-2ex]
Summe & X & Summe & X
\end{tabularx}
\end{minipage}
\end{center}
\end{document}

VG

Maverick
07-11-2022, 07:19
Hallo Rainer,

wie immer, vielen herzlichen Dank, dass du dir die Zeit genommen hast.

Frage: Hast du deine Mini-Beispiel durchlaufen lassen?

Bei mir kommt das raus ...

6300

rais
07-11-2022, 17:18
Hallo Christoph,

ja, ich habe zur Demo das showframe-Paket geladen. Damit siehst Du auf einem Blick, ob wirklich alles im Textbereich landet.

Gruß

Maverick
08-11-2022, 02:38
Hallo Rainer,

entschuldige, habe das Paket "showframe" nicht verstanden ... Alles klar!



%% Präambel ====================
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
%\usepackage{showframe}%<-- nur zur Demo
%
\newlength\foolen
\settowidth\foolen{xxx}% oder was auch immer
%
%% Dokument ====================
\begin{document}
\begin{center}% mittig zum Textblock
\begin{minipage}{\linewidth}% damit sich kein Seitenumbruch zwischen makebox und tabularx verirren kann
\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{tabularx}{\linewidth}[t]{X>{\raggedleft}p{\foolen}@{}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
\multicolumn{2}{l}{Soll} & \multicolumn{2}{r@{}}{Haben}\\
\hline
Maschinen & 500.000,00 & Eigenkapital & 1,00\\
Forderungen aus Lieferungen & 500.000,00 & Fremdkapital & 999.999,00\\[1ex]
\cline{2-2}\cline{4-4}&&&\\[-2ex]
Summe & 1.000.000 & Summe & 1.000.000
\end{tabularx}
\end{minipage}
\end{center}
\end{document}

Multicolumn müsste man hier auf 4 Spalten erweitern, oder? Schau mal mein MB an.

LG Christoph

rais
08-11-2022, 08:04
Moin Christoph,
nö, die Anzahl der Spalten hat sich ja nicht verändert. Du müsstest \foolen an den breitesten Wert anpassen, z. B.


\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
%\usepackage{showframe}%<-- nur zur Demo
%
\newlength\foolen
\settowidth\foolen{1.000.000,00}% oder was auch immer
%
%% Dokument ====================
\begin{document}
\begin{center}% mittig zum Textblock
\begin{minipage}{\linewidth}% damit sich kein Seitenumbruch zwischen makebox und tabularx verirren kann
\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{tabularx}{\linewidth}[t]{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
\multicolumn{2}{@{}l}{Soll} & \multicolumn{2}{r@{}}{Haben}\\
\hline
Maschinen & 500.000,00 & Eigenkapital & 1,00\\
Forderungen aus Lieferungen & 500.000,00 & Fremdkapital & 999.999,00\\[1ex]
\cline{2-2}\cline{4-4}&&&\\[-2ex]
Summe & 1.000.000,00 & Summe & 1.000.000,00
\end{tabularx}
\end{minipage}
\end{center}
\end{document}

(ich habe hier die 2. Spalte wieder etwas von der Mittellinie abgerückt, dafür die erste Spalte an den linken Rand gezogen, das sieht IMHO etwas angenehmer aus)
Da die Spalten nun breit genug sind, ginge auch


\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
%\usepackage{showframe}%<-- nur zur Demo
%
\newlength\foolen
\settowidth\foolen{1.000.000,00}% oder was auch immer
%
%% Dokument ====================
\begin{document}
\begin{center}% mittig zum Textblock
\begin{minipage}{\linewidth}% damit sich kein Seitenumbruch zwischen makebox und tabularx verirren kann
\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{tabularx}{\linewidth}[t]{@{}X>{\raggedleft}p{\foolen}|X>{\raggedleft\arraybackslash}p{\foolen}@{}}
Soll &\multicolumn{2}{c}{}& Haben\\
\hline
Maschinen & 500.000,00 & Eigenkapital & 1,00\\
Forderungen aus Lieferungen & 500.000,00 & Fremdkapital & 999.999,00\\[1ex]
\cline{2-2}\cline{4-4}&&&\\[-2ex]
Summe & 1.000.000,00 & Summe & 1.000.000,00
\end{tabularx}
\end{minipage}
\end{center}
\end{document}

Die \multicolumn blendet hier nur noch den vertikalen Strich aus.

VG

Maverick
13-11-2022, 14:29
Herzlichen Dank, Rainer. Es funktioniert alles 1a und schaut perfekt aus. Da haben sicher auch andere eine Freude damit ...

Ich hätte noch folgende Nachfrage. Nach welchen Stichworten soll ich suchen, wenn ich umsetzen will, dass man in der Präambel eine bestimmte Befehlskette definiert, sodass man im Text dann nur mehr den gewünschten Inhalt angeben muss.

Für das obige Beispiel wäre das in etwa so gemeint:



\begin{document}
%
\begin{bilanz}
\befehl1{Maschinen}{500.000}{Forderungen}{500.000} {Summe}{1.000.000}\\
\befehl2{Eigenkapital}{1}{Fremdkapital}{999.999}{S umme}{1.000.000}
\end{bilanz}
%
\end{document}

Und hernach wirft es dann das entsprechende T-Konto aus.

Geht das überhaupt? Oder ist hier bereits an eine Doktorarbeit zu denken (vom Aufwand her besehen)?

rais
06-12-2022, 01:38
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:


\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ß