“cases”环境中的括号垂直错位

“cases”环境中的括号垂直错位

我正在使用“aps”文档类撰写一篇论文,并且正在努力适应环境cases——这对我来说通常非常有效。在我的其中一节中,我提出了两个我想要收集为“案例”的方程式:

\documentclass[aps,preprint,a4paper]{revtex4-1}

\usepackage{amsmath}
\newcommand{\delay}[1]{\mathcal{D}_{#1}}
\newcommand{\filter}{\mathcal{F}}

\begin{document}
\begin{equation}
    \begin{cases}
        s_1 =& \filter \delay{3} p_2' - \filter p_1, \\
        s_1' =& \filter \delay{2'} p_3 - \filter p_1'.
    \end{cases}
    \label{eq:definition-s1}
\end{equation}
\end{document}

我希望这能正常工作,并且两个方程式与大开括号垂直对齐......但似乎布局是错误的: 案件错位 这里我们看到括号相对于方程明显向上移动了。

知道为什么以及如何解决这个问题吗?

非常感谢您抽出时间,干杯!

答案1

这个问题肯定是由于你在文档中设置了双倍行距。下面的例子确实显示了这个问题:

\documentclass{article}
\usepackage{amsmath}
\usepackage{setspace}
\usepackage{etoolbox}

\newcommand{\filter}{\mathcal{F}}
\newcommand{\delay}[1]{\mathcal{D}_{#1}}

\begin{document}

\begin{equation}
    \begin{cases}
        s_1 =& \filter \delay{3} p_2' - \filter p_1, \\
        s_1' =& \filter \delay{2'} p_3 - \filter p_1'.
    \end{cases}
    \label{eq:definition-s1}
\end{equation}

\doublespacing

\begin{equation}
    \begin{cases}
        s_1 =& \filter \delay{3} p_2' - \filter p_1, \\
        s_1' =& \filter \delay{2'} p_3 - \filter p_1'.
    \end{cases}
    \label{eq:definition-s2}
\end{equation}

\makeatletter
\patchcmd{\env@cases}{1.2}{0.72}{}{}
\makeatother

\begin{equation}
    \begin{cases}
        s_1 =& \filter \delay{3} p_2' - \filter p_1, \\
        s_1' =& \filter \delay{2'} p_3 - \filter p_1'.
    \end{cases}
    \label{eq:definition-s3}
\end{equation}

\end{document}

在此处输入图片描述

公式 1 正常,公式 2 在 范围内\doublespacing,并显示问题。公式 3 是修复后的结果。魔法常数 0.72 为 1.2/1.667(1.2 是\arraystretch使用的cases1.667\baselinestretch双倍行距 使用的 )。

以下是对整个文档执行此操作的方法:

\documentclass{article}
\usepackage{amsmath}
\usepackage[doublespacing]{setspace}
\usepackage{etoolbox}

\newcommand{\filter}{\mathcal{F}}
\newcommand{\delay}[1]{\mathcal{D}_{#1}}

\makeatletter
\patchcmd{\env@cases}{1.2}{0.72}{}{}
\makeatother

\begin{document}

\begin{equation}
    \begin{cases}
        s_1 =& \filter \delay{3} p_2' - \filter p_1, \\
        s_1' =& \filter \delay{2'} p_3 - \filter p_1'.
    \end{cases}
    \label{eq:definition-s1}
\end{equation}

\end{document}

您可能还想修复矩阵中的垂直间距:

\makeatletter
\patchcmd{\env@cases}{1.2}{0.72}{}{}
\pretocmd\env@matrix{\renewcommand{\arraystretch}{0.6}}{}{}
\makeatother

使用revtex4-1正确的补丁应该会略有不同:

\documentclass[
  aps,
  preprint,
  a4paper,
]{revtex4-1}
\usepackage{amsmath}

\usepackage{etoolbox}

\newcommand{\filter}{\mathcal{F}}
\newcommand{\delay}[1]{\mathcal{D}_{#1}}

\makeatletter
\preprintsty@sw{%
  \patchcmd{\env@cases}{1.2}{0.72}{}{}%
  \pretocmd\env@matrix{\renewcommand{\arraystretch}{0.6}}{}{}%
}{}
\makeatother

\begin{document}

\begin{equation}
    \begin{cases}
        s_1 =& \filter \delay{3} p_2' - \filter p_1, \\
        s_1' =& \filter \delay{2'} p_3 - \filter p_1'.
    \end{cases}
\qquad
\begin{bmatrix}
abc \\
def
\end{bmatrix}
    \label{eq:definition-s1}
\end{equation}

\end{document}

这样,修补程序仅在preprint活动时才会完成。

答案2

作为一种解决方法,您可以改用array环境。

\documentclass{article}
\newcommand{\filter}{\mathcal{F}}
\newcommand{\delay}{\mathcal{D}}
\begin{document}
\begin{equation}
  \bigg\{
  \begin{array}{@{}ccc@{}}
    s_1 &=& \filter \delay{3} p_2' - \filter p_1, \\
    s_1' &=& \filter \delay{2'} p_3 - \filter p_1'.
  \end{array}
  \label{eq:definition-s1}
\end{equation}
\end{document}

相关内容