¿Usar \tcbhighmath para una sola ecuación alineada en el entorno align*?

¿Usar \tcbhighmath para una sola ecuación alineada en el entorno align*?

Estoy tratando de descubrir cómo colocar una caja estilizada usando \tcbhighmathsolo una ecuación en un conjunto dentro del align*entorno. Así por ejemplo:

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

Solo quiero un cuadro alrededor de la última ecuación: z = 3 + x.

Respuesta1

No puede dividir un cuadro en dos aligncolumnas directamente, pero aquí hay una solución para obtener el resultado deseado.

alignutiliza dos pasadas para componer las ecuaciones: la primera mide las alturas/anchos de todos los componentes, la segunda pasada realmente las escribe. Definimos un nuevo comando \mathbox{...&...}que recoge la parte izquierda y derecha de la ecuación. En la pasada de medición ( \ifmeasuring@es cierto), normalmente configuramos el texto de la columna para obtener los anchos correctos.

La segunda pasada establece un cuadro de ancho cero \tcbhighmathcon el texto de las columnas, además desplazado hacia la izquierda por la suma de los anchos del texto de la columna izquierda más varios parámetros del estilo del cuadro (margen interior, ancho de regla, etc.). de modo que el signo igual esté alineado con los que están fuera del cuadro. El resultado es básicamente una columna derecha vacía con el cuadro de la columna izquierda superpuesto a ambas columnas.

Código de ejemplo mínimo:

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

salidas

ingrese la descripción de la imagen aquí

Respuesta2

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

ingrese la descripción de la imagen aquí

Alguna explicación

El mathtoolspaquete proporciona el \Aboxedcomando que se puede utilizar así:

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

para producir algo como esto:

ingrese la descripción de la imagen aquí

Según el mathtoolsmanual: internally \Aboxed does use \boxed.

Para permitir que el \Aboxedcomando use el \tcbhighmathcuadro, redefinimos el \boxedcomando \let\boxed\tcbhightmath y obtenemos:

ingrese la descripción de la imagen aquí

Como se puede ver, necesitamos ajustar la posición del cuadro, por lo que agregamos la grow to left by = <some distance>opción al highlight mathestilo:\tcbset{highlight math/.append style={grow to left by =4.25mm,}}

Respuesta3

Puedes usar 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}

El argumento de \tikzmarkiny \tikzmarkenddebe ser una cadena única.

ingrese la descripción de la imagen aquí

información relacionada