在align* 環境中僅使用 \tcbhighmath 來表示一個對齊方程式?

在align* 環境中僅使用 \tcbhighmath 來表示一個對齊方程式?

我試圖弄清楚如何\tcbhighmath在環境中的一組方程式中僅使用一個程式化的盒子align*。例如:

\begin{align*}
   x &= 2 + y \\
   y &= 1 + z \\
   z &= 3 + x
\end{align*}

我只想要最後一個方程式周圍有一個框:z = 3 + x。

答案1

您不能直接將一個框跨越兩align列,但這裡有一個解決方法來獲得所需的結果。

align使用兩遍來排版方程式:第一遍測量所有組件的高度/寬度,第二遍實際上對它們進行排版。我們定義一個新指令\mathbox{...&...}來收集方程式的左右部分。在測量過程中(\ifmeasuring@為真),我們通常會設定列文字以獲得正確的寬度。

第二遍設定一個零寬度\tcbhighmath框,其中包含列的文本,另外向左移動左列文本的寬度加上框樣式的幾個參數(內邊距、規則寬度等),使等號與框外的等號對齊。結果基本上是一個空的右列,左列中的框與兩列重疊。

最小範例程式碼:

\documentclass{article}
\usepackage{mathtools}
\usepackage[theorems]{tcolorbox}

\makeatletter

\def\mathbox#1{\mathbox@#1\@end}
\def\mathbox@#1&#2\@end{%
    \ifmeasuring@
        #1%
    \else
        \begingroup
        \setbox0=\hbox{$\displaystyle#1$}%
        \dimen0=\dimexpr\wd0+\kvtcb@left@rule+\kvtcb@leftupper
                            +\kvtcb@boxsep+\kvtcb@bbleft\relax
        \hskip-\dimen0\relax
        \mathrlap{\tcbhighmath{\displaystyle#1 #2}}%
        \hskip\dimen0\relax
        \endgroup
    \fi
    &
    \ifmeasuring@
        #2%
    \fi
}

\makeatother

\begin{document}
\begin{align*}
   x &= 2 + y \\
   y &= 1 + z \\
   z &= 3 + x
\end{align*}
\begin{align*}
   x &= 2 + y \\
   y &= 1 + z \\
   \mathbox{z &= 3 + x}
\end{align*}
\end{document}

輸出

在此輸入影像描述

答案2

\documentclass{article}
\usepackage{mathtools}
\usepackage[theorems]{tcolorbox}
\tcbset{
highlight math/.append style={
        grow to left by =4.25mm,}
}
  \let\boxed=\tcbhighmath
\begin{document}
\begin{align*}
   x &= 2 + y \\
   y &= 1 + z \\
   \Aboxed{z &= 3 + x}
\end{align*}
\end{document}

在此輸入影像描述

一些解釋

mathtools包提供了\Aboxed可以像這樣使用的命令:

\usepackage{mathtools}
...
\begin{align*}
   x &= 2 + y \\
   y &= 1 + z \\
   \Aboxed{z &= 3 + x}
\end{align*}

產生這樣的東西:

在此輸入影像描述

根據mathtools手冊:internally \Aboxed does use \boxed

為了讓\Aboxed命令使用\tcbhighmath我們重新定義\boxed命令的框\let\boxed\tcbhightmath ,我們得到:

在此輸入影像描述

可以看出我們需要調整框的位置,因此我們將選項新增 到樣式grow to left by = <some distance>highlight math\tcbset{highlight math/.append style={grow to left by =4.25mm,}}

答案3

您可以使用hf-tikz

\documentclass{article}
\usepackage{amsmath,hf-tikz}

\begin{document}

\begin{align*}
   x &= 2 + y \\
   y &= 1 + z \\
   \tikzmarkin{a}z &= 3 + x\tikzmarkend{a}
\end{align*}

\end{document}

\tikzmarkinand的參數\tikzmarkend應該是唯一的字串。

在此輸入影像描述

相關內容