
\section{About Options: Preliminaries}
\PGFPlots\ knows a whole lot of key--value options which can be (re)defined to activate desired features or modified to apply some fine-tuning.

A key usually has a value (like a number, a string, or perhaps some macro code). You can assign values to keys (``set keys'') in many places in a \LaTeX\ document. The value will remain effective until it is changed or until the current \TeX\ scope ends (which happens after a closing curly brace `|}|', after |\end|\marg{name} or, for example, after |\addplot|).

\noindent Most keys can be used like
\begin{codeexample}[code only]
\begin{tikzpicture}
\begin{axis}[key=value,key2=value2] % axis-wide keys
...
\end{axis}
\end{tikzpicture}
\end{codeexample}
\noindent which changes them for the complete axis. A |key| in this context can be any option defined in this manual, no matter if it has the |/pgfplots/| or the |/tikz/| key prefix. Note that key prefixes can be omitted in almost all cases. 

A value can usually be provided without curly braces. For example, if the manual contains something like `|xmin=|\marg{$x$ coordinate}', you can safely skip the curly braces. The curly braces are mandatory if values contain something which would otherwise confuse the key setup (for example an equal sign `|=|' or a comma `|,|').

Some keys can be changed individually for each plot:
\begin{codeexample}[code only]
\begin{tikzpicture}
\begin{axis}
% keys valid for single plots:
\addplot ...;                          % uses the "cycle list" to determine keys
\addplot[key=value,key2=value2] ... ;  % uses the provided keys (not the "cycle list")
\addplot+[key=value,key2=value2] ... ; % appends something to the "cycle list"
\end{axis}
\end{tikzpicture}
\end{codeexample}

Besides these two possibilities, it is also possible to work with document-wide keys:
\begin{codeexample}[code only]
\chapter{My Section}
\pgfplotsset{
	key=value,
	key2=value2,
}
This section has a common key configuration:
\begin{tikzpicture}
	\begin{axis}% uses the key config from above
	... 
	\end{axis}
\end{tikzpicture}
\end{codeexample}
\noindent In the example above, the |\pgfplotsset| command changes keys. The changes are permanent and will be used until 
\begin{itemize}
	\item you redefine them or
	\item the current environment (like |\end{figure}|) is ended or
	\item \TeX\ encounters a closing brace `|}|'.
\end{itemize}
This includes document--wide preamble configurations like
\begin{codeexample}[code only]
\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{
	xticklabel={$\mathsf{\pgfmathprintnumber{\tick}}$},
	every axis/.append style={
		font=\sffamily,
	},
}
...
\end{codeexample}

The basic engine to manage key--value pairs is |pgfkeys| which is part of \pgfname. This engine always has a key name and a key ``path'', which is somehow similar to file name and directory of files. The common ``directory'' (key path) of \PGFPlots\ is `|/pgfplots/|'. Although the key definitions below provide this full path, it is always (well, almost always) safe to skip this prefix -- \PGFPlots\ uses it automatically. The same holds for the prefixes `|/tikz/|' which are common for all \Tikz\ drawing options and `|/pgf/|' which are for the (more or less) low--level commands of \pgfname. All these prefixes can be omitted.

One important concept is the concept of \emph{styles}. A style is a key which contains one or more other keys. It can be redefined or modified until it is actually used by the internal routines. Each single component of \Tikz\ and \PGFPlots\ can be configured with styles.

For example,
\begin{codeexample}[code only]
\pgfplotsset{legend style={line width=1pt}}
\end{codeexample}
\noindent
sets the line width for every legend to |1pt| by appending `|line width=1pt|' to the existing style for legends. 

There are keys like |legend style|, |ticklabel style|, and |label style| which allow to modify the predefined styles (in this case the styles for legends, ticklabels and axis labels, respectively). They are, in general, equivalent to a \meta{style name}|/.append style={}| command (the only difference is that the |/.append style| thing is a little bit longer). There is also the possibility to define a new style (or to overwrite an already existing one) using |/.style={}|.

There are several other styles predefined to modify the appearance, see Section~\ref{sec:styles}.

\begin{command}{\pgfplotsset\marg{key-value-list}}
	Defines or sets all options in \meta{key-value-list}. The \meta{key-value-list} can contain any of the options in this manual which have the prefix |/pgfplots/| (however, you do not need to type that prefix).
	
	Inside of \meta{key-value-list}, the prefixes `|/pgfplots/|' which are commonly presented in this manual can be omitted (they are checked automatically).

	This command can be used to define default options for the complete document or a part of the document. For example, 
\begin{codeexample}[code only]
\pgfplotsset{
	cycle list={%
		{red, mark=*}, {blue,mark=*},
		{red, mark=x}, {blue,mark=x},
		{red, mark=square*}, {blue,mark=square*},
		{red, mark=triangle*}, {blue,mark=triangle*},
		{red, mark=diamond*}, {blue,mark=diamond*},
		{red, mark=pentagon*}, {blue,mark=pentagon*}
	},
	legend style={
		at={(0.5,-0.2)},
		anchor=north,
		legend columns=2,
		cells={anchor=west},
		font=\footnotesize,
		rounded corners=2pt,
	},
	xlabel=$x$,ylabel=$f(x)$
}
\end{codeexample}
	can be used to set document-wise styles for line specifications, the legends' style and axis labels. The settings remain in effect until the end of the current environment (like |\end{figure}|) or until you redefine them or until the next closing curly brace `|}|' (whatever comes first).

	You can also define new styles (collections of key--value--pairs) with |/.style| and |/.append style|.
\begin{codeexample}[code only]
\pgfplotsset{
	My Style 1/.style={xlabel=$x$, legend entries={1,2,3} },
	My Style 2/.style={xlabel=$X$, legend entries={4,5,6} }
}
\end{codeexample}
	The |/.style| and |/.append style| key handlers are described in Section~\ref{sec:styles} in more detail.
\end{command}

\begin{handler}{{.code}=\marg{\TeX\ code}}
	Occasionally, the \PGFPlots\ user interface offers to replace parts of its routines. This is accomplished using so called ``code keys''. What it means is to replace the original key and its behavior with new \meta{\TeX\ code}. Inside of \meta{\TeX\ code}, any command can be used. Furthermore, the |#1| pattern will be the argument provided to the key.

\begin{codeexample}[]
\pgfplotsset{
	My Code/.code={I've been invoked with `#1'}}
\pgfplotsset{My Code={this here}}
\end{codeexample}
	The example defines a (new) key named |My Code|. Essentially, it is nothing else but a |\newcommand|, plugged into the key-value interface. The second statement ``invokes'' the code key.	
\end{handler}

\begin{handler}{{.code 2 args}=\marg{\TeX\ code}}
	As |/.code|, but this handler defines a key which accepts two arguments. When the so defined key is used, the two arguments are available as |#1| and |#2|.
\end{handler}

\begin{handler}{{.cd}}
	Each key has a fully qualified name with a (long) prefix, like |/pgfplots/xmin|. However, if the ``current directory'' is |/pgfplots|, it suffices to write just |xmin|. The |/.cd| key handler changes the ``current directory'' in this way.

	The prefixes |/tikz/| and |/pgfplots/| are checked automatically for any argument provided to |\begin{axis}|\oarg{options}  or |\addplot|. So, you won't need to worry about them, just omit them -- and look closer in case the package doesn't identify the option.
\end{handler}

\subsection{\textsc{Pgfplots} and \Tikz\ Options}
This section is more or less technical and can be skipped unless one really wants to know more about this topic.

\Tikz\ options and \PGFPlots\ options can be mixed inside of the axis arguments and in any of the associated styles. For example,
\begin{codeexample}[code only]
\pgfplotsset{every axis legend/.append style={
	legend columns=3,font=\Large}}
\end{codeexample}
\noindent
assigns the `|legend columns|' option (a \PGFPlots\ option) and uses `|font|' for drawing the legend (a \Tikz\ option). The point is: |legend columns| needs to be known \emph{before} the legend is typeset whereas |font| needs to be active when the legend is typeset. \PGFPlots\ sorts out any key dependencies automatically:

The axis environments will process any known \PGFPlots\ options, and all `|every|'--styles will be parsed for \PGFPlots\ options. Every unknown option is assumed to be a \Tikz\ option and will be forwarded to the associated \Tikz\ drawing commands. For example, the `|font=\Large|' above will be used as argument to the legend matrix, and the `|font=\Large|' argument in 
\begin{codeexample}[code only]
\pgfplotsset{every axis label/.append style={
	ylabel=Error,xlabel=Dof,font=\Large}}
\end{codeexample}
will be used in the nodes for axis labels (but not the axis title, for example).

It is an error if you assign incompatible options to axis labels, for example `|xmin|' and `|xmax|' can't be set inside of `|every axis label|'.
