
Ich möchte mithilfe von etoolbox einen Zähler basierend auf einem ifboolexpr ergänzen, bekomme es aber nicht wie erhofft zum Laufen.
Ich möchte in meinem Dokument verschiedene Bedingungen festlegen und am Ende zählen, wie oft sie erfüllt wurden. Am Ende möchte ich eine Summe der verschiedenen Zählungen erstellen.
Ich kann die grundlegenden Aufgaben ausführen, die in meinem MWE unten als DIVCNT und MARCNT gekennzeichnet sind.
aber das \SPDD-Ergebnis wird nicht zum als SPDCNT gekennzeichneten Zähler hinzugefügt.
Seltsamerweise erkennt es die Bedingung einzeln, aber diese Bedingungen (markiert als COUNTER 1 und COUNTER 2) in der MWE-Ausgabe scheinen nicht zum Zähler hinzugefügt zu werden
Irgendwelche Vorschläge, was ich falsch mache? Hier ist mein MWE:
\documentclass{article}
\usepackage{etoolbox}
\newcounter{divcnt}
\newcommand*{\divcnt}[1]{\addtocounter{divcnt}{#1}}
\newcommand*{\totaldivcnt}{\thedivcnt}
\newcounter{marcnt}
\newcommand*{\marcnt}[1]{\addtocounter{marcnt}{#1}}
\newcommand*{\totalmarcnt}{\themarcnt}
\newcounter{spdcnt}
\newcommand*{\spdcnt}[1]{\addtocounter{spdcnt}{#1}}
\newcommand*{\totalspdcnt}{\thespdcnt}
\newcommand*{\spdd}{}
\newcommand*{\spchk}{}
\begin{document}
\renewcommand{\spdd}{2000}
\renewcommand*{\spchk}{
\ifboolexpr{
test {\notblank{\spdd}}
}
{1}{0}
}
First Counter \spdcnt{\spchk} \\
\renewcommand{\spdd}{2020}
\renewcommand*{\spchk}{
\ifboolexpr{
test {\notblank{\spdd}}
}
{1}{0}
}
Second Counter \spdcnt{\spchk} \\
\divcnt{0}
\divcnt{1}
\divcnt{1}
\divcnt{0}
\marcnt{1}
\marcnt{1}
\marcnt{1}
\marcnt{1}
\marcnt{1}
Total MAR Count: \totalmarcnt{} \\
Total DIV Count: \totaldivcnt{} \\
Total SPD Count: \totalspdcnt{} \\
Sum of discrepancies: \the\numexpr\themarcnt-\thedivcnt-\thespdcnt\relax
\end{document}
Antwort1
Das Makro \spdd
, das Sie auf Leerzeichen prüfen, ist ein Befehl (definiert mit \newcommand
), daher können Sie den \ifdefempty
Test von verwenden etoolbox
. Dieser Test bietet bereits einen True- und False-Teil, sodass Sie ihn nicht \ifboolexpr
mit einem test
verwenden müssen. Dieses vereinfachte Makro eignet sich auch als Argument für das Zählerinkrementmakro.
Ein weiteres Problem besteht darin, dass Sie das Makro \spchk
zweimal mit genau derselben Definition definieren. Dies ist redundant, da Sie es einmal am Anfang des Dokuments definieren und es später beliebig oft verwenden können.
MWE:
\documentclass{article}
\usepackage{etoolbox}
\newcounter{divcnt}
\newcommand*{\divcnt}[1]{\addtocounter{divcnt}{#1}}
\newcommand*{\totaldivcnt}{\thedivcnt}
\newcounter{marcnt}
\newcommand*{\marcnt}[1]{\addtocounter{marcnt}{#1}}
\newcommand*{\totalmarcnt}{\themarcnt}
\newcounter{spdcnt}
\newcommand*{\spdcnt}[1]{\addtocounter{spdcnt}{#1}}
\newcommand*{\totalspdcnt}{\thespdcnt}
\newcommand*{\spdd}{}
\newcommand*{\spchk}{}
\begin{document}
\renewcommand*{\spchk}{%
\ifdefempty{\spdd}{0}{1}%
}
\renewcommand{\spdd}{2000}
First Counter \spdcnt{\spchk} \\
\renewcommand{\spdd}{2020}
Second Counter \spdcnt{\spchk} \\
\divcnt{0}
\divcnt{1}
\divcnt{1}
\divcnt{0}
\marcnt{1}
\marcnt{1}
\marcnt{1}
\marcnt{1}
\marcnt{1}
Total MAR Count: \totalmarcnt{} \\
Total DIV Count: \totaldivcnt{} \\
Total SPD Count: \totalspdcnt{} \\
Sum of discrepancies: \the\numexpr\themarcnt-\thedivcnt-\thespdcnt\relax
\end{document}
Ergebnis: