¿Cómo declaro y paso condiciones a los comandos?

¿Cómo declaro y paso condiciones a los comandos?

Soy nuevo en LaTeX así que no estoy muy seguro de cómo proceder con esto. Intento tener diferentes versiones del mismo documento, según las variables configuradas. Lo que quiero es cambiar todo el documento cambiando una línea.

Hasta ahora he estado probando algo que encontré en una plantilla, pero no he podido hacerlo funcionar.

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

De esa manera, cuando escribo \displaything, se debe configurar la variable. Si algún día no quiero la variable, simplemente comentaría esta línea. Luego, quiero pasar esta variable a otro comando, como este:

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

La idea es tener múltiples \foollamadas con más argumentos y diferentes indicadores, y luego usarlos de esta manera:

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

Quizás esta ni siquiera sea la forma correcta de hacerlo, ¿alguna idea?

Respuesta1

Yo usaría etoolboxpara esto, en lugar 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}

ingrese la descripción de la imagen aquí

Respuesta2

Hay diferentes formas de definir los condicionales. Cuando usas o estableces el valor de un condicional, necesitas usar la sintaxis correcta para la definición que has elegido.

Además del etoolboxmétodo demostrado en la respuesta de egreg (que nunca he usado), existen al menos otros dos métodos muy comunes. Su problema se debe a que intenta utilizar la sintaxis de uno de estos métodos al manejar un condicional definido mediante el otro método.

El siguiente ejemplo demuestra los dos 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 y barras condicionales

información relacionada