Usando \pgfpointanchor no caminho de fundo de uma forma de símbolo de circuito

Usando \pgfpointanchor no caminho de fundo de uma forma de símbolo de circuito

Tentei criar um símbolo de circuito para fontes gerais, conforme usado em livros didáticos de física para escolas secundárias:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{circuits.ee.IEC,shapes.gates.ee}
\makeatletter
\pgfdeclareshape{mybox}{%
  \inheritsavedanchors[from=rectangle ee]
  \inheritanchor[from=rectangle ee]{center}
  \inheritanchor[from=rectangle ee]{north}
  \inheritanchor[from=rectangle ee]{south}
  \inheritanchor[from=rectangle ee]{east}
  \inheritanchor[from=rectangle ee]{west}
  \inheritanchor[from=rectangle ee]{north east}
  \inheritanchor[from=rectangle ee]{north west}
  \inheritanchor[from=rectangle ee]{south east}
  \inheritanchor[from=rectangle ee]{south west}
  \inheritanchor[from=rectangle ee]{input}
  \inheritanchor[from=rectangle ee]{output}
  \inheritanchorborder[from=rectangle ee]
  \inheritbackgroundpath[from=rectangle ee]
\anchor{west circ center}{
\pgfpointlineattime{0.5}{\southwest}{\northeast}
\advance\pgf@x by-0.5\tikzcircuitssizeunit%
}
\anchor{east circ center}{
\pgfpointlineattime{0.5}{\southwest}{\northeast}
\advance\pgf@x by0.5\tikzcircuitssizeunit%
}
\backgroundpath{%
\pgfpathmoveto{\pgfpointanchor{\tikz@fig@name}{west}}
\pgfpathlineto{\pgfpointanchor{\tikz@fig@name}{west circ center}}
\pgfpathmoveto{\pgfpointanchor{\tikz@fig@name}{east}}
\pgfpathlineto{\pgfpointanchor{\tikz@fig@name}{east circ center}}
\pgfusepath{stroke}
\pgfpathcircle{\pgfpointanchor{\tikz@fig@name}{east circ center}}{0.25\tikzcircuitssizeunit}
\pgfpathcircle{\pgfpointanchor{\tikz@fig@name}{west circ center}}{0.25\tikzcircuitssizeunit}
\pgfusepath{stroke,fill}
}
}
\makeatother
\tikzset{
  circuit declare symbol=general source,
  set general source graphic={
     draw,fill=white,shape=mybox, circuit symbol size=width 3 height 1,
    transform shape,
    }
}
\begin{document}
\begin{tikzpicture}[circuit ee IEC]
\draw(0,0)to[general source={info={foo}}](2,0)to[resistor={info=bar}](4,0);
\draw(0,0)to[resistor](0,-3)to[make contact](4,-3)to[bulb](4,0);
\end{tikzpicture}

\end{document}

O \backgroundpathé desenhado usando comandos como \pgfpathlinetoe \pgfpointanchor, que funcionam na minha máquina. tikzele próprio define suas próprias formas derivadas usando caminhos de fundo com cálculos rígidos baseados apenas \southweste \northeasque me parecem complicados, uma vez estabelecidas as outras âncoras.

Há algum dano ou risco no meu caminho e devo mudar para tikzo caminho de 's, ou posso deixar assim?

Responder1

Resumindo, você não está errado. Depende de você se vale a pena.


O manual da PGF deixa claro que \anchor, ao contrário de \savedanchor, é umcriar sob demandaobjeto. Ou seja, a coordenada de uma âncora é calculada somente se o usuário escrever explicitamente (A.east).

Isso economiza muito tempo porque 90% das âncoras não são utilizadas e não devemos perder tempo calculando-as.


Quando TikZ está desenhando o caminho de fundo, as \anchorcoordenadas ainda não foram calculadas. Se TikZ calcula essas coordenadas apenas para o desenho, então é inútil usá-las \anchorem primeiro lugar... simplesmente faça tudo \savedanchor.

Portanto, não se trata de compatibilidade com TeX. TikZ prefere código TeX puro porque eles são mais rápidos. O autor decide gastar mais duas horas para economizar dois segundos para milhões de pessoas. Na minha opinião, deveríamos dizer que TikZ foi projetado para TeX e é compatível com LaTeX.


No seu caso, tudo depende de você. Você quer escrever códigos simples e esperar mais alguns milissegundos? Ou você prefere brincar com \pgf@x? Eu pessoalmente prefiro o primeiro.

informação relacionada