% Copyright 2006 by Till Tantau % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Free Documentation License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. % $Header: /cvsroot/pgfplots/pgfplots/doc/latex/pgfplots/pgfmanual-en-macros.tex,v 1.4 2009/03/05 22:23:22 ludewich Exp $ % This file is part of the pgf manual; I re-use it here with % permission. % % I have changed very few things (marked with 'CF') \providecommand\href[2]{\texttt{#1}} \colorlet{examplefill}{yellow!80!black} \definecolor{graphicbackground}{rgb}{0.96,0.96,0.8} \definecolor{codebackground}{rgb}{0.8,0.8,1} \newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist} \newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt\item\strut{#1}\par\topsep=0pt} \newcommand\pgfmanualbody{\parskip3pt} \newenvironment{pgflayout}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{\texttt{\string\pgfpagesuselayout\char`\{\declare{#1}\char`\}}\oarg{options}} \index{#1@\protect\texttt{#1} layout}% \index{Page layouts!#1@\protect\texttt{#1}}% \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{command}[1]{ \begin{pgfmanualentry} \extractcommand#1\@@ \pgfmanualbody } { \end{pgfmanualentry} } %% MW: START MATH MACROS \def\mvar#1{{\rmfamily\textit{#1}}} \makeatletter \def\extractmathfunctionname#1{\extractmathfunctionname@#1(,)\tmpa\tmpb} \def\extractmathfunctionname@#1(#2)#3\tmpb{\def\mathname{#1}} \def\extractmathoperatorname{\begingroup\def\mvar##1{}\def\ {}\extractmathoperatorname@} \def\extractmathoperatorname@#1{\xdef\mathname{#1}\endgroup} \makeatother \newenvironment{math-function}[1]{ \begin{pgfmanualentry} \extractmathfunctionname{#1} \pgfmanualentryheadline{\texttt{#1}}% \index{\mathname @\protect\texttt{\mathname} math function}% \index{Math functions!\mathname @\protect\texttt{\mathname}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{math-operator}[1]{ \begin{pgfmanualentry} \extractmathoperatorname{#1} \pgfmanualentryheadline{\texttt{#1}}% \index{\mathname @\protect\texttt{\mathname} math operator}% \index{Math operators!\mathname @\protect\texttt{\mathname}} \pgfmanualbody } {% \end{pgfmanualentry} } \newenvironment{math-constant}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{\texttt{#1}}% \index{#1@\protect\texttt{#1} math constant}% \index{Math constants!#1@\protect\texttt{#1}} \pgfmanualbody } { \end{pgfmanualentry} } \def\calcname{\textsc{calc}} %% MW: END MATH MACROS \def\extractcommand#1#2\@@{% \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}% \removeats{#1}% \index{\strippedat @\protect\myprintocmmand{\strippedat}}} % \begin{environment}{{name}\marg{arguments}} \renewenvironment{environment}[1]{ \begin{pgfmanualentry} \extractenvironement#1\@@ \pgfmanualbody } { \end{pgfmanualentry} } \def\extractenvironement#1#2\@@{% \pgfmanualentryheadline{{\ttfamily\char`\\begin\char`\{\declare{#1}\char`\}}#2}% \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}% \pgfmanualentryheadline{{\ttfamily\char`\\end\char`\{\declare{#1}\char`\}}}% \index{#1@\protect\texttt{#1} environment}% \index{Environments!#1@\protect\texttt{#1}}} \newenvironment{plainenvironment}[1]{ \begin{pgfmanualentry} \extractplainenvironement#1\@@ \pgfmanualbody } { \end{pgfmanualentry} } \def\extractplainenvironement#1#2\@@{% \pgfmanualentryheadline{{\ttfamily\declare{\char`\\#1}}#2}% \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}% \pgfmanualentryheadline{{\ttfamily\declare{\char`\\end#1}}}% \index{#1@\protect\texttt{#1} environment}% \index{Environments!#1@\protect\texttt{#1}}} \newenvironment{contextenvironment}[1]{ \begin{pgfmanualentry} \extractcontextenvironement#1\@@ \pgfmanualbody } { \end{pgfmanualentry} } \def\extractcontextenvironement#1#2\@@{% \pgfmanualentryheadline{{\ttfamily\declare{\char`\\start#1}}#2}% \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}% \pgfmanualentryheadline{{\ttfamily\declare{\char`\\stop#1}}}% \index{#1@\protect\texttt{#1} environment}% \index{Environments!#1@\protect\texttt{#1}}} \newenvironment{shape}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{Shape {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} shape}% \index{Shapes!#1@\protect\texttt{#1}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{handler}[1]{ \begin{pgfmanualentry} \extracthandler#1\@nil% \pgfmanualbody } { \end{pgfmanualentry} } \def\gobble#1{} \def\extracthandler#1#2\@nil{% \pgfmanualentryheadline{Key handler \meta{key}{\ttfamily/\declare{#1}}#2}% \index{\gobble#1@\protect\texttt{#1} handler}% \index{Key handlers!#1@\protect\texttt{#1}} } \makeatletter \newenvironment{stylekey}[1]{ \begin{pgfmanualentry} \def\extrakeytext{style, } \extractkey#1\@nil% \pgfmanualbody } { \end{pgfmanualentry} } % \begin{key}{/path/x=value} % \begin{key}{/path/x=value (initially XXX)} % \begin{key}{/path/x=value (default XXX)} \newenvironment{key}[1]{ \begin{pgfmanualentry} \def\extrakeytext{} %\def\altpath{\emph{\color{gray}or}}% \extractkey#1\@nil% \pgfmanualbody } { \end{pgfmanualentry} } \def\extractkey#1\@nil{% \pgfutil@in@={#1}% \ifpgfutil@in@% \extractkeyequal#1\@nil \else% \pgfutil@in@{(initial}{#1}% \ifpgfutil@in@% \extractequalinitial#1\@nil% \else \pgfmanualentryheadline{{\ttfamily\declarekey{#1}}\hfill(\extrakeytext no value)}% \def\mykey{#1}% \def\mypath{}% \def\myname{}% \firsttimetrue% \decompose#1/\nil% \fi \fi% } \pgfkeyssetvalue{/pgfmanual/gray key prefixes}{/pgfplots/,/tikz/} \def\declarekey#1{% \begingroup \gdef\declarekey@didit{0}% \pgfkeysgetvalue{/pgfmanual/gray key prefixes}\declarekey@gray \def\declarekey@loop{\foreach \prefix in }% \expandafter\declarekey@loop\expandafter{\declarekey@gray} {% \expandafter\pgfutil@in@\expandafter{\prefix}{#1}% \ifpgfutil@in@ \expandafter\def\expandafter\declarekey@handleprefix\prefix####1\relax{% \keyprefix{\prefix}\declare{####1}% }% \declarekey@handleprefix#1\relax \gdef\declarekey@didit{1}% \breakforeach \fi }% \if0\declarekey@didit \declare{#1}% \fi \endgroup }% \def\keyprefix#1{\textcolor{gray}{#1}} \def\extractkeyequal#1=#2\@nil{% \pgfutil@in@{(default}{#2}% \ifpgfutil@in@% \extractdefault{#1}#2\@nil% \else% \pgfutil@in@{(initial}{#2}% \ifpgfutil@in@% \extractinitial{#1}#2\@nil% \else % \pgfmanualentryheadline{{\ttfamily\declarekey{#1}=}#2\hfill(\extrakeytext no default)}% \pgfmanualentryheadline{{\ttfamily\declarekey{#1}=}#2\hfill}% \fi% \fi% \def\mykey{#1}% \def\mypath{}% \def\myname{}% \firsttimetrue% \decompose#1/\nil% } \def\extractdefault#1#2(default #3)\@nil{% \pgfmanualentryheadline{{\ttfamily\declarekey{#1}\opt{=}}\opt{#2}\hfill (\extrakeytext default {\ttfamily#3})}% } \def\extractinitial#1#2(initially #3)\@nil{% % \pgfmanualentryheadline{{\ttfamily\declarekey{#1}=}#2\hfill (\extrakeytext no default, initially {\ttfamily#3})}% \pgfmanualentryheadline{{\ttfamily\declarekey{#1}=}#2\hfill (\extrakeytext initially {\ttfamily#3})}% } \def\extractequalinitial#1 (initially #2)\@nil{% \pgfmanualentryheadline{{\ttfamily\declarekey{#1}}\hfill (\extrakeytext initially {\ttfamily#2})}% \def\mykey{#1}% \def\mypath{}% \def\myname{}% \firsttimetrue% \decompose#1/\nil% } % Introduces a key alias '/#1/' % to be used inside of \begin{key} ... \end{key} \def\keyalias#1{\vspace{-3pt}\item{\small alias {\ttfamily/#1/\myname}}\vspace{-2pt}\par} \newif\iffirsttime \makeatother \def\decompose/#1/#2\nil{% \def\test{#2}% \ifx\test\empty% % aha. \index{#1@\protect\texttt{#1} key}% \index{\mypath#1@\protect\texttt{#1}}% \def\myname{#1}% \else% \iffirsttime % CF : disabled for /pgfplots/ prefix. % \def\mypath{#1@\protect\texttt{/#1/}!}% % \firsttimefalse \def\pgfplotslocTMPa{pgfplots}% \edef\pgfplotslocTMPb{#1}% \ifx\pgfplotslocTMPb\pgfplotslocTMPa \def\mypath{}% \else \def\mypath{#1@\protect\texttt{/#1/}!}% \fi \firsttimefalse \else \expandafter\def\expandafter\mypath\expandafter{\mypath#1@\protect\texttt{#1/}!}% \fi \def\firsttime{} \decompose/#2\nil% \fi% } \newenvironment{predefinedmethod}[1]{ \begin{pgfmanualentry} \extractpredefinedmethod#1\@nil \pgfmanualbody } { \end{pgfmanualentry} } \def\extractpredefinedmethod#1(#2)\@nil{% \pgfmanualentryheadline{Method \declare{\ttfamily #1}\texttt(#2\texttt) \hfill(predefined for all classes)} \index{#1@\protect\texttt{#1} method}% \index{Methods!#1@\protect\texttt{#1}} } \newenvironment{ooclass}[1]{ \begin{pgfmanualentry} \def\currentclass{#1} \pgfmanualentryheadline{Class \declare{\texttt{#1}}} \index{#1@\protect\texttt{#1} class}% \index{Class #1@Class \protect\texttt{#1}}% \index{Classes!#1@\protect\texttt{#1}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{method}[1]{ \begin{pgfmanualentry} \extractmethod#1\@nil \pgfmanualbody } { \end{pgfmanualentry} } \def\extractmethod#1(#2)\@nil{% \def\test{#1} \ifx\test\currentclass \pgfmanualentryheadline{Constructor \declare{\ttfamily #1}\texttt(#2\texttt)} \else \pgfmanualentryheadline{Method \declare{\ttfamily #1}\texttt(#2\texttt)} \fi \index{#1@\protect\texttt{#1} method}% \index{Methods!#1@\protect\texttt{#1}} \index{Class \currentclass!#1@\protect\texttt{#1}}% } \newenvironment{attribute}[1]{ \begin{pgfmanualentry} \extractattribute#1\@nil \pgfmanualbody } { \end{pgfmanualentry} } \def\extractattribute#1=#2;\@nil{% \def\test{#2}% \ifx\test\@empty \pgfmanualentryheadline{Private attribute \declare{\ttfamily #1} \hfill (initially empty)} \else \pgfmanualentryheadline{Private attribute \declare{\ttfamily #1} \hfill (initially {\ttfamily #2})} \fi \index{#1@\protect\texttt{#1} attribute}% \index{Attributes!#1@\protect\texttt{#1}} \index{Class \currentclass!#1@\protect\texttt{#1}}% } \newenvironment{predefinednode}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{Predefined node {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} node}% \index{Predefined node!#1@\protect\texttt{#1}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{coordinatesystem}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{Coordinate system {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} coordinate system}% \index{Coordinate systems!#1@\protect\texttt{#1}} \pgfmanualbody \pgfmanualpdflabel{#1}{}% } { \end{pgfmanualentry} } \newenvironment{snake}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{Snake {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} snake}% \index{Snakes!#1@\protect\texttt{#1}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{decoration}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{Decoration {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} decoration}% \index{Decorations!#1@\protect\texttt{#1}} \pgfmanualbody } { \end{pgfmanualentry} } \def\pgfmanualbar{\char`\|} \makeatletter \newenvironment{pathoperation}[3][]{ \begin{pgfmanualentry} \pgfmanualentryheadline{\textcolor{gray}{{\ttfamily\char`\\path}\ \ \dots} \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}% \def\pgfmanualtest{#1}% \ifx\pgfmanualtest\@empty% \index{#2@\protect\texttt{#2} path operation}% \index{Path operations!#2@\protect\texttt{#2}}% \pgfmanualpdflabel{#2}{}% \fi% \pgfmanualbody } { \end{pgfmanualentry} } \makeatother \def\extractcommand#1#2\@@{% \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}% \removeats{#1}% \index{\strippedat @\protect\myprintocmmand{\strippedat}}} \def\doublebs{\texttt{\char`\\\char`\\}} \newenvironment{package}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{{\ttfamily\char`\\usepackage\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX}} \index{#1@\protect\texttt{#1} package}% \index{Packages and files!#1@\protect\texttt{#1}}% \pgfmanualentryheadline{{\ttfamily\char`\\input \declare{#1}.tex\space\space\space \char`\%\space\space plain \TeX}} \pgfmanualentryheadline{{\ttfamily\char`\\usemodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{pgfmodule}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule\char`\{\declare{#1}\char`\}\space\space\space \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}} \index{#1@\protect\texttt{#1} module}% \index{Modules!#1@\protect\texttt{#1}}% \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{pgflibrary}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}} \index{#1@\protect\texttt{#1} library}% \index{Libraries!#1@\protect\texttt{#1}}% \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}} \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX\space when using \tikzname}} \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t\space when using \tikzname}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{tikzlibrary}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX}} \index{#1@\protect\texttt{#1} library}% \index{Libraries!#1@\protect\texttt{#1}}% \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}} \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{filedescription}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{File {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} file}% \index{Packages and files!#1@\protect\texttt{#1}}% \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{packageoption}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{{\ttfamily\char`\\usepackage[\declare{#1}]\char`\{pgf\char`\}}} \index{#1@\protect\texttt{#1} package option}% \index{Package options for \textsc{pgf}!#1@\protect\texttt{#1}}% \pgfmanualbody } { \end{pgfmanualentry} } \newcommand\opt[1]{{\color{black!50!green}#1}} \newcommand\ooarg[1]{{\ttfamily[}\meta{#1}{\ttfamily]}} \def\opt{\afterassignment\pgfmanualopt\let\next=} \def\pgfmanualopt{\ifx\next\bgroup\bgroup\color{black!50!green}\else{\color{black!50!green}\next}\fi} \def\beamer{\textsc{beamer}} \def\pdf{\textsc{pdf}} \def\pgfname{\textsc{pgf}} \def\tikzname{Ti\emph{k}Z} \def\pstricks{\textsc{pstricks}} \def\prosper{\textsc{prosper}} \def\seminar{\textsc{seminar}} \def\texpower{\textsc{texpower}} \def\foils{\textsc{foils}} { \makeatletter \global\let\myempty=\@empty \global\let\mygobble=\@gobble \catcode`\@=12 \gdef\getridofats#1@#2\relax{% \def\getridtest{#2}% \ifx\getridtest\myempty% \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1} \else% \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1\protect\printanat} \getridofats#2\relax% \fi% } \gdef\removeats#1{% \let\strippedat\myempty% \edef\strippedtext{\stripcommand#1}% \expandafter\getridofats\strippedtext @\relax% } \gdef\stripcommand#1{\expandafter\mygobble\string#1} } \def\printanat{\char`\@} \def\declare{\afterassignment\pgfmanualdeclare\let\next=} \def\pgfmanualdeclare{\ifx\next\bgroup\bgroup\color{red!75!black}\else{\color{red!75!black}\next}\fi} \let\textoken=\command \let\endtextoken=\endcommand \def\myprintocmmand#1{\texttt{\char`\\#1}} \def\example{\par\smallskip\noindent\textit{Example: }} \def\themeauthor{\par\smallskip\noindent\textit{Theme author: }} \def\indexoption#1{% \index{#1@\protect\texttt{#1} option}% \index{Graphic options and styles!#1@\protect\texttt{#1}}% } \def\itemcalendaroption#1{\item \declare{\texttt{#1}}% \index{#1@\protect\texttt{#1} date test}% \index{Date tests!#1@\protect\texttt{#1}}% } \def\class#1{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}% \extractclass#1@\par\topsep=0pt} \def\endclass{\endlist} \def\extractclass#1#2@{% \item{{{\ttfamily\char`\\documentclass}#2{\ttfamily\char`\{\declare{#1}\char`\}}}}% \index{#1@\protect\texttt{#1} class}% \index{Classes!#1@\protect\texttt{#1}}} \def\partname{Part} \makeatletter \def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index} This index only contains automatically generated entries. A good index should also contain carefully selected keywords. This index is not a good index. \bigskip } \c@IndexColumns=2 \def\theindex{\@restonecoltrue \columnseprule \z@ \columnsep 29\p@ \twocolumn[\index@prologue]% \parindent -30pt \columnsep 15pt \parskip 0pt plus 1pt \leftskip 30pt \rightskip 0pt plus 2cm \small \def\@idxitem{\par}% \let\item\@idxitem \ignorespaces} \def\endtheindex{\onecolumn} \def\noindexing{\let\index=\@gobble} \newcommand\symarrow[1]{ \index{#1@\protect\texttt{#1} arrow tip}% \index{Arrow tips!#1@\protect\texttt{#1}} \texttt{#1}& yields thick \begin{tikzpicture}[arrows={#1-#1},thick,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} and thin \begin{tikzpicture}[arrows={#1-#1},thin,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} } \newcommand\symarrowdouble[1]{ \index{#1@\protect\texttt{#1} arrow tip}% \index{Arrow tips!#1@\protect\texttt{#1}} \texttt{#1}& yields thick \begin{tikzpicture}[arrows={#1-#1},thick,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} and thin \begin{tikzpicture}[arrows={#1-#1},thin,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture}, double \begin{tikzpicture}[arrows={#1-#1},thick,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} and \begin{tikzpicture}[arrows={#1-#1},thin,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} } \newcommand\sarrow[2]{ \index{#1@\protect\texttt{#1} arrow tip}% \index{Arrow tips!#1@\protect\texttt{#1}} \index{#2@\protect\texttt{#2} arrow tip}% \index{Arrow tips!#2@\protect\texttt{#2}} \texttt{#1-#2}& yields thick \begin{tikzpicture}[arrows={#1-#2},thick,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} and thin \begin{tikzpicture}[arrows={#1-#2},thin,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} } \newcommand\sarrowdouble[2]{ \index{#1@\protect\texttt{#1} arrow tip}% \index{Arrow tips!#1@\protect\texttt{#1}} \index{#2@\protect\texttt{#2} arrow tip}% \index{Arrow tips!#2@\protect\texttt{#2}} \texttt{#1-#2}& yields thick \begin{tikzpicture}[arrows={#1-#2},thick,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} and thin \begin{tikzpicture}[arrows={#1-#2},thin,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture}, double \begin{tikzpicture}[arrows={#1-#2},thick,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} and \begin{tikzpicture}[arrows={#1-#2},thin,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex); \end{tikzpicture} } \newcommand\carrow[1]{ \index{#1@\protect\texttt{#1} arrow tip}% \index{Arrow tips!#1@\protect\texttt{#1}} \texttt{#1}& yields for line width 1ex \begin{tikzpicture}[arrows={#1-#1},line width=1ex,baseline] \useasboundingbox (0pt,-0.5ex) rectangle (1.5cm,2ex); \draw (0pt,.5ex) -- (1.5cm,.5ex); \end{tikzpicture} } \def\myvbar{\char`\|} \newcommand\plotmarkentry[1]{% \index{#1@\protect\texttt{#1} plot mark}% \index{Plot marks!#1@\protect\texttt{#1}} \texttt{\char`\\pgfuseplotmark\char`\{\declare{#1}\char`\}} & \tikz\draw[color=black!25] plot[mark=#1,mark options={fill=examplefill,draw=black}] coordinates{(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\ } \newcommand\plotmarkentrytikz[1]{% \index{#1@\protect\texttt{#1} plot mark}% \index{Plot marks!#1@\protect\texttt{#1}} \texttt{mark=\declare{#1}} & \tikz\draw[color=black!25] plot[mark=#1,mark options={fill=examplefill,draw=black}] coordinates {(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\ } \ifx\scantokens\@undefined \PackageError{pgfmanual-macros}{You need to use extended latex (elatex) or (pdfelatex) to process this document}{} \fi % Define \find@example such that it doesn't destroy catcodes: \begingroup \catcode`|=0 \catcode`[= 1 \catcode`]=2 \catcode`\{=12 \catcode `\}=12 \catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]] |endgroup % define \returntospace. % % It should define NEWLINE as {}, spaces and tabs as \space. \begingroup \catcode`\^=7 \catcode`\^^M=13 \catcode`\^^I=13 \catcode`\ =13% \gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^I=13\def^^I{\space}\catcode`\^^M=13\def^^M{\pgfkeysvalueof{/codeexample/newline}}}% \endgroup \begingroup \catcode`\%=13 \catcode`\^^M=13 \gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}} \gdef\@gobble@till@return#1^^M{} \gdef\@gobble@till@return@ignore#1^^M{\ignorespaces} \gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}} \gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par} \endgroup % Define tab-implementation functions % \codeexample@tabinit@replacementchars@ % and % \codeexample@tabinit@catcode@ % % They should ONLY be used in case that tab replacement is active. % % This here is merely a preparation step. % % Idea: % \codeexample@tabinit@catcode@ will make TAB active % and % \codeexample@tabinit@replacementchars@ will insert as many spaces as % /codeexample/tabsize contains. { \catcode`\^^I=13 % ATTENTION: do NOT use tabs in these definitions!! \gdef\codeexample@tabinit@replacementchars@{% \begingroup \count0=\pgfkeysvalueof{/codeexample/tabsize}\relax \toks0={}% \loop \ifnum\count0>0 \advance\count0 by-1 \toks0=\expandafter{\the\toks0\ }% \repeat \xdef\codeexample@tabinit@replacementchars@@{\the\toks0}% \endgroup \let^^I=\codeexample@tabinit@replacementchars@@ }% \gdef\codeexample@tabinit@catcode@{\catcode`\^^I=13}% }% % Called after any options have been set. It assigns % \codeexample@tabinit@catcode % and % \codeexample@tabinit@replacementchars % which are used inside of %\begin{codeexample} % ... %\end{codeexample} % % \codeexample@tabinit@catcode is either \relax or it makes tab % active. % % \codeexample@tabinit@replacementchars is either \relax or it inserts % a proper replacement sequence for tabs (as many spaces as % configured) \def\codeexample@tabinit{% \ifnum\pgfkeysvalueof{/codeexample/tabsize}=0\relax \let\codeexample@tabinit@replacementchars=\relax \let\codeexample@tabinit@catcode=\relax \else \let\codeexample@tabinit@catcode=\codeexample@tabinit@catcode@ \let\codeexample@tabinit@replacementchars=\codeexample@tabinit@replacementchars@ \fi } \pgfqkeys{/codeexample}{% width/.code= {\setlength\codeexamplewidth{#1}}, graphic/.code= {\colorlet{graphicbackground}{#1}}, code/.code= {\colorlet{codebackground}{#1}}, execute code/.is if=code@execute, code only/.code= {\code@executefalse}, pre/.code= {\def\code@pre{#1}}, post/.code= {\def\code@post{#1}}, % #1 is the *complete* environment contents as it shall be % typeset. In particular, the catcodes are NOT the normal ones. typeset listing/.code= {#1}, vbox/.code= {\def\code@pre{\vbox\bgroup\setlength{\hsize}{\linewidth-6pt}}\def\code@post{\egroup}}, ignorespaces/.code= {\let\@gobble@till@return=\@gobble@till@return@ignore}, leave comments/.code= {\def\code@catcode@hook{\catcode`\%=12}\let\commenthandler=\relax\let\typesetcomment=\relax}, tabsize/.initial=0, newline/.initial=, every codeexample/.style={width=4cm+7pt}, } \def\code@pre{} \def\code@post{} \def\code@catcode@hook{} \newdimen\codeexamplewidth \newif\ifcode@execute \newbox\codeexamplebox \def\codeexample[#1]{% \begingroup% \code@executetrue \pgfqkeys{/codeexample}{every codeexample,#1}% \codeexample@tabinit% assigns \codeexample@tabinit@[catcode,replacementchars] \parindent0pt \begingroup% \par% \medskip% \let\do\@makeother% \dospecials% \obeylines% \@vobeyspaces% \catcode`\%=13% \catcode`\^^M=13% \code@catcode@hook% \codeexample@tabinit@catcode \relax% \find@example} \def\endofcodeexample#1{% \endgroup% \ifcode@execute% \setbox\codeexamplebox=\hbox{% {% {% \returntospace% \commenthandler% \xdef\code@temp{#1}% removes returns and comments }% \colorbox{graphicbackground}{\color{black}\ignorespaces% \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}% }% }% \ifdim\wd\codeexamplebox>\codeexamplewidth% \def\code@start{\par}% \def\code@flushstart{}\def\code@flushend{}% \def\code@mid{\parskip2pt\par\noindent}% \def\code@width{\linewidth-6pt}% \def\code@end{}% \else% \def\code@start{% \linewidth=\textwidth% \parshape \@ne 0pt \linewidth \leavevmode% \hbox\bgroup}% \def\code@flushstart{\hfill}% \def\code@flushend{\hbox{}}% \def\code@mid{\hskip6pt}% \def\code@width{\linewidth-12pt-\codeexamplewidth}% \def\code@end{\egroup}% \fi% \code@start% \noindent% \begin{minipage}[t]{\codeexamplewidth}\raggedright \hrule width0pt% \footnotesize\vskip-1em% \code@flushstart\box\codeexamplebox\code@flushend% \vskip-1ex \leavevmode% \end{minipage}% \else% \def\code@mid{\par} \def\code@width{\linewidth-6pt} \def\code@end{} \fi% \code@mid% \colorbox{codebackground}{% \begin{minipage}[t]{\code@width}% {% \let\do\@makeother \dospecials \frenchspacing\@vobeyspaces \normalfont\ttfamily\footnotesize \typesetcomment% \codeexample@tabinit@replacementchars \@tempswafalse \def\par{% \if@tempswa \leavevmode \null \@@par\penalty\interlinepenalty \else \@tempswatrue \ifhmode\@@par\penalty\interlinepenalty\fi \fi}% \obeylines \everypar \expandafter{\the\everypar \unpenalty}% \pgfkeysvalueof{/codeexample/typeset listing/.@cmd}{#1}\pgfeov } \end{minipage}}% \code@end% \par% \medskip \end{codeexample} } \def\endcodeexample{\endgroup} \makeatother %%% Local Variables: %%% mode: latex %%% TeX-master: "beameruserguide" %%% End: