条件を宣言してコマンドに渡すにはどうすればいいですか?

条件を宣言してコマンドに渡すにはどうすればいいですか?

私は LaTeX 初心者なので、これをどのように進めればよいかよくわかりません。どの変数が設定されているかに応じて、同じドキュメントの異なるバージョンを作成しようとしています。私が望んでいるのは、1 行を変更してドキュメント全体を変更することです。

これまで、テンプレートで見つけたものを試してきましたが、うまく動作しませんでした。

\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

条件を定義する方法はいくつかあります。条件の値を使用したり設定したりするときは、選択した定義に適した構文を使用する必要があります。

egreg の回答で説明されている方法 (私は使用したことはありません)に加えてetoolbox、少なくとも 2 つの非常に一般的な方法があります。問題は、他の方法を使用して定義された条件を処理するときに、これらの方法の 1 つの構文を使用しようとしたことが原因です。

次の例は 2 つの方法を示しています。

\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}

条件付きフーとバー

関連情報