PIC маленький рисунок

PIC это маленькие рисунки в TIKZ которые можно встраивать в большие и делать свои библиотеки

Синтаксис PIC

\path … pic ⟨foreach statements⟩ [⟨options⟩] (⟨prefix⟩) at(⟨coordinate⟩) :⟨animation attribute⟩={⟨options⟩} {⟨pic type⟩} …;

  1. PIC можно объявить в \tikzset в преамбуле
  2. можно написать прямо в path в опции code
\tikzset{
  seagull/.pic={
    % Code for a "seagull". Do you see it?...
    \draw (-3mm,0) to [bend left] (0,0) to [bend left] (3mm,0);
  }
}

Вообще PIC это упрощенная запись вставки кода в path.

во втором случае напишем через pic type =:

\tikz {
  \path (0,0) pic [pic type = seagull]
        (1,0) pic                      {seagull};
}
  1. Или в третьем случае через pics/code={}:
\tikz \pic [pics/code={\draw (-3mm,0) to[bend left] (0,0)
                                      to[bend left] (3mm,0);}]
      {}; % no pic type specified

но в последнем варианте, pic не будет, а будет чистый code, который и делает сам pic

pic action

позволяет в опцияхк команде pic передать дополнительные параметры.

\tikzset{
  my pic/.pic = {
    \path [pic actions] (0,0) circle[radius=3mm];
    \draw (-3mm,-3mm) rectangle (3mm,3mm);
  }
}

\tikz \pic                      {my pic}; \space
\tikz \pic [red]                {my pic}; \space
\tikz \pic [draw]               {my pic}; \space
\tikz \pic [draw=red]           {my pic}; \space
\tikz \pic [draw, shading=ball] {my pic}; \space
\tikz \pic [fill=red!50]        {my pic};

behind path и in front of path

также как и node позволяет рисовать за основным рисунком или перед ним

foreground code=⟨code⟩ и background code=⟨code⟩

можно указать индекс слоя

foreach

принимает параметры от foreach

\tikz \pic foreach \x in {1,2,3} at (\x,0) {seagull};

every pic

настраиваем стили для pic

\begin{tikzpicture}[every pic/.style={scale=2,transform shape}]
  \pic foreach \x in {1,2,3} at (\x,0) {seagull};
\end{tikzpicture}

prefix name

я не уверен,что буду этим пользоваться, но можно добавлять префиксы к именам точек pic

pic text

будет работать как label в nodes

или его аналог в библиотеке quotes

pic [draw, "$\alpha$"] {angle};

every pic quotes — для настройки кавычек

глобальный стиль для pic

\tikzset{
  pics/my circle/.style = {
    background code = { \fill circle [radius=#1]; }
  }
}
\tikz [fill=blue!30]
  \draw (0,0) pic {my circle=2mm} -- (1,1) pic {my circle=5mm};