TikZ:如何在创建路径期间将当前坐标记忆到变量中

TikZ:如何在创建路径期间将当前坐标记忆到变量中

我正在使用 CircuiTikZ 创建电路。

我经常需要连接到之前使用相对坐标创建的某个点。

现在我必须提前计算这些坐标。相反,我希望能够在创建路径时创建一个“坐标变量”,并在以后使用该变量。另一种方法是提取双极终端的坐标。

所需结果

在此处输入图片描述

解决方案 1(绝对坐标)

这个解决方案是不可接受的,因为它会导致非常脆弱的代码。

\begin{circuitikz}
    \draw (0,0) to [R=$R$] ++(2,0) to [R=$R$] ++(2,0);
    \draw (0,0) -- (0,1) to [R=$R$] (4,1) -- (4,0);
\end{circuitikz}

解决方案 2(使用神秘数学)

这是我目前的解决方案。显然,它看起来很简单,在这里没什么大不了的,因为它是一个 MWE,但在我的方案中它变得相当复杂。

\newcommand{\mylength}{2}
\begin{circuitikz}
    \draw (0,0) to [R=$R$] ++(\mylength,0) to [R=$R$] ++(\mylength,0);
    \draw (0,0) -- (0,1) to [R=$R$] (\mylength*2,1) -- (\mylength*2,0);
\end{circuitikz}

首选方案 1(锚点)

不幸的是,这不起作用,因为锚点在双极子本身,而不是在终端上。(\currentcoordinatemarco 取自这里)。

\makeatletter
\newcommand\currentcoordinate{\the\tikz@lastxsaved,\the\tikz@lastysaved}
\makeatother
\begin{circuitikz}
    \draw (0,0) to [R=$R$] ++(2,0) to [R=$R$, name=MyResistor] ++(2,0);
    \draw (0,0) -- (0,1) to [R=$R$] (MyResistor.east |- \currentcoordinate) -- (MyResistor.east);
\end{circuitikz}

首选解决方案 2(在变量中记忆坐标)

这就完美了。

\begin{circuitikz}
    \draw (0,0) to [R=$R$] ++(2,0) to [R=$R$, name=MyResistor] ++(2,0) [\MyVariable=\currentcoordinate];
    \draw (0,0) -- (0,1) to [R=$R$] (\MyVariable |- \currentcoordinate) -- (\MyVariable);
\end{circuitikz}

答案1

TikZ 中已存在命名坐标。它们的语法甚至比您提议的还要好。

\documentclass{standalone}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}
    \draw (0,0) to [R=$R$] ++(2,0) to [R=$R$, name=MyResistor] ++(2,0) coordinate (lr);
    \draw (0,0) -- (0,1) coordinate (ul) to [R=$R$] (lr |- ul) -- (lr);
\end{circuitikz}
\end{document}

在此处输入图片描述

您也可以只在一条路径上绘制整个事物,而根本不使用命名坐标。

\documentclass{standalone}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}
  \draw ( 0,0) to [R=$R$]
      ++( 2,0) to [R=$R$]
      ++( 2,0) to [short]
      ++( 0,1) to [R,l_=$R$]
      ++(-4,0) to[short]
        ( 0,0) -- cycle;
\end{circuitikz}
\end{document}

相关内容