Servus,

Beispiel:

Öffne in Overleaf
\usepackage{mathptmx}
\usepackage{multicol}
\usepackage{multirow}
\usepackage[scaled]{uarial}
\renewcommand*\familydefault{\sfdefault} 
\usepackage[T1]{fontenc}
\usepackage{wallpaper}
\usepackage{mdwlist}
\usepackage{listings}
\usepackage{amssymb}
\usepackage[left=2.00cm, right=2.00cm, top=2.00cm, bottom=2.00cm,includeheadfoot]{geometry}
\usepackage{graphicx}
\usepackage[automark]{scrpage2}
\usepackage{lastpage}
\usepackage[copy-decimal-marker]{siunitx}
\usepackage[linktocpage]{hyperref}
\begin{document}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} 
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} 
\begin{longtable}{|L{6cm}|C{2cm}|C{2cm}|C{1.4cm}|C{1.4cm}|C{1.4cm}|}
    \caption{M}
    \label{tab:mList} \\
    \hline
    \multicolumn{1}{|l|}{} & \multicolumn{1}{c|}{} & \multicolumn{1}{c|}{} & \multicolumn{3}{c|}
    {\textbf{Trägheitsmomente}}\\
    \textbf{Body} & \textbf{Masse} [kg] & \textbf{Typ} & \textbf{Ixx} [kgm$^2$] &  \textbf{Iyy} [kg*m$^2$] &  \textbf{Izz} [kg*m$^2$] \\
    \hline
    \noalign{\vskip 0.08cm}  
    \hline
    \endfirsthead
    \multicolumn{6}{c}
    {\tablename\ \thetable.\ -- \textbf{z} -  Fortsetzung} \\
    \hline
    \multicolumn{1}{|l|}{} & \multicolumn{1}{c|}{} & \multicolumn{1}{c|}{} & \multicolumn{3}{c|}{t}\\
    \textbf{Body} & \textbf{Masse} [kg] & \textbf{Typ} & \textbf{Ixx} [kgm$^2$] &  \textbf{Iyy} [kgm$^2$] &  \textbf{Izz} [kgm$^2$] \\
    \hline
    \noalign{\vskip 0.08cm}  
    \hline
    \endhead
    \multicolumn{6}{c}{Tabelle wird fortgesetzt}
    \endfoot
    \endlastfoot
    \$S\_Wk1.\$ & 15601 & 0 & 34322 & 592838 & 592838\\
    \hline
    \$S\_Wk1.\$ & 1 & 0 & 1 & 1 & 1\\
    \hline
    \$S\_Wk1.\$B & 1 & 0 & 1 & 1 & 1\\
    \hline
    \$S\_1T.\$B\_Wks1 & 0 & 0 & 1 & 1 & 1\\
    \hline
    \$S\_1T.\$B\_ & 52 & 0 & 0.6 & 1.1 & 0.8\\
    \hline
    \$S\_1T.\$B\_2 & 52 & 0 & 0.6 & 1.1 & 0.8\\
    \hline
    \textbf{Ergebnis Summe von Masse} & ?????? & & & &\\
    \hline  
\end{longtable}
\end{document}
  1. Wie kann ich in meiner Tabelle die Summe der Spalte 2 (Masse) berechnen?
  2. Bzw. kann ich eine Variable deklarieren und diese mit 4 beschreiben? Damit die Summe von der 2 Spalte erst ab Reihe 4 berechnet wird? Danke.

gefragt 27 Mär '19, 14:24

Julia19's gravatar image

Julia19
7158
Akzeptiert-Rate: 0%

pgfplotsstable hat solche features, Standard Tabellen eher nicht.

(29 Mär '19, 18:25) Community

@Murmeltier mittels collcell sollte das durchaus implementierbar sein, auch in einer normalen Tabelle.

(29 Mär '19, 20:05) Skillmon

Wenn es nicht ein longtable sein muss, könntest du dir spreadtab anschauen. Das macht solche Summen eigentlich ziemlich gut. Man muss nur wissen, dass Textzellen mit @ maskiert werden müssen. longtable geht auch, aber da muss man mehr maskieren (z.B. endfirsthead geht nur, wenn die nächste Zelle dann mit := beginnt, falls sie eine Zahl enthält. )

(29 Mär '19, 22:33) Ulrike Fischer

@Julia19 Der Startpost ist ein sogen. Codemonster... Ich habe daher ein Minimalbeispiel für "Zeilensumme mit pgfmath / pgfplotstable" ergänzt.

(30 Mär '19, 17:54) cis

Das Folgende implementiert eine Summierung über eine Spalte (auch über mehrere Spalten innerhalb einer Tabelle ist möglich). Es gibt folgende Macros:

  • \columnsum erwartet 2 Argumente, einen Variablennamen und eine Spaltendeklaration, Verwendung in der Tabellenpreambel
  • \colsumstart erwartet 1 Argument, nämlich denjenigen Aufruf, ab dem die Summierung beginnen soll (unabhängig von der Spalte), außerdem setzt es den Zähler, der die Aufrufe zählt, zurück auf 0. Das ist ein wenig umständlicher in der Benutzung als eine Tabellenzeile, allerdings in der Programmierung deutlich einfacher.
  • \colsumexcept expandiert zu nichts und fungiert als Markierung, dass diese Zelle nicht zur Summe hinzugefügt werden soll
  • \colsumvar erwartet ein optionales und ein notwendiges Argument und gibt den Wert einer der Variablen aus. Das Optionale kann verwendet werden, um die Summe zu runden, das Notwendige ist der Variablenname, der ausgegeben werden soll.
  • \colsumvarset erwartet 2 Argumente. Es kann verwendet werden, um den Wert einer Variable zu setzen, sollte die Variable noch nicht definiert sein, wird eine neue angelegt.

Die Variablen werden global gesetzt. \colsumvar ist vollständig expandierbar.

Öffne in Overleaf
\documentclass{article}
\usepackage[]{longtable}
\usepackage[left=2.00cm, right=2.00cm, top=2.00cm, bottom=2.00cm,includeheadfoot]{geometry}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} 
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} 
\usepackage{collcell}
\usepackage{xparse}

\ExplSyntaxOn
\int_new:N \g__colsum_call_int
\int_new:N \g__colsum_start_int
\newcolumntype\columnsum[2]
  {
    >{ \__colsum_set_name:n { #1 } \collectcell \__colsum_calc:n }
    #2
    <{ \endcollectcell }
  }
\cs_new_protected:Npn \__colsum_set_name:n #1
  {
    \tl_set:Nn \l__colsum_name_tl { g__colsum_var_#1_fp }
    \fp_if_exist:cF { \l__colsum_name_tl }
      {
        \fp_new:c { \l__colsum_name_tl }
      }
  }
\cs_new_protected:Npn \__colsum_calc:n #1
  {
    #1
    \int_gincr:N \g__colsum_call_int
    \tl_if_in:nnF { #1 } { \colsumexcept }
      {
        \tl_if_blank:nF { #1 }
          {
            \int_compare:nNnT { \g__colsum_call_int } > { \g__colsum_start_int }
              {
                \fp_gset:cn { \l__colsum_name_tl }
                  { \fp_use:c { \l__colsum_name_tl } + #1 }
              }
          }
      }
  }
\NewDocumentCommand \colsumstart { m }
  {
    \int_gset:Nn \g__colsum_start_int { #1 }
    \int_gzero:N \g__colsum_call_int
  }
\NewExpandableDocumentCommand \colsumvar { o m }
  {
    \IfNoValueTF { #1 }
      { \fp_use:c { g__colsum_var_#2_fp } }
      { \fp_eval:n { round ( \fp_use:c { g__colsum_var_#2_fp } , #1 ) } }
  }
\NewDocumentCommand \colsumvarset { m m }
  {
    \fp_if_exist:cF { g__colsum_var_#1_fp }
      { \fp_new:c { g__colsum_var_#1_fp } }
    \fp_gset:cn { g__colsum_var_#1_fp } { #2 }
  }
\cs_set:Npn \colsumexcept {}
\ExplSyntaxOff

\begin{document}
% we don't really know the row, but only the call at which we want to start. As
% it isn't called in a \multicolumn, we have to care for that
\colsumstart{4}
\begin{longtable}{|L{6cm}|\columnsum{M}{C{2cm}}|C{2cm}|C{1.4cm}|C{1.4cm}|\columnsum{Izz}{C{1.4cm}}|}
    \caption{M}
    \label{tab:mList} \\
    \hline
    \multicolumn{1}{|l|}{} & \multicolumn{1}{c|}{} & \multicolumn{1}{c|}{} & \multicolumn{3}{c|}
    {\textbf{Trägheitsmomente}}\\
    \textbf{Body} & \textbf{Masse} [kg] & \textbf{Typ} & \textbf{Ixx} [kgm$^2$] &  \textbf{Iyy} [kg*m$^2$] &  \textbf{Izz} [kg*m$^2$] \\
    \hline
    \noalign{\vskip 0.08cm}  
    \hline
    \endfirsthead
    \multicolumn{6}{c}
    {\tablename\ \thetable.\ -- \textbf{z} -  Fortsetzung} \\
    \hline
    \multicolumn{1}{|l|}{} & \multicolumn{1}{c|}{} & \multicolumn{1}{c|}{} & \multicolumn{3}{c|}{t}\\
    \textbf{Body} & \textbf{Masse} [kg] & \textbf{Typ} & \textbf{Ixx} [kgm$^2$] &  \textbf{Iyy} [kgm$^2$] &  \textbf{Izz} [kgm$^2$] \\
    \hline
    \noalign{\vskip 0.08cm}  
    \hline
    \endhead
    \multicolumn{6}{c}{Tabelle wird fortgesetzt}
    \endfoot
    \endlastfoot
    \$S\_Wk1.\$ & 15601 & 0 & 34322 & 592838 & 592838\\
    \hline
    \$S\_Wk1.\$ & 1 & 0 & 1 & 1 & 1\\
    \hline
    \$S\_Wk1.\$B & 1 & 0 & 1 & 1 & 1\\
    \hline
    \$S\_1T.\$B\_Wks1 & 0 & 0 & 1 & 1 & 1\\
    \hline
    \$S\_1T.\$B\_ & 52 & 0 & 0.6 & 1.1 & 0.8\\
    \hline
    \$S\_1T.\$B\_2 & 52 & 0 & 0.6 & 1.1 & 0.8\\
    \hline
    \textbf{Ergebnis Summe von Masse} &
    % \colsumexcept tells it to not use this cell in the sum.
    \colsumexcept\colsumvar{M} & & & &
    \colsumexcept\colsumvar{Izz}
    \\
    \hline  
\end{longtable}
\end{document}

Ergebnis:

alt text

Permanenter link

beantwortet 29 Mär '19, 20:40

Skillmon's gravatar image

Skillmon
1.1k6
Akzeptiert-Rate: 48%

bearbeitet 29 Mär '19, 20:42

+1 aber ich denke trotzdem, dass "eher nicht" nicht komplett daneben ist. ;-) (Versteh mich nicht falsch, das ist echt super, aber was ist, wenn man das selber leicht modifizieren will? Solange die Dokumentation xparse ist was sie ist, muss entweder sehr begabt sein oder eine unglaublich hohe Frustrationsschwelle haben. Zumindest kann man nicht sagen, dass die Beispiele in der xparse Dokumentation irreführend sind. ;-)

(29 Mär '19, 20:56) Community

@Murmeltier die xparse Dokumentation ist meiner Meinung nach nur an einer Stelle dürftig, und das ist bei den Argumenttypen e und E. Die eigentliche, interessante Dokumentation stellt interface3.pdf dar. Allerdings gebe ich dir Recht, die Anpassung könnte sich als schwierig erweisen. Jedoch glaube ich nicht, dass es geholfen hätte, hätte ich das Ganze ohne expl3 gecoded und nur auf TeX und LaTeX2e aufgebaut, die meisten Anwender könnten auch diesen Code nicht ohne Weiteres anpassen (und die Fähigkeiten von l3fp kommen mir sehr gelegen...) :)

(29 Mär '19, 21:10) Skillmon
1

Das ist nicht, was ich meine. Bei pgfplotstable gibt es in der Anleitung und im Netz eine Menge Beispiele. Je nachdem wer den Code benutzt hat es vielleicht einfacher, wenn es dazu eine Dokumentation mit Beispielen gibt.

(29 Mär '19, 21:14) Community

@Murmeltier berechtigte Anmerkungen. Ich selbst bin allerdings nicht unbedingt ein Fan von pgfplotstable und finde es oft einfacher (für mich selbst), Dinge anders zu machen. Natürlich bin ich nicht das Maß und über eine Antwort mit pgfplotstable würden sich sicher einige freuen. Wenn ich mich recht entsinne, gibt es auch ein anderes Paket, das Berechnungen ähnlich zu Excel oder Libre Calc ermöglicht (datatools vielleicht? Kann mich nicht erinnern).

(29 Mär '19, 22:30) Skillmon
1

@user49915 Wenn Du die Antwort gut findest, dann drücke bitten den Daumen nach oben Button. Ich finde die Antwort gut, und habe genau das getan. Mein Kommentar ist mehr eine Diskussion, wieviel Tabellen-Kalkulation man LaTeX zumuten kann. Die Antwort zeigt, dass da überraschend viel möglich ist, aber die Codes, die das bewerkstelligen, sind m.E. nicht unbedingt selbsterklärend.

(29 Mär '19, 23:01) Community

@murmeltier Leichte Modifizierbarkeit wurde vom OPer meines Erachtens nicht als Voraussetzung erwähnt. Man hätte durchaus Skillmons Code zusätzlich obfuszieren dürfen und hätte damit die Frage trotzdem beantwortet.

(29 Mär '19, 23:39) user0

@murmeltier Natürlich. (Ich behauptete nie das Gegenteil.)

(31 Mär '19, 14:46) user0

Ich habe gerade ein Problem auf dem Tisch, bei dem genau diese Lösung für eine mehrspaltige Tabelle verwendet wird. Das funktioniert soweit prima, aber jetzt sollen automatische Zwischen- und Endsummen mithilfe der longtable-Makros \endfoot und \endlastfoot implementiert werden. Daran scheitere ich bisher:

    Runaway argument?
    \g__colsum_var_TSMcnt_fp \unskip^^ \relax \d@llarend \do@row@strut \hfil \ETC.
    ./tabellendings.tex:183: Forbidden control sequence found while scanning use of \__fp_to_decimal_recover:w.

Kommt das jemandem bekannt vor?

(01 Feb '20, 15:56) TeXniker
1

@Moss Zwischensummen via \endfoot sind schon deshalb problematisch, weil longtable den entsprechenden Code normalerweise nur einmal ganz am Anfang (also noch bevor der erste Fuß ausgegeben wird) ausführt, um eine Box zu bauen und dann auf jeder Seite nur noch die fertige Box ausgibt. Auf TeX.SX gab es dazu AFAIK schon mehrere Fragen und AFAIR David hat dazu auch mal eine Änderung für longtable vorgeführt. Das wäre ev. eine neue Frage wert.

(01 Feb '20, 16:06) saputello

Danke, dann muss ich nochmal dort graben. longtable ist ja eine eigene Rubrik, aber da steht viel (imo trivialer) Kram drin. An einem Ersatz des Box-Mechanismus habe ich auch schon mal experimentiert, aber das kann ich nicht öffentlich zeigen. ;-) Danke für den Hinweis.

(01 Feb '20, 16:20) TeXniker
Ergebnis 5 von 10 show 5 more comments

Eine weitere Möglichkeit is spreadtab. Dort muss man aber mit einer gewissen Sorgfalt vorgehen, wenn Zellen Text enthalten, oder wenn "unbekannte" Befehle wie endfirsthead verwendet werden:

Öffne in Overleaf
\documentclass{article}
\usepackage[xfp]{spreadtab}
\usepackage{longtable,siunitx}
\sisetup{locale=DE}
\begin{document}

\begin{spreadtab}{{longtable}{SS|S}}
@\textbf{Masse} & @\textbf{Masse} %maskiert mit @ wegen text
 \\\endfirsthead
 :={4.5} %muss maskiert werden wegen \endfirsthead 
 & 5.4 & a2+b2 \\
 4.3 & 6.5 & a3+b3 \\
 4.9 & 3.7 & a4+b4 \\
 \hline
 sum(a2:a4) & sum(b2:b4) & a5+b5
 \end{spreadtab}

\end{document}

alt text

Permanenter link

beantwortet 30 Mär '19, 00:42

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.6k23
Akzeptiert-Rate: 52%

spreadtab war das Paket, danke Ulrike!

(30 Mär '19, 10:29) Skillmon

Mit pgfmath / pgfplotstable.

alt text

Öffne in Overleaf
\documentclass[margin=5pt, varwidth]{standalone}
%\documentclass{article}
\usepackage{tikz}

\begin{document}
Einfaches Bsp. einer Summe: \\
\def\Liste{1,2,3,0,-1}

\def\pgfmathsetglobalmacro#1#2{%
  \pgfmathparse{#2}%
  \global\let#1\pgfmathresult}

\pgfmathsetmacro{\Sum}{0}
\foreach \i in \Liste {
\pgfmathsetglobalmacro{\Sum}{\Sum + \i}   }

Summe von \Liste~ ist \Sum
\end{document}

Damit:

alt text

Öffne in Overleaf
\documentclass[margin=5pt, varwidth]{standalone}
%\documentclass{article}
\usepackage{pgfplotstable}

\begin{document}
\pgfplotstableset{dec sep align, header=false,
every head row/.style={output empty row},
}

% Wertetabelle
\pgfplotstableread[
]{
1
2
3
0
-1
}\Werte

\pgfplotstablegetrowsof{\Werte}
\pgfmathtruncatemacro\LetzteZeile{\pgfplotsretval-1}
% Nummer der letzten Zeile: \LetzteZeile

% \pgfplotstablegetelem{1}{[index]0}\of{\Werte}
% Beispielwert auslesen: \pgfplotsretval

% Summe ermitteln:
\def\pgfmathsetglobalmacro#1#2{%
  \pgfmathparse{#2}%
  \global\let#1\pgfmathresult}

\pgfmathsetmacro{\Sum}{0}
\foreach \i in {0,...,\LetzteZeile} {
\pgfplotstablegetelem{\i}{[index]0}\of{\Werte} % Werte auslesen
\pgfmathsetmacro{\s}{\pgfplotsretval}
\pgfmathsetglobalmacro{\Sum}{\Sum + \s}  % Werte addieren
}
% Summe ist:~ \Sum.

% Neue Zeile als Tabelle mit Summenwert erstellen
\pgfplotstableread[]{
\Sum
}\Summe

% Beide Tabellen ergänzen
\pgfplotstablevertcat{\Werte}{\Summe}

\pgfplotstabletypeset[
every last row/.style={before row=\hline},
]{\Werte}
\end{document}
Permanenter link

beantwortet 30 Mär '19, 17:43

cis's gravatar image

cis
9.5k74452491
Akzeptiert-Rate: 29%

bearbeitet 31 Mär '19, 14:09

Danke für die zahlreichen Antworten :)

(01 Apr '19, 08:17) Julia19
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×254
×39
×1

gestellte Frage: 27 Mär '19, 14:24

Frage wurde gesehen: 8,157 Mal

zuletzt geändert: 01 Feb '20, 16:20