如何全局设置 tikzset 样式

如何全局设置 tikzset 样式

我想在环境tikzstyle中设置一个tabular,并在表后使用它。添加通常的\global似乎没有效果。下面的 MWE 产生:

在此处输入图片描述

但我希望最后一行是红色而不是蓝色。

\documentclass{article} 

\usepackage{tikz}

\tikzset{MyStyle/.style={}}%

\newcommand*{\MyTikzPicture}{%
    \begin{tikzpicture}
        \draw [MyStyle] (0,0) -- (2,0);
    \end{tikzpicture}
}%

\begin{document}
\MyTikzPicture

\tikzset{MyStyle/.style={ultra thick, blue}}%
\MyTikzPicture

\begin{tabular}{r l}
  a & b  \global\tikzset{MyStyle/.style={ultra thick, red}}
\end{tabular}

\MyTikzPicture
\end{document}

答案1

我想将我的评论转为答案。

首先tikzset基于包的命令pgfkeys。要显示命令的定义,可以使用以下代码:

\documentclass{article} 
\usepackage[T1]{fontenc}
\usepackage{tikz}
\begin{document}
\expandafter\detokenize\expandafter{\tikzset}
\end{document}

这个小例子的结果是:

\pgfqkeys{/tikz}

根据这些信息,您可以使用如问题中所示的类似构造:有没有办法设置全球的键值使用pgfkeys

基于命令的技巧\globaldefs。在 TeX Book 第 286 页你可以找到以下提示:

顺便说一句,如果\globaldefs在赋值时参数为正,\global则会自动隐含前缀;但如果 \globaldefs在赋值时为负, \global则忽略前缀。如果\globaldefs为零(通常为零),则出现或不出现\global决定是否进行全局赋值。简而言之:默认:\globaldefs=0

  • =0\global如果使用前缀,则分配是全局的。
  • <0所有分配都是本地的并且\global将被忽略。
  • >0所有任务都是全球性的。

根据前面的信息,您可以创建自己的命令:

\newcommand\gtikzset[1]{%
\begingroup%
 \globaldefs=1\relax%
 \pgfqkeys{/tikz}{#1}%
\endgroup%
}

额外的分组对于保存本地定义是必要的\globaldefs

完整的例子如下:

\documentclass{article} 

\usepackage{tikz}

\tikzset{MyStyle/.style={}}%

\newcommand*{\MyTikzPicture}{%
    \begin{tikzpicture}
        \draw [MyStyle] (0,0) -- (2,0);
    \end{tikzpicture}
}%

\newcommand\gtikzset[1]{%
\begingroup%
 \globaldefs=1\relax%
 \pgfqkeys{/tikz}{#1}%
\endgroup%
}
\begin{document}
\MyTikzPicture

\tikzset{MyStyle/.style={ultra thick, blue}}%
\MyTikzPicture

\begin{tabular}{r l}
  a & b  \gtikzset{MyStyle/.style={ultra thick, red}}
\end{tabular}

\MyTikzPicture
\end{document}

此后你会得到最后一条红线:

在此处输入图片描述

相关内容