格式化微分方程组的最佳方式是什么?是否有特殊的包?我实际上正在使用环境
\begin{cases} ... \end{cases}
但是我无法将所有边界条件对齐到右侧?你有什么建议吗?这里有一个代码示例
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{physics}
\begin{document}
\begin{equation}
\begin{cases}
\displaystyle
\chi \bigg[ C_{m} \frac{\partial v}{\partial t} + I_{ion}\big( v,\mathbf{w},\mathbf{c} \big) \bigg] = \div \big( \mathbf{D_{M}} \div v \big) + I_{app} \qquad & \Omega_{0}^{s} \times \big(0,T\big]\\[20pt]
\displaystyle
\frac{\partial \mathbf{w}}{\partial t} = \mathbf{R}(v,\mathbf{w},\mathbf{c} \big) \qquad & \Omega_{0}^{s} \times \big(0,T\big] \\[20pt]
\displaystyle
\frac{\partial \mathbf{w} }{ \partial t} = \mathbf{S} \big(v,\mathbf{w},\mathbf{c} \big) \qquad & \Omega_{0}^{s} \times \big(0,T\big] \\[20pt]
\displaystyle
\big( \mathbf{D_M} \nabla v ) \cdot \mathbf{N_S} = 0 \qquad & \partial \Omega_{0}^{s} \times \big(0,T\big] \\[20pt]
\displaystyle
v = v_{0} \quad \mathbf{w} = \mathbf{w_{0}} \quad \mathbf{c} = \mathbf{c_{0}} & \partial \Omega_{0}^{s} \times \{ 0 \} \\[20pt]
\end{cases}
\end{equation}
\end{document}
在图片中,边界条件在左侧对齐,而我想将它们对齐在右侧(如红线所示)
答案1
您可能会发现 中的某些环境mathtools
对此很有用。特别是,dcases
类似于 的情况,但每行都处于显示模式,并spreadlines
更改对齐环境的行距。我还使用了aligned
中的 来amsmath
添加更多对齐点。
我还擅自定义了一个\vectorsym
宏,以提高可读性,这样您可以在一个地方更改所有向量的格式。
这个 MWE 使用 LuaLaTeX,但正文应该可以与您自己的序言配合良好(如果需要,您可以在 PDFTeX 中使用。isomath
)\vectorsym
我还用命令声明了一些成对的分隔符\DeclarePairedDelimiter
,该命令采用可选的大小参数。
\documentclass[10pt,a4paper]{article}
\usepackage[english]{babel}
\usepackage{mathtools}
\usepackage{newcomputermodern}
\newcommand\vectorsym[1]{\symbfit{#1}}
\DeclarePairedDelimiter\closedopen{\lbrack}{\rparen}
\begin{document}
\begin{spreadlines}{2ex}
\begin{equation}
\begin{dcases}
\begin{aligned}
\chi \bigg[ C_{m} \frac{\partial v}{\partial t} + I_{ion}\big( v,\vectorsym{w},\vectorsym{c} \big) \bigg] &=
\nabla \big( \vectorsym{D_{M}} \nabla v \big) + I_{app} \qquad &\Omega_{0}^{s} &\times \closedopen[\big]{0,T} \\
\frac{\partial \vectorsym{w}}{\partial t} &=
\vectorsym{R}(v,\vectorsym{w},\vectorsym{c} \big) \qquad &\Omega_{0}^{s} &\times \closedopen[\big]{0,T} \\
\frac{\partial \vectorsym{w} }{ \partial t} &=
\vectorsym{S} \big(v,\vectorsym{w},\vectorsym{c} \big) \qquad &\Omega_{0}^{s} &\times \closedopen[\big]{0,T} \\
\big( \vectorsym{D_M} \nabla v ) \cdot \vectorsym{N_S} &=
0 \qquad &\partial \Omega_{0}^{s} &\times \closedopen[\big]{0,T} \\
v = v_{0} \quad \vectorsym{w} = \vectorsym{w_{0}} \quad \vectorsym{c} &=
\vectorsym{c_{0}} &\partial \Omega_{0}^{s} &\times \{ 0 \}
\end{aligned}
\end{dcases}
\end{equation}
\end{spreadlines}
\end{document}
此外,physics
(我不太熟悉)似乎重新定义\div
为\nabla\cdot
,但在标准 LaTeX 中,这意味着 ÷。我现在正在编辑,因为这让我很困惑,我建议您不要使用像这样的模棱两可的代码。
答案2
你不需要什么特别的东西。我会避免所有那些20pt
太过分的东西。
为了避免\displaystyle
每次都发出,我使用了dcases
from mathtools
。
该physics
包重新定义\div
(这不是一件好事);不要仅仅为了这个目的而加载它,而是使用 的简单定义\Div
。
为了简化输入,我定义了一个\pder
命令和一个\vect
向量命令,以使输入更具语义。
第一个等式中的两个下标应该是直立的,因为它们是文字而不是符号。
这些线是等距的,并在最后两行插入幻影偏导数(第二行在底部被打破)。该\mystrut
命令是临时的,仅适用于该equation
环境。
请注意,\bigg
应该是 或\biggl
(\biggr
左分隔符和右分隔符)。我删除了所有\big
(应该是\bigl
或\bigr
),因为它们似乎不是必需的。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath,mathtools}
\usepackage{amssymb}
\usepackage{bm}
%\usepackage{physics} % I'd recommend avoiding it
\newcommand{\pder}[2]{\frac{\partial#1}{\partial#2}} % or use diffcoeff
\newcommand{\vect}[1]{\mathbf{#1}}
\newcommand{\Div}{\bm{\nabla}\cdot}
\begin{document}
\begin{equation}
\newcommand{\mystrut}{\vphantom{\pder{}{}}}
\begin{dcases}
\chi \biggl( C_{m} \pder{v}{t} + I_{\mathrm{ion}}(v,\vect{w},\vect{c}) \biggr) =
\Div (\vect{D_{M}} \Div v) + I_{\mathrm{app}}
& \Omega_{0}^{s} \times (0,T]
\\[1ex]
\pder{\vect{w}}{t} = \vect{R}(v,\vect{w},\vect{c})
& \Omega_{0}^{s} \times (0,T]
\\[1ex]
\pder{\vect{w}}{t} = \vect{S} (v,\vect{w},\vect{c} )
& \Omega_{0}^{s} \times (0,T]
\\[1ex]
\mystrut
(\vect{D_M} \Div v ) \cdot \vect{N_S} = 0
& \partial\Omega_{0}^{s} \times (0,T]
\\[1ex]
\smash[b]{\mystrut}
v = v_{0} \quad \vect{w} = \vect{w_{0}} \quad \vect{c} = \vect{c_{0}}
& \partial\Omega_{0}^{s} \times \{ 0 \}
\end{dcases}
\end{equation}
\end{document}
如果您想要右对齐边界条件,您可以使用alignedat
:
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath,mathtools}
\usepackage{amssymb}
\usepackage{bm}
%\usepackage{physics} % I'd recommend avoiding it
\newcommand{\pder}[2]{\frac{\partial#1}{\partial#2}} % or use diffcoeff
\newcommand{\vect}[1]{\mathbf{#1}}
\newcommand{\Div}{\bm{\nabla}\cdot}
\begin{document}
\begin{equation}
\newcommand{\mystrut}{\vphantom{\pder{}{}}}
\left\lbrace
\begin{alignedat}{2}
&\chi \biggl( C_{m} \pder{v}{t} + I_{\mathrm{ion}}(v,\vect{w},\vect{c}) \biggr) =
\Div (\vect{D_{M}} \Div v) + I_{\mathrm{app}}
&\quad \Omega_{0}^{s} \times (0,T]
\\[1ex]
&\pder{\vect{w}}{t} = \vect{R}(v,\vect{w},\vect{c})
&\quad \Omega_{0}^{s} \times (0,T]
\\[1ex]
&\pder{\vect{w}}{t} = \vect{S} (v,\vect{w},\vect{c} )
&\quad \Omega_{0}^{s} \times (0,T]
\\[1ex]
&\mystrut
(\vect{D_M} \Div v ) \cdot \vect{N_S} = 0
&\quad \Omega_{0}^{s} \times (0,T]
\\[1ex]
&\smash[b]{\mystrut}
v = v_{0} \quad \vect{w} = \vect{w_{0}} \quad \vect{c} = \vect{c_{0}}
&\quad \Omega_{0}^{s} \times \{ 0 \}
\end{alignedat}
\right.
\end{equation}
\end{document}
解释:alignedat
将左右对齐的列组合成对。因此,方程位于第一对的“左对齐部分”,而边界条件位于第二对的“右对齐部分”。
答案3
不需要使用cases
环境。我建议你使用alignedat
环境。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath} % for 'alignedat' environment
\usepackage{amssymb,physics}
\begin{document}
\begin{equation}
\addtolength{\jot}{5pt}
\left\{
\begin{alignedat}{2}
\chi \smash[b]{ \Bigl[ C_{m} \frac{\partial v}{\partial t}
+ I_{\mathrm{ion}}( v,\mathbf{w},\mathbf{c}) \Bigr] }
= \div ( \mathbf{D}_{\mathrm{M}} \div v ) + I_{\mathrm{app}}
&\qquad&& \Omega_{0}^{s} \times (0,T]\\
\frac{\partial \mathbf{w}}{\partial t}
= \mathbf{R}(v,\mathbf{w},\mathbf{c} )
&&&\Omega_{0}^{s} \times (0,T] \\
\frac{\partial \mathbf{w} }{ \partial t}
= \mathbf{S} (v,\mathbf{w},\mathbf{c} )
&&& \Omega_{0}^{s} \times (0,T] \\
( \mathbf{D}_{\mathrm{M}} \nabla v ) \cdot \mathbf{N_S} = 0
&&& \partial \Omega_{0}^{s} \times (0,T] \\
v = v_{0} \quad \mathbf{w} = \mathbf{w}_{0} \quad \mathbf{c} = \mathbf{c}_{0}
&&& \partial \Omega_{0}^{s} \times \{ 0 \}
\end{alignedat}
\right.
\end{equation}
\end{document}
答案4
在我回答之前,这里有一些提示和技巧
- 虽然您的示例相当简单,但我仍然建议删除编译不需要的包。示例:
physics
,babel
。 - 我建议不要购买该套餐
physics
。它有点臭名昭著就像一个庞然大物。它试图做太多事情,但都做得不好。还有其他较小的软件包可以产生更好的效果。 - 我建议使用
diffcoeff
包装如下所示。 - 我还建议使用
vec
,mathbf
因为它在代码中更清楚地表达了你的意思。使用 ,vec
你在阅读代码时就知道你在处理向量。此外,将符号更改为使用箭头等也更容易。 - 据我所知,目前还不存在用于生成微分方程组的任何包,但可以使用 生成足够的输出
alignedat
。 也可以使用该包systeme
,我猜其他答案可能会使用它。 - 我强烈建议您更好地格式化代码。使用缩进,并对齐代码中的
&
和 ,=
将使您过一段时间后再查看时代码的可读性大大提高。
\documentclass[10pt,a4paper]{article}
\usepackage{mathtools,amssymb}
\usepackage{diffcoeff}
\renewcommand{\vec}[1]{\mathbf{#1}}
\begin{document}
\begin{equation}
\begin{dcases}
{\begin{alignedat}{3}
& \chi\biggl[C_m \diffp vt +I_{ion}(v,\vec{w},\vec{c})\biggr]
= \div (\vec{D_M}\div v)+I_{app} \qquad
& \Omega_0^s &\times (0,T]\\
& \diffp {\vec{w}}t
= \vec{R}(v,\vec{w},\vec{c})
& \Omega_0^s & \times (0,T]\\
& \diffp {\vec{w}}t
= \vec{S}(v,\vec{w},\vec{c})
& \Omega_0^s & \times (0,T]\\
&(\vec{D_M}\nabla u) \cdot \vec{N}_S = 0
& \partial \Omega_0^s & \times (0,T]\\
& v = v_0 \quad \vec{w}=\vec{w_0} \quad \vec{c}=\vec{c_0}
& \partial \Omega_0^s & \times \{0\}
\end{alignedat}}
\end{dcases}
\end{equation}
\end{document}