Использование \pgfpointanchor в фоновом контуре формы символа схемы

Использование \pgfpointanchor в фоновом контуре формы символа схемы

Я попытался создать условное обозначение цепи для общих источников, используемых в учебниках физики для средних школ:

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

Рисуется \backgroundpathс помощью таких команд, как \pgfpathlinetoи \pgfpointanchor, что работает на моем компьютере. tikzСам по себе определяет свои собственные производные формы, используя фоновые пути со сложными вычислениями, основанными исключительно на \southwestи , \northeasчто кажется мне громоздким, поскольку установлены другие якоря.

Есть ли какой-либо вред или риск в моем пути и стоит ли мне перейти на tikzпуть , или я могу оставить все как есть?

решение1

Короче говоря, вы не ошиблись. Стоит ли оно того, решать вам.


В руководстве PGF четко указано, что \anchor, в отличие от \savedanchor, являетсясоздать по требованиюобъект. То есть координата якоря вычисляется только в том случае, если пользователь явно пишет (A.east).

Это экономит много времени, поскольку 90% якорей вообще не используются, и нам не следует тратить время на их расчеты.


Когда ТикZ рисует фоновый путь, эти \anchorкоординаты еще не рассчитаны. Если Tiк\anchorZ вычисляет эти координаты только для чертежа, поэтому их использование в первую очередь бессмысленно ... просто сделайте все \savedanchor.

Так что дело не в совместимости с TeX. TiкZ предпочитают чистый TeX-код, потому что он быстрее. Автор решает потратить еще два часа, чтобы сэкономить миллионам людей две секунды. По моему мнению, следует сказать, что TiкZ разработан для TeX и совместим с LaTeX.


В вашем случае все зависит от вас. Хотите ли вы писать простые коды и ждать еще пару миллисекунд? Или вы предпочитаете играть с \pgf@x? Лично я предпочитаю первое.

Связанный контент