为什么 \mleft 和 \mright 命令会禁止 dmath 内部分隔符之间的中断?

为什么 \mleft 和 \mright 命令会禁止 dmath 内部分隔符之间的中断?

考虑以下代码:

\documentclass[twocolumn]{article}
\usepackage[margin=1in]{geometry}
\usepackage{lipsum}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{breqn}

\usepackage{amsmath} \delimitershortfall=-1pt

\usepackage{mleftright}
\usepackage{color}

\begin{document}

  \lipsum[3-4]

  \textcolor{red}{{\ttfamily \textbackslash mleft} and {\ttfamily \textbackslash mright} inhibits the breaking between delimiters inside {\ttfamily dmath}:}

  \begin{dmath*}
    \mathcal{O}(f) = \mleft\{ t \hiderel{:} \mathbb{N} \hiderel{\rightarrow} \mathbb{R}^+_0 \hiderel{\mid} \exists c \hiderel{\in} \mathbb{R}^+ \wedge \exists n_0 \hiderel{\in} \mathbb{N} \wedge \forall n \hiderel{\geq} n_0 \wedge t(n) \hiderel{\leq} c \, f(n) \mright\}
  \end{dmath*}

  \textcolor{blue}{{\ttfamily \textbackslash left} and {\ttfamily \textbackslash right} produce a good results but {\bf is preferable in many equations always use} the {\ttfamily \textbackslash mleft} and {\ttfamily \textbackslash mright} commands:}

  \begin{dmath*}
    \mathcal{O}(f) = \left\{ t \hiderel{:} \mathbb{N} \hiderel{\rightarrow} \mathbb{R}^+_0 \hiderel{\mid} \exists c \hiderel{\in} \mathbb{R}^+ \wedge \exists n_0 \hiderel{\in} \mathbb{N} \wedge \forall n \hiderel{\geq} n_0 \wedge t(n) \hiderel{\leq} c \, f(n) \right\}
  \end{dmath*}

  \lipsum[1-5]

\end{document}

输出:

在此处输入图片描述

是否有任何解决方案或修改允许在 \dmath 中正确使用 \mleft 和 \mright?

答案1

\mleftof 包的诀窍mleftright在于它以空开始\mathopen{},并将整个表达式放在 内,\mathclose{...}包括原始分隔符\left\right。因此,周围的数学会看到一个正确分隔的表达式,\left并且\right不会在 内设置它们的额外间距\mathclose

与原始的\leftand一样\right,表达式被放入一个不能跨行的数学子公式中(\mathinner对于\leftand \right\mathclose对于\mleftand \mright)。但是,包breqn重新定义了\leftand\right以允许换行。但由于它们位于子公式内,因此换行不会产生影响。

breqn因此,如果您想要该软件包提供的类似功能,您可以向 发出功能请求mleftright

但在本题中,使用\mleft/\mright完全没有意义。关系符号 ( =) 和开头的栅栏\{或数学内部公式 ( \left/ \right) 之间插入的空格完全相同 ( \thickmuskip)。结尾的栅栏结束了整个等式,没有后续符号。

相关内容