조건부 ifbooexpr을 기반으로 카운터에 조건부 추가

조건부 ifbooexpr을 기반으로 카운터에 조건부 추가

etoolbox를 사용하여 ifbooexpr을 기반으로 카운터를 추가하고 싶지만 원하는 대로 작동하지 않습니다.

문서 전반에 걸쳐 다양한 조건을 설정하고 마지막에는 해당 조건이 충족된 횟수를 계산하고 싶습니다. 마지막에 다양한 카운트의 합계를 만들고 싶습니다.

아래 MWE에 DIVCNT 및 MARCNT로 표시된 기본 작업을 수행할 수 있습니다.

그러나 \SPDD 결과는 SPDCNT로 표시된 카운터에 추가되지 않습니다.

이상하게도 개별적으로는 조건을 인식하지만 MWE 출력의 조건(COUNTER 1 및 COUNTER 2로 표시됨)이 카운터에 추가되지 않는 것 같습니다.

내가 뭘 잘못하고 있는지에 대한 제안이 있나요? 내 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}

답변1

\spdd비어 있는지 확인하는 매크로 는 명령( 으로 정의됨)이므로 의 테스트를 \newcommand사용할 수 있습니다 . 이 테스트는 이미 True 및 False 부분을 제공 하므로 . 이 단순화된 매크로는 카운터 증가 매크로에 대한 인수로 사용하기에 적합합니다.\ifdefemptyetoolbox\ifboolexprtest

\spchk또 다른 문제는 정확히 동일한 정의로 매크로를 두 번 정의한다는 것입니다 . 이는 중복되므로 문서 시작 부분에서 한 번 정의하고 나중에 여러 번 사용할 수 있습니다.

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}

결과:

여기에 이미지 설명을 입력하세요

관련 정보