\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\@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,}}