如何聲明條件並將其傳遞給命令?

如何聲明條件並將其傳遞給命令?

我是 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}

條件 foo 和 bar

相關內容