如何声明并将条件传递给命令?

如何声明并将条件传递给命令?

我是 LaTeX 新手,所以不太清楚该怎么做。我尝试根据设置的变量来获得同一文档的不同版本。我想要通过更改一行来更改整个文档。

到目前为止,我一直在尝试在模板中找到的东西,但还无法让它发挥作用。

\newif\if@thing\@thingfalse
\newcommand*{\displaything}{\@thingtrue}

这样,当我写入时\displaything,变量就应该被设置。如果有一天我不想要这个变量,我只需注释掉这一行。然后,我想将此变量传递给另一个命令,如下所示:

\newcommand*{\foo}[2]{
  \ifthenelse{#1}
  {
    % do something if set, using #2
  }
  {
    % do something else if not set, using #2 (default)
  }
}

\foo这个想法是通过更多的参数和不同的标志进行多次调用,然后像这样使用它们:

\foo{\@thing}{arg}, \foo{@thing2}{arg}

也许这甚至不是正确的做法,有什么想法吗?

答案1

我会用etoolbox这个,而不是ifthen

\documentclass{article}
\usepackage{etoolbox}

\newtoggle{thing}

\newcommand{\foo}[2]{%
  \iftoggle{#1}
    {%
     --#2--% do something if set, using #2
    }%
    {%
     \fbox{#2}% do something else if not set, using #2 (default)
    }%
}

\begin{document}

% thing is initially false

\foo{thing}{baz}

\toggletrue{thing}

\foo{thing}{baz}

\end{document}

在此处输入图片描述

答案2

定义条件语句的方法有很多种。使用或设置条件语句的值时,您需要使用与所选定义相符的正确语法。

除了etoolboxegreg 的答案中演示的方法(我从未使用过)之外,至少还有另外两种非常常见的方法。您的问题是由于在处理使用另一种方法定义的条件时尝试使用其中一种方法的语法而导致的。

下面的示例演示了这两种方法:

\documentclass{article}
\newif\iffoo% new conditional defined using method 1
\footrue
\newcommand*{\fooboo}{%
  \iffoo
    {\Huge FOO!\par}
  \else
    {\tiny fooless\dots\par}
  \fi}
\usepackage{ifthen}% method 2 requires ifthen
  \newboolean{bar}% new conditional defined using method 2
  \setboolean{bar}{true}
  \newcommand*{\barboo}{%
    \ifthenelse{\boolean{bar}}{\Huge BAR!\par}{\tiny barless\dots\par}}

\begin{document}
\fooboo
\foofalse% note syntax for foo
\fooboo
\barboo
\setboolean{bar}{false}% note syntax for bar
\barboo
\end{document}

有条件的 foos 和 bars

相关内容