
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 \pgfpathlineto
e \pgfpointanchor
, que funcionam na minha máquina. tikz
ele próprio define suas próprias formas derivadas usando caminhos de fundo com cálculos rígidos baseados apenas \southwest
e \northeas
que me parecem complicados, uma vez estabelecidas as outras âncoras.
Há algum dano ou risco no meu caminho e devo mudar para tikz
o 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 \anchor
coordenadas ainda não foram calculadas. Se TikZ calcula essas coordenadas apenas para o desenho, então é inútil usá-las \anchor
em 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.