向多线方程添加拟合框

向多线方程添加拟合框

我正在尝试绘制一些方程周围的拟合框。但是,我无法控制框的宽度。我该如何实现?

\documentclass{beamer}
\usepackage{amssymb,amsmath,empheq}

\newcommand*\widefbox[1]{\fbox{\hspace{2em}#1\hspace{2em}}}

\begin{document}

\begin{frame}{Higher Order Equations}
\begin{itemize}
\item Must make into a system of first-order equations to use ODE solvers
\item Nonlinear is OK!
\item Pendulum example:
\end{itemize}
\scriptsize
\begin{flalign*}
&\ddot{\theta}+\frac{g}{L}sin(\theta)=0&\\
&\ddot{\theta}=-\frac{g}{L}sin(\theta)&\\
&\text{let } \dot{\theta} = \gamma&\\
&\dot{\gamma}=-\dfrac{g}{L}sin(\theta)&
\end{flalign*}
\begin{subequations}
\begin{empheq}[box=\widefbox]{flalign*}
&\overrightarrow{x} = \begin{bmatrix}\theta\\\gamma\end{bmatrix}&\\
&\dfrac{d\overrightarrow{x}}{dt} =  \begin{bmatrix}\dot{\theta}\\\dot{\gamma}\end{bmatrix}&
\end{empheq}
\end{subequations}
\normalsize
\end{frame}

\end{document}

输出

答案1

为了使框架框适合其内容,首先需要测量内容宽度。在这种情况下,我只需将要测量的内容分配给框寄存器 0,即\setbox0=\hbox{...}并从中检索其宽度\wd0。因此,您的框宏将被定义为

\newcommand*\WideFittedFramebox[1]{%
  \setbox0=\hbox{\hspace{2em}#1\hspace{2em}}%
  \framebox[\the\wd0]{\hspace{2em}#1\hspace{2em}}%
}

请注意,我更改了它的名称,\framebox现在用它来创建框架,而不是\fbox\framebox命令那样采用设置宽度的可选参数。(否则就需要\fbox{\parbox{\the\wd0}{...}}。)

另外,我调整了代码的标记

  • \scriptsize在组内使用\scriptsize...\normalsize,而不是
  • 环境gatherfleqn选项一起,而不是flalign带有空列的环境,
  • \sin...而不是简单的sin...
  • 通过在环境内正确嵌套方程块subequations

完整的代码如下

\documentclass[fleqn]{beamer}
\usepackage{amssymb,amsmath,empheq}

\newcommand*\WideFittedFramebox[1]{%
  \setbox0=\hbox{\hspace{2em}#1\hspace{2em}}
  \framebox[\the\wd0]{\hspace{2em}#1\hspace{2em}}
}

\begin{document}

\begin{frame}{Higher Order Equations}
\begin{itemize}
  \item Must make into a system of first-order equations to use ODE solvers
  \item Nonlinear is OK!
  \item Pendulum example:
\end{itemize}

\begingroup \scriptsize
\begin{subequations}
  \begin{gather*}
    \ddot{\theta}+\frac{g}{L}\sin(\theta)=0\\
    \ddot{\theta}=-\frac{g}{L}\sin(\theta)\\
    \text{let }\dot{\theta}=\gamma\\
    \dot{\gamma}=-\dfrac{g}{L}\sin(\theta)
  \end{gather*}
  \begin{empheq}[box=\WideFittedFramebox]{gather*}
    \overrightarrow{x}=\begin{bmatrix}\theta\\\gamma\end{bmatrix}\\
    \dfrac{d\overrightarrow{x}}{dt}=\begin{bmatrix}\dot{\theta}\\\dot{\gamma}\end{bmatrix}
  \end{empheq}
\end{subequations}
\endgroup
\end{frame}

\end{document}

输出

相关内容