我需要定义一个相当复杂的操作。因此我想使用经典的“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”等(例如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}
给出了不同的结果(我不知道)。所以,我的答案不一定正确(可能不是)。
我把它留在这里以防他们实际上是操作员。