Как объявлять и передавать условия командам?

Как объявлять и передавать условия командам?

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

условные foos и bars

Связанный контент