Usando \tcbhighmath para apenas uma equação alinhada no ambiente align*?

Usando \tcbhighmath para apenas uma equação alinhada no ambiente align*?

Estou tentando descobrir como colocar uma caixa estilizada usando \tcbhighmathapenas uma equação em um conjunto dentro do align*ambiente. Então, por exemplo:

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

Eu só quero uma caixa ao redor da última equação: z = 3 + x.

Responder1

Você não pode estender uma caixa aligndiretamente por duas colunas, mas aqui está uma solução alternativa para obter o resultado desejado.

alignusa duas passagens para compor as equações: a primeira mede as alturas/larguras de todos os componentes, a segunda passagem realmente as compõe. Definimos um novo comando \mathbox{...&...}que coleta as partes esquerda e direita da equação. Na passagem de medição ( \ifmeasuring@é verdadeiro), normalmente definimos o texto da coluna para obter as larguras corretas.

A segunda passagem define uma caixa de largura zero \tcbhighmathcom o texto das colunas, adicionalmente deslocada para a esquerda pela soma das larguras do texto da coluna esquerda mais vários parâmetros do estilo da caixa (margem interna, largura da regra etc.), de modo que o sinal de igual fique alinhado com os que estão fora da caixa. O resultado é basicamente uma coluna direita vazia com a caixa na coluna esquerda sobrepondo ambas as colunas.

Código de exemplo 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}

saídas

insira a descrição da imagem aqui

Responder2

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

insira a descrição da imagem aqui

Alguma explicação

O mathtoolspacote fornece o \Aboxedcomando que pode ser usado assim:

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

para produzir algo assim:

insira a descrição da imagem aqui

De acordo com o mathtoolsmanual: internally \Aboxed does use \boxed.

Para permitir que o \Aboxedcomando use a \tcbhighmathcaixa, redefinimos o \boxedcomando \let\boxed\tcbhightmath e obtemos:

insira a descrição da imagem aqui

Como pode ser visto precisamos ajustar a posição da caixa então adicionamos a grow to left by = <some distance>opção ao highlight mathestilo:\tcbset{highlight math/.append style={grow to left by =4.25mm,}}

Responder3

Você pode 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}

O argumento para \tikzmarkine \tikzmarkenddeve ser uma string única.

insira a descrição da imagem aqui

informação relacionada