笔记:事实证明,这是 circuitikz 1.0 的问题,显然不是当前版本的问题。解决方法仍然会有所帮助,但这意味着问题不是很紧急 - 我会找到一种方法暂时解决这个问题,然后稍后再更新。
我正在尝试绘制一些将电路符号与其他符号混合的图表。为此,我尝试使用 circuitikz。但是,当我尝试将电路符号添加到路径时,它似乎会导致路径与其绘制的节点重叠。这是一个最小示例 - 这些路径之间唯一的不同之处在于使用[R]
绘制电阻器。
有什么方法可以防止这种情况发生,以便第二张图看起来像第一张,只是在线中间画了一个电阻?
我知道我可以填充节点并将它们绘制在线后,如果有必要的话我会这么做。但是,在我的实际文档中,这是用一系列宏绘制的,我必须进行大量更改才能实现这一点。所以我正在寻找一种更简单的解决方案(如果存在的话)。
因为它是用宏绘制的,所以解决方案需要自动化——如果我需要手动指定诸如A.east
和 之类的内容,那对我来说将是一项艰巨的工作B.west
。此外,在实际图中,节点不一定都位于彼此的正上方/下方或左侧/右侧。
这是 mwe 代码:
\documentclass{article}
\usepackage{circuitikz}
% make the resistor a suitable size
\ctikzset{bipoles/resistor/height=0.1}
\ctikzset{bipoles/resistor/width=0.3}
\begin{document}
% two squares with a line between them
\begin{tikzpicture}
\node at (0,0) [draw] (A) {};
\node at (1,0) [draw] (B) {};
\draw (A) to (B);
\end{tikzpicture}
% the same but with a resistor drawn on the line
\begin{tikzpicture}
\node at (0,0) [draw] (A) {};
\node at (1,0) [draw] (B) {};
\draw (A) to[R] (B);
\end{tikzpicture}
\end{document}
答案1
我怀疑唯一可行的解决方案是升级 circuitikz (这真的很容易,即使是在本地形式)。
问题是,从某个考古版本开始(不知道什么时候,实际上,是在git
时代之前),生成路径的代码circuitikz
被更改了,因此,如果路径从一个节点开始,则起点被强制到协调 node.center
。(其他开发人员对代码进行了改进,如您在链接中看到的那样,但基本上保留了该行为)。
我个人认为这是不明智的(它修复了几个电路,错误的,使用nodes
而不是coordinates
;但那时我还没有参与开发,当然也没有相应的技能,所以……)。这迫使我在代码中采用一系列变通方法,在我看来,这些方法变得无法维护,并导致了问题在线路交叉口。
所以我决定尝试一下并删除了黑客和之前的改变1.2.0
。您举的例子实际上和我用来捍卫变革的例子相同,请看这里:https://github.com/circuitikz/circuitikz/issues/76#issuecomment-652980687:
这里解释一下第 1 点:此代码
\node [draw](A) at (0,0) {A}; \node [draw](B) at (4,2) {B}; \draw (A) to[R] (B); \end{tikzpicture} ``` renders as
在 1.1.2 及之前的版本中
A.center
现在 --- 您可以通过明确使用和轻松地获得旧的行为(如果您真的想要它)B.center
,但获得新的行为确实很复杂 --- 在其余部分中tikz
被认为是正确的。