使用 tcolorbox 突出显示对齐的方程线

使用 tcolorbox 突出显示对齐的方程线

在第一个框中,我展示了想要显示的三行数学公式。然后,我希望根据框 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

请不要太认真对待这个答案。我不相信有一个简单的解决方案,并且tcolorboxempheq仅”,但我可能是错的。然后有一个非常好的包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关键功能,允许人们将完整的节点(而不是“仅仅”标记)保存到某个文件中。原则上,人们可以使用它来找到更自动化的解决方案。我将在另一天讨论这个问题。

相关内容