我经常使用\boxed{...}
AMS 数学包中的函数将重要的方程式放在一个方框内。然而,这种方法通常会产生一些看起来有些尴尬的输出。考虑一下
\documentclass{article}
\pagestyle{empty}
\usepackage{amsmath}
\begin{document}
\[
\boxed{c_i = \sum_jA_{ij}}
\]
\[
\boxed{c_i = \langle\psi|\phi\rangle}
\]
\end{document}
观察发现,在第一种情况下,盒子看起来不平衡,而在第二种情况下,可以在顶部和底部增加更多填充。最好的解决方法是什么?我知道我可以使用,\phantom
但我想知道是否存在更优雅的解决方案。
答案1
您可以使用empheq
包,然后定义您自己的装箱命令。它可以是标准的 Latex\fbox
或 Tikz 框,也可以是任何其他类型的框。请看下面的示例。我定义了一个颜色框(为了使其更有趣),其中包含两个可选参数,用于填充等式上方和下方的空间
\mybluebox[<top pad>][<bot pad>]{<contents>}
该keyval
包已经加载,因此您可以制作一个漂亮的 keyval 界面,但我将其留给读者作为练习 ;-)
\documentclass{article}
\usepackage{color}
\definecolor{myblue}{rgb}{.8, .8, 1}
\usepackage{amsmath}
\usepackage{empheq}
\newlength\mytemplen
\newsavebox\mytempbox
\makeatletter
\newcommand\mybluebox{%
\@ifnextchar[%]
{\@mybluebox}%
{\@mybluebox[0pt]}}
\def\@mybluebox[#1]{%
\@ifnextchar[%]
{\@@mybluebox[#1]}%
{\@@mybluebox[#1][0pt]}}
\def\@@mybluebox[#1][#2]#3{
\sbox\mytempbox{#3}%
\mytemplen\ht\mytempbox
\advance\mytemplen #1\relax
\ht\mytempbox\mytemplen
\mytemplen\dp\mytempbox
\advance\mytemplen #2\relax
\dp\mytempbox\mytemplen
\colorbox{myblue}{\hspace{1em}\usebox{\mytempbox}\hspace{1em}}}
\makeatother
\begin{document}
\begin{empheq}[box={\mybluebox[5pt]}]{equation*}
c_i = \sum_j A_{ij}
\end{empheq}
\begin{empheq}[box={\mybluebox[2pt][2pt]}]{equation*}
c_i = \langle\psi|\phi\rangle
\end{empheq}
\end{document}
答案2
tcolorbox
还为盒装数学表达式提供了几个选项。
tcbhighmath
是一个可以与empheq
包装一起使用的特殊盒子,但也很容易声明要与一起使用的新盒子empheq
。
一些带有代码的示例:
\documentclass{article}
\usepackage{amsmath}
\usepackage{empheq}
\usepackage[most]{tcolorbox}
\newtcbox{\mymath}[1][]{%
nobeforeafter, math upper, tcbox raise base,
enhanced, colframe=blue!30!black,
colback=blue!30, boxrule=1pt,
#1}
\begin{document}
\begin{empheq}[box=\tcbhighmath]{equation*}
c_i = \langle\psi|\phi\rangle
\end{empheq}
\tcbset{highlight math style={boxsep=5mm,colback=blue!30!red!30!white}}
\begin{empheq}[box=\tcbhighmath]{equation*}
c_i = \langle\psi|\phi\rangle
\end{empheq}
\begin{empheq}[box=\mymath]{equation*}
c_i = \langle\psi|\phi\rangle
\end{empheq}
\begin{empheq}[box={\mymath[colback=red!30,drop lifted shadow, sharp corners]}]{equation*}
c_i = \langle\psi|\phi\rangle
\end{empheq}
\end{document}
答案3
也许这些命令会有所帮助:
\newcommand{\boxedeq}[2]{\begin{empheq}[box={\fboxsep=6pt\fbox}]{align}\label{#1}#2\end{empheq}}
\newcommand{\coloredeq}[2]{\begin{empheq}[box=\colorbox{lightgreen}]{align}\label{#1}#2\end{empheq}}
别忘了放
\usepackage{empheq}
\usepackage{xcolor}
\definecolor{lightgreen}{HTML}{90EE90}
在序言中。
完整示例:
\documentclass{article}
\pagestyle{empty}
\usepackage{amsmath}
\usepackage{empheq}
\usepackage{xcolor}
\definecolor{lightgreen}{HTML}{90EE90}
\newcommand{\boxedeq}[2]{\begin{empheq}[box={\fboxsep=6pt\fbox}]{align}\label{#1}#2\end{empheq}}
\newcommand{\coloredeq}[2]{\begin{empheq}[box=\colorbox{lightgreen}]{align}\label{#1}#2\end{empheq}}
\begin{document}
\boxedeq{eq:first}{c_i = \sum_jA_{ij}}
\coloredeq{eq:second}{c_i = \langle\psi|\phi\rangle}
\end{document}
答案4
为了将来参考,我发现了这个推介会有几个选项。我选择了 bclogo 包。它的文档是用法语写的,但它看起来功能更丰富,有图标、框架、背景颜色、标题等。