align* 環境で 1 つの整列された方程式だけに \tcbhighmath を使用しますか?

align* 環境で 1 つの整列された方程式だけに \tcbhighmath を使用しますか?

\tcbhighmath環境内のセット内の 1 つの方程式のみを使用して、様式化されたボックスを配置する方法を考えていますalign*。たとえば、次のようになります。

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

最後の方程式 z = 3 + x の周囲にボックスを表示したいだけです。

答え1

ボックスを 2 つのalign列に直接またがることはできませんが、目的の結果を得るための回避策を次に示します。

alignは、方程式をタイプセットするために 2 つのパスを使用します。最初のパスでは、すべてのコンポーネントの高さと幅を測定し、2 番目のパスでは実際にそれらをタイプセットします。\mathbox{...&...}方程式の左側と右側の部分を収集する新しいコマンドを定義します。測定パス (\ifmeasuring@は true) では通常、正しい幅を取得するために列のテキストを設定します。

2 番目のパスでは、列のテキストが入った幅ゼロの\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}

\tikzmarkinおよびへの引数は\tikzmarkend一意の文字列である必要があります。

ここに画像の説明を入力してください

関連情報