summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xelatex/xepersian/xepersian-user.cls
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xepersian/xepersian-user.cls')
-rw-r--r--Master/texmf-dist/tex/xelatex/xepersian/xepersian-user.cls799
1 files changed, 799 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xepersian/xepersian-user.cls b/Master/texmf-dist/tex/xelatex/xepersian/xepersian-user.cls
new file mode 100644
index 00000000000..d5d9f2c00c8
--- /dev/null
+++ b/Master/texmf-dist/tex/xelatex/xepersian/xepersian-user.cls
@@ -0,0 +1,799 @@
+%% This file is xepersian-user.cls
+%%
+%% Copyright 2009 by Vafa Khalighi
+%%
+%%%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{xepersian-user}[2009/01/05 Class for XePersian User's Guide (Author: Vafa Khalighi)]
+\TeXXeTstate=1
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass{article}
+\RequirePackage{pstcol}
+\RequirePackage{pst-coil}
+\RequirePackage{pst-plot}
+\RequirePackage{pst-tree}
+\RequirePackage{fancybox}
+\RequirePackage{fancyvrb}
+\RequirePackage{geometry}
+\RequirePackage{fontspec}
+\RequirePackage{xltxtra}
+\RequirePackage{url}
+\RequirePackage[hyperfootnotes=false,colorlinks=true,bookmarks=true]
+ {hyperref}
+\RequirePackage{pifont}
+\def\thetitle{\XePersian : User's Guide}
+\newcommand*\setPersianFont[2][]{%
+\newfontfamily\PersianFont[Script=Arabic,#1]{#2}
+}
+\def\PersianTxt#1{\begingroup\beginR\PersianFont#1\endR\endgroup}
+\let\theheadertitle\thetitle
+\let\fileversion\Version
+\let\filedate\Date
+\parindent 0pt
+\parskip 7pt plus 1pt minus 1pt
+\oddsidemargin 5cm
+\evensidemargin 5cm
+\textwidth 11.5cm
+\topmargin\z@
+\textheight 8.8in
+\footskip .625in
+\headheight 0pt
+\headsep 0pt
+\marginparwidth 3.5cm
+\marginparsep .5cm
+\reversemarginpar
+\ifdim\paperwidth=210mm \papersizeadjust\fi
+\def\arraystretch{1.2}
+\hfuzz 1pt
+\def\twosideclearpage{%
+ \clearpage
+ \if@twoside
+ \ifodd\c@page\else
+ \thispagestyle{empty}%
+ \null\leavevmode
+ \clearpage
+ \fi
+ \fi}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{7pt plus 1pt minus 1pt}
+\def\@listI{%
+ \leftmargin\leftmargini
+ \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 5\p@ plus2\p@ minus2\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@}
+\let\@listi\@listI
+\@listi
+\def\@listii{%
+ \leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ plus.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+\def\@listiii{%
+ \leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 1\p@ plus.2\p@ minus.2\p@
+ \parsep \z@
+ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep}
+\skip\footins 20pt plus 4pt minus 2pt
+\newcounter{faq}[section]
+\def\thefaq{\arabic{faq}}
+\let\l@faq\@gobbletwo
+\def\faq{\@startsection{faq}{2}{\z@}%
+ {3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}{\faqfont}}
+\def\faqfont{\normalsize\sffamily}
+\def\faqmark#1{}
+\def\error{\vskip 2ex\noindent}
+\def\section{\@startsection{section}{1}{\sechang}%
+ {-3ex plus -1ex minus -.2ex}{1.5ex plus .2ex}{\secfont}}
+\def\subsection{\@startsection{subsection}{2}{\subsechang}%
+ {-2.75ex plus -1ex minus -.2ex}{1.25ex plus .2ex}{\subsecfont}}
+\newdimen\sechang
+\newdimen\subsechang
+\sechang=-.75in
+\subsechang=-.375in
+\def\secfont{\sffamily\LARGE\bfseries}
+\def\subsecfont{\sffamily\Large\bfseries}
+\def\ps@docheadings{%
+ \let\@mkboth\markboth
+ \def\@oddhead{}%
+ \let\@evenhead\@oddhead%
+ \def\@oddfoot{%
+ \small\sffamily
+ \rightmark
+ \hfil
+ \thepage}%
+ \def\@evenfoot{%
+ \small\sffamily
+ \thepage
+ \hfil
+ \theheadertitle}%
+ \def\sectionmark##1{\markright {##1}}}%
+\pagestyle{docheadings}
+\newskip\tempskip
+\def\TOCshrink{.5}
+\def\TableOfContents{%
+ \begin{quote}
+ \begin{center} \Large\bf Contents \end{center}
+ \def\numberline##1{\hbox to 0pt{\hss##1\hskip 1em}}%
+ \let\oldaddvspace\addvspace
+ \def\addvspace##1{%
+ \tempskip##1\relax
+ \oldaddvspace{\TOCshrink\tempskip}}
+ \@starttoc{toc}%
+ \end{quote}}
+\def\tableofcontents{%
+ \clearpage
+ \markright{CONTENTS}%
+ \TableOfContents
+ \clearpage}
+\def\expanddate#1/#2/#3/{%
+ \number#3{}
+ \month=#2
+ \ifcase\month\or
+ January \or February \or March \or April \or May \or June \or
+ July \or August \or September \or October \or November \or December
+ \fi
+ 20#1}
+\def\thefiledate{\expandafter\expanddate\Date/}
+\date{\thefiledate}
+\def\NotNested{\def\begin##1{%
+ \@latexerr{Bad nesting of environments.
+ Perhaps missing \end{\@currenvir}}\@eha
+ \end{\@currenvir}%
+ \begin{##1}}}
+\def\Ex{%
+ \NotNested
+ \list{}{}\item[]%
+ \if@minipage\else\vskip\parskip\fi
+ \leftskip\@totalleftmargin
+ \rightskip\z@
+ \parindent\z@
+ \parskip\z@
+ \parfillskip\@flushglue
+ \hfuzz 1pt
+ \@@par
+ \global\@inlabelfalse}
+\def\endEx{\endlist}
+\begingroup
+ \catcode`\{=12 \catcode`\}=12
+ \catcode`\(=1 \catcode`\)=2
+ \catcode`\+=0 \catcode`\\=12
+ +gdef+|(\) % \| = character \
+ +gdef+{({) % \{ = character {
+ +gdef+}(}) % \} = character }
++endgroup
+\def\Backslash{\protect\|}
+\def\times@scale{.96}
+\def\helv@scale{.82}
+\def\courier@scale{.985}
+\def\AmS{AMS}
+\def\symchar#1{%
+ \mbox{%
+ \kern .3pt
+ \Pisymbol{psy}{#1}
+ \kern .3pt}}
+
+\def\lt{\symchar{'074}}
+\def\gt{\symchar{'076}}
+\def\leq{\symchar{'243}}
+\def\geq{\symchar{'263}}
+\def\bullet{\symchar{'267}}
+\def\ldots{\symchar{'274}}
+\mathcode`\-="20B1
+\renewcommand{\ttdefault}{\sfdefault}
+\def\MainFont{\ttfamily\bfseries\large}
+\def\UsageFont{\ttfamily\bfseries}
+\def\InlineFont{\ttfamily}
+\def\MetaFont{\sffamily\slshape}
+\def\OpArgFont{\normalfont}
+\begingroup
+ \catcode`\<=\active
+ \gdef\ShortMeta{%
+ \catcode`\<=\active
+ \def<##1>{{\MetaFont ##1\/}}}
+\endgroup
+\def\DeleteShortMeta{\catcode`\<=12\relax}
+\ShortMeta
+\def\x#1{{\MetaFont x#1\/}}
+\def\y#1{{\MetaFont y#1\/}}
+\def\c#1{{\InlineFont(\x{#1},\kern 1pt\y{#1})}}
+\def\cn{\c{n}}
+\def\FV@SetupFont{%
+ \FV@BaseLineStretch
+ \FV@FontSize
+ \FV@FontFamily
+ \FV@FontSeries
+ \FV@FontShape
+ \selectfont
+}
+\def\FV@GetLine{\expandafter\FV@CheckScan\FancyVerbGetLine}
+\AtBeginDocument{\DefineShortVerb{\"}}
+
+\VerbatimFootnotes
+
+\fvset{gobble=2,commentchar=\",codes={\catcode`\<=12},fontfamily=helvetica,
+ frame=single,numbers=left,numbersep=1mm}
+
+\DefineVerbatimEnvironment{LVerb}{LVerbatim}{fontsize=\small}
+\DefineVerbatimEnvironment{LVerb*}{LVerbatim}%
+ {fontsize=\small,codes={\catcode`\<=13}}
+
+\def\FV@Space{\ \ }
+
+% Verbatim items:
+
+\newcommand{\vitem}{\SaveVerb[codes={\catcode`\<=13},
+ aftersave={\item[\UseVerb{item}]}]{item}}
+
+
+\newcommand{\BeginExample}{%
+ \VerbatimEnvironment
+ \catcode`\<=12\relax
+ \catcode`\"=9\relax
+ \begin{VerbatimOut}[commentchar=none,codes={\catcode`\"=12}]{\jobname.tmp}}
+
+\newcommand{\EndExample}{%
+ \end{VerbatimOut}
+ \fvset{gobble=0,fontsize=\small}}
+
+\newenvironment{example}{\BeginExample}{%
+ \EndExample
+ \LVerbatimInput{\jobname.tmp}%
+ \begin{center}\leavevmode\input{\jobname.tmp}\end{center}}
+
+\newenvironment{example*}{\BeginExample}{%
+ \EndExample\LVerbatimInput{\jobname.tmp}\input{\jobname.tmp}}
+
+\newenvironment{example**}{\BeginExample}{%
+ \EndExample\SideBySideEx{\input{\jobname.tmp}}}
+
+\newif\ifgrid
+\newpsobject{usergrid}{psgrid}{subgriddiv=1,griddots=10,gridlabels=7pt}
+
+\def\MEx{\@ifnextchar[{\@MEx}{\@MEx[0,0]}}
+\def\@MEx[#1,#2](#3,#4){%
+ \def\PictureSize{(#1,#2)(#3,#4)}%
+ \BeginExample}
+\def\endMEx{%
+ \EndExample
+ \SideBySideEx{%
+ \expandafter\pspicture\PictureSize
+ \ifgrid\usergrid\fi\relax
+ \input{\jobname.tmp}%
+ \endpspicture}}
+
+\def\SideBySideEx#1{%
+ \trivlist\item[]%
+ \leavevmode\kern-\@totalleftmargin
+ \hbox{\valign{%
+ \vfil##\vfil\cr
+ \hbox to \z@{\hss#1}\cr
+ \hbox to \leftmargini{\hss}\cr
+ \@tempdimc=\textwidth
+ \advance\@tempdimc-\leftmargini
+ \advance\@tempdimc-\psframesep
+ \advance\@tempdimc-\psframesep
+ \advance\@tempdimc-\pslinewidth
+ \advance\@tempdimc-\pslinewidth
+ \hbox{\psframebox{\BVerbatimInput[frame=none,numbersep=2mm,
+ boxwidth=\@tempdimc]{\jobname.tmp}}}\cr}}%
+ \endtrivlist}
+
+\@namedef{MEx*}{\gridtrue\MEx}
+\@namedef{endMEx*}{\endMEx}
+
+
+\def\FV@BProcessLine#1{%
+\hbox\ifx\FV@boxwidth\relax\else to\FV@boxwidth\fi{%
+\FV@LeftListNumber
+\FV@LeftListFrame
+\FancyVerbFormatLine{#1}\hss
+\FV@RightListFrame
+\FV@RightListNumber}}
+
+\def\BUseVerbatim{\FV@Command{}{BNumbersUseVerbatim}}
+
+\def\FVC@BNumbersUseVerbatim#1{\FV@CheckIfSaved{#1}{\FV@BNumbersUseVerbatim}}
+
+\def\FV@BNumbersUseVerbatim#1{\FV@BNumbersVerbatimBegin#1\FV@BVerbatimEnd}
+
+\def\FV@BNumbersVerbatimBegin{%
+ \begingroup
+ \FV@UseKeyValues
+ \FV@BeginVBox
+ \let\FV@ProcessLine\FV@BNumbersProcessLine
+ \FV@FormattingPrep
+ \FV@ObeyTabsInit}%
+
+\def\FV@BNumbersProcessLine#1{%
+\global\advance\FV@CodeLineNo\@ne
+\FV@StepLineNo
+\FV@BProcessLine{#1}}
+
+
+%%%%%%%%%%%%%%%%%%%% Logos %%%%%%%%%%%%%%%%%%%%
+
+\def\b@LaTeX{%
+ \begingroup
+ \csname reset@font\endcsname
+ \rmfamily\bfseries
+ L\kern-.32em
+ \raise.36ex\hbox{%
+ \ifx\@currsize\Huge\LARGE\else
+ \ifx\@currsize\huge\Large\else
+ \ifx\@currsize\LARGE\large\else
+ \ifx\@currsize\Large\normalsize\else
+ \ifx\@currsize\large\small\else
+ \ifx\@currsize\normalsize\footnotesize\else
+ \ifx\@currsize\small\scriptsize\else
+ \ifx\@currsize\footnotesize\scriptscriptsize
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \textbf{A}}%
+ \kern-.15em
+ T\kern-.1667em
+ \lower.7ex\hbox{E}\kern-.125em
+ X%
+ \endgroup}
+\def\bLaTeX{\b@LaTeX}
+
+
+\@ifundefined{BibTeX}
+ {\def\BibTeX{{\rmfamily B\kern-.05em{\sc i\kern-.025em b}\kern-.08em%
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}{}
+\@ifundefined{ConTeXt}
+ {\def\ConTeXt{{\rmfamily Con\TeX t}}}{}
+%DG \@ifundefined{SliTeX}
+%DG {\def\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox
+%DG \textsc{i}\kern -.03em\TeX}}}{}
+\@ifundefined{PlainTeX}{\def\PlainTeX{\textsc{Plain}\kern2pt\TeX}}{}
+
+\def\reflect#1{{\setbox0=\hbox{#1}\rlap{\kern0.5\wd0
+ \special{x:gsave}\special{x:scale -1 1}}\box0 \special{x:grestore}}}
+\def\XePersian{\leavevmode$\smash{\hbox{X\lower.5ex
+ \hbox{\kern-.125em\reflect{E}}Persian}}$}
+
+%%%%%%%%%%%%%%%%%%%% Quick reference %%%%%%%%%%%%%%%%%%%%
+
+
+
+% An entry in \quickref is of the form: \qentry{type}{entry}
+\def\quickref{}
+\long\def\addtoquickref#1#2{%
+ \expandafter\gdef\expandafter\quickref\expandafter{%
+ \quickref\qentry{#1}{#2}}}
+\def\qentry#1{\@nameuse{qr@#1}}
+
+\long\def\addtoquickref#1#2{}
+
+\def\MakeQuickRef{%
+ \long\def\addtoquickref##1##2{%
+ \wlog{}%
+ \toks@{\qentry{##1}{##2}}%
+ \message{\the\toks@}%
+ \wlog{}%
+ \let\MakeQuickRef\relax}}
+
+%% For switching into landscape mode for the Quick Reference:
+\let\NormalShipout\shipout
+\newbox\OutputBox
+\def\LandscapeMode{%
+ \long\def\shipout##1##2{%
+ \setbox\OutputBox=\hbox{\rput[tl]{90}{\vbox{##2}}}%
+ \NormalShipout\box\OutputBox}%
+ \voffset 9in}
+
+% This makes the Quick Reference:
+\def\QuickReference{%
+ \begin{Landscape}{\paperwidth}{\paperheight}{\rotateleft}
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \topmargin -.5in
+ \textheight 6.5in
+ \textwidth 9in
+ \columnsep 60pt
+ \footskip 0pt
+ \footheight 0pt
+ \headheight 15pt
+ \headsep 40pt
+ \parskip 4pt plus 1pt minus 1pt
+ \UsePageParameters
+ \twocolumn
+ \def\label##1{}
+ \subsechang=-.25in
+ \pagenumbering{Roman}
+ \pagestyle{quickref}
+ \MacroDefCodes
+ \let\Main\string
+ \let\MainFont\UsageFont
+ \MainFont
+ \quickref
+ \end{Landscape}}
+\let\QuickReference\relax
+
+\def\ps@quickref{%
+ \def\@oddhead{%
+ \large\bfseries\sffamily
+ \hbox to .5\textwidth{\XePersian\ v\Version\hfill}%
+ \hbox to \z@{\hss Quick Reference\hss}%
+ \hbox to .5\textwidth{\hfill\thepage}}
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{}\def\@evenfoot{}}
+
+% For page numbering in the QR:
+\setbox\pst@boxg=\hbox{\UsageFont 99}
+\newdimen\refnumdim
+\refnumdim=\wd\pst@boxg
+\def\refnum#1{\hbox to \refnumdim{\hss\rmfamily\bfseries\pageref{#1}}}
+
+% Section commands that add an entry to the QR:
+\def\Section#1{\addtoquickref{section}{#1}\@checksec\section{#1}}
+\def\Subsection#1{\addtoquickref{section}{#1}\subsection{#1}}
+
+% This is just an error checker:
+\def\@checksec{%
+ \def\@tempa{document}%
+ \ifx\@tempa\@currenvir\else
+ \@latexerr{\string\Section\space occurred inside
+ \@currenvir\space environment}\@ehc
+ \expandafter\end\expandafter{\@currenvir}%
+ \expandafter\@checksec
+ \fi}
+
+% The qr@ definitions:
+\def\qr@@object#1{\mbox{\begingroup\escapechar`\+%
+ \refnum{\string#1}\endgroup\hskip 1em\string#1}}
+\def\qr@object#1{\qr@@object#1\par}
+\def\qr@@param#1=#2\@nil{\refnum{\string#1}}
+\def\qr@param#1{\leavevmode\hbox to\hsize{\qr@@param#1\@nil\hskip 1em#1}\par}
+\def\qr@section#1{\subsection*{#1}}
+\long\def\qr@center#1{\begin{center}#1\end{center}}
+
+%%%%%%%%%%%%%%%%%%%% Parts %%%%%%%%%%%%%%%%%%%%
+
+\font\bighelv=phvb at 88bp
+
+
+\def\part{\clearpage\leavevmode\@ifstar{\part@ii}{\part@i}}
+\def\part@i#1{%
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\protect\pnumberline{\thepart}#1}%
+ \lower 20pt\hbox to \z@{\hss{\bighelv\Roman{part}}\hskip 2em}%
+ \part@iii{#1}}
+\def\part@ii#1{\addcontentsline{toc}{part}{#1}\part@iii{#1}}
+\def\part@iii#1{%
+\markright{#1}{\sffamily\Huge\bfseries#1}\par\vskip 2cm\@afterheading}
+\def\thepart{\Roman{part}}
+\def\pnumberline#1{Part #1\hspace{1cm}}
+
+\def\l@part#1#2{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{\lpartskip}%
+ \begingroup
+ \@tempdima 1em
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\large\bfseries\leavevmode#1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak
+ \endgroup}
+\newskip\lpartskip
+\lpartskip 1.25em plus 1pt minus 1pt
+
+%%%%%%%%%%%%%%%%%%%% Parameter definitions and indexing %%%%%%%%%%%%%%%%%%%%
+
+% Like \MainEnvIndex, etc., but for parameters:
+\def\MainParIndex{\SpecialIndex{parameter}{main}}
+\def\UsageParIndex{\SpecialIndex{parameter}{usage}}
+
+% Like \MainPar, but for parameters. Can optionally include =foo.
+\def\MainPar#1{\@MainPar#1==\@nil}
+\def\@MainPar#1=#2=#3\@nil{%
+ \MainParIndex{#1}%
+ \label{#1}%
+ {\MainFont #1\ifx#3=\relax=\MetaFont#2\fi}}
+
+% Analogous to \n, but optionally argument can include =foo.
+\def\p#1{\@p#1==\@nil}
+\def\@p#1=#2=#3\@nil{%
+ \UsageParIndex{#1}%
+ {\UsageFont #1\ifx#3=\relax=#2\fi}}
+
+% For listing parameter definitions in a {description} environment:
+\def\pitem[#1]{\@ifnextchar({\@pitem#1}{\@@pitem#1\@nil}}
+\def\@pitem#1=#2(#3){%
+ \item[\MainFont#1=\MetaFont#2]% % Set the definition in \MainFont
+ \MainParIndex{#1}%
+ \label{#1}%
+ \addtoquickref{param}{#1={\MetaFont #2}\hfill {\rmfamily Default:} #3}%
+ \hfill {\MainFont {\rmfamily Default:} #3}\par}
+\def\@@pitem#1=#2\@nil{%
+ \@ifundefined{default@#1}%
+ {\@warning{Parameter `#1' default not defined.}\@eha\@pitem#1=#2()}
+ {\@pitem#1=#2(\csname default@#1\endcsname)}}
+
+
+\begingroup
+ \catcode`\@=12
+ \catcode`\{=12
+ \catcode`\}=12
+ \catcode`\&=1
+ \catcode`\^=2
+ \def\psset@&%
+ \begingroup
+ \catcode`\\=12
+ \pssetxx^
+ \def\pssetxx#1{#2}&%
+ \expandafter\gdef\csname default@#1\endcsname&#2^%
+ \endgroup^
+ \csname @input\endcsname&defaults.pst^
+\endgroup
+
+% For putting parameter definitions in an Ex environment:
+\def\Par#1{\@ifnextchar({\@Par#1}{\@@Par#1\@nil}}
+\def\@Par#1=#2(#3){%
+ \leavevmode
+ \MainParIndex{#1}%
+ \label{#1}%
+ \addtoquickref{param}{#1={\MetaFont #2}\hfill {\rmfamily Default:} #3}%
+ \hbox to\linewidth{%
+ \MainFont #1={\MetaFont#2}\hfill {\rmfamily Default:} #3}\par}
+\def\@@Par#1=#2\@nil{%
+ \@ifundefined{default@#1}%
+ {\@warning{Parameter `#1' default not defined.}\@Par#1=#2()}
+ {\@Par#1=#2(\csname default@#1\endcsname)}}
+
+
+
+
+\begingroup
+ \catcode`\(=13
+ \catcode`\,=13
+ \catcode`\==13
+ \gdef\MacroDefCodes{%
+ \@MD
+ \catcode`\(13
+ \catcode`\^^M12
+ \catcode`\`13
+ \catcode`\,13
+ \catcode`\!1
+ \catcode`\@2
+ \def~{}%
+ \def={{\fontshape{n}\selectfont\string=}}%
+ \def,{{\fontshape{n}\selectfont\string,}}%
+ \def(##1){\string({\MetaFont ##1})}}
+\endgroup
+
+\begingroup
+ \catcode`\`=13 \gdef`#1'{{\OpArgFont #1}}
+\endgroup
+
+\begingroup
+ \catcode`\^^M=12\relax%
+ \gdef\GetMacroDef#1{\begingroup\MacroDefCodes\@GetMacroDef{#1}}%
+ \gdef\@GetMacroDef#1#2^^M{#1{#2}\endgroup}%
+\endgroup
+
+% For listing macro definitions in a "description" environment:
+\def\mitem{\GetMacroDef\@mitem}
+\def\@mitem#1{%
+ \item[{\MainFont\Main#1}]%
+ \addtoquickref{object}{#1}%
+ \leavevmode\par}
+
+% For listing graphics object definitions in a {description} environment:
+% The optional *[par] is inserted automatically.
+\def\oitem{\GetMacroDef\@oitem}
+\def\@oitem#1{\@@oitem#1\@nil}
+\def\@@oitem#1#2\@nil{\@mitem{#1{\OpArgFont*[{\MetaFont par}]}#2}}
+
+% For generic macro definition, usually to be put in a displayed env.
+\def\object{\GetMacroDef\@object}
+\def\@object#1{\addtoquickref{object}{#1}{\MainFont\Main#1\@@par}}
+
+% For a single displayed macro definition:
+\def\Mac{\GetMacroDef\@Mac}
+\def\@Mac#1{\begin{Ex}\@object{#1}\end{Ex}}
+
+
+%% We must hack the generation of indexes modified by `hyperref'
+\def\@@wrindex#1|#2|#3\\{%
+ \ifx\\#2\\%
+ \protected@write\@indexfile{}{%
+% \string\indexentry{#1|hyperpage}{\thepage}%
+ \string\indexentry{#1}{\thepage}%
+ }%
+ \else
+ \def\Hy@temp@A{#2}%
+ \ifcase0\ifx\Hy@temp@A\HyInd@ParenLeft 1\fi
+ \ifx\Hy@temp@A\HyInd@ParenRight 1\fi
+ \relax
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|#2}{\thepage}%
+ }%
+ \else
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|#2hyperpage}{\thepage}%
+ }%
+ \fi
+ \fi
+ \endgroup
+ \@esphack
+}
+
+%%%%%%%%%%%%%%%%%%%% Indexes %%%%%%%%%%%%%%%%%%%%
+
+\def\PrintUserIndex{%
+ \clearpage
+ \columnsep=20pt
+ \advance\oddsidemargin\sechang
+ \advance\evensidemargin\sechang
+ \advance\textwidth-\sechang
+ \sechang=0pt
+ \onecolumn
+ \@input{\jobname.ind}}
+
+%%%%%%%%%%%%%%%%%%%% Special indexing for User's Guides %%%%%%%%%%%%%%%%%%%%
+
+\@ifundefined{actualchar}{\def\actualchar{@}}{}
+\@ifundefined{quotechar}{\def\quotechar{"}}{}
+\@ifundefined{levelchar}{\def\levelchar{!}}{}
+\@ifundefined{encapchar}{\def\encapchar{|}}{}
+\@ifundefined{verbatimchar}{\def\verbatimchar{+}}{}
+
+%% These are the indexing commands:
+
+%% Commands: \MainIndex \UsageIndex
+%% Environments: \MainEnvIndex \UsageEnvIndex
+%% Style options: \MainOptionIndex \UsageOptionIndex
+%% Counters: \MainCntIndex \UsageCntIndex
+
+\def\@Index#1{\@bsphack\index{#1}\@esphack}
+\def\Index#1#2{%
+ \@bsphack
+ \index{\expandafter\@gobble\string#2\actualchar\string
+ \verb\quotechar*\verbatimchar\string#2\verbatimchar
+ \encapchar #1}}
+{\catcode`\!=0 !catcode`!\=12!gdef!special@gobble#1{!if\#1!else#1!fi}}
+\def\MainIndex{\Index{main}}
+\def\UsageIndex{\Index{usage}}
+\def\SpecialIndex#1#2#3{%
+ \@Index{#3\actualchar{\ttfamily #3} (#1)\encapchar #2}%
+ \@Index{#1s:\levelchar{\ttfamily #3}\encapchar #2}}
+\def\MainEnvIndex{\SpecialIndex{environment}{main}}
+\def\UsageEnvIndex{\SpecialIndex{environment}{usage}}
+\def\MainOptionIndex{\SpecialIndex{option}{main}}
+\def\UsageOptionIndex{\SpecialIndex{option}{usage}}
+\def\MainCntIndex{\SpecialIndex{counter}{main}}
+\def\UsageCntIndex{\SpecialIndex{counter}{usage}}
+
+%% Font for index page numbers:
+\def\main#1{\textbf{\hyperpage{#1}}}
+\def\usage#1{\hyperpage{#1}}
+
+%% These combine various functions:
+
+%% Commands: \Main \Usage
+%% Environments: \MainEnv \UsageEnv
+%% Style options: \MainOption \UsageOption
+%% Counters: \MainCnt \UsageCnt
+
+%% The "Main" ones
+%% * Index argument.
+%% * Print argument with \MainFont
+%% * Create label +foo, e+foo or o+foo.
+
+%% The "Usage" ones
+%% * Index argument.
+%% * Print argument with \UsageFont.
+
+\def\SpecialLabel#1#2+{\label{+#2}}
+\def\LabelIndex#1{\MainIndex{#1}\expandafter\SpecialLabel\string#1+}
+\def\Main#1{%
+ \MainIndex{#1}%
+ \expandafter\SpecialLabel\string#1+%
+ {\MainFont\string#1}}
+\def\Usage#1{\UsageIndex{#1}{\UsageFont\string#1}}
+\def\MainEnv#1{%
+ \MainEnvIndex{#1}%
+ \label{e+#1}%
+ {\MainFont #1}}
+\def\UsageEnv#1{\UsageEnvIndex{#1}{\UsageFont #1}}
+\def\MainOption#1{%
+ \MainOptionIndex{#1}%
+ \label{o+#1}%
+ {\MainFont #1}}
+\def\UsageOption#1{\UsageOptionIndex{#1}{\UsageFont #1}}
+\def\MainCnt#1{%
+ \MainCntIndex{#1}%
+ \label{c+#1}%
+ {\MainFont #1}}
+\def\UsageCnt#1{\UsageCntIndex{#1}{\UsageFont #1}}
+
+%% These are abbreviations.
+\def\N{\Main}
+\def\n{\Usage}
+\def\E{\MainEnv}
+\def\e{\UsageEnv}
+\def\O{\MainOption}
+\def\o{\UsageOption}
+\def\C{\MainCnt}
+% The \c macro was already defined for coordinates
+%\def\c{\UsageCnt}
+
+
+%% User's guide and documented code have different index prologue.
+\def\PrintUserIndex{{\let\ps@plain\@empty\@input{\jobname.ind}}}
+
+%% This is for listing commands in a description environment.
+\def\xitem#1{\item[\Main{#1}]}
+
+\begingroup
+ \catcode`\<=1 \catcode`\>=2
+ \catcode`\{=13 \catcode`\}=12
+ \catcode`\[=13
+ \gdef\@MD<%
+ \catcode`\{=13 \catcode`\}=12 \catcode`\[=13
+ \def{##1}<\{<\MetaFont ##1\/>\}>%
+ \def[##1]<\string[<\MetaFont ##1\/>]>>
+\endgroup
+\def\MD{%
+ \NotNested
+ \Ex
+ \begingroup
+ \@MD
+ \def\end{\par\endgroup\end}%
+ \def\\{\@centercr\Main}%
+ \MainFont
+ \Main}
+\def\endMD{\endEx}
+
+%%%%%%%%%%%%%%%%%%%% Framed warnings %%%%%%%%%%%%%%%%%%%%
+
+\newbox\bombbox
+\setbox\bombbox=\hbox to\z@{%
+ \hss
+ \rput[r](-1.5cm,0){%
+ \psset{unit=7pt}
+ \begin{pspicture}(-4,-4)(4,4)
+ \pscircle[fillcolor=gray,fillstyle=solid]{4}
+ \rput{45}{\psscaleboxto(6,0){\textsf{XE}\kern-1pt}}
+ \psellipse*(0,3.8)(1,.2)
+ \psellipse*(0,5.5)(1,.2)
+ \psframe*(-1,3.8)(1,5.5)
+ \psbezier(0,5.5)(0,7)(1,8)(3.5,8)
+ \multido{\r=-0+40}{9}{\rput{\r}(3.5,8){\psline(0,0)(.4,0)}}
+ \end{pspicture}}}
+
+\def\Warning{%
+ \trivlist\item[]
+ \leavevmode\kern\@totalleftmargin
+ \valign\bgroup%
+ \vfil##\vfil\cr
+ \copy\bombbox\cr
+ \minipage{\textwidth}
+ \quote
+ \emph{Warning:}\hskip 1em
+ \ignorespaces}
+\def\endWarning{\endquote\endminipage\cr\egroup\endtrivlist}
+
+\newbox\filebox
+\setbox\filebox=\hbox{%
+ \pspicture(-1,-.5)(1,.7)
+ \pspolygon[linearc=2pt,shadow=true,shadowangle=45,xunit=1.1]%
+ (-1,-.55)(-1,.5)(-.8,.5)(-.8,.65)(-.2,.65)(-.2,.5)(1,.5)(1,-.55)
+ \endpspicture}
+\def\File#1{%
+ \leavevmode
+ \marginpar{%
+ \leavevmode\lower 20pt\hbox{%
+ \hbox to0pt{\hbox to \linewidth{\hss\copy\filebox\hss}\hss}%
+ \raise 10pt\hbox to \linewidth{\hss\large\bfseries\sffamily #1\hss}}}%
+ \ignorespaces}
+\def\drivers{\noindent\small Driver notes:\hskip 1em\ignorespaces}
+\endinput