我是 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
定義條件的方法有多種。當您使用或設定條件的值時,您需要對您選擇的定義使用正確的語法。
除了etoolbox
egreg的回答中演示的方法(我從未使用過)之外,至少還有其他兩種非常常見的方法。您的問題是由於在處理使用另一種方法定義的條件時嘗試使用其中一種方法的語法而引起的。
下面的例子示範了這兩種方法:
\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}