Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Sog. T-Konto aus der Buchhaltung erstellen

  1. #1
    Registrierter Benutzer Avatar von Maverick
    Registriert seit
    12.12.2006
    Beiträge
    513

    Sog. T-Konto aus der Buchhaltung erstellen

    Hallo,

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

    Code:
    %% 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
    Geändert von Maverick (03-11-2022 um 15:44 Uhr)
    Windows 10
    TeX Live 2022 (Distribution) und Sublime Text V4140 (Editor)
    LaTeX-Anfänger

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.863
    Moin moin,
    Zitat Zitat von Maverick Beitrag anzeigen
    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 ;)
    Code:
    %% 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
    Geändert von rais (07-11-2022 um 18:19 Uhr) Grund: Kommentar bei showframe ergänzt
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    Registrierter Benutzer Avatar von Maverick
    Registriert seit
    12.12.2006
    Beiträge
    513
    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 ...

    mini.jpg
    Windows 10
    TeX Live 2022 (Distribution) und Sublime Text V4140 (Editor)
    LaTeX-Anfänger

  4. #4
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.863
    Hallo Christoph,

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

    Gruß
    Rainer
    There's nothing a good whack with a hammer won't fix!

  5. #5
    Registrierter Benutzer Avatar von Maverick
    Registriert seit
    12.12.2006
    Beiträge
    513
    Hallo Rainer,

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

    Code:
    %% 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
    Windows 10
    TeX Live 2022 (Distribution) und Sublime Text V4140 (Editor)
    LaTeX-Anfänger

  6. #6
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.863
    Moin Christoph,
    nö, die Anzahl der Spalten hat sich ja nicht verändert. Du müsstest \foolen an den breitesten Wert anpassen, z. B.
    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
    %
    %% 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
    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
    %
    %% 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
    Rainer
    There's nothing a good whack with a hammer won't fix!

  7. #7
    Registrierter Benutzer Avatar von Maverick
    Registriert seit
    12.12.2006
    Beiträge
    513
    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:

    Code:
    \begin{document}
    %
    \begin{bilanz}
    \befehl1{Maschinen}{500.000}{Forderungen}{500.000}{Summe}{1.000.000}\\
    \befehl2{Eigenkapital}{1}{Fremdkapital}{999.999}{Summe}{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)?
    Geändert von Maverick (13-11-2022 um 15:32 Uhr)
    Windows 10
    TeX Live 2022 (Distribution) und Sublime Text V4140 (Editor)
    LaTeX-Anfänger

  8. #8
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.863
    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ß
    Rainer
    There's nothing a good whack with a hammer won't fix!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •