TikZ 和 CircuiTikZ 图形差异及建议的解决方案

TikZ 和 CircuiTikZ 图形差异及建议的解决方案

以下是我现在拥有的:

\documentclass[12pt]{article}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage[margin=1in]{geometry}
\usepackage[american,siunitx]{circuitikz}
\usepackage{tikz}
%\pgfplotsset{compat=1.18}
\usetikzlibrary{shapes,arrows,automata, positioning}
\usetikzlibrary{decorations.markings}
\tikzset{positionarrow/.style n args={2}{
        postaction = decorate,
        decoration={markings,
            mark= at position #1 with {\arrow{#2}} ,
        },
        postaction={decorate}
    }
}
\begin{document}
    \begin{center}
        \begin{center}
            \begin{circuitikz}
                \draw [blue](0,5) circle[radius=1.5 pt];
                \draw[blue, positionarrow={0.5}{Stealth[inset=0pt]}](0,5) to (3,5);
                \draw [blue](3,5) circle[radius=1.5 pt];
                \draw(0,4) to[short, i>^=$\hphantom{a}$, o-o](3,4);
                \draw [blue](0,3) circle[radius=1.5 pt];
                \draw[blue, positionarrow={0.5}{Stealth[inset=0pt]}](0,3) to (3,3);
                \draw [blue](3,3) circle[radius=1.5 pt];
                \draw(0,3) to[short, i>^=$\hphantom{a}$, o-o](3,3);
            \end{circuitikz}
        \end{center}
    \end{center}
\end{document}

输出:

在此处输入图片描述

我似乎设法让圆的半径与此相匹配ocirc(如下图所示,黑色ocirc及其默认半径完美地“覆盖”了蓝色)。如果有更好的方法,请告诉我。

从那里,我想得到一些期望的输出:

  1. 我希望tikz代码中的行从圆的边缘开始,到圆的另一边缘结束,就像电线从端子circuitikz开始和结束一样ocirc,而不是从端子开始和结束里面圆圈。
  2. 我意识到 中的箭头形状与 中的箭头形状tikz并不完全相同circuitikz(实际上,从我的理解来看, 被flowarrow定义为节点,而不是特定的箭头形状)。有没有办法获得tikz与 中的箭头形状相同的箭头形状circuitikz?如果没有,那也没关系。
  3. 我意识到 中的箭头tikz位于中间位置 (0.5) 并不一定像 的箭头那样位于中间位置circuitikz。有没有办法让 中的箭头与tikz中的位置相匹配circuitikz

这是circuitikz,因为我想除了使用曲线作为电线的曲线特征之外,还利用曲线(或者换句话说,图中的方向边) 。

答案1

这是一个可能的混合解决方案(另见我对你上一个问题的回答)。 基本上:

  1. 对于圆圈,请使用circuitikz( ocirc) 提供的形状,该形状具有正确的边框锚点。

  2. 如果你使用它并使用节点名称线条将从正确的边界开始,而不是坐标。

  3. 箭头并不是真正的箭头circuitikz;它们是形状currarrow(请参阅当前手册中的第 4.11 节)。因此,您需要使用显示的技巧这里如果您确实想要相同的位置,请对位置进行一些调整。

\documentclass[12pt]{article}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage[margin=1in]{geometry}
\usepackage[american,siunitx]{circuitikz}
\usepackage{tikz}
%\pgfplotsset{compat=1.18}
\usetikzlibrary{shapes,arrows,automata, positioning}
\usetikzlibrary{decorations.markings}
% get the circuitikz arrow size, define a tip https://tex.stackexchange.com/a/549354/38080
\makeatletter
    \newdimen\ctikzAL\newdimen\ctikzAW
    \pgfmathsetlength{\ctikzAL}{ 1.7 * \pgf@circ@Rlen / \ctikzvalof{current arrow scale} + 2*\pgflinewidth}
    \pgfmathsetlength{\ctikzAW}{ 1.6 * \pgf@circ@Rlen / \ctikzvalof{current arrow scale} + 2*\pgflinewidth}
    \tikzset{c>/.tip={Triangle[length=\the\ctikzAL, width=\the\ctikzAW]}}
\makeatother
% See https://tex.stackexchange.com/a/39282/38080
\usetikzlibrary{decorations.markings}
\tikzset{->-/.style={decoration={
  markings,
  % circuitikz arrows are not arrows, they are shapes centered in the path.
  % the 0.525 simulates the same position, if needed; adjust it
  mark=at position 0.525 with {\arrow{c>}}},postaction={decorate}}}
\begin{document}
    \begin{center}
            \begin{circuitikz}
                \draw [blue](0,5) node[ocirc](A){} (3, 5) node[ocirc](B){};
                \draw [blue, ->-](A) -- (B);
                \draw(0,4) to[short, i>^=$\hphantom{a}$, o-o](3,4);
                \draw [blue](0,3) node[ocirc](C){} (3,3) node[ocirc](D){};
                \draw [blue, ->-](C) to (D);
                \draw(0,3) to[short, i>^=$\hphantom{a}$, o-o](3,3);
            \end{circuitikz}
    \end{center}
\end{document}

在此处输入图片描述

答案2

如果我理解正确的话,那么您正在寻找以下内容:

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                decorations.markings}
\tikzset{decoration={markings,
                     mark=at position 0.5 with {\arrow{Triangle}} ,
                    },
        }

\begin{document}
    \begin{tikzpicture}
\draw[{Circle[open]}-{Circle[open]}, 
      postaction={decorate}]   (0,0) -- (3,0);
\draw[red]     (0,-0.2) -- (3,-0.2);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容