Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I am not too sure just by reading the manual as to the subtle differences between the .initial and .default PGF key types. Can someone explain and demonstrate the differences with a minimal example?

share|improve this question
add comment

1 Answer

up vote 8 down vote accepted

They're for two different things: A key defined using /.initial=<value or string> is a value-storing key, with the initial value set to <value or string>.

The /.default keyword defines what value will be used as the argument for a key defined with /.code=<code> if no argument is provided.

The two things are similar, but not equivalent. A key can at the same time have a value, which can be queried with \pgfkeysvalueof{/key}, and a code, which will be run when you just call the key using \pgfkeys{/key}. If no code is defined, the two are the same, but if you have defined both a .initial

\documentclass{article}
\usepackage{pgfkeys}

\begin{document}
%% Case 1: We want a key to store a value

% Just passing a value to an undefined key fails:
%\pgfkeys{firstkey=red}

% It first needs to be initialised
\pgfkeys{firstkey/.initial=red}

% Then we can get the value
\pgfkeys{firstkey}

% After the key has been initialised, we can change the stored value using simple assignments
\pgfkeys{firstkey=blue}
\pgfkeys{firstkey}

%% Case 2: We want a key to execute code using the argument
\pgfkeys{secondkey/.code=Your argument: \textbf{#1}}
\pgfkeys{secondkey=Some words}

% If we don't use an argument, it's assumed to be empty
\pgfkeys{secondkey}

% We can provide a default value to be used if no argument is provided:
\pgfkeys{secondkey/.default=Nothing}
\pgfkeys{secondkey}

% Let's define a .code key that just returns the argument...
\pgfkeys{/thirdkey/.code=#1}
% ...and give it an initial value...
\pgfkeys{/thirdkey/.initial=green}
% ...and a default argument
\pgfkeys{/thirdkey/.default=red}

% If we query the value, we get "green"
\pgfkeysvalueof{/thirdkey}
% If we run the code, we get "red"
\pgfkeys{/thirdkey}

\end{document}
share|improve this answer
1  
Does tikz have a reason for this semantics, ie, for separating .initial from .default? They seem to serve the same purpose: if there is no user-supplied value, use initial or default value. –  Ahmed Musa Apr 5 '12 at 16:26
    
@AhmedMusa: The value stored in a key and the code it runs are two different things. I've edited the example. Also, they don't really serve the same purpose: .initial initialises a key with a value, once you've assigned a different value to the key, the initial value is lost. The .default value stays around, even if you call the key with a different argument. –  Jake Apr 5 '12 at 16:48
    
I think there is an existence issue as well. Non-existing keys originated by /.initial would be assumed as empty. However, if you want to use /.value required it seems that the /.default is the way to go. I am just guessing by the way I have to check once again. –  percusse Apr 5 '12 at 16:54
    
@Jake the /.default also applies for the /.style keys (you only mention /.code). I know that there is no implementation difference (from a user perspective), however for future readers might I suggest to add that as well to disclose any ambiguities. –  zeroth Apr 5 '12 at 17:22
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.