Circuitikz-Drähte überlappen Knoten

Oct 02 2020

Hinweis: Es stellt sich heraus, dass dies ein Problem mit Circuitikz 1.0 ist und in der aktuellen Version anscheinend kein Problem darstellt. Eine Problemumgehung wäre immer noch hilfreich, aber es bedeutet, dass die Frage nicht sehr dringend ist. Ich werde einen Weg finden, dies zu umgehen und später zu aktualisieren.


Ich versuche einige Diagramme zu zeichnen, die Schaltungssymbole mit anderer Notation mischen. Dazu versuche ich Circuitikz zu verwenden. Wenn ich jedoch versuche, einem Pfad ein Schaltungssymbol hinzuzufügen, überlappt der Pfad die Knoten, zwischen denen er gezeichnet wird. Hier ist ein minimales Beispiel - das einzige, was sich zwischen diesen Pfaden unterscheidet, ist die Verwendung [R]zum Zeichnen eines Widerstands.

Gibt es eine Möglichkeit, dies zu verhindern, sodass das zweite Diagramm wie das erste aussieht, außer dass ein Widerstand in der Mitte der Linie gezeichnet ist?

Ich weiß, dass ich die Knoten füllen und nach der Linie zeichnen kann und werde es tun, wenn ich muss. In meinem eigentlichen Dokument wird dies jedoch mit einer Reihe von Makros gezeichnet, und ich müsste viel ändern, um dies zu erreichen. Ich suche also nach einer einfacheren Lösung, falls es eine gibt.

Da es mit Makros gezeichnet ist, muss die Lösung automatisch sein - es wird eine Menge Arbeit für mich sein, wenn ich Dinge wie A.eastund manuell angeben muss B.west. Außerdem sind die Knoten im realen Diagramm nicht unbedingt alle direkt über / unter oder links / rechts voneinander.

Hier ist der Mwe-Code:

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

Antworten

1 Rmano Oct 02 2020 at 16:41

Ich vermute, dass die einzig praktikable Lösung darin besteht, Circuitikz zu aktualisieren ( was selbst in lokaler Form sehr einfach ist ).

Das Problem war, dass ab einer archäologischen Version (ich weiß nicht, wann es wirklich früher gitwar) der Code zum Generieren von Pfaden circuitikzgeändert wurde, sodass der Startpunkt zur Koordinate gezwungen wurde, wenn der Pfad an einem Knoten begann node.center. (Der Code wurde von anderen Entwicklern verbessert, wie Sie sehen können, wenn Sie den Links folgen, aber dieses Verhalten im Grunde beibehalten).

Meine persönliche Meinung ist, dass dies schlecht beraten war (es wurden einige Schaltkreise behoben, die falsch waren , nodesanstatt zu verwenden coordinates; aber zu dieser Zeit war ich nicht an der Entwicklung beteiligt und hatte sicherlich nicht die Fähigkeiten, dort zu sein, also ... .). Dies erzwang eine Reihe von Problemumgehungen im Code, die meiner Meinung nach nicht mehr beizubehalten waren, und führte zu Problemen an Leitungskreuzungen .

Also habe ich den Sprung gewagt und Hacks und diese Änderung vorher entfernt1.2.0 . Ihr Beispiel ist praktisch das gleiche, mit dem ich die Änderung verteidigt habe. Schauen Sie hier:https://github.com/circuitikz/circuitikz/issues/76#issuecomment-652980687::

Um Punkt 1 hier zu erklären: diesen Code

    \node [draw](A) at (0,0) {A};
    \node [draw](B) at (4,2) {B};
    \draw (A) to[R] (B); \end{tikzpicture} ```

renders as 

in 1.1.2 und früheren und als

jetzt --- Sie können leicht das alte Verhalten (wenn Sie es wirklich wollten) mit verwenden A.centerund B.centerexplizit haben, aber es ist wirklich komplex, das neue zu erhalten --- was im Rest tikzals das richtige angesehen wird.