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, 09:24

Julia19's gravatar image

Julia19
713
Akzeptiert: 40%

pgfplotsstable hat solche features, Standard Tabellen eher nicht.

(29 Mär, 13:25) Gelöscht

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

(29 Mär, 15: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, 17: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, 12: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, 15:40

Skillmon's gravatar image

Skillmon
6664

bearbeitet 29 Mär, 15: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, 15:56) Gelöscht

@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, 16: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, 16:14) Gelöscht

@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, 17: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, 18:01) Gelöscht

@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, 18:39) user0

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

(31 Mär, 08:46) user0
Ergebnis 5 von 7 Alle anzeigen

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 29 Mär, 19:42

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.3k23

spreadtab war das Paket, danke Ulrike!

(30 Mär, 05: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, 12:43

cis's gravatar image

cis
9.2k20199322

bearbeitet 31 Mär, 08:09

Danke für die zahlreichen Antworten :)

(01 Apr, 02:17) Julia19
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×225
×37
×1

Frage gestellt: 27 Mär, 09:24

Frage wurde angeschaut: 517 Mal

Zuletzt aktualisiert: 01 Apr, 02:17