![使用 tcolorbox 突出显示对齐的方程线](https://linux22.com/image/405909/%E4%BD%BF%E7%94%A8%20tcolorbox%20%E7%AA%81%E5%87%BA%E6%98%BE%E7%A4%BA%E5%AF%B9%E9%BD%90%E7%9A%84%E6%96%B9%E7%A8%8B%E7%BA%BF.png)
在第一个框中,我展示了想要显示的三行数学公式。然后,我希望根据框 A 和框 B 的设计突出显示第一行和最后一行,如下所示。
是否可以做到这一点同时仍保持一致的等式符号?
\documentclass[a5paper,12pt]{book}
\usepackage[a5paper]{geometry}
\usepackage[many]{tcolorbox}
\usepackage{empheq}
\usepackage{xcolor}
\usepackage{siunitx}
\tcbset{enhanced,boxrule=0.8pt,bottomrule=1.6pt,arc=1pt,auto outer arc,lifted shadow={1mm}{-1mm}{2mm}{0.1mm}{gray!60}}
\newtcbox{\eqbox}[2]{nobeforeafter,math upper,colback=#1,colframe=#2}
\newtcbox{\highlight}[2]{nobeforeafter,math upper,colback=#1,colframe=#2,boxrule=0pt,bottomrule=1.6pt,arc=1.6pt,auto outer arc,boxsep=-2pt,no shadow}
\setlength\intextsep{0pt}
\def \epc {6.241 509 074 460 76 E18}
\def \cpe {1.602 176 634 E-19}
\begin{document}
\section*{Electric Charge}
I want to insert box A and box B within a bigger parent box in such a fashion that the equations in the smaller boxes align with each other's equation signs.
\bigskip
\begin{tcolorbox}[colback=yellow!10,colframe=black!30!yellow!20]\small
\begin{align*}
\SI{\cpe}{\coulomb} &= \SI{1}{\elementarycharge} \leftarrow \text{\bf box A here} \\
\frac{\SI{\cpe}{\coulomb}}{\num{\cpe}} &= \frac{\SI{1}{\elementarycharge}}{\num{\cpe}} \\
\text{\bf box B here} \rightarrow \SI{1}{\coulomb} &= \SI{\epc}{\elementarycharge} \\
\end{align*}
\end{tcolorbox}
\textbf{Box A:}
\begin{empheq}[box=\highlight{red!30!yellow!40}{black!30!red!30!yellow}]{align*}\small
\SI{\cpe}{\coulomb} &= \SI{1}{\elementarycharge}
\end{empheq}
\textbf{Box B:}
\begin{empheq}[box=\highlight{red!30!yellow!40}{black!30!red!30!yellow}]{align*}\small
\SI{1}{\coulomb} &= \SI{\epc}{\elementarycharge}
\end{empheq}
\end{document}
答案1
请不要太认真对待这个答案。我不相信有一个简单的解决方案,并且tcolorbox
“empheq
仅”,但我可能是错的。然后有一个非常好的包hf-tikz
,它将允许您突出显示您想要突出显示的方程式部分。但是,我不知道如何教它使用copy shadow
我在这里用来模拟您的框。所以我使用“仅”tikzmark
来添加这些框。的众多惊人功能之一tikzmark
是您可以以看似“违反因果关系”的方式使用标记,即您可以在定义它们之前使用它们。这通过将信息写入辅助文件中来实现,这就是为什么您必须编译多次(这里是三次)的原因。
\documentclass[a5paper,12pt]{book}
\usepackage[a5paper]{geometry}
\usepackage[many]{tcolorbox}
\usepackage{empheq}
\usepackage{siunitx}
\usepackage{tikz}
\usetikzlibrary{tikzmark,fit,shadows}
\tcbset{enhanced,boxrule=0.8pt,bottomrule=1.6pt,arc=1pt,auto outer arc,lifted shadow={1mm}{-1mm}{2mm}{0.1mm}{gray!60}}
\newtcbox{\eqbox}[2]{nobeforeafter,math upper,colback=#1,colframe=#2}
\newtcbox{\highlight}[2]{nobeforeafter,math upper,colback=#1,colframe=#2,boxrule=0pt,bottomrule=1.6pt,arc=1.6pt,auto outer arc,boxsep=-2pt,no shadow}
\tikzset{highlight/.style 2 args={fill=#1,draw=#2,thick,rounded corners=1.6pt,
double copy shadow={shadow xshift=0pt,shadow yshift=-0.4pt},inner xsep=1ex,
minimum height=1.4em,yshift=0.35em},
mylight/.style={highlight={red!30!yellow!40}{black!30!red!30!yellow}}}
\setlength\intextsep{0pt}
\def\epc{6.241 509 074 460 76 E18}
\def\cpe{1.602 176 634 E-19}
\begin{document}
\section*{Electric Charge}
I want to insert box A and box B within a bigger parent box in such a fashion that the equations in the smaller boxes align with each other's equation signs.
\bigskip
\begin{tcolorbox}[colback=yellow!10,colframe=black!30!yellow!20]\small%
\begin{tikzpicture}[overlay,remember picture]
\iftikzmark{lhs1}{%
\node[fit=(pic cs:lhs1)(pic cs:rhs1),mylight]{};}{%
\typeout{Please recompile.}}
\iftikzmark{lhs2}{%
\node[fit=(pic cs:lhs2)(pic cs:rhs2),mylight]{};}{%
\typeout{Please recompile.}}
\end{tikzpicture}%
\begin{align*}
\tikzmark{lhs1}\SI{\cpe}{\coulomb} &=
\SI{1}{\elementarycharge}\tikzmark{rhs1}\\[0.2em]
\frac{\SI{\cpe}{\coulomb}}{\num{\cpe}} &= \frac{\SI{1}{\elementarycharge}}{\num{\cpe}} \\[0.2em]
\tikzmark{lhs2}\SI{1}{\coulomb} &=
\SI{\epc}{\elementarycharge}\tikzmark{rhs2} \\
\end{align*}
\end{tcolorbox}
\end{document}
让我提一下,它tikzmark
还有更多令人惊叹的功能。特别是,它有一个save nodes
关键功能,允许人们将完整的节点(而不是“仅仅”标记)保存到某个文件中。原则上,人们可以使用它来找到更自动化的解决方案。我将在另一天讨论这个问题。