Мне нужно определить довольно сложную операцию. Поэтому я хочу использовать классический стиль определения "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
макрос следует зарезервировать для набора фраз, таких как «где», «для всех», «при условии» и т. д. в средах отображения математических выражений (например equation
, align
и т. д.),нетдля переменных или имен функций. Вместо этого здесь следует использовать макрос \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
Другой вариант.
Если имя функции состоит из более чем одной буквы, оно обычно набирается вертикально. Если вы используете его только один или два раза, вы можете использовать \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}
дают разные результаты (о которых я не знал). Так что мой ответ не обязательно верен (вероятно, нет).
Я оставлю это здесь на случай, если они действительно операторы.