框架方程

框架方程

我知道在 Latex 中可以构建一个“重要”的方程式,例如 mathmode 中建议的方程式,但我认为最好有一个专门的环境,而不是在方程式周围放置框架或框。所以我想出了以下内容,只需调整现有的方程式环境即可:

\documentclass[fleqn,12pt]{book}
\usepackage{microtype}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{xcolor}
\usepackage{amsmath}
\usepackage{framed}

\renewcommand*\FrameCommand{\fcolorbox{red!80}{red!20}}%
\makeatletter
\newenvironment{fequation}{%
%\setlength\abovedisplayskip{3pt}
%\setlength\belowdisplayskip{3pt}
  \incr@eqnum%
  \mathdisplay@push%
  \st@rredfalse \global\@eqnswtrue%
  \MakeFramed{%
  \vspace*{-\baselineskip}%
  \FrameRestore}%
  \mathdisplay{equation}%
}{%
  \endmathdisplay{equation}%
  \mathdisplay@pop%
  \ignorespacesafterend%
  \vspace*{-\baselineskip}
  \endMakeFramed\noindent%
}%
\makeatother

\begin{document}
Suspendisse lectus tortor, dignissim sit amet, adipiscing nec
\begin{equation}
\cos t=\pi
\end{equation}
porttitor, orci nec nonummy molestie, enim est eleifend mi, non
\begin{fequation}
\cos t=\pi
\end{fequation}
vitae, consequat in, pretium a, enim. Pellentesque congue.
\begin{fequation}
\begin{aligned}
&\cos t=\pi\\
&\sin t=-\pi
\end{aligned}
\end{fequation}
vitae, consequat in, pretium a, enim. Pellentesque congue.
\begin{fequation}
\biggl(\int_\Omega \frac{t^2}{t+1}\D{t}\biggr)=1
\end{fequation}
\end{document}

我一直在尝试使用\vspace*以及\abovedisplayskip\belowdisplayskip命令进行调整,但我想知道如何控制主文本和框架方程之间的垂直空白?此外,欢迎您提出任何有趣的改进。

答案1

这是带有简单框的代码:

\documentclass[fleqn,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{microtype}
\usepackage{xcolor}
\usepackage{amsmath}
\newsavebox\MBox

\newenvironment{fequation}{%
  \setlength\abovedisplayskip{0pt}%
  \setlength\belowdisplayskip{0pt}%
  \setlength\abovedisplayshortskip{0pt}%
  \setlength\belowdisplayshortskip{0pt}%
  \par\noindent\begin{lrbox}{\MBox}
  
  \minipage{\dimexpr \linewidth-2\fboxsep-2\fboxrule\relax}

  \equation\strut%
}{%
  \endequation%
  \endminipage%
  \end{lrbox}\fcolorbox{red!80}{red!20}{\usebox\MBox}%
  \ignorespacesafterend\par\noindent}%
    
\begin{document}
Suspendisse lectus tortor, dignissim sit amet, adipiscing nec
%
\begin{equation}
\cos t=\pi
\end{equation}
%
por
%
\begin{fequation}
\cos t=\pi
\end{fequation}
%
vitae, 
\begin{fequation}
\begin{aligned}
&\cos t=\pi\\
&\sin t=-\pi
\end{aligned}
\end{fequation}
%
vitae, consequat in, pretium a, enim. Pellentesque congue.
\begin{fequation}
\biggl(\int_\Omega \frac{t^2}{t+1}\D{t}\biggr)=1
\end{fequation}
%
\end{document}

在此处输入图片描述

答案2

借助tcolorbox帮助,您可以轻松声明自己的盒式方程环境

\documentclass[fleqn,12pt]{book}
\usepackage{microtype}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{xcolor}
\usepackage{amsmath}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}

\tcbset{colback=red!20, colframe=red!80}

\newtcolorbox{fequation}[1][]{ams equation,size=small,#1}

\begin{document}
\lipsum[4]
\begin{equation}
\cos t=\pi
\end{equation}
\lipsum[4]
\begin{fequation}
\cos t=\pi
\end{fequation}
vitae, consequat in, pretium a, enim. Pellentesque congue.
\begin{fequation}[ams align]
\cos t&=\pi\\
\sin t&=-\pi
\end{fequation}
vitae, consequat in, pretium a, enim. Pellentesque congue.
\begin{fequation}
\biggl(\int_\Omega \frac{t^2}{t+1}\D{t}\biggr)=1
\end{fequation}
\end{document}

在此处输入图片描述

答案3

您可以使用float以下选项创建自己的浮动环境boxed

\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{float}
\usepackage{lipsum}

\floatstyle{boxed}
\newfloat{frameequation}{hbtp}{feq}[section]
\floatname{frameequation}{Equation}

\newcommand{\freq}[2]{%
\begin{frameequation}%
\ensuremath{\hfill #1 \hfill}%
\caption{#2}
\end{frameequation}%
}


\begin{document}

\section{Some math topic}

\lipsum[1]

\freq{\int\limits^{\infty}_{0}\left(\frac{1}{x}\right)dx=???}{One}

\lipsum[1]

\freq{\int\limits^{\infty}_{0}\left(\frac{1}{x}\right)dx=???}{Two}

\lipsum[1]

\freq{\int\limits^{\infty}_{0}\left(\frac{1}{x}\right)dx=???}{Three}

\lipsum[1]

\end{document}

其结果为:

在此处输入图片描述

答案4

除了empheqHerbert 提到的包之外,还有一个mdframed提供类似功能的包。这个包的一个优点mdframed是,如果要框架的块包含分页符,则不会出现任何问题——它周围的框架也会跨越页面边界。:-)

相关内容