„Where“-Notation in der Definition

„Where“-Notation in der Definition

Ich muss eine ziemlich komplexe Operation definieren. Daher möchte ich den klassischen "where"-Definitionsstil verwenden, d. h.

Foo = Bar(x,y) 
WHERE
x = Baz
y = Fob

Mein bisheriger Versuch in Latex ist:

\begin{align*}
\text{Foo} = \text{Bar}(x,y) && \mathbf{where} \\
x = \text{Baz}
\end{align*}

Mit dem Ergebnis bin ich allerdings nicht ganz zufrieden:

  • Das Schlüsselwort „where“ fällt nicht wirklich vom Layout auf
  • Die Hilfsdefinitionen stehen auf der gleichen Ebene wie die Hauptdefinition

Gibt es also, anstatt damit herumzuspielen, eine (halb-)kanonische Möglichkeit, solche Definitionen anzuordnen?

Antwort1

Ich vermute, Sie verwenden das \textMakro, um Dinge in Romanschrift zu setzen, aber das ist schlechte Praxis, weilsemantischfalsch: das \textMakro sollte für den Satz von Ausdrücken wie „wo“, „für alle“, „vorbehaltlich“ usw. in Anzeigemathematikumgebungen (z. B. equation, align, usw.) reserviert werden.nichtfür Variablen oder Funktionsnamen. \mathrmHier sollten Sie stattdessen das Makro verwenden.

So würde ich Ihre Gleichungen schreiben:

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{amsmath}

\newcommand\Foo{\mathrm{Foo}}
\newcommand\Barfun{\mathrm{Bar}}
\newcommand\Baz{\mathrm{Baz}}
\newcommand\Fob{\mathrm{Fob}}

\begin{document}
%
\begin{align*}
  \Foo &= \Barfun(x,y) \\
  \intertext{where}    
  x    &= \Baz         \\
  y    &= \Fob
\end{align*}
%
\end{document}

Antwort2

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\begin{align*}
  f &= f(x,y)\\
  \makebox[0.6em][l]{where} & \\
  x &= g(z)\\
  y &= h(z,x)
\end{align*}

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Mit anderer Ausrichtung und kleinerem vertikalen Abstand:

\documentclass{article}

\usepackage{mathtools}
\DeclareMathOperator{\Barr}{Bar}

\begin{document}
\begin{align*}
  &  Foo   = \Barr(x,y)\\
  \shortintertext{where}
  \begin{cases}
    {} \\ {}
  \end{cases}
  \hspace{-1.1em}
  &
  \begin{array}{@{}l}
    x= Baz\\[6pt]
    y= Fob
  \end{array}
\end{align*}
\end{document} 

Bildbeschreibung hier eingeben

Antwort4

Andere Option.

Wenn der Funktionsname mehr als einen Buchstaben hat, wird er normalerweise aufrecht gesetzt. Wenn Sie ihn nur ein- oder zweimal verwenden, können Sie verwenden \operatorname{Foo}, aber wenn Sie ihn öfter verwenden, lohnt es sich vielleicht, einen neuen Befehl dafür zu definieren:

\documentclass{scrartcl}

\usepackage{mathtools}
\DeclareMathOperator\Fo{Foo}
\DeclareMathOperator\Ba{Bar}
\DeclareMathOperator\Bz{Baz}
\DeclareMathOperator\Fb{Fob}

\begin{document}

\begin{align*}
  \Fo &= \Ba(x,y) \\ \intertext{where}
  x &= \Bz \\
  y &= \Fb
\end{align*}

\end{document}

Nach einer kurzen Diskussion wurde gezeigt, dass \operatorname{A}+\operatorname{B}es \mathrm{A}+\mathrm{B}unterschiedliche Ergebnisse gibt (die ich nicht wusste). Meine Antwort ist also nicht unbedingt richtig (wahrscheinlich nicht).

Ich lasse es hier für den Fall, dass es sich tatsächlich um Betreiber handelt.

verwandte Informationen