我standalone
在文档中包含了一些图表。这些图表使用了诸如 之类的语句,这些语句\providecommand{\HypotenuseLabel}{$h$}
允许图表具有默认标签,并且可以在包含此图表的主文件中覆盖这些语句,\newcommand{\HypotenuseLabel}{$x^2+y^2$}
以便为特定应用程序自定义此图表。
该图还包含诸如\tikzstyle{HypotenuseLineStyle}=[red, very thick, opacity=0.5]
哪些语句用于绘制此特定线条。我想将其更改为某种性质,\providetikzstyle
以便此样式仅在尚未定义时才在图中定义。有没有简单的方法可以做到这一点?
答案1
据我所知,\tikzstyle
这是一个非官方的、从未记录过的宏。它用于所示的一些代码中,pdfmanual
但从未描述过。正确的官方语法是\tikzset{HypotenuseLineStyle/.style={red, very thick, opacity=0.5}}
。
参见第 55.4.4 节定义样式,第 493 页。我在那里找不到任何.provide style
内容,所以我认为没有。但是,可以定义一个:
\documentclass{article}
\usepackage{tikz}
% .style is defined as \pgfkeys {\pgfkeyscurrentpath /.code=\pgfkeysalso {#1}}
\tikzset{/handlers/.provide style/.code={%
\pgfkeysifdefined{\pgfkeyscurrentpath/.@cmd}{}%
{\pgfkeys {\pgfkeyscurrentpath /.code=\pgfkeysalso {#1}}}%
}}
\begin{document}
\tikzset{test/.provide style={green}}% Sets the style
\tikzset{test/.provide style={red}}% Doesn't overwrites the style!
% Do we get the green light?
\tikz \fill [test] (0,0) circle (5pt);
\tikzset{test2/.style={green}}% Sets the style
\tikzset{test2/.provide style={red}}% Doesn't overwrites the style!
% Do we get the green light?
\tikz \fill [test2] (0,0) circle (5pt);
\end{document}