定義における「Where」表記

定義における「Where」表記

かなり複雑な操作を定義する必要があります。そこで、古典的な「where」定義スタイルを使用したいと思います。

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

これまでのラテックスでの私の試みは次のとおりです。

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

しかし、私はその結果にはあまり満足していません。

  • whereキーワードはレイアウトからあまり目立たない
  • ヘルパー定義はメイン定義と同じレベルにあります

それで、それをいじくり回す代わりに、そのような定義をレイアウトするための何らかの(準)標準的な方法はあるのでしょうか?

答え1

マクロを使ってローマンフォントでタイプセットしているのだと思います\textが、それは良くない習慣です。意味的に誤り:マクロは、ディスプレイ数式環境 ( 、など)\text内の「where」、「for all」、「subject to」などのフレーズをタイプセットするために予約する必要があります。equationalignない変数名または関数名の場合。\mathrmここでは代わりにマクロを使用する必要があります。

方程式を次のように書きます:

ここに画像の説明を入力してください

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

答え2

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

ここに画像の説明を入力してください

答え3

別の配置とより小さな垂直間隔の場合:

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

ここに画像の説明を入力してください

答え4

別のオプション。

関数名が 1 文字以上ある場合、通常は縦書きで表記されます。1 回か 2 回しか使用しない場合は を使用できます\operatorname{Foo}が、それ以上使用する場合は、新しいコマンドを定義する価値があるかもしれません。

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

少し議論した後、\operatorname{A}+\operatorname{B}と は\mathrm{A}+\mathrm{B}異なる結果を示すことが示されました (私はそれを知りませんでした)。したがって、私の答えは必ずしも正しいわけではありません (おそらくそうではありません)。

彼らが実際にオペレーターである場合に備えて、ここに残しておきます。

関連情報