我需要交错差分方程组,以便前一行的递增索引出现在其上一行的相应索引下方。这已被证明具有挑战性,因为索引项出现在字符序列中,这会导致 LaTeX 在它们之间应用 & 或 && 时将本应为一个项的元素拆分。
下面显示的是前三个方程,它们很容易在等号处对齐。但是,我还想在 RHS 上对齐索引匹配的函数“u”,即“u_{1,j}”、“u_{2,j}”等。
输入 '\nonumber' 也很麻烦,这个环境不使用 * 来暂停编号是没有意义的。'{alignat*}{n} 在其他所有意义上是否与 '{align}' 相同?'n' 代表方程的数量还是对齐点的数量?(如果 '{alignat*}' 不能解决我的问题,请忽略此段。
还,
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[]{amsthm}
\usepackage[]{amssymb}
\usepackage[]{amsmath}
\usepackage{textcomp}
\usepackage{chngcntr}
\usepackage{graphicx}
\usepackage[export]{adjustbox}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{wrapfig}
\usepackage{physics}
\usepackage{listings}
\usepackage{xcolor}
\usepackage[T1]{fontenc}
\usepackage[numbered]{matlab-prettifier}
\lstset{frame=tb,
language=Java,
aboveskip=3mm,
belowskip=3mm,
showstringspaces=false,
columns=flexible,
basicstyle={\small\ttfamily},
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{dkgreen},
stringstyle=\color{mauve},
breaklines=true,
breakatwhitespace=true,
tabsize=3
\begin{align}
\boldsymbol{u_{1,j+1}} &= 0 + \left(1-2\boldsymbol{r}\right)\boldsymbol{u_{1,j}} + \boldsymbol{r u_{2,j}}\nonumber\\
\boldsymbol{u_{2,j+1}} &= \boldsymbol{r}\boldsymbol{u_{1,j}} + \left(1-2\boldsymbol{r}\right)\boldsymbol{u_{2,j}} + \boldsymbol{r u_{3,j}}\nonumber\\
\boldsymbol{u_{3,j+1}} &= \boldsymbol{r}\boldsymbol{u_{2,j}} + \left(1-2\boldsymbol{r}\right)\boldsymbol{u_{3,j}} + \boldsymbol{r u_{4,j}}\nonumber\\
\nonumber\end{align}
结果应该类似于
非常感谢您的帮助。谢谢
答案1
使用alignat*
;而不是amsmath
我使用mathtools
(对于\shortintertext
)和粗体数学字体,我建议使用包\bm
:
\documentclass{article}
\usepackage{mathtools}
\usepackage{bm}
\begin{document}
\begin{alignat*}{5}
\bm{u}_{1,j+1}
& = 0 + (1-2 & \bm{r}) & \bm{u}_{1,j} + \bm{r u}_{2,j} && \\
\bm{u}_{2,j+1}
& = & \bm{r}~ & \bm{u}_{1,j} + (1-2
& \bm{r})& \bm{u}_{2,j} + \bm{r u}_{3,j}
\shortintertext{\hspace{8em}\dotfill\hspace*{3.5em}}
\bm{u}_{3,j+1}
& = & & & \bm{r}~ & \bm{u}_{2,j} + (1-2\bm{r})\bm{u}_{3,j} + \bm{r u}_{4,j}
\end{alignat*}
\end{document}
答案2
用这个很容易alignat*
(注意带星号的版本没有数字)。这样就需要 5 个对齐点,因此需要 9 个 & 符号。我删除了所有不必要的包来解决手头的问题,并将 babel 的语言选项移至文档 cleass,自 3.10 版以来应该如此:
\documentclass[english]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{amsfonts, amssymb, amsmath}
\begin{document}
\begin{alignat*}{5}
\boldsymbol{u_{1,j+1}} &={}&0 +(1-2\boldsymbol{r})\boldsymbol{u_{1,j}} & &{}+ \boldsymbol{r u_{2,j}} &\\
\boldsymbol{u_{2,j+1}} &= & \boldsymbol{r}\boldsymbol{u_{1,j}} & &{} + (1-2\boldsymbol{r})\boldsymbol{u_{2,j}} & &{}+ \boldsymbol{r u_{3,j}} & \\
\boldsymbol{u_{3,j+1}} &= & & & \boldsymbol{r}\boldsymbol{u_{2,j}} & &{}+(1-2\boldsymbol{r})\boldsymbol{u_{3,j}} & & {}+ \boldsymbol{r u_{4,j}} &
\end{alignat*}
\end{document}
答案3
垂直间隔array
就足够了:
\documentclass{article}
\usepackage{amsmath,array}
\begin{document}
\begin{equation*}
\renewcommand{\arraystretch}{1.5}
\setlength{\arraycolsep}{0pt}
\begin{array}{r >{{}}c<{{}} r<{{}} >{{}}c<{{}} r >{{}}c<{{}} ll}
u_{1,j+1} & = & 0+(1-2r)u_{1,j} & + & ru_{2,j} \\
u_{2,j+1} & = & ru_{1,j} & + & (1-2r)u_{2,j} & + & ru_{3,j} \\
& \multicolumn{7}{c}{\;\dotfill\hphantom{{}+0}} \\
u_{N-1,j+1} & = & &&&&& ru_{N-2,j}+(1-2r)u_{N-1,j}+0
\end{array}
\end{equation*}
\end{document}