我正在尝试在 LateX 中编写 Levenshtein 公式。但是,出现了以下问题:
\begin{equation}
lev_{a,b}(i,j)=\left\{\begin{matrix}
max(i,j) & if min(i,j)=0, \\
min\left\{\begin{matrix}
lev_{a,b}(i-1,j)+1\\
lev_{a,b}(i,j-1)+1)\\
lev_{a,b}(i-1,j-1)+1_{a_{i}\neq b_{j}})
\end{matrix}\right. & otherwise.
\end{matrix}\right.
\end{equation}
文本max(i,j)
将显示在其通道的中间,而不是在左侧很好地对齐,如下图所示:
我希望实现的是,它将max(i,j)
出现在第一次出现的上方min
,因此更多地出现在左括号的左边。
有人知道可以做到这一点吗?
亲切的问候!
答案1
您可以使用该array
环境,其工作方式基本与tabular
环境类似,但采用数学模式。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation}
lev_{a,b}(i,j) = \left\{\begin{array}{ll}
\max(i,j) & \text{if } \min(i,j)=0, \\[2mm]
\min\left\{ \begin{array}{l}
lev_{a,b}(i-1,j)+1\\
lev_{a,b}(i,j-1)+1\\
lev_{a,b}(i-1,j-1)+1_{a_{i}\neq b_{j}}
\end{array}\right. & \text{otherwise}.
\end{array}\right.
\end{equation}
\end{document}
答案2
您可以嵌套cases
;两个部分之间需要有足够的空间。
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\lev}{lev}
\begin{document}
\begin{equation}
\lev_{a,b}(i,j)=
\begin{cases}
\max(i,j) & \text{if $\min(i,j)=0$,} \\[2ex]
\min\begin{cases}
\lev_{a,b}(i-1,j)+1\\
\lev_{a,b}(i,j-1)+1)\\
\lev_{a,b}(i-1,j-1)+1_{a_{i}\neq b_{j}})
\end{cases} & \text{otherwise.}
\end{cases}
\end{equation}
\end{document}
此外,“lev”应该被视为像\max
and 这样的操作符\log
。
不过,您可能需要考虑不同的布局。
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\lev}{lev}
\begin{document}
\begin{equation}
\lev_{a,b}(i,j)=
\begin{cases}
\max(i,j) & \text{if $\min(i,j)=0$,} \\[2ex]
\begin{array}{@{}l@{}l@{}}
\min\{ & \lev_{a,b}(i-1,j)+1,\\
& \lev_{a,b}(i,j-1)+1),\\
& \lev_{a,b}(i-1,j-1)+1_{a_{i}\neq b_{j}})\}
\end{array} & \text{otherwise.}
\end{cases}
\end{equation}
\end{document}
答案3
您可以使用matrix*
\mathtools` 包中定义的环境。它可以定义矩阵单元的对齐方式:
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{equation}
lev_{a,b}(i,j) = \left\{
\begin{matrix*}[l]
\max(i,j) & \text{if } \min(i,j)=0, \\[2mm]
\min\left\{\begin{matrix*}[l]
lev_{a,b}(i-1,j)+1\\
lev_{a,b}(i,j-1)+1\\
lev_{a,b}(i-1,j-1)+1_{a_{i}\neq b_{j}}
\end{matrix*}\right. & \text{otherwise}.
\end{matrix*}\right.
\end{equation}
\end{document}
答案4
为什么不简单地将一个cases*
环境嵌套在另一个环境中cases*
?我还将其定义lev
为数学运算符,以罗马字符排版,并具有适当的间距。
\documentclass{article}
\usepackage{mathtools}
\DeclareMathOperator{\lev}{lev}
\begin{document}
\begin{equation}
\lev_{a,b}(i,j) =
\begin{cases*}
\max(i,j) & if $ \min(i,j)=0 $, \\[1ex]
\min\begin{cases*}
\lev_{a,b}(i-1,j)+1\\
\lev_{a,b}(i,j-1)+1\\
\lev_{a,b}(i-1,j-1)+1_{a_{i}\neq b_{j}}
\end{cases*} & otherwise.
\end{cases*}
\end{equation}
\end{document}