我想使用 Tikz 注释方程中的某些项。我尝试了以下操作
\documentclass{article}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\newcommand{\tikzbox}[2]{\tikz[anchor=base, baseline, #1]{\node[rectangle, rounded corners, #1] {#2};}}
\[
a + b + c
\]
\[
\tikzbox{pin=-70:{first term}}{$a$} + b + c
\]
\end{document}
产生
如您所见,图钉中的文本改变了边界框并在项 $a$ 周围引入了间距。是否可以修改此示例,使图钉“不计算在内”,并且 $a$ 周围的间距与第一个等式中的相同?
答案1
tikzoverlay
选项使得 tikz 代码不占用空间:
\newcommand{\tikzbox}[2]{%
\tikz[overlay,anchor=base, baseline, #1]{% added overlay
\node[rectangle, rounded corners, #1] {#2};
}%
}
但是,这也会将节点的内容排除在边界框之外。要仅排除引脚,您可以手动将 bb 设置为节点的大小:
\tikz[anchor=base, baseline, #1]{
\node[rectangle, rounded corners, inner sep=0pt, outer sep=0pt, #1] (mynode) {#2};
\pgfresetboundingbox
\path [use as bounding box] (mynode.north west) -- (mynode.south east);
}%
}
这里我还将 sep 设置为零,以使节点的大小紧贴内容。因此,您可能需要缩短 pin 的边缘以获得更好的效果。
\documentclass{article}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\newcommand{\tikzbox}[2]{%
\tikz[anchor=base, baseline, #1]{
\node[rectangle, rounded corners, inner sep=0pt, outer sep=0pt, #1] (mynode) {#2};
\pgfresetboundingbox
\path [use as bounding box] (mynode.north west) -- (mynode.south east);
}%
}
\[
a + b + c
\]
\[
\tikzbox{pin={[pin edge={shorten <=1mm}]-70:{first term}}}{$a$} + b + c
\]
\end{document}
请注意tikzmark
包为这种类型的注释提供了灵活的支持,并且可能比自定义宏更可靠。
答案2
您可以重置边界框。您还应该将内部分离设置为零:
\documentclass{article}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\newcommand{\tikzbox}[2]{\tikz[anchor=base, baseline, #1]
{\node[rectangle, rounded corners, #1,name=mynode,inner sep=0pt] {#2};
\pgfresetboundingbox
\path[use as bounding box] (mynode.south west) rectangle (mynode.north east)}}
\[
a + b + c
\]
\[
\tikzbox{pin=-70:{first term}}{$a$} + b + c
\]
blblblb this is the next line blblb
\end{document}