\tikzset 和 \ctikzset 之间有什么区别?

\tikzset 和 \ctikzset 之间有什么区别?

精美的 Circuitikz 手册展示了大量使用 \ctikzset 的例子来指定许多事物的样式(我的 PDF 搜索显示有 87 页包含 \ctikzset)。

但是,第 22 页让我很困惑。在那里,\ctikzset 用于选择 ieee 样式逻辑端口和比例因子。

后面两段中,使用 \tikzset(无 c)来设计示例中的人字拖鞋样式。

我一直遵循一个松散的原则,即在 Circuitikz 中时使用 \ctikzset,不在 Circuitikz 中时仅使用 \tikzset。但是,看起来这里还有其他事情在起作用,因为 \tikzset 仍然有效。我错过了什么?

您能解释一下 \ctikzset 和 \tikzset 之间的区别吗?以及我什么时候应该使用其中一个?

答案1

区别很容易解释,而且使用率也较低。历史设定等有点“混乱”……

基本上,\ctikzset{key=value}与 相同\tikzset{/tikz/circuitikz/key=value}。它访问 的私有命名空间circuitikz。原则上,来自 的所有键circuitikz都应位于该命名空间中;但这有时会造成一点可用性问题。

看看这段代码:

\documentclass[border=10pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage[siunitx, RPvoltages]{circuitikz}
\begin{document}
\begin{tikzpicture}[]
    \draw (0,2) to[pR] ++(2,0) node[potentiometershape, right](){};
    \draw (0,1) to[pR, wiper pos=0.9] ++(2,0) node[potentiometershape, right](){};
    % this fails... with an error
    \draw (0,0) to[pR, wiper pos=0.9] ++(2,0) node[potentiometershape, right, wiper pos=0.9](){};
    % and this works
    \draw (0,-1) to[pR, wiper pos=0.9] ++(2,0) node[potentiometershape, right, circuitikz/wiper pos=0.9](){};
\end{tikzpicture}
\end{document}

事实上,wiper pos仅在命名空间中定义,circuitikz这迫使我们在节点规范中使用它时使用完整前缀。对于大多数情况来说,这不是问题,例如,在这种情况下,wiper pos通常在组件中使用to,可以添加路径以自动搜索私有命名空间。

但对于某些事情来说,这会很尴尬。例如,许多组件基本上是一个带有一组参数的基本组件,并且直接调用组件node[name]或将选项直接放在[]环境的一部分中很方便:在这种情况下,键通常会“溢出”到全局范围中,这就是一个\tikzset。因此,例如ieee ports也定义为

\tikzset{ieee ports/.style = {/tikz/circuitikz/logic ports = ieee}}

所以你可以使用

\begin{tikzpicture}[ieee ports]
...
\end{tikzpicure}

我知道,这有点混乱,但这基本上是一个历史原因......我正在尝试尽可能减少对全球空间的污染,但有时这是相当不可能的。

相关内容