명령 결과에 대한 카운터를 어떻게 설정합니까?

명령 결과에 대한 카운터를 어떻게 설정합니까?

다른 카운터와 관련하여 여러 카운터를 정의하고 싶은 문서가 있습니다.

이를 위해 이러한 카운터 간의 관계를 계산하는 명령을 만들었습니다.

\newcommand{\modifier}[1]{
 \ifthenelse{\value{#1} < 9}{-1}{
 \ifthenelse{\value{#1} < 13}{0}{
 \ifthenelse{\value{#1} < 16}{1}{2}}}
}

그러나 명령을 사용하여 카운터를 설정하려고 하면

\newcounter{strength}
\setcounter{strength}{11}
\newcounter{dexterity}
\setcounter{dexterity}{15}
\newcounter{str}    
\setcounter{str}{\modifier{strength}}
\newcounter{dex}
\setcounter{dex}{\modifier{dexterity}}

컴파일러는 명령의 두 번째 필드에 숫자가 없다고 불평합니다 \setcounter.

명령을 사용하여 첫 번째 카운터와 관련해 두 번째 카운터를 어떻게 설정할 수 있나요?

답변1

에서 사용하려면 확장 가능한 테스트가 필요 \setcounter하지만 그렇지 \ifthenelse않습니다.

에는 다른 솔루션이 있지만 etoolbox저는 을 사용하여 하나를 제시하겠습니다 expl3.

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\modifier}{m}
 {
  \int_compare:nTF { \value{#1} < 9 }
   { -1 }
   {
    \int_compare:nTF { \value{#1} < 13 }
     { 0 }
     {
      \int_compare:nTF { \value{#1} < 16 }
       { 1 }
       { 2 }
     }
   }
 }
\ExplSyntaxOff

\newcounter{strength}
\newcounter{dexterity}
\newcounter{str}    
\newcounter{dex}

\begin{document}

\setcounter{strength}{11}
\setcounter{dexterity}{15}
\setcounter{str}{\modifier{strength}}
\setcounter{dex}{\modifier{dexterity}}

strength: \arabic{strength}

dexterity: \arabic{dexterity}

str: \arabic{str}

dex: \arabic{dex}

\end{document}

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

답변2

평가 \ifthenelse는 확장할 수 없습니다. 확장성을 제공하는 (La)TeX 구현은 다음과 같습니다.

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

\documentclass{article}

\newcommand{\modifier}[1]{%
  \ifnum\value{#1}<9 -1
  \else\ifnum\value{#1}<13 0
  \else\ifnum\value{#1}<16 1
  \else 2
  \fi\fi\fi
}

\begin{document}

\newcounter{strength}
\setcounter{strength}{11}
\newcounter{dexterity}
\setcounter{dexterity}{15}
\newcounter{str}    
\setcounter{str}{\modifier{strength}}
\newcounter{dex}
\setcounter{dex}{\modifier{dexterity}}

strength: \thestrength

dexterity: \thedexterity

str: \thestr

dex: \thedex

\end{document}

관련 정보