# Conditional add to Counter based on conditional ifboolexpr

I want to add to a counter based on an ifboolexpr using etoolbox but cant get it to work as I had hoped.

I want to put various conditions throughout my document and then at the end have a count of how many times it was met through out. As I want to create a sum of the various counts at the end.

I can do the basic ones as marked as DIVCNT and MARCNT in my MWE below.

but the \SPDD result wont add to the counter marked as SPDCNT.

Oddly individually it recognises the conditional but those conditionals (marked as COUNTER 1 and COUNTER 2) in the MWE output dont seem to get added to the counter

Any Suggestions as to what im doing wrong? here's my MWE:

\documentclass{article}

\usepackage{etoolbox}

\newcounter{divcnt}
\newcommand*{\totaldivcnt}{\thedivcnt}

\newcounter{marcnt}
\newcommand*{\totalmarcnt}{\themarcnt}

\newcounter{spdcnt}
\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}



The macro \spdd that you check for being blank is a command (defined with \newcommand), therefore you can use the \ifdefempty test from etoolbox. This test already provides a True and False part, so you don't need \ifboolexpr with a test. This simplified macro is also suitable to use as an argument for the counter increment macro.

Another issue is that you define the macro \spchk two times, with exactly the same definition. This is redundant, you can define it once at the start of the document and use it any number of times later.

MWE:

\documentclass{article}
\usepackage{etoolbox}

\newcounter{divcnt}
\newcommand*{\totaldivcnt}{\thedivcnt}

\newcounter{marcnt}
\newcommand*{\totalmarcnt}{\themarcnt}

\newcounter{spdcnt}
\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}


Result:

• @marjin THX very much Sep 3 '20 at 8:29