tcolorbox 方程和 fleqn:未垂直居中

tcolorbox 方程和 fleqn:未垂直居中

使用tcolorboxwith 时ams equation,,等式前面有时会有额外的前导空格:

\documentclass[fleqn]{article} 
\usepackage[many]{tcolorbox}
\usepackage{amsmath}

\begin{document} 
\begin{tcolorbox}[ams equation]
    A = B
\end{tcolorbox} 
\end{document}

相对

\documentclass{article} 
\usepackage[many]{tcolorbox}
\usepackage{amsmath}

\begin{document} 
\begin{tcolorbox}[ams equation]
    A = B
\end{tcolorbox} 
\end{document}

我怎样才能将其删除或使方程式垂直居中?fleqn这里的选项似乎很重要。

答案1

 \documentclass[fleqn]{article}
 \usepackage[many]{tcolorbox}
 \usepackage{amsmath}

\begin{document}
\begin{tcolorbox}[ams align]
    A = B
\end{tcolorbox}
\end{document}

在此处输入图片描述

答案2

amsmath包装似乎增加了额外的垂直空间,仅equation用于选项fleqn。我不确定这是错误还是功能,但目前tcolorbox不知道有或没有 时空间设置有何不同fleqn

下面的补丁似乎可以解决问题:

\makeatletter
\if@fleqn
\tcbset{%
  ams equation upper/.style={before upper=\tcb@hack@amsmath\equation,after upper=\endequation},%
  ams equation lower/.style={before lower=\tcb@hack@amsmath\equation,after lower=\endequation},%
  ams equation* upper/.style={before upper=\tcb@hack@amsmath\csname equation*\endcsname,after upper=\endequation},%
  ams equation* lower/.style={before lower=\tcb@hack@amsmath\csname equation*\endcsname,after lower=\endequation}%
}
\fi
\makeatother

综上所述,得出:

\documentclass[fleqn]{article}
%\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{amsmath}

\makeatletter
\if@fleqn
\tcbset{%
  ams equation upper/.style={before upper=\tcb@hack@amsmath\equation,after upper=\endequation},%
  ams equation lower/.style={before lower=\tcb@hack@amsmath\equation,after lower=\endequation},%
  ams equation* upper/.style={before upper=\tcb@hack@amsmath\csname equation*\endcsname,after upper=\endequation},%
  ams equation* lower/.style={before lower=\tcb@hack@amsmath\csname equation*\endcsname,after lower=\endequation}%
}
\fi
\makeatother

\begin{document}
abc
\begin{equation}
    A = B
\end{equation}
\begin{tcolorbox}[ams equation]
    A = B
\end{tcolorbox}
\begin{tcolorbox}[ams align]
    A = B
\end{tcolorbox}
\end{document}

此代码在有或没有的情况下都可以工作fleqn

相关内容