
Я попытался создать условное обозначение цепи для общих источников, используемых в учебниках физики для средних школ:
\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к\anchor
Z вычисляет эти координаты только для чертежа, поэтому их использование в первую очередь бессмысленно ... просто сделайте все \savedanchor
.
Так что дело не в совместимости с TeX. TiкZ предпочитают чистый TeX-код, потому что он быстрее. Автор решает потратить еще два часа, чтобы сэкономить миллионам людей две секунды. По моему мнению, следует сказать, что TiкZ разработан для TeX и совместим с LaTeX.
В вашем случае все зависит от вас. Хотите ли вы писать простые коды и ждать еще пару миллисекунд? Или вы предпочитаете играть с \pgf@x
? Лично я предпочитаю первое.