根据条件语句设置计数器值?

根据条件语句设置计数器值?

我一直在尝试用谷歌搜索,这似乎是一件显而易见的愚蠢的事情,但我到处看到的都在回答如何在条件语句中使用计数器值,我可以做得很好。

基本上,我想设置一个计数器值,但在值所在的部分内,放置一个 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}}

会做你想做的事。

在这个版本中,您可以使用(AB表示整数,也可以是\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}

含义明显;=也可以==

相关内容