如何在乳胶中格式化微分方程系统?

如何在乳胶中格式化微分方程系统?

格式化微分方程组的最佳方式是什么?是否有特殊的包?我实际上正在使用环境

\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}

mathtools 示例

此外,physics(我不太熟悉)似乎重新定义\div\nabla\cdot,但在标准 LaTeX 中,这意味着 ÷。我现在正在编辑,因为这让我很困惑,我建议您不要使用像这样的模棱两可的代码。

答案2

你不需要什么特别的东西。我会避免所有那些20pt太过分的东西。

为了避免\displaystyle每次都发出,我使用了dcasesfrom 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

在我回答之前,这里有一些提示和技巧


  • 虽然您的示例相当简单,但我仍然建议删除编译不需要的包。示例:physicsbabel
  • 我建议不要购买该套餐physics。它有点臭名昭著就像一个庞然大物。它试图做太多事情,但都做得不好。还有其他较小的软件包可以产生更好的效果。
  • 我建议使用diffcoeff包装如下所示。
  • 我还建议使用vecmathbf因为它在代码中更清楚地表达了你的意思。使用 ,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}

相关内容