为什么在内联 tikz 中使用 arrows.meta 箭头时边界框没有更新?

为什么在内联 tikz 中使用 arrows.meta 箭头时边界框没有更新?

我正在使用内联tikz调用在我的文档中创建注释。

我正在使用(下面定义的)\Curve宏来注释图形图(例如使用创建的pgfplots)和\Curvee宏来注释可以弯曲的更一般的图形,因此使用to path而不是。我设法使用选项和一些属性来-- path对齐调用的内容。\tikzbaselinecurrent bounding box

但是,当使用bend ...in=...,out=...选项时to path,边界框内会留有空白。-stealth使用箭头时,边界框中也会出现一些差异。请注意,-Stealth箭头可以很好地更新边界框。

这个帖子据说arrows.meta库的箭头应该更新边界框(而以前的箭头不能)。

所以我实际上有两个问题:

  • 为什么stealth箭头不能正确更新边界框?(我以为它们只是-Stealth具有一些默认设置的箭头,但可能不是)
  • to path为什么带有选项的边界框中有一个空白区域in=...,out=...?(可能是因为一些构造节点,但如果有人可以解释......)
\documentclass{article}
\usepackage{tikz}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{times}
\usepackage{mathptmx}
\usetikzlibrary{arrows.meta,calc}
\usepackage{xparse}

\DeclareDocumentCommand\Curve{ m O{} }{%
    (%
    \tikz[baseline=(ref.base)] {%
        \draw[#1] plot coordinates {(0,0)} -- plot[#2] coordinates {(2mm,0)} -- plot coordinates {(4mm,0)};%
        \draw[] (current bounding box.south west) rectangle (current bounding box.north east);
        \coordinate[yshift=-\the\dimexpr\fontdimen22\textfont2] (ref) at (current bounding box.center);
    }%
    )%
}
\DeclareDocumentCommand\Curvee{ m O{} }{%
    (%
    \tikz[baseline=(ref.base)] {%
        \draw[#1] (0,0) to[#2] (4mm,0mm);%
        \draw[] (current bounding box.south west) rectangle (current bounding box.north east);
        \coordinate[yshift=-\the\dimexpr\fontdimen22\textfont2] (ref) at (current bounding box.center);
    }%
    )%
}

\begin{document}
$1$
\Curve{red,-stealth}
\Curve{red,->}
\Curvee{red,-stealth,bend left}
\Curvee{red,->,bend left}
\Curvee{red,-stealth}[out=-60,in=150]
\Curvee{red,-Stealth}[out=-60,in=150]
\end{document}

在此处输入图片描述

答案1

如何获取贝塞尔曲线的紧密边界框是重复的,正如 egreg 提到的,在 Ti贝塞尔曲线的边界框 Z 被视为包含控制点的最小框。一般来说,这会产生一个过于宽大的边界框。如果您下载实验tikzlibrarybbox.code.tex来自的图书馆这里(有解释这里),即可解决箭头的问题arrows.meta

\documentclass{article}
\usepackage{tikz}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{times}
\usepackage{mathptmx}
\usetikzlibrary{arrows.meta,calc,bending,bbox}
\newcommand\Curvee[2][]{%
    (%
    \tikz[baseline=(ref.base)] {%
     \begin{scope}[bezier bounding box]
        \draw[#2] (0,0) to[#1] (4mm,0mm);%
        \draw[] (current bounding box.south west) rectangle (current bounding box.north east);
        \coordinate[yshift=-\the\dimexpr\fontdimen22\textfont2] (ref) at (current bounding box.center);
      \end{scope}   
    }%
    )%
}

\begin{document}
$1$
\Curvee[bend left]{red,-Stealth}
\Curvee[out=-60,in=150]{red,-Stealth}
\Curvee[out=-60,in=150]{red,-Stealth}

$2$
\Curvee[bend left]{red,-{Stealth[bend]}}
\Curvee[out=-60,in=150]{red,-{Stealth[bend]}}
\Curvee[out=-60,in=150]{red,-{Stealth[bend]}}
\end{document}

在此处输入图片描述

我还加载了bending库并弯曲了最后三个箭头。请注意,bending当您仅加载库时,即使您不添加bend相应的箭头选项,箭头的头部也会得到改善。

相关内容