使用一个密钥设置另一个密钥(在 pgfkeys 中)

使用一个密钥设置另一个密钥(在 pgfkeys 中)

当我制作 TikZ 图片时,我有时会使用绝对坐标,当我这样做时,我发现Martin Scharrer 的showgridTikZ 库非常方便。(它会将“方格纸”放在我的画布下面,并在边缘标注数字。)

下面是一些代码来说明这一点。(请注意,showgrid必须从以下位置下载该库马丁的网站

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{showgrid} % http://latex.scharrer-online.de/general/wiki/showgrid

\begin{document}

\begin{tikzpicture}[show grid=all]
    \draw (3,2) -- +(45:3);
\end{tikzpicture}

\end{document}

我想要的是拥有一个带有选项的自定义环境draw guidesdraw guides设置后,将绘制各种调试辅助工具(例如节点名称),并将show grid=all其激活。

下面的代码展示了我尝试这样做。它不起作用,我认为问题可能与密钥show grid驻留在/tikz/目录中有关,但draw guides驻留在/wickerson/目录中。我曾尝试cd在适当的时候进入该目录,但似乎没有帮助。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{showgrid} % http://latex.scharrer-online.de/general/wiki/showgrid

\pgfkeys{/wickerson/.cd,
  draw guides/.code = {% 
    % here do some other stuff, like enabling 
    % the printing of node names
    \pgfkeys{/tikz/.cd,show grid=all}}  
}

\newenvironment{wickersonpicture}[1][]{%
  \pgfkeys{/wickerson/.cd,#1}
  % do some stuff
  \begin{tikzpicture}
}{%
  \end{tikzpicture}
}

\begin{document}

\begin{wickersonpicture}[draw guides]
    \draw (3,2) -- +(45:3);
\end{wickersonpicture}

\end{document}

答案1

正如您之前的一个问题中所讨论的那样,沿着家谱往上走并不是那么简单,因此,pgfkeys在筛选属于不同密钥家族的不同密钥时,我们需要格外小心。

如果您正在为 TikZ 编写包,请始终为高级用户留出一个钩子,以便他们直接调整节点、坐标或 tikzpicture 本身。例如;

\documentclass[tikz]{standalone}
\usetikzlibrary{showgrid}

\pgfkeys{/wickerson/tikz options/.code={
\tikzset{every picture/.prefix style={#1}}}
}

\newenvironment{wickersonpicture}[1][]{%
  \pgfkeys{/wickerson/.cd,#1}
  % do some stuff
  \begin{tikzpicture}
}{%
  \end{tikzpicture}
}

\begin{document}

\begin{wickersonpicture}[tikz options={show grid=all,red}]
    \draw (3,2) -- +(45:3);
\end{wickersonpicture}

\end{document}

在此处输入图片描述

我们喜欢 Tikz,它很棒,功能相对强大,而且文档齐全。然而在我看来,还有另一个原因导致它被广泛采用。用例和结构。我认为 Tantau 的结构能力经常被忽视。有数百个选项可用,每个库都分离得很好。任何尝试编写包的人都会意识到,随着功能的增加,想出一个一致的方案是多么困难。因此,如果某些选项的附加值不是明显不同的,那么最好将 TikZ 选项留给 TikZ,而不要先用预代码来咀嚼它们。

相关内容