如何给 \pic 命名(第二部分)

如何给 \pic 命名(第二部分)

当我在寻找解决方案时如何给 \pic 命名,我发现问题似乎只出在路径\tikztostart中的代码上to,而不出在\tikztotarget

这里有一个显示此情况的 MWE(通过用明确的坐标替换起始节点来“纠正”注释的命令)。

\documentclass[tikz,border=3mm]{standalone}
\tikzset{
  seagull/.pic={
    % Code for a "seagull". Do you see it?...
    \coordinate (-left wing) at (-3mm,0);
    \coordinate (-head) at (0,0);
    \coordinate (-right wing) at (3mm,0);
    % \draw (-left wing) to [bend left] (0,0);
    \draw (-3mm,0) to [bend left] (-head);
    % \draw (-head) to [bend left] (-right wing);
    \draw (0,0) to [bend left] (-right wing);
  }
}
\begin{document}
  \begin{tikzpicture}%\small\sffamily
    \pic (Emma) {seagull};
    \pic (Alexandra) at (0,1) {seagull};
    \draw (Emma-left wing) -- (Alexandra-right wing);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

我的问题是:通过观察\tikztostart和之间的差异,\tikztotarget我们能想象出解决办法吗?

笔记 :我并不是在寻找解决方法,因为在原始问题中我们已经可以找到:使用name prefix ..,或者使用 替换 用明确的坐标命名let ...

答案1

这不是一个完整的答案,而是告诉你,我认为这与……无关\tikztostart\tikztotarget相反,我同意@cfr@符号 1@percusse。更详细地说,我认为您的代码能够工作只是巧合,它之所以能工作只是因为解析从 开始\tikztostart

唯一非常温和的改进是@cfr 的出色解决方法就是你不再需要输入seagull=

\documentclass[a4paper]{ltxdoc}
\usepackage{tikz}
\begin{document}
\tikzset{ 
  seagull/.pic={
    \coordinate (-left wing) at (-3mm,0);
    \coordinate (-head)      at (0,0);
    \coordinate (-right wing) at (3mm,0);
    \xdef\myname{\pgfkeysvalueof{/tikz/name prefix}}
    \draw[name prefix=]  (\myname-left wing) to [bend left] (\myname-head) to [bend left] (\myname-right wing);
  }
}

\tikz {
  \pic (Emma)               {seagull};
  \pic (Alexandra) at (0,1) {seagull};

  \draw (Emma-left wing) -- (Alexandra-right wing);
}

\end{document}

我也认为这没有必要。特别是,我从 pgfmanual 复制了序言,即加载了所有库,然后仅使用第 254 页底部的示例创建了一个文档。但失败了。但是 pgfmanual 确实可以编译,不是吗?

同样可疑的是(0,0)

\draw (-left wing) to [bend left] (0,0) (-head) to [bend left] (-right wing);

在手册中。为什么要添加它?

相关内容