以下是我现在拥有的:
\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
及其默认半径完美地“覆盖”了蓝色)。如果有更好的方法,请告诉我。
从那里,我想得到一些期望的输出:
- 我希望
tikz
代码中的行从圆的边缘开始,到圆的另一边缘结束,就像电线从端子circuitikz
开始和结束一样ocirc
,而不是从端子开始和结束里面圆圈。 - 我意识到 中的箭头形状与 中的箭头形状
tikz
并不完全相同circuitikz
(实际上,从我的理解来看, 被flowarrow
定义为节点,而不是特定的箭头形状)。有没有办法获得tikz
与 中的箭头形状相同的箭头形状circuitikz
?如果没有,那也没关系。 - 我意识到 中的箭头
tikz
位于中间位置 (0.5) 并不一定像 的箭头那样位于中间位置circuitikz
。有没有办法让 中的箭头与tikz
中的位置相匹配circuitikz
?
这是这circuitikz
,因为我想除了使用曲线作为电线的曲线特征之外,还利用曲线(或者换句话说,图中的方向边) 。
答案1
这是一个可能的混合解决方案(另见我对你上一个问题的回答)。 基本上:
对于圆圈,请使用
circuitikz
(ocirc
) 提供的形状,该形状具有正确的边框锚点。如果你使用它并使用节点名称线条将从正确的边界开始,而不是坐标。
箭头并不是真正的箭头
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}