我想在环境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}
此后你会得到最后一条红线: