Adição condicional ao contador com base no ifboolexpr condicional

Adição condicional ao contador com base no ifboolexpr condicional

Quero adicionar um contador baseado em um ifboolexpr usando o etoolbox, mas não consigo fazê-lo funcionar como esperava.

Quero colocar várias condições ao longo do meu documento e, no final, contar quantas vezes elas foram atendidas. Como quero criar uma soma das várias contagens no final.

Posso fazer os básicos marcados como DIVCNT e MARCNT no meu MWE abaixo.

mas o resultado \SPDD não será adicionado ao contador marcado como SPDCNT.

Estranhamente, individualmente, ele reconhece a condicional, mas essas condicionais (marcadas como CONTADOR 1 e CONTADOR 2) na saída do MWE não parecem ser adicionadas ao contador

Alguma sugestão sobre o que estou fazendo de errado? aqui está meu 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}

Responder1

A macro \spddque você verifica se está em branco é um comando (definido com \newcommand), portanto você pode usar o \ifdefemptyteste de etoolbox. Este teste já fornece uma parte True e False, então você não precisa \ifboolexprde um test. Esta macro simplificada também é adequada para ser usada como argumento para a macro de incremento do contador.

Outra questão é que você define a macro \spchkduas vezes, exatamente com a mesma definição. Isso é redundante, você pode defini-lo uma vez no início do documento e usá-lo inúmeras vezes depois.

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}

Resultado:

insira a descrição da imagem aqui

informação relacionada