如何避免eqnarray?

如何避免eqnarray?

我们被告知避免eqnarray然后使用align

这里的输出eqnarray

\newcommand{\Prob}{\operatorname{\mathbb{P}}}
\newcommand{\tp}{\operatorname{tp}}
\newcommand{\fp}{\operatorname{fp}}
\newcommand{\fn}{\operatorname{fn}}
\newcommand{\tn}{\operatorname{tn}}
\newcommand{\Act}{\operatorname{Actual}}
\newcommand{\Pre}{\operatorname{Predicted}}
\newcommand{\Ar}{\operatorname{Accuracy}}
\newcommand{\Ps}{\operatorname{Precision}}
\newcommand{\Rc}{\operatorname{Recall}}

\begin{eqnarray*}
  \Ar =& \Prob(\Act=\Pre)  &= \frac{\tp+\tn}{N} \\
  \Rc =& \Prob(\Pre=1|\Act=1)  &= \frac{\tp}{\tp+\fn} \\
  \Ps =& \Prob(\Act=1|\Pre=1)  &= \frac{\tp}{\tp+\fp}
\end{eqnarray*}

不完美:

乳胶输出

但是我什至无法通过alignalignat...

答案1

对于您更新的示例代码,我实际上建议您使用一个array环境,其值\arraystretch增加以模仿显示屏设置。

另外两个建议:(i)对于“条件运算符”,使用\mid而不是|- 您将获得更好的间距;(ii)据我所知,您声明为数学运算符的大多数项目都是简单的文本字符串;我会在、等的定义中使用\textrm而不是。\operatorname\tp\fp

array以下屏幕截图显示了和环境的输出eqnarray*

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,amsfonts}
\DeclareMathOperator{\Prob}{\mathbb{P}}
\newcommand{\tp}{\textnormal{tp}}
\newcommand{\fp}{\textnormal{fp}}
\newcommand{\fn}{\textnormal{fn}}
\newcommand{\tn}{\textnormal{tn}}
\newcommand{\Act}{\textnormal{Actual}}
\newcommand{\Pre}{\textnormal{Predicted}}
\newcommand{\Ar}{\textnormal{Accuracy}}
\newcommand{\Ps}{\textnormal{Precision}}
\newcommand{\Rc}{\textnormal{Recall}}
\begin{document}
Output of \texttt{array}
\[
\renewcommand\arraystretch{2}
\begin{array}{r @{{}={}} c @{{}={}} l} % "{}={}" is inserted in the intercolumn spaces
  \Ar & \Prob(\Act=\Pre)          & \dfrac{\tp+\tn}{N} \\
  \Rc & \Prob(\Pre=1\mid \Act=1)  & \dfrac{\tp}{\tp+\fn} \\
  \Ps & \Prob(\Act=1\mid \Pre=1)  & \dfrac{\tp}{\tp+\fp} \\
\end{array}
\]

\bigskip
Output of \texttt{eqnarray*}
\begin{eqnarray*}
  \Ar =& \Prob(\Act=\Pre)          &= \frac{\tp+\tn}{N} \\
  \Rc =& \Prob(\Pre=1\mid \Act=1)  &= \frac{\tp}{\tp+\fn} \\
  \Ps =& \Prob(\Act=1\mid \Pre=1)  &= \frac{\tp}{\tp+\fp}
\end{eqnarray*}

\end{document}

答案2

\documentclass{article}
\begin{document}

\begin{eqnarray*}
foo &=& bar &=& baz \\
foobar &=& barquux &=& bazzot
\end{eqnarray*}
\end{document}

生产

! Extra alignment tab has been changed to \cr.

标准eqnarray只需要两个&

使用

\documentclass{article}
\usepackage{amsmath}
\begin{document}

\begin{alignat*}{3}
foo &= bar &&= baz \\
foobar &= barquux &&= bazzot
\end{alignat*}
\end{document}

生产

在此处输入图片描述

用更新的示例(将其制作到完整的文档中),结果是

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,amsfonts}
\begin{document}

\newcommand{\Prob}{\operatorname{\mathbb{P}}}
\newcommand{\tp}{\operatorname{tp}}
\newcommand{\fp}{\operatorname{fp}}
\newcommand{\fn}{\operatorname{fn}}
\newcommand{\tn}{\operatorname{tn}}
\newcommand{\Act}{\operatorname{Actual}}
\newcommand{\Pre}{\operatorname{Predicted}}
\newcommand{\Ar}{\operatorname{Accuracy}}
\newcommand{\Ps}{\operatorname{Precision}}
\newcommand{\Rc}{\operatorname{Recall}}

\begin{eqnarray*}
  \Ar =& \Prob(\Act=\Pre)  &= \frac{\tp+\tn}{N} \\
  \Rc =& \Prob(\Pre=1|\Act=1)  &= \frac{\tp}{\tp+\fn} \\
  \Ps =& \Prob(\Act=1|\Pre=1)  &= \frac{\tp}{\tp+\fp}
\end{eqnarray*}

\begin{alignat*}{3}
  \Ar &= \Prob(\Act=\Pre)  &&= \frac{\tp+\tn}{N} \\
  \Rc &= \Prob(\Pre=1|\Act=1)  &&= \frac{\tp}{\tp+\fn} \\
  \Ps &= \Prob(\Act=1|\Pre=1)  &&= \frac{\tp}{\tp+\fp}
\end{alignat*}



\end{document}

请注意,如何将最长的输入仅提供的空间align给出,并根据需要添加空间,以使中央列填充额外的空间,从而在所有行上围绕着不对称的间距。==eqalign=

答案3

这是我显示的宏的应用使用左右注释对齐方程式(您在那里找到解释)。

\documentclass{article}
\usepackage{amsmath,amssymb}

\newcommand{\Prob}{\operatorname{\mathbb{P}}}
\newcommand{\tp}{\mathrm{tp}}
\newcommand{\fp}{\mathrm{fp}}
\newcommand{\fn}{\mathrm{fn}}
\newcommand{\tn}{\mathrm{tn}}
\newcommand{\Act}{\mathrm{Actual}}
\newcommand{\Pre}{\mathrm{Predicted}}
\newcommand{\Ar}{\mathrm{Accuracy}}
\newcommand{\Ps}{\mathrm{Precision}}
\newcommand{\Rc}{\mathrm{Recall}}

% the magic trick, see https://tex.stackexchange.com/a/209732/4427
\makeatletter
\newcommand{\Cen}[2]{%
  \ifmeasuring@
    #2%
  \else
    \makebox[\ifcase\expandafter #1\maxcolumn@widths\fi]{$\displaystyle#2$}%
  \fi
}
\makeatother

\begin{document}

\begin{alignat}{2}
  \Ar ={}& \Cen{2}{\Prob(\Act=\Pre)}        &&= \frac{\tp+\tn}{N} \\
  \Rc ={}& \Cen{2}{\Prob(\Pre=1\mid\Act=1)} &&= \frac{\tp}{\tp+\fn} \\
  \Ps ={}& \Cen{2}{\Prob(\Act=1\mid\Pre=1)} &&= \frac{\tp}{\tp+\fp}
\end{alignat}

\end{document}

我们需要两组左右列,它们之间没有空格,所以我使用alignat(该alignat*版本不会打印数字)。在我们要居中的列中,即第二列,我将材料作为第二个参数括起来\Cen(第一个参数是列号)。我们需要它,&&=因为最后一列必须左对齐。

在此处输入图片描述

请注意,唯一的真实操作员名称是\Prob其他符号只是变量,因此\mathrm也应使用注释\mid而不是|变量。

是否将第二列居中是一个判断问题;在我的文档中,我只需使用gatheralign将三个等式放在左侧。

\begin{gather}
  \Ar = \Prob(\Act=\Pre) = \frac{\tp+\tn}{N} \\
  \Rc = \Prob(\Pre=1\mid\Act=1) = \frac{\tp}{\tp+\fn} \\
  \Ps = \Prob(\Act=1\mid\Pre=1) = \frac{\tp}{\tp+\fp}
\end{gather}

\begin{align}
&  \Ar = \Prob(\Act=\Pre) = \frac{\tp+\tn}{N} \\
&  \Rc = \Prob(\Pre=1\mid\Act=1) = \frac{\tp}{\tp+\fn} \\
&  \Ps = \Prob(\Act=1\mid\Pre=1) = \frac{\tp}{\tp+\fp}
\end{align}

在此处输入图片描述

答案4

您可以使用makeboxeqparbox包裹将中间一列居中。eqparbox 命令使用一个标签,使所有使用该标签的盒子的宽度等于盒子的最大宽度;默认情况下,它们的内容位于盒子的中心。

\documentclass{article}
\usepackage{amsmath}
\usepackage{makebox}

\ usepackage {eqparbox}

\begin{document}

\begin{alignat*}{3}
foo &= \makebox*{$ barquux $} {$ bar $}&&= baz \\
foobar &= barquux &&= bazzot
\end{alignat*}

\begin{alignat*}{3}
foo &= \eqmakebox[Col]{$ bar$} &&= baz \\
foobar &= \eqmakebox[Col]{$ barquux $} &&= bazzot
\end{alignat*}

\end{document} 

在此处输入图片描述

相关内容