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}
gefragt 27 Mär '19, 14:24 Julia19 |
Das Folgende implementiert eine Summierung über eine Spalte (auch über mehrere Spalten innerhalb einer Tabelle ist möglich). Es gibt folgende Macros:
Die Variablen werden global gesetzt. Ö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: beantwortet 29 Mär '19, 20:40 Skillmon +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
(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
(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
(01 Feb '20, 16:06)
saputello
Danke, dann muss ich nochmal dort graben.
(01 Feb '20, 16:20)
TeXniker
Ergebnis 5 von 10
show 5 more comments
|
Mit pgfmath / pgfplotstable. Ö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: Ö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} beantwortet 30 Mär '19, 17:43 cis Danke für die zahlreichen Antworten :)
(01 Apr '19, 08:17)
Julia19
|
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} beantwortet 30 Mär '19, 00:42 Ulrike Fischer
(30 Mär '19, 10:29)
Skillmon
|
pgfplotsstable hat solche features, Standard Tabellen eher nicht.
@Murmeltier mittels
collcell
sollte das durchaus implementierbar sein, auch in einer normalen Tabelle.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. )
@Julia19 Der Startpost ist ein sogen. Codemonster... Ich habe daher ein Minimalbeispiel für "Zeilensumme mit pgfmath / pgfplotstable" ergänzt.