不使用方程环境对显示的数学运算进行编号

不使用方程环境对显示的数学运算进行编号

我了解alignequation环境,并且大多数时候都倾向于使用它们,但有时我希望在方程数组中拥有更大的灵活性,例如更好地控制对齐和水平间距。在这种情况下,我会使用环境array
这种方法的唯一缺点(据我所知)是固定的垂直间距,但对于每行高度相同的方程数组,这通常是可以的。

作为参考,这是我的代码:

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{mathtools}

\newcommand*{\defeq}{\vcentcolon=}
\newcommand*{\diff}{\mathrm{d}}

\newcommand*{\pd}[3][]{%
    \ensuremath%
    \frac{\partial^{#1}#2}{\partial #3^{#1}}
}

\newcommand*{\pdc}[4][]{%
    \ensuremath%
    \left(\pd[#1]{#2}{#3}\right)_{\!\!#4}
}

\newcommand{\td}[3][]{%
    \ensuremath%
    \frac{\diff^{#1}#2}{\diff #3^{#1}}
}

\newcommand{\earray}[3][2]{%
    \ensuremath%
    \everymath{\displaystyle}%
    \renewcommand*{\arraystretch}{#1}%
    \begin{array}{#2}
        #3
    \end{array}
}


\begin{document}
\[
    \earray{r@{\;}l@{\;}ll}{
        \diff J^\pm 
            & \defeq \diff u\pm \frac{1}{C}\diff p 
            & =\left(F\pm\frac{1}{C}G\pdc{p}{e}{V}\right)\diff t 
            & \text{ along a path defined by } \td{\xi}{t}=\pm C,\\
        \diff S
            & \defeq \diff p + C^2 \diff V
            & =G\pdc{p}{e}{V} \diff t 
            & \text{ along a path defined by } \td{\xi}{t}=0
    }
\]

 \begin{align*}
    \diff J^\pm 
        & \defeq \diff u\pm \frac{1}{C}\diff p 
        & =\left(F\pm\frac{1}{C}G\pdc{p}{e}{V}\right)\diff t 
        & \text{ along a path defined by } \td{\xi}{t}=\pm C,\\
    \diff S
        & \defeq \diff p + C^2 \diff V
        & =G\pdc{p}{e}{V} \diff t 
        & \text{ along a path defined by } \td{\xi}{t}=0.
 \end{align*}
 \end{document}

这里是代码产生的。

因此,我的问题是:有没有办法在显示的数学中手动添加标签?或者,对于这种情况,是否有更好的方法或更好的环境?

答案1

环境在这里比或alignat*更合适(在显示数学环境中)。见下文。align*array

对于行号,您可以使用我在下面定义的命令\numberthis。该命令需要一个可选参数,如果不为空,则用于创建交叉引用的标签。(感谢 wasteofspace 的评论。)

另请参阅David Carlisle 的推荐关于的(滥用)使用\ensuremath

在此处输入图片描述

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[landscape]{geometry}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{mathtools}

\newcommand\numberthis[1][]{%
    \refstepcounter{equation}%
    \ifx#1\empty\else\label{eq:#1}\fi%
    \tag{\theequation}%
}

\newcommand*{\defeq}{\vcentcolon=}
\newcommand*{\diff}{\mathrm{d}}

\newcommand*{\pd}[3][]{%
    \frac{\partial^{#1}#2}{\partial #3^{#1}}
}

\newcommand*{\pdc}[4][]{%
    \left(\pd[#1]{#2}{#3}\right)_{\!\!#4}
}

\newcommand{\td}[3][]{%
    \frac{\diff^{#1}#2}{\diff #3^{#1}}
}

\newcommand{\earray}[3][2]{%
    \everymath{\displaystyle}%
    \renewcommand*{\arraystretch}{#1}%
    \begin{array}{#2}
        #3
    \end{array}
}


\begin{document}
\begin{alignat*}{4}
        &\diff J^\pm 
            && \defeq \diff u\pm \frac{1}{C}\diff p 
            && =\left(F\pm\frac{1}{C}G\pdc{p}{e}{V}\right)\diff t 
            && \text{ along a path defined by } \td{\xi}{t}=\pm C,\\[1em]
        &\diff S
            && \defeq \diff p + C^2 \diff V
            && =G\pdc{p}{e}{V} \diff t 
            && \text{ along a path defined by } \td{\xi}{t}=0 \numberthis[ju]
\end{alignat*}
Equation \ref{eq:ju} is of interest for\ldots
 \end{document}

答案2

不要这样做!

\newcommand*{\pd}[3][]{%
    \ensuremath%
    \frac{\partial^{#1}#2}{\partial #3^{#1}}
}

如果在数学模式下使用,\ensuremath则不执行任何操作,但如果在数学模式之外使用,它将扩展为

$\relax\frac${\partial^{#1}#2}{\partial #3^{#1}}

您将会看到很多奇怪的错误,因为\frac看不到它的参数,也\partial不会处于数学模式。

只需删除该\ensuremath行即可。

(对于您的实际问题,我建议使用 AMS 对齐,正如 Jubobs 在他的回答中所建议的那样)

相关内容