TikZ 源代码中 \scope 定义在哪里?

TikZ 源代码中 \scope 定义在哪里?

控制序列在 TikZ 源代码中出现多次,例如在文件内部宏\scope定义的以下行:\tikz@lib@graph@parser@<tex installation directory>/tex/generic/pgf/frontendlayer/tikz/libraries/graphs/tikzlibrariesgraphs.code.tex

\scope[graphs/.cd,@graph drawing setup/.try,@operators=,every graph/.try,#1]%

我找不到它在哪里定义。

我已经编辑了( ) 的grep整个pgf目录树,但是什么也没有出现。\def\scopegrep -rF "\def\scope" pgf

我对 执行了同样的操作\let\scope,结果只出现了两个相关结果,分别位于宏\tikz@installcommands和中\tikz@uninstallcommands(均在文件中frontendlayer/tikz/tikz.code.tex)。但这些宏似乎只与 s 相关tikzpicture,更重要的是,它们似乎已经假设\scope控制序列是在其他地方定义的:

\let\tikz@origscope=\scope

...

\let\scope=\tikz@origscope

那么这个控制序列是在哪里定义的呢?

答案1

在 TikZ 环境的设置中\tikz@installcommands调用。

%
% Main TikZ Environment
%

\def\tikzpicture{%
  \begingroup%
    \tikz@startup@env%
    \pgfutil@ifnextchar[\tikz@picture{\tikz@picture[]}}%}
\def\tikz@picture[#1]{%
  \pgfpicture%
  \let\tikz@atbegin@picture=\pgfutil@empty%
  \let\tikz@atend@picture=\pgfutil@empty%
  \let\tikz@transform=\relax%
  \def\tikz@time{.5}%
  \tikz@installcommands% <==============================This line
  \scope[every picture,#1]%
  \iftikz@handle@active@code%
    \tikz@switchoff@shorthands%
  \fi%
  \expandafter\tikz@atbegin@picture%
  \tikz@lib@scope@check%
}

这又具有以下结构

%
% Install the abbreviated commands
%
\def\tikz@installcommands{%
  \let\tikz@origscope=\scope% <======== If scope is not yet defined, becomes undefined
  \let\tikz@origscoped=\scoped%
  \let\tikz@origendscope=\endscope%
  .....
  %
  \let\scope=\tikz@scope@env%<======== This is the actual definition
  \let\scoped=\tikz@scoped%
  \let\endscope=\endtikz@scope@env%
  \let\startscope=\scope%
  \let\stopscope=\endscope%
  \let\path=\tikz@command@path%
  \let\againpath=\tikz@command@againpath%
  %
  ......
}

相关内容