我一直在尝试用谷歌搜索,这似乎是一件显而易见的愚蠢的事情,但我到处看到的都在回答如何在条件语句中使用计数器值,我可以做得很好。
基本上,我想设置一个计数器值,但在值所在的部分内,放置一个 if/then/else 层次结构。我知道我可以通过反转顺序(放置一个 if/then/else 层次结构并在每个结果中放置一个新的 set-count 命令)来实现,但出于易于阅读和某些编程结构原因,我宁愿采用另一种方式。
基本上我想做以下的事情;
\newcounter{TestCounter}
\setcounter{TestCounter}
{
\ifthenelse{5 > 6}{7}{2}
}
这样的事可能吗,还是我需要以其他方式重新排序?
谢谢!
对于更明确的 MWE:
我想要使用以下内容;
\documentclass{article}
\usepackage{xifthen}
\begin{document}
\newcounter{TestCounter}
\setcounter{TestCounter}{
\ifthenelse{5 > 6}{7}{2}}
\end{document}
其中(理想情况下)上述操作将导致为计数“TestCounter”分配值“2”(因为 5 < 6)。
实际上,我会使用更复杂的代码,但它会解决检查一个数字是否大于另一个数字的问题,其中一个数字会存储在计数器中。例如
\documentclass{article}
\usepackage{xifthen}
\begin{document}
\newcounter{Temp}
\newcounter{TestCounter}
\setcounter{Temp}{5}
\setcounter{TestCounter}{
\ifthenelse{\arabic{Temp} > 2}{4}{7}
}
\end{document}
答案1
\ifthenelse
不可扩展,因此不能在 的参数中使用\setcounter
。但是,TeX 原语\ifnum
是可扩展的:
\setcounter{TestCounter}{%
\ifnum 5>6 % space ends number 6
7%
\else
2%
\fi
}
\arabic
不应在数字上下文中使用,因为它可能包含字体设置等格式化内容。计数器的值可通过以下方式访问\value{countername}
:
\setcounter{TestCounter}{%
\ifnum\value{Temp}>2 % space ends number 2
4%
\else
7%
\fi
}
答案2
一个简单的包装器可能在这里起作用(至少对于这个简单的例子来说)
\documentclass{article}
%\usepackage{xifthen}
\newcommand{\ifelse}[3]{%
\ifnum#1
#2%
\else
#3%
\fi
}
\begin{document}
\newcounter{TestCounter}
\setcounter{TestCounter}{\ifelse{5 > 6}{7}{2}}
\theTestCounter
\setcounter{TestCounter}{\ifelse{6 > 5}{7}{2}}
\theTestCounter
\end{document}
答案3
为什么不?
\documentclass{article}
\newcounter{Temp}
\newcounter{TestCounter}
\setcounter{Temp}{5}
\begin{document}
\ifnum\theTemp>2
\setcounter{TestCounter}{4}
\else
\setcounter{TestCounter}{7}
\fi
\theTemp
\theTestCounter
\end{document}
答案4
您可以使用不同的“if-then-else”宏集来完成此操作,例如由etoolbox
或提供的宏集expl3
。
etoolbox
\usepackage{etoolbox}
在序言中做并使用
\newcounter{TestCounter}
\setcounter{TestCounter}{\ifnumcomp{5}{>}{6}{7}{2}}
两者之间的关系符号可以是<
,=
或>
。
expl3
在\usepackage{expl3}
序言中,以及
\ExplSyntaxOn
\cs_set_eq:NN \intcompare \int_compare:nTF
\ExplSyntaxOff
以便拥有编程级功能的“用户级版本”。然后
\newcounter{TestCounter}
\setcounter{TestCounter}{\intcompare{5 > 6}{7}{2}}
会做你想做的事。
在这个版本中,您可以使用(A
和B
表示整数,也可以是\value{<counter>}
)
\intcompare{A < B}{true}{false}
\intcompare{A <= B}{true}{false}
\intcompare{A > B}{true}{false}
\intcompare{A >= B}{true}{false}
\intcompare{A = B}{true}{false}
\intcompare{A != B}{true}{false}
含义明显;=
也可以==
。