% \newcommand{\cmd}[1]{\texttt{\bslash #1}} \newcommand{\acro}[1]{{#1}} \newcommand{\MSC}{\acro{MSC}} \newcommand{\HMSC}{\acro{HMSC}} \newcommand{\MSCdoc}{\MSC{}doc} \newcommand{\mscpack}{\MSC{} macro package} % \newcommand{\env}[1]{\texttt{#1}} \newcommand{\cmdarg}[1]{\{\emph{#1}\}} \newcommand{\coordarg}[1]{\emph{#1}} \newcommand{\coordargs}[2]{(\coordarg{#1},\coordarg{#2})} \newcommand{\lnsvalue}[3]{large/normal/small value #1/#2/#3} \newenvironment{defs}{% \begin{list}{}% {\setlength{\labelwidth}{0pt}% \setlength{\labelsep}{1em}% \setlength{\leftmargin}{1em}% \setlength{\parsep}{1ex}% \setlength{\listparindent}{0pt}% \setlength{\rightmargin}{0pt}% \renewcommand{\makelabel}[1]{##1}% \raggedright% }% }{% \end{list}} \newcommand{\tikzname}{Ti\emph{k}Z} \newcommand{\beamer}{\textsc{beamer}} \newcommand{\pdf}{\textsc{pdf}} \newcommand{\eps}{\texttt{eps}} \newcommand{\pgfname}{\textsc{pgf}} % \newcommand{\prosper}{\textsc{prosper}} % \newcommand{\seminar}{\textsc{seminar}} % \newcommand{\texpower}{\textsc{texpower}} % \newcommand{\foils}{\textsc{foils}} % \providecommand\href[2]{\texttt{#1}} % \providecommand\hypertarget[2]{\texttt{#1}} % \providecommand\hyperlink[2]{\texttt{#1}} \colorlet{examplefill}{yellow!80!black} \definecolor{graphicbackground}{rgb}{1,1,1} \definecolor{codebackground}{rgb}{0.90,0.90,1} \newenvironment{pgfmanualentry}{\par\vspace*{-8pt}\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist\par\vspace*{-8pt}} \newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt\item\strut{#1}\par\topsep=0pt} \newcommand\pgfmanualbody{\parskip3pt\vspace*{-3pt}} \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}}% \pgfmanualpdflabel{#1}{}% \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{command}[1]{ \begin{pgfmanualentry} \extractcommand#1\@@ \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{commandlist}[1]{% \begin{pgfmanualentry} \foreach \xx in {#1} {% \expandafter\extractcommand\xx\@@ }% \pgfmanualbody }{% \end{pgfmanualentry} }% % \begin{internallist}[register]{\pgf@xa} % \end{internallist} % % \begin{internallist}[register]{\pgf@xa,\pgf@xb} % \end{internallist} \newenvironment{internallist}[2][register]{% \begin{pgfmanualentry} \foreach \xx in {#2} {% \expandafter\extractinternalcommand\expandafter{\xx}{#1}% }% \pgfmanualbody }{% \end{pgfmanualentry} }% \def\extractinternalcommand#1#2{% \pgfmanualentryheadline{Internal #2 \declare{\texttt{\string#1}}}% \removeats{#1}% \index{Internals!\strippedat @\protect\myprintocmmand{\strippedat}}% \index{\strippedat @\protect\myprintocmmand{\strippedat}}% \pgfmanualpdflabel{\textbackslash\strippedat}{}% } %% MW: START MATH MACROS \def\mvar#1{{\ifmmode\textrm{\textit{#1}}\else\rmfamily\textit{#1}\fi}} \makeatletter \def\extractmathfunctionname#1{\extractmathfunctionname@#1(,)\tmpa\tmpb} \def\extractmathfunctionname@#1(#2)#3\tmpb{\def\mathname{#1}} \makeatother \newenvironment{math-function}[1]{ \def\mathdefaultname{#1} \extractmathfunctionname{#1} \edef\mathurl{{math:\mathname}}\expandafter\hypertarget\expandafter{\mathurl}{}% \begin{pgfmanualentry} \pgfmanualentryheadline{\texttt{#1}}% \index{\mathname @\protect\texttt{\mathname} math function}% \index{Math functions!\mathname @\protect\texttt{\mathname}}% \pgfmanualbody } { \end{pgfmanualentry} } \def\pgfmanualemptytext{} \def\pgfmanualvbarvbar{\char`\|\char`\|} \newenvironment{math-operator}[4][]{% \begin{pgfmanualentry} \csname math#3operator\endcsname{#2}{#4} \def\mathtest{#4}% \ifx\mathtest\pgfmanualemptytext% \def\mathtype{(#3 operator)} \else% \def\mathtype{(#3 operator; uses the \texttt{#4} function)} \fi% \pgfmanualentryheadline{\mathexample\hfill\mathtype}% \def\mathtest{#1}% \ifx\mathtest\pgfmanualemptytext% \index{#2@\protect\texttt{#2} #3 math operator}% \index{Math operators!#2@\protect\texttt{#2}}% \fi% \pgfmanualbody } {\end{pgfmanualentry}} \newenvironment{math-operators}[5][]{% \begin{pgfmanualentry} \csname math#4operator\endcsname{#2}{#3} \def\mathtest{#5}% \ifx\mathtest\pgfmanualemptytext% \def\mathtype{(#4 operators)} \else% \def\mathtype{(#4 operators; use the \texttt{#5} function)} \fi% \pgfmanualentryheadline{\mathexample\hfill\mathtype}% \def\mathtest{#1}% \ifx\mathtest\pgfmanualemptytext% \index{#2#3@\protect\texttt{#2\protect\ #3} #4 math operators}% \index{Math operators!#2#3@\protect\texttt{#2\protect\ #3}}% \fi% \pgfmanualbody } {\end{pgfmanualentry}} \def\mathinfixoperator#1#2{% \def\mathoperator{\texttt{#1}}% \def\mathexample{\mvar{x}\space\texttt{#1}\space\mvar{y}}% } \def\mathprefixoperator#1#2{% \def\mathoperator{\texttt{#1}}% \def\mathexample{\texttt{#1}\mvar{x}}% } \def\mathpostfixoperator#1#2{% \def\mathoperator{\texttt{#1}} \def\mathexample{\mvar{x}\texttt{#1}}% } \def\mathgroupoperator#1#2{% \def\mathoperator{\texttt{#1\ #2}}% \def\mathexample{\texttt{#1}\mvar{x}\texttt{#2}}% } \expandafter\let\csname matharray accessoperator\endcsname=\mathgroupoperator \expandafter\let\csname matharrayoperator\endcsname=\mathgroupoperator \def\mathconditionaloperator#1#2{% \def\mathoperator{#1\space#2} \def\mathexample{\mvar{x}\ \texttt{#1}\ \mvar{y}\ {\texttt{#2}}\ \mvar{z}} } \newcommand\mathcommand[1][\mathdefaultname]{% \expandafter\makemathcommand#1(\empty)\stop% \expandafter\extractcommand\mathcommandname\@@% \medskip } \makeatletter \def\makemathcommand#1(#2)#3\stop{% \expandafter\def\expandafter\mathcommandname\expandafter{\csname pgfmath#1\endcsname}% \ifx#2\empty% \else% \@makemathcommand#2,\stop, \fi} \def\@makemathcommand#1,{% \ifx#1\stop% \else% \expandafter\def\expandafter\mathcommandname\expandafter{\mathcommandname{\ttfamily\char`\{#1\char`\}}}% \expandafter\@makemathcommand% \fi} \makeatother \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}} \pgfmanualpdflabel{\textbackslash\strippedat}{}% } % \begin{environment}{{name}\marg{arguments}} \newenvironment{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}} \pgfmanualpdflabel{#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}} \pgfmanualpdflabel{#1}{}% \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{shading}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{Shading {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} shading}% \index{Shadings!#1@\protect\texttt{#1}} \pgfmanualpdflabel{#1}{}% \pgfmanualbody } { \end{pgfmanualentry} } \newenvironment{dataformat}[1]{ \begin{pgfmanualentry} \pgfmanualentryheadline{Format {\ttfamily\declare{#1}}}% \index{#1@\protect\texttt{#1} format}% \index{Formats!#1@\protect\texttt{#1}} \pgfmanualpdflabel{#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}} \pgfmanualpdflabel{/handlers/#1}% } \makeatletter \newenvironment{stylekey}[1]{ \begin{pgfmanualentry} \def\extrakeytext{style, } \extractkey#1\@nil% \pgfmanualbody } { \end{pgfmanualentry} } \def\choicesep{$\vert$}% \def\choicearg#1{\texttt{#1}} \newif\iffirstchoice % \mchoice{choice1,choice2,choice3} \newcommand\mchoice[1]{% \begingroup \firstchoicetrue \foreach \mchoice@ in {#1} {% \iffirstchoice \global\firstchoicefalse \else \choicesep \fi \choicearg{\mchoice@}% }% \endgroup }% % \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} } % \insertpathifneeded{a key}{/pgf} -> assign mykey={/pgf/a key} % \insertpathifneeded{/tikz/a key}{/pgf} -> assign mykey={/tikz/a key} % % #1: the key % #2: a default path (or empty) \def\insertpathifneeded#1#2{% \def\insertpathifneeded@@{#2}% \ifx\insertpathifneeded@@\empty \def\mykey{#1}% \else \insertpathifneeded@#2\@nil \ifpgfutil@in@ \def\mykey{#2/#1}% \else \def\mykey{#1}% \fi \fi }% \def\insertpathifneeded@#1#2\@nil{% \def\insertpathifneeded@@{#1}% \def\insertpathifneeded@@@{/}% \ifx\insertpathifneeded@@\insertpathifneeded@@@ \pgfutil@in@true \else \pgfutil@in@false \fi }% % \begin{keylist}[default path] % {/path/option 1=value,/path/option 2=value2} % \end{keylist} \newenvironment{keylist}[2][]{% \begin{pgfmanualentry} \def\extrakeytext{}% \foreach \xx in {#2} {% \expandafter\insertpathifneeded\expandafter{\xx}{#1}% \expandafter\extractkey\mykey\@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\declare{#1}}\hfill(\extrakeytext no value)}% \def\mykey{#1}% \def\mypath{}% \def\myname{}% \firsttimetrue% \decompose#1/\nil% \fi \fi% } \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\declare{#1}=}#2\hfill(\extrakeytext no default)}% \fi% \fi% \def\mykey{#1}% \def\mypath{}% \def\myname{}% \firsttimetrue% \decompose#1/\nil% } \def\extractdefault#1#2(default #3)\@nil{% \pgfmanualentryheadline{{\ttfamily\declare{#1}\opt{=}}\opt{#2}\hfill (\extrakeytext default {\ttfamily#3})}% } \def\extractinitial#1#2(initially #3)\@nil{% \pgfmanualentryheadline{{\ttfamily\declare{#1}=}#2\hfill (\extrakeytext no default, initially {\ttfamily#3})}% } \def\extractequalinitial#1 (initially #2)\@nil{% \pgfmanualentryheadline{{\ttfamily\declare{#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 \pgfmanualpdflabel{/#1/\myname}{}% } \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 \begingroup % also make a pdf link anchor with full key path. \def\hyperlabelwithoutslash##1/\nil{% \pgfmanualpdflabel{##1}{}% }% \hyperlabelwithoutslash/#1/#2\nil \endgroup \def\mypath{#1@\protect\texttt{/#1/}!}% \firsttimefalse \else \expandafter\def\expandafter\mypath\expandafter{\mypath#1@\protect\texttt{#1/}!}% \fi \def\firsttime{} \decompose/#2\nil% \fi% } \def\indexkey#1{% \def\mypath{}% \decompose#1/\nil% } \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}} \pgfmanualpdflabel{#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}} \pgfmanualpdflabel{#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}}% \pgfmanualpdflabel{#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}}% \pgfmanualpdflabel{#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}} \pgfmanualpdflabel{#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}} \pgfmanualpdflabel{#1}{}% \pgfmanualbody } { \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} } \newenvironment{datavisualizationoperation}[3][]{ \begin{pgfmanualentry} \pgfmanualentryheadline{\textcolor{gray}{{\ttfamily\char`\\datavisualization}\ \ \dots} \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}% \def\pgfmanualtest{#1}% \ifx\pgfmanualtest\@empty% \index{#2@\protect\texttt{#2} (data visualization)}% \index{Data visualization!#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}} \pgfmanualpdflabel{\textbackslash\strippedat}{}% } \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\pfgopt{\afterassignment\pgfmanualopt\let\next=} { \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}}% } \makeatletter \ifx\scantokens\@undefined \PackageError{pgfmanual-macros}{You need to use extended latex (elatex) or (pdfelatex) to process this document}{} \fi \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}} \gdef\showreturn{\show^^M} \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/.store in=\code@pre, post/.store in=\code@post, % #1 is the *complete* environment contents as it shall be % typeset. In particular, the catcodes are NOT the normal ones. typeset listing/.code= {#1}, render instead/.store in=\code@render, 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,% FIXME : this here is merely used for indentation. It is just a TAB REPLACEMENT. every codeexample/.style={width=4cm+7pt}, } \let\code@pre\pgfutil@empty \let\code@post\pgfutil@empty \let\code@render\pgfutil@empty \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{% \ifx\code@render\pgfutil@empty% {% {% \returntospace% \commenthandler% \xdef\code@temp{#1}% removes returns and comments }% \catcode`\^^M=9% \colorbox{graphicbackground}{\color{black}\ignorespaces% \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}% }% \else% \colorbox{graphicbackground}{\color{black}\ignorespaces% \code@render}% \fi% }% \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} %%% Local Variables: %%% mode: latex %%% TeX-master: "beameruserguide" %%% End: