
Tengo un documento donde me gustaría definir una cantidad de contadores en términos de otros contadores.
Para hacer esto, he creado un comando que calcula la relación entre estos contadores.
\newcommand{\modifier}[1]{
\ifthenelse{\value{#1} < 9}{-1}{
\ifthenelse{\value{#1} < 13}{0}{
\ifthenelse{\value{#1} < 16}{1}{2}}}
}
Sin embargo, cuando intento utilizar el comando para configurar contadores
\newcounter{strength}
\setcounter{strength}{11}
\newcounter{dexterity}
\setcounter{dexterity}{15}
\newcounter{str}
\setcounter{str}{\modifier{strength}}
\newcounter{dex}
\setcounter{dex}{\modifier{dexterity}}
El compilador se queja de que no hay ningún número en el segundo campo del \setcounter
comando.
¿Cómo puedo configurar mi segundo contador en términos del primero usando un comando?
Respuesta1
Necesita pruebas ampliables para su uso \setcounter
, lo cual \ifthenelse
no es así.
Hay otras soluciones con etoolbox
, pero presentaré una con 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}
Respuesta2
Las \ifthenelse
evaluaciones no son ampliables. Aquí hay una implementación de (La)TeX que proporciona capacidad de expansión:
\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}