在 tikz 中混合相对坐标和绝对坐标

在 tikz 中混合相对坐标和绝对坐标

下面的示例使用circuitikz,但问题是关于在通用中表达坐标tikz

请看下面的代码:

\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}[american]
        \draw (0,0) node[npn](Q1){};
        \draw (Q1.E) to[R=$R_E$] (0,-2.5) node[ground]{};
        \draw [gray] (Q1.E) -- ++(2,0) 
            coordinate(tmp) to[C, color=gray] (tmp |- 0, -2.5) 
            node[ground, color=gray]{};
 \end{circuitikz}
\end{document}

所有的理由都应该在(x,-2.5)。棘手的是坐标(tmp |- 0, -2.5)(提示来自这里):我想表达的是坐标的概念,即

(当前路径X,绝对-2.5)

正如您所见,我找到的解决方案是使用临时节点。有没有更简单的方法来写出该坐标?

顺便说一句,为了更简单,我的意思是直接说“移动到当前值为 x 且 y=-2.5 的坐标”,例如

\draw [gray] (Q1.E) -- ++(2,0) 
            to[C, color=gray] (\magiccurrentx, -2.5) 
            node[ground, color=gray]{};

...或者类似的东西。

上述代码片段的输出

答案1

如果您想保存代码字符,只需更改coordinate(coordinate_name)node(node_name){}并使用一个\draw语句,相对坐标,并且您可以使用名为的节点地面坐标来G找到从电容器短路和地面的命名坐标的坐标交点;更改包括节点在内的颜色使用color=your_fav_color,在我的情况下为红色。

结果:

在此处输入图片描述

梅威瑟:

\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}
\begin{document}
    \begin{tikzpicture}[american]
        \draw
        (0,0)
            node[npn](Q1){}
        (Q1.E)
            to [R=$R_E$] ++(0,-2.5)
            node[ground](G){}
        ;
        \draw[color=red]
        (Q1.E)
            to[short,*-] ++ (2,0) node(C){}
            to[C] (C |- G) 
            node[ground]{}
        ;
    \end{tikzpicture}
\end{document}

选修的:

使用第一个地面和第二个地面可用的两个节点名,并从第二个地面绘制到发射器......

\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}
\begin{document}
    \begin{tikzpicture}[american]
        \draw
        (0,0)
            node[npn](Q1){}
        (Q1.E)
            to [R=$R_E$] ++(0,-2.5)
            node[ground](G1){}
        ;
        \draw[color=red]
        (G1)++(2,0)
            node[ground](G2){}
            to[C] (G2 |- Q1.E) 
            to[short,-*] (Q1.E)
        ;
    \end{tikzpicture}
\end{document}

答案2

这是另一种选择,但我不会称其为更简单。

\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}

\begin{document}
\begin{circuitikz}[american]
        \draw (0,0) node[npn](Q1){};
        \draw (Q1.E) to[R=$R_E$] (0,-2.5) node[ground]{};
        \draw [gray] (Q1.E) -- ++(2,0) \pgfextra{\pgfgetlastxy{\xlast}{\ylast}}
            to[C, color=gray]  (\xlast,-2.5)
            node[ground, color=gray]{};
 \end{circuitikz}
\end{document}

答案3

与 John Kormylo 的答案非常相似,但没有\pgfextra(这可能会引起严重麻烦)。与 John 类似,我不确定这是否更优雅。

\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}
\tikzset{magic xy/.code n args={2}{\pgfgetlastxy{#1}{#2}}}
\begin{document}
\begin{circuitikz}[american]
        \draw (0,0) node[npn](Q1){};
        \draw (Q1.E) to[R=$R_E$] (0,-2.5) node[ground]{};
        \draw [gray] (Q1.E) -- ++(2,0) [magic xy={\magicx}{\magicy}]
            to[C, color=gray]  (\magicx,-2.5)
            node[ground, color=gray]{};
\end{circuitikz}
\end{document}

或者使用 calc。两者都能重现您的图片。

\documentclass[border=10pt]{standalone}
\usepackage{circuitikz}
\usetikzlibrary{calc}
\begin{document}
\begin{circuitikz}[american]
        \draw (0,0) node[npn](Q1){};
        \draw (Q1.E) to[R=$R_E$] (0,-2.5) node[ground]{};
        \draw[gray]  let \p1=(Q1.E) in (Q1.E)  -- ++ (2,0) 
             to[C, color=gray]  (\x1+2cm,-2.5)  node[ground, color=gray]{};
            node[ground, color=gray]{};
 \end{circuitikz}
\end{document}

相关内容