Berechnung in Spreadtab Thema ist als GELÖST markiert

Formelsatz für Mathematik, Naturwissenschaften und Technik


Sam85
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Do 13. Feb 2020, 21:17

Berechnung in Spreadtab

Beitrag von Sam85 »

Hi

ich habe eine kurze Frage. Ich wollte die Berechnung im Spreadtab etwas vereinfacht schreiben.
\newcommand{\changeOne}[2]{((#2*\faktorA)/#1)/\faktorB}
Jedoch wird das NewCommand nicht kompiliert. Schreibe ich es wie im Code wird es kompiliert.
((b6*\faktorA)/b5)/\faktorB
Kann mir das jemand erklären und mir sagen wie man das richtig macht?

Danke im Voraus.

PS: In Overleaf und TexStudio kompiliert es trotz des Fehlers. Von dem weiß ich leider auch nicht was er bedeutet?

Grüße

Sam


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage{mathptmx}
\usepackage[xfp]{spreadtab}
\usepackage{siunitx}
\sisetup{%
	locale=DE,
	group-separator = {.},
	group-digits=integer,
	group-minimum-digits = 4,
	negative-color = red
}

\begin{document}

\begin{table}
\caption{PUMA SE - Mitarbeitervolumen}
\newcommand{\faktorA}{1000000}
\newcommand{\faktorB}{1000}
\newcommand{\changeOne}[2]{((#2*\faktorA)/#1)/\faktorB}
\newcommand{\changeTwo}[2]{(#2*#1*\faktorB)/\faktorA}

    \begin{spreadtab}{{tabularx}{\textwidth}{XS[table-format=1.0, table-auto-round = true, table-alignment = right, table-column-width = 1.4cm]S[table-format=1.0, table-auto-round = true, table-alignment = right, table-column-width = 1.4cm]S[table-format=1.0, table-auto-round = true, table-alignment = right, table-column-width = 1.4cm]}} 
    	\toprule
    	@\textbf{Funktionsbereich} 				        & @\textbf{2020} & @\textbf{2019} & @\textbf{2018} \\ 
    	\midrule
    	@Marketing, Retail und Vertrieb					& 10761	& 10828	& 9491 \\
    	@Produktmanagement, Forschung und Entwicklung 	& 1049	& 999	& 946 \\
    	@Verwaltungs- und allgemeine Bereiche			& 2564	& 2505	& 2457 \\
    	\midrule
    	@\textbf{Mitarbeiter}							& sum(b2:b4) & sum(c2:c4) & sum(d2:d4) \\
    	\midrule
    	@Personalaufwand in Millionen Euro				& 583.7	& 634.5 & 553.8 \\
    	@Durchschnitt pro Mitarbeiter in Tausend Euro	& ((b6*\faktorA)/b5)/\faktorB & ((c6*\faktorA)/c5)/\faktorB	& ((d6*\faktorA)/d5)/\faktorB \\
    	\midrule
    	@Marketing, Retail und Vertrieb					& (b2*b7*\faktorB)/\faktorA	& c2*c7*\faktorB & d3*d7*\faktorB  \\
    	@Produktmanagement, Forschung und Entwicklung	& (b3*b7*\faktorB)/\faktorA	& c3*c7*\faktorB & d3*d7*\faktorB \\
    	@Verwaltungs- und allgemeine Bereiche			& (b4*b7*\faktorB)/\faktorA	& c4*c7*\faktorB & d4*d7*\faktorB \\
    	\bottomrule
	\end{spreadtab} 
\end{table}

\end{document}

gast.

Re: Berechnung in Spreadtab

Beitrag von gast. »

! Undefined control sequence.
<inserted text> ...column-width = 1.4cm]}\toprule 
                                                  \textbf {Funktionsbereich}...
l.41 	\end{spreadtab}
bedeutet, dass die Anweisung am Ende der folgenden Zeile, also \toprule nicht definiert ist. Welches Paket du normalerweise dafür verwendest, weiß ich nicht sicher, möglicherweise booktabs oder tabularray?

Und ich wette, dass der Fehler bei dem Beispiel auch auf overleaf und in TeXstudio gemeldet wird. Man sollte immer alle Fehler beseitigen und sie nicht so lange ignorieren, bis einem das gesamte Dokument um die Ohren fliegt.

Übrigens: \usepackage[utf8]{inputenc} ist seit inzwischen vier Jahren überflüssig.

gast.

Re: Berechnung in Spreadtab

Beitrag von gast. »

Sam85 hat geschrieben:
Do 7. Apr 2022, 12:49
Jedoch wird das NewCommand nicht kompiliert. Schreibe ich es wie im Code wird es kompiliert.
Was genau meinst du damit? Vom \toprule-Fehler abgesehen, kann ich keinen Fehler in dem gezeigten Code sehen. Wenn ich \toprule, \midrule und \bottomrule im Beispiel entferne, compiliert das ohne Fehlermeldung und ohne für mich erkennbaren Fehler.

Sam85
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Do 13. Feb 2020, 21:17

Re: Berechnung in Spreadtab

Beitrag von Sam85 »

Ah ok dann hab ich das Package Booktabs im Minimalbeispiel vergessen. Danke.

Mein Anliegen ist eigentlich nur das hier
\newcommand{\changeTwo}[2]{(#2*#1*\faktorB)/\faktorA}
Ich wollte damit die Berechnung im Spreadtab vereinfachen. Also in der Zeile dann \changeTwo{c5}{c7} statt
((b7*\faktorA)/b5)/\faktorB
schreiben. Das führt aber zu einem Fehler beim kompilieren.

ich meine ja nur

Re: Berechnung in Spreadtab

Beitrag von ich meine ja nur »

Wenn das dein Problem ist, dann sollte das im Minimalbeispiel natürlich auch gezeigt werden. Sonst ist es kein Minimalbeispiel für das Problem.

Aber kurz gesagt: Es wird nicht gehen. spreadtab erlaubt zwar Makros in den Zellen, aber keine Makros, die erst expandiert werden müssen, um die Berechnung zu sehen. Dafür gibt es bei dem Paket Funktionen. Allerdings gibt es bisher nur einige, wenige vordefinierte Funktionen und bezüglich der Definition neuer Funktionen heißt es in spreadtab (siehe Einleitung von Abschnitt 4):
There will be more details on how to program macro functions in the
next version of this manual.
Auf diese next version of this manual warte nicht nur ich nun schon seit drei Jahren ebenso wie auf die in der Fußnote angekündigten notwendigen weiteren Funktionen. :shock:

Sam85
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 56
Registriert: Do 13. Feb 2020, 21:17

Re: Berechnung in Spreadtab

Beitrag von Sam85 »

Hi, stand ja im ersten Post. Aber wenn es mit Macros sowieso "noch" nicht geht, muss ich wohl beim langen Weg bleiben. Danke für die Rückmeldung.

ich meine ja nur

Re: Berechnung in Spreadtab

Beitrag von ich meine ja nur »

Sam85 hat geschrieben:
Fr 8. Apr 2022, 12:40
Hi, stand ja im ersten Post.
Im ersten Post ist nicht gezeigt, wie du die selbst definierten Makros verwenden willst. Da stand nur, dass das nicht compiliert. Das lag aber schlicht an nicht definierten Befehlen. Ein Minimalbeispiel (bitte die verlinkte Seite im eigenen Interesse einmal komplett lesen!) sollte das eigentliche Problem aber immer zeigen und darüber hinaus möglichst keine weiteren Probleme haben. Sonst ist es eben kein Minimalbeispiel, wie in der verlinkten Anleitung auch klar geschrieben steht. Wenn du meinst, dass das für dich irrelevant ist, dann mag das eine Zeit lang gut gehen. Mir geht aber nicht nur diese überflüssige Diskussion auf den Keks, sondern auch, dass man bei dir immer wieder nachfragen muss. Das ist unnötig, kostet Zeit, nervt und ist damit demotivierend, hier überhaupt noch tätig zu werden. Deshalb hatte ich diese Frage auch erst einmal ignoriert (und hätte es offensichtlich auch weiterhin tun sollen).

Antworten