Circuitikz 的示波器旋转错误

Circuitikz 的示波器旋转错误

有人知道如何同时旋转示波器和信号方波吗?

这是我目前所拥有的:

在此处输入图片描述

可以看到,信号并没有随着示波器旋转,这是我写的:

\documentclass[a4paper,12pt]{article}

\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[]{circuitikzgit}

\begin{document}

\begin{center}
    \begin{circuitikz}[rotate=45, transform shape]
    \draw (0,0)node[oscopeshape](osc1){OC 1};
    \end{circuitikz}
\end{center}    

\end{document}

我曾经尝试使用\scope并从节点线旋转,但结果是一样的,我认为这是一个错误。

另外,我使用了最新版本的 CircuiTikz,这是你可以得到它的地方

答案1

众所周知,必须transform canvas非常小心地使用,John Kormylo 提醒我们它的一些副作用。这也完全没有必要。这里有一个始终有效的技巧:使用\savebox

\documentclass[a4paper,12pt]{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[]{circuitikzgit}
\newsavebox\oscopeshape
\sbox\oscopeshape{\tikz{\node[oscopeshape]{};}}
\begin{document}

\begin{center}
    \begin{circuitikz}[rotate=45, transform shape]
    \draw (0,0)node[label=above:OC 1](osc1){\usebox\oscopeshape};
    \end{circuitikz}
\end{center}    
\end{document}

在此处输入图片描述

PS“总是”是指观看者不做的事情。shadingspatterns是无法用此技巧进行转换的例子。

答案2

我怀疑这不是一个 bug,它更像是遗漏了(不寻常的)功能需求(到目前为止,我还没有看到带有旋转仪器的电气/电子方案)。如果您喜欢旋转 ti,您应该旋转画布:

\documentclass[a4paper,12pt]{article}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[]{circuitikz}

\begin{document}
\begin{center}
    \begin{circuitikz}
    \begin{scope}[]
    \draw (0,0)node[oscopeshape,transform canvas={rotate=45}](osc1){OC 1};
    \end{scope}
    \end{circuitikz}
\end{center}
\end{document}

在此处输入图片描述

然而,这可能会给整体方案设计带来意想不到的问题……

答案3

这不是答案,只是显示了画布变换的奇怪效果。

\documentclass{standalone}
\usepackage[]{circuitikz}

\begin{document}
    \begin{circuitikz}
    \path (0,1);% for bounding box
    \begin{scope}[transform canvas={rotate=45}]
      \draw (0,0) node[oscopeshape](osc1){OC 1};
      \draw (osc1.in 1) -- ++(0,-1);
      \draw (osc1.in 2) -- ++(0,-1);
      \draw (osc1.left) -- ++(-1,0);
      \draw (osc1.right) -- ++(1,0);
    \end{scope}
    \draw[red] (osc1.in 1) -- ++(0,-1);
    \draw[red] (osc1.in 2) -- ++(0,-1);
    \draw[red] (osc1.left) -- ++(-1,0);
    \draw[red] (osc1.right) -- ++(1,0);
    \end{circuitikz}
\end{document}

演示


唉,[记住图片] 也不能处理旋转。

\documentclass{standalone}
\usepackage[]{circuitikz}

\newsavebox\oscopeshape
\sbox\oscopeshape{\tikz[remember picture,overlay]{\node[oscopeshape](osc1){OC 1};}}

\begin{document}
  \begin{circuitikz}[remember picture]
    \path (0,1);% for bounding box
    \draw (0,0)node[rotate=45]{\usebox\oscopeshape};
    \draw[red] (0,0) -- (osc1.center);
    \draw (osc1.in 1) -- ++(0,-1);
    \draw (osc1.in 2) -- ++(0,-1);
    \draw (osc1.left) -- ++(-1,0);
    \draw (osc1.right) -- ++(1,0);
  \end{circuitikz}
\end{document}

答案4

这很简单,你只是想让旋转的元素整体旋转,就像我的情况一样,呵呵。

只需使用该包\rotating并将您的 CircuiTikz 作为图形包含在其中,仅此而已。

相关内容