Используем \tcbhighmath только для одного выровненного уравнения в среде align*?

Используем \tcbhighmath только для одного выровненного уравнения в среде align*?

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

Аргументом \tikzmarkinи \tikzmarkendдолжна быть уникальная строка.

введите описание изображения здесь

Связанный контент