是否有类似 \providetikzstyle 和 \providecommand 的东西?

是否有类似 \providetikzstyle 和 \providecommand 的东西?

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}

相关内容