这是一个后续问题:eqnarray 真的过时了吗?
背景是我想遵循一般建议避免eqnarray
。但是,在处理仍包含 的旧文档时eqnarray
(这里,我的用例是在为期刊准备扩展版本时处理论文的会议版本),我在上面链接的先前问题中遇到了两种情况,在这些情况下,我没有找到一种明显的方法来获得至少具有与使用相同质量eqnarray
但使用不同环境(如 )时相同的输出align
。对于这两种情况中的第一种(即将方程式连续应用于术语的一系列证明步骤),一个答案建议使用array
而不是 ,eqnarray
而另一个答案建议使用align
和的组合\mathclap
。但是,在这里我遇到了另一个问题,即在使用任一解决方案来替代 时eqnarray
。以下代码包含相同证明步骤序列的 5 个版本,第一个使用 ,eqnarray
第二个和第三个使用上一个问题中建议的第一个解决方案,第四个和第五个使用上一个问题中建议的第二个解决方案:
\documentclass{article}
\usepackage{array}
\usepackage{mathtools}
\begin{document}
\begin{eqnarray*}
f(x,y,z) & = & \frac{g(x,y,z)}{h(x,y,z)}\\
& = & \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \stackrel{(\mathit{condition1})}{=} & \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \stackrel{(\mathit{condition2})}{=} & 42
\end{eqnarray*}
{\renewcommand{\arraystretch}{1.5}
\[\begin{array}{@{} r @{\;} >{{}} c <{{}} @{\;} l @{}}
f(x,y,z) & = & \frac{g(x,y,z)}{h(x,y,z)}\\
& = & \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \stackrel{(\mathit{condition1})}{=} & \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \stackrel{(\mathit{condition2})}{=} & 42
\end{array}\]
\renewcommand{\arraystretch}{1}}
{\renewcommand{\arraystretch}{2}
\[\begin{array}{@{} r @{\;} >{{}} c <{{}} @{\;} l @{}}
f(x,y,z) & = & \frac{g(x,y,z)}{h(x,y,z)}\\
& = & \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \stackrel{(\mathit{condition1})}{=} & \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \stackrel{(\mathit{condition2})}{=} & 42
\end{array}\]
\renewcommand{\arraystretch}{1}}
\begingroup
\advance\thickmuskip by 5mu
\begin{align*}
f(x,y,z) & = \frac{g(x,y,z)}{h(x,y,z)}\\
& = \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \stackrel{\mathclap{(\mathit{condition1})}}{=} \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \stackrel{\mathclap{(\mathit{condition2})}}{=} 42
\end{align*}
\endgroup
\begingroup
\advance\thickmuskip by 30mu
\begin{align*}
f(x,y,z) & = \frac{g(x,y,z)}{h(x,y,z)}\\
& = \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \stackrel{\mathclap{(\mathit{condition1})}}{=} \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \stackrel{\mathclap{(\mathit{condition2})}}{=} 42
\end{align*}
\endgroup
$(\mathit{condition1})$ holds since the sky is red and $(\mathit{condition2})$ because this is the answer.
\end{document}
输出如下:
eqnarray
:
array
:
array
具有更高的拉伸系数:
align
:
align
更高\thickmuskip
:
本示例中存在的问题如下:
每个步骤中使用的关系符号可能具有不同的水平长度,但应以居中方式彼此对齐。因此,通常的 AMS 环境无法以明显的方式工作,因为它们仅提供左对齐或右对齐的列。第二种解决方案尝试通过使用来克服此问题
\mathclap
,但随后必须手动调整关系符号和其他所有内容之间的空间(如上一版本所示)。使用 时
array
,每行之间的垂直间距是通过调整 的值来“设置”的\arraystretch
。虽然在上一个问题中 的值1.5
是“正确”的值,但在这里相同的值会导致行重叠。因此,对于第一个解决方案,需要针对每种情况分别手动调整垂直间距。使用时的另一个问题
array
是分数似乎被压缩了。
有没有一种方法可以实现至少与版本 1 质量相同的输出,而无需针对此类证明步骤序列的不同情况手动调整值,也不使用eqnarray
?
答案1
抱歉,eqnarray
有这么多的限制,即使被迫做一些技巧也有其优势。例如,eqnarray
可以绝不可以跨页显示,但您的校对步骤可能很长,因此可能需要分页。
\documentclass{article}
\usepackage{mathtools}
\newcommand{\alignedrel}[2]{%
\Cen{2}{\overset{#1}{#2}{}}%
}
\makeatletter
\newcommand{\Cen}[2]{% see http://tex.stackexchange.com/a/209732/4427
\ifmeasuring@
#2%
\else
\makebox[\ifcase\expandafter #1\maxcolumn@widths\fi][c]{$\displaystyle#2$}%
\fi
}
\makeatother
\begin{document}
\begin{alignat*}{2}
f(x,y,z)
& \alignedrel{}{=}
&& \frac{g(x,y,z)}{h(x,y,z)}\\
& \alignedrel{}{=}
&& \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \alignedrel{\text{(condition1)}}{=}
&& \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \alignedrel{\text{(condition2)}}{=}
&& 42
\end{alignat*}
\end{document}
答案2
=
我建议你提供一个正常语言的句子,而不是在某些符号上加太多信息后要解释的方程组,用言语表达,为什么最后两个等式成立。
哦,我肯定会使用align*
环境,而不是eqnarray*
环境。
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter{\floor}{\lfloor}{\rfloor}
\begin{document}
\begin{align*}
f(x,y,z)
&= \frac{g(x,y,z)}{h(x,y,z)}\\
&= \floor*{\frac{\frac{x/z}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}}\\
&= \floor*{\frac{\frac{a}{b}+\frac{c/a}{b}}{\frac{c}{a} + \frac{b}{a}}}\\
&= 42.
\end{align*}
The second-to-last equality follows because the sky is red (Condition~1), and the final equality holds because it is the answer (Condition~2).
\end{document}
附录解决OP的后续评论:如果你有不同宽度的关系符号,例如=
和\hookrightarrow
,你仍然可以使用对齐环境中,通过反转关系符号和&
符号的顺序,如下例所示。({}
粒子在那里是为了获得正确的间距。)
\begin{align*}
f(x,y,z)
={}& \frac{g(x,y,z)}{h(x,y,z)}\\
={}& \floor*{\frac{\frac{x/z}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}}\\
\hookrightarrow{}& \floor*{\frac{\frac{a}{b}+\frac{c/a}{b}}{\frac{c}{a} + \frac{b}{a}}}\\
={}& 42.
\end{align*}
答案3
一些可能性
\documentclass{article}
\usepackage{array}
\usepackage{mathtools}
\newlength\mylength
\begin{document}
eqnarray
\begin{eqnarray*}
f(x,y,z) & = & \frac{g(x,y,z)}{h(x,y,z)}\\
& = & \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \stackrel{(\mathit{condition1})}{=} & \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \stackrel{(\mathit{condition2})}{=} & 42
\end{eqnarray*}
array in display
{\setlength\extrarowheight{10pt}
\[\begin{array}{@{} >\displaystyle r @{\;}
>{\displaystyle{}} c <{{}} @{\;}
>\displaystyle l @{}}
f(x,y,z) & = & \frac{g(x,y,z)}{h(x,y,z)}\\
& = & \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \stackrel{(\mathit{condition1})}{=} & \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \stackrel{(\mathit{condition2})}{=} & 42
\end{array}\]
\renewcommand{\arraystretch}{1}}
align
\begingroup
\settowidth\mylength{$\scriptstyle(\mathit{condition2})$}
\newcommand\condeq[1]{\stackrel{\makebox[\mylength]{$\scriptstyle#1$}}{=}}
\begin{align*}
f(x,y,z) & \condeq{} \frac{g(x,y,z)}{h(x,y,z)}\\
& \condeq{} \left\lfloor\frac{\frac{\frac{x}{z}}{y}+\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}\right\rfloor\\
& \condeq{(\mathit{condition1})} \left\lfloor\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}{\frac{c}{a} + \frac{b}{a}}\right\rfloor\\
& \condeq{(\mathit{condition2})} 42
\end{align*}
\endgroup
$(\mathit{condition1})$ holds since the sky is red and $(\mathit{condition2})$ because this is the answer.
\end{document}
答案4
我尽力了,但我不明白你的意图。要发明新的形式,如何根据某些条件编写解决方案?对于选择一种与某些条件相关的解决方案amsmath
并mathtools
提供环境cases
,dcases
分别如下:
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{align*}
f(x,y,z)
& = \frac{g(x,y,z)}{h(x,y,z)} \\
& = \left\lfloor\frac{\frac{\frac{x}{z}}{y} +
\frac{y}{z}}{\frac{z}{y} + \frac{y}{x}}
\right\rfloor \\
& = \begin{dcases}
\left\lfloor
\frac{\frac{a}{b}+\frac{\frac{c}{a}}{b}}
{\frac{c}{a} + \frac{b}{a}}
\right\rfloor &\quad \text{condition 1} \\
42 &\quad \text{condition 2}
\end{dcases}
\end{align*}
$(\mathit{condition1})$ holds since the sky is red and $(\mathit{condition2})$ because this is the answer.
\end{document}
如果只考虑如何在方程式左右边关系的不同宽度下对齐方程式的右边,那么没有经过一些手动调整的结果总是不会好看(根据不同人的品味)。