Я новичок в 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}