Como declaro e passo condições para comandos?

Como declaro e passo condições para comandos?

Sou novo no LaTeX, então não tenho certeza de como proceder com isso. Estou tentando ter versões diferentes do mesmo documento, dependendo de quais variáveis ​​estão definidas. O que eu quero é alterar todo o documento alterando uma linha.

Até agora, tenho tentado algo que encontrei em um modelo, mas não consegui fazê-lo funcionar.

\newif\if@thing\@thingfalse
\newcommand*{\displaything}{\@thingtrue}

Dessa forma, quando eu escrever \displaything, a variável deverá estar definida. Se algum dia eu não quiser a variável, apenas comentarei esta linha. Então, quero passar essa variável para outro comando, assim:

\newcommand*{\foo}[2]{
  \ifthenelse{#1}
  {
    % do something if set, using #2
  }
  {
    % do something else if not set, using #2 (default)
  }
}

A ideia é ter múltiplas \foochamadas com mais argumentos e sinalizadores diferentes, e então usá-las assim:

\foo{\@thing}{arg}, \foo{@thing2}{arg}

Talvez essa nem seja a maneira certa de fazer isso, alguma ideia?

Responder1

Eu usaria etoolboxpara isso, em vez de 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}

insira a descrição da imagem aqui

Responder2

Existem diferentes maneiras de definir condicionais. Ao usar ou definir o valor de uma condicional, você precisa usar a sintaxe correta para a definição escolhida.

Além do etoolboxmétodo demonstrado na resposta do egreg (que nunca usei), existem pelo menos dois outros métodos muito comuns. Seu problema é causado pela tentativa de usar a sintaxe de um desses métodos ao manipular uma condicional definida usando o outro método.

O exemplo a seguir demonstra os dois métodos:

\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 e barras condicionais

informação relacionada