Wie deklariere und übergebe ich Bedingungen an Befehle?

Wie deklariere und übergebe ich Bedingungen an Befehle?

Ich bin neu bei LaTeX und bin mir daher nicht ganz sicher, wie ich damit vorgehen soll. Ich versuche, verschiedene Versionen desselben Dokuments zu haben, je nachdem, welche Variablen gesetzt sind. Ich möchte das gesamte Dokument ändern, indem ich eine Zeile ändere.

Bisher habe ich etwas ausprobiert, das ich in einer Vorlage gefunden habe, aber es hat nicht funktioniert.

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

Auf diese Weise sollte die Variable gesetzt sein, wenn ich schreibe \displaything. Wenn ich die Variable irgendwann nicht mehr brauche, kommentiere ich einfach diese Zeile. Dann möchte ich diese Variable an einen anderen Befehl übergeben, und zwar so:

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

Die Idee besteht darin, mehrere Aufrufe mit mehr Argumenten und unterschiedlichen Flag-Elementen zu haben \foound diese dann folgendermaßen zu verwenden:

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

Vielleicht ist das nicht einmal die richtige Vorgehensweise. Hat jemand eine Idee?

Antwort1

Ich würde etoolboxhierfür anstelle von verwenden 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}

Bildbeschreibung hier eingeben

Antwort2

Es gibt verschiedene Möglichkeiten, Bedingungen zu definieren. Wenn Sie den Wert einer Bedingung verwenden oder festlegen, müssen Sie die richtige Syntax für die gewählte Definition verwenden.

Zusätzlich zu der etoolboxin egregs Antwort gezeigten Methode (die ich nie verwendet habe) gibt es mindestens zwei weitere sehr gebräuchliche Methoden. Ihr Problem wird dadurch verursacht, dass Sie versuchen, die Syntax für eine dieser Methoden zu verwenden, wenn Sie eine Bedingung verarbeiten, die mit der anderen Methode definiert wurde.

Das folgende Beispiel demonstriert die beiden Methoden:

\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}

Bedingte Foos und Bars

verwandte Informationen