equation環境内でtikzで塗りつぶす

equation環境内でtikzで塗りつぶす

- liki の投稿
返信数: 3
\documentclass[a4paper]{article}
\usepackage[fleqn,tbtags]{amsmath}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{angles,arrows.meta,backgrounds,calc,intersections,positioning,quotes,scopes,shapes.arrows,through}
\begin{document}
\begin{equation}
B = a + b
\end{equation}
\begin{equation}
\tikz{
\node [inner sep=0pt] {$B = a + b$};
}
\end{equation}
\begin{equation}
\tikz{
\node [inner sep=0pt] (x) {$B = a + b$};
\scoped [on background layer]
\fill [red!30,rounded corners] ($(x.south west)+(-0.3,-0.3)$) rectangle ($(x.north east)+(0.3,0.3)$);
}
\end{equation}
\end{document}

3番目の数式もそろえたいのですが、どうしたらいいでしょうか
liki への返信

Re: equation環境内でtikzで塗りつぶす

- Z. R. の投稿

塗り潰しの長方形に overlay(外見の大きさの算出に入れない)を付けると、横方向の位置が揃います。

\begin{equation}
\tikz[baseline=(x.base)]{
\node [inner sep=0pt] (x) {$B = a + b$};
\scoped [on background layer]
\fill [overlay,red!30,rounded corners] ($(x.south west)+(-0.3,-0.3)$) rectangle ($(x.north east)+(0.3,0.3)$);
}
\end{equation}

baseline=(x.base) はノードと外側(数式番号)のベースラインを合わせるために入れています。元のままだと(3番目だけでなく)2番目もベースラインがずれています。

ただこの方法だと、縦方向の大きさも無視されるので、縦に大きくはみ出してしまうという問題があります。

縦方向だけ大きさを保持する上手い方法は思いついていません。取りあえず、縦方向の境界の点を含む“何も描かないパス”を入れておけば対処できます。

\begin{equation}
\tikz[baseline=(x.base)]{
\node [inner sep=0pt] (x) {$B = a + b$};
\path ($(x.south)+(0,-0.3)$) ($(x.north)+(0,0.3)$);
\scoped [on background layer]
\fill [overlay,red!30,rounded corners] ($(x.south west)+(-0.3,-0.3)$) rectangle ($(x.north east)+(0.3,0.3)$);
}
\end{equation}
Z. R. への返信

Re: equation環境内でtikzで塗りつぶす

- liki の投稿
Z.R.さま
ありがとうございます。
overlayがここでも使えるとは勉強になります。
見た目にはtikzを使っているとはわからなくなりました。

ところで、($(x.south west)+(-0.3,-0.3)$)が気になります。何か簡潔に書けないでしょうか。

liki への返信

Re: equation環境内でtikzで塗りつぶす

- liki の投稿
天地有情で「hf-tikz --- 数式と数式部分を簡単にハイライトする方法」というのを

見つけましたが、縦方向が自動的には判定してくれないのは残念ですね。