
Ich habe ein Dokument, in dem ich eine Anzahl von Zählern in Bezug auf andere Zähler definieren möchte.
Zu diesem Zweck habe ich einen Befehl erstellt, der die Beziehung zwischen diesen Zählern berechnet.
\newcommand{\modifier}[1]{
\ifthenelse{\value{#1} < 9}{-1}{
\ifthenelse{\value{#1} < 13}{0}{
\ifthenelse{\value{#1} < 16}{1}{2}}}
}
Wenn ich jedoch versuche, den Befehl zum Setzen von Zählern zu verwenden,
\newcounter{strength}
\setcounter{strength}{11}
\newcounter{dexterity}
\setcounter{dexterity}{15}
\newcounter{str}
\setcounter{str}{\modifier{strength}}
\newcounter{dex}
\setcounter{dex}{\modifier{dexterity}}
Der Compiler beschwert sich, dass im zweiten Feld des \setcounter
Befehls keine Zahl steht.
Wie kann ich meinen zweiten Zähler per Befehl in Bezug auf den ersten setzen?
Antwort1
Sie benötigen erweiterbare Tests für die Verwendung in \setcounter
, was \ifthenelse
nicht der Fall ist.
Es gibt andere Lösungen mit etoolbox
, aber ich stelle eine mit vor 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}
Antwort2
Die \ifthenelse
Auswertungen sind nicht erweiterbar. Hier ist eine (La)TeX-Implementierung, die Erweiterbarkeit bietet:
\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}