我们被告知避免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*}
不完美:
但是我什至无法通过align
或alignat
...
答案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
而不是|
变量。
是否将第二列居中是一个判断问题;在我的文档中,我只需使用gather
或align
将三个等式放在左侧。
\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
您可以使用makebox
或eqparbox
包裹将中间一列居中。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}