私は 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}