![\tikzset 和 \ctikzset 之间有什么区别?](https://linux22.com/image/474775/%5Ctikzset%20%E5%92%8C%20%5Cctikzset%20%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
精美的 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}
我知道,这有点混乱,但这基本上是一个历史原因......我正在尝试尽可能减少对全球空间的污染,但有时这是相当不可能的。