Verwenden von \pgfpointanchor im Hintergrundpfad einer Schaltkreissymbolform

Verwenden von \pgfpointanchor im Hintergrundpfad einer Schaltkreissymbolform

Ich habe versucht, ein Schaltsymbol für allgemeine Quellen zu erstellen, wie es in Physiklehrbüchern für Gymnasien verwendet wird:

\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}

wird \backgroundpathmit Befehlen wie \pgfpathlinetound gezeichnet \pgfpointanchor, was auf meinem Computer funktioniert. tikzdefiniert selbst seine eigenen abgeleiteten Formen mithilfe von Hintergrundpfaden mit schwierigen Berechnungen, die ausschließlich auf \southwestund basieren \northeas, was mir umständlich erscheint, sobald die anderen Anker festgelegt sind.

Ist mein Weg schädlich oder birgt er Risiken und sollte ich zu tikz's Weg wechseln oder kann ich es so lassen?

Antwort1

Kurz gesagt, Sie liegen nicht falsch. Es liegt an Ihnen, ob es sich lohnt.


Im PGF-Handbuch wird deutlich gemacht \anchor, dass im Gegensatz zu \savedanchoreinAuf Anfrage erstellenObjekt. Das heißt, die Koordinate eines Ankers wird nur berechnet, wenn der Benutzer explizit schreibt (A.east).

Dies spart viel Zeit, da 90 % der Anker überhaupt nicht verwendet werden und wir keine Zeit mit deren Berechnung verschwenden sollten.


Wenn TikZ zeichnet den Hintergrundpfad, die \anchorKoordinaten dieser sind noch nicht berechnet. Wenn TikZ berechnet diese Koordinaten nur für die Zeichnung, dann ist es sinnlos, sie \anchorüberhaupt zu verwenden ... machen Sie einfach alles \savedanchor.

Es geht also nicht um TeX-Kompatibilität. TikZ bevorzugt reinen TeX-Code, weil dieser schneller ist. Der Autor beschließt, zwei weitere Stunden zu investieren, um Millionen von Menschen zwei Sekunden zu ersparen. Meiner Meinung nach sollten wir sagen, dass TikZ wurde für TeX entwickelt und ist mit LaTeX kompatibel.


In Ihrem Fall liegt es ganz bei Ihnen. Möchten Sie einfache Codes schreiben und noch ein paar Millisekunden warten? Oder spielen Sie lieber mit \pgf@x? Ich persönlich bevorzuge Ersteres.

verwandte Informationen