我了解align
和equation
环境,并且大多数时候都倾向于使用它们,但有时我希望在方程数组中拥有更大的灵活性,例如更好地控制对齐和水平间距。在这种情况下,我会使用环境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 在他的回答中所建议的那样)