Я пытаюсь понять, как просто поместить стилизованную коробку, используя \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\@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,}}