将布尔值作为 Arg 传递给命令

将布尔值作为 Arg 传递给命令

\usepackage{ifthen}

%booleandeclaration
\newboolean{istest}
\setboolean{istest}{false}

%Set boolean in if
% \newcommand{\activate}[1]{%
% \ifnum#1>0{\setboolean{istest}{true}}\fi }

\newcommand{\activate}[1]{%
  \ifnum#1>0 \setboolean{istest}{true}\fi}


%test boolean of true or false
\newcommand{\test}{\ifthenelse{\boolean{istest}}{TRUE}{FALSE}}%

\activate{10}
\begin{document}
\test
\end{document}

我如何使用truefalse作为参数。

\activate{true}

这必须将 istest 设置为 true。

答案1

改编

  • \setboolean{istest}{<true|false>}直接使用
  • 或者将其放入命令中 ( \activate)

笔记:您也可以使用其他方法(bool或者toggle,参见的包装手册etoolbox)。

代码

\documentclass{article}

\usepackage{ifthen}

%booleandeclaration
\newboolean{istest}
\setboolean{istest}{false}

\newcommand{\activate}[1]{%
    \setboolean{istest}{#1}
}


%test boolean of true or false
\newcommand{\test}{\ifthenelse{\boolean{istest}}{TRUE}{FALSE}}%

\begin{document}
\activate{true}
\test
\activate{false}
\test
\end{document}

答案2

你还可以做得更好:该\returnTorF命令接受以下形式的参数

  1. t,T,真,真,真
  2. 是,是,是,是
  3. f,F,假,假,假
  4. n,N,不,不,不
  5. 任意整数

在情况 1 和 2 中,它返回true;在情况 3 和 4 中,它返回false(任何大写,甚至 TrUe 实际上都是可以接受的);在情况 5 中,true如果整数为正数,则返回 ,false否则返回。

您还可以使用作为参数\value{<counter>},它是一个合法的整数。

\documentclass{article}
\usepackage{ifthen}% but there are better methods

% we want to accept
%
% t, T, true, True, TRUE, y, yes, YES
%
% or
%
% f, F, false, False, FALSE, n, no, NO
%
% but also integers, with positive ones yielding true
% and nonpositive yielding false

\ExplSyntaxOn

\NewExpandableDocumentCommand{\returnTorF}{m}
 {
  \darkshadow_tf:n { #1 }
 }

\cs_new:Nn \darkshadow_tf:n
 {
  \str_case_e:nnF { \str_casefold:n { #1 } }
   {
    {t}{true}
    {y}{true}
    {true}{true}
    {yes}{true}
    {f}{false}
    {n}{false}
    {false}{false}
    {no}{false}
   }
   { \int_compare:nTF { #1 > 0 } { true } { false } }
 }

\ExplSyntaxOff

\newboolean{istest}
\setboolean{istest}{false}

\newcommand{\activate}[1]{\setboolean{istest}{\returnTorF{#1}}}

\newcommand{\test}{\ifthenelse{\boolean{istest}}{TRUE}{FALSE}}

\begin{document}

\test\ (false)\par
\activate{y}
\test\ (true)\par
\activate{NO}
\test\ (false)\par
\activate{true}
\test\ (true)\par
\activate{0}
\test\ (false)\par
\activate{2}
\test\ (true)\par

\end{document}

在此处输入图片描述

相关内容