新的 circuitikz 来了!还有第一个问题

新的 circuitikz 来了!还有第一个问题

我昨天更新了我的 MikTeX,并获得了新版本的软件包circuitikz!我立即做了简短检查,看看我的旧circuitikz图片是否能像旧软件包版本一样工作。到目前为止,除了一个测试之外,所有测试都给出了相同的结果。例外情况如下:

\documentclass[border=3mm]{standalone}
\usepackage{circuitikz}
\ctikzset{bipoles/diode/height=0.25,bipoles/diode/width=0.25}

\begin{document}
    \begin{circuitikz}[scale=1.25],
\draw
(0,0)       coordinate (T1+)
            node [nigbt,anchor=S,
                  rotate=-90,color=gray]    (igbt2) {}      % IGBT as node, in gray color
(T1+)       to [short,*-]               ++  (0,-0.5) coordinate (D2)
            to [Do,a=D,color=red]           (D2 -| igbt2.D) % diode, in red color
            to [short,-*]                   (igbt2.D)
            to [Do,a=D,color=blue]       ++  (1,0)          % diode, in blue color
            ;
    \end{circuitikz}
\end{document}

在此处输入图片描述

只有在旋转 igbt 元件和设置二极管标签时,红色二极管标签才会错位a=D。如果我将其替换为l=D,则“D”在二极管另一侧的位置是正确的。使用旧包版本,它可以正常工作。

这里有没有人有类似的经历?我是不是漏掉了什么?

答案1

此问题已在 0.9.1 版(未发布)中得到修复,该版本将在等待错误报告一段时间后发布。在此期间,您可以使用在https://circuitikz.github.io/circuitikz/

上一个答案

思考我有一个答案。似乎有时路径方向没有规范化,所以我得到了错误的锚点位置。

试试这个:编辑文件pgfcirclabel.tex。转到第 104 行,你应该看到

...
\ifnum \pgf@circ@temp < 0
        \pgfmathadd{\pgf@circ@labanc}{180}
        \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
\fi
\ifpgf@circuit@bipole@inverted
...

...在\fi第 104 行之后插入以下内容:

\pgfmathmod{\pgf@circ@labanc}{360}
\edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}

然后重试。现在它似乎对我有用,并且补丁在逻辑上是正确的。你能检查一下吗?

原始答案和解决方法

这确实令人费解,我需要深入研究pgfcircpath.texpgfcirclabel.tex代码才能找到发生了什么。请注意,如果我将绘图拆分为如下形式:

\documentclass[border=3mm]{standalone}
\usepackage{circuitikz}
\ctikzset{bipoles/diode/height=0.25,bipoles/diode/width=0.25}

\begin{document}
\begin{circuitikz}[scale=1.25],
    \draw
    (0,0)       coordinate (T1+)
    node [nigbt,anchor=S, rotate=-90,color=gray]    (igbt2) {}      % IGBT as node, in gray color
    (T1+)       to [short,*-]               ++  (0,-0.5) coordinate (D2);
    \draw
    (D2)        to [Do,a=D,color=red]            (D2 -| igbt2.D) % diode, in red color 
    to [short,-*]                   (igbt2.D)
    to [Do,a=D,color=blue]       ++  (1,0)          % diode, in blue color
    ;
\end{circuitikz}
\end{document}

(应该完全等价)结果是

在此处输入图片描述

...我预计这里会有一些困难的调试... :-(

相关内容