Agregar condicional al contador basado en ifboolexpr condicional

Agregar condicional al contador basado en ifboolexpr condicional

Quiero agregar a un contador basado en ifboolexpr usando etoolbox pero no puedo hacerlo funcionar como esperaba.

Quiero poner varias condiciones a lo largo de mi documento y luego, al final, contar cuántas veces se cumplieron. Como quiero crear una suma de los distintos recuentos al final.

Puedo hacer los básicos marcados como DIVCNT y MARCNT en mi MWE a continuación.

pero el resultado de \SPDD no se agregará al contador marcado como SPDCNT.

Curiosamente, individualmente reconoce el condicional, pero esos condicionales (marcados como CONTADOR 1 y CONTADOR 2) en la salida MWE no parecen agregarse al contador.

¿Alguna sugerencia sobre qué estoy haciendo mal? aquí está mi 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}

Respuesta1

La macro \spddque verificas para que esté en blanco es un comando (definido con \newcommand), por lo tanto puedes usar la \ifdefemptyprueba desde etoolbox. Esta prueba ya proporciona una parte de Verdadero y Falso, por lo que no es necesario \ifboolexprun archivo test. Esta macro simplificada también es adecuada para usarla como argumento para la macro de incremento del contador.

Otro tema es que defines la macro \spchkdos veces, exactamente con la misma definición. Esto es redundante, puede definirlo una vez al inicio del documento y usarlo tantas veces como desee más adelante.

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:

ingrese la descripción de la imagen aquí

información relacionada