circuitikz 导线重叠节点

circuitikz 导线重叠节点

笔记:事实证明,这是 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被认为是正确的。

相关内容