summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/hyperref/hyperref.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/hyperref/hyperref.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/hyperref/hyperref.dtx')
-rw-r--r--macros/latex/contrib/hyperref/hyperref.dtx27659
1 files changed, 27659 insertions, 0 deletions
diff --git a/macros/latex/contrib/hyperref/hyperref.dtx b/macros/latex/contrib/hyperref/hyperref.dtx
new file mode 100644
index 0000000000..ec3f7c3e2e
--- /dev/null
+++ b/macros/latex/contrib/hyperref/hyperref.dtx
@@ -0,0 +1,27659 @@
+% \iffalse
+%% File: hyperref.dtx Copyright 1995-2001 Sebastian Rahtz,
+%% with portions written by David Carlisle and Heiko Oberdiek,
+%% 2001-2012 Heiko Oberdiek.
+%% 2016-2018 Oberdiek Package Suport Group
+%% https://github.com/ho-tex/hyperref/issues
+%%
+%% This file is part of the `Hyperref Bundle'.
+%% -------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Heiko Oberdiek.
+%%
+%% The list of all files belonging to the `Hyperref Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%<package|nohyperref|driver|check>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+%<package>\ProvidesPackage{hyperref}
+%<nohyperref>\ProvidesPackage{nohyperref}
+%<driver>\ProvidesFile{hyperref.drv}
+%<check>\ProvidesFile{hycheck.tex}
+%<hypertex>\ProvidesFile{hypertex.def}
+%<pdftex>\ProvidesFile{hpdftex.def}
+%<luatex>\ProvidesFile{hluatex.def}
+%<pdfmark>\ProvidesFile{pdfmark.def}
+%<vtexpdfmark>\ProvidesFile{hvtexmrk.def}
+%<dvips>\ProvidesFile{hdvips.def}
+%<dvipsone>\ProvidesFile{hdvipson.def}
+%<textures>\ProvidesFile{htexture.def}
+%<dviwindo>\ProvidesFile{hdviwind.def}
+%<dvipdfm>\ProvidesFile{hdvipdfm.def}
+%<xetex>\ProvidesFile{hxetex.def}
+%<vtex>\ProvidesFile{hvtex.def}
+%<vtexhtml>\ProvidesFile{hvtexhtml.def}
+%<tex4ht>\ProvidesFile{htex4ht.def}
+%<tex4htcfg>\ProvidesFile{htex4ht.cfg}
+%<pd1enc>\ProvidesFile{pd1enc.def}
+%<puenc>\ProvidesFile{puenc.def}
+%<puvnenc>\ProvidesFile{puvnenc.def}
+%<puarenc>\ProvidesFile{puarenc.def}
+%<psdextra>\ProvidesFile{psdextra.def}
+%<!none> [2019/06/12 v6.88h %
+%<package> Hypertext links for LaTeX]
+%<nohyperref> Dummy hyperref (SR)]
+%<driver> Hyperref documentation driver file]
+%<check> Hyperref test file]
+%<hypertex> Hyperref driver for HyperTeX specials]
+%<hypertex>\Hy@VersionCheck{hypertex.def}
+%<pdftex> Hyperref driver for pdfTeX]
+%<pdftex>\Hy@VersionCheck{hpdftex.def}
+%<luatex> Hyperref driver for luaTeX]
+%<luatex>\Hy@VersionCheck{hluatex.def}
+%<pdfmark> Hyperref definitions for pdfmark specials]
+%<pdfmark>\Hy@VersionCheck{pdfmark.def}
+%<vtexpdfmark> Hyperref driver for VTeX in PDF/PS mode (pdfmark specials)]
+%<vtexpdfmark>\Hy@VersionCheck{hvtexmrk.def}
+%<dvips> Hyperref driver for dvips]
+%<dvips>\Hy@VersionCheck{hdvips.def}
+%<dvipsone> Hyperref driver for dvipsone]
+%<dvipsone>\Hy@VersionCheck{hdvipson.def}
+%<textures> Hyperref driver for Textures]
+%<textures>\Hy@VersionCheck{htexture.def}
+%<dviwindo> Hyperref driver for dviwindo]
+%<dviwindo>\Hy@VersionCheck{hdviwind.def}
+%<dvipdfm> Hyperref driver for dvipdfm]
+%<dvipdfm>\Hy@VersionCheck{hdvipdfm.def}
+%<xetex> Hyperref driver for XeTeX]
+%<xetex>\Hy@VersionCheck{hxetex.def}
+%<vtex> Hyperref driver for VTeX in PDF/PS mode]
+%<vtex>\Hy@VersionCheck{hvtex.def}
+%<vtexhtml> Hyperref driver for VTeX in HTML mode]
+%<vtexhtml>\Hy@VersionCheck{hvtexhtm.def}
+%<tex4ht> Hyperref driver for TeX4ht]
+%<tex4ht>\Hy@VersionCheck{htex4ht.def}
+%<tex4htcfg> Hyperref configuration file for TeX4ht]
+%<pd1enc> Hyperref: PDFDocEncoding definition (HO)]
+%<puenc> Hyperref: PDF Unicode definition (HO)]
+%<puvnenc> Hyperref: Additions to puenc.def for VnTeX]
+%<puarenc> Hyperref: Additions to puenc.def for Arabi]
+%<psdextra> Hyperref: Additions to PDF string support]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{array}
+\usepackage{ifluatex,ifxetex}
+\ifnum 0\ifluatex 1\else\ifxetex 1\fi\fi=0 %
+ \usepackage[T1]{fontenc}%
+ \renewcommand*{\ttdefault}{lmvtt}%
+\else
+ \usepackage{fontspec}%
+ \renewcommand*{\ttdefault}{lmvtt}%
+\fi
+\usepackage[%
+ colorlinks,%
+ hyperindex=false,% done by hypdoc
+ pdfusetitle,%
+ pdfpagelabels%
+]{hyperref}
+\usepackage[numbered]{hypdoc}
+\usepackage{bmhydoc}
+\pdfstringdefDisableCommands{%
+ \let\\\textbackslash
+}%
+\EnableCrossrefs
+\CodelineIndex
+\setlength{\hfuzz}{2pt}
+\begin{document}
+ %
+ % title
+ %
+ \GetFileInfo{hyperref.sty}%
+ \title{Hypertext marks in \LaTeX}%
+ \author{Sebastian Rahtz (deceased)\\%
+ Heiko Oberdiek (maintainer)\\%
+ \texttt{https://github.com/ho-tex/hyperref/issues}}%
+ % \date{processed \today}%
+ \date{\filedate\space\fileversion}%
+ \maketitle
+ %
+ % overview
+ %
+ \makeatletter
+ \@ifundefined{HyperrefOverview}{}{%
+ \HyperrefOverview\relax
+ \newpage
+ }%
+ %
+ % table of contents
+ %
+ \section{\contentsname}%
+ \makeatletter
+ \@starttoc{toc}%
+ \newpage
+ %
+ % source code documentation
+ %
+ \let\Email\nolinkurl
+ \DocInput{hyperref.dtx}%
+ %
+ % index
+ %
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \MakeShortVerb{|}
+% \StopEventually{}
+%
+% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let}
+% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi}
+% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup}
+% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand}
+% \DoNotIndex{\space,\@empty,\special}
+% \DoNotIndex{\\,\0,\1,\2,\8}
+% \makeatletter
+% \let\SavedTheIndex\theindex
+% \def\theindex{^^A
+% \clearpage
+% \addtolength{\textwidth}{\marginparwidth}^^A
+% \addtolength{\textwidth}{\marginparsep}^^A
+% \setlength{\linewidth}{\textwidth}^^A
+% \setlength{\hsize}{\textwidth}^^A
+% \setlength{\oddsidemargin}{\paperwidth}^^A
+% \addtolength{\oddsidemargin}{-\textwidth}^^A
+% \setlength{\oddsidemargin}{.5\oddsidemargin}^^A
+% \addtolength{\oddsidemargin}{-1in}^^A
+% \setlength{\evensidemargin}{\oddsidemargin}^^A
+% \SavedTheIndex
+% }
+% \g@addto@macro\theindex{^^A
+% \parfillskip=0pt plus 1fil
+% }
+% \makeatother
+%
+% \providecommand*{\eTeX}{\mbox{$\varepsilon$-\TeX}}
+%
+% \section{File hycheck.tex}
+%
+% Many commands of \LaTeX\ or other packages cannot be
+% overloaded, but have to be redefined by hyperref directly.
+% If these commands change in newer versions, these
+% changes are not noticed by hyperref.
+% With this test file this situation can be checked.
+% It defines the command \cmd{\checkcommand} that
+% is more powerful than \LaTeX's \cmd{\CheckCommand},
+% because it takes \cmd{\DeclareRobustCommand} and
+% optional parameters better into account.
+%
+% \begin{macrocode}
+%<*check>
+\documentclass{article}
+\makeatletter
+% \end{macrocode}
+%
+% \begin{macro}{\checklatex}
+% Optional argument: release date of \LaTeX.
+% \begin{macrocode}
+\newcommand*{\checklatex}[1][]{%
+ \typeout{}%
+ \typeout{* Format: `LaTeX2e' #1}%
+ \typeout{\space\space Loaded: `\fmtname' \fmtversion}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\checkpackage}
+% The argument of \cmd{\checkpackage} is the package name
+% without extension optionally followed by a release date.
+% \begin{macrocode}
+\newcommand*{\checkpackage}[1]{%
+ \def\HyC@package{#1}%
+ \let\HyC@date\@empty
+ \@ifnextchar[\HyC@getDate\HyC@checkPackage
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@getDate}
+% The release date is scanned.
+% \begin{macrocode}
+\def\HyC@getDate[#1]{%
+ \def\HyC@date{#1}%
+ \HyC@checkPackage
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@checkPackage}
+% \begin{macrocode}
+\def\HyC@checkPackage{%
+ \typeout{}%
+ \begingroup
+ \edef\x{\endgroup
+ \noexpand\RequirePackage{\HyC@package}%
+ \ifx\HyC@date\@empty\relax\else[\HyC@date]\fi%
+ }%
+ \x
+ \typeout{}%
+ \typeout{%
+ * Package `\HyC@package'%
+ \ifx\HyC@date\@empty
+ \else
+ \space\HyC@date
+ \fi
+ }%
+ \@ifundefined{ver@\HyC@package.sty}{%
+ }{%
+ \typeout{%
+ \space\space Loaded: `\HyC@package' %
+ \csname ver@\HyC@package.sty\endcsname
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\checkcommand}
+% The macro \cmd{\checkcommand} parses the next
+% tokens as a \LaTeX\ definition and compares
+% this definition with the current meaning of
+% that command.
+% \begin{macrocode}
+\newcommand*{\checkcommand}[1]{%
+ \begingroup
+ \ifx\long#1\relax
+ \expandafter\HyC@checklong
+ \else
+ \def\HyC@defcmd{#1}%
+ \expandafter\let\expandafter\HyC@next
+ \csname HyC@\expandafter\@gobble\string#1\endcsname
+ \expandafter\HyC@checkcommand
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@checklong}
+% The definition command \cmd{\def} or \cmd{\edef}
+% is read.
+% \begin{macrocode}
+\def\HyC@checklong#1{%
+ \def\HyC@defcmd{\long#1}%
+ \expandafter\let\expandafter\HyC@next
+ \csname HyC@\expandafter\@gobble\string#1\endcsname
+ \HyC@checkcommand
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@checkcommand}
+% The optional star of \LaTeX's definitions is parsed.
+% \begin{macrocode}
+\def\HyC@checkcommand{%
+ \ifx\HyC@next\relax
+ \PackageError{hycheck}{%
+ Unknown command `\expandafter\strip@prefix\meaning\HyC@cmd'%
+ }\@ehd
+ \expandafter\endinput
+ \fi
+ \@ifstar{%
+ \def\HyC@star{*}%
+ \HyC@check
+ }{%
+ \let\HyC@star\@empty
+ \HyC@check
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@check}
+% The macro \cmd{\HyC@check} reads the
+% definition command.
+% \begin{macrocode}
+\def\HyC@check#1{%
+ \def\HyC@cmd{#1}%
+ \let\HyC@org@cmd#1%
+ \let#1\relax
+ \let\HyC@param\@empty
+ \HyC@Toks{}%
+ \let\HyC@org@optcmd\HyC@noValue
+ \let\HyC@org@robustcmd\HyC@noValue
+ \let\HyC@org@robustoptcmd\HyC@noValue
+ \HyC@next
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@noValue}
+% \begin{macrocode}
+\def\HyC@noValue{NoValue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@newcommand}
+% The code for \cmd{\newcommand}.
+% \begin{macrocode}
+\def\HyC@newcommand{%
+ \let\HyC@@cmd\HyC@cmd
+ \@ifnextchar[\HyC@nc@opt\HyC@nc@noopt
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@Toks}
+% A register for storing the default value of an
+% optional argument.
+% \begin{macrocode}
+\newtoks\HyC@Toks
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@nc@noopt}
+% This macro \cmd{\HyC@nc@noopt} is called, if the
+% parser has reached the definition text.
+% \begin{macrocode}
+\long\def\HyC@nc@noopt#1{%
+ \edef\x{%
+ \expandafter\noexpand\HyC@defcmd
+ \HyC@star
+ \expandafter\noexpand\HyC@cmd
+ \HyC@param\the\HyC@Toks
+ }%
+ \x{#1}%
+ \HyC@doCheck
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@nc@opt}
+% This macro scans the first optional argument
+% of a \LaTeX\ definition (number of arguments).
+% \begin{macrocode}
+\def\HyC@nc@opt[#1]{%
+ \def\HyC@param{[{#1}]}%
+ \@ifnextchar[\HyC@nc@default\HyC@nc@noopt
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@nc@default}
+% Macro \cmd{\HyC@nc@default} scans the
+% default for an optional argument.
+% \begin{macrocode}
+\def\HyC@nc@default[#1]{%
+ \HyC@Toks={[{#1}]}%
+ \edef\HyC@optcmd{%
+ \expandafter\noexpand
+ \csname\expandafter\string\HyC@@cmd\endcsname
+ }%
+ \expandafter\let\expandafter\HyC@org@optcmd\HyC@optcmd
+ \HyC@nc@noopt
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyC@DeclareRobustCommand}
+% \cmd{\DeclareRobustCommand}|{\cmd}| makes the command
+% \cmd{\cmd} robust, that then calls |\cmd|\verb*| |
+% with an space at the end of the command name, defined by
+% \cmd{\newcommand}. Therefore the further parsing
+% is done by \cmd{\HyC@nc@opt} or \cmd{\Hy@nc@noopt}
+% of the \cmd{\HyC@newcommand} chain.
+% \begin{macrocode}
+\def\HyC@DeclareRobustCommand{%
+ \edef\HyC@robustcmd{%
+ \expandafter\noexpand
+ \csname\expandafter\expandafter\expandafter\@gobble
+ \expandafter\string\HyC@cmd\space\endcsname
+ }%
+ \expandafter\let\expandafter\HyC@org@robustcmd\HyC@robustcmd
+ \expandafter\let\HyC@robustcmd\relax
+ \let\HyC@@cmd\HyC@robustcmd
+ \@ifnextchar[\HyC@nc@opt\HyC@nc@noopt
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyC@def}
+% \begin{macro}{\HyC@edef}
+% The parameter text of \cmd{\def} or \cmd{\edef} is
+% stored in the token register \cmd{\HyC@Toks}.
+% \begin{macrocode}
+\def\HyC@def#1#{%
+ \HyC@Toks={#1}%
+ \HyC@nc@noopt
+}
+\let\HyC@edef\HyC@def
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\HyC@doCheck}
+% This command performs the checks and prints the result.
+% \begin{macrocode}
+\def\HyC@doCheck{%
+ \typeout{* Checking `\HyC@string\HyC@cmd':}%
+ \HyC@checkItem{cmd}%
+ \HyC@checkItem{robustcmd}%
+ \HyC@checkItem{optcmd}%
+ \HyC@checkItem{robustoptcmd}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@checkItem}
+% A single check.
+% \begin{macrocode}
+\def\HyC@checkItem#1{%
+ \expandafter\ifx\csname HyC@org@#1\endcsname\HyC@noValue
+ \else
+ \expandafter\expandafter\expandafter\ifx
+ \csname HyC@#1\expandafter\endcsname
+ \csname HyC@org@#1\endcsname
+ \expandafter\HyC@checkOk\csname HyC@#1\endcsname
+ \else
+ \expandafter\HyC@checkFailed
+ \csname HyC@#1\expandafter\endcsname
+ \csname HyC@org@#1\endcsname
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@string}
+% \begin{macro}{\HyC@meaning}
+% Some shorthands.
+% \begin{macrocode}
+\def\HyC@string#1{\expandafter\string#1}
+\def\HyC@meaning#1{\expandafter\meaning#1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\HyC@checkOk}
+% The result, if the check succeeds.
+% \begin{macrocode}
+\def\HyC@checkOk#1{%
+ \typeout{\space\space`\HyC@string#1' ok.}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyC@checkFailed}
+% The result, if the check fails.
+% \begin{macrocode}
+\def\HyC@checkFailed#1#2{%
+ \typeout{\space\space`\HyC@string#1' failed.}%
+ \typeout{\space\space* original: \meaning#2}%
+ \typeout{\space\space* expected: \HyC@meaning#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+% **************************************************
+%</check>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% \section{Package options and setup}\label{options}
+%
+%
+% \subsection{Save catcodes}
+% There are many packages that change the standard catcodes.
+%
+% First we save the original meaning of |`| and |=|
+% in the token register |\toks@|, because we need the two
+% characters in the macros \cmd{\Hy@SetCatcodes} and
+% \cmd{\Hy@RestoreCatcodes}.
+% \begin{macrocode}
+\begingroup
+ \@makeother\`%
+ \@makeother\=%
+ \edef\x{%
+ \edef\noexpand\x{%
+ \endgroup
+ \noexpand\toks@{%
+ \catcode 96=\noexpand\the\catcode`\noexpand\`\relax
+ \catcode 61=\noexpand\the\catcode`\noexpand\=\relax
+ }%
+ }%
+ \noexpand\x
+ }%
+\x
+\@makeother\`
+\@makeother\=
+% \end{macrocode}
+% \begin{macro}{\Hy@SetCatcodes}
+% \begin{macrocode}
+\def\Hy@SetCatcodes{%
+ \@makeother\`%
+ \@makeother\=%
+ \catcode`\$=3 %
+ \catcode`\&=4 %
+ \catcode`\^=7 %
+ \catcode`\_=8 %
+ \@makeother\|%
+ \@makeother\:%
+ \@makeother\(%
+ \@makeother\)%
+ \@makeother\[%
+ \@makeother\]%
+ \@makeother\/%
+ \@makeother\!%
+ \@makeother\<%
+ \@makeother\>%
+ \@makeother\.%
+ \@makeother\;%
+ \@makeother\+%
+ \@makeother\-%
+ \@makeother\"%
+ \@makeother\'%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@RestoreCatcodes}
+% \begin{macrocode}
+\begingroup
+ \def\x#1{\catcode`\noexpand#1=\the\catcode`#1\relax}%
+ \xdef\Hy@RestoreCatcodes{%
+ \the\toks@
+ \x\$%
+ \x\&%
+ \x\^%
+ \x\_%
+ \x\|%
+ \x\:%
+ \x\(%
+ \x\)%
+ \x\[%
+ \x\]%
+ \x\/%
+ \x\!%
+ \x\<%
+ \x\>%
+ \x\.%
+ \x\;%
+ \x\+%
+ \x\-%
+ \x\"%
+ \x\'%
+ }%
+\endgroup
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\Hy@SetCatcodes
+% \end{macrocode}
+%
+% It needs the December 95 release of \LaTeX, because it uses
+% |\protected@write|, and it defines commands in options; and the page
+% setup internal code changed at that point. It'll probably break
+% with the later releases!
+%
+% Use package |hobsub-hyperref| for faster package loading.
+% \begin{macrocode}
+\IfFileExists{hobsub-hyperref.sty}{%
+ \RequirePackage{hobsub-hyperref}[2011/01/30]%
+}{}
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{ltxcmds}[2010/11/12]
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{pdftexcmds}[2009/04/10]
+\@ifpackagelater{pdftexcmds}{2010/11/04}{}{%
+ \ltx@IfUndefined{pdfdraftmode}{%
+ \let\pdf@ifdraftmode\ltx@secondoftwo
+ }{%
+ \ifpdf
+ \def\pdf@ifdraftmode{%
+ \ifnum\pdfdraftmode=\ltx@one
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ }%
+ \else
+ \let\pdf@ifdraftmode\ltx@secondoftwo
+ \fi
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{infwarerr}[2010/04/08]
+\RequirePackage{keyval}[1997/11/10]
+\RequirePackage{kvsetkeys}[2007/09/29]
+\RequirePackage{kvdefinekeys}[2011/04/07]
+\RequirePackage{pdfescape}[2007/11/11]
+\RequirePackage{ifvtex}
+\RequirePackage{ifxetex}[2006/08/21]
+\RequirePackage{hycolor}
+\RequirePackage{letltxmacro}[2008/06/13]
+\RequirePackage{auxhook}[2009/12/14]
+\def\Hy@Error{\@PackageError{hyperref}}
+\def\Hy@Warning{\@PackageWarning{hyperref}}
+\def\Hy@WarningNoLine{\@PackageWarningNoLine{hyperref}}
+\def\Hy@Info{\@PackageInfo{hyperref}}
+\def\Hy@InfoNoLine{\@PackageInfoNoLine{hyperref}}
+\def\Hy@Message#1{%
+ \GenericWarning{%
+ (hyperref)\@spaces\@spaces\@spaces\@spaces
+ }{%
+ Package hyperref Message: #1\ltx@gobble
+ }%
+}
+% \end{macrocode}
+%
+% \subsection{Version check}
+%
+% \begin{macro}{\Hy@VersionChecked}
+% \begin{macrocode}
+\chardef\Hy@VersionChecked=0 %
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@VersionCheck}
+% \begin{macrocode}
+\def\Hy@VersionCheck#1{%
+ \begingroup
+ \ltx@IfUndefined{ver@hyperref.sty}{%
+ \Hy@Error{%
+ This should not happen!\MessageBreak
+ Missing hyperref version%
+ }\@ehd
+ }{%
+ \ltx@IfUndefined{ver@#1}{%
+ \Hy@Error{%
+ This should not happen!\MessageBreak
+ Missing version of `#1'%
+ }\@ehd
+ }{%
+ \def\x##1##2##3{%
+ \expandafter\expandafter\expandafter\Hy@@VersionCheck
+ \expandafter\expandafter\expandafter##2%
+ \csname ver@##3\endcsname##1##1\@nil
+ }%
+ \x{ }\y{hyperref.sty}%
+ \x{ }\z{#1}%
+ \ifx\y\z
+ \else
+ \edef\a{#1}%
+ \edef\b{\HyOpt@CustomDriver.def}%
+ \ifx\a\b
+ \Hy@WarningNoLine{%
+ Version mismatch (custom driver)!\MessageBreak
+ * \y: hyperref.sty\MessageBreak
+ * \z: \a
+ }%
+ \else
+ \Hy@Error{%
+ Version mismatch!\MessageBreak
+ * \y: hyperref.sty\MessageBreak
+ * \z: \a
+ }\@ehd
+ \fi
+ \fi
+ }%
+ }%
+ \endgroup
+ \chardef\Hy@VersionChecked=1 %
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@@VersionCheck}
+% \begin{macrocode}
+\def\Hy@@VersionCheck #1#2 #3 #4\@nil{%
+ \def#1{#2 #3}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Checks with regular expressions}
+%
+% \begin{macrocode}
+\ltx@IfUndefined{pdfmatch}{%
+ \def\Hy@Match#1#2#3#4#5{}%
+}{%
+ \def\Hy@Match#1#2#3{%
+ \begingroup
+ \edef\^{\ltx@backslashchar\string^}%
+ \edef\.{\ltx@backslashchar.}%
+ \edef\[{\ltx@backslashchar[}% ]]
+ \edef\${\ltx@backslashchar$}%
+ \edef\({\ltx@backslashchar(}%
+ \edef\){\ltx@backslashchar)}%
+ \edef\|{\ltx@backslashchar|}%
+ \edef\*{\ltx@backslashchar*}%
+ \edef\+{\ltx@backslashchar+}%
+ \edef\?{\ltx@backslashchar?}%
+ \edef\{{\ltx@backslashchar\ltx@leftbracechar}%
+ \edef\}{\ltx@rightbracechar}%
+ \edef\\{\ltx@backslashchar\ltx@backslashchar}%
+ \let\ \ltx@space
+ \ifcase\pdfmatch#2{#3}{#1} %
+ \endgroup
+ \expandafter\ltx@secondoftwo
+ \or
+ \endgroup
+ \expandafter\ltx@firstoftwo
+ \else
+ \Hy@Warning{%
+ Internal error: Wrong pattern!\MessageBreak
+ --> #3 <--\MessageBreak
+ Pattern check ignored%
+ }%
+ \endgroup
+ \expandafter\ltx@firstoftwo
+ \fi
+ }%
+ \ltx@ifpackagelater{ltxcmds}{2010/09/11}{}{%
+ \begingroup
+ \lccode`0=`\{\relax
+ \lowercase{\endgroup
+ \def\ltx@leftbracechar{0}%
+ }%
+ \begingroup
+ \lccode`0=`\}\relax
+ \lowercase{\endgroup
+ \def\ltx@rightbracechar{0}%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \subsection{Compatibility with format dumps}
+%
+% \begin{macro}{\AfterBeginDocument}
+% For use with pre-compiled formats, created using the
+% |ldump| package, there needs to be 2 hooks for adding
+% material delayed until |\begin{document}|.
+% These are called \cmd{\AfterBeginDocument} and
+% \cmd{\AtBeginDocument}.
+% If |ldump| is not loaded, then a single hook suffices
+% for normal \LaTeX{} processing.
+%
+% The default definition of |\AfterBeginDocument| cannot
+% be done by |\let| because of problems with |xypic|.
+% \begin{macrocode}
+\@ifundefined{AfterBeginDocument}{%
+ \def\AfterBeginDocument{\AtBeginDocument}%
+}{}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@AtBeginDocument}
+% For the case that package `hyperref' is loaded
+% using \cs{AtBeginDocument}, we have to wrap the calls
+% of \cs{AtBeginDocument}/\cs{AfterBeginDocument} in
+% \cs{AtEndOfPackage}. However, packages must be
+% loaded in \cs{AtEndOfPackage} \emph{before} package
+% `kvoptions' has to perform its option cleanup.
+% Therefore we use a hook.
+% \begin{macrocode}
+\def\Hy@AtBeginDocument{%
+ \ltx@LocalAppendToMacro\Hy@AtBeginDocumentHook
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@AtEndOfPackage}
+% \begin{macrocode}
+\def\Hy@AtEndOfPackage{%
+ \ltx@LocalAppendToMacro\Hy@AtEndOfPackageHook
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@AtBeginDocumentHook}
+% \begin{macrocode}
+\let\Hy@AtBeginDocumentHook\ltx@empty
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@AtEndOfPackageHook}
+% \begin{macrocode}
+\let\Hy@AtEndOfPackageHook\ltx@empty
+% \end{macrocode}
+% \end{macro}
+% Install the hook, before package `kvoptions' is loaded.
+% \begin{macrocode}
+\AtEndOfPackage{%
+ \Hy@AtEndOfPackageHook
+ \let\Hy@AtEndOfPackageHook\@undefined
+ \AfterBeginDocument{%
+ \Hy@AtBeginDocumentHook{}%
+ \let\Hy@AtBeginDocumentHook\@undefined
+ }%
+}
+% \end{macrocode}
+%
+% Package kvoptions is used for processing options that are
+% given as key value pairs. The package provides
+% |\ProcessKeyvalOptions|, formerly known as
+% |\ProcessOptionsWithKV|.
+% \begin{macrocode}
+\RequirePackage{kvoptions}[2009/07/21]
+% \end{macrocode}
+%
+% \subsection{Switches}
+% \begin{macrocode}
+\newif\ifHy@stoppedearly
+\newif\ifHy@typexml
+\newif\ifHy@activeanchor
+\newif\ifHy@backref
+\newif\ifHy@bookmarks
+\newif\ifHy@bookmarksnumbered
+\newif\ifHy@bookmarksopen
+\newif\ifHy@breaklinks
+\newif\ifHy@pdfcenterwindow
+\newif\ifHy@CJKbookmarks
+\newif\ifHy@colorlinks
+\newif\ifHy@destlabel
+\newif\ifHy@draft
+\let\Hy@finaltrue\Hy@draftfalse
+\let\Hy@finalfalse\Hy@drafttrue
+\newif\ifHy@pdfescapeform
+\newif\ifHy@hyperfigures
+\newif\ifHy@pdffitwindow
+\newif\ifHy@frenchlinks
+\newif\ifHy@hyperfootnotes
+\newif\ifHy@hyperindex
+\newif\ifHy@hypertexnames
+\newif\ifHy@implicit
+\newif\ifHy@linktocpage
+\newif\ifHy@localanchorname
+\newif\ifHy@pdfmenubar
+\newif\ifHy@naturalnames
+\newif\ifHy@nesting
+\newif\ifHy@pdfnewwindowset
+\newif\ifHy@pdfnewwindow
+\newif\ifHy@ocgcolorlinks
+\newif\ifHy@pageanchor
+\newif\ifHy@pdfpagelabels
+\newif\ifHy@pdfpagehidden
+\newif\ifHy@pdfstring
+\newif\ifHy@plainpages
+\newif\ifHy@psize
+\newif\ifHy@raiselinks
+\newif\ifHy@seminarslides
+\newif\ifHy@setpagesize
+\newif\ifHy@texht
+\newif\ifHy@psdextra
+\newif\ifHy@pdftoolbar
+\newif\ifHy@unicode
+\newif\ifHy@pdfusetitle
+\newif\ifHy@verbose
+\let\Hy@debugtrue\Hy@verbosetrue
+\let\Hy@debugfalse\Hy@verbosefalse
+\newif\ifHy@pdfwindowui
+\newif\ifHy@pdfdisplaydoctitle
+\newif\ifHy@pdfa
+% \end{macrocode}
+% Defaults for the switches are now set.
+% \begin{macrocode}
+\Hy@backreffalse
+\Hy@bookmarksnumberedfalse
+\Hy@bookmarksopenfalse
+\Hy@bookmarkstrue
+\Hy@breaklinksfalse
+\Hy@pdfcenterwindowfalse
+\Hy@CJKbookmarksfalse
+\Hy@destlabelfalse
+\Hy@pdfescapeformfalse
+\Hy@hyperfiguresfalse
+\Hy@pdffitwindowfalse
+\Hy@hyperfootnotestrue
+\Hy@hyperindextrue
+\Hy@hypertexnamestrue
+\Hy@implicittrue
+\Hy@linktocpagefalse
+\Hy@localanchornamefalse
+\Hy@pdfmenubartrue
+\Hy@naturalnamesfalse
+\Hy@nestingfalse
+\Hy@pdfnewwindowsetfalse
+\Hy@pdfnewwindowfalse
+\Hy@pageanchortrue
+\Hy@pdfpagelabelstrue
+\Hy@pdfpagehiddenfalse
+\Hy@pdfstringfalse
+\Hy@plainpagesfalse
+\Hy@raiselinksfalse
+\Hy@setpagesizetrue
+\Hy@texhtfalse
+\Hy@psdextrafalse
+\Hy@pdftoolbartrue
+\Hy@typexmlfalse
+\Hy@unicodefalse
+\Hy@pdfusetitlefalse
+\Hy@verbosefalse
+\Hy@pdfwindowuitrue
+\Hy@pdfdisplaydoctitlefalse
+\Hy@pdfafalse
+% \end{macrocode}
+%
+% \section{Common help macros}
+%
+% \begin{macro}{\Hy@StepCount}
+% \begin{macrocode}
+\def\Hy@StepCount#1{\advance#1 by 1 }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@GlobalStepCount}
+% \begin{macrocode}
+\def\Hy@GlobalStepCount#1{\global\advance#1 by 1 }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\newdimen\@linkdim
+\let\Hy@driver\ltx@empty
+\let\MaybeStopEarly\relax
+\newcount\Hy@linkcounter
+\newcount\Hy@pagecounter
+\Hy@linkcounter0
+\Hy@pagecounter0
+% \end{macrocode}
+%
+% \subsection{Macros for recursions}
+%
+% \begin{macrocode}
+\let\Hy@ReturnEnd\@empty
+\long\def\Hy@ReturnAfterFiFiEnd#1\fi#2\Hy@ReturnEnd{\fi\fi#1}
+\long\def\Hy@ReturnAfterElseFiFiEnd#1\else#2\Hy@ReturnEnd{\fi\fi#1}
+% \end{macrocode}
+%
+% \subsection{Babel's protection of shorthand characters}
+%
+% \begin{macro}{\Hy@safe@activestrue}
+% \begin{macro}{\Hy@safe@activesfalse}
+% Babel's switch setting commands cannot used directly,
+% because they can be undefined if babel is not loaded.
+% \begin{macrocode}
+\def\Hy@safe@activestrue{\csname @safe@activestrue\endcsname}
+\def\Hy@safe@activesfalse{\csname @safe@activesfalse\endcsname}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Coordinate transformations}
+%
+% At some places numbers in pdf units are
+% expected (eg: FitBH, ...). The following macros
+% perform the transformation from TeX units (pt)
+% to PDF units (bp).
+%
+% \begin{macro}{\hypercalcbp}
+% The user macro \cmd{\hypercalcbp} can be used, for example,
+% inside option values:
+%\begin{verbatim}
+%pdfstartview={FitBH \hypercalcbp{\paperheight-\topmargin-1in}}
+%\end{verbatim}
+% \begin{itemize}
+% \item
+% It cannot be used inside \cmd{\usepackage}, because
+% LaTeX expands the options before package hyperref
+% is loaded and \cmd{\hypercalcbp} is defined.
+% \item
+% With e-TeX extensions an expandable implementation
+% is very easy; \cmd{\hypercalcbp} can be used
+% everywhere and is expanded at use.
+% \item
+% Without e-TeX's features \cmd{\hypercalcbp} cannot be
+% implemented expandable (practically) and have to
+% be supported by \cmd{\hypercalcbpdef}.
+% Limitations:
+% \begin{itemize}
+% \item Works only in options that use \cmd{\hypercalcbpdef}
+% (currently only |pdfstartview|).
+% \item For calculations package |calc| has to be loaded.
+% \item The expansion of the argument is done at definition time.
+% \end{itemize}
+% \end{itemize}
+% Example (\TeX):
+%\begin{verbatim}
+%\usepackage{calc}
+%\usepackage[...]{hyperref}
+%\hypersetup{
+% pdfstartview={FitBH \hypercalcbp{\paperheight-\topmargin-1in
+% -\headheight-\headsep}
+%}
+%\end{verbatim}
+% \begin{macro}{\hypercalcbp}
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname dimexpr\endcsname\relax
+ \def\hypercalcbpdef#1#2{%
+ \begingroup
+ \toks@{}%
+ \HyCal@scan#2\hypercalcbp\@nil
+ \expandafter\endgroup
+ \expandafter\def\expandafter#1\expandafter{\the\toks@}%
+ }%
+ \def\HyCal@scan#1\hypercalcbp#2\@nil{%
+ \toks@\expandafter{\the\toks@ #1}%
+ \ifx\\#2\\%
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyCal@do#2\@nil
+ }%
+ \fi
+ }%
+ \def\HyCal@do#1#2\@nil{%
+ \@ifpackageloaded{calc}{}{%
+ \Hy@Warning{%
+ For calculations \string\hypercalcbp\space needs\MessageBreak
+ package calc or e-TeX%
+ }%
+ }%
+ \setlength{\dimen@}{#1}%
+ \setlength{\dimen@}{0.99626401\dimen@}%
+ \edef\x{%
+ \toks@{%
+ \the\toks@
+ \strip@pt\dimen@
+ }%
+ }\x
+ \HyCal@scan#2\@nil
+ }%
+\else
+ \def\hypercalcbp#1{%
+ \strip@pt\dimexpr 0.99626401\dimexpr(#1)\relax\relax
+ }%
+ \def\hypercalcbpdef{\def}%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Dealing with PDF strings}\label{sec:pdfstring}
+% The PDF string stuff done by Heiko Oberdiek.
+%
+% Naming convention: All internal commands that are only
+% needed by \cs{pdfstringdef} are prefixed with \cs{HyPsd@}.
+%
+% \subsection{Description of PDF strings}
+% The PDF specification defines several places to hold
+% text strings (bookmark names, document information,
+% text annotations, etc.).
+% The PDF strings have following properties:
+% \begin{itemize}
+% \item They are surrounded by parentheses. The hexadecimal form
+% is not supported.
+% \item Like PostScript language strings they use the same
+% escaping mechanism:\\
+% \begin{tabular}{ll}
+% |\\|& the backslash itself\\
+% \cs{)}, \cs{(}& unbalanced parentheses\\
+% \cs{n}, \cs{r}, \cs{t}, \cs{b}, \cs{f}& special white space
+% escape sequences\\
+% |\|\textit{|ddd|}& octal character code \textit{|ddd|}
+% \end{tabular}
+% \item Strings are stored either in PDFDocEncoding, which is a superset of
+% ISOLatin1 and is compatible with Unicode with character codes
+% below 256, or in Unicode.
+% \end{itemize}
+%
+% \subsection{Definition of
+% \texorpdfstring{\cs{pdfstringdef}}{\\pdfstringdef}}
+% The central macro for dealing with PDF strings is \cs{pdfstringdef}.
+% It defines a command |#1| to be the result of the conversion
+% from the string in |#2| to a legal PDFDocEncoded string.
+% Currently the definition is global, but this can be changed in
+% the future.
+%
+% Important: In \TeX's view PDF strings are written to a file and
+% are expanded only in its mouth. Stomach commands that cannot
+% be expanded further aren't executed, they are written verbatim.
+% But the PDF reader that reads such a string isn't a \TeX{}
+% interpreter!
+%
+% The macro \cs{pdfstringdef} consists of three main parts:
+% \begin{enumerate}
+% \item Preprocessing. Here the expansion is prepared. The encoding
+% is set and many commands are redefined, so that they work
+% appropriate.
+% \item Expansion. The \TeX{} string is expanded the first time
+% to get a PDF string.
+% \item Postprocessing. The result of the expansion is checked and
+% converted to the final form.
+% \end{enumerate}
+%
+% \begin{macro}{\pdfstringdef}
+% \cs{pdfstringdef} works on the tokens in |#2| and converts them to
+% a PDF string as far as possible:
+% \begin{itemize}
+% \item The result should obey the rules of the PDF specification
+% for strings.
+% \item The string can safely processed by \TeX, because the
+% tokens have only catcodes 10 until 12.
+% \end{itemize}
+% The result is stored in the command token given in |#1|.
+% \begin{macrocode}
+\def\pdfstringdef#1#2{%
+% \end{macrocode}
+% Many redefinitions are needed, so all the work is done in a group.
+% \begin{macrocode}
+ \begingroup
+% \end{macrocode}
+%
+% \subsubsection{Preprocessing}
+% \paragraph{Octal escape sequences.}
+% To avoid problems with eight bit or non printable characters, the octal
+% escape notation is supported. So most glyphs in the encoding definitions
+% for PD1 and PU produce these octal escape sequences.
+% All three octal digits have to be used:
+% \begin{itemize}
+% \item Wrong results are avoided, if digits follow that are not part of the
+% octal sequence.
+% \item Macros rely on the fact that the octal sequences always consist of
+% three digits (vtex driver, Unicode support).
+% \end{itemize}
+% The escape sequences start with a backslash. By \cs{string} it will be
+% printed. Therefore it is ensured that the \TeX{} escape character indeed
+% prints as a normal backslash.
+% Eventually this line can be removed, because this is standard
+% \LaTeX{} behaviour.
+% \begin{macrocode}
+ \escapechar`\\%
+% \end{macrocode}
+% From the view of \TeX{} a octal sequence consists of the command tokens
+% \cs{0} until \cs{3} and two digits.
+% For saving tokens \cs{0}, \cs{1}, \cs{2}, and \cs{3} are directly
+% used without a preceding \cs{string} in the glyph definitions.
+% This is done here locally
+% by defining the \cs{0} until \cs{3} commands. So the user
+% can use octal escape sequences directly, the disadvantage is
+% that a previous definition of this short commands does not apply.
+% \begin{macrocode}
+ \edef\0{\string\0}%
+ \edef\1{\string\1}%
+ \edef\2{\string\2}%
+ \edef\3{\string\3}%
+% \end{macrocode}
+% \paragraph{Setting font encoding.}
+% The unicode encoding
+% uses \cs{8} and \cs{9} as marker for the higher byte.
+% \cs{8} is an abbreviation for the higher bytes 0 until 7
+% that can be expressed by one digit. \cs{8} will be
+% converted to \cs{00}. However \cs{9} only marks the next
+% three digits as higher byte and will be removed later.
+%
+% The encoding is set by \cs{enc@update} for optimizing reasons.
+% \begin{macrocode}
+ \ifHy@unicode
+ \edef\8{\string\8}%
+ \edef\9{\string\9}%
+ \fontencoding{PU}%
+ \HyPsd@UTFviii
+ \def\ifpdfstringunicode##1##2{##1}%
+ \else
+ \fontencoding{PD1}%
+ \def\ifpdfstringunicode##1##2{##2}%
+ \fi
+ \let\utf@viii@undeferr\HyPsd@utf@viii@undeferr
+ \enc@update
+% \end{macrocode}
+%
+% \paragraph{Internal encoding commands.}
+% \cs{pdfstringdef} interpretes text strings which are not allowed
+% to contain mathematical stuff. The text glyph commands will produce
+% a warning, if called in math mode. But this warning disturbs while
+% expanding. Therefore we check for math mode here, before
+% \cs{@inmathwarn} will be disabled (see below).
+% \begin{macrocode}
+ \@inmathwarn\pdfstringdef
+% \end{macrocode}
+% If a glyph is used, that isn't in the PD1/PU encoding there will
+% be an infinite error loop, because the NFSS encoding stuff
+% have to be expanded unprotected (\cs{edef}), so that the
+% assigments of \cs{@changed@cmd} don't take place.
+% To patch this behaviour I only found \cs{@inmathwarn}
+% as a usable hook. While an \cs{edef} a warning message by
+% \cs{@inmathwarn} or \cs{TextSymbolUnavailable} cannot be give out,
+% so \cs{@inmathwarn} should be disabled. And with the help of it
+% the assignments in \cs{@changed@cmd} can easily be caught
+% (see below).
+% \begin{macrocode}
+ \let\@inmathwarn\HyPsd@inmathwarn
+% \end{macrocode}
+%
+% Unknown composite characters are built with \cs{add@accent},
+% so it is redefined to provide a warning.
+% \begin{macrocode}
+ \let\add@accent\HyPsd@add@accent
+% \end{macrocode}
+%
+% \paragraph{Commands that don't use NFSS directly.}
+% There are several commands that prints characters in the
+% printable ASCII area that don't obey the NFSS, so they have
+% to be redefined here.
+% UF 29.09.2017: added a mapping for \cs{noboundary}, see issue |#37|
+% \url{https://github.com/ho-tex/hyperref/issues/37}
+% No test for PU, if some definition for PD1 is added it will work too.
+% \begin{macrocode}
+ \let\{\textbraceleft
+ \let\}\textbraceright
+ \let\\\textbackslash
+ \let\#\textnumbersign
+ \let\$\textdollar
+ \let\%\textpercent
+ \let\&\textampersand
+% \let\~\textasciitilde
+ \let\_\textunderscore
+ \let\P\textparagraph
+ \let\ldots\textellipsis
+ \let\dots\textellipsis
+ \ltx@IfUndefined{textEncodingNoboundary}%
+ {}{\let\noboundary\textEncodingNoboundary}%
+% \end{macrocode}
+%
+% \paragraph{Newline}
+% \cmd{\newline} or \cmd{\\} do not work in bookmarks, in text
+% annotations they should expand to \cmd{\r}. In pdf strings
+% \cmd{\\} stands for a backslash. Therefore the commands
+% are disabled now. The user can redefine them for a result
+% what he want:
+% \begin{description}
+% \item[backslash:]
+% |\pdfstringdefDisableCommands{\let\\\textbackslash}|
+% \item[new line:]
+% |\pdfstringdefDisableCommands{\let\\\textCR}|
+% \item[disabled:]
+% |\pdfstringdefDisableCommands{\let\\\empty}|
+% \end{description}
+% At any case, however, the optional argument or the star
+% cannot be scanned in a 100\% sure manner.
+% \begin{macrocode}
+ \def\\{\pdfstringdefWarn\\}%
+ \def\newline{\pdfstringdefWarn\newline}%
+% \end{macrocode}
+%
+% \paragraph{Logos.}
+% Because the box shifting
+% used in the \TeX{} logo does not work while writing to a file,
+% the standard \TeX{} logos are redefined.
+% \begin{macrocode}
+ \def\TeX{TeX}%
+ \def\LaTeX{La\TeX}%
+ \def\LaTeXe{%
+ \LaTeX2%
+ \ifHy@unicode\textepsilon\else e\fi
+ }%
+ \def\eTeX{%
+ \ifHy@unicode\textepsilon\else e\fi
+ -\TeX%
+ }%
+ \def\SliTeX{Sli\TeX}%
+ \def\MF{Metafont}%
+ \def\MP{Metapost}%
+% \end{macrocode}
+%
+% \paragraph{Standard font commands.}
+% Because font changes do not work, the standard font
+% switching commands are disabled.
+% \begin{macrocode}
+ \let\fontencoding\@gobble
+ \let\fontfamily\@gobble
+ \let\fontseries\@gobble
+ \let\fontshape\@gobble
+ \let\fontsize\@gobbletwo
+ \let\selectfont\@empty
+ \let\usefont\@gobblefour
+ \let\emph\@firstofone
+ \let\textnormal\@firstofone
+ \let\textrm\@firstofone
+ \let\textsf\@firstofone
+ \let\texttt\@firstofone
+ \let\textbf\@firstofone
+ \let\textmd\@firstofone
+ \let\textit\@firstofone
+ \let\textsc\@firstofone
+ \let\textsl\@firstofone
+ \let\textup\@firstofone
+ \let\normalfont\@empty
+ \let\rmfamily\@empty
+ \let\sffamily\@empty
+ \let\ttfamily\@empty
+ \let\bfseries\@empty
+ \let\mdseries\@empty
+ \let\itshape\@empty
+ \let\scshape\@empty
+ \let\slshape\@empty
+ \let\upshape\@empty
+ \let\em\@empty
+ \let\rm\@empty
+ \let\Huge\@empty
+ \let\LARGE\@empty
+ \let\Large\@empty
+ \let\footnotesize\@empty
+ \let\huge\@empty
+ \let\large\@empty
+ \let\normalsize\@empty
+ \let\scriptsize\@empty
+ \let\small\@empty
+ \let\tiny\@empty
+ \let\mathversion\@gobble
+ \let\phantom\@gobble
+ \let\vphantom\@gobble
+ \let\hphantom\@gobble
+% \end{macrocode}
+%
+% \paragraph{Package pifont.}
+% \begin{macrocode}
+ \let\ding\HyPsd@ding
+ \let\Cube\HyPsd@DieFace
+%* \HyPsd@DieFace -> \epsdice (epsdice)
+%* \HyPsd@DieFace -> \fcdice (hhcount)
+% \end{macrocode}
+%
+% \paragraph{Environments.}
+% \begin{macrocode}
+ \def\begin#1{\csname#1\endcsname}%
+ \def\end#1{\csname end#1\endcsname}%
+% \end{macrocode}
+%
+% \paragraph{Package color.}
+% \begin{macrocode}
+ \def\textcolor##1##{\@secondoftwo}%
+% \end{macrocode}
+%
+% \paragraph{Upper- and lowercase.}
+% \begin{macrocode}
+ \def\MakeUppercase{\MakeUppercaseUnsupportedInPdfStrings}%
+ \def\MakeLowercase{\MakeLowercaseUnsupportedInPdfStrings}%
+% \end{macrocode}
+%
+% \paragraph{Support of math commands without prefix \texttt{text}.}
+% This is controlled by option ``psdextra'' and only
+% activated with Unicode PDF strings.
+% \begin{macrocode}
+ \ifHy@psdextra
+ \ifHy@unicode
+ \csname psdmapshortnames\endcsname
+ \csname psdaliasnames\endcsname
+ \fi
+ \fi
+% \end{macrocode}
+%
+% \paragraph{Package babel.}
+% Whereever ``naturalnames'' is used, disable \cs{textlatin}
+% (from Babel 3.6k). Thanks to Felix Neubauer
+% (Email: \Email{Felix.Neubauer@gmx.net}).
+% \begin{macrocode}
+ \let\foreignlanguage\@secondoftwo
+ \let\textlatin\@firstofone
+ \ltx@IfUndefined{language@group}{}{%
+ \let\bbl@info\@gobble
+ \csname HyPsd@babel@\language@group\endcsname
+ }%
+ \HyPsd@GreekPatch
+ \HyPsd@SpanishPatch
+ \HyPsd@RussianPatch
+% \end{macrocode}
+% \begin{macrocode}
+ \HyPsd@BabelPatch
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \let\@safe@activestrue\relax
+ \let\@safe@activesfalse\relax
+% \end{macrocode}
+%
+% Disable \cs{cyr}, used in russianb.ldf.
+% \begin{macrocode}
+ \let\cyr\relax
+% \end{macrocode}
+%
+% Redefine \cs{es@roman}, used in spanish.ldf.
+% \begin{macrocode}
+ \let\es@roman\@Roman
+% \end{macrocode}
+%
+% \paragraph{Package german.}
+% \begin{macrocode}
+ \let\glqq\textglqq
+ \let\grqq\textgrqq
+ \let\glq\textglq
+ \let\grq\textgrq
+ \let\flqq\textflqq
+ \let\frqq\textfrqq
+ \let\flq\textflq
+ \let\frq\textfrq
+% \end{macrocode}
+%
+% \paragraph{Package french.} The support is deferred, because
+% it needs |\GenericError| to be disabled (see below).
+%
+% \paragraph{Package FrenchPro.} This package uses:
+% \begin{quote}
+% |\if@mid@expandable{|not fully expandable code|}{|fully expandable code|}|
+% \end{quote}
+% \begin{macrocode}
+ \let\if@mid@expandable\@firstoftwo
+% \end{macrocode}
+%
+% \paragraph{AMS classes.}
+% \begin{macrocode}
+ \HyPsd@AMSclassfix
+% \end{macrocode}
+%
+% \paragraph{Redefinition of \cs{hspace}}
+% \cs{hspace} don't work in bookmarks, the following fix
+% tries to set a space if the argument is a positive length.
+% \begin{macrocode}
+ \let\hspace\HyPsd@hspace
+% \end{macrocode}
+%
+% \paragraph{Commands of referencing and indexing systems.}
+% Some \LaTeX{} commands that are legal in \cs{section} commands
+% have to be disabled here.
+% \begin{macrocode}
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble
+ \let\href\HyPsd@href
+ \let\@mkboth\@gobbletwo
+% \end{macrocode}
+%
+% The \cs{ref} and \cs{pageref} is much more complicate because of their
+% star form.
+% \begin{macrocode}
+ \let\ref\HyPsd@ref
+ \let\pageref\HyPsd@pageref
+ \let\nameref\HyPsd@nameref
+ \let\autoref\HyPsd@autoref
+% \end{macrocode}
+%
+% \paragraph{Miscellaneous commands.}
+% \begin{macrocode}
+ \let\leavevmode\@empty
+ \let\mbox\@empty
+% \end{macrocode}
+% \cs{halign} causes error messages because of the template
+% character |#|.
+% \begin{macrocode}
+ \def\halign{\pdfstringdefWarn\halign\@gobble}%
+% \end{macrocode}
+% \begin{macrocode}
+ \let\ignorespaces\HyPsd@ignorespaces
+% \end{macrocode}
+% \begin{macrocode}
+ \let\Hy@SectionAnchorHref\@gobble
+% \end{macrocode}
+% \begin{macrocode}
+ \let\ensuremath\@firstofone
+% \end{macrocode}
+%
+% \paragraph{Patch for cjk bookmarks.}
+% \begin{macrocode}
+ \HyPsd@CJKhook
+% \end{macrocode}
+%
+% \paragraph{User hook.}
+% The switch \cs{Hy@pdfstring} is turned on. So user commands
+% can detect that they are processed not to be typesetted within
+% \TeX's stomach,
+% but to be expanded by the mouth to give a PDF string.
+% At this place before interpreting the string in |#2| additional
+% redefinitions can by added by the hook \cs{pdfstringdefPreHook}.
+%
+% The position in the middle of the redefinitions is a compromise:
+% The user should be able to provide his own (perhaps better)
+% redefinitions, but some commands should have their original
+% meaning, because they can be used in the hook (\cs{bgroup},
+% or \cs{@protected@testopt}, and \cs{@ifnextchar}
+% for \cs{renewcommand}).
+% \begin{macrocode}
+ \Hy@pdfstringtrue
+ \pdfstringdefPreHook
+% \end{macrocode}
+%
+% \paragraph{Spaces.}
+% For checking the token of the string, spaces must be masked, because
+% they cannot by caught by undelimited arguments.
+% \begin{macrocode}
+ \HyPsd@LetUnexpandableSpace\space
+ \HyPsd@LetUnexpandableSpace\ %
+ \HyPsd@LetUnexpandableSpace~%
+ \HyPsd@LetUnexpandableSpace\nobreakspace
+% \end{macrocode}
+%
+% \paragraph{Package xspace.}
+% \begin{macrocode}
+ \ltx@IfUndefined{@xspace}{%
+ \let\xspace\HyPsd@ITALCORR
+ }{%
+ \let\xspace\HyPsd@XSPACE
+ }%
+ \let\/\HyPsd@ITALCORR
+ \let\bgroup\/%
+ \let\egroup\/%
+% \end{macrocode}
+%
+% \paragraph{Redefinitions of miscellaneous commands.}
+% Hyphenation does not make sense.
+% \begin{macrocode}
+ \let\discretionary\@gobbletwo
+% \end{macrocode}
+%
+% \cs{@ifstar} is defined in \LaTeX\ as follows:
+%\begin{verbatim}
+%\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
+%\end{verbatim}
+% \cs{@ifnextchar} doesn't work, because it uses stomach
+% commands like \cs{let} and \cs{futurelet}. But it
+% doesn't break. Whereas |\@firstoftwo{#1}}| gives an
+% error message because \cs{@firstoftwo} misses its second
+% argument.
+%
+% A mimicry of \cs{@ifnextchar} only with expandible commands
+% would be very extensive and the result would be only an
+% approximation. So here a cheaper solution follows
+% in order to get rid of the error message at least:
+% \begin{macrocode}
+ \def\@ifnextchar{\HyPsd@ifnextchar\@ifnextchar}%
+ \def\kernel@ifnextchar{\HyPsd@ifnextchar\kernel@ifnextchar}%
+ \def\new@ifnextchar{\HyPsd@ifnextchar\new@ifnextchar}%
+ \let\@protected@testopt\HyPsd@protected@testopt
+% \end{macrocode}
+% Support for package `xargs':
+% \begin{macrocode}
+ \let\@protected@testopt@xargs\HyPsd@protected@testopt
+% \end{macrocode}
+%
+% \subsubsection{Expansion}
+% There are several possibilities to
+% expand tokens within \LaTeX:
+% \begin{description}
+% \item[\cs{protected@edef}:]
+% The weakest form isn't usable, because
+% it does not expand the font encoding commands. They are
+% made roboust and protect themselves.
+% \item[\cs{csname}:] First the string is
+% expanded whithin a \cs{csname} and \cs{endcsname}.
+% Then the command name is converted to characters
+% with catcode 12 by \cs{string} and the first
+% escape character removed by \cs{@gobble}.
+% This method has the great \emph{advantage} that
+% stomach tokens that aren't allowed in PDF strings are detected
+% by \TeX{} and reported as errors in order to force the user
+% to write correct things. So he get no wrong results by
+% forgetting the proofreading of his text.
+% But the \emph{disadvantage} is that old wrong code cannot
+% processed without errors. Mainly the error message is very cryptic
+% and for the normal user hard to understand. \TeX{} provides
+% no way to catch the error caused by \cs{csname} or allows to
+% support the user with a descriptive error message. Therefore
+% the experienced user had to enable this behaviour by an
+% option |exactdef| in previous versions less or equal 6.50.
+% \item[\cs{edef}] This version uses this standard form for expansion.
+% It is stronger than \LaTeX's \cs{protected@edef}.
+% So the font encoding mechanism works and the glyph commands
+% are converted to the correct tokens for PDF strings whith the
+% definitions of the PD1 encoding.
+% Because the protecting mechanism of \LaTeX{} doesn't work
+% within an \cs{edef}, there are situations thinkable where
+% code can break. For example, assignments and definitions aren't
+% performed and so undefined command errors or argument
+% parsing errors can occur. But this is only a compatibility problem
+% with old texts. Now there are possibilities to write
+% code that gives correct PDF strings (see \cs{texorpdfstring}).
+% In the most cases unexpandable commands and tokens
+% (math shift, grouping characters) remains. They
+% don't cause an error like with \cs{csname}. However a PDF reader
+% isn't \TeX{}, so these tokens are viewed verbatim. So
+% this version detects them now, and removes them with an
+% descriptive warning for the user. As additional features
+% xspace support is possible and grouping characters can be
+% used without problems, because they are removed silently.
+% \end{description}
+%
+% \paragraph{Generic messages.}
+% While expanding via \cs{xdef} the |\Generic...| messages
+% don't work and causes problems (error messages, invalid |.out|
+% file). So they are disabled while expanding and removed silently,
+% because a user warning would be too expensive (memory and runtime,
+% |\pdfstringdef| is slow enough).
+% \begin{macrocode}
+ \begingroup
+ \let\GenericError\@gobblefour
+ \let\GenericWarning\@gobbletwo
+ \let\GenericInfo\@gobbletwo
+% \end{macrocode}
+%
+% \paragraph{Package french.}
+% This fix only works, if \cs{GenericError} is disabled.
+% \begin{macrocode}
+ \ifx\nofrenchguillemets\@undefined
+ \else
+ \nofrenchguillemets
+ \fi
+% \end{macrocode}
+%
+% \paragraph{Definition commands and expansion.}
+% Redefining the defining commands (see sec. \ref{defcmd}).
+% The original meaning of \cs{xdef} is saved in \cs{Hy@temp}.
+% \begin{macrocode}
+ \let\Hy@temp\xdef
+ \let\def\HyPsd@DefCommand
+ \let\gdef\HyPsd@DefCommand
+ \let\edef\HyPsd@DefCommand
+ \let\xdef\HyPsd@DefCommand
+ \let\futurelet\HyPsd@LetCommand
+ \let\let\HyPsd@LetCommand
+ \Hy@temp#1{#2}%
+ \endgroup
+% \end{macrocode}
+%
+% \subsubsection{Postprocessing}
+% If the string is empty time can be saved by omitting the
+% postprocessing process.
+% \begin{macrocode}
+ \ifx#1\@empty
+ \else
+% \end{macrocode}
+%
+% \paragraph{Protecting spaces and removing grouping characters.}
+% In order to check the tokens we must separate them. This will be
+% done with \TeX's argument parsing. With this method
+% we must the following item takes into account, that makes
+% makes things a litte more complicate:
+% \begin{itemize}
+% \item \TeX{} does not accept a space as an undelimited argument,
+% it cancels space tokens while looking for an undelimited
+% argument. Therefore we must protect the spaces now.
+% \item An argument can be a single token or a group of many tokens.
+% And within curly braces tokens aren't find by \TeX's
+% argument scanning process. Third curly braces as grouping characters
+% cannot be expanded further, so they don't vanish by the string
+% expansion above. So these characters with catcode 1 and 2 are
+% removed in the following and replaced by an marker for the xspace
+% support.
+% \item \TeX{} silently removes the outmost pair of braces of an
+% argument. To prevent this on unwanted places, in the following
+% the character \verb+|+ is appended to the string to make an outer
+% brace to an inner one.
+% \end{itemize}
+% First the top level spaces are protected by replacing. Then the
+% string is scanned to detect token groups. Each token group
+% will now be space protected and again scanned for another
+% token groups.
+% \begin{macrocode}
+ \HyPsd@ProtectSpaces#1%
+ \let\HyPsd@String\@empty
+ \expandafter\HyPsd@RemoveBraces\expandafter{#1|}%
+ \global\let#1\HyPsd@String
+% \end{macrocode}
+%
+% \paragraph{Check tokens.}
+% After removing the spaces and the grouping characters
+% the string now should only consists of the following tokens/catcodes:\\
+% \begin{tabular}{rl}
+% 0&command names with start with an escape character.\\
+% 3&math shift\\
+% 4&alignment tabs\\
+% 6&parameter, but this is unlikely.\\
+% 7&superscript\\
+% 8&subscript\\
+% 11&letter\\
+% 12&other\\
+% 13&commands that are active characters.
+% \end{tabular}
+%
+% After \cs{HyPsd@CheckCatcodes} the command \cs{HyPsd@RemoveMask} is
+% reused to remove the group protection character \verb+|+.
+% This character is needed to ensure that the string at least
+% consists of one token if \cs{HyPsd@CheckCatcodes}
+% is called.
+%
+% Because of internal local assignments and tabulars
+% group braces are used.
+% \begin{macrocode}
+ \let\HyPsd@SPACEOPTI\relax
+ {%
+ \let\HyPsd@String\@empty
+ \expandafter\HyPsd@CheckCatcodes#1\HyPsd@End
+ \global\let#1\HyPsd@String
+ }%
+ \expandafter\HyPsd@RemoveMask\expandafter
+ |\expandafter\@empty#1\HyPsd@End#1%
+% \end{macrocode}
+% \cs{HyPsd@CheckCatcodes} should no have removed the tokens with
+% catcode 3, 4, 7, and 8. Because a parameter token (6) would
+% cause to many errors before, there should now be only tokens
+% with catcodes 11 or 12. So I think there is no need for
+% a safety step like:
+%\begin{verbatim}
+%\xdef#1{\expandafter\strip@prefix\meaning#1}%
+%\end{verbatim}
+% \paragraph{Looking for wrong glyphs.}
+% The case that glyphs aren't defined in the PD1 encoding
+% is caught above in such a way, that the glyph name and
+% a marker is inserted into the string. Now we can safely
+% scan the string for this marker and provide a descriptive
+% warning.
+% \begin{macrocode}
+ \expandafter
+ \HyPsd@Subst\expandafter{\HyPsd@GLYPHERR}{\relax}#1%
+ \let\HyPsd@String\@empty
+ \expandafter\HyPsd@GlyphProcess#1\relax\@empty
+ \global\let#1\HyPsd@String
+% \end{macrocode}
+%
+% \paragraph{Backslash.}
+% The double backslash disturbs parsing octal sequenzes, for
+% example in an string like |abc\\051| the sequence \cs{051}
+% is detected although the second \cs{} belongs to the
+% first backslash.
+% \begin{macrocode}
+ \HyPsd@StringSubst{\\}{\textbackslash}#1%
+% \end{macrocode}
+%
+% \paragraph{Spaces.}
+% All spaces have already the form \cs{040}.
+% The last postprocessing step will
+% be an optimizing of the spaces, so we already introduce
+% already the necessary command \cs{HyPsd@SPACEOPTI}.
+% But first it is defined to be \cs{relax} in order to
+% prevent a too early expansion by an \cs{edef}.
+% Secondly a \cs{relax} serves as a marker for
+% a token that is detected by \cs{xspace}.
+%
+% The code of |frenchb.ldf| can produce an additional
+% space before \cs{guillemotright}, because \cs{lastskip}
+% and \cs{unskip} do not work. Therefore it is removed here.
+% \begin{macrocode}
+ \ifHy@unicode
+ \expandafter\HyPsd@StringSubst\csname 80\040\endcsname
+ \HyPsd@SPACEOPTI#1%
+ \edef\Hy@temp@A{\HyPsd@SPACEOPTI\HyPsd@SPACEOPTI\80\273}%
+ \expandafter\HyPsd@Subst\expandafter{\Hy@temp@A}%
+ {\HyPsd@SPACEOPTI\80\273}#1%
+ \else
+ \HyPsd@StringSubst{\040}\HyPsd@SPACEOPTI#1%
+ \expandafter\HyPsd@Subst\expandafter{%
+ \expandafter\HyPsd@SPACEOPTI\expandafter\HyPsd@SPACEOPTI
+ \string\273}{\HyPsd@SPACEOPTI\273}#1%
+ \fi
+% \end{macrocode}
+%
+% \paragraph{Right parenthesis.}
+% Also \cs{xspace} detects a right parenthesis.
+% For the \cs{xspace} support and the following
+% parenthesis check the different parenthesis
+% notations |)|, \cs{)}, and \cs{051} are converted
+% to one type \cs{)} and before \cs{HyPsd@empty}
+% with the meaning of \cs{relax} is introduced for
+% \cs{xspace}. By redefining to \cs{@empty} \cs{HyPsd@empty}
+% can easily removed later.
+% \begin{macrocode}
+ \ifHy@unicode
+ \HyPsd@StringSubst{\)}{\80\051}#1%
+ \HyPsd@Subst){\80\051}#1%
+ \let\HyPsd@empty\relax
+ \expandafter\HyPsd@StringSubst\csname 80\051\endcsname
+ {\HyPsd@empty\80\051}#1%
+ \else
+ \HyPsd@StringSubst{\)}{\051}#1%
+ \HyPsd@Subst){\051}#1%
+ \let\HyPsd@empty\relax
+ \HyPsd@StringSubst{\051}{\HyPsd@empty\string\)}#1%
+ \fi
+% \end{macrocode}
+%
+% \paragraph{Support for package \texttt{xspace}.}
+% \cs{xspace} looks for the next token and decides if it
+% expands to a space or not. Following tokens prevent its
+% transformation to a space: Beginning and end of group,
+% handled above by replacing by an italic correction,
+% several punctuation marks, a closing parentheses, and
+% several spaces.
+%
+% Without package |xspace| there are tokens with catcode 11 and 12,
+% \cs{HyPsd@empty} and \cs{HyPsd@SPACEOPTI}. With package |xspace|
+% marker for the italic correction \cs{/} and \cs{xspace} come with.
+% In the package |xspace| case the two markers are replaced by
+% commands and an \cs{edef} performs the \cs{xspace} processing.
+%
+% In the opposite of the original \cs{xspace} \cs{HyPsd@xspace} uses
+% an argument instead of a \cs{futurelet}, so we have to provide
+% such an argument, if \cs{HyPsd@xspace} comes last. Because
+% \cs{HyPsd@Subst} with several equal tokens (|--|) needs a safe
+% last token, in both cases
+% the string gets an additional \cs{HyPsd@empty}.
+% \begin{macrocode}
+ \expandafter\HyPsd@Subst\expandafter{\/}\HyPsd@empty#1%
+ \ltx@IfUndefined{@xspace}{%
+ }{%
+ \let\HyPsd@xspace\relax
+ \expandafter\HyPsd@Subst\expandafter
+ {\HyPsd@XSPACE}\HyPsd@xspace#1%
+ \let\HyPsd@xspace\HyPsd@doxspace
+ }%
+ \xdef#1{#1\HyPsd@empty}%
+% \end{macrocode}
+%
+% \paragraph{Ligatures.}
+% \TeX{} forms ligatures in its stomach, but the PDF strings are
+% treated only by \TeX's mouth. The PDFDocEncoding contains
+% some ligatures, but the current
+% version 3 of the AcrobatReader lacks the |fi| and |fl| glyphs, and
+% the Linux version lacks the |emdash| and |endash| glyphs.
+% So the necessary code is provided here, but currently disabled,
+% hoping that version 4 of the AcrobatReader is better.
+% To break the ligatures the user can use an empty group,
+% because it leads to an insertion of an \cs{HyPsd@empty}.
+% If this ligature code will be enabled some day, then the italic
+% correction should also break the ligatures. Currently this occurs
+% only, if package |xspace| is loaded.
+%
+% Since newer AcrobatReader versions now show the en- and emdash in
+% a correct way (AR7/Linux, AR8/Linux), the substitution code
+% for them is enabled starting with version 6.78l.
+% \begin{macrocode}
+ \HyPsd@Subst{---}\textemdash#1%
+ \HyPsd@Subst{--}\textendash#1%
+% \HyPsd@Subst{fi}\textfi#1%
+% \HyPsd@Subst{fl}\textfl#1%
+ \HyPsd@Subst{!`}\textexclamdown#1%
+ \HyPsd@Subst{?`}\textquestiondown#1%
+% \end{macrocode}
+% With the next \cs{edef} we get rid of the token \cs{HyPsd@empty}.
+% \begin{macrocode}
+ \let\HyPsd@empty\@empty
+% \end{macrocode}
+%
+% \paragraph{Left parentheses.}
+% Left parentheses are now converted to safe forms to avoid
+% problems with unmatched ones (\cs{(} with PDFDocEncoding,
+% the octal sequence with Unicode.
+%
+% An optimization is possible. Matched parentheses can replaced
+% by a |()| pair. But this code is removed to save \TeX{} memory
+% and time.
+% \begin{macrocode}
+ \ifHy@unicode
+ \HyPsd@StringSubst\(\textparenleft#1%
+ \HyPsd@Subst(\textparenleft#1%
+ \else
+ \HyPsd@StringSubst\({\050}#1%
+ \HyPsd@Subst({\050}#1%
+ \HyPsd@StringSubst{\050}{\string\(}#1%
+ \fi
+% \end{macrocode}
+%
+% \paragraph{Optimizing spaces.}
+% Spaces are often used, but they have a very long form \cs{040}.
+% They are converted back to real spaces, but not all, so that
+% no space follows after another. In the bookmark case several
+% spaces are written to the |.out| file, but if the entries
+% are read back, several spaces are merged to a single one.
+%
+% With Unicode the spaces are replaced by their octal sequences.
+% \begin{macrocode}
+ \ifHy@unicode
+ \edef\HyPsd@SPACEOPTI{\80\040}%
+ \else
+ \let\HyPsd@SPACEOPTI\HyPsd@spaceopti
+ \fi
+ \xdef#1{#1\@empty}%
+ \fi
+% \end{macrocode}
+%
+% \paragraph{Converting to Unicode.}
+% At last the eight bit letters have to be converted to Unicode,
+% the masks \cs{8} and \cs{9} are removed and the Unicode
+% marker is added.
+% \begin{macrocode}
+ \endgroup
+ \begingroup
+ \ifHy@unicode
+ \HyPsd@ConvertToUnicode#1%
+% \end{macrocode}
+%
+% \paragraph{Try conversion back to PDFDocEncoding.}
+%
+% \begin{macrocode}
+ \ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
+ \ltx@IfUndefined{StringEncodingConvertTest}{%
+ }{%
+ \EdefUnescapeString\HyPsd@temp#1%
+ \ifxetex
+ \let\HyPsd@UnescapedString\HyPsd@temp
+ \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
+ {utf16be}{ascii-print}{%
+ \EdefEscapeString\HyPsd@temp\HyPsd@temp
+ \global\let#1\HyPsd@temp
+ \HyPsd@EscapeTeX#1%
+ \Hy@unicodefalse
+ }{%
+ \HyPsd@ToBigChars#1%
+ \HyPsd@EscapeTeX#1%
+ }%
+ \else
+ \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
+ {utf16be}{pdfdoc}{%
+ \EdefEscapeString\HyPsd@temp\HyPsd@temp
+ \global\let#1\HyPsd@temp
+ \HyPsd@EscapeTeX#1%
+ \Hy@unicodefalse
+ }{}%
+ \fi
+ }%
+ \fi
+ \fi
+ \HyPsd@XeTeXBigCharsfalse
+% \end{macrocode}
+%
+% \paragraph{User hook.}
+% The hook \cs{pdfstringdefPostHook} can be used
+% for the purpose to postprocess the string further.
+% \begin{macrocode}
+ \pdfstringdefPostHook#1%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@pdfstringdef}
+% \begin{macrocode}
+\def\Hy@pdfstringdef#1#2{%
+ \pdfstringdef\Hy@gtemp{#2}%
+ \let#1\Hy@gtemp
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Encodings}
+%
+% \subsubsection{Xe\TeX}
+%
+% \begin{macrocode}
+\edef\Hy@temp{\catcode0=\the\catcode0\relax}
+\catcode\z@=12 %
+\ifxetex
+ \expandafter\@firstofone
+\else
+ \let\HyPsd@XeTeXBigCharstrue\@empty
+ \let\HyPsd@XeTeXBigCharsfalse\@empty
+ \expandafter\@gobble
+\fi
+{%
+ \newif\ifHyPsd@XeTeXBigChars
+ \def\HyPsd@XeTeXBigCharsfalse{%
+ \global\let\ifHyPsd@XeTeXBigChars\iffalse
+ }%
+ \def\HyPsd@XeTeXBigCharstrue{%
+ \global\let\ifHyPsd@XeTeXBigChars\iftrue
+ }%
+ \def\HyPsd@ToBigChars#1{%
+ \ifHyPsd@XeTeXBigChars
+ \EdefEscapeHex\HyPsd@UnescapedString{%
+ \expandafter\@gobbletwo\HyPsd@UnescapedString
+ }%
+ \begingroup
+ \toks@{}%
+ \escapechar=92\relax
+ \let\x\HyPsd@ToBigChar
+ \expandafter\HyPsd@ToBigChar\HyPsd@UnescapedString
+ \relax\relax\relax\relax\relax\relax\relax
+ \edef\x{%
+ \endgroup
+ \gdef\noexpand#1{\the\toks@}%
+ }%
+ \x
+ \fi
+ }%
+ \def\HyPsd@ToBigChar#1#2#3#4{%
+ \ifx\relax#1\relax
+ \let\x\relax
+ \else
+ \count@="#1#2#3#4\relax
+ \let\y\@empty
+ \lccode\z@=\count@
+ \ifnum\count@=40 % (
+ \let\y\@backslashchar
+ \else
+ \ifnum\count@=41 % )
+ \let\y\@backslashchar
+ \else
+ \ifnum\count@=92 % backslash
+ \let\y\@backslashchar
+ \else
+ \ifnum\count@=10 % newline
+ \edef\y##1{\string\n}%
+ \else
+ \ifnum\count@=13 % carriage return
+ \edef\y##1{\string\r}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \lowercase{%
+ \toks@\expandafter{%
+ \the\expandafter\toks@
+ \y
+ ^^@%
+ }%
+ }%
+ \fi
+ \x
+ }%
+}
+\Hy@temp
+% \end{macrocode}
+%
+% \subsubsection{Workaround for package linguex}
+%
+% \begin{macrocode}
+\@ifpackageloaded{linguex}{%
+ \let\HyLinguex@OrgB\b
+ \let\HyLinguex@OrgC\c
+ \let\HyLinguex@OrgD\d
+ \def\HyLinguex@Restore{%
+ \let\b\HyLinguex@OrgB
+ \let\c\HyLinguex@OrgC
+ \let\d\HyLinguex@OrgD
+ }%
+ \Hy@AtEndOfPackage{%
+ \pdfstringdefDisableCommands{%
+ \ltx@IfUndefined{oldb}{}{\let\b\oldb}%
+ \ltx@IfUndefined{oldc}{}{\let\c\oldc}%
+ \ltx@IfUndefined{oldd}{}{\let\d\oldd}%
+ }%
+ }%
+}{%
+ \let\HyLinguex@Restore\relax
+}%
+% \end{macrocode}
+%
+% \subsubsection{Catcodes saving and restoring for \texttt{.def} files}
+%
+% \begin{macro}{\Hy@SaveCatcodeSettings}
+% \begin{macrocode}
+\def\Hy@SaveCatcodeSettings#1{%
+ \expandafter\edef\csname Hy@cat@#1\endcsname{%
+ \endlinechar=\the\endlinechar\relax
+ \catcode32 \the\catcode32\relax % (space)
+ \catcode34 \the\catcode34\relax % "
+ \catcode35 \the\catcode35\relax % #
+ \catcode37 \the\catcode37\relax % (percent)
+ \catcode40 \the\catcode40\relax % (
+ \catcode41 \the\catcode41\relax % )
+ \catcode42 \the\catcode42\relax % *
+ \catcode46 \the\catcode46\relax % .
+ \catcode58 \the\catcode58\relax % :
+ \catcode60 \the\catcode60\relax % <
+ \catcode61 \the\catcode61\relax % =
+ \catcode62 \the\catcode62\relax % >
+ \catcode64 \the\catcode64\relax % @
+ \catcode91 \the\catcode91\relax % [
+ \catcode92 \the\catcode92\relax % \
+ \catcode93 \the\catcode93\relax % ]
+ \catcode123 \the\catcode123\relax % {
+ \catcode124 \the\catcode124\relax % |
+ \catcode125 \the\catcode125\relax % }
+ }%
+ \endlinechar=-1 %
+ \catcode32 10 % (space)
+ \catcode34 12 % "
+ \catcode35 6 % #
+ \catcode37 14 % (percent)
+ \catcode40 12 % (
+ \catcode41 12 % )
+ \catcode42 12 % *
+ \catcode46 12 % .
+ \catcode58 12 % :
+ \catcode60 12 % <
+ \catcode61 12 % =
+ \catcode62 12 % >
+ \catcode91 12 % [
+ \catcode92 0 % \
+ \catcode93 12 % ]
+ \catcode123 1 % {
+ \catcode124 12 % |
+ \catcode125 2 % }
+ \makeatletter
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@RestoreCatcodeSettings}
+% \begin{macrocode}
+\def\Hy@RestoreCatcodeSettings#1{%
+ \csname Hy@cat@#1\endcsname
+ \expandafter\let\csname Hy@cat@#1\endcsname\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{PD1 encoding}
+% The PD1 encoding implements the PDFDocEncoding for use with
+% \LaTeXe's NFSS. Because the informational strings are not set by
+% \TeX's typesetting mechanism but for interpreting by the PDF reader,
+% the glyphs of the PD1 encoding are implemented to be safely written
+% to a file (PDF output file, |.out| file).
+%
+% The PD1 encoding can be specified as an option of the 'fontenc' package
+% or loaded here. It does not matter what font family is selected,
+% as \TeX{} does not process it anyway. So use CM.
+% \begin{macrocode}
+\@ifundefined{T@PD1}{%
+ \Hy@SaveCatcodeSettings{pd1}%
+ \input{pd1enc.def}%
+ \Hy@RestoreCatcodeSettings{pd1}%
+ \HyLinguex@Restore
+}{}
+\DeclareFontFamily{PD1}{pdf}{}
+\DeclareFontShape{PD1}{pdf}{m}{n}{ <-> cmr10 }{}
+\DeclareFontSubstitution{PD1}{pdf}{m}{n}
+% \end{macrocode}
+%
+% \subsubsection{PU encoding}
+% The PU encoding implements the Unicode encoding for use with
+% \LaTeX's NFSS. Because of large memory requirements the
+% encoding file for Unicode support is only loaded, if option
+% |unicode| is specified as package option.
+% \begin{macro}{\HyPsd@LoadUnicode}
+% Because the file |puenc.def| takes a lot of memory, the loading
+% is defined in the macro \cs{HyPsd@LoadUnicode} called by
+% the package option |unicode|.
+% \begin{macrocode}
+\def\HyPsd@LoadUnicode{%
+ \@ifundefined{T@PU}{%
+ \Hy@SaveCatcodeSettings{pu}%
+ \input{puenc.def}%
+ \Hy@RestoreCatcodeSettings{pu}%
+ \HyLinguex@Restore
+ }{}%
+ \DeclareFontFamily{PU}{pdf}{}%
+ \DeclareFontShape{PU}{pdf}{m}{n}{ <-> cmr10 }{}%
+ \DeclareFontSubstitution{PU}{pdf}{m}{n}%
+ \HyPsd@LoadExtra
+ \let\HyPsd@LoadUnicode\relax
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@LoadExtra}
+% \begin{macrocode}
+\def\HyPsd@LoadExtra{%
+ \ifHy@psdextra
+ \ltx@iffileloaded{puenc.def}{%
+ \Hy@SaveCatcodeSettings{psdextra}%
+ \input{psdextra.def}%
+ \Hy@RestoreCatcodeSettings{psdextra}%
+ \let\HyPsd@LoadExtra\relax
+ }{}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Additional user commands}
+%
+% \subsubsection{^^A
+% \texorpdfstring{\cs{texorpdfstring}}{\\texorpdfstring}^^A
+% }
+% \begin{macro}{\texorpdfstring}
+% While expanding the string in \cs{pdfstringdef} the switch
+% \cs{ifHy@pdfstring} is set. This is used by the
+% full expandible macro \cs{texorpdfstring}. It expects
+% two arguments, the first contains the string that will be
+% set and processed by \TeX's stomach, the second
+% contains the replacement for PDF strings.
+% \begin{macrocode}
+\def\texorpdfstring{%
+ \ifHy@pdfstring
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Hooks for
+% \texorpdfstring{\cs{pdfstringdef}}{\\pdfstringdef}^^A
+% }
+% \begin{macro}{\pdfstringdefPreHook}
+% \begin{macro}{\pdfstringdefPostHook}
+% Default definition of the hooks for \cs{pdfstringdef}.
+% The construct \cs{@ifundefined} with \cs{let} is a little bit
+% faster than \cs{providecommand}.
+% \begin{macrocode}
+\@ifundefined{pdfstringdefPreHook}{%
+ \let\pdfstringdefPreHook\@empty
+}{}
+\@ifundefined{pdfstringdefPostHook}{%
+ \let\pdfstringdefPostHook\@gobble
+}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pdfstringdefDisableCommands}
+% In \cmd{\pdfstringdefPreHook} the user can add
+% code that is executed before the string, that have
+% to be converted by \cmd{\pdfstringdef}, is expanded.
+% So replacements for problematic macros can be given.
+% The code in \cmd{\pdfstringdefPreHook} should not
+% be replaced perhaps by an \cmd{\renewcommand},
+% because a previous meaning gets lost.
+%
+% Macro \cmd{\pdfstringdefDisableCommands} avoids this,
+% because it reuses the old meaning of the hook and appends
+% the new code to \cmd{\pdfstringdefPreHook}, e.g.:
+%\begin{verbatim}
+%\pdfstringdefDisableCommands{%
+% \let~\textasciitilde
+% \def\url{\pdfstringdefWarn\url}%
+% \let\textcolor\@gobble
+%}%
+%\end{verbatim}
+% In the argument of \cmd{\pdfstringdefDisableCommands} the
+% character |@| can be used in command names. So it is easy
+% to use useful \LaTeX{} commands like \cmd{\@gobble} or
+% \cmd{\@firstofone}.
+% \begin{macrocode}
+\def\pdfstringdefDisableCommands{%
+ \begingroup
+ \makeatletter
+ \HyPsd@DisableCommands
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@DisableCommands}
+% \begin{macrocode}
+\long\def\HyPsd@DisableCommands#1{%
+ \ltx@GlobalAppendToMacro\pdfstringdefPreHook{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% (Partial) fix for bug in \texttt{frenchb.ldf} 2010/08/21 v2.5a that
+% destroys \cs{pdfstringdefDisableCommands} after usage
+% in \cs{AtBeginDocument}.
+% \begin{macrocode}
+\let\HyPsd@pdfstringdefDisableCommands\pdfstringdefDisableCommands
+\AtBeginDocument{%
+ \@ifundefined{pdfstringdefDisableCommands}{%
+ \let\pdfstringdefDisableCommands\HyPsd@pdfstringdefDisableCommands
+ }{}%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\pdfstringdefWarn}
+% The purpose of \cmd{\pdfstringdefWarn} is to produce
+% a warning message, so the user can see, that something
+% can go wrong with the conversion to PDF strings.
+%
+% The prefix |\<>-| is added to the token. \cmd{\noexpand}
+% protects the probably undefined one during the first
+% expansion step. Then \cmd{\HyPsd@CheckCatcodes} can
+% detect the not allowed token, \cmd{\HyPsd@CatcodeWarning}
+% prints a warning message, after \cmd{\HyPsd@RemovePrefix}
+% has removed the prefix.
+%
+% \cmd{\pdfstringdefWarn} is intended for document authors or
+% package writers, examples for use can be seen in the definition
+% of \cmd{\HyPsd@ifnextchar} or \cmd{\HyPsd@protected@testopt}.
+% \begin{macrocode}
+\def\pdfstringdefWarn#1{%
+ \expandafter\noexpand\csname<>-\string#1\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Help macros for expansion}
+%
+% \subsubsection{\cs{ignorespaces}}
+%
+% \begin{macro}{\HyPsd@ignorespaces}
+% With the help of a trick using \cs{romannumeral} the
+% effect of \cs{ignorespaces} can be simulated a little,
+% In a special case using an alphabetic constant
+% \cs{romannumeral} eats an optional space. If the constant
+% is zero, then the \cs{romannumeral} expression vanishes.
+% The following macro uses this trick twice, thus \cs{HyPsd@ignorespaces}
+% eats up to two following spaces.^^A
+% \begin{macrocode}
+\begingroup
+ \catcode0=12 %
+ \def\x{\endgroup
+ \def\HyPsd@ignorespaces{%
+ \romannumeral\expandafter`\expandafter^^@%
+ \romannumeral`^^@%
+ }%
+ }%
+\x
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Babel languages}
+%
+% Since version 2008/03/16 v3.8j babel uses inside \cs{AtBeginDocument}:
+%\begin{quote}
+%\begin{verbatim}
+%\pdfstringdefDisableCommands{%
+% \languageshorthands{system}%
+%}
+%\end{verbatim}
+%\end{quote}
+% As consequence the shorthands are shown in the bookmarks,
+% not its result. Therefore \cs{languageshorthands} is
+% disabled before the user hook. If there is a need to
+% use the command, then \cs{HyOrg@languageshorthands}
+% can be used inside \cs{pdfstringdefDisableCommands}.
+% \begin{macrocode}
+\def\HyPsd@BabelPatch{%
+ \let\HyOrg@languageshorthands\languageshorthands
+ \let\languageshorthands\HyPsd@LanguageShorthands
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdf@strcmp\endcsname\relax
+ \let\HyPsd@langshort@system\@empty
+ \def\HyPsd@LanguageShorthands#1{%
+ \expandafter\ifx\csname HyPsd@langshort@#1\endcsname
+ \HyPsd@langshort@system
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {%
+ \HyOrg@languageshorthands{#1}%
+ }%
+ }%
+\else
+ \def\HyPsd@LanguageShorthands#1{%
+ \ifnum\pdf@strcmp{#1}{system}=\z@
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {%
+ \HyOrg@languageshorthands{#1}%
+ }%
+ }%
+\fi
+\def\Hy@temp{%
+ \@ifpackageloaded{babel}{%
+ \@ifpackagelater{babel}{2008/03/16}{%
+ \let\Hy@temp\@empty
+ }{%
+ \def\HyPsd@BabelPatch{%
+ \let\HyOrg@languageshorthands\languageshorthands
+ }%
+ }%
+ }{}%
+}
+\Hy@temp
+\expandafter\Hy@AtBeginDocument\expandafter{\Hy@temp}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifHy@next
+% \end{macrocode}
+%
+% Nothing to do for english.
+% \begin{macrocode}
+\ltx@IfUndefined{danish@sh@"@sel}{}{%
+ \def\HyPsd@babel@danish{%
+ \declare@shorthand{danish}{"|}{}%
+ \declare@shorthand{danish}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{dutch@sh@"@sel}{}{%
+ \def\HyPsd@babel@dutch{%
+ \declare@shorthand{dutch}{"|}{}%
+ \declare@shorthand{dutch}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{finnish@sh@"@sel}{}{%
+ \def\HyPsd@babel@finnish{%
+ \declare@shorthand{finnish}{"|}{}%
+ }%
+}
+\ltx@IfUndefined{french@sh@:@sel}{}{%
+ \def\HyPsd@babel@frenchb{%
+ \def\guill@spacing{ }%
+ }%
+}
+\ltx@IfUndefined{german@sh@"@sel}{}{%
+ \def\HyPsd@babel@german{%
+ \declare@shorthand{german}{"f}{f}%
+ \declare@shorthand{german}{"|}{}%
+ \declare@shorthand{german}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{macedonian@sh@"@sel}{}{%
+ \def\HyPsd@babel@macedonian{%
+ \declare@shorthand{macedonian}{"|}{}%
+ \declare@shorthand{macedonian}{"~}{-}%
+ }%
+}{}
+\ltx@IfUndefined{ngerman@sh@"@sel}{}{%
+ \def\HyPsd@babel@ngerman{%
+ \declare@shorthand{ngerman}{"|}{}%
+ \declare@shorthand{ngerman}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{portuges@sh@"@sel}{}{%
+ \def\HyPsd@babel@portuges{%
+ \declare@shorthand{portuges}{"|}{}%
+ }%
+}
+\ltx@IfUndefined{russian@sh@"@sel}{}{%
+ \def\HyPsd@babel@russian{%
+ \declare@shorthand{russian}{"|}{}%
+ \declare@shorthand{russian}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{slovene@sh@"@sel}{}{%
+ \def\HyPsd@babel@slovene{%
+ \declare@shorthand{slovene}{"|}{}%
+ }%
+}
+% \end{macrocode}
+% Nested quoting environments are not supported (|<<|, |>>|).
+% \begin{macrocode}
+\ltx@IfUndefined{spanish@sh@>@sel}{}{%
+ \def\HyPsd@babel@spanish{%
+ \declare@shorthand{spanish}{<<}{\guillemotleft}%
+ \declare@shorthand{spanish}{>>}{\guillemotright}%
+ \declare@shorthand{spanish}{"=}{-}%
+ \declare@shorthand{spanish}{"~}{-}%
+ \declare@shorthand{spanish}{"!}{\textexclamdown}%
+ \declare@shorthand{spanish}{"?}{\textquestiondown}%
+ }%
+}
+\ltx@IfUndefined{swedish@sh@"@sel}{}{%
+ \def\HyPsd@babel@swedish{%
+ \declare@shorthand{swedish}{"|}{}%
+ \declare@shorthand{swedish}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{ukrainian@sh@"@sel}{}{%
+ \def\HyPsd@babel@ukrainian{%
+ \declare@shorthand{ukrainian}{"|}{}%
+ \declare@shorthand{ukrainian}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{usorbian@sh@"@sel}{}{%
+ \def\HyPsd@babel@usorbian{%
+ \declare@shorthand{usorbian}{"f}{f}%
+ \declare@shorthand{usorbian}{"|}{}%
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\ltx@IfUndefined{greek@sh@\string~@sel}{%
+ \let\HyPsd@GreekPatch\@empty
+}{%
+ \def\HyPsd@GreekPatch{%
+ \let\greeknumeral\HyPsd@greeknumeral
+ \let\Greeknumeral\HyPsd@Greeknumeral
+ }%
+}
+\def\HyPsd@greeknumeral#1{%
+ \HyPsd@GreekNum\@firstoftwo{#1}%
+}
+\def\HyPsd@Greeknumeral#1{%
+ \HyPsd@GreekNum\@secondoftwo{#1}%
+}
+\def\HyPsd@GreekNum#1#2{%
+ \ifHy@unicode
+ \ifnum#2<\@ne
+ \@arabic{#2}%
+ \else
+ \ifnum#2<1000000 %
+ \HyPsd@@GreekNum#1{#2}%
+ \else
+ \@arabic{#2}%
+ \fi
+ \fi
+ \else
+ \@arabic{#2}%
+ \fi
+}
+\def\HyPsd@@GreekNum#1#2{%
+ \ifnum#2<\@m
+ \ifnum#2<10 %
+ \expandafter\HyPsd@GreekNumI
+ \expandafter\@gobble\expandafter#1\number#2%
+ \else
+ \ifnum#2<100 %
+ \expandafter\HyPsd@GreekNumII
+ \expandafter\@gobble\expandafter#1\number#2%
+ \else
+ \expandafter\HyPsd@GreekNumIII
+ \expandafter\@gobble\expandafter#1\number#2%
+ \fi
+ \fi
+ \ifnum#2>\z@
+ \textnumeralsigngreek
+ \fi
+ \else
+ \ifnum#2<\@M
+ \expandafter\HyPsd@GreekNumIV\expandafter#1\number#2%
+ \else
+ \ifnum#2<100000 %
+ \expandafter\HyPsd@GreekNumV\expandafter#1\number#2%
+ \else
+ \expandafter\HyPsd@GreekNumVI\expandafter#1\number#2%
+ \fi
+ \fi
+ \fi
+}
+\def\HyPsd@GreekNumI#1#2#3{%
+ #1{%
+ \ifnum#3>\z@
+ \textnumeralsignlowergreek
+ \fi
+ }%
+ \expandafter#2%
+ \ifcase#3 %
+ {}{}%
+ \or\textalpha\textAlpha
+ \or\textbeta\textBeta
+ \or\textgamma\textGamma
+ \or\textdelta\textDelta
+ \or\textepsilon\textEpsilon
+ \or\textstigmagreek\textStigmagreek
+ \or\textzeta\textZeta
+ \or\texteta\textEta
+ \or\texttheta\textTheta
+ \else
+ {}{}%
+ \fi
+}
+\def\HyPsd@GreekNumII#1#2#3#4{%
+ #1{%
+ \ifnum#3>\z@
+ \textnumeralsignlowergreek
+ \fi
+ }%
+ \expandafter#2%
+ \ifcase#3 %
+ {}{}%
+ \or\textiota\textIota
+ \or\textkappa\textKappa
+ \or\textlambda\textLambda
+ \or\textmu\textMu
+ \or\textnu\textNu
+ \or\textxi\textXi
+ \or\textomicron\textOmicron
+ \or\textpi\textPi
+ \or\textkoppagreek\textKoppagreek
+ \else
+ {}{}%
+ \fi
+ \HyPsd@GreekNumI#1#2#4%
+}
+\def\HyPsd@GreekNumIII#1#2#3#4#5{%
+ #1{%
+ \ifnum#3>\z@
+ \textnumeralsignlowergreek
+ \fi
+ }%
+ \expandafter#2%
+ \ifcase#3 %
+ {}{}%
+ \or\textrho\textRho
+ \or\textsigma\textSigma
+ \or\texttau\textTau
+ \or\textupsilon\textUpsilon
+ \or\textphi\textPhi
+ \or\textchi\textChi
+ \or\textpsi\textPsi
+ \or\textomega\textOmega
+ \or\textsampigreek\textSampigreek
+ \else
+ {}{}%
+ \fi
+ \HyPsd@GreekNumII#1#2#4#5%
+}
+\def\HyPsd@GreekNumIV#1#2#3#4#5{%
+ \HyPsd@GreekNumI\@firstofone#1#2%
+ \HyPsd@@GreekNum#1{#3#4#5}%
+}
+\def\HyPsd@GreekNumV#1#2#3#4#5#6{%
+ \HyPsd@GreekNumII\@firstofone#1#2#3%
+ \HyPsd@@GreekNum#1{#4#5#6}%
+}
+\def\HyPsd@GreekNumVI#1#2#3#4#5#6#7{%
+ \HyPsd@GreekNumIII\@firstofone#1#2#3#4%
+ \HyPsd@@GreekNum#1{#5#6#7}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\HyPsd@SpanishPatch{%
+ \ltx@IfUndefined{es@save@dot}{%
+ }{%
+ \let\.\es@save@dot
+ }%
+}
+% \end{macrocode}
+% Shorthand |"-| of `russianb.ldf' is not expandable,
+% therefore it is disabled and replaced by |-|.
+% \begin{macrocode}
+\def\HyPsd@RussianPatch{%
+ \ltx@IfUndefined{russian@sh@"@-@}{%
+ }{%
+ \@namedef{russian@sh@"@-@}{-}%
+ }%
+}
+% \end{macrocode}
+%
+% \subsubsection{CJK patch}
+%
+% \begin{macrocode}
+\RequirePackage{intcalc}[2007/09/27]
+% \end{macrocode}
+%
+% \begin{macro}{\HyPsd@CJKhook}
+% \begin{macrocode}
+\def\HyPsd@CJKhook{%
+ \ltx@ifpackageloaded{CJK}{%
+ \let\CJK@kern\relax
+ \let\CJKkern\relax
+ \let\CJK@CJK\relax
+ \ifHy@CJKbookmarks
+ \HyPsd@CJKhook@bookmarks
+ \fi
+ \HyPsd@CJKhook@unicode
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{CJK bookmarks}
+%
+% \begin{macro}{\HyPsd@CJKhook}
+% Some internal commands of package cjk are redefined
+% to avoid error messages. For a rudimental support
+% of CJK bookmarks the active characters are
+% redefined so that they print themselves.
+%
+% After preprocessing of Big5 encoded data the
+% following string for a double-byte character
+% is emitted:
+%\begin{verbatim}
+%^^7f<arg1>^^7f<arg2>^^7f
+%\end{verbatim}
+% \verb|<arg1>| is the first byte in the range (always $>$ 0x80);
+% \verb|<arg2>| is the second byte in decimal notation
+% ($\ge$ 0x40).
+% \begin{macrocode}
+\begingroup
+ \catcode"7F=\active
+ \toks@{%
+ \let\CJK@ignorespaces\empty
+ \def\CJK@char#1{\@gobbletwo}%
+ \let\CJK@charx\@gobblefour
+ \let\CJK@punctchar\@gobblefour
+ \def\CJK@punctcharx#1{\@gobblefour}%
+ \catcode"7F=\active
+ \def^^7f#1^^7f#2^^7f{%
+ \string #1\HyPsd@DecimalToOctal{#2}%
+ }%
+ % ... ?
+ \ifHy@unicode
+ \def\Hy@cjkpu{\80}%
+ \else
+ \let\Hy@cjkpu\@empty
+ \fi
+ \HyPsd@CJKActiveChars
+ }%
+ \count@=127 %
+ \@whilenum\count@<255 \do{%
+ \advance\count@ by 1 %
+ \lccode`\~=\count@
+ \lowercase{%
+ \toks@\expandafter{\the\toks@ ~}%
+ }%
+ }%
+ \toks@\expandafter{\the\toks@ !}%
+ \xdef\HyPsd@CJKhook@bookmarks{%
+ \the\toks@
+ }%
+\endgroup
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@CJKActiveChars}
+% The macro \cmd{\HyPsd@CJKActiveChars} is only defined
+% to limit the memory consumption of \cmd{\HyPsd@CJKhook}.
+% \begin{macrocode}
+\def\HyPsd@CJKActiveChars#1{%
+ \ifx#1!%
+ \let\HyPsd@CJKActiveChars\relax
+ \else
+ \edef#1{\noexpand\Hy@cjkpu\string#1}%
+ \fi
+ \HyPsd@CJKActiveChars
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@DecimalToOctal}
+% A character, given by the decimal number is converted
+% to a PDF character.
+% \begin{macrocode}
+\def\HyPsd@DecimalToOctal#1{%
+ \ifcase #1 %
+ \000\or \001\or \002\or \003\or \004\or \005\or \006\or \007%
+ \or \010\or \011\or \012\or \013\or \014\or \015\or \016\or \017%
+ \or \020\or \021\or \022\or \023\or \024\or \025\or \026\or \027%
+ \or \030\or \031\or \032\or \033\or \034\or \035\or \036\or \037%
+ \or \040\or \041\or \042\or \043\or \044\or \045\or \046\or \047%
+ \or \050\or \051\or \052\or \053\or \054\or \055\or \056\or \057%
+ \or 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
+ \or 8\or 9\or \072\or \073\or \074\or \075\or \076\or \077%
+ \or @\or A\or B\or C\or D\or E\or F\or G%
+ \or H\or I\or J\or K\or L\or M\or N\or O%
+ \or P\or Q\or R\or S\or T\or U\or V\or W%
+ \or X\or Y\or Z\or \133\or \134\or \135\or \136\or \137%
+ \or \140\or a\or b\or c\or d\or e\or f\or g%
+ \or h\or i\or j\or k\or l\or m\or n\or o%
+ \or p\or q\or r\or s\or t\or u\or v\or w%
+ \or x\or y\or z\or \173\or \174\or \175\or \176\or \177%
+ \or \200\or \201\or \202\or \203\or \204\or \205\or \206\or \207%
+ \or \210\or \211\or \212\or \213\or \214\or \215\or \216\or \217%
+ \or \220\or \221\or \222\or \223\or \224\or \225\or \226\or \227%
+ \or \230\or \231\or \232\or \233\or \234\or \235\or \236\or \237%
+ \or \240\or \241\or \242\or \243\or \244\or \245\or \246\or \247%
+ \or \250\or \251\or \252\or \253\or \254\or \255\or \256\or \257%
+ \or \260\or \261\or \262\or \263\or \264\or \265\or \266\or \267%
+ \or \270\or \271\or \272\or \273\or \274\or \275\or \276\or \277%
+ \or \300\or \301\or \302\or \303\or \304\or \305\or \306\or \307%
+ \or \310\or \311\or \312\or \313\or \314\or \315\or \316\or \317%
+ \or \320\or \321\or \322\or \323\or \324\or \325\or \326\or \327%
+ \or \330\or \331\or \332\or \333\or \334\or \335\or \336\or \337%
+ \or \340\or \341\or \342\or \343\or \344\or \345\or \346\or \347%
+ \or \350\or \351\or \352\or \353\or \354\or \355\or \356\or \357%
+ \or \360\or \361\or \362\or \363\or \364\or \365\or \366\or \367%
+ \or \370\or \371\or \372\or \373\or \374\or \375\or \376\or \377%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{CJK unicode}
+%
+% \begin{macro}{\HyPsd@CJKhook@unicode}
+% \begin{macrocode}
+\def\HyPsd@CJKhook@unicode{%
+ \let\Unicode\HyPsd@CJK@Unicode
+ \let\CJKnumber\HyPsd@CJKnumber
+ \let\CJKdigits\HyPsd@CJKdigits
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@CJK@Unicode}
+% \begin{macrocode}
+\def\HyPsd@CJK@Unicode#1#2{%
+ \ifnum#1<256 %
+ \HyPsd@DecimalToOctalFirst{#1}%
+ \HyPsd@DecimalToOctalSecond{#2}%
+ \else
+ \933%
+ \expandafter\expandafter\expandafter\HyPsd@HighA
+ \intcalcDiv{#1}{4}!%
+ \933%
+ \ifcase\intcalcMod{#1}{4} %
+ 4\or 5\or 6\or 7%
+ \fi
+ \HyPsd@DecimalToOctalSecond{#2}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\def\HyPsd@HighA#1!{%
+ \expandafter\expandafter\expandafter\HyPsd@HighB
+ \IntCalcDiv#1!64!!%
+ \expandafter\expandafter\expandafter\HyPsd@HighD
+ \IntCalcMod#1!64!!%
+}
+\def\HyPsd@HighB#1!{%
+ \expandafter\expandafter\expandafter\HyPsd@HighC
+ \IntCalcDec#1!!%
+}
+\def\HyPsd@HighC#1!{%
+ \IntCalcDiv#1!4!%
+ \@backslashchar
+ \IntCalcMod#1!4!%
+}
+\def\HyPsd@HighD#1!{%
+ \ifcase\IntCalcDiv#1!8! %
+ 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
+ \fi
+ \ifcase\IntCalcMod#1!8! %
+ 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
+ \fi
+}
+\def\HyPsd@DecimalToOctalFirst#1{%
+ \9%
+ \ifcase#1 %
+ 000\or 001\or 002\or 003\or 004\or 005\or 006\or 007%
+ \or 010\or 011\or 012\or 013\or 014\or 015\or 016\or 017%
+ \or 020\or 021\or 022\or 023\or 024\or 025\or 026\or 027%
+ \or 030\or 031\or 032\or 033\or 034\or 035\or 036\or 037%
+ \or 040\or 041\or 042\or 043\or 044\or 045\or 046\or 047%
+ \or 050\or 051\or 052\or 053\or 054\or 055\or 056\or 057%
+ \or 060\or 061\or 062\or 063\or 064\or 065\or 066\or 067%
+ \or 070\or 071\or 072\or 073\or 074\or 075\or 076\or 077%
+ \or 100\or 101\or 102\or 103\or 104\or 105\or 106\or 107%
+ \or 120\or 111\or 112\or 113\or 114\or 115\or 116\or 117%
+ \or 120\or 121\or 122\or 123\or 124\or 125\or 126\or 127%
+ \or 130\or 131\or 132\or 133\or 134\or 135\or 136\or 137%
+ \or 140\or 141\or 142\or 143\or 144\or 145\or 146\or 147%
+ \or 150\or 151\or 152\or 153\or 154\or 155\or 156\or 157%
+ \or 160\or 161\or 162\or 163\or 164\or 165\or 166\or 167%
+ \or 170\or 171\or 172\or 173\or 174\or 175\or 176\or 177%
+ \or 200\or 201\or 202\or 203\or 204\or 205\or 206\or 207%
+ \or 210\or 211\or 212\or 213\or 214\or 215\or 216\or 217%
+ \or 220\or 221\or 222\or 223\or 224\or 225\or 226\or 227%
+ \or 230\or 231\or 232\or 233\or 234\or 235\or 236\or 237%
+ \or 240\or 241\or 242\or 243\or 244\or 245\or 246\or 247%
+ \or 250\or 251\or 252\or 253\or 254\or 255\or 256\or 257%
+ \or 260\or 261\or 262\or 263\or 264\or 265\or 266\or 267%
+ \or 270\or 271\or 272\or 273\or 274\or 275\or 276\or 277%
+ \or 300\or 301\or 302\or 303\or 304\or 305\or 306\or 307%
+ \or 310\or 311\or 312\or 313\or 314\or 315\or 316\or 317%
+ \or 320\or 321\or 322\or 323\or 324\or 325\or 326\or 327%
+ \or 330\or 331\or 332\or 333\or 334\or 335\or 336\or 337%
+ \or 340\or 341\or 342\or 343\or 344\or 345\or 346\or 347%
+ \or 350\or 351\or 352\or 353\or 354\or 355\or 356\or 357%
+ \or 360\or 361\or 362\or 363\or 364\or 365\or 366\or 367%
+ \or 370\or 371\or 372\or 373\or 374\or 375\or 376\or 377%
+ \fi
+}
+\def\HyPsd@DecimalToOctalSecond#1{%
+ \ifcase #1 %
+ \000\or \001\or \002\or \003\or \004\or \005\or \006\or \007%
+ \or \010\or \011\or \012\or \013\or \014\or \015\or \016\or \017%
+ \or \020\or \021\or \022\or \023\or \024\or \025\or \026\or \027%
+ \or \030\or \031\or \032\or \033\or \034\or \035\or \036\or \037%
+ \or \040\or \041\or \042\or \043\or \044\or \045\or \046\or \047%
+ \or \050\or \051\or \052\or \053\or \054\or \055\or \056\or \057%
+ \or \060\or \061\or \062\or \063\or \064\or \065\or \066\or \067%
+ \or \070\or \071\or \072\or \073\or \074\or \075\or \076\or \077%
+ \or \100\or \101\or \102\or \103\or \104\or \105\or \106\or \107%
+ \or \110\or \111\or \112\or \113\or \114\or \115\or \116\or \117%
+ \or \120\or \121\or \122\or \123\or \124\or \125\or \126\or \127%
+ \or \130\or \131\or \132\or \133\or \134\or \135\or \136\or \137%
+ \or \140\or \141\or \142\or \143\or \144\or \145\or \146\or \147%
+ \or \150\or \151\or \152\or \153\or \154\or \155\or \156\or \157%
+ \or \160\or \161\or \162\or \163\or \164\or \165\or \166\or \167%
+ \or \170\or \171\or \172\or \173\or \174\or \175\or \176\or \177%
+ \or \200\or \201\or \202\or \203\or \204\or \205\or \206\or \207%
+ \or \210\or \211\or \212\or \213\or \214\or \215\or \216\or \217%
+ \or \220\or \221\or \222\or \223\or \224\or \225\or \226\or \227%
+ \or \230\or \231\or \232\or \233\or \234\or \235\or \236\or \237%
+ \or \240\or \241\or \242\or \243\or \244\or \245\or \246\or \247%
+ \or \250\or \251\or \252\or \253\or \254\or \255\or \256\or \257%
+ \or \260\or \261\or \262\or \263\or \264\or \265\or \266\or \267%
+ \or \270\or \271\or \272\or \273\or \274\or \275\or \276\or \277%
+ \or \300\or \301\or \302\or \303\or \304\or \305\or \306\or \307%
+ \or \310\or \311\or \312\or \313\or \314\or \315\or \316\or \317%
+ \or \320\or \321\or \322\or \323\or \324\or \325\or \326\or \327%
+ \or \330\or \331\or \332\or \333\or \334\or \335\or \336\or \337%
+ \or \340\or \341\or \342\or \343\or \344\or \345\or \346\or \347%
+ \or \350\or \351\or \352\or \353\or \354\or \355\or \356\or \357%
+ \or \360\or \361\or \362\or \363\or \364\or \365\or \366\or \367%
+ \or \370\or \371\or \372\or \373\or \374\or \375\or \376\or \377%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\HyPsd@CJKnumber#1{%
+ \ifnum#1<\z@
+ \CJK@minus
+ \expandafter\HyPsd@@CJKnumber\expandafter{\number-\number#1}%
+ \else
+ \expandafter\HyPsd@@CJKnumber\expandafter{\number#1}%
+ \fi
+}
+\def\HyPsd@@CJKnumber#1{%
+ \ifcase#1 %
+ \CJK@zero\or\CJK@one\or\CJK@two\or\CJK@three\or\CJK@four\or
+ \CJK@five\or\CJK@six\or\CJK@seven\or\CJK@eight\or\CJK@nine\or
+ \CJK@ten\or\CJK@ten\CJK@one\or\CJK@ten\CJK@two\or
+ \CJK@ten\CJK@three\or\CJK@ten\CJK@four\or\CJK@ten\CJK@five\or
+ \CJK@ten\CJK@six\or\CJK@ten\CJK@seven\or\CJK@ten\CJK@eight\or
+ \CJK@ten\CJK@nine
+ \else
+ \ifnum#1<10000 %
+ \HyPsd@CJKnumberFour#1!\@empty{20}%
+ \@empty
+ \else
+ \ifnum#1<100000000 %
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcDiv#1!10000!%
+ !{}{20}%
+ \CJK@tenthousand
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcMod#1!10000!%
+ !\CJK@zero{10}%
+ \@empty
+ \else
+ \expandafter\HyPsd@CJKnumberLarge
+ \number\IntCalcDiv#1!100000000!\expandafter!%
+ \number\IntCalcMod#1!100000000!!%
+ \fi
+ \fi
+ \fi
+}
+\def\HyPsd@CJKnumberLarge#1!#2!{%
+ \HyPsd@CJKnumberFour#1!{}{20}%
+ \CJK@hundredmillion
+ \ifnum#2=\z@
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcDiv#2!10000!%
+ !\CJK@zero{10}%
+ \CJK@tenthousand
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcMod#2!10000!%
+ !\CJK@zero{10}%
+ \@empty
+ \fi
+}
+\def\HyPsd@CJKnumberFour#1!#2#3{%
+ \ifnum#1=\z@
+ \expandafter\@gobble
+ \else
+ \ifnum#1<1000 %
+ #2%
+ \HyPsd@CJKnumberThree#1!{}{#3}%
+ \else
+ \HyPsd@@CJKnumber{\IntCalcDiv#1!1000!}%
+ \CJK@thousand
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberThree
+ \IntCalcMod#1!1000!%
+ !\CJK@zero{10}%
+ \fi
+ \fi
+}
+\def\HyPsd@CJKnumberThree#1!#2#3{%
+ \ifnum#1=\z@
+ \else
+ \ifnum#1<100 %
+ #2%
+ \HyPsd@CJKnumberTwo#1!{}{#3}%
+ \else
+ \HyPsd@@CJKnumber{\IntCalcDiv#1!100!}%
+ \CJK@hundred
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberTwo
+ \IntCalcMod#1!100!%
+ !\CJK@zero{10}%
+ \fi
+ \fi
+}
+\def\HyPsd@CJKnumberTwo#1!#2#3{%
+ \ifnum#1=\z@
+ \else
+ \ifnum#1<#3 %
+ #2%
+ \HyPsd@@CJKnumber{#1}%
+ \else
+ \HyPsd@@CJKnumber{\IntCalcDiv#1!10!}%
+ \CJK@ten
+ \ifnum\IntCalcMod#1!10!=\z@
+ \else
+ \HyPsd@@CJKnumber{\IntCalcMod#1!10!}%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\HyPsd@CJKdigits#1{%
+ \ifx*#1\relax
+ \expandafter\HyPsd@@CJKdigits\expandafter\CJK@zero
+ \else
+ \HyPsd@@CJKdigits\CJK@null{#1}%
+ \fi
+}
+\def\HyPsd@@CJKdigits#1#2{%
+ \ifx\\#2\\%
+ \else
+ \HyPsd@@@CJKdigits#1#2\@nil
+ \fi
+}%
+\def\HyPsd@@@CJKdigits#1#2#3\@nil{%
+ \HyPsd@CJKdigit#1{#2}%
+ \ifx\\#3\\%
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {%
+ \HyPsd@@@CJKdigits#1#3\@nil
+ }%
+}
+\def\HyPsd@CJKdigit#1#2{%
+ \ifcase#2 %
+ #1\or
+ \CJK@one\or\CJK@two\or\CJK@three\or\CJK@four\or
+ \CJK@five\or\CJK@six\or\CJK@seven\or\CJK@eight\or\CJK@nine
+ \fi
+}
+% \end{macrocode}
+%
+% \subsubsection{\texorpdfstring{\cs{@inmathwarn}}{\\@inmathwarn}-Patch}
+% \begin{macro}{\HyPsd@inmathwarn}
+% The patch of \cs{@inmathwarn} is needed to get rid of the
+% infinite error loop with glyphs of other encodings
+% (see the explanation above). Potentially the patch is
+% dangerous, if the code in |ltoutenc.dtx| changes.
+% Checked with \LaTeXe{} versions [1998/06/01] and
+% [1998/12/01]. I expect that versions below [1995/12/01]
+% don't work.
+%
+% To understand the patch easier, the original code of
+% \cs{@current@cmd} and \cs{@changed@cmd} follows
+% (\LaTeXe{} release [1998/12/01]).
+% In the normal case \cs{pdfstringdef} is executed in a context
+% where \cs{protect} has the meaning of \cs{@typesetprotect}
+% (=\cs{relax}).
+%\begin{verbatim}
+%\def\@current@cmd#1{%
+% \ifx\protect\@typeset@protect
+% \@inmathwarn#1%
+% \else
+% \noexpand#1\expandafter\@gobble
+% \fi}
+%\def\@changed@cmd#1#2{%
+% \ifx\protect\@typeset@protect
+% \@inmathwarn#1%
+% \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
+% \expandafter\ifx\csname ?\string#1\endcsname\relax
+% \expandafter\def\csname ?\string#1\endcsname{%
+% \TextSymbolUnavailable#1%
+% }%
+% \fi
+% \global\expandafter\let
+% \csname\cf@encoding \string#1\expandafter\endcsname
+% \csname ?\string#1\endcsname
+% \fi
+% \csname\cf@encoding\string#1%
+% \expandafter\endcsname
+% \else
+% \noexpand#1%
+% \fi}
+%\gdef\TextSymbolUnavailable#1{%
+% \@latex@error{%
+% Command \protect#1 unavailable in encoding \cf@encoding%
+% }\@eha}
+%\def\@inmathwarn#1{%
+% \ifmmode
+% \@latex@warning{Command \protect#1 invalid in math mode}%
+% \fi}
+%\end{verbatim}
+% \begin{macrocode}
+\def\HyPsd@inmathwarn#1#2{%
+ \ifx#2\expandafter
+ \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
+ \HyPsd@GLYPHERR
+ \expandafter\@gobble\string#1%
+ >%
+ \expandafter\expandafter\expandafter\HyPsd@EndWithElse
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@GobbleFiFi
+ \fi
+ \else
+ \expandafter#2%
+ \fi
+}
+\def\HyPsd@GobbleFiFi#1\fi#2\fi{}
+\def\HyPsd@EndWithElse#1\else{\else}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPsd@add@accent}
+% \begin{macrocode}
+\def\HyPsd@add@accent#1#2{%
+ \HyPsd@GLYPHERR\expandafter\@gobble\string#1+\string#2>%
+ #2%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Unexpandable spaces}
+%
+% \begin{macro}{\HyPsd@LetUnexpandableSpace}
+% In \cmd{\HyPsd@@ProtectSpaces} the space tokens are replaced
+% by not expandable commands, that work like spaces:
+% \begin{itemize}
+% \item So they can caught by undelimited arguments.
+% \item And they work in number, dimen, and skip
+% assignments.
+% \end{itemize}
+% These properties are used in \cmd{\HyPsd@CheckCatcodes}.
+% \begin{macrocode}
+\def\HyPsd@LetUnexpandableSpace#1{%
+ \expandafter\futurelet\expandafter#1\expandafter\@gobble\space\relax
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@UnexpandableSpace}
+% \cmd{\HyPsd@UnexpandableSpace} is used
+% in \cmd{\HyPsd@@ProtectSpaces}.
+% In \cmd{HyPsd@@ProtectSpaces} the space tokens are replaced
+% by unexpandable commands \cmd{\HyPsd@UnexpandableSpace},
+% but that have the effect of spaces.
+% \begin{macrocode}
+\HyPsd@LetUnexpandableSpace\HyPsd@UnexpandableSpace
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Marker for commands}
+% \begin{macro}{\HyPsd@XSPACE}
+% \begin{macro}{\HyPsd@ITALCORR}
+% \begin{macro}{\HyPsd@GLYPHERR}
+% Some commands and informations cannot be utilized before
+% the string expansion and the checking process.
+% Command names are filtered out, so we need another way
+% to transport the information: An unusual |#| with catcode
+% 12 marks the beginning of the extra information.
+% \begin{macrocode}
+\edef\HyPsd@XSPACE{\string#\string X}
+\edef\HyPsd@ITALCORR{\string#\string I}
+\edef\HyPsd@GLYPHERR{\string#\string G}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{\texorpdfstring{\cs{hspace}}{\\hspace} fix}
+% \begin{macro}{\HyPsd@hspace}
+% \begin{macrocode}
+\def\HyPsd@hspace#1{\HyPsd@@hspace#1*\END}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@hspace}
+% \cs{HyPsd@@hspace} checks whether \cs{hspace}
+% is called in its star form.
+% \begin{macrocode}
+\def\HyPsd@@hspace#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@hspacetest{#1}%
+ \else
+ \expandafter\HyPsd@hspacetest
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@hspacetest}
+% \cs{HyPsd@hyspacetest} replaces the \cs{hspace} by a space, if
+% the length is greater than zero.
+% \begin{macrocode}
+\def\HyPsd@hspacetest#1{\ifdim#1>\z@\space\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Fix for AMS classes}
+%
+% \begin{macrocode}
+\ltx@IfUndefined{tocsection}{%
+ \let\HyPsd@AMSclassfix\relax
+}{%
+ \def\HyPsd@AMSclassfix{%
+ \let\tocpart\HyPsd@tocsection
+ \let\tocchapter\HyPsd@tocsection
+ \let\tocappendix\HyPsd@tocsection
+ \let\tocsection\HyPsd@tocsection
+ \let\tocsubsection\HyPsd@tocsection
+ \let\tocsubsubsection\HyPsd@tocsection
+ \let\tocparagraph\HyPsd@tocsection
+ }%
+ \def\HyPsd@tocsection#1#2#3{%
+ \if @#2@\else\if @#1@\else#1 \fi#2. \fi
+ #3%
+ }%
+}
+% \end{macrocode}
+%
+% \subsubsection{Reference commands}
+%
+% \begin{macro}{\HyPsd@href}
+% \begin{macrocode}
+\def\HyPsd@href#1#{\@secondoftwo}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPsd@ref}
+% Macro \cs{HyPsd@ref} calls the macro \cs{HyPsd@@ref} for star checking.
+% The same methods like in \cs{HyPsd@hspace} is used.
+% \begin{macrocode}
+\def\HyPsd@ref#1{\HyPsd@@ref#1*\END}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@ref}
+% Macro \cs{HyPsd@@ref} checks if a star is present.
+% \begin{macrocode}
+\def\HyPsd@@ref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@ref{#1}%
+ \else
+ \expandafter\HyPsd@@@ref
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@@ref}
+% \cs{HyPsd@@@ref} does the work and extracts the first argument.
+% \begin{macrocode}
+\def\HyPsd@@@ref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter
+ \@car\csname r@#1\endcsname\@nil
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPsd@pageref}
+% Macro \cs{HyPsd@pageref} calls the macro \cs{HyPsd@@pageref} for star checking.
+% The same methods like in \cs{HyPsd@hspace} is used.
+% \begin{macrocode}
+\def\HyPsd@pageref#1{\HyPsd@@pageref#1*\END}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@pageref}
+% Macro \cs{HyPsd@@pageref} checks if a star is present.
+% \begin{macrocode}
+\def\HyPsd@@pageref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@pageref{#1}%
+ \else
+ \expandafter\HyPsd@@@pageref
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@@pageref}
+% \cs{HyPsd@@@pageref} does the work and extracts the second argument.
+% \begin{macrocode}
+\def\HyPsd@@@pageref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\@car
+ \expandafter\expandafter\expandafter\@gobble
+ \csname r@#1\endcsname{}\@nil
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPsd@nameref}
+% Macro \cs{HyPsd@nameref} calls the macro \cs{HyPsd@@nameref} for star checking.
+% The same methods like in \cs{HyPsd@hspace} is used.
+% \begin{macrocode}
+\def\HyPsd@nameref#1{\HyPsd@@nameref#1*\END}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@nameref}
+% Macro \cs{HyPsd@@nameref} checks if a star is present.
+% \begin{macrocode}
+\def\HyPsd@@nameref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@nameref{#1}%
+ \else
+ \expandafter\HyPsd@@@nameref
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@@nameref}
+% \cs{HyPsd@@@nameref} does the work and extracts the third argument.
+% \begin{macrocode}
+\def\HyPsd@@@nameref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\@car
+ \expandafter\expandafter\expandafter\@gobbletwo
+ \csname r@#1\endcsname{}{}\@nil
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPsd@autoref}
+% Macro \cs{HyPsd@autoref} calls the macro \cs{HyPsd@@autoref} for star checking.
+% The same methods like in \cs{HyPsd@hspace} is used.
+% \begin{macrocode}
+\def\HyPsd@autoref#1{\HyPsd@@autoref#1*\END}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@autoref}
+% Macro \cs{HyPsd@@autoref} checks if a star is present.
+% \begin{macrocode}
+\def\HyPsd@@autoref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@autoref{#1}%
+ \else
+ \expandafter\HyPsd@@@autoref
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@@autoref}
+% \cs{HyPsd@@@autoref} does the work and extracts the second argument.
+% \begin{macrocode}
+\def\HyPsd@@@autoref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@autorefname
+ \csname r@#1\endcsname{}{}{}{}\@nil
+ \expandafter\expandafter\expandafter
+ \@car\csname r@#1\endcsname\@nil
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@autorefname}
+% At least a basic definition for getting the \cs{autoref} name.
+% \begin{macrocode}
+\def\HyPsd@autorefname#1#2#3#4#5\@nil{%
+ \ifx\\#4\\%
+ \else
+ \HyPsd@@autorefname#4.\@nil
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@autorefname}
+% \begin{macrocode}
+\def\HyPsd@@autorefname#1.#2\@nil{%
+ \ltx@IfUndefined{#1autorefname}{%
+ \ltx@IfUndefined{#1name}{%
+ }{%
+ \csname#1name\endcsname\space
+ }%
+ }{%
+ \csname#1autorefname\endcsname\space
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Redefining the defining commands}
+% \label{defcmd}
+% Definitions aren't allowed, because they aren't executed in
+% an only expanding context. So the command to be defined
+% isn't defined and can perhaps be undefined. This would causes
+% TeX to stop with an error message.
+% With a deep trick it is possible to define commands in such
+% a context: \cs{csname} does the job, it defines the command
+% to be \cs{relax}, if it has no meaning.
+%
+% Active characters cannot be defined with this trick. It is
+% possible to define all undefined active characters
+% (perhaps that they have the meaning of \cs{relax}).
+% To avoid side effects this should be done in \cs{pdfstringdef}
+% shortly before the \cs{xdef} job. But checking and defining
+% all possible active characters of the full range (0 until 255)
+% would take a while. \cs{pdfstringdef} is slow enough, so
+% this isn't done.
+%
+% \cs{HyPsd@DefCommand} and \cs{HyPsd@LetCommand} expands to the
+% commands \cs{<def>-command} and \cs{<let>-command}
+% with the meaning of \cs{def} and \cs{let}. So it is detected by
+% \cs{HyPsd@CheckCatcodes} and the command name \cs{<def>-command}
+% or \cs{<let>-command} should indicate a forbidden definition
+% command.
+%
+% The command to be defined is converted to a string and back
+% to a command name with the help of \cs{csname}. If the
+% command is already defined, \cs{noexpand} prevents a
+% further expansion, even though the command would
+% expand to legal stuff. If the command don't have the meaning
+% of \cs{relax}, \cs{HyPsd@CheckCatcodes} will produce a warning.
+% (The command itself can be legal, but the warning is legitimate
+% because of the position after a defining command.)
+%
+% The difference between \cs{HyPsd@DefCommand} and
+% \cs{HyPsdLetCommand} is that the first one also cancels this
+% arguments, the parameter and definition text. The right side
+% of the \cs{let} commands cannot be canceled with an undelimited
+% parameter because of a possible space token after \cs{futurelet}.
+%
+% To avoid unmachted \cs{if...} tokens, the cases
+% \verb|\let\if...\iftrue| and \verb|\let\if...\iffalse|
+% are checked and ignored.
+%
+% \begin{macro}{\HyPsd@DefCommand}
+% \begin{macro}{\HyPsd@LetCommand}
+% \begin{macrocode}
+\begingroup
+ \def\x#1#2{%
+ \endgroup
+ \let#1\def
+ \def\HyPsd@DefCommand##1##2##{%
+ #1%
+ \expandafter\noexpand
+ \csname\expandafter\@gobble\string##1\@empty\endcsname
+ \@gobble
+ }%
+ \let#2\let
+ \def\HyPsd@@LetCommand##1{%
+ \expandafter\ifx\csname##1\expandafter\endcsname
+ \csname iftrue\endcsname
+ \pdfstringdefWarn\let
+ \expandafter\@gobble
+ \else
+ \expandafter\ifx\csname##1\expandafter\endcsname
+ \csname iffalse\endcsname
+ \pdfstringdefWarn\let
+ \expandafter\expandafter\expandafter\@gobble
+ \else
+ #2%
+ \expandafter\noexpand
+ \csname##1\expandafter\expandafter\expandafter\endcsname
+ \fi
+ \fi
+ }%
+ }%
+\expandafter\x\csname <def>-command\expandafter\endcsname
+ \csname <let>-command\endcsname
+\def\HyPsd@LetCommand#1{%
+ \expandafter\expandafter\expandafter\HyPsd@@LetCommand
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@gobble\string#1\@empty
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{^^A
+% \texorpdfstring{\cs{ifnextchar}}{\\ifnextchar}^^A
+% }
+% \begin{macro}{\HyPsd@ifnextchar}
+% In \cs{pdfstringdef} \cs{@ifnextchar} is disabled
+% via a \cs{let} command to save time. First a
+% warning message is given, then the three arguments
+% are canceled. \cs{@ifnextchar} cannot work in a correct
+% manner, because it uses \cs{futurelet}, but this is a
+% stomach feature, that doesn't work in an expanding context.
+% There are several variants of \cs{@ifnextchar}:
+% \begin{itemize}
+% \item \cs{@ifnextchar}
+% \item \cs{kernel@ifnextchar}
+% \item \cs{new@ifnextchar} from package \verb|amsgen.sty|
+% (bug report latex/3662).
+% \end{itemize}
+% \begin{macrocode}
+\def\HyPsd@ifnextchar#1{%
+ \pdfstringdefWarn#1%
+ \expandafter\@gobbletwo\@gobble
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{^^A
+% \texorpdfstring{\cs{@protected@testoptifnextchar}}^^A
+% {\\@protected@testopt}^^A
+% }
+% \begin{macro}{\HyPsd@protected@testopt}
+% Macros with optional arguments doesn't work properly, because
+% they call \cmd{\@ifnextchar} to detect the optional argument
+% (see the explanation of \cmd{\HyPsd@ifnextchar}).
+% But a warning, that \cmd{\@ifnextchar} doesn't work, doesn't
+% help the user very much. Therefore \cmd{\@protected@testopt}
+% is also disabled, because its first argument is the problematic
+% macro with the optional argument and it is called before
+% \cmd{\@ifnextchar}.
+% \begin{macrocode}
+\def\HyPsd@protected@testopt#1{%
+ \pdfstringdefWarn#1%
+ \@gobbletwo
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Help macros for postprocessing}
+%
+% \subsubsection{Generic warning.}
+% \begin{macro}{\HyPsd@Warning}
+% For several reasons \cs{space} is masked and does not have its
+% normal meaning. But it is used in warning messages, so it is
+% redefined locally:
+% \begin{macrocode}
+\def\HyPsd@Warning#1{%
+ \begingroup
+ \let\space\ltx@space
+ \Hy@Warning{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Protecting spaces}
+%
+% \begin{macrocode}
+\RequirePackage{etexcmds}[2007/09/09]
+\ifetex@unexpanded
+ \expandafter\@secondoftwo
+\else
+ \expandafter\@firstoftwo
+\fi
+{%
+% \end{macrocode}
+%
+% \begin{macro}{\HyPsd@ProtectSpaces}
+% \cs{HyPsd@ProtectSpaces} calls with the expanded
+% string \cs{HyPsd@@ProtectSpacesFi}. The expanded string is
+% protected by \verb+|+ at the beginning and end of
+% the expanded string. Because of this there can be no group
+% at the beginning or end of the string and grouping characters
+% are not removed by the call of \cs{HyPsd@@ProtectSpacesFi}.
+% \begin{macrocode}
+ \def\HyPsd@ProtectSpaces#1{%
+ \iftrue
+ \expandafter\HyPsd@@ProtectSpacesFi
+ \expandafter|\expandafter\@empty#1| \HyPsd@End#1%
+ \fi
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@ProtectSpacesFi}
+% The string can contain command tokens, so it is better
+% to use an \cs{def} instead of an \cs{edef}.
+% \begin{macrocode}
+ \def\HyPsd@@ProtectSpacesFi#1 #2\HyPsd@End#3\fi{%
+ \fi
+ \ifx\scrollmode#2\scrollmode
+ \HyPsd@RemoveMask#1\HyPsd@End#3%
+ \else
+ \gdef#3{#1\HyPsd@UnexpandableSpace#2}%
+ \expandafter\HyPsd@@ProtectSpacesFi#3\HyPsd@End#3%
+ \fi
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Remove mask.}
+% \begin{macro}{\HyPsd@RemoveMask}
+% \cs{HyPsd@RemoveMask} removes the protecting \verb+|+.
+% It is used by \cs{HyPsd@@ProtectSpacesFi} and by the code in
+% \cs{pdfstringdef} that removes the grouping chararcters.
+% \begin{macrocode}
+ \def\HyPsd@RemoveMask|#1|\HyPsd@End#2{%
+ \toks@\expandafter{#1}%
+ \xdef#2{\the\toks@}%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+}{%
+ \let\HyPsd@fi\fi
+ \def\HyPsd@ProtectSpaces#1{%
+ \xdef#1{%
+ \iftrue
+ \expandafter\HyPsd@@ProtectSpacesFi
+ \expandafter|\expandafter\@empty#1| %
+ \HyPsd@fi
+ }%
+ \expandafter\HyPsd@RemoveMask#1\HyPsd@End#1%
+ }%
+ \def\HyPsd@@ProtectSpacesFi#1 #2\HyPsd@fi{%
+ \fi
+ \etex@unexpanded{#1}%
+ \ifx\scrollmode#2\scrollmode
+ \else
+ \HyPsd@@ProtectSpacesFi\HyPsd@UnexpandableSpace#2%
+ \HyPsd@fi
+ }%
+ \def\HyPsd@RemoveMask|#1|\HyPsd@End#2{%
+ \xdef#2{\etex@unexpanded\expandafter{#1}}%
+ }%
+}
+% \end{macrocode}
+%
+% \subsubsection{Remove grouping braces}
+% \begin{macro}{\HyPsd@RemoveBraces}
+% |#1| contains the expanded string, the result will
+% be locally written in command \cs{HyPsd@String}.
+% \begin{macrocode}
+\def\HyPsd@RemoveBraces#1{%
+ \ifx\scrollmode#1\scrollmode
+ \else
+ \HyPsd@@RemoveBracesFi#1\HyPsd@End{#1}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@RemoveBraces}
+% \cs{HyPsd@@RemoveBraces} is called with the expanded string,
+% the end marked by \cs{HyPsd@End}, the expanded string again, but
+% enclosed in braces and the string command. The first expanded
+% string is scanned by the parameter text |#1#2|.
+% By a comparison with the original form in |#3| we can decide
+% whether |#1| is a single token or a group. To avoid the
+% case that |#2| is a group, the string is extended by a \verb+|+
+% before.
+%
+% While removing the grouping braces an italic correction
+% marker is inserted for supporting package |xspace| and
+% letting ligatures broken.
+%
+% Because the string is already expanded, the \cs{if} commands
+% should disappeared. So we can move some parts out
+% of the argument of \cs{ltx@ReturnAfterFi}.
+% \begin{macrocode}
+\def\HyPsd@@RemoveBracesFi#1#2\HyPsd@End#3\fi{%
+ \fi
+ \def\Hy@temp@A{#1#2}%
+ \def\Hy@temp@B{#3}%
+ \ifx\Hy@temp@A\Hy@temp@B
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \ifx\scrollmode#2\scrollmode
+ \else
+ \Hy@ReturnAfterFiFiEnd{%
+ \HyPsd@RemoveBraces{#2}%
+ }%
+ \fi
+ \else
+ \def\Hy@temp@A{#1}%
+ \HyPsd@AppendItalcorr\HyPsd@String
+ \ifx\Hy@temp@A\@empty
+ \Hy@ReturnAfterElseFiFiEnd{%
+ \HyPsd@RemoveBraces{#2}%
+ }%
+ \else
+ \HyPsd@ProtectSpaces\Hy@temp@A
+ \HyPsd@AppendItalcorr\Hy@temp@A
+ \Hy@ReturnAfterFiFiEnd{%
+ \expandafter\HyPsd@RemoveBraces\expandafter
+ {\Hy@temp@A#2}%
+ }%
+ \fi
+ \fi
+ \Hy@ReturnEnd
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@AppendItalcorr}
+% \begin{macro}{\HyPsd@@AppendItalcorr}
+% The string can contain commands yet, so it is better
+% to use \cs{def} instead of a shorter \cs{edef}.
+% The two help macros limit the count of \cs{expandafter}.
+% \begin{macrocode}
+\def\HyPsd@AppendItalcorr#1{%
+ \expandafter\HyPsd@@AppendItalcorr\expandafter{\/}#1%
+}
+\def\HyPsd@@AppendItalcorr#1#2{%
+ \expandafter\def\expandafter#2\expandafter{#2#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Catcode check}
+%
+% \paragraph{Workaround for LuaTeX.}
+% \cs{HyPsd@CheckCatcodes} might trigger a bug
+% of LuaTeX (0.60.2, 0.70.1, 0.70.2, ...) in the
+% comparison with \cs{ifcat}, see
+% \url{http://tracker.luatex.org/view.php?id=773}.
+% \begin{macrocode}
+\ltx@IfUndefined{directlua}{%
+}{%
+ \expandafter\ifx\csname\endcsname\relax\fi
+}
+% \end{macrocode}
+%
+% \paragraph{Check catcodes.}
+% \begin{macro}{\HyPsd@CheckCatcodes}
+% Because \cs{ifcat} expands its arguments, this is
+% prevented by \cs{noexpand}. In case of command tokens
+% and active characters \cs{ifcat} now sees a \cs{relax}.
+% After protecting spaces and removing braces |#1| should
+% be a single token, no group of several tokens, nor an
+% empty group. (So the \cs{expandafter}\cs{relax} between
+% \cs{ifcat} and \cs{noexpand} is only for safety and
+% it should be possible to remove it.)
+%
+% \cs{protect} and \cs{relax} should be removed silently.
+% But it is too dangerous and breaks some code giving them
+% the meaning of \cs{@empty}. So commands with the meaning
+% of \cs{protect} are removed here. (\cs{protect} should
+% have the meaning of \cs{@typeset@protect} that
+% is equal to \cs{relax}).
+%
+% For the comparison with active characters, \texttt{\textasciitilde}
+% cannot be used because it has the meaning of a blank space here.
+% And active characters need to be checked, if they have been defined
+% using \cs{protected}.
+% \begin{macrocode}
+\begingroup
+ \catcode`\Q=\active
+ \let Q\ltx@empty
+ \gdef\HyPsd@CheckCatcodes#1#2\HyPsd@End{%
+ \global\let\HyPsd@Rest\relax
+ \ifcat\relax\noexpand#1\relax
+ \ifx#1\protect
+ \else
+ \ifx#1\penalty
+ \setbox\z@=\hbox{%
+ \afterassignment\HyPsd@AfterCountRemove
+ \count@=#2\HyPsd@End
+ }%
+ \else
+ \ifx#1\kern
+ \setbox\z@=\hbox{%
+ \afterassignment\HyPsd@AfterDimenRemove
+ \dimen@=#2\HyPsd@End
+ }%
+ \else
+ \ifx#1\hskip
+ \setbox\z@=\hbox{%
+ \afterassignment\HyPsd@AfterSkipRemove
+ \skip@=#2\HyPsd@End
+ }%
+ \else
+ \HyPsd@CatcodeWarning{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \else
+ \ifcat\noexpand#1\noexpandQ% active character
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\HyPsd@String
+ \expandafter\expandafter\expandafter{%
+ \expandafter\HyPsd@String\string#1%
+ }%
+ \else
+ \ifcat#1A% letter
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \else
+ \ifcat#1 % SPACE
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String\HyPsd@SPACEOPTI
+ }%
+ \else
+ \ifcat$#1%
+ \HyPsd@CatcodeWarning{math shift}%
+ \else
+ \ifcat&#1%
+ \HyPsd@CatcodeWarning{alignment tab}%
+ \else
+ \ifcat^#1%
+ \HyPsd@CatcodeWarning{superscript}%
+ \else
+ \ifcat_#1%
+ \HyPsd@CatcodeWarning{subscript}%
+ \else
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifx\HyPsd@Rest\relax
+ \ifx\scrollmode#2\scrollmode
+ \else
+ \Hy@ReturnAfterFiFiEnd{%
+ \HyPsd@CheckCatcodes#2\HyPsd@End
+ }%
+ \fi
+ \else
+ \ifx\HyPsd@Rest\@empty
+ \else
+ \Hy@ReturnAfterFiFiEnd{%
+ \expandafter\HyPsd@CheckCatcodes\HyPsd@Rest\HyPsd@End
+ }%
+ \fi
+ \fi
+ \Hy@ReturnEnd
+ }%
+\endgroup
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Remove counts, dimens, skips.}
+% \begin{macro}{\HyPsd@AfterCountRemove}
+% Counts like \cs{penalty} are removed silently.
+% \begin{macrocode}
+\def\HyPsd@AfterCountRemove#1\HyPsd@End{%
+ \gdef\HyPsd@Rest{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@AfterDimenRemove}
+% If the value of the dimen (\cs{kern}) is zero, it can be
+% removed silently. All other values are difficult to interpret.
+% Negative values do not work in bookmarks. Should positive
+% values be removed or should they be replaced by space(s)?
+% The following code replaces positive values greater than
+% |1ex| with a space and removes them else.
+% \begin{macrocode}
+\def\HyPsd@AfterDimenRemove#1\HyPsd@End{%
+ \ifdim\ifx\HyPsd@String\@empty\z@\else\dimen@\fi>1ex %
+ \HyPsd@ReplaceSpaceWarning{\string\kern\space\the\dimen@}%
+ \gdef\HyPsd@Rest{\HyPsd@UnexpandableSpace #1}%
+ \else
+ \ifdim\dimen@=\z@
+ \else
+ \HyPsd@RemoveSpaceWarning{\string\kern\space\the\dimen@}%
+ \fi
+ \gdef\HyPsd@Rest{#1}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@AfterSkipRemove}
+% The glue part of skips do not work in PDF strings and are ignored.
+% Skips (\cs{hskip}), that are not zero, have the same
+% interpreting problems like dimens (see above).
+% \begin{macrocode}
+\def\HyPsd@AfterSkipRemove#1\HyPsd@End{%
+ \ifdim\ifx\HyPsd@String\@empty\z@\else\skip@\fi>1ex %
+ \HyPsd@ReplaceSpaceWarning{\string\hskip\space\the\skip@}%
+ \gdef\HyPsd@Rest{\HyPsd@UnexpandableSpace #1}%
+ \else
+ \ifdim\skip@=\z@
+ \else
+ \HyPsd@RemoveSpaceWarning{\string\kern\space\the\skip@}%
+ \fi
+ \gdef\HyPsd@Rest{#1}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Catcode warnings.}
+% \begin{macro}{\HyPsd@CatcodeWarning}
+% \cs{HyPsd@CatcodeWarning} produces a warning for the user.
+% \begin{macrocode}
+\def\HyPsd@CatcodeWarning#1{%
+ \HyPsd@Warning{%
+ Token not allowed in a PDF string (%
+ \ifHy@unicode
+ Unicode%
+ \else
+ PDFDocEncoding%
+ \fi
+ ):%
+ \MessageBreak removing `\HyPsd@RemoveCmdPrefix#1'%
+ }%
+}
+\begingroup
+ \catcode`\|=0 %
+ \catcode`\\=12 %
+% \end{macrocode}
+% \SpecialEscapechar{\|}
+% \vspace{-2\MacrocodeTopsep}
+% \vspace{-\parskip}
+% \vspace{-\partopsep}
+% \begin{macrocode}
+ |gdef|HyPsd@RemoveCmdPrefix#1{%
+ |expandafter|HyPsd@@RemoveCmdPrefix
+ |string#1|@empty\<>-|@empty|@empty
+ }%
+ |gdef|HyPsd@@RemoveCmdPrefix#1\<>-#2|@empty#3|@empty{#1#2}%
+|endgroup
+% \end{macrocode}
+% \SpecialEscapechar{\\}
+% \end{macro}
+% \begin{macro}{\HyPsd@RemoveSpaceWarning}
+% \begin{macrocode}
+\def\HyPsd@RemoveSpaceWarning#1{%
+ \HyPsd@Warning{%
+ Token not allowed in a PDF string (%
+ \ifHy@unicode
+ Unicode%
+ \else
+ PDFDocEncoding%
+ \fi
+ ):%
+ \MessageBreak #1\MessageBreak
+ removed%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@ReplaceSpaceWarning}
+% \begin{macrocode}
+\def\HyPsd@ReplaceSpaceWarning#1{%
+ \HyPsd@Warning{%
+ Token not allowed in a PDF string (%
+ \ifHy@unicode
+ Unicode%
+ \else
+ PDFDocEncoding%
+ \fi
+ ):%
+ \MessageBreak #1\MessageBreak
+ replaced by space%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Check for wrong glyphs}
+% A wrong glyph is marked with \cs{relax}, the glyph
+% name follows, delimited by |>|. \cs{@empty} ends
+% the string.
+% \begin{macrocode}
+\def\HyPsd@GlyphProcess#1\relax#2\@empty{%
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \ifx\\#2\\%
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyPsd@GlyphProcessWarning#2\@empty
+ }%
+ \fi
+}
+\def\HyPsd@GlyphProcessWarning#1>#2\@empty{%
+ \HyPsd@@GlyphProcessWarning#1++>%
+ \HyPsd@GlyphProcess#2\@empty
+}
+\def\HyPsd@@GlyphProcessWarning#1+#2+#3>{%
+ \ifx\\#2\\%
+ \HyPsd@Warning{%
+ Glyph not defined in %
+ P\ifHy@unicode U\else D1\fi\space encoding,\MessageBreak
+ removing `\@backslashchar#1'%
+ }%
+ \else
+ \HyPsd@Warning{%
+ Composite letter `\@backslashchar#1+#2'\MessageBreak
+ not defined in P\ifHy@unicode U\else D1\fi\space encoding,%
+ \MessageBreak
+ removing `\@backslashchar#1'%
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+% \paragraph{Spaces.}
+% \begin{macro}{\HyPsd@spaceopti}
+% In the string the spaces are represented by \cs{HyPsd@spaceopti}
+% tokens. Within an \cs{edef} it prints itself as
+% a simple space and looks for its next argument.
+% If another space follows, so it replaces the next \cs{HyPsd@spaceopti}
+% by an protected space \cs{040}.
+% \begin{macrocode}
+\def\HyPsd@spaceopti#1{ % first space
+ \ifx\HyPsd@spaceopti#1%
+ \040%
+ \else
+ #1%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Replacing tokens}
+% \begin{macro}{\HyPsd@Subst}
+% To save tokens \cs{HyPsd@StringSubst} is an wrapper for the
+% command \cs{HyPsd@Subst} that does all the work:
+% In string stored in command |#3| it replaces the tokens
+% |#1| with |#2|.\\
+% \begin{tabular}{ll}
+% |#1|& Exact the tokens that should be replaced.\\
+% |#2|& The replacement (don't need to be expanded).\\
+% |#3|& Command with the string.
+% \end{tabular}
+% \begin{macrocode}
+\def\HyPsd@Subst#1#2#3{%
+ \def\HyPsd@@ReplaceFi##1#1##2\END\fi{%
+ \fi
+ ##1%
+ \ifx\scrollmode##2\scrollmode
+ \else
+ #2%
+ \HyPsd@@ReplaceFi##2\END
+ \fi
+ }%
+ \xdef#3{%
+ \iftrue
+ \expandafter\HyPsd@@ReplaceFi#3#1\END
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@StringSubst}
+% To save tokens in \cs{pdfstringdef} \cs{HyPsd@StringSubst} is a wrapper,
+% that expands argument |#1| before calling \cs{HyPsd@Subst}.
+% \begin{macrocode}
+\def\HyPsd@StringSubst#1{%
+ \expandafter\HyPsd@Subst\expandafter{\string#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPsd@EscapeTeX}
+% \begin{macrocode}
+\begingroup
+ \lccode`\!=`\%%
+ \lccode`\|=`\\%
+ \lccode`\(=`\{%
+ \lccode`\)=`\}%
+ \lccode`0=\ltx@zero
+ \lccode`1=\ltx@zero
+ \lccode`3=\ltx@zero
+ \lccode`4=\ltx@zero
+ \lccode`5=\ltx@zero
+ \lccode`7=\ltx@zero
+\lowercase{\endgroup
+ \def\HyPsd@EscapeTeX#1{%
+ \HyPsd@Subst!{|045}#1%
+ \HyPsd@Subst({|173}#1%
+ \HyPsd@Subst){|175}#1%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Support for package \texttt{xspace}}
+% \begin{macro}{\HyPsd@doxspace}
+% \cs{xspace} does not work, because it uses a \cs{futurelet}
+% that cannot be executed in \TeX's mouth. So this implementation
+% uses an argument to examine the next token. In a previous version
+% I reused \cs{@xspace}, but this version is shorter and easier
+% to understand.
+% \begin{macrocode}
+\def\HyPsd@doxspace#1{%
+ \ifx#1\relax\else
+ \ifx#1.\else
+ \ifx#1:\else
+ \ifx#1,\else
+ \ifx#1;\else
+ \ifx#1!\else
+ \ifx#1?\else
+ \ifx#1/\else
+ \ifx#1-\else
+ \ifx#1'\else
+ \HyPsd@SPACEOPTI
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Converting to Unicode}
+% Eight bit characters are converted to the sixteen bit ones,
+% \cs{8} is replaced by \cs{00}, and \cs{9} is removed.
+% The result should be a valid Unicode PDF string without the
+% Unicode marker at the beginning.
+% \begin{macrocode}
+\begingroup
+ \catcode`\|=0 %
+ \catcode`\\=12 %
+% \end{macrocode}
+% \SpecialEscapechar{\|}
+% \begin{macro}{\HyPsd@ConvertToUnicode}
+% \begin{macrocode}
+ |gdef|HyPsd@ConvertToUnicode#1{%
+ |xdef#1{%
+ |expandafter|HyPsd@DoConvert#1|@empty|@empty|@empty
+ }%
+ |ifx#1|@empty
+ |else
+ |xdef#1{%
+ \376\377%
+ #1%
+ }%
+ |fi
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@DoConvert}
+% \begin{macrocode}
+ |gdef|HyPsd@DoConvert#1{%
+ |ifx#1|@empty
+ |else
+ |ltx@ReturnAfterFi{%
+ |ifx#1\%%
+ \%%
+ |expandafter|HyPsd@DoEscape
+ |else
+ |HyPsd@Char{#1}%
+ |expandafter|HyPsd@DoConvert
+ |fi
+ }%
+ |fi
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@DoEscape}
+% \begin{macrocode}
+ |gdef|HyPsd@DoEscape#1{%
+ |ifx#19%
+ |expandafter|HyPsd@GetTwoBytes
+ |else
+ |ltx@ReturnAfterFi{%
+ |ifx#18%
+ 00%
+ |expandafter|HyPsd@GetTwoBytes
+ |else
+ #1%
+ |expandafter|HyPsd@GetOneByte
+ |fi
+ }%
+ |fi
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@GetTwoBytes}
+% \begin{macrocode}
+ |gdef|HyPsd@GetTwoBytes#1\#2#3#4{%
+ #1\#2#3#4%
+ |HyPsd@DoConvert
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@GetOneBye}
+% \begin{macrocode}
+ |gdef|HyPsd@GetOneByte#1#2{%
+ #1#2%
+ |HyPsd@DoConvert
+ }%
+|endgroup
+% \end{macrocode}
+% \end{macro}
+% \SpecialEscapechar{\\}
+% \begin{macro}{\HyPsd@@GetNextTwoTokens}
+% \TeX{} does only allow nine parameters, so we need another macro
+% to get more arguments.
+% \begin{macrocode}
+\def\HyPsd@GetNextTwoTokens#1#2#3\END#4{%
+ \xdef#4{#4#1#2}%
+ \HyPsd@@ConvertToUnicode#3\END#4%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@Char}
+% \begin{macrocode}
+\begingroup
+ \catcode0=9 %
+ \catcode`\^=7 %
+ \catcode`\^^^=12 %
+ \def\x{^^^^0000}%
+\expandafter\endgroup
+\ifx\x\@empty
+ \def\HyPsd@Char#1{%
+ \ifnum`#1<128 %
+ \@backslashchar 000#1%
+ \else
+ \ifnum`#1<65536 %
+ \expandafter\HyPsd@CharTwoByte\number`#1!%
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@CharSurrogate
+ \intcalcSub{`#1}{65536}!%
+ \fi
+ \fi
+ }%
+ \def\HyPsd@CharTwoByte#1!{%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \IntCalcDiv#1!256!!%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \IntCalcMod#1!256!!%
+ }%
+ \def\HyPsd@CharOctByte#1!{%
+ \@backslashchar
+ \IntCalcDiv#1!64!%
+ \intcalcDiv{\IntCalcMod#1!64!}{8}%
+ \IntCalcMod#1!8!%
+ }%
+ \def\HyPsd@CharSurrogate#1!{%
+ \@backslashchar 33%
+ \IntCalcDiv#1!262144!%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \intcalcDiv{\IntCalcMod#1!262144!}{1024}!%
+ \@backslashchar 33%
+ \expandafter\expandafter\expandafter\IntCalcAdd
+ \intcalcDiv{\IntCalcMod#1!1024!}{256}!4!%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \IntCalcMod#1!256!!%
+ }%
+\else
+ \def\HyPsd@Char#1{%
+ \@backslashchar 000#1%
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Support for UTF-8 input encoding}
+%
+% After |\usepackage[utf8]{inputenc}| there are macros that
+% expect the UTF-8 octets as arguments. Therefore we can
+% calculate the PDF octal sequences directly. Because the
+% PDF format is limited to UCS-2, conversion macros are
+% needed for UTF-8 sequences with two and three octets only.
+%
+% This calculation must be done in an expandable context,
+% so we use e\TeX here for performance reasons. Unhappily
+% the results of divisions are rounded. Thus a
+% circumvention via |\dimexpr| is used, e.g.:
+% \begin{quote}
+% |\numexpr 123/4\relax| is replaced by\\
+% |\number\dimexpr.25\dimexpr 123sp\relax\relax|
+% \end{quote}
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname numexpr\endcsname\relax
+ \let\HyPsd@UTFviii\relax
+\else
+ \begingroup
+ \lccode`\~=`^^f4\relax
+ \lowercase{\endgroup
+ \def\HyPsd@UTFviii{%
+ \let\UTFviii@two@octets\HyPsd@UTFviii@two
+ \let\UTFviii@three@octets\HyPsd@UTFviii@three
+ \let\UTFviii@four@octets\HyPsd@UTFviii@four
+ \ifx~\HyPsd@UTFviii@ccxliv@undef
+ \let~\HyPsd@UTFviii@ccxliv@def
+ \fi
+ \let\unichar\HyPsd@unichar
+ }%
+ }%
+ \def\HyPsd@UTFviii@ccxliv@undef{\@inpenc@undefined@{utf8}}%
+ \edef\HyPsd@UTFviii@ccxliv@def{%
+ \noexpand\UTFviii@four@octets\string ^^f4%
+ }%
+% \end{macrocode}
+%
+% The two octet form of UTF-8 |110aaabb| (A) and |10cccddd| (B)
+% must be converted into octal numbers |00a| and |bcd|. The
+% result is |\8a\bcd| (with a, b, c, d as octal numbers).
+% The conversion equations.
+% \begin{eqnarray}
+% a &:= A/4 - 48\\
+% b &:= A - 4*(A/4)\\
+% c &:= B/8 - 8*((8*(B/8))/8)\\
+% d &:= B - 8*(B/8)\\
+% \end{eqnarray}
+% ^^A #1 = A/4 #2 = A
+% ^^A #3 = B/8 #4 = B
+% \begin{macrocode}
+ \def\HyPsd@UTFviii@two#1#2{%
+ \expandafter\HyPsd@UTFviii@@two
+ \number\dimexpr.25\dimexpr`#1sp\expandafter\relax\expandafter|%
+ \number`#1\expandafter|%
+ \number\dimexpr.125\dimexpr`#2sp\expandafter\relax\expandafter|%
+ \number`#2 \@nil
+ }%
+ \def\HyPsd@UTFviii@@two#1|#2|#3|#4\@nil{%
+ \expandafter\8%
+ \number\numexpr #1-48\expandafter\relax
+ \csname\number\numexpr #2-4*#1\relax\expandafter\endcsname
+ \number\numexpr #3-8*%
+ \number\dimexpr.125\dimexpr#3sp\relax\relax\expandafter\relax
+ \number\numexpr #4-8*#3\relax
+ }%
+% \end{macrocode}
+%
+% Three octet form: |1110aabb| (A), |10bcccdd| (B), and |10eeefff|
+% (C). The result is |\9abc\def| (with a, \dots, f as octal numbers).
+% The conversion equations:
+% \begin{eqnarray}
+% a &:= A/4 - 56\\
+% b &:= 2*(A - 4*(A/4)) + ((B-128 < 32) ? 0 : 1)\\
+% c &:= B/4 - 32 - ((B-128 < 32) ? 0 : 8)\\
+% d &:= B - 4*(B/4)\\
+% e &:= C/8 - 16\\
+% f &:= C - 8*(C/8)\\
+% \end{eqnarray}
+% ^^A #1 = A/4 #2 = A
+% ^^A #3 = (B-128 < 32) ? 0 : 1
+% ^^A #4 = B/4 #5 = B
+% ^^A #6 = C/8 #7 = C
+% \begin{macrocode}
+ \def\HyPsd@UTFviii@three#1#2#3{%
+ \expandafter\HyPsd@UTFviii@@three
+ \number\dimexpr.25\dimexpr`#1sp\expandafter\relax\expandafter|%
+ \number`#1\expandafter|%
+ \number\ifnum\numexpr`#2-128\relax <32 0\else 1\fi\expandafter|%
+ \number\dimexpr.25\dimexpr`#2sp\expandafter\relax\expandafter|%
+ \number`#2\expandafter|%
+ \number\dimexpr.125\dimexpr`#3sp\expandafter\relax\expandafter|%
+ \number`#3 \@nil
+ }%
+ \def\HyPsd@UTFviii@@three#1|#2|#3|#4|#5|#6|#7\@nil{%
+ \expandafter\9%
+ \number\numexpr #1-56\expandafter\relax
+ \number\numexpr 2*(#2-4*#1)+#3\expandafter\relax
+ \number\numexpr #4 - 32 -\ifcase#3 0\else 8\fi\expandafter\relax
+ \csname\number\numexpr #5-4*#4\relax\expandafter\endcsname
+ \number\numexpr #6-16\expandafter\relax
+ \number\numexpr #7-8*#6\relax
+ }%
+% \end{macrocode}
+%
+% Surrogates: 4 octets in UTF-8, a surrogate pair in UTF-16.
+% High surrogate range: U+D800--U+DBFF, low surrogate range:
+% U+DC00-U+DFFF.
+%
+%\begin{quote}
+%\begin{verbatim}
+%UTF-8: 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
+%wwww = uuuuu - 1
+%UTF-16: 110110ww wwzzzzyy 110111yy yyxxxxxx
+%octal: 011 011 0ww 0ww zzz zyy 011 011 1yy 0yy xxx xxx
+%\end{verbatim}
+%\end{quote}
+% \begin{macrocode}
+ \def\HyPsd@UTFviii@four#1#2{%
+ \expandafter\HyPsd@@UTFviii@four\number
+ \numexpr-1+(`#1-240)*4+\dimexpr.0625\dimexpr`#2sp-128sp%
+ \expandafter|\number
+ \numexpr`#2-16*\dimexpr.0625\dimexpr`#2sp|%
+ }%
+ \def\HyPsd@@UTFviii@four#1|#2|#3{%
+ \933\number\dimexpr.25\dimexpr#1sp\relax\relax
+ \csname\number\numexpr#1-4*\dimexpr.25\dimexpr#1sp\endcsname
+ \ifodd#2 %
+ \number\numexpr(#2-1)/2\relax
+ \else
+ \number\numexpr#2/2\relax
+ \fi
+ \number\numexpr\ifodd#2 4+\fi
+ \dimexpr.0625\dimexpr`#3sp-128sp\relax\relax\relax
+ \933%
+ \expandafter\HyPsd@@@UTFviii@four\number
+ \numexpr`#3-16*\dimexpr.0625\dimexpr`#3sp|%
+ }%
+ \def\HyPsd@@@UTFviii@four#1|#2{%
+ \number\numexpr4+\dimexpr.25\dimexpr#1sp\relax\relax\relax
+ \csname\number\numexpr#1-4*\dimexpr.25\dimexpr#1sp\endcsname
+ \number\dimexpr.125\dimexpr`#2sp-128sp\relax\relax
+ \number\numexpr`#2-8*\dimexpr.125\dimexpr`#2sp\relax\relax\relax
+ }%
+% \end{macrocode}
+%
+% Input encoding |utf8x| of package |ucs| uses macro \cmd{\unichar}.
+% Values greater than |"FFFF| are not supported.
+% \begin{macrocode}
+ \def\HyPsd@unichar#1{%
+ \ifHy@unicode
+ \ifnum#1>"10FFFF %
+ \HyPsd@UnicodeReplacementCharacter % illegal
+ \else
+ \ifnum#1>"FFFF %
+% \end{macrocode}
+% High-surrogate code point.
+% (|"D800| = |55296|, |\p@| = |1pt| = |65536sp|)
+% \begin{macrocode}
+ \expandafter\HyPsd@unichar\expandafter{%
+ \number\numexpr 55296+%
+ \dimexpr.0009765625\dimexpr\number#1sp-\p@
+ \relax\relax\relax
+ }%
+% \end{macrocode}
+% Low-surrogate code point.
+% (|"DC00| = 56320, |"DC00| - |65536| = |-9216|)
+% \begin{macrocode}
+ \expandafter\HyPsd@unichar\expandafter{%
+ \number\numexpr#1-9216%
+ -1024*\dimexpr.0009765625\dimexpr\number#1sp-\p@
+ \relax\relax\relax
+ }%
+ \else
+ \ifnum#1>"7FF %
+ \9%
+ \expandafter\HyPsd@unichar@first@byte\expandafter{%
+ \number
+ \dimexpr.00390625\dimexpr\number#1sp\relax\relax
+ }%
+ \else
+ \8%
+ \number\dimexpr.00390625\dimexpr\number#1sp\relax\relax
+ \fi
+ \expandafter\HyPsd@unichar@second@byte\expandafter{%
+ \number
+ \numexpr#1-256*\number
+ \dimexpr.00390625\dimexpr\number#1sp\relax\relax\relax
+ }%
+ \fi
+ \fi
+ \else
+ .% unsupported (Unicode -> PDF Doc Encoding)
+ \fi
+ }%
+ \def\HyPsd@UnicodeReplacementCharacter{\9377\375}%
+ \def\HyPsd@unichar@first@byte#1{%
+ \number\dimexpr.015625\dimexpr#1sp\relax\relax
+ \expandafter\HyPsd@unichar@octtwo\expandafter{%
+ \number
+ \numexpr#1-64*\number\dimexpr.015625\dimexpr#1sp%
+ \relax\relax\relax
+ }%
+ }%
+ \def\HyPsd@unichar@second@byte#1{%
+ \csname\number\dimexpr.015625\dimexpr#1sp\relax\relax\endcsname
+ \expandafter\HyPsd@unichar@octtwo\expandafter{%
+ \number
+ \numexpr#1-64*\number\dimexpr.015625\dimexpr#1sp%
+ \relax\relax\relax
+ }%
+ }%
+ \def\HyPsd@unichar@octtwo#1{%
+ \number\dimexpr.125\dimexpr#1sp\relax\relax
+ \number\numexpr#1-8*\number\dimexpr.125\dimexpr#1sp%
+ \relax\relax\relax
+ }%
+% \end{macrocode}
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\HyPsd@utf@viii@undeferr}
+% \cs{utf@viii@undeferr} comes from file |utf8x.def| from
+% package |ucs|.
+% \begin{macrocode}
+\def\HyPsd@utf@viii@undeferr#1#2#3#4#5#6{%
+ \ifx\@gobble#1%
+ \else
+ [Please insert \textbackslash PrerenderUnicode%
+ \textbraceleft#1\textbraceright\space
+ into preamble]%
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Support for die faces (ifsym et. al.)}
+%
+% \begin{macro}{\HyPsd@DieFace}
+% Die faces are provided by
+% \begin{quote}
+% \begin{tabular}{@{}ll@{}}
+% Package & Macro\\
+% \hline
+% ifsym & \cs{Cube}\\
+% epsdice & \cs{epsdice}\\
+% hhcount & \cs{fcdice}
+% \end{tabular}
+% \end{quote}
+% \cs{Cube} and \cs{epsdice} restrict the range to the
+% numbers one to six. \cs{fcdice} generates for larger numbers
+% several dice faces with the sum matching the number.
+% The implementation for the PDF strings follows \cs{fcdice}.
+% \begin{macrocode}
+\def\HyPsd@DieFace#1{%
+ \ifHy@unicode
+ \ifnum#1<1 %
+ \HyPsd@UnicodeReplacementCharacter
+ \else
+ \ifnum#1>6 %
+ \9046\205%
+ \expandafter\expandafter\expandafter
+ \HyPsd@DieFaceLarge\intcalcSub{#1}{6}!%
+ \else
+ \9046\20\intcalcDec{#1}%
+ \fi
+ \fi
+ \else
+ .% Die faces are not part of PDFDocEncoding
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@DieFaceLarge}
+% \begin{macrocode}
+\def\HyPsd@DieFaceLarge#1!{%
+ \ifnum#1>6 %
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ {%
+ \9046\205%
+ \expandafter\expandafter\expandafter
+ \HyPsd@DieFaceLarge\IntCalcSub#1!6!!%
+ }{%
+ \9046\20\IntCalcDec#1!%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Support for moon phases of package china2e}
+%
+% \begin{macrocode}
+\def\HyPsd@MoonPha#1{%
+ \ifcase\intcalcNum{#1} %
+ \HyPsd@UnicodeReplacementCharacter
+ \or % 1
+% U+1F31A NEW MOON WITH FACE; \MoonPha{1} (china2e)
+ \9330\074\9337\032%
+ \or % 2
+ \HyPsd@UnicodeReplacementCharacter
+ \or % 3
+% U+1F31D FULL MOON WITH FACE; \MoonPha{3} (china2e)
+ \9330\074\9337\035%
+ \or % 4
+% U+1F31C LAST QUARTER MOON WITH FACE; \MoonPha{4} (china2e)
+ \9330\074\9337\034%
+ \else
+ \HyPsd@UnicodeReplacementCharacter
+ \fi
+}
+%* \HyPsd@MoonPha -> \MoonPha
+% \end{macrocode}
+%
+% \subsubsection{Support for package pifont}
+%
+% \begin{macro}{\HyPsd@ding}
+% \begin{macrocode}
+\def\HyPsd@ding#1{%
+ \ifHy@unicode
+ \ifnum#1<32 %
+ \HyPsd@UnicodeReplacementCharacter
+ \else
+ \ifnum#1>254 %
+ \HyPsd@UnicodeReplacementCharacter
+ \else
+ \ifnum#1<127 %
+ \expandafter\expandafter\expandafter
+ \HyPsd@@ding\intcalcNum{#1}!%
+ \else
+ \ifnum#1>160 %
+ \expandafter\expandafter\expandafter
+ \HyPsd@@ding\intcalcNum{#1}!%
+ \else
+ \HyPsd@UnicodeReplacementCharacter
+ \fi
+ \fi
+ \fi
+ \fi
+ \else
+ .% Dingbats are not part of PDFDocEncoding
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPsd@@ding}
+% \begin{macrocode}
+\def\HyPsd@@ding#1!{%
+ \ltx@ifundefined{HyPsd@ding@#1}{%
+ \ifnum#1<127 %
+ \9047%
+ \HyPsd@DecimalToOctalSecond{\IntCalcSub#1!32!}%
+ \else
+ \ifnum#1<168 %
+ \9047\14\IntCalcSub#1!160!%
+ \else
+ \ifnum#1>181 %
+ \9047\HyPsd@DecimalToOctalSecond{\IntCalcSub#1!64!}%
+ \else
+ % 172..181 -> U+2460..U+2469
+ \9044\HyPsd@DecimalToOctalSecond{\IntCalcSub#1!76!}%
+ \fi
+ \fi
+ \fi
+ }{%
+ \csname HyPsd@ding@#1\endcsname
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\@namedef{HyPsd@ding@32}{\space}
+% U+260E BLACK TELEPHONE
+\@namedef{HyPsd@ding@37}{\9046\016}% U+260E
+% U+261B BLACK RIGHT POINTING INDEX
+\@namedef{HyPsd@ding@42}{\9046\033}% U+261B
+% U+261E WHITE RIGHT POINTING INDEX
+\@namedef{HyPsd@ding@43}{\9046\036}% U+261E
+% U+2605 BLACK STAR
+\@namedef{HyPsd@ding@72}{\9046\005}% U+2605
+% U+25CF BLACK CIRCLE
+\@namedef{HyPsd@ding@108}{\9045\317}% U+25CF
+% U+25A0 BLACK SQUARE
+\@namedef{HyPsd@ding@110}{\9045\240}% U+25A0
+% U+25B2 BLACK UP-POINTING TRIANGLE
+\@namedef{HyPsd@ding@115}{\9045\262}% U+25B2
+% U+25BC BLACK DOWN-POINTING TRIANGLE
+\@namedef{HyPsd@ding@116}{\9045\274}% U+25BC
+% U+25C6 BLACK DIAMOND
+\@namedef{HyPsd@ding@117}{\9045\306}% U+25C6
+% U+25D7 RIGHT HALF BLACK CIRCLE
+\@namedef{HyPsd@ding@119}{\9045\327}% U+25D7
+\@namedef{HyPsd@ding@168}{\textclubsuitblack}%
+\@namedef{HyPsd@ding@169}{\textdiamondsuitblack}%
+\@namedef{HyPsd@ding@170}{\textheartsuitblack}%
+\@namedef{HyPsd@ding@171}{\textspadesuitblack}%
+\@namedef{HyPsd@ding@213}{\textrightarrow}%
+\@namedef{HyPsd@ding@214}{\textleftrightarrow}%
+\@namedef{HyPsd@ding@215}{\textupdownarrow}%
+\@namedef{HyPsd@ding@240}{\HyPsd@UnicodeReplacementCharacter}
+% \end{macrocode}
+%
+% \section{Support of other packages}
+%
+% \subsection{Class memoir}
+%
+% \begin{macrocode}
+\@ifclassloaded{memoir}{%
+ \Hy@AtEndOfPackage{\RequirePackage{memhfixc}}%
+}{}
+% \end{macrocode}
+%
+% \subsection{Package subfigure}
+% Added fix for version 2.1. Here \cmd{\sub@label} is defined.
+% \begin{macrocode}
+\@ifpackageloaded{subfigure}{%
+ \ltx@IfUndefined{sub@label}{%
+ \Hy@hypertexnamesfalse
+ }{%
+ \renewcommand*{\sub@label}[1]{%
+ \@bsphack
+ \subfig@oldlabel{#1}%
+ \if@filesw
+ \begingroup
+ \edef\@currentlabstr{%
+ \expandafter\strip@prefix\meaning\@currentlabelname
+ }%
+ \protected@write\@auxout{}{%
+ \string\newlabel{sub@#1}{%
+ {\@nameuse{@@thesub\@captype}}%
+ {\thepage}%
+ {%
+ \expandafter\strip@period\@currentlabstr
+ \relax.\relax\@@@%
+ }%
+ {\@currentHref}%
+ {}%
+ }%
+ }%
+ \endgroup
+ \fi
+ \@esphack
+ }%
+ \@ifpackagelater{subfigure}{2002/03/26}{}{%
+ \providecommand*{\toclevel@subfigure}{1}%
+ \providecommand*{\toclevel@subtable}{1}%
+ }%
+ }%
+}{}
+% \end{macrocode}
+%
+% \subsection{Package xr and xr-hyper}
+% The beta version of xr that supports \cmd{\XR@addURL} is called
+% \verb|xr-hyper|. Therefore we test for the macro itself and not
+% for the package name:
+% \begin{macrocode}
+\ltx@IfUndefined{XR@addURL}{%
+}{%
+% \end{macrocode}
+% If reading external aux files check whether they have a non zero
+% fourth field in |\newlabel| and if so, add the URL as the fifth field.
+% \begin{macrocode}
+ \def\XR@addURL#1{\XR@@dURL#1{}{}{}{}\\}%
+ \def\XR@@dURL#1#2#3#4#5\\{%
+ {#1}{#2}%
+ \if!#4!%
+ \else
+ {#3}{#4}{\XR@URL}%
+ \fi
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Hy@true{true}
+\def\Hy@false{false}
+% \end{macrocode}
+%
+% Providing dummy definitions.
+% \begin{macrocode}
+\let\literalps@out\@gobble
+\newcommand\pdfbookmark[3][]{}
+\def\Acrobatmenu#1#2{\leavevmode#2}
+\def\Hy@writebookmark#1#2#3#4#5{}%
+% \end{macrocode}
+%
+% \section{Help macros for links}
+% Anchors get created on the baseline of where they occur. If an
+% XYZ PDF view is set, this means that the link places the top of the
+% screen \emph{on the baseline} of the target. If this is an equation,
+% for instance, it means that you cannot see anything. Some links, of
+% course, are created at the start of environments, and so it works. To
+% allow for this, anchors are raised, where possible, by some small
+% amount. This defaults to |\baselineskip|, but users can set it to
+% something else in two ways (thanks to Heiko Oberdiek for suggesting this):
+% \begin{enumerate}
+% \item Redefine |\HyperRaiseLinkDefault| to be eg the height of a |\strut|
+% \item Redefine |\HyperRaiseLinkHook| to do something complicated;
+% it must give a value to |\HyperRaiseLinkLength|, which is what
+% actually gets used
+% \end{enumerate}
+% \begin{macrocode}
+\let\HyperRaiseLinkHook\@empty
+\def\HyperRaiseLinkDefault{\baselineskip}
+% \end{macrocode}
+% |\HyperRaiseLinkHook| allows the user to reassign
+% |\HyperRaiseLinkLength|.
+% \begin{macrocode}
+\newcount\Hy@SavedSpaceFactor
+\def\Hy@SaveSpaceFactor{%
+ \global\Hy@SavedSpaceFactor=\ifhmode\spacefactor\else\z@\fi
+}
+\def\Hy@RestoreSpaceFactor{%
+ \relax
+ \ifhmode
+ \ifnum\Hy@SavedSpaceFactor>\z@
+ \spacefactor=\Hy@SavedSpaceFactor
+ \fi
+ \fi
+}
+\def\Hy@SaveSavedSpaceFactor{%
+ \edef\Hy@RestoreSavedSpaceFactor{%
+ \global\Hy@SavedSpaceFactor=\the\Hy@SavedSpaceFactor\relax
+ }%
+}
+\def\Hy@raisedlink#1{%
+ \ifvmode
+ #1%
+ \else
+ \Hy@SaveSpaceFactor
+ \penalty\@M
+ \smash{%
+ \begingroup
+ \let\HyperRaiseLinkLength\@tempdima
+ \setlength\HyperRaiseLinkLength\HyperRaiseLinkDefault
+ \HyperRaiseLinkHook
+ \expandafter\endgroup
+ \expandafter\raise\the\HyperRaiseLinkLength\hbox{%
+ \Hy@RestoreSpaceFactor
+ #1%
+ \Hy@SaveSpaceFactor
+ }%
+ }%
+ \Hy@RestoreSpaceFactor
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macro}{\Hy@SaveLastskip}
+% \begin{macro}{\Hy@RestoreLastskip}
+% Inserting a \cmd{\special} command to set a
+% destination destroys the \cmd{\lastskip} value.
+%
+% \begin{macrocode}
+\def\Hy@SaveLastskip{%
+ \let\Hy@RestoreLastskip\relax
+ \ifvmode
+ \ifdim\lastskip=\z@
+ \let\Hy@RestoreLastskip\nobreak
+ \else
+ \begingroup
+ \skip@=-\lastskip
+ \edef\x{%
+ \endgroup
+ \def\noexpand\Hy@RestoreLastskip{%
+ \noexpand\ifvmode
+ \noexpand\nobreak
+ \vskip\the\skip@
+ \vskip\the\lastskip\relax
+ \noexpand\fi
+ }%
+ }%
+ \x
+ \fi
+ \else
+ \ifhmode
+ \ifdim\lastskip=\z@
+ \let\Hy@RestoreLastskip\nobreak
+ \else
+ \begingroup
+ \skip@=-\lastskip
+ \edef\x{%
+ \endgroup
+ \def\noexpand\Hy@RestoreLastskip{%
+ \noexpand\ifhmode
+ \noexpand\nobreak
+ \hskip\the\skip@
+ \hskip\the\lastskip\relax
+ \noexpand\fi
+ }%
+ }%
+ \x
+ \fi
+ \fi
+ \fi
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Options}
+%
+% \begin{macrocode}
+\SetupKeyvalOptions{%
+ family=Hyp,%
+ prefix=HyOpt%
+}
+% \end{macrocode}
+%
+% \subsection{Help macros}
+%
+% \begin{macro}{\IfHyperBooleanExists}
+% \begin{macrocode}
+\def\IfHyperBooleanExists#1{%
+ \ltx@ifundefined{Hy@#1false}\ltx@secondoftwo{%
+ \ltx@ifundefined{KV@Hyp@#1@default}\ltx@secondoftwo\ltx@firstoftwo
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\@namedef{KV@Hyp@stoppedearly@default}{}
+% \end{macrocode}
+%
+% \begin{macro}{\IfHyperBoolean}
+% \begin{macrocode}
+\def\IfHyperBoolean#1{%
+ \IfHyperBooleanExists{#1}{%
+ \csname ifHy@#1\endcsname
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ }\ltx@secondoftwo
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@boolkey}
+% \begin{macrocode}
+\def\Hy@boolkey#1#2{%
+ \edef\Hy@tempa{#2}%
+ \lowercase\expandafter{%
+ \expandafter\def\expandafter\Hy@tempa\expandafter{\Hy@tempa}%
+ }%
+ \ifx\Hy@tempa\@empty
+ \let\Hy@tempa\Hy@true
+ \fi
+ \ifx\Hy@tempa\Hy@true
+ \else
+ \ifx\Hy@tempa\Hy@false
+ \else
+ \let\Hy@tempa\relax
+ \fi
+ \fi
+ \ifx\Hy@tempa\relax
+ \Hy@WarnOptionValue{#2}{#1}{`true' or 'false'}%
+ \else
+ \Hy@Info{Option `#1' set `\Hy@tempa'}%
+ \csname Hy@#1\Hy@tempa\endcsname
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@WarnOptionValue}
+% \begin{macrocode}
+\def\Hy@WarnOptionValue#1#2#3{%
+ \Hy@Warning{%
+ Unexpected value `#1'\MessageBreak
+ of option `#2' instead of\MessageBreak
+ #3%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@DisableOption}
+% \begin{macrocode}
+\def\Hy@realDisableOption#1{%
+ \ltx@ifundefined{KV@Hyp@#1@default}{%
+ \define@key{Hyp}{#1}%
+ }{%
+ \define@key{Hyp}{#1}[]%
+ }%
+ {\Hy@WarnOptionDisabled{#1}}%
+}
+
+\def\Hy@DisableOption#1{%
+ \ifnum\currentgrouplevel>0
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {%
+ \expandafter\gdef\csname Hy@smuggleout#1\endcsname{\Hy@DisableOption{#1}}%
+ \expandafter\aftergroup\csname Hy@smuggleout#1\endcsname
+ }
+ {\Hy@realDisableOption{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@WarnOptionDisabled}
+% \begin{macrocode}
+\def\Hy@WarnOptionDisabled#1{%
+ \Hy@Warning{%
+ Option `#1' has already been used,\MessageBreak
+ setting the option has no effect%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@CheckOptionValue}
+% Some options take a string value out of a limited set of values.
+% Macro \cs{Hy@CheckOptionValue} checks whether the given value |#1|
+% for option |#2| is a member of the value list |#3|.
+% \begin{macrocode}
+\def\Hy@CheckOptionValue#1#2#3{%
+ \begingroup
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \let\y=y%
+ \def\do##1##2{%
+ \def\z{##1}%
+ \@onelevel@sanitize\z
+ \ifx\x\z
+ \let\y=n%
+ \let\do\@gobbletwo
+ \fi
+ }%
+ #3%
+ \ifx\y y%
+ \def\do##1##2{%
+ * `##1'%
+ \ifx\\##2\\\else\space(##2)\fi
+ \MessageBreak
+ }%
+ \Hy@Warning{%
+ Values of option `#2':\MessageBreak
+ #3%
+ * An empty value disables the option.\MessageBreak
+ Unknown value `\x'%
+ }%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@DefNameKey}
+% \noindent
+% |#1|: option name\\
+% |#2|: \cs{do} list with known values, first
+% argument of \cs{do} is value, second argument is a comment.
+% \begin{macrocode}
+\def\Hy@DefNameKey#1{%
+ \expandafter\Hy@@DefNameKey\csname @#1\endcsname{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@@DefNameKey}
+% \noindent
+% |#1|: macro for value storage\\
+% |#2|: option name\\
+% |#3|: \cs{do} list with known values.
+% \begin{macrocode}
+\def\Hy@@DefNameKey#1#2#3{%
+ \define@key{Hyp}{#2}{%
+ \edef#1{##1}%
+ \ifx#1\@empty
+ \else
+ \Hy@CheckOptionValue{##1}{#2}{#3}%
+ \fi
+ }%
+ \let#1\@empty
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@UseNameKey}
+% \begin{macrocode}
+\def\Hy@UseNameKey#1#2{%
+ \ifx#2\@empty
+ \else
+ /#1/#2%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Defining the options}
+% \begin{macrocode}
+\define@key{Hyp}{implicit}[true]{%
+ \Hy@boolkey{implicit}{#1}%
+}
+\define@key{Hyp}{draft}[true]{%
+ \Hy@boolkey{draft}{#1}%
+}
+\define@key{Hyp}{final}[true]{%
+ \Hy@boolkey{final}{#1}%
+}
+\let\KV@Hyp@nolinks\KV@Hyp@draft
+% \end{macrocode}
+% \begin{macrocode}
+\def\Hy@ObsoletePaperOption#1{%
+ \Hy@WarningNoLine{%
+ Option `#1' is no longer used%
+ }%
+ \define@key{Hyp}{#1}[true]{}%
+}
+\def\Hy@temp#1{%
+ \define@key{Hyp}{#1}[true]{%
+ \Hy@ObsoletePaperOption{#1}%
+ }%
+}
+\Hy@temp{a4paper}
+\Hy@temp{a5paper}
+\Hy@temp{b5paper}
+\Hy@temp{letterpaper}
+\Hy@temp{legalpaper}
+\Hy@temp{executivepaper}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{setpagesize}[true]{%
+ \Hy@boolkey{setpagesize}{#1}%
+}
+\define@key{Hyp}{debug}[true]{%
+ \Hy@boolkey{debug}{#1}%
+}
+\define@key{Hyp}{linktocpage}[true]{%
+ \Hy@boolkey{linktocpage}{#1}%
+ \ifHy@linktocpage
+ \let\Hy@linktoc\Hy@linktoc@page
+ \else
+ \let\Hy@linktoc\Hy@linktoc@section
+ \fi
+}
+\chardef\Hy@linktoc@none=0 %
+\chardef\Hy@linktoc@section=1 %
+\chardef\Hy@linktoc@page=2 %
+\chardef\Hy@linktoc@all=3 %
+\ifHy@linktocpage
+ \let\Hy@linktoc\Hy@linktoc@page
+\else
+ \let\Hy@linktoc\Hy@linktoc@section
+\fi
+\define@key{Hyp}{linktoc}{%
+ \@ifundefined{Hy@linktoc@#1}{%
+ \Hy@Warning{%
+ Unexpected value `#1' of\MessageBreak
+ option `linktoc' instead of `none',\MessageBreak
+ `section', `page' or `all'%
+ }%
+ }{%
+ \expandafter\let\expandafter\Hy@linktoc
+ \csname Hy@linktoc@#1\endcsname
+ }%
+}
+\define@key{Hyp}{extension}{\def\XR@ext{#1}}
+\let\XR@ext\relax
+\define@key{Hyp}{verbose}[true]{%
+ \Hy@boolkey{verbose}{#1}%
+}
+\define@key{Hyp}{typexml}[true]{%
+ \Hy@boolkey{typexml}{#1}%
+}
+% \end{macrocode}
+% If we are going to PDF via HyperTeX |\special| commands,
+% the dvips (-z option) processor does not know
+% the \emph{height} of a link, as it works solely on the
+% position of the closing |\special|. If we use this option,
+% the |\special| is raised up by the right amount, to fool
+% the dvi processor.
+% \begin{macrocode}
+\define@key{Hyp}{raiselinks}[true]{%
+ \Hy@boolkey{raiselinks}{#1}%
+}
+% \end{macrocode}
+% Most PDF-creating drivers do not allow links to be broken
+% \begin{macrocode}
+\def\Hy@setbreaklinks#1{%
+ \csname breaklinks#1\endcsname
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Hy@breaklinks@unsupported{%
+ \ifx\Hy@setbreaklinks\@gobble
+ \ifHy@breaklinks
+ \Hy@WarningNoLine{%
+ You have enabled option `breaklinks'.\MessageBreak
+ But driver `\Hy@driver.def' does not suppport this.\MessageBreak
+ Expect trouble with the link areas of broken links%
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{breaklinks}[true]{%
+ \Hy@boolkey{breaklinks}{#1}%
+ \let\Hy@setbreaklinks\@gobble
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{localanchorname}[true]{%
+ \Hy@boolkey{localanchorname}{#1}%
+}
+% \end{macrocode}
+% Determines whether an automatic anchor is put on each page
+% \begin{macrocode}
+\define@key{Hyp}{pageanchor}[true]{%
+ \Hy@boolkey{pageanchor}{#1}%
+}
+% \end{macrocode}
+% Are the page links done as plain arabic numbers, or do
+% they follow the formatting of the package? The latter loses
+% if you put in typesetting like |\textbf| or the like.
+% \begin{macrocode}
+\define@key{Hyp}{plainpages}[true]{%
+ \Hy@boolkey{plainpages}{#1}%
+}
+% \end{macrocode}
+% Are the names for anchors made as per the HyperTeX system,
+% or do they simply use what \LaTeX\ provides?
+% \begin{macrocode}
+\define@key{Hyp}{naturalnames}[true]{%
+ \Hy@boolkey{naturalnames}{#1}%
+}
+% \end{macrocode}
+% Completely ignore the names as per the HyperTeX system,
+% and use unique counters.
+% \begin{macrocode}
+\define@key{Hyp}{hypertexnames}[true]{%
+ \Hy@boolkey{hypertexnames}{#1}%
+}
+% \end{macrocode}
+% Currently, |dvips| doesn't allow anchors nested within targets,
+% so this option tries to stop that happening. Other processors
+% may be able to cope.
+% \begin{macrocode}
+\define@key{Hyp}{nesting}[true]{%
+ \Hy@boolkey{nesting}{#1}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{destlabel}[true]{%
+ \Hy@boolkey{destlabel}{#1}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\define@key{Hyp}{unicode}[true]{%
+ \Hy@boolkey{unicode}{#1}%
+ \ifHy@unicode
+ \def\HyPsd@pdfencoding{unicode}%
+ \HyPsd@LoadUnicode
+ \else
+ \def\HyPsd@pdfencoding{pdfdoc}%
+ \fi
+}
+\Hy@AtBeginDocument{%
+ \ifx\HyPsd@LoadUnicode\relax
+ \else
+ \def\HyPsd@LoadUnicode{%
+ \Hy@Error{%
+ Unicode support for bookmarks is not available.\MessageBreak
+ Activate unicode support by using one of the options\MessageBreak
+ `unicode', `pdfencoding=unicode', `pdfencoding=auto'\MessageBreak
+ in the preamble%
+ }\@ehc
+ \global\let\HyPsd@LoadUnicode\relax
+ \global\Hy@unicodefalse
+ \global\let\Hy@unicodetrue\Hy@unicodefalse
+ }%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{pdfencoding}{%
+ \edef\HyPsd@temp{#1}%
+ \ifx\HyPsd@temp\HyPsd@pdfencoding@pdfdoc
+ \let\HyPsd@pdfencoding\HyPsd@temp
+ \Hy@unicodefalse
+ \else
+ \ifcase\ifx\HyPsd@temp\HyPsd@pdfencoding@unicode
+ \z@
+ \else
+ \ifx\HyPsd@temp\HyPsd@pdfencoding@auto
+ \z@
+ \else
+ \@ne
+ \fi
+ \fi
+ \let\HyPsd@pdfencoding\HyPsd@temp
+ \hypersetup{unicode}%
+ \ifHy@unicode
+ \def\HyPsd@pdfencoding{#1}%
+ \ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
+ \HyPsd@LoadStringEnc
+ \fi
+ \else
+ \Hy@Warning{Cannot switch to unicode bookmarks}%
+ \let\HyPsd@pdfencoding\HyPsd@pdfencoding@pdfdoc
+ \fi
+ \else
+ \@onelevel@sanitize\HyPsd@temp
+ \Hy@Warning{%
+ Values of option `pdfencoding':\MessageBreak
+ `pdfdoc', `unicode', `auto'.\MessageBreak
+ Ignoring unknown value `\HyPsd@temp'%
+ }%
+ \fi
+ \fi
+}
+\def\HyPsd@pdfencoding@auto{auto}
+\def\HyPsd@pdfencoding@pdfdoc{pdfdoc}
+\def\HyPsd@pdfencoding@unicode{unicode}
+\let\HyPsd@pdfencoding\Hy@pdfencoding@pdfdoc
+\def\HyPsd@LoadStringEnc{%
+ \RequirePackage{stringenc}[2009/12/15]%
+ \let\HyPsd@LoadStringEnc\relax
+}
+\Hy@AtBeginDocument{%
+ \@ifpackageloaded{stringenc}{%
+ \let\HyPsd@LoadStringEnc\relax
+ }{%
+ \def\HyPsd@LoadStringEnc{%
+ \Hy@WarningNoLine{%
+ Missing package `stringenc'. Use `pdfencoding=auto'\MessageBreak
+ in the preamble or load the package there%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\define@key{Hyp}{psdextra}[true]{%
+ \Hy@boolkey{psdextra}{#1}%
+ \HyPsd@LoadExtra
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\hypersetup{\kvsetkeys{Hyp}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifHy@setpdfversion
+\define@key{Hyp}{pdfversion}{%
+ \@ifundefined{Hy@pdfversion@#1}{%
+ \PackageWarning{hyperref}{%
+ Unsupported PDF version `#1'.\MessageBreak
+ Valid values: 1.2 until 1.9%
+ }%
+ }{%
+ \Hy@setpdfversiontrue
+ \edef\Hy@pdfversion{\@nameuse{Hy@pdfversion@#1}}%
+ }%
+}
+\@namedef{Hy@pdfversion@1.2}{2}%
+\@namedef{Hy@pdfversion@1.3}{3}%
+\@namedef{Hy@pdfversion@1.4}{4}%
+\@namedef{Hy@pdfversion@1.5}{5}%
+\@namedef{Hy@pdfversion@1.6}{6}%
+\@namedef{Hy@pdfversion@1.7}{7}%
+\@namedef{Hy@pdfversion@1.8}{8}%
+\@namedef{Hy@pdfversion@1.9}{9}%
+\def\Hy@pdfversion{5}
+% \end{macrocode}
+%
+% \section{Options for different drivers}\label{drivers}
+%
+% \begin{macrocode}
+\newif\ifHy@DviMode
+\let\Hy@DviErrMsg\ltx@empty
+\ifpdf
+ \def\Hy@DviErrMsg{pdfTeX or LuaTeX is running in PDF mode}%
+\else
+ \ifxetex
+ \def\Hy@DviErrMsg{XeTeX is running}%
+ \else
+ \ifvtex
+ \ifvtexdvi
+ \Hy@DviModetrue
+ \else
+ \def\Hy@DviErrMsg{VTeX is running, but not in DVI mode}%
+ \fi
+ \else
+ \Hy@DviModetrue
+ \fi
+ \fi
+\fi
+\def\HyOpt@CheckDvi#1{%
+ \ifHy@DviMode
+ \expandafter\ltx@firstofone
+ \else
+ \Hy@Error{%
+ Wrong DVI mode driver option `#1',\MessageBreak
+ because \Hy@DviErrMsg
+ }\@ehc
+ \expandafter\ltx@gobble
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareVoidOption{tex4ht}{%
+ \Hy@texhttrue
+ \kvsetkeys{Hyp}{colorlinks=true}%
+ \def\BeforeTeXIVht{\RequirePackage{color}}%
+ \def\Hy@driver{htex4ht}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+}
+\DeclareVoidOption{pdftex}{%
+ \ifpdf
+ \def\Hy@driver{hpdftex}%
+ \PassOptionsToPackage{pdftex}{color}%
+ \else
+ \Hy@Error{%
+ Wrong driver option `pdftex',\MessageBreak
+ because pdfTeX in PDF mode is not detected%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{luatex}{%
+ \ifpdf
+ \ifx\pdfextension\@undefined
+ \def\Hy@driver{hpdftex}%
+ \PassOptionsToPackage{pdftex}{color}%
+ \else
+ \def\Hy@driver{hluatex}%
+ \PassOptionsToPackage{luatex}{color}%
+ \fi
+ \else
+ \Hy@Error{%
+ Wrong driver option `luatex',\MessageBreak
+ because luaTeX in PDF mode is not detected%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{nativepdf}{%
+ \HyOpt@CheckDvi{nativepdf}{%
+ \def\Hy@driver{hdvips}%
+ \PassOptionsToPackage{dvips}{color}%
+ }%
+}
+\DeclareVoidOption{dvipdfm}{%
+ \HyOpt@CheckDvi{dvipdfm}{%
+ \def\Hy@driver{hdvipdfm}%
+ }%
+}
+\DeclareVoidOption{dvipdfmx}{%
+ \HyOpt@CheckDvi{dvipdfmx}{%
+ \def\Hy@driver{hdvipdfm}%
+ \PassOptionsToPackage{dvipdfmx}{color}%
+ }%
+}
+\define@key{Hyp}{dvipdfmx-outline-open}[true]{%
+ \expandafter\ifx\csname if#1\expandafter\endcsname
+ \csname iftrue\endcsname
+ \chardef\SpecialDvipdfmxOutlineOpen\@ne
+ \else
+ \chardef\SpecialDvipdfmxOutlineOpen\z@
+ \fi
+}
+\DeclareVoidOption{xetex}{%
+ \ifxetex
+ \def\Hy@driver{hxetex}%
+ \else
+ \Hy@Error{%
+ Wrong driver option `xetex',\MessageBreak
+ because XeTeX is not detected%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{pdfmark}{%
+ \HyOpt@CheckDvi{pdfmark}{%
+ \def\Hy@driver{hdvips}%
+ }%
+}
+\DeclareVoidOption{dvips}{%
+ \HyOpt@CheckDvi{dvips}{%
+ \def\Hy@driver{hdvips}%
+ \PassOptionsToPackage{dvips}{color}%
+ }%
+}
+\DeclareVoidOption{hypertex}{%
+ \HyOpt@CheckDvi{hypertex}{%
+ \def\Hy@driver{hypertex}%
+ }%
+}
+\let\Hy@MaybeStopNow\relax
+\DeclareVoidOption{vtex}{%
+ \ifvtex
+ \ifnum 0\ifnum\OpMode<1 1\fi \ifnum\OpMode>3 1\fi =0 %
+ \def\Hy@driver{hvtex}%
+ \else
+ \ifnum\OpMode=10\relax
+ \def\Hy@driver{hvtexhtm}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtex',\MessageBreak
+ because of wrong OpMode (\the\OpMode)%
+ }\@ehc
+ \fi
+ \fi
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtex',\MessageBreak
+ because VTeX is not running%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{vtexpdfmark}{%
+ \ifvtex
+ \ifnum 0\ifnum\OpMode<1 1\fi \ifnum\OpMode>3 1\fi =0 %
+ \def\Hy@driver{hvtexmrk}%
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtexpdfmark',\MessageBreak
+ because of wrong OpMode (\the\OpMode)%
+ }\@ehc
+ \fi
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtexpdfmark,\MessageBreak
+ because VTeX is not running%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{dviwindo}{%
+ \HyOpt@CheckDvi{dviwindo}{%
+ \def\Hy@driver{hdviwind}%
+ \kvsetkeys{Hyp}{colorlinks}%
+ \PassOptionsToPackage{dviwindo}{color}%
+ }%
+}
+\DeclareVoidOption{dvipsone}{%
+ \HyOpt@CheckDvi{dvipsone}{%
+ \def\Hy@driver{hdvipson}%
+ \PassOptionsToPackage{dvipsone}{color}%
+ }%
+}
+\DeclareVoidOption{textures}{%
+ \HyOpt@CheckDvi{textures}{%
+ \def\Hy@driver{htexture}%
+ }%
+}
+\DeclareVoidOption{latex2html}{%
+ \HyOpt@CheckDvi{latex2html}{%
+ \Hy@AtBeginDocument{\@@latextohtmlX}%
+ }%
+}
+% \end{macrocode}
+% No more special treatment for ps2pdf. Let it sink or swim.
+% \begin{macrocode}
+\DeclareVoidOption{ps2pdf}{%
+ \HyOpt@CheckDvi{ps2pdf}{%
+ \def\Hy@driver{hdvips}%
+ \PassOptionsToPackage{dvips}{color}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\HyOpt@DriverFallback\ltx@empty
+\define@key{Hyp}{driverfallback}{%
+ \ifHy@DviMode
+ \def\HyOpt@DriverFallback{#1}%
+ \Hy@Match\HyOpt@DriverFallback{}{%
+ ^(|dvipdfm|dvipdfmx|dvips|dvipsone|dviwindo|hypertex|ps2pdf|%
+ latex2html|tex4ht)$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid driver `#1' for option\MessageBreak
+ `driverfallback'%
+ }%
+ \let\HyOpt@DriverFallback\ltx@empty
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\HyOpt@CustomDriver\ltx@empty
+\define@key{Hyp}{customdriver}{%
+ \IfFileExists{#1.def}{%
+ \def\HyOpt@CustomDriver{#1}%
+ }{%
+ \Hy@Warning{%
+ Missing driver file `#1.def',\MessageBreak
+ ignoring custom driver%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \section{Options to add extra features}\label{features}
+% Make included figures (assuming they use the standard graphics
+% package) be hypertext links. Off by default. Needs more work.
+% \begin{macrocode}
+\define@key{Hyp}{hyperfigures}[true]{%
+ \Hy@boolkey{hyperfigures}{#1}%
+}
+% \end{macrocode}
+%
+% The automatic footnote linking can be disabled
+% by option hyperfootnotes.
+% \begin{macrocode}
+\define@key{Hyp}{hyperfootnotes}[true]{%
+ \Hy@boolkey{hyperfootnotes}{#1}%
+}
+% \end{macrocode}
+%
+% Set up back-referencing to be hyper links, by page,
+% slide or section number,
+% \begin{macrocode}
+\def\back@none{none}
+\def\back@section{section}
+\def\back@page{page}
+\def\back@slide{slide}
+\define@key{Hyp}{backref}[section]{%
+ \lowercase{\def\Hy@tempa{#1}}%
+ \ifx\Hy@tempa\@empty
+ \let\Hy@tempa\back@section
+ \fi
+ \ifx\Hy@tempa\Hy@false
+ \let\Hy@tempa\back@none
+ \fi
+ \ifx\Hy@tempa\back@slide
+ \let\Hy@tempa\back@section
+ \fi
+ \ifx\Hy@tempa\back@page
+ \PassOptionsToPackage{hyperpageref}{backref}%
+ \Hy@backreftrue
+ \else
+ \ifx\Hy@tempa\back@section
+ \PassOptionsToPackage{hyperref}{backref}%
+ \Hy@backreftrue
+ \else
+ \ifx\Hy@tempa\back@none
+ \Hy@backreffalse
+ \else
+ \Hy@WarnOptionValue{#1}{backref}{%
+ `section', `slide', `page', `none',\MessageBreak
+ or `false'}%
+ \fi
+ \fi
+ \fi
+}
+\define@key{Hyp}{pagebackref}[true]{%
+ \edef\Hy@tempa{#1}%
+ \lowercase\expandafter{%
+ \expandafter\def\expandafter\Hy@tempa\expandafter{\Hy@tempa}%
+ }%
+ \ifx\Hy@tempa\@empty
+ \let\Hy@tempa\Hy@true
+ \fi
+ \ifx\Hy@tempa\Hy@true
+ \PassOptionsToPackage{hyperpageref}{backref}%
+ \Hy@backreftrue
+ \else
+ \ifx\Hy@tempa\Hy@false
+ \Hy@backreffalse
+ \else
+ \Hy@WarnOptionValue{#1}{pagebackref}{`true' or `false'}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Make index entries be links back to the relevant pages. By default
+% this is turned on, but may be stopped.
+% \begin{macrocode}
+\define@key{Hyp}{hyperindex}[true]{%
+ \Hy@boolkey{hyperindex}{#1}%
+}
+% \end{macrocode}
+% Configuration of encap char.
+% \begin{macrocode}
+\define@key{Hyp}{encap}[\|]{%
+ \def\HyInd@EncapChar{#1}%
+}
+% \end{macrocode}
+%
+% \section{Language options}
+%
+% The \cmd{\autoref} feature depends on the language.
+% \begin{macrocode}
+\def\HyLang@afrikaans{%
+ \def\equationautorefname{Vergelyking}%
+ \def\footnoteautorefname{Voetnota}%
+ \def\itemautorefname{Item}%
+ \def\figureautorefname{Figuur}%
+ \def\tableautorefname{Tabel}%
+ \def\partautorefname{Deel}%
+ \def\appendixautorefname{Bylae}%
+ \def\chapterautorefname{Hoofstuk}%
+ \def\sectionautorefname{Afdeling}%
+ \def\subsectionautorefname{Subafdeling}%
+ \def\subsubsectionautorefname{Subsubafdeling}%
+ \def\paragraphautorefname{Paragraaf}%
+ \def\subparagraphautorefname{Subparagraaf}%
+ \def\FancyVerbLineautorefname{Lyn}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{Bladsy}%
+}
+\def\HyLang@english{%
+ \def\equationautorefname{Equation}%
+ \def\footnoteautorefname{footnote}%
+ \def\itemautorefname{item}%
+ \def\figureautorefname{Figure}%
+ \def\tableautorefname{Table}%
+ \def\partautorefname{Part}%
+ \def\appendixautorefname{Appendix}%
+ \def\chapterautorefname{chapter}%
+ \def\sectionautorefname{section}%
+ \def\subsectionautorefname{subsection}%
+ \def\subsubsectionautorefname{subsubsection}%
+ \def\paragraphautorefname{paragraph}%
+ \def\subparagraphautorefname{subparagraph}%
+ \def\FancyVerbLineautorefname{line}%
+ \def\theoremautorefname{Theorem}%
+ \def\pageautorefname{page}%
+}
+\def\HyLang@french{%
+ \def\equationautorefname{\'Equation}%
+ \def\footnoteautorefname{note}%
+ \def\itemautorefname{item}%
+ \def\figureautorefname{Figure}%
+ \def\tableautorefname{Tableau}%
+ \def\partautorefname{Partie}%
+ \def\appendixautorefname{Appendice}%
+ \def\chapterautorefname{chapitre}%
+ \def\sectionautorefname{section}%
+ \def\subsectionautorefname{sous-section}%
+ \def\subsubsectionautorefname{sous-sous-section}%
+ \def\paragraphautorefname{paragraphe}%
+ \def\subparagraphautorefname{sous-paragraphe}%
+ \def\FancyVerbLineautorefname{ligne}%
+ \def\theoremautorefname{Th\'eor\`eme}%
+ \def\pageautorefname{page}%
+}
+\def\HyLang@german{%
+ \def\equationautorefname{Gleichung}%
+ \def\footnoteautorefname{Fu\ss note}%
+ \def\itemautorefname{Punkt}%
+ \def\figureautorefname{Abbildung}%
+ \def\tableautorefname{Tabelle}%
+ \def\partautorefname{Teil}%
+ \def\appendixautorefname{Anhang}%
+ \def\chapterautorefname{Kapitel}%
+ \def\sectionautorefname{Abschnitt}%
+ \def\subsectionautorefname{Unterabschnitt}%
+ \def\subsubsectionautorefname{Unterunterabschnitt}%
+ \def\paragraphautorefname{Absatz}%
+ \def\subparagraphautorefname{Unterabsatz}%
+ \def\FancyVerbLineautorefname{Zeile}%
+ \def\theoremautorefname{Theorem}%
+ \def\pageautorefname{Seite}%
+}
+\def\HyLang@italian{%
+ \def\equationautorefname{Equazione}%
+ \def\footnoteautorefname{nota}%
+ \def\itemautorefname{punto}%
+ \def\figureautorefname{Figura}%
+ \def\tableautorefname{Tabella}%
+ \def\partautorefname{Parte}%
+ \def\appendixautorefname{Appendice}%
+ \def\chapterautorefname{Capitolo}%
+ \def\sectionautorefname{sezione}%
+ \def\subsectionautorefname{sottosezione}%
+ \def\subsubsectionautorefname{sottosottosezione}%
+ \def\paragraphautorefname{paragrafo}%
+ \def\subparagraphautorefname{sottoparagrafo}%
+ \def\FancyVerbLineautorefname{linea}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{Pag.\@}%
+}
+\def\HyLang@magyar{%
+ \def\equationautorefname{Egyenlet}%
+ \def\footnoteautorefname{l\'abjegyzet}%
+ \def\itemautorefname{Elem}%
+ \def\figureautorefname{\'Abra}%
+ \def\tableautorefname{T\'abl\'azat}%
+ \def\partautorefname{R\'esz}%
+ \def\appendixautorefname{F\"uggel\'ek}%
+ \def\chapterautorefname{fejezet}%
+ \def\sectionautorefname{szakasz}%
+ \def\subsectionautorefname{alszakasz}%
+ \def\subsubsectionautorefname{alalszakasz}%
+ \def\paragraphautorefname{bekezd\'es}%
+ \def\subparagraphautorefname{albekezd\'es}%
+ \def\FancyVerbLineautorefname{sor}%
+ \def\theoremautorefname{T\'etel}%
+ \def\pageautorefname{oldal}%
+}
+\def\HyLang@portuges{%
+ \def\equationautorefname{Equa\c c\~ao}%
+ \def\footnoteautorefname{Nota de rodap\'e}%
+ \def\itemautorefname{Item}%
+ \def\figureautorefname{Figura}%
+ \def\tableautorefname{Tabela}%
+ \def\partautorefname{Parte}%
+ \def\appendixautorefname{Ap\^endice}%
+ \def\chapterautorefname{Cap\'itulo}%
+ \def\sectionautorefname{Se\c c\~ao}%
+ \def\subsectionautorefname{Subse\c c\~ao}%
+ \def\subsubsectionautorefname{Subsubse\c c\~ao}%
+ \def\paragraphautorefname{par\'agrafo}%
+ \def\subparagraphautorefname{subpar\'agrafo}%
+ \def\FancyVerbLineautorefname{linha}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{P\'agina}%
+}
+% \end{macrocode}
+%
+% Next commented section for Russian is provided by Olga Lapko.
+%
+% Next follow the checked reference names with commented variants and
+% explanations. All they are abbreviated and they won't create a
+% grammatical problems in the \emph{middle} of sentences.
+%
+% The most weak points in these abbreviations are the
+% |\equationautorefname|, |\theoremautorefname| and the
+% |\FancyVerbLineautorefname|. But those three, and also the
+% |\footnoteautorefname| are not \emph{too} often referenced.
+% Another rather weak point is the |\appendixautorefname|.
+% \begin{macrocode}
+\def\HyLang@russian{%
+% \end{macrocode}
+% The abbreviated reference to the equation:
+% it is not for ``the good face of the book'', but maybe it will be
+% better to get the company for the |\theoremautorefname|?
+% \begin{macrocode}
+ \def\equationautorefname{\cyr\cyrv\cyrery\cyrr.}%
+% \end{macrocode}
+% The name of the equation reference has common form for both
+% nominative and accusative but changes in other forms, like
+% ``of |\autoref{auto}|'' etc. The full name must follow full
+% name of the |\theoremautorefname|.
+% \begin{macrocode}
+% \def\equationautorefname{%
+% \cyr\cyrv\cyrery\cyrr\cyra\cyrzh\cyre\cyrn\cyri\cyre
+% }%
+% \end{macrocode}
+%
+% The variant of footnote has abbreviation form of the synonym
+% of the word ``footnote''. This variant of abbreviated synonym
+% has alternative status (maybe obsolete?).
+% \begin{macrocode}
+ \def\footnoteautorefname{%
+ \cyr\cyrp\cyro\cyrd\cyrs\cyrt\cyrr.\ \cyrp\cyrr\cyri\cyrm.%
+ }%
+% \end{macrocode}
+% Commented form of the full synonym for ``footnote''.
+% It has common form for both nominative and accusative but
+% changes in other forms, like ``of |\autoref{auto}|''
+% \begin{macrocode}
+% \def\footnoteautorefname{%
+% \cyr\cyrp\cyro\cyrd\cyrs\cyrt\cyrr\cyro\cyrch\cyrn\cyro\cyre\ %
+% \cyrp\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre
+% }%
+% \end{macrocode}
+% Commented forms of the ``footnote'': have different forms, the
+% same is for the nominative and accusative. (The others needed?)
+% \begin{macrocode}
+% \def\Nomfootnoteautorefname{\cyr\cyrs\cyrn\cyro\cyrs\cyrk\cyra}%
+% \def\Accfootnoteautorefname{\cyr\cyrs\cyrn\cyro\cyrs\cyrk\cyru}%
+% \end{macrocode}
+%
+% Name of the list item, can be confused with the paragraph
+% reference name, but reader could understand meaning from context(?).
+% Commented variant has common form for both nominative and accusative
+% but changes in other forms, like ``of |\autoref{auto}|'' etc.
+% \begin{macrocode}
+ \def\itemautorefname{\cyr\cyrp.}%
+% \def\itemautorefname{\cyr\cyrp\cyru\cyrn\cyrk\cyrt}%
+% \end{macrocode}
+%
+% Names of the figure and table have stable (standard) abbreviation
+% forms. No problem in the middle of sentence.
+% \begin{macrocode}
+ \def\figureautorefname{\cyr\cyrr\cyri\cyrs.}%
+ \def\tableautorefname{\cyr\cyrt\cyra\cyrb\cyrl.}%
+% \end{macrocode}
+%
+% Names of the part, chapter, section(s) have stable (standard)
+% abbreviation forms. No problem in the middle of sentence.
+% \begin{macrocode}
+ \def\partautorefname{\cyr\cyrch.}%
+ \def\chapterautorefname{\cyr\cyrg\cyrl.}%
+ \def\sectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
+% \end{macrocode}
+%
+% Name of the appendix can use this abbreviation, but it is not
+% standard for books, i.e, not for ``the good face of the book''.
+% Commented variant has common form for both nominative and
+% accusative but changes in other forms, like ``of
+% |\autoref{auto}|'' etc.
+% \begin{macrocode}
+ \def\appendixautorefname{\cyr\cyrp\cyrr\cyri\cyrl.}%
+% \def\appendixautorefname{%
+% \cyr\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre
+% }%
+% \end{macrocode}
+%
+% The sectioning command have stable (almost standard) and common
+% abbreviation form for all levels (the meaning of these references
+% visible from the section number). No problem.
+% \begin{macrocode}
+ \def\subsectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
+ \def\subsubsectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
+% \end{macrocode}
+%
+% The names of references to paragraphs also have stable
+% (almost standard) and common abbreviation form for all
+% levels (the meaning of these references is visible from
+% the section number). No problem in the middle of sentence.
+% \begin{macrocode}
+ \def\paragraphautorefname{\cyr\cyrp.}%
+ \def\subparagraphautorefname{\cyr\cyrp.}%
+% \end{macrocode}
+% Commented variant can be used in books but since it
+% has common form for both nominative and accusative but it
+% changes in other forms, like ``of |\autoref{auto}|'' etc.
+% \begin{macrocode}
+% \def\paragraphautorefname{\cyr\cyrp\cyru\cyrn\cyrk\cyrt}%
+% \def\subparagraphautorefname{\cyr\cyrp\cyru\cyrn\cyrk\cyrt}%
+% \end{macrocode}
+%
+% The name of verbatim line. Here could be a standard of the
+% abbreviation (used very rare). But the author preprint
+% publications (which have not any editor or corrector)
+% can use this abbreviation for the page reference. So the
+% meaning of the line reference can be read as reference to
+% the page.
+% \begin{macrocode}
+ \def\FancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr.}%
+% \end{macrocode}
+% Commented names of the ``verbatim line'': have different forms,
+% also the nominative and accusative.
+% \begin{macrocode}
+% \def\NomFancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr\cyro\cyrk\cyra}%
+% \def\AccFancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr\cyro\cyrk\cyru}%
+% \end{macrocode}
+% The alternative, ve-e-e-ery professional abbreviation,
+% was used in typography markup for typesetters.
+% \begin{macrocode}
+% \def\FancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr\cyrk.}%
+% \end{macrocode}
+%
+% The names of theorem: if we want have ``the good face of
+% the book'', so the theorem reference must have the full name
+% (like equation reference). But \ldots
+% \begin{macrocode}
+ \def\theoremautorefname{\cyr\cyrt\cyre\cyro\cyrr.}%
+% \end{macrocode}
+% Commented forms of the ``theorem'': have different forms, also
+% the nominative and accusative.
+% \begin{macrocode}
+% \def\Nomtheoremautorefname{\cyr\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyra}%
+% \def\Acctheoremautorefname{\cyr\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyru}%
+% \end{macrocode}
+%
+% Name of the page stable (standard) abbreviation form. No problem.
+% \begin{macrocode}
+ \def\pageautorefname{\cyr\cyrs.}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\HyLang@spanish{%
+ \def\equationautorefname{Ecuaci\'on}%
+ \def\footnoteautorefname{Nota a pie de p\'agina}%
+ \def\itemautorefname{Elemento}%
+ \def\figureautorefname{Figura}%
+ \def\tableautorefname{Tabla}%
+ \def\partautorefname{Parte}%
+ \def\appendixautorefname{Ap\'endice}%
+ \def\chapterautorefname{Cap\'itulo}%
+ \def\sectionautorefname{Secci\'on}%
+ \def\subsectionautorefname{Subsecci\'on}%
+ \def\subsubsectionautorefname{Subsubsecci\'on}%
+ \def\paragraphautorefname{P\'arrafo}%
+ \def\subparagraphautorefname{Subp\'arrafo}%
+ \def\FancyVerbLineautorefname{L\'inea}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{P\'agina}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\HyLang@catalan{%
+\def\equationautorefname{Equaci\'o}%
+\def\footnoteautorefname{Nota al peu de p\`agina}%
+\def\itemautorefname{Element}%
+\def\figureautorefname{Figura}%
+\def\tableautorefname{Taula}%
+\def\partautorefname{Part}%
+\def\appendixautorefname{Ap\`endix}%
+\def\chapterautorefname{Cap\'itol}%
+\def\sectionautorefname{Secci\'o}%
+\def\subsectionautorefname{Subsecci\'o}%
+\def\subsubsectionautorefname{Subsubsecci\'o}%
+\def\paragraphautorefname{Par\`agraf}%
+\def\subparagraphautorefname{Subpar\`agraf}%
+\def\FancyVerbLineautorefname{L\'inia}%
+\def\theoremautorefname{Teorema}%
+\def\pageautorefname{P\`agina}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\HyLang@vietnamese{%
+ \def\equationautorefname{Ph\uhorn{}\ohorn{}ng tr\`inh}%
+ \def\footnoteautorefname{Ch\'u th\'ich}%
+ \def\itemautorefname{m\d{u}c}%
+ \def\figureautorefname{H\`inh}%
+ \def\tableautorefname{B\h{a}ng}%
+ \def\partautorefname{Ph\`\acircumflex{}n}%
+ \def\appendixautorefname{Ph\d{u} l\d{u}c}%
+ \def\chapterautorefname{ch\uhorn{}\ohorn{}ng}%
+ \def\sectionautorefname{m\d{u}c}%
+ \def\subsectionautorefname{m\d{u}c}%
+ \def\subsubsectionautorefname{m\d{u}c}%
+ \def\paragraphautorefname{\dj{}o\d{a}n}%
+ \def\subparagraphautorefname{\dj{}o\d{a}n}%
+ \def\FancyVerbLineautorefname{d\`ong}%
+ \def\theoremautorefname{\DJ{}\d{i}nh l\'y}%
+ \def\pageautorefname{Trang}%
+}
+% \end{macrocode}
+% Greek, see github issue 52
+% \begin{macrocode}
+\def\HyLang@greek{%
+ \def\equationautorefname{\textEpsilon\textxi\acctonos\textiota\textsigma\textomega\textsigma\texteta}%
+ \def\footnoteautorefname{\textupsilon\textpi\textomicron\textsigma\texteta\textmu\textepsilon\acctonos\textiota\textomega\textsigma\texteta}%
+ \def\itemautorefname{\textalpha\textnu\texttau\textiota\textkappa\textepsilon\acctonos\textiota\textmu\textepsilon\textnu\textomicron}%
+ \def\figureautorefname{\textSigma\textchi\acctonos\texteta\textmu\textalpha}%
+ \def\tableautorefname{\textPi\acctonos\textiota\textnu\textalpha\textkappa\textalpha}%
+ \def\partautorefname{\textMu\acctonos\textepsilon\textrho\textomicron\textvarsigma}%
+ \def\appendixautorefname{\textPi\textalpha\textrho\acctonos\textalpha\textrho\texttau\texteta\textmu\textalpha}%
+ \def\chapterautorefname{\textkappa\textepsilon\textphi\acctonos\textalpha\textlambda\textalpha\textiota\textomicron}%
+ \def\sectionautorefname{\textepsilon\textnu\acctonos\textomicron\texttau\texteta\texttau\textalpha}%
+ \def\subsectionautorefname{\textupsilon\textpi\textomicron\textepsilon\textnu\acctonos\textomicron\texttau\texteta\texttau\textalpha}%
+ \def\subsubsectionautorefname{\textupsilon\textpi\textomicron-\textupsilon\textpi\textomicron\textepsilon\textnu\acctonos\textomicron\texttau\texteta\texttau\textalpha}%
+ \def\paragraphautorefname{\textpi\textalpha\textrho\acctonos\textalpha\textgamma\textrho\textalpha\textphi\textomicron\textvarsigma}%
+ \def\subparagraphautorefname{\textupsilon\textpi\textomicron\textpi\textalpha\textrho\acctonos\textalpha\textgamma\textrho\textalpha\textphi\textomicron\textvarsigma}%
+ \def\FancyVerbLineautorefname{\textgamma\textrho\textalpha\textmu\textmu\acctonos\texteta}%
+ \def\theoremautorefname{\textTheta\textepsilon\acctonos\textomega\textrho\texteta\textmu\textalpha}%
+ \def\pageautorefname{\textsigma\textepsilon\textlambda\acctonos\textiota\textdelta\textalpha}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\HyLang@dutch{%
+ \def\equationautorefname{Vergelijking}%
+ \def\footnoteautorefname{voetnoot}%
+ \def\itemautorefname{punt}%
+ \def\figureautorefname{Figuur}%
+ \def\tableautorefname{Tabel}%
+ \def\partautorefname{Deel}%
+ \def\appendixautorefname{Bijlage}%
+ \def\chapterautorefname{hoofdstuk}%
+ \def\sectionautorefname{paragraaf}%
+ \def\subsectionautorefname{deelparagraaf}%
+ \def\subsubsectionautorefname{deel-deelparagraaf}%
+ \def\paragraphautorefname{alinea}%
+ \def\subparagraphautorefname{deelalinea}%
+ \def\FancyVerbLineautorefname{regel}%
+ \def\theoremautorefname{Stelling}%
+ \def\pageautorefname{pagina}%
+}
+% \end{macrocode}
+%
+% Instead of package babel's definition of \cmd{\addto} the
+% implementation of package varioref is used. Additionally
+% argument |#1| is checked for \cmd{\relax}.
+% \begin{macrocode}
+\def\HyLang@addto#1#2{%
+ #2%
+ \@temptokena{#2}%
+ \ifx#1\relax
+ \let#1\@empty
+ \fi
+ \ifx#1\@undefined
+ \edef#1{\the\@temptokena}%
+ \else
+ \toks@\expandafter{#1}%
+ \edef#1{\the\toks@\the\@temptokena}%
+ \fi
+ \@temptokena{}\toks@\@temptokena
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\HyLang@DeclareLang#1#2#3{%
+ \@ifpackagewith{babel}{#1}{%
+ \expandafter\HyLang@addto
+ \csname extras#1\expandafter\endcsname
+ \csname HyLang@#2\endcsname
+ \begingroup
+ \edef\x{\endgroup
+ #3%
+ }%
+ \x
+ \@namedef{HyLang@#1@done}{}%
+ }{}%
+ \begingroup
+ \edef\x##1##2{%
+ \noexpand\ifx##2\relax
+ \errmessage{No definitions for language #2' found!}%
+ \noexpand\fi
+ \endgroup
+ \noexpand\define@key{Hyp}{#1}[]{%
+ \noexpand\@ifundefined{HyLang@#1@done}{%
+ \noexpand\HyLang@addto{\noexpand##1}{\noexpand##2}%
+ #3%
+ \noexpand\@namedef{HyLang@#1@done}{}%
+ }{}%
+ }%
+ }%
+ \expandafter\x\csname extras#1\expandafter\endcsname
+ \csname HyLang@#2\endcsname
+}
+\HyLang@DeclareLang{english}{english}{}
+\HyLang@DeclareLang{UKenglish}{english}{}
+\HyLang@DeclareLang{british}{english}{}
+\HyLang@DeclareLang{USenglish}{english}{}
+\HyLang@DeclareLang{american}{english}{}
+\HyLang@DeclareLang{german}{german}{}
+\HyLang@DeclareLang{austrian}{german}{}
+\HyLang@DeclareLang{ngerman}{german}{}
+\HyLang@DeclareLang{naustrian}{german}{}
+\HyLang@DeclareLang{russian}{russian}{\noexpand\hypersetup{unicode}}
+\HyLang@DeclareLang{brazil}{portuges}{}
+\HyLang@DeclareLang{brazilian}{portuges}{}
+\HyLang@DeclareLang{portuguese}{portuges}{}
+\HyLang@DeclareLang{spanish}{spanish}{}
+\HyLang@DeclareLang{catalan}{catalan}{}
+\HyLang@DeclareLang{afrikaans}{afrikaans}{}
+\HyLang@DeclareLang{french}{french}{}
+\HyLang@DeclareLang{frenchb}{french}{}
+\HyLang@DeclareLang{francais}{french}{}
+\HyLang@DeclareLang{acadian}{french}{}
+\HyLang@DeclareLang{canadien}{french}{}
+\HyLang@DeclareLang{italian}{italian}{}
+\HyLang@DeclareLang{magyar}{magyar}{}
+\HyLang@DeclareLang{hungarian}{magyar}{}
+\HyLang@DeclareLang{greek}{greek}{}
+\HyLang@DeclareLang{dutch}{dutch}{}
+% \end{macrocode}
+% More work is needed in case of options |vietnamese| and |vietnam|.
+% \begin{macrocode}
+\DeclareVoidOption{vietnamese}{%
+ \HyLang@addto\extrasvietnamese\HyLang@vietnamese
+ \Hy@AtEndOfPackage{%
+ \@ifundefined{T@PU}{}{%
+ \input{puvnenc.def}%
+ }%
+ }%
+}
+\DeclareVoidOption{vietnam}{%
+ \HyLang@addto\extrasvietnam\HyLang@vietnamese
+ \Hy@AtEndOfPackage{%
+ \@ifundefined{T@PU}{}{%
+ \input{puvnenc.def}%
+ }%
+ }%
+}
+% \end{macrocode}
+% Similar for option |arabic| that just loads the additions
+% to PU encoding for Arabi.
+% \begin{macrocode}
+\DeclareVoidOption{arabic}{%
+ \Hy@AtEndOfPackage{%
+ \@ifundefined{T@PU}{}{%
+ \input{puarenc.def}%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \section{Options to change appearance of links}\label{appearance}
+% Colouring links at the \LaTeX\ level is useful for debugging, perhaps.
+% \begin{macrocode}
+\define@key{Hyp}{colorlinks}[true]{%
+ \Hy@boolkey{colorlinks}{#1}%
+}
+\DeclareVoidOption{hidelinks}{%
+ \Hy@colorlinksfalse
+ \Hy@ocgcolorlinksfalse
+ \Hy@frenchlinksfalse
+ \def\Hy@colorlink##1{\begingroup}%
+ \def\Hy@endcolorlink{\endgroup}%
+ \def\@pdfborder{0 0 0}%
+ \let\@pdfborderstyle\ltx@empty
+}
+\define@key{Hyp}{ocgcolorlinks}[true]{%
+ \Hy@boolkey{ocgcolorlinks}{#1}%
+}
+\Hy@AtBeginDocument{%
+ \begingroup
+ \@ifundefined{OBJ@OCG@view}{%
+ \ifHy@ocgcolorlinks
+ \Hy@Warning{%
+ Driver does not support `ocgcolorlinks',\MessageBreak
+ using `colorlinks' instead%
+ }%
+ \fi
+ }{}%
+ \endgroup
+}
+\define@key{Hyp}{frenchlinks}[true]{%
+ \Hy@boolkey{frenchlinks}{#1}%
+}
+% \end{macrocode}
+%
+% \section{Bookmarking}
+%
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname chapter\endcsname\relax
+ \def\toclevel@part{0}%
+\else
+ \def\toclevel@part{-1}%
+\fi
+\def\toclevel@chapter{0}
+\def\toclevel@section{1}
+\def\toclevel@subsection{2}
+\def\toclevel@subsubsection{3}
+\def\toclevel@paragraph{4}
+\def\toclevel@subparagraph{5}
+\def\toclevel@figure{0}
+\def\toclevel@table{0}
+\@ifpackageloaded{listings}{%
+ \providecommand*\theHlstlisting{\thelstlisting}%
+ \providecommand*\toclevel@lstlisting{0}%
+}{}
+\@ifpackageloaded{listing}{%
+ \providecommand*\theHlisting{\thelisting}%
+ \providecommand*\toclevel@listing{0}%
+}{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\define@key{Hyp}{bookmarks}[true]{%
+ \Hy@boolkey{bookmarks}{#1}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{bookmarksopen}[true]{%
+ \Hy@boolkey{bookmarksopen}{#1}%
+}
+% \end{macrocode}
+%
+% The depth of the outlines is controlled by option
+% \verb|bookmarksdepth|.
+% The option acts globally and distinguishes three cases:
+% \begin{itemize}
+% \item \verb|bookmarksdepth|: Without value hyperref uses
+% counter \texttt{tocdepth} (compatible behaviour and default).
+% \item \verb|bookmarksdepth=<number>|: the depth is set to
+% \verb|<number>|.
+% \item \verb|bookmarksdepth=<name>|: The \verb|<name>| must
+% not start with a number or minus sign. It is a document
+% division name (part, chapter, section, \dots). Internally
+% the value of macro \verb|\toclevel@<name>| is used.
+% \end{itemize}
+% \begin{macrocode}
+\let\Hy@bookmarksdepth\c@tocdepth
+\define@key{Hyp}{bookmarksdepth}[]{%
+ \begingroup
+ \edef\x{#1}%
+ \ifx\x\empty
+ \global\let\Hy@bookmarksdepth\c@tocdepth
+ \else
+ \@ifundefined{toclevel@\x}{%
+ \@onelevel@sanitize\x
+ \edef\y{\expandafter\@car\x\@nil}%
+ \ifcase 0\expandafter\ifx\y-1\fi
+ \expandafter\ifnum\expandafter`\y>47 %
+ \expandafter\ifnum\expandafter`\y<58 1\fi\fi\relax
+ \Hy@Warning{Unknown document division name (\x)}%
+ \else
+ \setbox\z@=\hbox{%
+ \count@=\x
+ \xdef\Hy@bookmarksdepth{\the\count@}%
+ }%
+ \fi
+ }{%
+ \setbox\z@=\hbox{%
+ \count@=\csname toclevel@\x\endcsname
+ \xdef\Hy@bookmarksdepth{\the\count@}%
+ }%
+ }%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+%
+% `bookmarksopenlevel' to specify the open level. From Heiko Oberdiek.
+% \begin{macrocode}
+\define@key{Hyp}{bookmarksopenlevel}{%
+ \def\@bookmarksopenlevel{#1}%
+}
+\def\@bookmarksopenlevel{\maxdimen}
+% `bookmarkstype' to specify which `toc' file to mimic
+\define@key{Hyp}{bookmarkstype}{%
+ \def\Hy@bookmarkstype{#1}%
+}
+\def\Hy@bookmarkstype{toc}
+% \end{macrocode}
+% Richard Curnow <richard@curnow.demon.co.uk> suggested this
+% functionality. It adds section numbers etc to bookmarks.
+% \begin{macrocode}
+\define@key{Hyp}{bookmarksnumbered}[true]{%
+ \Hy@boolkey{bookmarksnumbered}{#1}%
+}
+% \end{macrocode}
+%
+% Option CJKbookmarks enables the patch for
+% CJK bookmarks.
+% \begin{macrocode}
+\define@key{Hyp}{CJKbookmarks}[true]{%
+ \Hy@boolkey{CJKbookmarks}{#1}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Hy@temp#1{%
+ \expandafter\Hy@@temp\csname @#1color\endcsname{#1}%
+}
+\def\Hy@@temp#1#2#3{%
+ \define@key{Hyp}{#2color}{%
+ \HyColor@HyperrefColor{##1}#1%
+ }%
+ \def#1{#3}%
+}
+\Hy@temp{link}{red}
+\Hy@temp{anchor}{black}
+\Hy@temp{cite}{green}
+\Hy@temp{file}{cyan}
+\Hy@temp{url}{magenta}
+\Hy@temp{menu}{red}
+\Hy@temp{run}{\@filecolor}
+\define@key{Hyp}{pagecolor}{%
+ \Hy@WarningPageColor
+}
+\def\Hy@WarningPageColor{%
+ \Hy@WarningNoLine{Option `pagecolor' is not available anymore}%
+ \global\let\Hy@WarningPageColor\relax
+}
+\define@key{Hyp}{allcolors}{%
+ \HyColor@HyperrefColor{#1}\@linkcolor
+ \HyColor@HyperrefColor{#1}\@anchorcolor
+ \HyColor@HyperrefColor{#1}\@citecolor
+ \HyColor@HyperrefColor{#1}\@filecolor
+ \HyColor@HyperrefColor{#1}\@urlcolor
+ \HyColor@HyperrefColor{#1}\@menucolor
+ \HyColor@HyperrefColor{#1}\@runcolor
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\hyperbaseurl#1{\def\@baseurl{#1}}
+\define@key{Hyp}{baseurl}{\hyperbaseurl{#1}}
+\let\@baseurl\@empty
+\def\hyperlinkfileprefix#1{\def\Hy@linkfileprefix{#1}}
+\define@key{Hyp}{linkfileprefix}{\hyperlinkfileprefix{#1}}
+\hyperlinkfileprefix{file:}
+% \end{macrocode}
+%
+% \section{PDF-specific options}\label{pdfopt}
+%
+% \begin{macro}{\@pdfpagetransition}
+% The value of option |pdfpagetransition| is stored in
+% \cmd{\@pdfpagetransition}. Its initial value is set
+% to \cmd{\relax} in order to be able to differentiate
+% between a not used option and an option with an empty
+% value.
+% \begin{macrocode}
+\let\@pdfpagetransition\relax
+\define@key{Hyp}{pdfpagetransition}{%
+ \def\@pdfpagetransition{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@pdfpageduration}
+% The value of option |pdfpageduration| is stored in
+% \cmd{\@pdfpageduration}. Its initial value is set
+% to \cmd{\relax} in order to be able to differentiate
+% between a not used option and an option with an empty
+% value.
+% \begin{macrocode}
+\let\@pdfpageduration\relax
+\define@key{Hyp}{pdfpageduration}{%
+ \def\@pdfpageduration{#1}%
+ \Hy@Match\@pdfpageduration{}{%
+ ^(|[0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfpageduration'\MessageBreak
+ of option `pdfpageduration'\MessageBreak
+ is replaced by an empty value%
+ }%
+ \let\@pdfpageduration\ltx@empty
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% The entry for the |/Hid| key in the page object is
+% only necessary, if it is used and set to true for
+% at least one time. If it is always false, then
+% the |/Hid| key is not written to the pdf page
+% object in order not to enlarge the pdf file.
+% \begin{macrocode}
+\newif\ifHy@useHidKey
+\Hy@useHidKeyfalse
+\define@key{Hyp}{pdfpagehidden}[true]{%
+ \Hy@boolkey{pdfpagehidden}{#1}%
+ \ifHy@pdfpagehidden
+ \global\Hy@useHidKeytrue
+ \fi
+}
+% \end{macrocode}
+%
+% The value of the |bordercolor| options are not processed
+% by the color package. Therefore the value consists of
+% space separated rgb numbers in the range 0 until 1.
+%
+% Package |xcolor| provides |\XC@bordercolor| since version 1.1.
+% If the two spaces in the color specification are missing,
+% then the value is processed as color specification from
+% package |xcolor| by using |\XC@bordercolor| (since
+% xcolor 2004/05/09 v1.11, versions 2005/03/24 v2.02 until
+% 2006/11/28 v2.10 do not work because of a bug that is
+% fixed in 2007/01/21 v2.11).
+% \begin{macrocode}
+\def\Hy@ColorList{cite,file,link,menu,run,url}
+\@for\Hy@temp:=\Hy@ColorList\do{%
+ \edef\Hy@temp{%
+ \noexpand\define@key{Hyp}{\Hy@temp bordercolor}{%
+ \noexpand\HyColor@HyperrefBorderColor
+ {##1}%
+ \expandafter\noexpand\csname @\Hy@temp bordercolor\endcsname
+ {hyperref}%
+ {\Hy@temp bordercolor}%
+ }%
+ }%
+ \Hy@temp
+}
+\define@key{Hyp}{pagebordercolor}{%
+ \Hy@WarningPageBorderColor
+}
+\def\Hy@WarningPageBorderColor{%
+ \Hy@WarningNoLine{Option `pagebordercolor' is not available anymore}%
+ \global\let\Hy@WarningPageBorderColor\relax
+}
+\define@key{Hyp}{allbordercolors}{%
+ \def\Hy@temp##1##2{%
+ \HyColor@HyperrefBorderColor{#1}##1{hyperref}{##2bordercolor}%
+ }%
+ \Hy@temp\@citebordercolor{cite}%
+ \Hy@temp\@filebordercolor{file}%
+ \Hy@temp\@linkbordercolor{link}%
+ \Hy@temp\@menubordercolor{menu}%
+ \Hy@temp\@runbordercolor{run}%
+ \Hy@temp\@urlbordercolor{url}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\define@key{Hyp}{pdfhighlight}{\def\@pdfhighlight{#1}}
+\Hy@DefNameKey{pdfhighlight}{%
+ \do{/I}{Invert}%
+ \do{/N}{None}%
+ \do{/O}{Outline}%
+ \do{/P}{Push}%
+}
+\def\Hy@setpdfhighlight{%
+ \ifx\@pdfhighlight\@empty
+ \else
+ /H\@pdfhighlight
+ \fi
+}
+\define@key{Hyp}{pdfborder}{%
+ \let\Hy@temp\@pdfborder
+ \def\@pdfborder{#1}%
+ \Hy@Match\@pdfborder{}{%
+ ^\HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/%
+ ( ?\[\HyPat@NonNegativeReal/( \HyPat@NonNegativeReal/)*])?$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfborder'\MessageBreak
+ for option `pdfborder'.\MessageBreak
+ Option setting is ignored%
+ }%
+ \let\@pdfborder\Hy@temp
+ }%
+}
+\define@key{Hyp}{pdfborderstyle}{%
+ \let\Hy@temp\@pdfborderstyle
+ \def\@pdfborderstyle{#1}%
+ \Hy@Match\@pdfborderstyle{}{%
+ ^%
+ ( */Type */Border%
+ | */W +\HyPat@NonNegativeReal/%
+ | */S */[SDBIU]%
+ | */D *\[ *(\HyPat@NonNegativeReal/( \HyPat@NonNegativeReal/)?)?]%
+ )* *$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfborderstyle'\MessageBreak
+ for option `pdfborderstyle'.\MessageBreak
+ Option setting is ignored%
+ }%
+ \let\@pdfborderstyle\Hy@temp
+ }%
+}
+\def\Hy@setpdfborder{%
+ \ifx\@pdfborder\@empty
+ \else
+ /Border[\@pdfborder]%
+ \fi
+ \ifx\@pdfborderstyle\@empty
+ \else
+ /BS<<\@pdfborderstyle>>%
+ \fi
+}
+\Hy@DefNameKey{pdfpagemode}{%
+ \do{UseNone}{}%
+ \do{UseOutlines}{}%
+ \do{UseThumbs}{}%
+ \do{FullScreen}{}%
+ \do{UseOC}{PDF 1.5}%
+ \do{UseAttachments}{PDF 1.6}%
+}
+\Hy@DefNameKey{pdfnonfullscreenpagemode}{%
+ \do{UseNone}{}%
+ \do{UseOutlines}{}%
+ \do{UseThumbs}{}%
+ \do{FullScreen}{}%
+ \do{UseOC}{PDF 1.5}%
+ \do{UseAttachments}{PDF 1.6}%
+}
+\Hy@DefNameKey{pdfdirection}{%
+ \do{L2R}{Left to right}%
+ \do{R2L}{Right to left}%
+}
+\Hy@DefNameKey{pdfviewarea}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfviewclip}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfprintarea}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfprintclip}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfprintscaling}{%
+ \do{AppDefault}{}%
+ \do{None}{}%
+}
+\Hy@DefNameKey{pdfduplex}{%
+ \do{Simplex}{}%
+ \do{DuplexFlipShortEdge}{}%
+ \do{DuplexFlipLongEdge}{}%
+}
+\Hy@DefNameKey{pdfpicktraybypdfsize}{%
+ \do{true}{}%
+ \do{false}{}%
+}
+\define@key{Hyp}{pdfprintpagerange}{%
+ \def\@pdfprintpagerange{#1}%
+}
+\Hy@DefNameKey{pdfnumcopies}{%
+ \do{2}{two copies}%
+ \do{3}{three copies}%
+ \do{4}{four copies}%
+ \do{5}{five copies}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{pdfusetitle}[true]{%
+ \Hy@boolkey{pdfusetitle}{#1}%
+}
+\def\HyXeTeX@CheckUnicode{%
+ \ifxetex
+ \ifHy@unicode
+ \else
+ \Hy@WarningNoLine{%
+ XeTeX driver only supports unicode.\MessageBreak
+ Enabling option `unicode'%
+ }%
+ \kvsetkeys{Hyp}{unicode}%
+ \fi
+ \else
+ \let\HyXeTeX@CheckUnicode\relax
+ \fi
+}
+\def\HyPsd@PrerenderUnicode#1{%
+ \begingroup
+ \expandafter\ifx\csname PrerenderUnicode\endcsname\relax
+ \else
+ \sbox0{%
+ \let\GenericInfo\@gobbletwo
+ \let\GenericWarning\@gobbletwo
+ \let\GenericError\@gobblefour
+ \PrerenderUnicode{#1}%
+ }%
+ \fi
+ \endgroup
+}
+\define@key{Hyp}{pdftitle}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdftitle{#1}%
+}
+\define@key{Hyp}{pdfauthor}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfauthor{#1}%
+}
+\define@key{Hyp}{pdfproducer}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfproducer{#1}%
+}
+\define@key{Hyp}{pdfcreator}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfcreator{#1}%
+}
+\define@key{Hyp}{addtopdfcreator}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfcreator{\@pdfcreator, #1}%
+}
+\define@key{Hyp}{pdfcreationdate}{%
+ \begingroup
+ \Hy@unicodefalse
+ \pdfstringdef\@pdfcreationdate{#1}%
+ \endgroup
+}
+\define@key{Hyp}{pdfmoddate}{%
+ \begingroup
+ \Hy@unicodefalse
+ \pdfstringdef\@pdfmoddate{#1}%
+ \endgroup
+}
+\define@key{Hyp}{pdfsubject}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfsubject{#1}%
+}
+\define@key{Hyp}{pdfkeywords}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfkeywords{#1}%
+}
+\define@key{Hyp}{pdftrapped}{%
+ \lowercase{\edef\Hy@temp{#1}}%
+ \ifx\Hy@temp\HyInfo@trapped@true
+ \def\@pdftrapped{True}%
+ \else
+ \ifx\Hy@temp\HyInfo@trapped@false
+ \def\@pdftrapped{False}%
+ \else
+ \ifx\Hy@temp\HyInfo@trapped@unknown
+ \def\@pdftrapped{Unknown}%
+ \else
+ \ifx\Hy@temp\@empty
+ \else
+ \Hy@Warning{%
+ Unsupported value `#1'\MessageBreak
+ for option `pdftrapped'%
+ }%
+ \fi
+ \def\@pdftrapped{}%
+ \fi
+ \fi
+ \fi
+}
+\def\HyInfo@trapped@true{true}
+\def\HyInfo@trapped@false{false}
+\def\HyInfo@trapped@unknown{unknown}
+\def\HyInfo@TrappedUnsupported{%
+ \ifx\@pdftrapped\@empty
+ \else
+ \Hy@WarningNoLine{`pdftrapped' is not supported by this driver}%
+ \gdef\HyInfo@TrappedUnsupported{}%
+ \fi
+}
+\define@key{Hyp}{pdfinfo}{%
+ \kvsetkeys{pdfinfo}{#1}%
+}
+\def\Hy@temp#1{%
+ \lowercase{\Hy@temp@A{#1}}{#1}%
+}
+\def\Hy@temp@A#1#2{%
+ \define@key{pdfinfo}{#2}{%
+ \hypersetup{pdf#1={##1}}%
+ }%
+}
+\Hy@temp{Title}
+\Hy@temp{Author}
+\Hy@temp{Keywords}
+\Hy@temp{Subject}
+\Hy@temp{Creator}
+\Hy@temp{Producer}
+\Hy@temp{CreationDate}
+\Hy@temp{ModDate}
+\Hy@temp{Trapped}
+\newif\ifHyInfo@AddonUnsupported
+\kv@set@family@handler{pdfinfo}{%
+ \HyInfo@AddonHandler{#1}{#2}%
+}
+\let\HyInfo@do\relax
+\def\HyInfo@AddonHandler#1#2{%
+ \ifx\kv@value\relax
+ \Hy@Warning{%
+ Option `pdfinfo': ignoring key `\kv@key' without value%
+ }%
+ \else
+ \EdefEscapeName\HyInfo@KeyEscaped{\kv@key}%
+ \EdefUnescapeName\HyInfo@Key{\HyInfo@KeyEscaped}%
+ \expandafter\ifx\csname KV@pdfinfo@\HyInfo@Key\endcsname\relax
+ \ifHyInfo@AddonUnsupported
+ \Hy@Warning{%
+ This driver does not support additional\MessageBreak
+ information entries, therefore\MessageBreak
+ `\kv@key' is ignored%
+ }%
+ \else
+ \def\HyInfo@tmp##1{%
+ \kv@define@key{pdfinfo}{##1}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{####1}%
+ \pdfstringdef\HyInfo@Value{####1}%
+ \global\expandafter
+ \let\csname HyInfo@Value@##1\endcsname
+ \HyInfo@Value
+ }%
+ }%
+ \expandafter\HyInfo@tmp\expandafter{\HyInfo@Key}%
+ \global\expandafter
+ \let\csname KV@pdfinfo@\HyInfo@Key\expandafter\endcsname
+ \csname KV@pdfinfo@\HyInfo@Key\endcsname
+ \xdef\HyInfo@AddonList{%
+ \HyInfo@AddonList
+ \HyInfo@do{\HyInfo@Key}%
+ }%
+ \kv@parse@normalized{%
+ \HyInfo@Key={#2}%
+ }{%
+ \kv@processor@default{pdfinfo}%
+ }%
+ \fi
+ \else
+ \kv@parse@normalized{%
+ \HyInfo@Key={#2}%
+ }{%
+ \kv@processor@default{pdfinfo}%
+ }%
+ \fi
+ \fi
+}
+\def\HyInfo@GenerateAddons{%
+ \ifHyInfo@AddonUnsupported
+ \def\HyInfo@Addons{}%
+ \else
+ \begingroup
+ \toks@{}%
+ \def\HyInfo@do##1{%
+ \EdefEscapeName\HyInfo@Key{##1}%
+ \edef\x{%
+ \toks@{%
+ \the\toks@
+ /\HyInfo@Key(\csname HyInfo@Value@##1\endcsname)%
+ }%
+ }%
+ \x
+ }%
+ \HyInfo@AddonList
+ \edef\x{\endgroup
+ \def\noexpand\HyInfo@Addons{\the\toks@}%
+ }%
+ \x
+ \fi
+}
+\global\let\HyInfo@AddonList\ltx@empty
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Hyp}{pdfview}{\calculate@pdfview#1 \\}
+\define@key{Hyp}{pdflinkmargin}{\setpdflinkmargin{#1}}
+\let\setpdflinkmargin\@gobble
+\def\calculate@pdfview#1 #2\\{%
+ \def\@pdfview{#1}%
+ \ifx\\#2\\%
+ \def\@pdfviewparams{ -32768}%
+ \else
+ \def\@pdfviewparams{ #2}%
+ \fi
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname numexpr\endcsname\relax
+ \def\Hy@number#1{%
+ \expandafter\@firstofone\expandafter{\number#1}%
+ }%
+\else
+ \def\Hy@number#1{%
+ \the\numexpr#1\relax
+ }%
+\fi
+\define@key{Hyp}{pdfstartpage}{%
+ \ifx\\#1\\%
+ \let\@pdfstartpage\ltx@empty
+ \else
+ \edef\@pdfstartpage{\Hy@number{#1}}%
+ \fi
+}%
+\define@key{Hyp}{pdfstartview}{%
+ \ifx\\#1\\%
+ \let\@pdfstartview\ltx@empty
+ \else
+ \hypercalcbpdef\@pdfstartview{/#1}%
+ \fi
+}
+\def\HyPat@NonNegativeReal/{%
+ \ *([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+) *%
+}
+\define@key{Hyp}{pdfremotestartview}{%
+ \ifx\\#1\\%
+ \def\@pdfremotestartview{/Fit}%
+ \else
+ \hypercalcbpdef\@pdfremotestartview{#1}%
+ \edef\@pdfremotestartview{\@pdfremotestartview}%
+ \Hy@Match\@pdfremotestartview{}{%
+ ^(XYZ(%
+ ()| %
+ (null|-?\HyPat@NonNegativeReal/) %
+ (null|-?\HyPat@NonNegativeReal/) %
+ (null|\HyPat@NonNegativeReal/)%
+ )|% end of "XYZ"
+ Fit(%
+ ()|%
+ B|%
+ (H|V|BH|BV)(%
+ ()| %
+ (null|\HyPat@NonNegativeReal/)%
+ )|%
+ R %
+ \HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/%
+ )% end of "Fit"
+ )$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfremotestartview'\MessageBreak
+ of `pdfremotestartview'\MessageBreak
+ is replaced by `Fit'%
+ }%
+ \let\@pdfremotestartview\@empty
+ }%
+ \ifx\@pdfremotestartview\@empty
+ \def\@pdfremotestartview{/Fit}%
+ \else
+ \edef\@pdfremotestartview{/\@pdfremotestartview}%
+ \fi
+ \fi
+}
+\define@key{Hyp}{pdfpagescrop}{\edef\@pdfpagescrop{#1}}
+\define@key{Hyp}{pdftoolbar}[true]{%
+ \Hy@boolkey{pdftoolbar}{#1}%
+}
+\define@key{Hyp}{pdfmenubar}[true]{%
+ \Hy@boolkey{pdfmenubar}{#1}%
+}
+\define@key{Hyp}{pdfwindowui}[true]{%
+ \Hy@boolkey{pdfwindowui}{#1}%
+}
+\define@key{Hyp}{pdffitwindow}[true]{%
+ \Hy@boolkey{pdffitwindow}{#1}%
+}
+\define@key{Hyp}{pdfcenterwindow}[true]{%
+ \Hy@boolkey{pdfcenterwindow}{#1}%
+}
+\define@key{Hyp}{pdfdisplaydoctitle}[true]{%
+ \Hy@boolkey{pdfdisplaydoctitle}{#1}%
+}
+\define@key{Hyp}{pdfa}[true]{%
+ \Hy@boolkey{pdfa}{#1}%
+}
+\define@key{Hyp}{pdfnewwindow}[true]{%
+ \def\Hy@temp{#1}%
+ \ifx\Hy@temp\@empty
+ \Hy@pdfnewwindowsetfalse
+ \else
+ \Hy@pdfnewwindowsettrue
+ \Hy@boolkey{pdfnewwindow}{#1}%
+ \fi
+}
+\def\Hy@SetNewWindow{%
+ \ifHy@pdfnewwindowset
+ /NewWindow %
+ \ifHy@pdfnewwindow true\else false\fi
+ \fi
+}
+\Hy@DefNameKey{pdfpagelayout}{%
+ \do{SinglePage}{}%
+ \do{OneColumn}{}%
+ \do{TwoColumnLeft}{}%
+ \do{TwoColumnRight}{}%
+ \do{TwoPageLeft}{PDF 1.5}%
+ \do{TwoPageRight}{PDF 1.5}%
+}
+\define@key{Hyp}{pdflang}{%
+ \edef\@pdflang{#1}%
+ \def\Hy@temp{\relax}%
+ \ifx\@pdflang\Hy@temp
+ \let\@pdflang\relax
+ \fi
+ \ifx\@pdflang\relax
+ \else
+ \ifx\@pdflang\ltx@empty
+ \else
+% \end{macrocode}
+% Test according to ABNF of RFC 3066.
+% \begin{macrocode}
+ \Hy@Match\@pdflang{icase}{%
+ ^%
+ [a-z]{1,8}%
+ (-[a-z0-9]{1,8})*%
+ $%
+ }{%
+% \end{macrocode}
+% Test according to ABNF of RFC 5646.
+% \begin{macrocode}
+ \Hy@Match\@pdflang{icase}{%
+ ^%
+ (%
+ % langtag
+ (% language
+ [a-z]{2,3}%
+ ([a-z]{3}(-[a-z]{3}){0,2})?% extlang
+ |[a-z]{4}% reserved for future use
+ |[a-z]{5,8}% registered language subtag
+ )%
+ (-[a-z]{4})?% script
+ (-([a-z]{2}|[0-9]{3}))?% region
+ (-([a-z]{5,8}|[0-9][a-z0-9]{3}))*% variant
+ (-[0-9a-wyz](-[a-z0-9]{2,8})+)*% extension
+ (-x(-[a-z0-9]{1,8})+)?% privateuse
+ % privateuse
+ |x-([a-z0-9]{1,8})+%
+ % grandfathered/irregular
+ |en-GB-oed%
+ |i-(ami|bnn|default|enochian|hak|klingon|lux|%
+ mingo|navajo|pwn|tao|tay|tsu)%
+ |sgn-(BE-FR|BE-NL|CH-DE)%
+ % grandfathered/regular
+ |art-lojban%
+ |cel-gaulish%
+ |no-(bok|nyn)%
+ |zh-(guoyu|hakka|min|min-nan|xiang)%
+ )%
+ $%
+ }{%
+% \end{macrocode}
+% Test for unique extensions.
+% \begin{macrocode}
+ \Hy@Match{-\@pdflang}{icase}{-[a-wyz0-9]-}{%
+ \Hy@Match\@pdflang{icase}{^x-}{}{%
+ % remove privateuse
+ \edef\Hy@temp{-\@pdflang}%
+ \Hy@Match\Hy@temp{icase}{%
+ ^%
+ (%
+ (-[a-wyz0-9]|-[a-z0-9]{2,8})*%
+ )%
+ -x-%
+ }{%
+ \edef\Hy@temp{%
+ \expandafter\strip@prefix\pdflastmatch1%
+ }%
+ }{}%
+ \Hy@Match\Hy@temp{icase}{%
+ (-[a-wyz0-9]-).*\ltx@backslashchar1%
+ }{%
+ \Hy@Warning{%
+ Invalid language identifier `#1'\MessageBreak
+ for option `pdflang', because it violates\MessageBreak
+ well-formedness defined in RFC 4646\MessageBreak
+ by duplicate singleton subtags%
+ }%
+ \let\@pdflang\relax
+ }{}%
+ }%
+ }{}%
+% \end{macrocode}
+% User-assigned country codes are forbidden in language tags (RFC 3066).
+% \begin{macrocode}
+ \ifx\@pdflang\relax
+ \else
+ \Hy@Match\@pdflang{icase}{%
+ ^%
+ [a-zA-Z]{2}-%
+ (%
+ aa|AA|%
+ [qQ][m-zM-Z]|%
+ [xX][a-zA-Z]|%
+ zz|ZZ%
+ )%
+ (-|$)%
+ }{%
+ \Hy@Warning{%
+ Invalid language identifier `#1'\MessageBreak
+ for option `pdflang' because of invalid country code%
+ \MessageBreak
+ in second subtag (RFC 3066)%
+ }%
+ \let\@pdflang\relax
+ }{}%
+ \fi
+ }{%
+ \Hy@Warning{%
+ Invalid language identifier `#1'\MessageBreak
+ for option `pdflang', because it violates\MessageBreak
+ well-formedness defined in RFC 5646%
+ }%
+ \let\@pdflang\relax
+ }%
+ }{%
+ \Hy@Warning{%
+ Invalid language identifier `#1'\MessageBreak
+ for option `pdflang' (RFC 3066)%
+ }%
+ \let\@pdflang\relax
+ }%
+ \fi
+ \fi
+}
+\define@key{Hyp}{pdfpagelabels}[true]{%
+ \Hy@boolkey{pdfpagelabels}{#1}%
+}
+\define@key{Hyp}{pdfescapeform}[true]{%
+ \Hy@boolkey{pdfescapeform}{#1}%
+}
+% \end{macrocode}
+% Default values:
+% \begin{macrocode}
+\def\@linkbordercolor{1 0 0}
+\def\@urlbordercolor{0 1 1}
+\def\@menubordercolor{1 0 0}
+\def\@filebordercolor{0 .5 .5}
+\def\@runbordercolor{0 .7 .7}
+\def\@citebordercolor{0 1 0}
+\def\@pdfhighlight{/I}
+\let\@pdftitle\ltx@empty
+\let\@pdfauthor\ltx@empty
+\let\@pdfproducer\relax
+\def\@pdfcreator{LaTeX with hyperref}
+\let\@pdfcreationdate\ltx@empty
+\let\@pdfmoddate\ltx@empty
+\let\@pdfsubject\ltx@empty
+\let\@pdfkeywords\ltx@empty
+\let\@pdftrapped\ltx@empty
+\let\@pdfpagescrop\ltx@empty
+\def\@pdfstartview{/Fit}
+\def\@pdfremotestartview{/Fit}
+\def\@pdfstartpage{1}
+\let\@pdfprintpagerange\ltx@empty
+\let\@pdflang\relax
+\let\PDF@SetupDoc\@empty
+\let\PDF@FinishDoc\@empty
+\let\phantomsection\@empty
+\let\special@paper\@empty
+\def\HyperDestNameFilter#1{#1}
+\Hy@AtBeginDocument{%
+ \begingroup
+ \edef\x{\@ifundefined{stockheight}\paperheight\stockheight}%
+ \dimen@=\x\relax
+ \ifdim\dimen@>\z@
+ \else
+ \dimen@=11in\relax
+ \Hy@WarningNoLine{%
+ Height of page (\expandafter\string\x) %
+ is invalid (\the\x),\MessageBreak
+ using 11in%
+ }%
+ \fi
+ \dimen@=0.99626401\dimen@
+ \xdef\Hy@pageheight{\strip@pt\dimen@}%
+ \endgroup
+}
+\def\HyInd@EncapChar{\|}
+% \end{macrocode}
+%
+% Allow the user to use |\ExecuteOptions| in the cfg file even though
+% this package does not use the normal option mechanism.
+% Use |\hyper@normalise| as a scratch macro, since it is going to
+% be defined in a couple of lines anyway.
+% \begin{macrocode}
+\let\hyper@normalise\ExecuteOptions
+\let\ExecuteOptions\hypersetup
+\Hy@RestoreCatcodes
+\InputIfFileExists{hyperref.cfg}{}{}
+\Hy@SetCatcodes
+\let\ExecuteOptions\hyper@normalise
+\ifx\Hy@MaybeStopNow\relax
+\else
+ \Hy@stoppedearlytrue
+ \expandafter\Hy@MaybeStopNow
+\fi
+\Hy@stoppedearlyfalse
+% \end{macrocode}
+% To add flexibility, we will not use the ordinary processing of
+% package options, but put them through the \emph{keyval} package.
+% This section was written by David Carlisle.
+%
+% \begin{macrocode}
+\SetupKeyvalOptions{family=Hyp}
+\DeclareLocalOptions{%
+ a4paper,a5paper,b5paper,letterpaper,legalpaper,executivepaper%
+}
+% \end{macrocode}
+%
+% Add option |tex4ht| if package |tex4ht| is loaded.
+% \begin{macrocode}
+\@ifpackagewith{hyperref}{tex4ht}{%
+}{%
+ \@ifpackageloaded{tex4ht}{%
+ \PassOptionsToPackage{tex4ht}{hyperref}%
+ }{%
+ \ltx@IfUndefined{HCode}{%
+ }{%
+ \begingroup
+ \def\Hy@pkg{tex4ht}%
+ \def\Hy@temp@A#1\RequirePackage[#2]#3#4\Hy@NIL{%
+ \def\Hy@param{#2#3}%
+ \ifx\Hy@param\ltx@empty
+ \expandafter\ltx@gobble
+ \else
+ \def\Hy@param{#3}%
+ \ifx\Hy@param\Hy@pkg
+ \PassOptionsToPackage{#2}{tex4ht}%
+ \expandafter\expandafter\expandafter\@gobble
+ \else
+ \expandafter\expandafter\expandafter\ltx@firstofone
+ \fi
+ \fi
+ {\Hy@temp@A#4\Hy@NIL}%
+ }%
+ \expandafter
+ \Hy@temp@A\@documentclasshook\RequirePackage[]{}\Hy@NIL
+ \endgroup
+ \PassOptionsToPackage{tex4ht}{hyperref}%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\ReadBookmarks\relax
+\ProcessKeyvalOptions{Hyp}
+% \end{macrocode}
+%
+% After processing options.
+%
+% \subsection{Package xspace support}
+%
+% \begin{macrocode}
+\def\Hy@xspace@end{}
+\ltx@IfUndefined{xspaceaddexceptions}{%
+ \Hy@AtBeginDocument{%
+ \ltx@IfUndefined{xspaceaddexceptions}{%
+ }{%
+ \def\Hy@xspace@end{%
+ \ltx@gobble{end for xspace}%
+ }%
+ \xspaceaddexceptions{%
+ \Hy@xspace@end,\hyper@linkend,\hyper@anchorend
+ }%
+ }%
+ }%
+}{%
+ \def\Hy@xspace@end{%
+ \ltx@gobble{end for xspace}%
+ }%
+ \xspaceaddexceptions{\Hy@xspace@end,\hyper@linkend,\hyper@anchorend}%
+}
+% \end{macrocode}
+%
+% \subsection{Option draft}
+%
+% \begin{macrocode}
+\Hy@AtBeginDocument{%
+ \ifHy@draft
+ \let\hyper@@anchor\@gobble
+ \gdef\hyper@link#1#2#3{#3\Hy@xspace@end}%
+ \def\hyper@anchorstart#1#2{#2\Hy@xspace@end}%
+ \def\hyper@anchorend{\Hy@xspace@end}%
+ \let\hyper@linkstart\@gobbletwo
+ \def\hyper@linkend{\Hy@xspace@end}%
+ \def\hyper@linkurl#1#2{#1\Hy@xspace@end}%
+ \def\hyper@linkfile#1#2#3{#1\Hy@xspace@end}%
+ \def\hyper@link@[#1]#2#3#4{#4\Hy@xspace@end}%
+ \def\Acrobatmenu#1#2{\leavevmode#2\Hy@xspace@end}%
+ \let\PDF@SetupDoc\@empty
+ \let\PDF@FinishDoc\@empty
+ \let\@fifthoffive\@secondoftwo
+ \let\@secondoffive\@secondoftwo
+ \let\ReadBookmarks\relax
+ \let\WriteBookmarks\relax
+ \Hy@WarningNoLine{Draft mode on}%
+ \fi
+ \Hy@DisableOption{draft}%
+ \Hy@DisableOption{nolinks}%
+ \Hy@DisableOption{final}%
+}
+% \end{macrocode}
+%
+% \subsection{PDF/A}
+%
+% \begin{macrocode}
+\Hy@DisableOption{pdfa}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifHy@pdfa
+ \ifnum \Hy@pdfversion < 4
+ \kvsetkeys{Hyp}{pdfversion=1.4}%
+ \fi
+ \Hy@DisableOption{pdfversion}%
+ \def\Hy@Acrobatmenu#1#2{%
+ \leavevmode
+ \begingroup
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \ifx\x\Hy@NextPage
+ \let\y=Y%
+ \else
+ \ifx\x\Hy@PrevPage
+ \let\y=Y%
+ \else
+ \ifx\x\Hy@FirstPage
+ \let\y=Y%
+ \else
+ \ifx\x\Hy@LastPage
+ \let\y=Y%
+ \else
+ \let\y=N%
+ \fi
+ \fi
+ \fi
+ \fi
+ \expandafter\endgroup
+ \ifx\y Y%
+ \else
+ \Hy@Error{%
+ PDF/A: Named action `#1' is not permitted%
+ }\@ehc
+ {#2}%
+ \expandafter\@gobble
+ \fi
+ }%
+ \def\Hy@temp#1{%
+ \expandafter\def\csname Hy@#1\endcsname{#1}%
+ \expandafter\@onelevel@sanitize\csname Hy@#1\endcsname
+ }%
+ \Hy@temp{NextPage}%
+ \Hy@temp{PrevPage}%
+ \Hy@temp{FirstPage}%
+ \Hy@temp{LastPage}%
+\else
+ \def\Hy@Acrobatmenu#1#2{\leavevmode}%
+\fi
+% \end{macrocode}
+%
+% \subsection{Patch for babel's
+% \texorpdfstring{\cs{texttilde}}{\\texttilde}}
+% Babel does not define \cmd{\texttilde} in NFSS2 manner,
+% so the NFSS2 definitions of PD1 or PU encoding is not
+% compatible. To fix this, \cmd{\texttilde} is defined
+% in babel manner.
+% \begin{macrocode}
+\Hy@nextfalse
+\ltx@IfUndefined{spanish@sh@"@sel}{}{\Hy@nexttrue}
+\ltx@IfUndefined{galician@sh@"@sel}{}{\Hy@nexttrue}
+\ltx@IfUndefined{estonian@sh@"@sel}{}{\Hy@nexttrue}
+\ifHy@next
+ \let\texttilde\~%
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Hy@wrapper@babel#1#2{%
+ \begingroup
+ \Hy@safe@activestrue
+ \set@display@protect
+ \edef\x{#2}%
+ \@onelevel@sanitize\x
+ \toks@{#1}%
+ \edef\x{\endgroup\the\toks@{\x}}%
+ \x
+}
+\def\Hy@WrapperDef#1{%
+ \begingroup
+ \escapechar=\m@ne
+ \xdef\Hy@gtemp{%
+ \expandafter\noexpand\csname HyWrap@\string#1\endcsname
+ }%
+ \endgroup
+ \edef#1{%
+ \noexpand\Hy@wrapper@babel
+ \expandafter\noexpand\Hy@gtemp
+ }%
+ \expandafter\def\Hy@gtemp
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifHy@hyperfigures
+ \Hy@Info{Hyper figures ON}%
+\else
+ \Hy@Info{Hyper figures OFF}%
+\fi
+\ifHy@nesting
+ \Hy@Info{Link nesting ON}%
+\else
+ \Hy@Info{Link nesting OFF}%
+\fi
+\ifHy@hyperindex
+ \Hy@Info{Hyper index ON}%
+\else
+ \Hy@Info{Hyper index OFF}%
+\fi
+\ifHy@plainpages
+ \Hy@Info{Plain pages ON}%
+\else
+ \Hy@Info{Plain pages OFF}%
+\fi
+\ifHy@backref
+ \Hy@Info{Backreferencing ON}%
+\else
+ \Hy@Info{Backreferencing OFF}%
+\fi
+\ifHy@typexml
+ \Hy@AtEndOfPackage{%
+ \RequirePackage{color}%
+ \RequirePackage{nameref}[2012/07/28]%
+ }%
+\fi
+\Hy@DisableOption{typexml}
+\ifHy@implicit
+ \Hy@InfoNoLine{Implicit mode ON; LaTeX internals redefined}%
+\else
+ \Hy@InfoNoLine{Implicit mode OFF; no redefinition of LaTeX internals}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+ \Hy@AtBeginDocument{%
+ \let\autoref\ref
+ \let\autopageref\pageref
+ \ifx\@pdfpagemode\@empty
+ \gdef\@pdfpagemode{UseNone}%
+ \fi
+ \global\Hy@backreffalse
+ }%
+ \Hy@AtEndOfPackage{%
+ \global\let\ReadBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ }%
+\fi
+\Hy@DisableOption{implicit}
+% \end{macrocode}
+%
+% \subsubsection{Driver loading}
+%
+% \begin{macrocode}
+\Hy@AtEndOfPackage{%
+ \@ifpackageloaded{tex4ht}{%
+ \def\Hy@driver{htex4ht}%
+ \Hy@texhttrue
+ }{}%
+% \end{macrocode}
+% Some drivers can be detected. Check for these drivers,
+% whether the given driver option is ok. Otherwise force
+% the right driver or use the default driver.
+% \begin{macrocode}
+ \ifx\Hy@driver\@empty
+ \else
+ \ifx\pdfextension\@undefined
+ \def\Hy@temp{hpdftex}%
+ \else
+ \def\Hy@temp{hluatex}%
+ \fi
+ \ifpdf
+ \ifx\Hy@driver\Hy@temp
+ \else
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ pdfTeX is running in PDF mode.\MessageBreak
+ Forcing driver `\Hy@temp.def'%
+ }%
+ \let\Hy@driver\Hy@temp
+ \fi
+ \else
+ \ifx\Hy@driver\Hy@temp
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ pdfTeX is not running in PDF mode.\MessageBreak
+ Using default driver%
+ }%
+ \let\Hy@driver\@empty
+ \fi
+ \fi
+ \fi
+ \ifHy@texht
+ \else
+ \ifx\Hy@driver\@empty
+ \else
+ \def\Hy@temp{hxetex}%
+ \ifxetex
+ \ifx\Hy@driver\Hy@temp
+ \else
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ XeTeX is running.\MessageBreak
+ Forcing driver `\Hy@temp.def' for XeTeX%
+ }%
+ \let\Hy@driver\Hy@temp
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifx\Hy@driver\@empty
+ \else
+ \def\Hy@temp{hvtexhtm}%
+ \ifvtexhtml
+ \ifx\Hy@driver\Hy@temp
+ \else
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ VTeX is running in HTML mode.\MessageBreak
+ Forcing driver `\Hy@temp.def'%
+ }%
+ \let\Hy@driver\Hy@temp
+ \fi
+ \else
+ \ifx\Hy@driver\Hy@temp
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ VTeX is not running in HTML mode.\MessageBreak
+ Using default driver%
+ }%
+ \let\Hy@driver\@empty
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% If the driver is not given, find the right driver or
+% use the default driver.
+% \begin{macrocode}
+ \let\HyOpt@DriverType\ltx@empty
+ \ifx\HyOpt@CustomDriver\ltx@empty
+ \ifx\Hy@driver\@empty
+ \def\HyOpt@DriverType{ (autodetected)}%
+ \providecommand*{\Hy@defaultdriver}{hypertex}%
+ \ifpdf
+ \ifx\pdfextension\@undefined
+ \def\Hy@driver{hpdftex}%
+ \else
+ \def\Hy@driver{hluatex}%
+ \fi
+ \else
+ \ifxetex
+ \def\Hy@driver{hxetex}%
+ \else
+ \ifvtexhtml
+ \def\Hy@driver{hvtexhtm}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+ \else
+ \ifvtexpdf
+ \def\Hy@driver{hvtex}%
+ \else
+ \ifvtexps
+ \def\Hy@driver{hvtex}%
+ \else
+ \ifx\HyOpt@DriverFallback\ltx@empty
+ \let\Hy@driver\Hy@defaultdriver
+ \def\HyOpt@DriverType{ (default)}%
+ \else
+ \begingroup
+ \toks@\expandafter{\HyOpt@DriverFallback}%
+ \edef\x{\endgroup
+ \noexpand\kvsetkeys{Hyp}{\the\toks@}%
+ }%
+ \x
+ \ifx\Hy@driver\ltx@empty
+ \let\Hy@driver\Hy@defaultdriver
+ \def\HyOpt@DriverType{ (default)}%
+ \else
+ \def\HyOpt@DriverType{ (fallback)}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifx\Hy@driver\Hy@defaultdriver
+ \def\Hy@temp{hdviwind}%
+ \ifx\Hy@temp\Hy@driver
+ \kvsetkeys{Hyp}{colorlinks}%
+ \PassOptionsToPackage{dviwindo}{color}%
+ \fi
+ \fi
+ \fi
+ \else
+ \def\HyOpt@DriverType{ (custom)}%
+ \let\Hy@driver\HyOpt@CustomDriver
+ \fi
+ \Hy@InfoNoLine{Driver\HyOpt@DriverType: \Hy@driver}%
+ \chardef\Hy@VersionChecked=0 %
+ \input{\Hy@driver.def}%
+ \ifcase\Hy@VersionChecked
+ \Hy@VersionCheck{\Hy@driver.def}%
+ \fi
+ \let\@unprocessedoptions\relax
+ \Hy@RestoreCatcodes
+ \Hy@DisableOption{tex4ht}%
+ \Hy@DisableOption{pdftex}%
+ \Hy@DisableOption{nativepdf}%
+ \Hy@DisableOption{dvipdfm}%
+ \Hy@DisableOption{dvipdfmx}%
+ \Hy@DisableOption{dvipdfmx-outline-open}%
+ \Hy@DisableOption{pdfmark}%
+ \Hy@DisableOption{dvips}%
+ \Hy@DisableOption{hypertex}%
+ \Hy@DisableOption{vtex}%
+ \Hy@DisableOption{vtexpdfmark}%
+ \Hy@DisableOption{dviwindo}%
+ \Hy@DisableOption{dvipsone}%
+ \Hy@DisableOption{textures}%
+ \Hy@DisableOption{latex2html}%
+ \Hy@DisableOption{ps2pdf}%
+ \Hy@DisableOption{xetex}%
+ \Hy@DisableOption{driverfallback}%
+ \Hy@DisableOption{customdriver}%
+ \Hy@DisableOption{pdfversion}%
+}
+% \end{macrocode}
+% Support for open outlines is enabled for Xe\TeX\ >= 0.9995.
+% I don't know, if older versions also support this.
+% AFAIK older dvipdfmx versions will break, thus the
+% switch cannot be turned on by default.
+% \begin{macrocode}
+\newif\ifHy@DvipdfmxOutlineOpen
+\ifxetex
+ \ifdim\number\XeTeXversion\XeTeXrevision in<0.9995in %
+ \else
+ \chardef\SpecialDvipdfmxOutlineOpen\@ne
+ \Hy@DvipdfmxOutlineOpentrue
+ \fi
+\fi
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname SpecialDvipdfmxOutlineOpen\endcsname\relax
+\else
+ \ifnum\SpecialDvipdfmxOutlineOpen>\z@
+ \Hy@DvipdfmxOutlineOpentrue
+ \fi
+\fi
+% \end{macrocode}
+%
+% \subsubsection{Bookmarks}
+% \begin{macrocode}
+\def\WriteBookmarks{0}
+\def\@bookmarkopenstatus#1{%
+ \ifHy@bookmarksopen
+% \end{macrocode}
+% The purpose of the |\@firstofone|-number-space-construct
+% is that no |\relax| will be inserted by \TeX{} before the |\else|:
+% \begin{macrocode}
+ \ifnum#1<\expandafter\@firstofone\expandafter
+ {\number\@bookmarksopenlevel} % explicit space
+ \else
+ -%
+ \fi
+ \else
+ -%
+ \fi
+}
+\ifHy@bookmarks
+ \Hy@Info{Bookmarks ON}%
+ \ifx\@pdfpagemode\@empty
+ \def\@pdfpagemode{UseOutlines}%
+ \fi
+\else
+ \let\@bookmarkopenstatus\ltx@gobble
+ \Hy@Info{Bookmarks OFF}%
+ \Hy@AtEndOfPackage{%
+ \global\let\ReadBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ }%
+ \ifx\@pdfpagemode\@empty
+ \def\@pdfpagemode{UseNone}%
+ \fi
+\fi
+\Hy@DisableOption{bookmarks}
+% \end{macrocode}
+%
+% Add wrapper for setting standard catcodes (babel's shorthands).
+% \begin{macrocode}
+\def\Hy@CatcodeWrapper#1{%
+ \let\Hy@EndWrap\ltx@empty
+ \def\TMP@EnsureCode##1##2{%
+ \edef\Hy@EndWrap{%
+ \Hy@EndWrap
+ \catcode##1 \the\catcode##1\relax
+ }%
+ \catcode##1 ##2\relax
+ }%
+ \TMP@EnsureCode{10}{12}% ^^J
+ \TMP@EnsureCode{33}{12}% !
+ \TMP@EnsureCode{34}{12}% "
+ \TMP@EnsureCode{36}{3}% $ (math)
+ \TMP@EnsureCode{38}{4}% & (alignment)
+ \TMP@EnsureCode{39}{12}% '
+ \TMP@EnsureCode{40}{12}% (
+ \TMP@EnsureCode{41}{12}% )
+ \TMP@EnsureCode{42}{12}% *
+ \TMP@EnsureCode{43}{12}% +
+ \TMP@EnsureCode{44}{12}% ,
+ \TMP@EnsureCode{45}{12}% -
+ \TMP@EnsureCode{46}{12}% .
+ \TMP@EnsureCode{47}{12}% /
+ \TMP@EnsureCode{58}{12}% :
+ \TMP@EnsureCode{59}{12}% ;
+ \TMP@EnsureCode{60}{12}% <
+ \TMP@EnsureCode{61}{12}% =
+ \TMP@EnsureCode{62}{12}% >
+ \TMP@EnsureCode{63}{12}% ?
+ \TMP@EnsureCode{91}{12}% [
+ \TMP@EnsureCode{93}{12}% ]
+ \TMP@EnsureCode{94}{7}% ^ (superscript)
+ \TMP@EnsureCode{95}{8}% _ (subscript)
+ \TMP@EnsureCode{96}{12}% `
+ \TMP@EnsureCode{124}{12}% |
+ \TMP@EnsureCode{126}{13}% ~ (active)
+ #1\relax
+ \Hy@EndWrap
+}
+% \end{macrocode}
+%
+% |\HyColor@UseColor| expects a macro as argument. It contains
+% the color specification.
+% \begin{macrocode}
+\Hy@AtBeginDocument{%
+ \ifHy@ocgcolorlinks
+ \kvsetkeys{Hyp}{colorlinks}%
+ \ifHy@pdfa
+ \Hy@Warning{%
+ PDF/A: Optional Content Groups are prohibited,\MessageBreak
+ using `colorlinks' instead of `ocgcolorlinks'%
+ }%
+ \Hy@ocgcolorlinksfalse
+ \fi
+ \fi
+ \ifHy@ocgcolorlinks
+ \else
+ \Hy@DisableOption{ocgcolorlinks}%
+ \fi
+ \ifHy@colorlinks
+ \def\@pdfborder{0 0 0}%
+ \let\@pdfborderstyle\@empty
+ \ifHy@typexml
+ \else
+ \Hy@CatcodeWrapper{%
+ \RequirePackage{color}%
+ }%
+ \fi
+ \def\Hy@colorlink#1{%
+ \begingroup
+ \HyColor@UseColor#1%
+ }%
+ \def\Hy@endcolorlink{\endgroup}%
+ \Hy@Info{Link coloring ON}%
+ \else
+ \ifHy@frenchlinks
+ \def\Hy@colorlink#1{\begingroup\fontshape{\scdefault}\selectfont}%
+ \def\Hy@endcolorlink{\endgroup}%
+ \Hy@Info{French linking ON}%
+ \else
+% \end{macrocode}
+% for grouping consistency:
+% \begin{macrocode}
+ \def\Hy@colorlink#1{\begingroup}%
+ \def\Hy@endcolorlink{\endgroup}%
+ \Hy@Info{Link coloring OFF}%
+ \fi
+ \fi
+ \Hy@DisableOption{colorlinks}%
+ \Hy@DisableOption{frenchlinks}%
+ \ifHy@texht
+ \long\def\@firstoffive#1#2#3#4#5{#1}%
+ \long\def\@secondoffive#1#2#3#4#5{#2}%
+ \long\def\@thirdoffive#1#2#3#4#5{#3}%
+ \long\def\@fourthoffive#1#2#3#4#5{#4}%
+ \long\def\@fifthoffive#1#2#3#4#5{#5}%
+ \providecommand*\@safe@activestrue{}%
+ \providecommand*\@safe@activesfalse{}%
+ \def\T@ref#1{%
+ \Hy@safe@activestrue
+ \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
+ \Hy@safe@activesfalse
+ }%
+ \def\T@pageref#1{%
+ \Hy@safe@activestrue
+ \expandafter\@setref\csname r@#1\endcsname\@secondoffive{#1}%
+ \Hy@safe@activesfalse
+ }%
+ \else
+ \ifHy@typexml
+ \else
+ \Hy@CatcodeWrapper{%
+ \RequirePackage{nameref}[2012/07/28]%
+ }%
+ \fi
+ \fi
+ \DeclareRobustCommand\ref{%
+ \@ifstar\@refstar\T@ref
+ }%
+ \DeclareRobustCommand\pageref{%
+ \@ifstar\@pagerefstar\T@pageref
+ }%
+% \@ifclassloaded{memoir}{%
+% \ltx@IfUndefined{@mem@titlerefnolink}\ltx@secondoftwo{%
+% \ltx@IfUndefined{@mem@titleref}\ltx@secondoftwo\ltx@firstoftwo
+% }%
+% }\ltx@secondoftwo
+% {%
+% \DeclareRobustCommand*{\nameref}{%
+% \@ifstar\@mem@titlerefnolink\@mem@titleref
+% }%
+% }{%
+ \DeclareRobustCommand*{\nameref}{%
+ \@ifstar\@namerefstar\T@nameref
+ }%
+% }%
+}
+\Hy@AtBeginDocument{%
+ \ifHy@texht
+ \else
+ \Hy@CatcodeWrapper\ReadBookmarks
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\ifHy@backref
+ \RequirePackage{backref}%
+\else
+ \let\Hy@backout\@gobble
+\fi
+\Hy@DisableOption{backref}
+\Hy@DisableOption{pagebackref}
+% \end{macrocode}
+% \begin{macrocode}
+\Hy@activeanchorfalse
+% \end{macrocode}
+%
+% \section{User hypertext macros}\label{usermacros}
+%
+% We need to normalise all user commands taking a URL argument;
+% Within the argument the following special definitions apply:
+% |\#|, |\%|, |~| produce |#|, |%|, |~| respectively.
+% for consistency |\~| produces |~| as well.
+% At the \emph{top level only} ie not within the argument of another
+% command, you can use |#| and |%| unescaped, to produce themselves.
+% even if, say, |#| is entered as |#| it will be converted to |\#|
+% so it does not die if written to an aux file etc. |\#| will write
+% as |#| locally while making |\special|s.
+% \begin{macrocode}
+\begingroup
+ \endlinechar=-1 %
+ \catcode`\^^A=14 %
+ \catcode`\^^M\active
+ \catcode`\%\active
+ \catcode`\#\active
+ \catcode`\_\active
+ \catcode`\$\active
+ \catcode`\&\active
+ \gdef\hyper@normalise{^^A
+ \begingroup
+ \catcode`\^^M\active
+ \def^^M{ }^^A
+ \catcode`\%\active
+ \let%\@percentchar
+ \let\%\@percentchar
+ \catcode`\#\active
+ \def#{\hyper@hash}^^A
+ \def\#{\hyper@hash}^^A
+ \@makeother\&^^A
+ \edef&{\string&}^^A
+ \edef\&{\string&}^^A
+ \edef\textunderscore{\string_}^^A
+ \let\_\textunderscore
+ \catcode`\_\active
+ \let_\textunderscore
+ \let~\hyper@tilde
+ \let\~\hyper@tilde
+ \let\textasciitilde\hyper@tilde
+ \let\\\@backslashchar
+ \edef${\string$}^^A
+ \Hy@safe@activestrue
+ \hyper@n@rmalise
+ }^^A
+ \catcode`\#=6 ^^A
+ \gdef\Hy@ActiveCarriageReturn{^^M}^^A
+ \gdef\hyper@n@rmalise#1#2{^^A
+ \def\Hy@tempa{#2}^^A
+ \ifx\Hy@tempa\Hy@ActiveCarriageReturn
+ \ltx@ReturnAfterElseFi{^^A
+ \hyper@@normalise{#1}^^A
+ }^^A
+ \else
+ \ltx@ReturnAfterFi{^^A
+ \hyper@@normalise{#1}{#2}^^A
+ }^^A
+ \fi
+ }^^A
+ \gdef\hyper@@normalise#1#2{^^A
+ \edef\Hy@tempa{^^A
+ \endgroup
+ \noexpand#1{\Hy@RemovePercentCr#2%^^M\@nil}^^A
+ }^^A
+ \Hy@tempa
+ }^^A
+ \gdef\Hy@RemovePercentCr#1%^^M#2\@nil{^^A
+ #1^^A
+ \ifx\limits#2\limits
+ \else
+ \ltx@ReturnAfterFi{^^A
+ \Hy@RemovePercentCr #2\@nil
+ }^^A
+ \fi
+ }^^A
+\endgroup
+\providecommand*\hyper@chars{%
+ \let\#\hyper@hash
+ \let\%\@percentchar
+ \Hy@safe@activestrue
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\hyperlink#1#2{%
+ \hyper@@link{}{#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Hy@VerboseLinkStart#1#2{%
+ \ifHy@verbose
+ \begingroup
+ \Hy@safe@activestrue
+ \xdef\Hy@VerboseGlobalTemp{(#1) `#2'}%
+ \Hy@Info{Reference \Hy@VerboseGlobalTemp}%
+ \xdef\Hy@VerboseGlobalTemp{%
+ \Hy@VerboseGlobalTemp, %
+ line \the\inputlineno
+ }%
+ \endgroup
+ \let\Hy@VerboseLinkInfo\Hy@VerboseGlobalTemp
+ \@onelevel@sanitize\Hy@VerboseLinkInfo
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Hy@VerboseLinkInfo{<VerboseLinkInfo>}
+\def\Hy@VerboseLinkStop{%
+ \ifHy@verbose
+ \begingroup
+ \edef\x{\endgroup
+ \write\m@ne{%
+ Package `hyperref' Info: %
+ End of reference \Hy@VerboseLinkInfo.%
+ }%
+ }%
+ \x
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Hy@VerboseAnchor#1{%
+ \ifHy@verbose
+ \begingroup
+ \Hy@safe@activestrue
+ \Hy@Info{Anchor `\HyperDestNameFilter{#1}'}%
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Hy@AllowHyphens{%
+ \relax
+ \ifhmode
+ \penalty\@M
+ \hskip\z@skip
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\href}[1][]{%
+ \begingroup
+ \setkeys{href}{#1}%
+ \@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}%
+}
+\def\Hy@href#{%
+ \hyper@normalise\href@
+}
+\begingroup
+ \catcode`\$=6 %
+ \catcode`\#=12 %
+ \gdef\href@$1{\expandafter\href@split$1##\\}%
+ \gdef\href@split$1#$2#$3\\$4{%
+ \hyper@@link{$1}{$2}{$4}%
+ \endgroup
+ }%
+\endgroup
+% \end{macrocode}
+% Option `page'.
+% \begin{macrocode}
+\define@key{href}{page}{%
+ \def\Hy@href@page{#1}%
+}
+\let\Hy@href@page\@empty
+\newcount\c@Hy@tempcnt
+\def\theHy@tempcnt{\the\c@Hy@tempcnt}
+\def\Hy@MakeRemoteAction{%
+ \ifx\Hy@href@page\@empty
+ \def\Hy@href@page{0}%
+ \else
+ \setcounter{Hy@tempcnt}{\Hy@href@page}%
+ \ifnum\c@Hy@tempcnt<\@ne
+ \Hy@Warning{%
+ Invalid page number (\theHy@tempcnt)\MessageBreak
+ for remote PDF file.\MessageBreak
+ Using page 1%
+ }%
+ \def\Hy@href@page{0}%
+ \else
+ \global\advance\c@Hy@tempcnt\m@ne
+ \edef\Hy@href@page{\theHy@tempcnt}%
+ \fi
+ \fi
+% \end{macrocode}
+% If a next action is set, then also a new window
+% should be opened. Otherwise AR reclaims that it
+% closes the current file with discarding the next actions.
+% \begin{macrocode}
+ \ifx\Hy@href@nextactionraw\@empty
+ \else
+ \Hy@pdfnewwindowsettrue
+ \Hy@pdfnewwindowtrue
+ \fi
+}
+% \end{macrocode}
+% Option `pdfremotestartview'.
+% \begin{macrocode}
+\define@key{href}{pdfremotestartview}{%
+ \setkeys{Hyp}{pdfremotestartview={#1}}%
+}
+% \end{macrocode}
+% Option `pdfnewwindow'.
+% \begin{macrocode}
+\let\KV@href@pdfnewwindow\KV@Hyp@pdfnewwindow
+\let\KV@href@pdfnewwindow@default\KV@Hyp@pdfnewwindow@default
+% \end{macrocode}
+% Option `ismap'.
+% \begin{macrocode}
+\newif\ifHy@href@ismap
+\define@key{href}{ismap}[true]{%
+ \ltx@IfUndefined{Hy@href@ismap#1}{%
+ \Hy@Error{%
+ Invalid value (#1) for key `ismap'.\MessageBreak
+ Permitted values are `true' or `false'.\MessageBreak
+ Ignoring `ismap'%
+ }\@ehc
+ }{%
+ \csname Hy@href@ismap#1\endcsname
+ }%
+}
+% \end{macrocode}
+% Option `nextactionraw'.
+% \begin{macrocode}
+\let\Hy@href@nextactionraw\@empty
+\define@key{href}{nextactionraw}{%
+ \edef\Hy@href@nextactionraw{#1}%
+ \ifx\Hy@href@nextactionraw\@empty
+ \else
+ \Hy@Match\Hy@href@nextactionraw{}{%
+ ^(\HyPat@ObjRef/|<<.*/S[ /].+>>|%
+ \[( ?\HyPat@ObjRef/|<<.*/S[ /].+>>)+ ?])$%
+ }{}{%
+ \Hy@Warning{Invalid value for `nextactionraw':\MessageBreak
+ \Hy@href@nextactionraw\MessageBreak
+ The action is discarded%
+ }%
+ }%
+ \ifx\Hy@href@nextactionraw\@empty
+ \else
+ \edef\Hy@href@nextactionraw{/Next \Hy@href@nextactionraw}%
+ \fi
+ \fi
+}
+\def\HyPat@ObjRef/{.+}
+% \end{macrocode}
+% Load package |url.sty| and save the meaning of
+% the original \cmd{\url} in \cmd{\nolinkurl}.
+% \begin{macrocode}
+\RequirePackage{url}
+\let\HyOrg@url\url
+\def\Hurl{\begingroup \Url}
+\DeclareRobustCommand*{\nolinkurl}{\hyper@normalise\nolinkurl@}
+\def\nolinkurl@#1{\Hurl{#1}}
+\DeclareRobustCommand*{\url}{\hyper@normalise\url@}
+\def\url@#1{\hyper@linkurl{\Hurl{#1}}{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\hyperimage}{\hyper@normalise\hyper@image}
+\providecommand\hyper@image[2]{#2}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\hypertarget#1#2{%
+ \ifHy@nesting
+ \hyper@@anchor{#1}{#2}%
+ \else
+ \hyper@@anchor{#1}{\relax}#2%
+ \fi
+}
+% \end{macrocode}
+% |\hyperref| is more complicated, as it includes the concept of a
+% category of link, used to make the name. This is not really used in this
+% package. |\hyperdef| sets up an anchor in the same way. They each have
+% three parameters of category, linkname, and marked text, and |\hyperref|
+% also has a first parameter of URL.
+% If there is an optional first parameter to |\hyperdef|,
+% it is the name of a \LaTeX\ label which can be used in
+% a short form of |\hyperref| later, to avoid
+% remembering the name and category.
+% \begin{macrocode}
+\DeclareRobustCommand*{\hyperref}{%
+ \@ifnextchar[{\Hy@babelnormalise\label@hyperref}\@hyperref
+}
+\def\Hy@babelnormalise#1[#2]{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\Hy@tempa{%
+ \endgroup
+ \noexpand#1[{#2}]%
+ }%
+ \Hy@tempa
+}
+\def\@hyperref{\hyper@normalise\@@hyperref}
+\def\@@hyperref#1#2#3{%
+ \edef\ref@one{\ifx\\#2\\\else#2.\fi#3}%
+ \expandafter\tryhyper@link\ref@one\\{#1}%
+}
+\def\tryhyper@link#1\\#2{%
+ \hyper@@link{#2}{#1}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\hyperdef{\@ifnextchar[{\label@hyperdef}{\@hyperdef}}
+\def\@hyperdef#1#2#3{%, category, name, text
+ \ifx\\#1\\%
+ \def\Hy@AnchorName{#2}%
+ \else
+ \def\Hy@AnchorName{#1.#2}%
+ \fi
+ \ifHy@nesting
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{#3}%
+ \else
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{\relax}#3%
+ \fi
+}
+% \end{macrocode}
+% We also have a need to give a \LaTeX\ \emph{label} to a
+% hyper reference, to ease the pain of referring to it later.
+% \verb|\hyperrefundefinedlink| may be redefined by a user
+% to add colour or other formatting.
+% \begin{macrocode}
+\let\hyperrefundefinedlink\@firstofone
+\def\label@hyperref[#1]{%
+ \expandafter\label@@hyperref\csname r@#1\endcsname{#1}%
+}%
+\def\label@@hyperref#1#2#3{%
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \@latex@warning{%
+ Hyper reference `#2' on page \thepage \space undefined%
+ }%
+ \begingroup
+ \hyperrefundefinedlink{#3}%
+ \endgroup
+ \else
+ \hyper@@link{\expandafter\@fifthoffive#1}%
+ {\expandafter\@fourthoffive#1\@empty\@empty}{#3}%
+ \fi
+}
+\def\label@hyperdef[#1]#2#3#4{% label name, category, name,
+ % anchor text
+ \@bsphack
+ \ifx\\#2\\%
+ \def\Hy@AnchorName{#3}%
+ \else
+ \def\Hy@AnchorName{#2.#3}%
+ \fi
+ \if@filesw
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{}{}{}{\Hy@AnchorName}{}}%
+ }%
+ \fi
+ \@esphack
+ \ifHy@nesting
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{#4}%
+ \else
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{\relax}#4%
+ \fi
+}
+% \end{macrocode}
+%
+% \subsection{Link box support for XeTeX}
+%
+% \begin{macrocode}
+\newdimen\XeTeXLinkMargin
+\setlength{\XeTeXLinkMargin}{2pt}
+\ifxetex
+ \font\XeTeXLink@font=pzdr at 1sp\relax
+ \newcommand*{\XeTeXLink@space}{%
+ \begingroup
+ \XeTeXLink@font
+ \@xxxii
+ \endgroup
+ }%
+ \newcommand{\XeTeXLinkBox}[1]{%
+ \begingroup
+ \leavevmode
+ \sbox\z@{#1}%
+ \begingroup
+ \dimen@=\dp\z@
+ \advance\dimen@\XeTeXLinkMargin
+ \setbox\tw@=\llap{%
+ \hb@xt@\XeTeXLinkMargin{%
+ \lower\dimen@\hbox{\XeTeXLink@space}%
+ \hss
+ }%
+ }%
+ \dp\tw@=\dp\z@
+ \ht\tw@=\ht\z@
+ \copy\tw@
+ \endgroup
+ \copy\z@
+ \dimen@=\ht\z@
+ \advance\dimen@\XeTeXLinkMargin
+ \setbox\tw@=\rlap{%
+ \hb@xt@\XeTeXLinkMargin{%
+ \hss
+ \raise\dimen@\hbox{\XeTeXLink@space}%
+ }%
+ }%
+ \dp\tw@=\dp\z@
+ \ht\tw@=\ht\z@
+ \copy\tw@
+ \endgroup
+ }%
+\else
+ \newcommand*{\XeTeXLinkBox}[1]{%
+ \begingroup
+ \leavevmode
+ \sbox\z@{#1}%
+ \copy\z@
+ \endgroup
+ }%
+\fi
+% \end{macrocode}
+%
+% \section{Underlying basic hypertext macros}\label{coremacros}
+%
+% Links have an optional type, a filename (possibly a URL),
+% an internal name, and some marked text. (Caution: the internal
+% name may contain babel shorthand characters.)
+% If the second parameter is empty, its an internal link,
+% otherwise we need to open another file or a URL.
+% A link start has a type, and a URL.
+% \begin{macrocode}
+\def\hyper@@link{\let\Hy@reserved@a\relax
+ \@ifnextchar[{\hyper@link@}{\hyper@link@[link]}%
+}
+% #1: type
+% #2: URL
+% #3: destination name
+% #4: text
+\def\hyper@link@[#1]#2#3#4{%
+ \ltx@ifempty{#4}{% link text
+ \Hy@Warning{Suppressing empty link}%
+ }{%
+ \begingroup
+ \protected@edef\Hy@tempa{#2}%
+ \edef\Hy@tempb{#3}%
+ \ifx\Hy@tempa\ltx@empty
+ \ifx\Hy@tempb\ltx@empty
+ \Hy@Warning{Suppressing link with empty target}%
+ \toks@{%
+ \endgroup
+ \ltx@secondoftwo
+ }%
+ \else
+ \toks@{%
+ \endgroup
+ \hyper@link{#1}%
+ }%
+ \fi
+ \else
+ \toks@{%
+ \endgroup
+ \expandafter\hyper@readexternallink#2\\{#1}%
+ }%
+ \fi
+ \Hy@safe@activesfalse
+ \toks@\expandafter{%
+ \the\expandafter\toks@
+ \expandafter{\Hy@tempb}{#4}%
+ }%
+ \the\toks@
+ }%
+}
+% \end{macrocode}
+% The problem here is that the first (URL) parameter may be a
+% local \texttt{file:} reference
+% (in which case some browsers treat it differently)
+% or a genuine URL, in which case we'll have to activate
+% a real Web browser.
+% Note that a simple name is also a URL, as that is interpreted
+% as a relative file name. We have to worry about |#| signs in a local
+% file as well.
+%
+% \begin{macrocode}
+\def\hyper@readexternallink#1\\#2#3#4{%
+ \begingroup
+ \let\\\relax
+ \expandafter\endgroup
+ \expandafter\@@hyper@@readexternallink#1\\{#2}{#3}{#4}%
+}
+\def\@@hyper@@readexternallink#1\\#2#3#4{%
+% \end{macrocode}
+% Parameters are:
+% \begin{enumerate}
+% \item The URL or file name
+% \item The type
+% \item The internal name
+% \item The link string
+% \end{enumerate}
+% We need to get the 1st parameter properly expanded,
+% so we delimit the arguments rather than passing it inside a group.
+% \begin{macrocode}
+ \@hyper@readexternallink{#2}{#3}{#4}#1::\\{#1}%
+}
+% \end{macrocode}
+% Now (potentially), we are passed:
+% 1) The link type
+% 2) The internal name,
+% 3) the link string,
+% 4) the URL type (http, mailto, file etc),
+% 5) the URL details
+% 6) anything after a real : in the URL
+% 7) the whole URL again
+% \begin{macrocode}
+\def\@pdftempwordfile{file}%
+\def\@pdftempwordrun{run}%
+\def\@hyper@readexternallink#1#2#3#4:#5:#6\\#7{%
+% \end{macrocode}
+% If there are no colons at all (|#6| is blank), its a local
+% file; if the URL type (|#4|) is blank, its probably a Mac filename,
+% so treat it like a \texttt{file:} URL. The only flaw is if
+% its a relative Mac path, with several colon-separated elements ---
+% then we lose. Such names must be prefixed with an explicit |dvi:|
+% \begin{macrocode}
+ \ifx\\#6\\%
+ \@hyper@linkfile file:#7\\{#3}{#2}{#7}%
+ \else
+ \ifx\\#4\\%
+ \@hyper@linkfile file:#7\\{#3}{#2}{#7}%
+ \else
+% \end{macrocode}
+% If the URL type is `file', pass it for local opening
+% \begin{macrocode}
+ \def\@pdftempa{#4}%
+ \ifx\@pdftempa\@pdftempwordfile
+ \@hyper@linkfile#7\\{#3}{#2}{#7}%
+ \else
+% \end{macrocode}
+% if it starts `run:', its to launch an application.
+% \begin{macrocode}
+ \ifx\@pdftempa\@pdftempwordrun
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Launch action is prohibited%
+ }\@ehc
+ \begingroup
+ \leavevmode
+ #2%
+ \endgroup
+ \else
+ \@hyper@launch#7\\{#3}{#2}%
+ \fi
+ \else
+% \end{macrocode}
+% otherwise its a URL
+% \begin{macrocode}
+ \hyper@linkurl{#3}{#7\ifx\\#2\\\else\hyper@hash#2\fi}%
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% By default, turn |run:| into |file:|
+% \begin{macrocode}
+\def\@hyper@launch run:#1\\#2#3{% filename, anchor text, linkname
+ \hyper@linkurl{#2}{%
+ \Hy@linkfileprefix
+ #1%
+ \ifx\\#3\\%
+ \else
+ \hyper@hash
+ #3%
+ \fi
+ }%
+}
+% \end{macrocode}
+% D P Story <story@uakron.edu> pointed out that relative paths
+% starting .. fell over. Switched to using |\filename@parse| to
+% solve this.
+% \begin{macrocode}
+\def\@hyper@linkfile file:#1\\#2#3#4{%
+ %file url,link string, name, original uri
+ \filename@parse{#1}%
+ \ifx\filename@ext\relax
+ \edef\filename@ext{\XR@ext}%
+ \fi
+ \def\use@file{\filename@area\filename@base.\filename@ext}%
+ \Hy@IfStringEndsWith\filename@ext\XR@ext{%
+ \hyper@linkfile{#2}{\use@file}{#3}%
+ }{%
+ \ifx\@baseurl\@empty
+ \hyper@linkurl{#2}{%
+ #4\ifx\\#3\\\else\hyper@hash#3\fi
+ }%
+ \else
+ \hyper@linkurl{#2}{\use@file\ifx\\#3\\\else\hyper@hash#3\fi}%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Hy@IfStringEndsWith#1#2{%
+ \begingroup
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \edef\x{.\x$}%
+ \edef\y{#2}%
+ \@onelevel@sanitize\y
+ \edef\y{.\y$}%
+ \expandafter\def\expandafter\z\expandafter##\expandafter1\y##2\@nil{%
+ \endgroup
+ \ifx\relax##2\relax
+ \expandafter\ltx@secondoftwo
+ \else
+ \expandafter\ltx@firstoftwo
+ \fi
+ }%
+ \expandafter\expandafter\expandafter\z\expandafter\x\y\@nil
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Hy@StringLocalhost{localhost}
+\@onelevel@sanitize\Hy@StringLocalhost
+\def\Hy@CleanupFile#1{%
+ \edef#1{#1}%
+ \expandafter\Hy@@CleanupFile#1\hbox///\hbox\@nil{#1}%
+}
+\def\Hy@@CleanupFile#1//#2/#3\hbox#4\@nil#5{%
+ \begingroup
+ \toks@{\endgroup}%
+ \def\x{#1}%
+ \ifx\x\@empty
+ \def\x{#2}%
+ \ifx\x\@empty
+ \toks@{\endgroup\def#5{/#3}}%
+ \else
+ \@onelevel@sanitize\x
+ \ifx\x\Hy@StringLocalhost
+ \toks@{\endgroup\def#5{/#3}}%
+ \fi
+ \fi
+ \fi
+ \the\toks@
+}
+% \end{macrocode}
+% Anchors have a name, and marked text.
+% We have to be careful with the marked text, as if we break
+% off part of something to put a |\special| around it, all hell breaks
+% loose. Therefore, we check the category code of the first token,
+% and only proceed if its safe. Tanmoy sorted this out.
+%
+% A curious case arises if the original parameter
+% was in braces. That means that |#2| comes here a multiple
+% letters, and the |noexpand| just looks at the first one,
+% putting the rest in the output. Yuck.
+% \begin{macrocode}
+\long\def\hyper@@anchor#1#2{\@hyper@@anchor#1\relax#2\relax}
+\long\def\@hyper@@anchor#1\relax#2#3\relax{%
+ \ifx\\#1\\%
+ #2\Hy@Warning{Ignoring empty anchor}%
+ \else
+ \def\anchor@spot{#2#3}%
+ \let\put@me@back\@empty
+ \ifx\relax#2\relax
+ \else
+ \ifHy@nesting
+ \else
+ \ifcat a\noexpand#2\relax
+ \else
+ \ifcat 0\noexpand#2 \relax
+ \else
+% \typeout{Anchor start is not alphanumeric %
+% on input line\the\inputlineno%
+% }%
+ \let\anchor@spot\@empty
+ \def\put@me@back{#2#3}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifHy@activeanchor
+ \anchor@spot
+ \else
+ \hyper@anchor{#1}%
+ \fi
+ \expandafter\put@me@back
+ \fi
+ \let\anchor@spot\@empty
+}
+\let\anchor@spot\ltx@empty
+% \end{macrocode}
+%
+% \section{Option `destlabel'}
+%
+% \begin{macrocode}
+\ifHy@destlabel
+% \end{macrocode}
+%
+% \begin{macro}{\hyper@newdestlabel}
+% \begin{macrocode}
+ \def\hyper@newdestlabel#1#2{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\x{\endgroup
+ \noexpand\@newl@bel{HyDL}{#1}{#2}%
+ }%
+ \x
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hyper@destlabel@hook}
+% \begin{macrocode}
+ \providecommand*{\hyper@destlabel@hook}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@DestRename}
+% \begin{macrocode}
+ \newcommand*{\Hy@DestRename}[2]{%
+ \ltx@IfUndefined{HyDL!#1}{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\dest@name{#1}%
+ \edef\label@name{#2}%
+ \hyper@destlabel@hook
+ \Hy@IsNotEmpty{dest@name}{%
+ \Hy@IsNotEmpty{label@name}{%
+ \global\expandafter
+ \let\csname HyDL!#1\endcsname\ltx@empty
+ \if@filesw
+ \protected@write\@auxout{}{%
+ \string\hyper@newdestlabel
+ {#1}%
+ {\label@name}%
+ }%
+ \fi
+ }%
+ }%
+ \endgroup
+ }{}%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyperDestRename}
+% \begin{macrocode}
+ \newcommand*{\HyperDestRename}[2]{%
+ \AtBeginDocument{%
+ \Hy@DestRename{#1}{#2}%
+ }%
+ }%
+ \AtBeginDocument{%
+ \let\HyperDestRename\Hy@DestRename
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@IsNotEmpty}
+% \begin{macrocode}
+ \def\Hy@IsNotEmpty#1{%
+ \ltx@IfUndefined{#1}\ltx@gobble{%
+ \expandafter\ifx\csname#1\endcsname\ltx@empty
+ \expandafter\ltx@gobble
+ \else
+ \expandafter\ltx@firstofone
+ \fi
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \ltx@GlobalAppendToMacro\label@hook{%
+ \HyperDestRename\@currentHref\label@name
+ }%
+% \end{macrocode}
+%
+% \begin{macro}{\HyperDestLabelReplace}
+% \begin{macrocode}
+ \def\HyperDestLabelReplace#1{%
+ \ltx@ifundefined{HyDL@#1}{%
+ #1%
+ }{%
+ \csname HyDL@#1\endcsname
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyperDestNameFilter}
+% \begin{macrocode}
+\let\HyperDestNameFilter\HyperDestLabelReplace
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\else
+% \end{macrocode}
+% \begin{macro}{\hyper@newdestlabel}
+% \begin{macrocode}
+ \let\hyper@newdestlabel\ltx@gobbletwo
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyperDestLabelReplace}
+% \begin{macrocode}
+ \let\HyperDestLabelReplace\ltx@firstofone
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyperDestRename}
+% \begin{macrocode}
+% \end{macrocode}
+ \let\HyperDestRename\ltx@gobbletwo
+% \end{macro}
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+\Hy@DisableOption{destlabel}
+% \end{macrocode}
+%
+% Provide a dummy default definition of \cs{hyper@newdestlabel}
+% inside the .aux files.
+% \begin{macrocode}
+\AddLineBeginAux{%
+ \string\providecommand\string\hyper@newdestlabel[2]{}%
+}
+% \end{macrocode}
+%
+% \section{Compatibility with the \emph{\LaTeX{}2html} package}\label{latex2html}
+%
+% Map our macro names on to Nikos', so that documents prepared
+% for that system will work without change.
+%
+% Note, however, that the whole complicated structure for
+% segmenting documents is not supported; it is assumed that the user
+% will load |html.sty| first, and then |hyperref.sty|, so that the
+% definitions in |html.sty| take effect, and are then overridden
+% in a few circumstances by this package.
+% \begin{macrocode}
+\let\htmladdimg\hyperimage
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\htmladdnormallink#1#2{\href{#2}{#1}}
+\def\htmladdnormallinkfoot#1#2{\href{#2}{#1}\footnote{#2}}
+\def\htmlref#1#2{% anchor text, label
+ \label@hyperref[{#2}]{#1}%
+}
+% \end{macrocode}
+% This is really too much. The \LaTeX2html package defines its own
+% |\hyperref| command, with a different syntax. Was this always here?
+% Its weird, anyway. We interpret it in the `printed' way, since
+% we are about fidelity to the page.
+% \begin{macrocode}
+\def\@@latextohtmlX{%
+ \let\hhyperref\hyperref
+ \def\hyperref##1##2##3##4{% anchor text for HTML
+ % text to print before label in print
+ % label
+ % post-label text in print
+ ##2\ref{##4}##3%
+ }%
+}
+% \end{macrocode}
+%
+% \section{Forms creation}
+% Allow for creation of PDF or HTML forms. The effects here are
+% limited somewhat by the need to support both output formats,
+% so it may not be as clever as something which only wants
+% to make PDF forms.
+%
+% I (Sebastian) could not have started this without the
+% encouragement of T V Raman.
+%
+% \subsection{Field flags}
+%
+% The field flags are organized in a bit set.
+% \begin{macrocode}
+\RequirePackage{bitset}
+% \end{macrocode}
+%
+% Each flag has a option name, an \cs{if} switch,
+% and a bit position. The default is always `false', the
+% flag is clear.
+% This is also the default of the switch created by \cs{newif}.
+%
+% The names of the flags in the PDF specification (1.7)
+% are used as lowercase option names.
+% \begin{macro}{\HyField@NewFlag}
+% |#1|: type: |F| annot flags, |Ff| field flags\\
+% |#2|: PDF name\\
+% |#3|: PDF position
+% \begin{macrocode}
+\def\HyField@NewFlag#1#2{%
+ \lowercase{\HyField@NewOption{#2}}%
+ \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@NewFlagOnly}
+% \begin{macrocode}
+\def\HyField@NewFlagOnly#1#2{%
+ \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@NewOption}
+% |#1|: option name
+% \begin{macrocode}
+\def\HyField@NewOption#1{%
+ \expandafter\newif\csname ifFld@#1\endcsname
+ \define@key{Field}{#1}[true]{%
+ \lowercase{\Field@boolkey{##1}}{#1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@NewBitsetFlag}
+% Package `bitset' uses zero based positions, the
+% PDF specification starts with one.\\
+% |#1|: option\\
+% |#2|: PDF name\\
+% |#3|: type: |F| annot flags, |Ff| field flags\\
+% |#4|: PDF position
+% \begin{macrocode}
+\def\HyField@NewBitsetFlag#1#2#3#4{%
+ \begingroup
+ \count@=#4\relax
+ \advance\count@\m@ne
+ \def\x##1{%
+ \endgroup
+ \expandafter\def\csname HyField@#3@#1\endcsname{##1}%
+ \expandafter\ifx\csname HyField@#3@##1\endcsname\relax
+ \expandafter\edef\csname HyField@#3@##1\endcsname{%
+ (\number#4) #2%
+ }%
+ \else
+ \expandafter\edef\csname HyField@#3@##1\endcsname{%
+ \csname HyField@#3@##1\endcsname
+ /#2%
+ }%
+ \fi
+ }%
+ \expandafter\x\expandafter{\the\count@}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@UseFlag}
+% The bit set is |HyField@#1|
+% \begin{macrocode}
+\def\HyField@UseFlag#1#2{%
+ \lowercase{\HyField@@UseFlag{#2}}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@@UseFlag}
+% \begin{macrocode}
+\def\HyField@@UseFlag#1#2{%
+ \bitsetSetValue{HyField@#2}{%
+ \csname HyField@#2@#1\endcsname
+ }{%
+ \csname ifFld@#1\endcsname 1\else 0\fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@SetFlag}
+% The bit set is |HyField@#1|
+% \begin{macrocode}
+\def\HyField@SetFlag#1#2{%
+ \lowercase{\HyField@@SetFlag{#2}}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@@SetFlag}
+% \begin{macrocode}
+\def\HyField@@SetFlag#1#2{%
+ \bitsetSetValue{HyField@#2}{%
+ \csname HyField@#2@#1\endcsname
+ }{1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@PrintFlags}
+% \begin{macrocode}
+\def\HyField@PrintFlags#1#2{%
+ \ifHy@verbose
+ \begingroup
+ \let\Hy@temp\@empty
+ \let\MessageBreak\relax
+ \expandafter\@for\expandafter\x\expandafter:\expandafter=%
+ \bitsetGetSetBitList{HyField@#1}\do{%
+ \edef\Hy@temp{%
+ \Hy@temp
+ \csname HyField@#1@\x\endcsname\MessageBreak
+ }%
+ }%
+ \edef\x{\endgroup
+ \noexpand\Hy@Info{%
+ Field flags: %
+ \expandafter\ifx\@car#1\@nil S\else/\fi
+ #1 %
+ \bitsetGetDec{HyField@#1} %
+ (0x\bitsetGetHex{HyField@#1}{32})\MessageBreak
+ \Hy@temp
+ for #2%
+ }%
+ }\x
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Declarations of field flags}
+%
+% ``Table 8.70 Field flags common to all field types''
+% \begin{macrocode}
+\HyField@NewFlag{Ff}{ReadOnly}{1}
+\HyField@NewFlag{Ff}{Required}{2}
+\HyField@NewFlag{Ff}{NoExport}{3}
+% \end{macrocode}
+% ``Table 8.75 Field flags specific to button fields''
+% \begin{macrocode}
+\HyField@NewFlag{Ff}{NoToggleToOff}{15}
+\HyField@NewFlag{Ff}{Radio}{16}
+\HyField@NewFlag{Ff}{Pushbutton}{17}
+\HyField@NewFlag{Ff}{RadiosInUnison}{26}
+% \end{macrocode}
+% ``Table 8.77 Field flags specific to text fields''
+% \begin{macrocode}
+\HyField@NewFlag{Ff}{Multiline}{13}
+\HyField@NewFlag{Ff}{Password}{14}
+\HyField@NewFlag{Ff}{FileSelect}{21}% PDF 1.4
+\HyField@NewFlag{Ff}{DoNotSpellCheck}{23}% PDF 1.4
+\HyField@NewFlag{Ff}{DoNotScroll}{24}% PDF 1.4
+\HyField@NewFlag{Ff}{Comb}{25}% PDF 1.4
+\HyField@NewFlag{Ff}{RichText}{26}% PDF 1.5
+% \end{macrocode}
+% ``Table 8.79 field flags specific to choice fields''
+% \begin{macrocode}
+\HyField@NewFlag{Ff}{Combo}{18}
+\HyField@NewFlag{Ff}{Edit}{19}
+\HyField@NewFlag{Ff}{Sort}{20}
+\HyField@NewFlag{Ff}{MultiSelect}{22}% PDF 1.4
+% \HyField@NewFlag{Ff}{DoNotSpellCheck}{23}% PDF 1.4
+\HyField@NewFlag{Ff}{CommitOnSelChange}{27}% PDF 1.5
+% \end{macrocode}
+% Signature fields are not supported.
+%
+% Until 6.76i hyperref uses field option `combo' to set
+% three flags `Combo', `Edit', and `Sort'. Option `popdown' sets
+% flag `Combo' only.
+% \begin{macrocode}
+\newif\ifFld@popdown
+\define@key{Field}{popdown}[true]{%
+ \lowercase{\Field@boolkey{#1}}{popdown}%
+}
+% \end{macrocode}
+%
+% Annotation flags. The form objects are widget annotations.
+% There are two flags for readonly settings, the one in the annotation
+% flags is ignored, instead the other in the field flags is used.
+%
+% Flag |Print| is not much useful, because hyperref do not
+% use the appearance entry of the annotations for most fields.
+% \begin{macrocode}
+\HyField@NewFlag{F}{Invisible}{1}
+\HyField@NewFlag{F}{Hidden}{2}% PDF 1.2
+\HyField@NewFlag{F}{Print}{3}% PDF 1.2
+\HyField@NewFlag{F}{NoZoom}{4}% PDF 1.2
+\HyField@NewFlag{F}{NoRotate}{5}% PDF 1.3
+\HyField@NewFlag{F}{NoView}{6}% PDF 1.3
+\HyField@NewFlag{F}{Locked}{8}% PDF 1.4
+\HyField@NewFlag{F}{ToggleNoView}{9}% PDF 1.5
+\HyField@NewFlag{F}{LockedContents}{10}% PDF 1.7
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifHy@pdfa
+ \def\HyField@PDFAFlagWarning#1#2{%
+ \Hy@Warning{%
+ PDF/A: Annotation flag `#1' must\MessageBreak
+ be set to `#2'%
+ }%
+ }%
+ \Fld@invisiblefalse
+ \def\Fld@invisibletrue{%
+ \HyField@PDFAFlagWarning{invisible}{false}%
+ }%
+ \Fld@hiddenfalse
+ \def\Fld@hiddentrue{%
+ \HyField@PDFAFlagWarning{hidden}{false}%
+ }%
+ \Fld@printtrue
+ \def\Fld@printfalse{%
+ \HyField@PDFAFlagWarning{print}{true}%
+ }%
+ \Fld@nozoomtrue
+ \def\Fld@nozoomfalse{%
+ \HyField@PDFAFlagWarning{nozoom}{true}%
+ }%
+ \Fld@norotatetrue
+ \def\Fld@norotatefalse{%
+ \HyField@PDFAFlagWarning{norotate}{true}%
+ }%
+ \Fld@noviewfalse
+ \def\Fld@noviewtrue{%
+ \HyField@PDFAFlagWarning{noview}{false}%
+ }%
+\fi
+% \end{macrocode}
+%
+% Submit flags. Flag 1 Include/Exclude is not supported,
+% use option noexport instead.
+% \begin{macrocode}
+\HyField@NewFlag{Submit}{IncludeNoValueFields}{2}
+\HyField@NewFlagOnly{Submit}{ExportFormat}{3}
+\HyField@NewFlag{Submit}{GetMethod}{4}
+\HyField@NewFlag{Submit}{SubmitCoordinates}{5}
+\HyField@NewFlagOnly{Submit}{XFDF}{6}
+\HyField@NewFlag{Submit}{IncludeAppendSaves}{7}
+\HyField@NewFlag{Submit}{IncludeAnnotations}{8}
+\HyField@NewFlagOnly{Submit}{SubmitPDF}{9}
+\HyField@NewFlag{Submit}{CanonicalFormat}{10}
+\HyField@NewFlag{Submit}{ExclNonUserAnnots}{11}
+\HyField@NewFlag{Submit}{ExclFKey}{12}
+\HyField@NewFlag{Submit}{EmbedForm}{14}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Field}{export}{%
+ \lowercase{\def\Hy@temp{#1}}%
+ \@ifundefined{Fld@export@\Hy@temp}{%
+ \@onelevel@sanitize\Hy@temp
+ \Hy@Error{%
+ Unknown export format `\Hy@temp'.\MessageBreak
+ Known formats are `FDF', `HTML', `XFDF', and `PDF'%
+ }\@ehc
+ }{%
+ \let\Fld@export\Hy@temp
+ }%
+}
+\def\Fld@export{fdf}
+\@namedef{Fld@export@fdf}{0}%
+\@namedef{Fld@export@html}{1}%
+\@namedef{Fld@export@xfdf}{2}%
+\@namedef{Fld@export@pdf}{3}%
+% \end{macrocode}
+%
+% \subsubsection{Set submit flags}
+%
+% \begin{macro}{\HyField@FlagsSubmit}
+% \begin{macrocode}
+\def\HyField@FlagsSubmit{%
+ \bitsetReset{HyField@Submit}%
+ \ifcase\@nameuse{Fld@export@\Fld@export} %
+ % FDF
+ \HyField@UseFlag{Submit}{IncludeNoValueFields}%
+ \HyField@UseFlag{Submit}{SubmitCoordinates}%
+ \HyField@UseFlag{Submit}{IncludeAppendSaves}%
+ \HyField@UseFlag{Submit}{IncludeAnnotations}%
+ \HyField@UseFlag{Submit}{CanonicalFormat}%
+ \HyField@UseFlag{Submit}{ExclNonUserAnnots}%
+ \HyField@UseFlag{Submit}{ExclFKey}%
+ \HyField@UseFlag{Submit}{EmbedForm}%
+ \or % HTML
+ \HyField@SetFlag{Submit}{ExportFormat}%
+ \HyField@UseFlag{Submit}{IncludeNoValueFields}%
+ \HyField@UseFlag{Submit}{GetMethod}%
+ \HyField@UseFlag{Submit}{SubmitCoordinates}%
+ \HyField@UseFlag{Submit}{CanonicalFormat}%
+ \or % XFDF
+ \HyField@SetFlag{Submit}{XFDF}%
+ \HyField@UseFlag{Submit}{IncludeNoValueFields}%
+ \HyField@UseFlag{Submit}{SubmitCoordinates}%
+ \HyField@UseFlag{Submit}{CanonicalFormat}%
+ \or % PDF
+ \HyField@SetFlag{Submit}{SubmitPDF}%
+ \HyField@UseFlag{Submit}{GetMethod}%
+ \fi
+ \HyField@PrintFlags{Submit}{submit button field}%
+ \bitsetIsEmpty{HyField@Submit}{%
+ \let\Fld@submitflags\ltx@empty
+ }{%
+ \edef\Fld@submitflags{/Flags \bitsetGetDec{HyField@Submit}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Set annot flags in fields}
+%
+% \begin{macro}{\HyField@FlagsAnnot}
+% \begin{macrocode}
+\def\HyField@FlagsAnnot#1{%
+ \bitsetReset{HyField@F}%
+ \HyField@UseFlag{F}{Invisible}%
+ \HyField@UseFlag{F}{Hidden}%
+ \HyField@UseFlag{F}{Print}%
+ \HyField@UseFlag{F}{NoZoom}%
+ \HyField@UseFlag{F}{NoRotate}%
+ \HyField@UseFlag{F}{NoView}%
+ \HyField@UseFlag{F}{Locked}%
+ \HyField@UseFlag{F}{ToggleNoView}%
+ \HyField@UseFlag{F}{LockedContents}%
+ \HyField@PrintFlags{F}{#1}%
+ \bitsetIsEmpty{HyField@F}{%
+ \let\Fld@annotflags\ltx@empty
+ }{%
+ \edef\Fld@annotflags{/F \bitsetGetDec{HyField@F}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Pushbutton field}
+%
+% \begin{macro}{\HyField@FlagsPushButton}
+% \begin{macrocode}
+\def\HyField@FlagsPushButton{%
+ \HyField@FlagsAnnot{push button field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@SetFlag{Ff}{Pushbutton}%
+ \HyField@PrintFlags{Ff}{push button field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Check box field}
+%
+% \begin{macro}{\HyField@FlagsCheckBox}
+% \begin{macrocode}
+\def\HyField@FlagsCheckBox{%
+ \HyField@FlagsAnnot{check box field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@PrintFlags{Ff}{check box field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Radio button field}
+%
+% \begin{macro}{\HyField@FlagsRadioButton}
+% \begin{macrocode}
+\def\HyField@FlagsRadioButton{%
+ \HyField@FlagsAnnot{radio button field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@UseFlag{Ff}{NoToggleToOff}%
+ \HyField@SetFlag{Ff}{Radio}%
+ \HyField@UseFlag{Ff}{RadiosInUnison}%
+ \HyField@PrintFlags{Ff}{radio button field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Text fields}
+%
+% \begin{macro}{\HyField@FlagsText}
+% \begin{macrocode}
+\def\HyField@FlagsText{%
+ \HyField@FlagsAnnot{text field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@UseFlag{Ff}{Multiline}%
+ \HyField@UseFlag{Ff}{Password}%
+ \HyField@UseFlag{Ff}{FileSelect}%
+ \HyField@UseFlag{Ff}{DoNotSpellCheck}%
+ \HyField@UseFlag{Ff}{DoNotScroll}%
+ \ifFld@comb
+ \ifcase0\ifFld@multiline
+ \else\ifFld@password
+ \else\ifFld@fileselect
+ \else 1\fi\fi\fi\relax
+ \Hy@Error{%
+ Field option `comb' cannot used together with\MessageBreak
+ `multiline', `password', or `fileselect'%
+ }\@ehc
+ \else
+ \HyField@UseFlag{Ff}{Comb}%
+ \fi
+ \fi
+ \HyField@UseFlag{Ff}{RichText}%
+ \HyField@PrintFlags{Ff}{text field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Choice fields}
+%
+% \begin{macro}{\HyField@FlagsChoice}
+% \begin{macrocode}
+\def\HyField@FlagsChoice{%
+ \HyField@FlagsAnnot{choice field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@UseFlag{Ff}{Combo}%
+ \ifFld@combo
+ \HyField@UseFlag{Ff}{Edit}%
+ \fi
+ \HyField@UseFlag{Ff}{Sort}%
+ \HyField@UseFlag{Ff}{MultiSelect}%
+ \ifFld@combo
+ \ifFld@edit
+ \HyField@UseFlag{Ff}{DoNotSpellCheck}%
+ \fi
+ \fi
+ \HyField@UseFlag{Ff}{CommitOnSelChange}%
+ \HyField@PrintFlags{Ff}{choice field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Choice field}
+%
+% \begin{macro}{\HyField@PDFChoices}
+% |#1|: list of choices in key value syntax, key = exported name,
+% value = displayed text.\\
+% Input: \cs{Fld@default}, \cs{Fld@value}, \cs{ifFld@multiselect}\\
+% Result: \cs{Fld@choices} with entries: |/Opt|, |/DV|, |/V|, |/I|.
+% \begin{macrocode}
+\def\HyField@PDFChoices#1{%
+ \begingroup
+ \global\let\Fld@choices\ltx@empty
+ \let\HyTmp@optlist\ltx@empty
+ \let\HyTmp@optitem\relax
+ \count@=0 %
+ \kv@parse{#1}{%
+ \Hy@pdfstringdef\kv@key\kv@key
+ \ifx\kv@value\relax
+ \ifnum\Hy@pdfversion<3 % implementation note 122, PDF spec 1.7
+ \xdef\Fld@choices{\Fld@choices[(\kv@key)(\kv@key)]}%
+ \else
+ \xdef\Fld@choices{\Fld@choices(\kv@key)}%
+ \fi
+ \else
+ \Hy@pdfstringdef\kv@value\kv@value
+ \xdef\Fld@choices{\Fld@choices[(\kv@value)(\kv@key)]}%
+ \fi
+ \edef\HyTmp@optlist{%
+ \HyTmp@optlist
+ \HyTmp@optitem{\the\count@}{\kv@key}0%
+ }%
+ \advance\count@ by 1 %
+ \@gobbletwo
+ }%
+ \xdef\Fld@choices{/Opt[\Fld@choices]}%
+ \ifFld@multiselect
+ \HyField@@PDFChoices{DV}\Fld@default
+ \HyField@@PDFChoices{V}\Fld@value
+ \else
+ \ifx\Fld@default\relax
+ \else
+ \pdfstringdef\Hy@gtemp\Fld@default
+ \xdef\Fld@choices{\Fld@choices/DV(\Hy@gtemp)}%
+ \fi
+ \ifx\Fld@value\relax
+ \else
+ \pdfstringdef\Hy@gtemp\Fld@value
+ \xdef\Fld@choices{\Fld@choices/V(\Hy@gtemp)}%
+ \fi
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@@PDFChoices}
+% \begin{macrocode}
+\def\HyField@@PDFChoices#1#2{%
+ \ifx#2\relax
+ \else
+ \count@=0 %
+ \def\HyTmp@optitem##1##2##3{%
+ \def\HyTmp@key{##2}%
+ \ifx\HyTmp@key\Hy@gtemp
+ \expandafter\def\expandafter\HyTmp@optlist\expandafter{%
+ \HyTmp@optlist
+ \HyTmp@optitem{##1}{##2}1%
+ }%
+ \let\HyTmp@found=Y%
+ \else
+ \expandafter\def\expandafter\HyTmp@optlist\expandafter{%
+ \HyTmp@optlist
+ \HyTmp@optitem{##1}{##2}##3%
+ }%
+ \fi
+ }%
+ \expandafter\comma@parse\expandafter{#2}{%
+ \pdfstringdef\Hy@gtemp\comma@entry
+ \let\HyTmp@found=N %
+ \expandafter\let\expandafter\HyTmp@optlist\expandafter\@empty
+ \HyTmp@optlist
+ \ifx\HyTmp@found Y%
+ \advance\count@ by 1 %
+ \else
+ \@onelevel@sanitize\comma@entry
+ \PackageWarning{hyperref}{%
+ \string\ChoiceBox: Ignoring value `\comma@entry',%
+ \MessageBreak
+ it cannot be found in the choices%
+ }%
+ \fi
+ \@gobble
+ }%
+ \def\HyTmp@optitem##1##2##3{%
+ \ifnum##3=1 %
+ (##2)%
+ \fi
+ }%
+ \ifcase\count@
+ \or
+ \xdef\Fld@choices{\Fld@choices/#1\HyTmp@optlist}%
+ \else
+ \xdef\Fld@choices{\Fld@choices/#1[\HyTmp@optlist]}%
+ \ifx#1V%
+ \def\HyTmp@optitem##1##2##3{%
+ \ifnum##3=1 %
+ \@firstofone{ ##1}%
+ \fi
+ }%
+ \edef\HyTmp@optlist{\HyTmp@optlist}%
+ \xdef\Fld@choices{%
+ \Fld@choices
+ /I[\expandafter\@firstofone\HyTmp@optlist]%
+ }%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Forms}
+%
+% \begin{macro}{\HyField@SetKeys}
+% \begin{macrocode}
+\def\HyField@SetKeys{%
+ \kvsetkeys{Field}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\newif\ifFld@checked
+\newif\ifFld@disabled
+\Fld@checkedfalse
+\Fld@disabledfalse
+\newcount\Fld@menulength
+\newdimen\Field@Width
+\newdimen\Fld@charsize
+\Fld@charsize=10\p@
+\def\Fld@maxlen{0}
+\def\Fld@align{0}
+\def\Fld@color{0 0 0 rg}
+\def\Fld@bcolor{1 1 1}
+\def\Fld@bordercolor{1 0 0}
+\def\Fld@bordersep{1\p@}
+\def\Fld@borderwidth{1}
+\def\Fld@borderstyle{S}
+\def\Fld@cbsymbol{4}
+\def\Fld@radiosymbol{H}
+\def\Fld@rotation{0}
+\def\Form{\@ifnextchar[{\@Form}{\@Form[]}}
+\def\endForm{\@endForm}
+\newif\ifForm@html
+\Form@htmlfalse
+\def\Form@boolkey#1#2{%
+ \csname Form@#2\ifx\relax#1\relax true\else#1\fi\endcsname
+}
+\define@key{Form}{action}{%
+ \hyper@normalise\Hy@DefFormAction{#1}%
+}
+\def\Hy@DefFormAction{\def\Form@action}
+\def\enc@@html{html}
+\define@key{Form}{encoding}{%
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\enc@@html
+ \Form@htmltrue
+ \def\Fld@export{html}%
+ \else
+ \Hy@Warning{%
+ Form `encoding' key with \MessageBreak
+ unknown value `#1'%
+ }%
+ \Form@htmlfalse
+ \fi
+}
+\define@key{Form}{method}{%
+ \lowercase{\def\Hy@temp{#1}}%
+ \@ifundefined{Form@method@\Hy@temp}{%
+ \@onelevel@sanitize\Hy@temp
+ \Hy@Error{%
+ Unknown method `\Hy@temp'.\MessageBreak
+ Known values are `post' and `get'%
+ }\@ehc
+ }{%
+ \let\Form@method\Hy@temp
+ \ifcase\@nameuse{Form@method@\Hy@temp} %
+ \Fld@getmethodfalse
+ \else
+ \Fld@getmethodtrue
+ \fi
+ }%
+}
+\def\Form@method{}
+\@namedef{Form@method@post}{0}
+\@namedef{Form@method@get}{1}
+% \end{macrocode}
+% \begin{macrocode}
+\newif\ifHyField@NeedAppearances
+\def\HyField@NeedAppearancesfalse{%
+ \global\let\ifHyField@NeedAppearances\iffalse
+}
+\def\HyField@NeedAppearancestrue{%
+ \global\let\ifHyField@NeedAppearances\iftrue
+}
+\HyField@NeedAppearancestrue
+\define@key{Form}{NeedAppearances}[true]{%
+ \edef\Hy@tempa{#1}%
+ \ifx\Hy@tempa\Hy@true
+ \HyField@NeedAppearancestrue
+ \else
+ \ifx\Hy@tempa\Hy@false
+ \HyField@NeedAppearancesfalse
+ \else
+ \Hy@Error{%
+ Unexpected value `\Hy@tempa'\MessageBreak
+ of option `NeedAppearances' instead of\MessageBreak
+ `true' or `false'%
+ }\@ehc
+ \fi
+ \fi
+}
+\def\Field@boolkey#1#2{%
+ \csname Fld@#2\ifx\relax#1\relax true\else#1\fi\endcsname
+}
+\ifHy@texht
+ \newtoks\Field@toks
+ \Field@toks={ }%
+ \def\Field@addtoks#1#2{%
+ \edef\@processme{\Field@toks{\the\Field@toks\space #1="#2"}}%
+ \@processme
+ }%
+\else
+ \def\Hy@WarnHTMLFieldOption#1{%
+ \Hy@Warning{%
+ HTML field option `#1'\MessageBreak
+ is ignored%
+ }%
+ }%
+\fi
+\def\Fld@checkequals#1=#2=#3\\{%
+ \def\@currDisplay{#1}%
+ \ifx\\#2\\%
+ \def\@currValue{#1}%
+ \else
+ \def\@currValue{#2}%
+ \fi
+}
+\define@key{Field}{loc}{%
+ \def\Fld@loc{#1}%
+}
+\define@key{Field}{checked}[true]{%
+ \lowercase{\Field@boolkey{#1}}{checked}%
+}
+\define@key{Field}{disabled}[true]{%
+ \lowercase{\Field@boolkey{#1}}{disabled}%
+}
+\ifHy@texht
+ \define@key{Field}{accesskey}{%
+ \Field@addtoks{accesskey}{#1}%
+ }%
+ \define@key{Field}{tabkey}{%
+ \Field@addtoks{tabkey}{#1}%
+ }%
+\else
+ \define@key{Field}{accesskey}{%
+ \Hy@WarnHTMLFieldOption{accesskey}%
+ }%
+ \define@key{Field}{tabkey}{%
+ \Hy@WarnHTMLFieldOption{tabkey}%
+ }%
+\fi
+\define@key{Field}{name}{%
+ \def\Fld@name{#1}%
+}
+\let\Fld@altname\relax
+\define@key{Field}{altname}{%
+ \def\Fld@altname{#1}%
+}
+\let\Fld@mappingname\relax
+\define@key{Field}{mappingname}{%
+ \def\Fld@mappingname{#1}%
+}
+\define@key{Field}{width}{%
+ \def\Fld@width{#1}%
+ \Field@Width#1\setbox0=\hbox{m}%
+}
+\define@key{Field}{maxlen}{%
+ \def\Fld@maxlen{#1}%
+}
+\define@key{Field}{menulength}{%
+ \Fld@menulength=#1\relax
+}
+\define@key{Field}{height}{%
+ \def\Fld@height{#1}%
+}
+\define@key{Field}{charsize}{%
+ \setlength{\Fld@charsize}{#1}%
+}
+\define@key{Field}{borderwidth}{%
+ \Hy@defaultbp\Fld@borderwidth{#1}%
+}
+\def\Hy@defaultbp#1#2{%
+ \begingroup
+ \afterassignment\Hy@defaultbpAux
+ \dimen@=#2bp\relax{#1}{#2}%
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname dimexpr\endcsname\relax
+ \def\Hy@defaultbpAux#1\relax#2#3{%
+ \ifx!#1!%
+ \endgroup
+ \def#2{#3}%
+ \else
+ \dimen@=.99626\dimen@
+ \edef\x{\endgroup
+ \def\noexpand#2{%
+ \strip@pt\dimen@
+ }%
+ }\x
+ \fi
+ }%
+\else
+ \def\Hy@defaultbpAux#1\relax#2#3{%
+ \ifx!#1!%
+ \endgroup
+ \def#2{#3}%
+ \else
+ \edef\x{\endgroup
+ \def\noexpand#2{%
+ \strip@pt\dimexpr\dimen@*800/803\relax
+ }%
+ }\x
+ \fi
+ }%
+\fi
+\define@key{Field}{borderstyle}{%
+ \let\Hy@temp\Fld@borderstyle
+ \def\Fld@borderstyle{#1}%
+ \Hy@Match\Fld@borderstyle{}{%
+ ^[SDBIU]$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfborderstyle'\MessageBreak
+ for option `pdfborderstyle'. Valid values:\MessageBreak
+ \space\space S (Solid), D (Dashed), B (Beveled),\MessageBreak
+ \space\space I (Inset), U (Underline)\MessageBreak
+ Option setting is ignored%
+ }%
+ \let\Fld@borderstyle\Hy@temp
+ }%
+}
+\define@key{Field}{bordersep}{%
+ \def\Fld@bordersep{#1}%
+}
+\define@key{Field}{default}{%
+ \def\Fld@default{#1}%
+}
+\define@key{Field}{align}{%
+ \def\Fld@align{#1}%
+}
+\define@key{Field}{value}{%
+ \Hy@pdfstringdef\Fld@value{#1}%
+}
+\define@key{Field}{checkboxsymbol}{%
+ \Fld@DingDef\Fld@cbsymbol{#1}%
+}
+\define@key{Field}{radiosymbol}{%
+ \Fld@DingDef\Fld@radiosymbol{#1}%
+}
+\def\Fld@DingDef#1#2{%
+ \let\Fld@temp\ltx@empty
+ \Fld@@DingDef#2\ding{}\@nil
+ \let#1\Fld@temp
+}
+\def\Fld@@DingDef#1\ding#2#3\@nil{%
+ \expandafter\def\expandafter\Fld@temp\expandafter{%
+ \Fld@temp
+ #1%
+ }%
+ \ifx\\#3\\%
+ \expandafter\@gobble
+ \else
+ \begingroup
+ \lccode`0=#2\relax
+ \lowercase{\endgroup
+ \expandafter\def\expandafter\Fld@temp\expandafter{%
+ \Fld@temp
+ 0%
+ }%
+ }%
+ \expandafter\@firstofone
+ \fi
+ {%
+ \Fld@@DingDef#3\@nil
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Field}{rotation}{%
+ \def\Fld@rotation{#1}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@key{Field}{backgroundcolor}{%
+ \HyColor@FieldBColor{#1}\Fld@bcolor{hyperref}{backgroundcolor}%
+}
+\define@key{Field}{bordercolor}{%
+ \HyColor@FieldBColor{#1}\Fld@bordercolor{hyperref}{bordercolor}%
+}
+\define@key{Field}{color}{%
+ \HyColor@FieldColor{#1}\Fld@color{hyperref}{color}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\let\Fld@onclick@code\ltx@empty
+\let\Fld@format@code\ltx@empty
+\let\Fld@validate@code\ltx@empty
+\let\Fld@calculate@code\ltx@empty
+\let\Fld@keystroke@code\ltx@empty
+\let\Fld@onfocus@code\ltx@empty
+\let\Fld@onblur@code\ltx@empty
+\let\Fld@onmousedown@code\ltx@empty
+\let\Fld@onmouseup@code\ltx@empty
+\let\Fld@onenter@code\ltx@empty
+\let\Fld@onexit@code\ltx@empty
+\def\Hy@temp#1{%
+ \expandafter\Hy@@temp\csname Fld@#1@code\endcsname{#1}%
+}
+\def\Hy@@temp#1#2{%
+ \ifHy@pdfa
+ \define@key{Field}{#2}{%
+ \Hy@Error{%
+ PDF/A: Additional action `#2' is prohibited%
+ }\@ehc
+ }%
+ \else
+ \define@key{Field}{#2}{%
+ \def#1{##1}%
+ }%
+ \fi
+}
+\Hy@temp{keystroke}
+\Hy@temp{format}
+\Hy@temp{validate}
+\Hy@temp{calculate}
+\Hy@temp{onfocus}
+\Hy@temp{onblur}
+\Hy@temp{onenter}
+\Hy@temp{onexit}
+% \end{macrocode}
+% \begin{macrocode}
+\let\Fld@calculate@sortkey\ltx@empty
+\define@key{Field}{calculatesortkey}[1]{%
+ \def\Fld@calculate@sortkey{#1}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\ifHy@texht
+ \def\Hy@temp#1{%
+ \define@key{Field}{#1}{%
+ \Field@addtoks{#1}{##1}%
+ }%
+ }%
+\else
+ \def\Hy@temp#1{%
+ \define@key{Field}{#1}{%
+ \Hy@WarnHTMLFieldOption{#1}%
+ }%
+ }%
+\fi
+\Hy@temp{ondblclick}
+\Hy@temp{onmousedown}
+\Hy@temp{onmouseup}
+\Hy@temp{onmouseover}
+\Hy@temp{onmousemove}
+\Hy@temp{onmouseout}
+\Hy@temp{onkeydown}
+\Hy@temp{onkeyup}
+\Hy@temp{onselect}
+\Hy@temp{onchange}
+\Hy@temp{onkeypress}
+\ifHy@texht
+ \define@key{Field}{onclick}{%
+ \Field@addtoks{onclick}{#1}%
+ }%
+\else
+ \ifHy@pdfa
+ \define@key{Field}{onclick}{%
+ \Hy@Error{%
+ PDF/A: Action `onclick' is prohibited%
+ }\@ehc
+ }%
+ \else
+ \define@key{Field}{onclick}{%
+ \def\Fld@onclick@code{#1}%
+ }%
+ \fi
+\fi
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareRobustCommand\TextField{%
+ \@ifnextchar[{\@TextField}{\@TextField[]}%
+}
+\DeclareRobustCommand\ChoiceMenu{%
+ \@ifnextchar[{\@ChoiceMenu}{\@ChoiceMenu[]}%
+}
+\DeclareRobustCommand\CheckBox{%
+ \@ifnextchar[{\@CheckBox}{\@CheckBox[]}%
+}
+\DeclareRobustCommand\PushButton{%
+ \@ifnextchar[{\@PushButton}{\@PushButton[]}%
+}
+\DeclareRobustCommand\Gauge{%
+ \@ifnextchar[{\@Gauge}{\@Gauge[]}%
+}
+\DeclareRobustCommand\Submit{%
+ \@ifnextchar[{\@Submit}{\@Submit[]}%
+}
+\DeclareRobustCommand\Reset{%
+ \@ifnextchar[{\@Reset}{\@Reset[]}%
+}
+\def\LayoutTextField#1#2{% label, field
+ #1 #2%
+}
+\def\LayoutChoiceField#1#2{% label, field
+ #1 #2%
+}
+\def\LayoutCheckField#1#2{% label, field
+ #1 #2%
+}
+\def\LayoutPushButtonField#1{% button
+ #1%
+}
+\def\MakeRadioField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeCheckField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeTextField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeChoiceField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeButtonField#1{%
+ \sbox0{%
+ \hskip\Fld@borderwidth bp#1\hskip\Fld@borderwidth bp%
+ }%
+ \@tempdima\ht0 %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \ht0\@tempdima
+ \@tempdima\dp0 %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \dp0\@tempdima
+ \box0\relax
+}
+\def\DefaultHeightofSubmit{14pt}
+\def\DefaultWidthofSubmit{2cm}
+\def\DefaultHeightofReset{14pt}
+\def\DefaultWidthofReset{2cm}
+\def\DefaultHeightofCheckBox{\baselineskip}
+\def\DefaultWidthofCheckBox{\baselineskip}
+\def\DefaultHeightofChoiceMenu{\baselineskip}
+\def\DefaultWidthofChoiceMenu{\baselineskip}
+\def\DefaultHeightofText{\baselineskip}
+\def\DefaultHeightofTextMultiline{4\baselineskip}
+\def\DefaultWidthofText{3cm}
+\def\DefaultOptionsofSubmit{print,name=Submit,noexport}
+\def\DefaultOptionsofReset{print,name=Reset,noexport}
+\def\DefaultOptionsofPushButton{print}
+\def\DefaultOptionsofCheckBox{print}
+\def\DefaultOptionsofText{print}
+% \end{macrocode}
+% Default options for the types of \cs{ChoiceMenu}.
+% \begin{macrocode}
+\def\DefaultOptionsofListBox{print}
+\def\DefaultOptionsofComboBox{print,edit,sort}
+\def\DefaultOptionsofPopdownBox{print}
+\def\DefaultOptionsofRadio{print,notoggletooff}
+% \end{macrocode}
+%
+% \section{Setup}
+% \begin{macrocode}
+\ifHy@hyperfigures
+ \Hy@Info{Hyper figures ON}%
+\else
+ \Hy@Info{Hyper figures OFF}%
+\fi
+\ifHy@nesting
+ \Hy@Info{Link nesting ON}%
+\else
+ \Hy@Info{Link nesting OFF}%
+\fi
+\ifHy@hyperindex
+ \Hy@Info{Hyper index ON}%
+\else
+ \Hy@Info{Hyper index OFF}%
+\fi
+\ifHy@backref
+ \Hy@Info{backreferencing ON}%
+\else
+ \Hy@Info{backreferencing OFF}%
+\fi
+\ifHy@colorlinks
+ \Hy@Info{Link coloring ON}%
+\else
+ \Hy@Info{Link coloring OFF}%
+\fi
+\ifHy@ocgcolorlinks
+ \Hy@Info{Link coloring with OCG ON}%
+\else
+ \Hy@Info{Link coloring with OCG OFF}%
+\fi
+\ifHy@pdfa
+ \Hy@Info{PDF/A mode ON}%
+\else
+ \Hy@Info{PDF/A mode OFF}%
+\fi
+% \end{macrocode}
+% \section{Low-level utility macros}
+% We need unrestricted access to the |#|, |~| and |"| characters, so make
+% them nice macros.
+% \begin{macrocode}
+\edef\hyper@hash{\string#}
+\edef\hyper@tilde{\string~}
+\edef\hyper@quote{\string"}
+% \end{macrocode}
+% Support \cs{label} before |\begin{document}|.
+% \begin{macrocode}
+\def\@currentHref{Doc-Start}
+\let\Hy@footnote@currentHref\@empty
+% \end{macrocode}
+% We give the start of document a special label; this is used
+% in backreferencing-by-section, to allow for cites before
+% any sectioning commands. Set up PDF info.
+% \begin{macrocode}
+\Hy@AtBeginDocument{%
+ \Hy@pdfstringtrue
+ \PDF@SetupDoc
+ \let\PDF@SetupDoc\@empty
+ \Hy@DisableOption{pdfpagescrop}%
+ \Hy@DisableOption{pdfpagemode}%
+ \Hy@DisableOption{pdfnonfullscreenpagemode}%
+ \Hy@DisableOption{pdfdirection}%
+ \Hy@DisableOption{pdfviewarea}%
+ \Hy@DisableOption{pdfviewclip}%
+ \Hy@DisableOption{pdfprintarea}%
+ \Hy@DisableOption{pdfprintclip}%
+ \Hy@DisableOption{pdfprintscaling}%
+ \Hy@DisableOption{pdfduplex}%
+ \Hy@DisableOption{pdfpicktraybypdfsize}%
+ \Hy@DisableOption{pdfprintpagerange}%
+ \Hy@DisableOption{pdfnumcopies}%
+ \Hy@DisableOption{pdfstartview}%
+ \Hy@DisableOption{pdfstartpage}%
+ \Hy@DisableOption{pdftoolbar}%
+ \Hy@DisableOption{pdfmenubar}%
+ \Hy@DisableOption{pdfwindowui}%
+ \Hy@DisableOption{pdffitwindow}%
+ \Hy@DisableOption{pdfcenterwindow}%
+ \Hy@DisableOption{pdfdisplaydoctitle}%
+ \Hy@DisableOption{pdfpagelayout}%
+ \Hy@DisableOption{pdflang}%
+ \Hy@DisableOption{baseurl}%
+ \ifHy@texht\else\hyper@anchorstart{Doc-Start}\hyper@anchorend\fi
+ \Hy@pdfstringfalse
+}
+% \end{macrocode}
+
+% Ignore star from referencing macros:
+% \begin{macrocode}
+\LetLtxMacro\NoHy@OrgRef\ref
+\DeclareRobustCommand*{\ref}{%
+ \@ifstar\NoHy@OrgRef\NoHy@OrgRef
+}
+\LetLtxMacro\NoHy@OrgPageRef\pageref
+\DeclareRobustCommand*{\pageref}{%
+ \@ifstar\NoHy@OrgPageRef\NoHy@OrgPageRef
+}
+% \end{macrocode}
+%
+% \section{Localized nullifying of package}
+% Sometimes we just don't want the wretched package interfering
+% with us. Define an environment we can put in manually, or include
+% in a style file, which stops the hypertext functions doing anything.
+% This is used, for instance, in the Elsevier classes, to stop
+% |hyperref| playing havoc in the front matter.
+% \begin{macrocode}
+\def\NoHyper{%
+ \def\hyper@link@[##1]##2##3##4{##4\Hy@xspace@end}%
+ \def\hyper@@anchor##1##2{##2\Hy@xspace@end}%
+ \global\let\hyper@livelink\hyper@link
+ \gdef\hyper@link##1##2##3{##3\Hy@xspace@end}%
+ \let\hyper@anchor\ltx@gobble
+ \let\hyper@anchorstart\ltx@gobble
+ \def\hyper@anchorend{\Hy@xspace@end}%
+ \let\hyper@linkstart\ltx@gobbletwo
+ \def\hyper@linkend{\Hy@xspace@end}%
+ \def\hyper@linkurl##1##2{##1\Hy@xspace@end}%
+ \def\hyper@linkfile##1##2##3{##1\Hy@xspace@end}%
+ \let\Hy@backout\@gobble
+}
+\def\stop@hyper{%
+ \def\hyper@link@[##1]##2##3##4{##4\Hy@xspace@end}%
+ \let\Hy@backout\@gobble
+ \let\hyper@@anchor\ltx@gobble
+ \def\hyper@link##1##2##3{##3\Hy@xspace@end}%
+ \let\hyper@anchor\ltx@gobble
+ \let\hyper@anchorstart\ltx@gobble
+ \def\hyper@anchorend{\Hy@xspace@end}%
+ \let\hyper@linkstart\ltx@gobbletwo
+ \def\hyper@linkend{\Hy@xspace@end}%
+ \def\hyper@linkurl##1##2{##1\Hy@xspace@end}%
+ \def\hyper@linkfile##1##2##3{##1\Hy@xspace@end}%
+}
+\def\endNoHyper{%
+ \global\let\hyper@link\hyper@livelink
+}
+%</package>
+% \end{macrocode}
+%
+% \section{Package nohyperref}
+%
+% This package is introduced by Sebastian Rahtz.
+%
+% Package nohyperref is a dummy package that defines
+% some low level and some top-level commands.
+% It is done for jadetex, which calls hyperref
+% low-level commands, but it would also be useful with people using
+% normal hyperref, who really do not want the package loaded at all.
+%
+% Some low-level commands:
+% \begin{macrocode}
+%<*nohyperref>
+\RequirePackage{letltxmacro}[2008/06/13]
+\let\hyper@@anchor\@gobble
+\def\hyper@link#1#2#3{#3}%
+\let\hyper@anchorstart\@gobble
+\let\hyper@anchorend\@empty
+\let\hyper@linkstart\@gobbletwo
+\let\hyper@linkend\@empty
+\def\hyper@linkurl#1#2{#1}%
+\def\hyper@linkfile#1#2#3{#1}%
+\def\hyper@link@[#1]#2#3{}%
+\let\PDF@SetupDoc\@empty
+\let\PDF@FinishDoc\@empty
+\def\nohyperpage#1{#1}
+% \end{macrocode}
+% Some top-level commands:
+% \begin{macrocode}
+\def\Acrobatmenu#1#2{\leavevmode#2}
+\let\pdfstringdefDisableCommands\@gobbletwo
+\let\texorpdfstring\@firstoftwo
+\let\pdfbookmark\@undefined
+\newcommand\pdfbookmark[3][]{}
+\let\phantomsection\@empty
+\let\hypersetup\@gobble
+\let\hyperbaseurl\@gobble
+\newcommand*{\href}[3][]{#3}
+\let\hyperdef\@gobbletwo
+\let\hyperlink\@gobble
+\let\hypertarget\@gobble
+\def\hyperref{%
+ \@ifnextchar[\@gobbleopt{\expandafter\@gobbletwo\@gobble}%
+}
+\long\def\@gobbleopt[#1]{}
+\let\hyperpage\@empty
+% \end{macrocode}
+% Ignore star from referencing macros:
+% \begin{macrocode}
+\LetLtxMacro\NoHy@OrgRef\ref
+\DeclareRobustCommand*{\ref}{%
+ \@ifstar\NoHy@OrgRef\NoHy@OrgRef
+}
+\LetLtxMacro\NoHy@OrgPageRef\pageref
+\DeclareRobustCommand*{\pageref}{%
+ \@ifstar\NoHy@OrgPageRef\NoHy@OrgPageRef
+}
+%</nohyperref>
+% \end{macrocode}
+%
+% \section{The Mangling Of Aux and Toc Files}
+% Some extra tests so that the hyperref package may be removed or added
+% to a document without having to remove .aux and .toc files
+% (this section is by David Carlisle)
+% All the code is delayed to |\begin{document}|
+% \begin{macrocode}
+%<*package>
+\Hy@AtBeginDocument{%
+% \end{macrocode}
+% First the code to deal with removing the hyperref package from
+% a document.
+%
+% Write some stuff into the aux file so if the next run is done
+% without hyperref, then |\contentsline| and |\newlabel| are defined
+% to cope with the extra arguments.
+% \begin{macrocode}
+ \if@filesw
+ \ifHy@typexml
+ \immediate\closeout\@mainaux
+ \immediate\openout\@mainaux\jobname.aux\relax
+ \immediate\write\@auxout{<relaxxml>\relax}%
+ \fi
+ \immediate\write\@auxout{%
+ \string\providecommand\string\HyperFirstAtBeginDocument{%
+ \string\AtBeginDocument}^^J%
+ \string\HyperFirstAtBeginDocument{%
+ \string\ifx\string\hyper@anchor\string\@undefined^^J%
+ \string\global\string\let\string\oldcontentsline\string\contentsline^^J%
+ \string\gdef\string\contentsline%
+ \string#1\string#2\string#3\string#4{%
+ \string\oldcontentsline%
+ {\string#1}{\string#2}{\string#3}}^^J%
+ \string\global\string\let\string\oldnewlabel\string\newlabel^^J%
+ \string\gdef\string\newlabel\string#1\string#2{%
+ \string\newlabelxx{\string#1}\string#2}^^J%
+ \string\gdef\string\newlabelxx%
+ \string#1\string#2\string#3\string#4\string#5\string#6{%
+ \string\oldnewlabel{\string#1}{{\string#2}{\string#3}}}^^J%
+% \end{macrocode}
+%
+% But the new aux file will be read again at the end, with the normal
+% definitions expected, so better put things back as they were.
+% \begin{macrocode}
+ \string\AtEndDocument{%
+ \string\ifx\string\hyper@anchor\string\@undefined^^J%
+ \string\let\string\contentsline\string\oldcontentsline^^J%
+ \string\let\string\newlabel\string\oldnewlabel^^J%
+ \string\fi%
+ }^^J%
+% \end{macrocode}
+%
+% If the document is being run with hyperref put this definition
+% into the aux file, so we can spot it on the next run.
+% \begin{macrocode}
+ \string\fi%
+ }^^J%
+ \string\global\string\let\string\hyper@last\relax^^J%
+ \string\gdef\string\HyperFirstAtBeginDocument\string#1{\string#1}%
+ }%
+ \fi
+ \let\HyperFirstAtBeginDocument\ltx@firstofone
+% \end{macrocode}
+%
+% Now the code to deal with adding the hyperref package to a document
+% with aux and toc written the standard way.
+%
+% If hyperref was used last time, do nothing. If it was not used,
+% or an old version of hyperref was used, don't use that TOC at all
+% but generate a warning. Not ideal, but better than failing
+% with pre-5.0 hyperref TOCs.
+% \begin{macrocode}
+ \ifx\hyper@last\@undefined
+ \def\@starttoc#1{%
+ \begingroup
+ \makeatletter
+ \ltx@ifpackageloaded{parskip}{\parskip\z@}{}%
+ \IfFileExists{\jobname.#1}{%
+ \Hy@WarningNoLine{%
+ old #1 file detected, not used; run LaTeX again%
+ }%
+ }{}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout\csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \endgroup
+ }%
+ \def\newlabel#1#2{\@newl@bel r{#1}{#2{}{}{}{}}}%
+ \fi
+}
+% \end{macrocode}
+%
+% \section{Title strings}
+%
+% If options |pdftitle| and |pdfauthor| are not used,
+% these informations for the pdf information dictionary
+% can be extracted by the \cmd{\title} and \cmd{\author}.
+% \begin{macrocode}
+\ifHy@pdfusetitle
+ \let\HyOrg@title\title
+ \let\HyOrg@author\author
+ \def\title{\@ifnextchar[{\Hy@scanopttitle}{\Hy@scantitle}}%
+ \def\Hy@scanopttitle[#1]{%
+ \gdef\Hy@title{#1}%
+ \HyOrg@title[{#1}]%
+ }%
+ \def\Hy@scantitle#1{%
+ \gdef\Hy@title{#1}%
+ \HyOrg@title{#1}%
+ }%
+ \def\author{\@ifnextchar[{\Hy@scanoptauthor}{\Hy@scanauthor}}%
+ \def\Hy@scanoptauthor[#1]{%
+ \gdef\Hy@author{#1}%
+ \HyOrg@author[{#1}]%
+ }%
+ \def\Hy@scanauthor#1{%
+ \gdef\Hy@author{#1}%
+ \HyOrg@author{#1}%
+ }%
+% \end{macrocode}
+%
+% The case, that \cmd{\title}, or \cmd{\author} are given before
+% hyperref is loaded, is much more complicate, because
+% LaTeX initializes the macros \cmd{\@title} and \cmd{\@author} with
+% LaTeX error and warning messages.
+% \begin{macrocode}
+ \begingroup
+ \def\process@me#1\@nil#2{%
+ \expandafter\let\expandafter\x\csname @#2\endcsname
+ \edef\y{\expandafter\strip@prefix\meaning\x}%
+ \def\c##1#1##2\@nil{%
+ \ifx\\##1\\%
+ \else
+ \expandafter\gdef\csname Hy@#2\expandafter\endcsname
+ \expandafter{\x}%
+ \fi
+ }%
+ \expandafter\c\y\relax#1\@nil
+ }%
+ \expandafter\process@me\string\@latex@\@nil{title}%
+ \expandafter\process@me\string\@latex@\@nil{author}%
+ \endgroup
+\fi
+\Hy@DisableOption{pdfusetitle}
+% \end{macrocode}
+%
+% Macro |\Hy@UseMaketitleInfos| is used in the driver files,
+% before the information entries are used.
+%
+% The newline macro |\newline| or |\\| is much more
+% complicate. In the title a good replacement can be
+% a space, but can be already a space after |\\| in
+% the title string. So this space is removed by
+% scanning for the next non-empty argument.
+%
+% In the macro |\author| the newline can perhaps
+% separate the different authors, so the newline
+% expands here to a comma with space.
+%
+% The possible arguments such as space or the optional
+% argument after the newline macros are not detected.
+%
+% A possible \thanks removes its argument.
+%
+% \begin{macrocode}
+\def\Hy@UseMaketitleString#1{%
+ \ltx@IfUndefined{Hy@#1}{}{%
+ \begingroup
+ \let\Hy@saved@hook\pdfstringdefPreHook
+ \pdfstringdefDisableCommands{%
+ \expandafter\let\expandafter\\\csname Hy@newline@#1\endcsname
+ \let\newline\\%
+ \def\and{; }%
+ \let\thanks\@gobble%
+ }%
+ \expandafter\ifx\csname @pdf#1\endcsname\@empty
+ \expandafter\pdfstringdef\csname @pdf#1\endcsname{%
+ \csname Hy@#1\endcsname\@empty
+ }%
+ \fi
+ \global\let\pdfstringdefPreHook\Hy@saved@hook
+ \endgroup
+ }%
+}
+\def\Hy@newline@title#1{ #1}
+\def\Hy@newline@author#1{, #1}
+\def\Hy@UseMaketitleInfos{%
+ \Hy@UseMaketitleString{title}%
+ \Hy@UseMaketitleString{author}%
+}
+% \end{macrocode}
+%
+% \section{Page numbers}
+% This stuff is done by Heiko Oberdiek.
+%
+% \section{Every page}
+%
+% \begin{macrocode}
+\RequirePackage{atbegshi}[2007/09/09]
+\let\Hy@EveryPageHook\ltx@empty
+\let\Hy@EveryPageBoxHook\ltx@empty
+\let\Hy@FirstPageHook\ltx@empty
+\AtBeginShipout{%
+ \Hy@EveryPageHook
+ \ifx\Hy@EveryPageBoxHook\ltx@empty
+ \else
+ \setbox\AtBeginShipoutBox=\vbox{%
+ \offinterlineskip
+ \Hy@EveryPageBoxHook
+ \box\AtBeginShipoutBox
+ }%
+ \fi
+}
+\ltx@iffileloaded{hpdftex.def}{%
+ \AtBeginShipout{%
+ \Hy@FirstPageHook
+ \global\let\Hy@FirstPageHook\ltx@empty
+ }%
+}{%
+ \AtBeginShipoutFirst{%
+ \Hy@FirstPageHook
+ }%
+}
+\g@addto@macro\Hy@FirstPageHook{%
+ \PDF@FinishDoc
+ \global\let\PDF@FinishDoc\ltx@empty
+}
+% \end{macrocode}
+%
+% \subsection{PDF /PageLabels}
+% Internal macros of this module are marked with |\HyPL@|.
+%
+% \begin{macrocode}
+\ifHy@pdfpagelabels
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname thepage\endcsname\relax
+ \Hy@pdfpagelabelsfalse
+ \Hy@WarningNoLine{%
+ Option `pdfpagelabels' is turned off\MessageBreak
+ because \string\thepage\space is undefined%
+ }%
+ \csname fi\endcsname
+ \csname iffalse\expandafter\endcsname
+ \fi
+% \end{macrocode}
+%
+% \begin{macro}{\thispdfpagelabel}
+% The command \cmd{\thispdfpagelabel} allows to label a special
+% page without the redefinition of \cmd{\thepage} for the page.
+% \begin{macrocode}
+ \def\thispdfpagelabel#1{%
+ \gdef\HyPL@thisLabel{#1}%
+ }%
+ \global\let\HyPL@thisLabel\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPL@Labels}
+% The page labels are collected in \cmd{\HyPL@Labels} and
+% set at the end of the document.
+% \begin{macrocode}
+ \let\HyPL@Labels\ltx@empty
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@abspage}
+% We have to know the the absolute page number and introduce
+% a new counter for that.
+% \begin{macrocode}
+ \newcount\Hy@abspage
+ \Hy@abspage=0 %
+% \end{macrocode}
+% \end{macro}
+% For comparisons with the values of the previous page, some
+% variables are needed:
+% \begin{macrocode}
+ \def\HyPL@LastType{init}%
+ \def\HyPL@LastNumber{0}%
+ \let\HyPL@LastPrefix\ltx@empty
+% \end{macrocode}
+% Definitions for the PDF names of the \LaTeX{} pendents.
+% \begin{macrocode}
+ \def\HyPL@arabic{D}%
+ \def\HyPL@Roman{R}%
+ \def\HyPL@roman{r}%
+ \def\HyPL@Alph{A}%
+ \def\HyPL@alph{a}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \let\HyPL@SlidesSetPage\ltx@empty
+ \ltx@ifclassloaded{slides}{%
+ \def\HyPL@SlidesSetPage{%
+ \advance\c@page\ltx@one
+ \ifnum\value{page}>\ltx@one
+ \protected@edef\HyPL@SlidesOptionalPage{%
+ \Hy@SlidesFormatOptionalPage{\thepage}%
+ }%
+ \else
+ \let\HyPL@SlidesOptionalPage\ltx@empty
+ \fi
+ \advance\c@page-\ltx@one
+ \def\HyPL@page{%
+ \csname the\Hy@SlidesPage\endcsname
+ \HyPL@SlidesOptionalPage
+ }%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% \begin{macro}{\HyPL@EveryPage}
+% If a page is shipout and the page number is known,
+% \cmd{\HyPL@EveryPage} has to be called. It stores the
+% current page label.
+% \begin{macrocode}
+ \def\HyPL@EveryPage{%
+ \begingroup
+ \ifx\HyPL@thisLabel\relax
+ \let\HyPL@page\thepage
+ \HyPL@SlidesSetPage
+ \else
+ \let\HyPL@page\HyPL@thisLabel
+ \global\let\HyPL@thisLabel\relax
+ \fi
+ \let\HyPL@Type\relax
+ \ifnum\c@page>0 %
+ \ifx\HyPL@SlidesSetPage\ltx@empty
+ \expandafter\HyPL@CheckThePage\HyPL@page\@nil
+ \fi
+ \fi
+ \let\Hy@temp Y%
+ \ifx\HyPL@Type\HyPL@LastType
+ \else
+ \let\Hy@temp N%
+ \fi
+ \ifx\HyPL@Type\relax
+ \pdfstringdef\HyPL@Prefix{\HyPL@page}%
+ \else
+ \pdfstringdef\HyPL@Prefix\HyPL@Prefix
+ \fi
+ \ifx\HyPL@Prefix\HyPL@LastPrefix
+ \else
+ \let\Hy@temp N%
+ \fi
+ \if Y\Hy@temp
+ \advance\c@page by -1 %
+ \ifnum\HyPL@LastNumber=\the\c@page\relax
+ \else
+ \let\Hy@temp N%
+ \fi
+ \Hy@StepCount\c@page
+ \fi
+ \if N\Hy@temp
+ \ifx\HyPL@Type\relax
+ \HyPL@StorePageLabel{/P(\HyPL@Prefix)}%
+ \else
+ \HyPL@StorePageLabel{%
+ \ifx\HyPL@Prefix\@empty
+ \else
+ /P(\HyPL@Prefix)%
+ \fi
+ /S/\csname HyPL\HyPL@Type\endcsname
+ \ifnum\the\c@page=1 %
+ \else
+ \space/St \the\c@page
+ \fi
+ }%
+ \fi
+ \fi
+ \xdef\HyPL@LastNumber{\the\c@page}%
+ \global\let\HyPL@LastType\HyPL@Type
+ \global\let\HyPL@LastPrefix\HyPL@Prefix
+ \endgroup
+ \Hy@GlobalStepCount\Hy@abspage
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPL@CheckThePage}
+% Macro \cmd{\HyPL@CheckThePage} calls \cmd{\HyPL@@CheckThePage}
+% that does the job.
+% \begin{macrocode}
+ \def\HyPL@CheckThePage#1\@nil{%
+ \HyPL@@CheckThePage{#1}#1\csname\endcsname\c@page\@nil
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyPL@@CheckThePage}
+% The first check is, is \cmd{\thepage} is defined
+% such as in \LaTeX, e.\,g.: |\csname @arabic\endcsname\c@page|.
+% In the current implemenation the check fails, if there is
+% another \cmd{\csname} before.
+%
+% The second check tries to detect |\arabic{page}| at the
+% end of the definition text of \cmd{\thepage}.
+% \begin{macrocode}
+ \def\HyPL@@CheckThePage#1#2\csname#3\endcsname\c@page#4\@nil{%
+ \def\Hy@tempa{#4}%
+ \def\Hy@tempb{\csname\endcsname\c@page}%
+ \ifx\Hy@tempa\Hy@tempb
+ \expandafter\ifx\csname HyPL#3\endcsname\relax
+ \else
+ \def\HyPL@Type{#3}%
+ \def\HyPL@Prefix{#2}%
+ \fi
+ \else
+ \begingroup
+ \let\Hy@next\endgroup
+ \let\HyPL@found\@undefined
+ \def\arabic{\HyPL@Format{arabic}}%
+ \def\Roman{\HyPL@Format{Roman}}%
+ \def\roman{\HyPL@Format{roman}}%
+ \def\Alph{\HyPL@Format{Alph}}%
+ \def\alph{\HyPL@Format{alph}}%
+ \protected@edef\Hy@temp{#1}%
+ \ifx\HyPL@found\relax
+ \toks@\expandafter{\Hy@temp}%
+ \edef\Hy@next{\endgroup
+ \noexpand\HyPL@@@CheckThePage\the\toks@
+ \noexpand\HyPL@found\relax\noexpand\@nil
+ }%
+ \fi
+ \Hy@next
+ \fi
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPL@Format}
+% The help macro \cmd{\HyPL@Format} is executed while
+% a \cmd{\protected@edef} in the second check
+% method of \cmd{\HyPL@@CheckPage}.
+% The first occurences of, for example, |\arabic{page}| is
+% marked by \cmd{\HyPL@found} that is also defined by
+% \cmd{\csname}.
+% \begin{macrocode}
+ \def\HyPL@Format#1#2{%
+ \ifx\HyPL@found\@undefined
+ \expandafter\ifx\csname c@#2\endcsname\c@page
+ \expandafter\noexpand\csname HyPL@found\endcsname{#1}%
+ \else
+ \expandafter\noexpand\csname#1\endcsname{#2}%
+ \fi
+ \else
+ \expandafter\noexpand\csname#1\endcsname{#2}%
+ \fi
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPL@@@CheckThePage}
+% If the second check method is successful,
+% \cmd{\HyPL@@@CheckThePage} scans the result of
+% \cmd{\HyPL@Format} and stores the found values.
+% \begin{macrocode}
+ \def\HyPL@@@CheckThePage#1\HyPL@found#2#3\@nil{%
+ \def\Hy@tempa{#3}%
+ \def\Hy@tempb{\HyPL@found\relax}%
+ \ifx\Hy@tempa\Hy@tempb
+ \def\HyPL@Type{@#2}%
+ \def\HyPL@Prefix{#1}%
+ \fi
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPL@StorePageLabel}
+% Dummy for drivers that does not support /PageLabel.
+% \begin{macrocode}
+ \providecommand*{\HyPL@StorePageLabel}[1]{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPL@Useless}
+% The |/PageLabels| entry does not make sense,
+% if the absolute page numbers and the page labels are the
+% same. Then \cmd{\HyPL@Labels} has the meaning of \cmd{\HyPL@Useless}.
+% \begin{macrocode}
+ \def\HyPL@Useless{0<</S/D>>}%
+ \@onelevel@sanitize\HyPL@Useless
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyPL@SetPageLabels}
+% The page labels are written to the PDF cataloge.
+% The command \cmd{\Hy@PutCatalog} is defined in the
+% driver files.
+% \begin{macrocode}
+ \def\HyPL@SetPageLabels{%
+ \@onelevel@sanitize\HyPL@Labels
+ \ifx\HyPL@Labels\@empty
+ \else
+ \ifx\HyPL@Labels\HyPL@Useless
+ \else
+ \Hy@PutCatalog{/PageLabels<</Nums[\HyPL@Labels]>>}%
+ \fi
+ \fi
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+ \g@addto@macro\Hy@EveryPageHook{\HyPL@EveryPage}%
+\fi
+% \end{macrocode}
+%
+% Option `pdfpagelabels' has been used and is now disabled.
+% \begin{macrocode}
+\Hy@DisableOption{pdfpagelabels}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \subsubsection{pdfTeX and VTeX}
+%
+% Because of pdfTeX's \cmd{\pdfcatalog} command
+% the /PageLabels entry can set at end of document
+% in the first run.
+%
+% \begin{macro}{\Hy@PutCatalog}
+% \begin{macrocode}
+%<*pdftex>
+\pdf@ifdraftmode{%
+ \let\Hy@PutCatalog\ltx@gobble
+}{%
+ \let\Hy@PutCatalog\pdfcatalog
+}
+%</pdftex>
+% \end{macrocode}
+% The code for VTeX is more complicate, because it does
+% not allow the direct access to the /Catalog object.
+% The command scans its argument and looks
+% for a /PageLabels entry.
+%
+% VTeX 6.59g is the first version, that
+% implements \verb|\special{!pdfpagelabels...}|.
+% For this version \cmd{\VTeXversion} reports 660.
+% \begin{macrocode}
+%<*vtex>
+\providecommand*{\XR@ext}{pdf}
+\edef\Hy@VTeXversion{%
+ \ifx\VTeXversion\@undefined
+ \z@
+ \else
+ \ifx\VTeXversion\relax
+ \z@
+ \else
+ \VTeXversion
+ \fi
+ \fi
+}
+\begingroup
+ \ifnum\Hy@VTeXversion<660 %
+ \gdef\Hy@PutCatalog#1{%
+ \Hy@WarningNoLine{%
+ VTeX 6.59g or above required for pdfpagelabels%
+ }%
+ }%
+ \else
+ \gdef\Hy@PutCatalog#1{%
+ \Hy@vt@PutCatalog#1/PageLabels<<>>\@nil
+ }%
+ \gdef\Hy@vt@PutCatalog#1/PageLabels<<#2>>#3\@nil{%
+ \ifx\\#2\\%
+ \else
+ \immediate\special{!pdfpagelabels #2}%
+ \fi
+ }%
+ \fi
+\endgroup
+%</vtex>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%<*pdftex|vtex>
+% \end{macrocode}
+%
+% \begin{macro}{\HyPL@StorePageLabel}
+% This macro adds the entry |#1| to \cmd{\HyPL@Labels}.
+% \begin{macrocode}
+\ifHy@pdfpagelabels
+ \def\HyPL@StorePageLabel#1{%
+ \toks@\expandafter{\HyPL@Labels}%
+ \xdef\HyPL@Labels{%
+ \the\toks@
+ \the\Hy@abspage<<#1>>%
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% Package \textsf{atveryend} is used to get behind the
+% final \cs{clearpage} and to avoid a \cs{clearpage}
+% in \cs{AtEndDocument}.
+% Then the PDF catalog entry for |\PageLabels| is set.
+% \begin{macrocode}
+ \RequirePackage{atveryend}[2009/12/07]%
+ \AtVeryEndDocument{%
+ \HyPL@SetPageLabels
+ }%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fi
+%</pdftex|vtex>
+% \end{macrocode}
+%
+% \subsubsection{xetex}
+%
+% \begin{macrocode}
+%<*xetex>
+\HyPsd@LoadUnicode
+\Hy@unicodetrue
+\ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@unicode
+\else
+ \let\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
+\fi
+\HyPsd@LoadStringEnc
+\define@key{Hyp}{unicode}[true]{%
+ \Hy@boolkey{unicode}{#1}%
+ \ifHy@unicode
+ \else
+ \Hy@Warning{%
+ XeTeX driver only supports `unicode=true'. Ignoring\MessageBreak
+ option setting `unicode=false'%
+ }%
+ \Hy@unicodetrue
+ \fi
+}
+\define@key{Hyp}{pdfencoding}{%
+ \edef\HyPsd@temp{#1}%
+ \ifx\HyPsd@temp\HyPsd@pdfencoding@unicode
+ \let\HyPsd@pdfencoding\HyPsd@temp
+ \else
+ \ifx\HyPsd@temp\HyPsd@pdfencoding@auto
+ \let\HyPsd@pdfencoding\HyPsd@temp
+ \else
+ \Hy@Warning{%
+ XeTeX driver only supports\MessageBreak
+ `pdfencoding=unicode|auto'. Ignoring option\MessageBreak
+ setting `pdfencoding=\HyPsd@temp'%
+ }%
+ \fi
+ \fi
+}
+\let\HyXeTeX@CheckUnicode\relax
+% \end{macrocode}
+% Since 2016 (x)dvipdfmx has a special to control the spacing of annotation borders.
+% So let's make use of it:
+% \begin{macrocode}
+\def\setpdflinkmargin#1{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \special{dvipdfmx:config g \strip@pt\dimen@}%
+ \endgroup}
+%</xetex>
+% \end{macrocode}
+%
+% \subsubsection{pdfmarkbase, dvipdfm, xetex}
+%
+% \begin{macrocode}
+%<*pdfmarkbase>
+\begingroup
+ \@ifundefined{headerps@out}{}{%
+ \toks@\expandafter{\Hy@FirstPageHook}%
+ \xdef\Hy@FirstPageHook{%
+ \noexpand\headerps@out{%
+ systemdict /pdfmark known%
+ {%
+ userdict /?pdfmark systemdict /exec get put%
+ }{%
+ userdict /?pdfmark systemdict /pop get put %
+ userdict /pdfmark systemdict /cleartomark get put%
+ }%
+ ifelse%
+ }%
+ \the\toks@
+ }%
+ }%
+\endgroup
+%</pdfmarkbase>
+% \end{macrocode}
+%
+% \begin{macro}{\Hy@PutCatalog}
+% \begin{macrocode}
+%<dvipdfm|xetex>\def\Hy@PutCatalog#1{\@pdfm@mark{docview <<#1>>}}
+%<*pdfmarkbase>
+\def\Hy@PutCatalog#1{%
+ \pdfmark{pdfmark=/PUT,Raw={\string{Catalog\string} <<#1>>}}%
+}
+%</pdfmarkbase>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%<*pdfmarkbase|dvipdfm|xetex>
+\ifHy@pdfpagelabels
+% \end{macrocode}
+%
+% \begin{macro}{\HyPL@StorePageLabel}
+% This macro writes a string to the .aux file.
+% \begin{macrocode}
+ \def\HyPL@StorePageLabel#1{%
+ \if@filesw
+ \begingroup
+ \edef\Hy@tempa{\the\Hy@abspage<<#1>>}%
+ \immediate\write\@mainaux{%
+ \string\HyPL@Entry{\Hy@tempa}%
+ }%
+ \endgroup
+ \fi
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% Write a dummy definition of \cmd{\HyPL@Entry} for the case,
+% that the next run is done without hyperref.
+% A marker for the rerun warning is set and the /PageLabels
+% is written.
+% \begin{macrocode}
+ \Hy@AtBeginDocument{%
+ \if@filesw
+ \immediate\write\@mainaux{%
+ \string\providecommand\string*\string\HyPL@Entry[1]{}%
+ }%
+ \fi
+ \ifx\HyPL@Labels\@empty
+ \Hy@WarningNoLine{Rerun to get /PageLabels entry}%
+ \else
+ \HyPL@SetPageLabels
+ \fi
+ \let\HyPL@Entry\@gobble
+ }%
+% \end{macrocode}
+%
+% \begin{macro}{\HyPL@Entry}
+% \begin{macrocode}
+ \def\HyPL@Entry#1{%
+ \expandafter\gdef\expandafter\HyPL@Labels\expandafter{%
+ \HyPL@Labels
+ #1%
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+%</pdfmarkbase|dvipdfm|xetex>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifx\MaybeStopEarly\relax
+\else
+ \Hy@stoppedearlytrue
+ \expandafter\MaybeStopEarly
+\fi
+\Hy@stoppedearlyfalse
+% \end{macrocode}
+%
+% \section{Automated \LaTeX\ hypertext cross-references}\label{latexxref}
+% Anything which can be referenced advances some counter; we overload
+% this to put in a hypertext starting point (with no visible anchor),
+% and make a note of that for later use in |\label|.
+% This will fail badly if |\theH<name>|
+% does not expand to a sensible reference. This means that classes
+% or package which introduce new elements need to define
+% an equivalent |\theH<name>| for every |\the<name>|. We do make
+% a trap to make |\theH<name>| be the same as |\arabic{<name>}|,
+% if |\theH<name>| is not defined, but this is not necessarily a good idea.
+% Alternatively, the `naturalnames' option uses whatever \LaTeX\
+% provides, which may be useable. But then its up to you to make
+% sure these are legal PDF and HTML names. The `hypertexnames=false' option
+% just makes up arbitrary names.
+%
+% All the shenanigans is to make sure section numbers etc
+% are always arabic, separated by dots. Who knows how people
+% will set up |\@currentlabel|? If they put spaces in, or brackets
+% (quite legal) then the hypertext processors will get upset.
+%
+% But this is flaky, and open to abuse. Styles like
+% |subeqn| will mess it up, for starters. Appendices are an issue, too.
+% We just hope to cover most situations. We can at least cope
+% with the standard sectioning structure, allowing for |\part|
+% and |\chapter|.
+%
+% Start with a fallback for equations
+% \begin{macrocode}
+\def\Hy@CounterExists#1{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname c@#1\endcsname\relax
+ \expandafter\@gobble
+ \else
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname the#1\endcsname\relax
+ \expandafter\expandafter\expandafter\@gobble
+ \else
+ \expandafter\expandafter\expandafter\@firstofone
+ \fi
+ \fi
+}
+\Hy@CounterExists{section}{%
+ \providecommand\theHequation{\theHsection.\arabic{equation}}%
+}
+\Hy@CounterExists{part}{%
+ \providecommand\theHpart{\arabic{part}}%
+}
+\ltx@IfUndefined{thechapter}{%
+ \providecommand\theHsection {\arabic{section}}%
+ \providecommand\theHfigure {\arabic{figure}}%
+ \providecommand\theHtable {\arabic{table}}%
+}{%
+ \providecommand\theHchapter {\arabic{chapter}}%
+ \providecommand\theHfigure {\theHchapter.\arabic{figure}}%
+ \providecommand\theHtable {\theHchapter.\arabic{table}}%
+ \providecommand\theHsection {\theHchapter.\arabic{section}}%
+}
+\providecommand\theHsubsection {\theHsection.\arabic{subsection}}
+\providecommand\theHsubsubsection{\theHsubsection.\arabic{subsubsection}}
+\providecommand\theHparagraph {\theHsubsubsection.\arabic{paragraph}}
+\providecommand\theHsubparagraph {\theHparagraph.\arabic{subparagraph}}
+\providecommand\theHtheorem {\theHsection.\arabic{theorem}}
+\providecommand\theHthm {\theHsection.\arabic{thm}}
+% \end{macrocode}
+% Thanks to Greta Meyer (gbd@pop.cwru.edu) for making me realize
+% that enumeration starts at 0 for every list! But |\item|
+% occurs inside |\trivlist|, so check if its a real |\item| before
+% incrementing counters.
+% \begin{macrocode}
+\let\H@item\item
+\newcounter{Item}
+\def\theHItem{\arabic{Item}}
+\def\item{%
+ \@hyper@itemfalse
+ \if@nmbrlist\@hyper@itemtrue\fi
+ \H@item
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\providecommand\theHenumi {\theHItem}
+\providecommand\theHenumii {\theHItem}
+\providecommand\theHenumiii {\theHItem}
+\providecommand\theHenumiv {\theHItem}
+\providecommand\theHHfootnote {\arabic{Hfootnote}}
+\providecommand\theHmpfootnote{\arabic{mpfootnote}}
+\@ifundefined{theHHmpfootnote}{%
+ \let\theHHmpfootnote\theHHfootnote
+}{}
+% \end{macrocode}
+% Tanmoy asked for this default handling of undefined |\theH<name>|
+% situations. It really isn't clear what would be ideal, whether to
+% turn off hyperizing of unknown elements, to pick up the textual
+% definition of the counter, or to default it to something like
+% |\arabic{name}|. We take the latter course, slightly worriedly.
+% \begin{macrocode}
+\let\H@refstepcounter\refstepcounter
+\edef\name@of@eq{equation}%
+\edef\name@of@slide{slide}%
+% \end{macrocode}
+% We do not want the handler for |\refstepcounter| to cut in
+% during the processing of |\item| (we handle that separately),
+% so we provide a bypass conditional.
+% \begin{macrocode}
+\newif\if@hyper@item
+\newif\if@skiphyperref
+\@hyper@itemfalse
+\@skiphyperreffalse
+\def\refstepcounter#1{%
+ \ifHy@pdfstring
+ \else
+ \H@refstepcounter{#1}%
+ \edef\This@name{#1}%
+ \ifx\This@name\name@of@slide
+ \else
+ \if@skiphyperref
+ \else
+ \if@hyper@item
+ \stepcounter{Item}%
+ \hyper@refstepcounter{Item}%
+ \@hyper@itemfalse
+ \else
+ \hyper@refstepcounter{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\let\Hy@saved@refstepcounter\refstepcounter
+% \end{macrocode}
+% AMS\LaTeX\ processes all equations twice; we want to make sure
+% that the hyper stuff is not executed twice, so we use the AMS
+% |\ifmeasuring@|, initialized if AMS math is not used.
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}{}{\newif\ifmeasuring@\measuring@false}
+% \end{macrocode}
+%
+% \begin{macro}{\hyper@refstepcounter}
+% \begin{macrocode}
+\def\hyper@refstepcounter#1{%
+ \edef\This@name{#1}%
+ \ifx\This@name\name@of@eq
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \fi
+ \HyCnt@ProvideTheHCounter{#1}%
+ \hyper@makecurrent{#1}%
+ \ifmeasuring@
+ \else
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@ProvideTheHCounter}
+% \cs{theH<counter>} is not set for counters that
+% are defined before `hyperref' is loaded.
+% In \cs{cl@@ckpt}, the clear counter list of
+% the artificial counter |@ckpt|, \LaTeX\ remembers
+% the defined counters (needed for \cs{include}). We check
+% the clear counter lists, whether our counter is present.
+% If we found it, then we add the parent counter value
+% to \cs{theH<counter>}. The \cs{@elt} list is
+% used in sanitized form for the comparison, because the list
+% might contain other stuff than \cs{@elt}s. Also it simplifies
+% the implementation, because \LaTeX', substring search
+% \cs{in@} can be used.
+% \begin{macrocode}
+\def\HyCnt@ProvideTheHCounter#1{%
+ \@ifundefined{theH#1}{%
+ \expandafter\def\csname theH#1\endcsname{}%
+ \def\Hy@temp{\@elt{#1}}%
+ \ltx@onelevel@sanitize\Hy@temp
+ \let\HyOrg@elt\@elt
+ \edef\@elt{%
+ \noexpand\HyCnt@LookForParentCounter
+ \expandafter\noexpand\csname theH#1\endcsname
+ }%
+ \cl@@ckpt
+ \let\@elt\HyOrg@elt
+ \expandafter
+ \ltx@LocalAppendToMacro\csname theH#1\expandafter\endcsname
+ \expandafter{%
+ \expandafter\@arabic\csname c@#1\endcsname
+ }%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@LookForParentCounter}
+% \begin{macrocode}
+\def\HyCnt@LookForParentCounter#1#2{%
+ \expandafter\let\expandafter\Hy@temp@A\csname cl@#2\endcsname
+ \ltx@IfUndefined{cl@#2}{%
+ }{%
+ \ltx@onelevel@sanitize\Hy@temp@A
+ \edef\Hy@temp@A{%
+ \noexpand\in@{\Hy@temp}{\Hy@temp@A}%
+ }\Hy@temp@A
+ \ifin@
+ \ltx@IfUndefined{theH#2}{%
+ \expandafter\ltx@LocalAppendToMacro\expandafter#1%
+ \expandafter{%
+ \expandafter\@arabic\csname c@#2\endcsname.%
+ }%
+ }{%
+ \expandafter\ltx@LocalAppendToMacro\expandafter#1%
+ \expandafter{%
+ \csname theH#2\endcsname.%
+ }%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% After \cmd{\appendix} ``chapter'' (or ``section'' for classes
+% without chapter) should be replaced
+% by ``appendix'' to get \cmd{\autoref} work.
+% Macro \cmd{\Hy@chapapp} contains the current valid
+% name like \cmd{\@chapapp}, which cannot be used,
+% because this string depends on the current language.
+%
+% The ``french'' package defines counter \cmd{\thechapter}
+% by \cmd{\newcounter{chapter}}, if \cmd{\@ifundefined{chapter}}.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname chapter\endcsname\relax
+ \def\Hy@chapterstring{section}%
+\else
+ \def\Hy@chapterstring{chapter}%
+\fi
+\def\Hy@appendixstring{appendix}
+\def\Hy@chapapp{\Hy@chapterstring}
+\ltx@IfUndefined{appendix}{%
+}{%
+ \let\HyOrg@appendix\appendix
+ \def\Hy@AlphNoErr#1{%
+ \ifnum\value{#1}>26 %
+ Alph\number\value{#1}%
+ \else
+ \ifnum\value{#1}<1 %
+ Alph\number\value{#1}%
+ \else
+ \Alph{#1}%
+ \fi
+ \fi
+ }%
+ \def\appendix{%
+ \ltx@IfUndefined{chapter}{%
+ \gdef\theHsection{\Hy@AlphNoErr{section}}%
+ }{%
+ \gdef\theHchapter{\Hy@AlphNoErr{chapter}}%
+ }%
+ \xdef\Hy@chapapp{\Hy@appendixstring}%
+ \HyOrg@appendix
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\Hy@Test@alph}
+% \begin{macrocode}
+\def\Hy@Test@alph#1{%
+ \ifcase#1\or
+ a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or
+ u\or v\or w\or x\or y\or z%
+ \else
+ \@ctrerr
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@Test@Alph}
+% \begin{macrocode}
+\def\Hy@Test@Alph#1{%
+ \ifcase#1\or
+ A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or
+ U\or V\or W\or X\or Y\or Z%
+ \else
+ \@ctrerr
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hyper@makecurrent}
+% Because of Babel mucking around, nullify |\textlatin| when making names.
+% And |\@number| because of babel's lrbabel.def.
+% \begin{macrocode}
+\def\hyper@makecurrent#1{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\Hy@param{#1}%
+ \ifx\Hy@param\Hy@chapterstring
+ \let\Hy@param\Hy@chapapp
+ \fi
+ \ifHy@hypertexnames
+ \let\@number\@firstofone
+ \def\@fnsymbol##1{fnsymbol\number##1}%
+ \def\@arabic##1{\number##1}%
+ \ifx\@alph\Hy@Test@alph
+ \else
+ \def\@alph{alph\number}%
+ \fi
+ \ifx\@Alph\Hy@Test@Alph
+ \else
+ \def\@Alph{Alph\number}%
+ \fi
+ \ifHy@naturalnames
+ \let\textlatin\@firstofone
+ \xdef\HyperGlobalCurrentHref{\csname the#1\endcsname}%
+ \else
+ \xdef\HyperGlobalCurrentHref{%
+ \csname
+ the%
+ \expandafter\ifx\csname theH#1\endcsname\relax\else H\fi
+ #1%
+ \endcsname
+ }%
+ \fi
+ \xdef\HyperGlobalCurrentHref{%
+ \Hy@param.\expandafter\strip@prefix\meaning\HyperGlobalCurrentHref
+ }%
+ \else
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \xdef\HyperGlobalCurrentHref{\Hy@param.\the\Hy@linkcounter}%
+ \fi
+ \endgroup
+ \let\HyperLocalCurrentHref\HyperGlobalCurrentHref
+ \ifHy@localanchorname
+ \let\@currentHref\HyperLocalCurrentHref
+ \else
+ \global\let\@currentHref\HyperGlobalCurrentHref
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@MakeCurrentHref}
+% \begin{macrocode}
+\def\Hy@MakeCurrentHref#1{%
+ \edef\HyperLocalCurrentHref{#1}%
+ \@onelevel@sanitize\HyperLocalCurrentHref
+ \global\let\HyperGlobalCurrentHref\HyperLocalCurrentHref
+ \let\HyperLocalCurrentHref\HyperGlobalCurrentHref
+ \ifHy@localanchorname
+ \let\@currentHref\HyperLocalCurrentHref
+ \else
+ \global\let\@currentHref\HyperGlobalCurrentHref
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@MakeCurrentHrefAuto}
+% \begin{macrocode}
+\def\Hy@MakeCurrentHrefAuto#1{%
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \Hy@MakeCurrentHref{#1.\the\Hy@linkcounter}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@currentHlabel}
+% \cs{@currrentHlabel} is only defined for compatibility with
+% package `hypdvips'.
+% \begin{macrocode}
+\def\@currentHlabel{\@currentHref}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\@ifpackageloaded{fancyvrb}{%
+ \@ifpackagelater{fancyvrb}{1998/05/20}{}{%
+ \def\FV@StepLineNo{%
+ \FV@SetLineNo
+ \def\FV@StepLineNo{\H@refstepcounter{FancyVerbLine}}%
+ \FV@StepLineNo
+ }%
+ }%
+}{}
+% \end{macrocode}
+%
+% \section{Package lastpage support}
+% Package lastpage directly writes the |\newlabel| command to the
+% aux file. Because package hyperref requires additional arguments,
+% the internal command |\lastpage@putlabel| is redefined.
+% The patch is deferred by |\AtBeginDocument|, because it is possible
+% that package lastpage is loaded after package hyperref.
+% The same algorithm (options hypertexnames and plainpages)
+% is used to get the page anchor name as
+% in |\Hy@EveryPageAnchor| (see sec. \ref{pagenum}).
+% The link will not work if option pageanchor is set to false.
+% \begin{macro}{\lastpage@putlabel}
+% \begin{macrocode}
+\Hy@AtBeginDocument{%
+ \@ifclassloaded{revtex4}{%
+ \@namedef{ver@lastpage.sty}{1994/06/25}%
+ }{}%
+ \@ifpackageloaded{lastpage}{%
+ \ifHy@pageanchor
+ \else
+ \Hy@WarningNoLine{%
+ The \string\pageref{LastPage} link doesn't work\MessageBreak
+ with disabled option `pageanchor'%
+ }%
+ \fi
+ \def\lastpage@putlabel{%
+ \addtocounter{page}{-1}%
+ \if@filesw
+ \begingroup
+ \let\@number\@firstofone
+ \ifHy@pageanchor
+ \ifHy@hypertexnames
+ \ifHy@plainpages
+ \def\Hy@temp{\arabic{page}}%
+ \else
+ \Hy@unicodefalse
+ \pdfstringdef\Hy@temp{\thepage}%
+ \fi
+ \else
+ \def\Hy@temp{\the\Hy@pagecounter}%
+ \fi
+ \fi
+ \immediate\write\@auxout{%
+ \string\newlabel
+ {LastPage}{{}{\thepage}{}{%
+ \ifHy@pageanchor page.\Hy@temp\fi}{}}%
+ }%
+ \endgroup
+ \fi
+ \addtocounter{page}{1}%
+ }%
+ \@ifclassloaded{revtex4}{%
+ \begingroup
+ \toks@\expandafter{\lastpage@putlabel}%
+ \edef\x{\endgroup
+ \def\noexpand\lastpage@putlabel{%
+ \noexpand\stepcounter{page}%
+ \the\toks@
+ \noexpand\addtocounter{page}\noexpand\m@ne
+ }%
+ }%
+ \x
+ }{}%
+ }{}%
+}
+%</package>
+%<*check>
+\checkpackage{lastpage}[1994/06/25]
+\checkcommand\def\lastpage@putlabel{%
+ \addtocounter{page}{-1}%
+ \immediate\write\@auxout{%
+ \string\newlabel{LastPage}{{}{\thepage}}%
+ }%
+ \addtocounter{page}{1}%
+}
+%</check>
+%<*package>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Package ifthen support}
+%
+% Since version 6.75a this is done in package nameref.
+%
+% For compatibility \cmd{\hypergetref} and
+% \cmd{\hypergetpageref} are still provided.
+% But they do not generate warnings, if the reference is
+% undefined.
+% \begin{macrocode}
+\def\hypergetref#1{\getrefbykeydefault{#1}{}{??}}
+\def\hypergetpageref#1{\getrefbykeydefault{#1}{page}{0}}
+% \end{macrocode}
+%
+% \section{Package titlesec and titletoc support}
+%
+% This code is contributed by Javier Bezos
+% (Email: \Email{jbezos@arrakis.es}).
+%
+% Package titlesec support:
+% \begin{macrocode}
+\@ifpackageloaded{titlesec}{%
+ \def\ttl@Hy@steplink#1{%
+ \Hy@MakeCurrentHrefAuto{#1*}%
+ \edef\ttl@Hy@saveanchor{%
+ \noexpand\Hy@raisedlink{%
+ \noexpand\hyper@anchorstart{\@currentHref}%
+ \noexpand\hyper@anchorend
+ \def\noexpand\ttl@Hy@SavedCurrentHref{\@currentHref}%
+ \noexpand\ttl@Hy@PatchSaveWrite
+ }%
+ }%
+ }%
+ \def\ttl@Hy@PatchSaveWrite{%
+ \begingroup
+ \toks@\expandafter{\ttl@savewrite}%
+ \edef\x{\endgroup
+ \def\noexpand\ttl@savewrite{%
+ \let\noexpand\@currentHref
+ \noexpand\ttl@Hy@SavedCurrentHref
+ \the\toks@
+ }%
+ }%
+ \x
+ }%
+ \def\ttl@Hy@refstepcounter#1{%
+ \let\ttl@b\Hy@raisedlink
+ \def\Hy@raisedlink##1{%
+ \def\ttl@Hy@saveanchor{\Hy@raisedlink{##1}}%
+ }%
+ \refstepcounter{#1}%
+ \let\Hy@raisedlink\ttl@b
+ }%
+}{}
+% \end{macrocode}
+%
+% Package titletoc support:
+% \begin{macrocode}
+\@ifpackageloaded{titletoc}{%
+ \def\ttl@gobblecontents#1#2#3#4{\ignorespaces}%
+}{}
+% \end{macrocode}
+%
+% \section{Package varioref support}
+%
+% Package nameref uses five arguments for the ref system.
+% Fix provided by Felix Neubauer (\Email{felix.neubauer@gmx.net}).
+% \begin{macrocode}
+\def\Hy@varioref@undefined{{??}{??}{}{}{}}
+\@ifpackageloaded{varioref}{%
+ \def\vref@pagenum#1#2{%
+ \@ifundefined{r@#2}{%
+ \expandafter\let\csname r@#2\endcsname\Hy@varioref@undefined
+ }{}%
+ \edef#1{\getpagerefnumber{#2}}%
+ }%
+}{}
+% \end{macrocode}
+%
+% Package varioref redefines \cs{refstepcounter}, thus it needs
+% fixing, if the package is loaded *after* hyperref.
+% \begin{macrocode}
+\def\Hy@varioref@refstepcounter#1{%
+ \stepcounter{#1}%
+ \protected@edef\@currentlabel{%
+ \csname p@#1\expandafter\endcsname\csname the#1\endcsname
+ }%
+}
+\AtBeginDocument{%
+ \ifx\refstepcounter\Hy@varioref@refstepcounter
+ \let\H@refstepcounter\refstepcounter
+ \let\refstepcounter\Hy@saved@refstepcounter
+ \fi
+}
+% \end{macrocode}
+%
+% \section{Package longtable support}
+%
+% Sometimes the anchor of the longtable goes to the previous
+% page. Thus the following patch separates the anchor setting
+% and counter incrementation by hyperref's \verb|\refstepcounter|
+% and the anchor setting is moved after \verb|\vskip\LTpre|.
+%
+% Patch of \cmd{\LT@array}:
+% replace \cmd{\refstepcounter} by the original
+% \cmd{\H@refstepcounter} without anchor generation
+% \begin{macrocode}
+\@ifpackageloaded{longtable}{%
+ \begingroup
+ \def\y{\LT@array}%
+ \@ifundefined{scr@LT@array}{%
+ \@ifundefined{adl@LT@array}{}{\def\y{\adl@LT@array}}%
+ }{\def\y{\scr@LT@array}}%
+ \long\def\x\refstepcounter#1#2\@sharp#3#4\@nil{%
+ \expandafter\endgroup
+ \expandafter\def\y[##1]##2{%
+ \H@refstepcounter{#1}%
+ \hyper@makecurrent{table}%
+ \let\Hy@LT@currentHref\@currentHref
+ #2\@sharp#####4%
+ }%
+ }%
+ \expandafter\expandafter\expandafter\x\y[{#1}]{#2}\@nil
+% \end{macrocode}
+% Patch of \cmd{\LT@start}:
+% add anchor before first line after \verb|\vskip\LTpre|
+% \begin{macrocode}
+ \begingroup
+ \def\x#1\ifvoid\LT@foot#2\fi#3\@nil{%
+ \endgroup
+ \def\LT@start{%
+ #1%
+ \ifvoid\LT@foot#2\fi
+ \let\@currentHref\Hy@LT@currentHref
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ #3%
+ }%
+ }%
+ \expandafter\x\LT@start\@nil
+}{}
+% \end{macrocode}
+%
+% \section{Equations}\label{equations}
+% We want to make the whole equation a target anchor.
+% Overload equation, temporarily reverting to original
+% |\refstepcounter|. If, however, it is in AMS math, we do not
+% do anything, as the tag mechanism is used there (see section \ref{ams}).
+% The execption is that we move the equation incrementation inside
+% the math environment to avoid specials outside and a wrong vertical
+% spacing of equation environments.
+% \begin{macrocode}
+\let\new@refstepcounter\refstepcounter
+\let\H@equation\equation
+\let\H@endequation\endequation
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}{%
+ \long\def\Hy@temp{%
+ \incr@eqnum
+ \mathdisplay@push
+ \st@rredfalse \global\@eqnswtrue
+ \mathdisplay{equation}%
+ }%
+ \ifx\Hy@temp\equation
+ \expandafter\ifx\csname if@fleqn\expandafter\endcsname
+ \csname iftrue\endcsname
+ \else
+ \long\def\equation{%
+ \mathdisplay@push
+ \st@rredfalse \global\@eqnswtrue
+ \mathdisplay{equation}%
+ \incr@eqnum
+ }%
+ \fi
+ \fi
+}{%
+ \def\equation{%
+ \let\refstepcounter\H@refstepcounter
+ \H@equation
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \hyper@makecurrent{equation}%
+% \end{macrocode}
+% \cs{mathopen} is needed in case the equation starts with
+% an unary minus, for example.
+% \begin{macrocode}
+ \mathopen{%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}%
+ }%
+ \let\refstepcounter\new@refstepcounter
+ }%
+ \def\endequation{%
+ \ifx\Hy@raisedlink\ltx@empty
+ \hyper@anchorend
+ \else
+ \mathclose{\Hy@raisedlink{\hyper@anchorend}}%
+ \fi
+ \H@endequation
+ }%
+}
+% \end{macrocode}
+% My goodness, why can't \LaTeX{} be consistent? Why is |\eqnarray|
+% set up differently from other objects?
+%
+% People (you know who you are, Thomas Beuth) sometimes make
+% an eqnarray where \emph{all} the lines end with |\notag|,
+% so there is no suitable anchor at all. In this case, pass by
+% on the other side.
+% \begin{macrocode}
+\newif\if@eqnstar
+\@eqnstarfalse
+\let\H@eqnarray\eqnarray
+\let\H@endeqnarray\endeqnarray
+\def\eqnarray{%
+ \let\Hy@reserved@a\relax
+ \def\@currentHref{}%
+ \H@eqnarray
+ \if@eqnstar
+ \else
+ \ifx\\\@currentHref\\%
+ \else
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \hyper@makecurrent{equation}%
+ \mathopen{%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ }%
+ \fi
+ \fi
+}
+\def\endeqnarray{%
+ \H@endeqnarray
+}
+% \end{macrocode}
+% This is quite heavy-handed, but it works for now. If its an |eqnarray*|
+% we need to disable the hyperref actions. There may well be a cleaner
+% way to trap this. Bill Moss found this.
+% \begin{macrocode}
+\@namedef{eqnarray*}{%
+ \def\@eqncr{\nonumber\@seqncr}\@eqnstartrue\eqnarray
+}
+\@namedef{endeqnarray*}{%
+ \nonumber\endeqnarray\@eqnstarfalse
+}
+% \end{macrocode}
+% Then again, we have the \emph{subeqnarray}
+% package. Tanmoy provided some code for this:
+% \begin{macrocode}
+\ltx@IfUndefined{subeqnarray}{}{%
+ \let\H@subeqnarray\subeqnarray
+ \let\H@endsubeqnarray\endsubeqnarray
+ \def\subeqnarray{%
+ \let\Hy@reserved@a\relax
+ \H@subeqnarray
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \hyper@makecurrent{equation}%
+ \hyper@anchorstart{\@currentHref}{}\hyper@anchorend
+ }%
+ \def\endsubeqnarray{%
+ \H@endsubeqnarray
+ }%
+ \providecommand\theHsubequation{\theHequation\alph{subequation}}%
+}
+% \end{macrocode}
+% The aim of this macro is to produce a sanitized version of
+% its argument, to make it a safe label.
+% \begin{macrocode}
+\def\make@stripped@name#1{%
+ \begingroup
+ \escapechar\m@ne
+ \global\let\newname\@empty
+ \protected@edef\Hy@tempa{#1}%
+ \edef\@tempb{%
+ \noexpand\@tfor\noexpand\Hy@tempa:=%
+ \expandafter\strip@prefix\meaning\Hy@tempa
+ }%
+ \@tempb\do{%
+ \if{\Hy@tempa\else
+ \if}\Hy@tempa\else
+ \xdef\newname{\newname\Hy@tempa}%
+ \fi
+ \fi
+ }%
+ \endgroup
+}
+% \end{macrocode}
+%
+% Support for amsmath's \texttt{subequations}:
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname subequations\endcsname\relax
+\else
+ \let\HyOrg@subequations\subequations
+ \def\subequations{%
+ \stepcounter{equation}%
+ \protected@edef\theHparentequation{%
+ \@ifundefined{theHequation}\theequation\theHequation
+ }%
+ \addtocounter{equation}{-1}%
+ \HyOrg@subequations
+ \def\theHequation{\theHparentequation\alph{equation}}%
+ \ignorespaces
+ }%
+\fi
+% \end{macrocode}
+%
+% Support for package \texttt{amsthm} (Daniel M\"ullner):
+% also \texttt{cleveref}.
+% \begin{macrocode}
+\Hy@AtBeginDocument{%
+\@ifpackageloaded{cleveref}{%
+\let\Hy@savedthm\@thm
+\def\@thm{\ifhmode\unskip\fi\Hy@savedthm}%
+}{%
+\@ifpackageloaded{amsthm}{%
+% \end{macrocode}
+% Class amsbook uses a different definition of \cs{@thm},
+% where two lines are added (thanks to Dan Luecking for
+% his analysis):
+%\begin{quote}
+%\begin{verbatim}
+%\let\thm@indent\indent % indent
+%\thm@headfont{\scshape}% heading font small caps
+%\end{verbatim}
+%\end{quote}
+% \begin{macrocode}
+ \def\Hy@temp#1#2#3{%
+ \ifhmode\unskip\unskip\par\fi
+ \normalfont
+ \trivlist
+ \let\thmheadnl\relax
+ \let\thm@swap\@gobble
+ \let\thm@indent\indent % indent
+ \thm@headfont{\scshape}% heading font small caps
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax
+ \thm@space@setup
+ #1% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\@tempa{#2}\ifx\@empty\@tempa
+ \def\@tempa{\@oparg{\@begintheorem{#3}{}}[]}%
+ \else
+ \refstepcounter{#2}%
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]%
+ }%
+ \fi
+ \@tempa
+ }%
+ \ifx\Hy@temp\@thm
+ \def\@thm#1#2#3{%
+ \ifhmode
+ \unskip\unskip\par
+ \fi
+ \normalfont
+ \trivlist
+ \let\thmheadnl\relax
+ \let\thm@swap\@gobble
+ \let\thm@indent\indent % indent
+ \thm@headfont{\scshape}% heading font small caps
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax
+ \thm@space@setup
+ #1% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\dth@counter{#2}%
+ \ifx\@empty\dth@counter
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{}}[]%
+ }%
+ \else
+ \H@refstepcounter{#2}%
+ \hyper@makecurrent{#2}%
+ \let\Hy@dth@currentHref\@currentHref
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]%
+ }%
+ \fi
+ \@tempa
+ }%
+ \else
+ \def\@thm#1#2#3{%
+ \ifhmode
+ \unskip\unskip\par
+ \fi
+ \normalfont
+ \trivlist
+ \let\thmheadnl\relax
+ \let\thm@swap\@gobble
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax
+ \thm@space@setup
+ #1% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\dth@counter{#2}%
+ \ifx\@empty\dth@counter
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{}}[]%
+ }%
+ \else
+ \H@refstepcounter{#2}%
+ \hyper@makecurrent{#2}%
+ \let\Hy@dth@currentHref\@currentHref
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]%
+ }%
+ \fi
+ \@tempa
+ }%
+ \fi
+ \dth@everypar={%
+ \@minipagefalse
+ \global\@newlistfalse
+ \@noparitemfalse
+ \if@inlabel
+ \global\@inlabelfalse
+ \begingroup
+ \setbox\z@\lastbox
+ \ifvoid\z@
+ \kern-\itemindent
+ \fi
+ \endgroup
+ \ifx\@empty\dth@counter
+ \else
+ \Hy@raisedlink{%
+ \hyper@anchorstart{%
+ \ltx@ifundefined{Hy@dth@currentHref}%
+ \@currentHref\Hy@dth@currentHref
+ }\hyper@anchorend
+ }%
+ \fi
+ \unhbox\@labels
+ \fi
+ \if@nobreak
+ \@nobreakfalse \clubpenalty\@M
+ \else
+ \clubpenalty\@clubpenalty \everypar{}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+% non \texttt{amsthm} case, remove final space on line before a theorem
+% for githib issue 11.
+% \begin{macrocode}
+{%
+\let\Hy@savedthm\@thm
+\def\@thm{\ifhmode\unskip\fi\Hy@savedthm}%
+}%
+}%
+}
+% \end{macrocode}
+%
+% \section{Footnotes}\label{footnotes}
+% The footnote mark is a hypertext link, and the text is a target.
+% We separately number the footnotes sequentially through the
+% text, separately from whatever labels the text assigns. Too hard
+% to keep track of markers otherwise. If the raw forms |\footnotemark|
+% and |\footnotetext| are used, force them to use un-hyper original.
+%
+% \begin{macrocode}
+\ifHy@hyperfootnotes
+ \newcounter{Hfootnote}%
+ \let\H@@footnotetext\@footnotetext
+ \let\H@@footnotemark\@footnotemark
+ \def\@xfootnotenext[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \ifx\@footnotetext\@mpfootnotetext
+ \expandafter\H@@mpfootnotetext
+ \else
+ \expandafter\H@@footnotetext
+ \fi
+ }%
+ \def\@xfootnotemark[#1]{%
+ \begingroup
+ \c@footnote #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thefootnote}%
+ \endgroup
+ \H@@footnotemark
+ }%
+ \let\H@@mpfootnotetext\@mpfootnotetext
+ \long\def\@mpfootnotetext#1{%
+ \H@@mpfootnotetext{%
+ \ifHy@nesting
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ {%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\ignorespaces #1}%
+ }{%
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\relax}%
+ }\ignorespaces #1%
+ }%
+ }%
+ }%
+ \long\def\@footnotetext#1{%
+ \H@@footnotetext{%
+ \ifHy@nesting
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ {%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\ignorespaces #1}%
+ }{%
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\relax}%
+ }%
+ \let\@currentHref\Hy@footnote@currentHref
+ \let\@currentlabelname\@empty
+ \ignorespaces #1%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Redefine \verb+\@footnotemark+, borrowing its code (at the
+% cost of getting out of sync with latex.ltx), to take
+% advantage of its white space and hyphenation fudges. If we just
+% overload it, we can get variant documents (the word before the
+% footnote is treated differently). Thanks to David Carlisle and
+% Brian Ripley for confusing and helping me on this.
+% \begin{macrocode}
+ \def\@footnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \stepcounter{Hfootnote}%
+ \global\let\Hy@saved@currentHref\@currentHref
+ \hyper@makecurrent{Hfootnote}%
+ \global\let\Hy@footnote@currentHref\@currentHref
+ \global\let\@currentHref\Hy@saved@currentHref
+ \hyper@linkstart{link}{\Hy@footnote@currentHref}%
+ \@makefnmark
+ \hyper@linkend
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+ }%
+% \end{macrocode}
+%
+% Tabularx causes footnote problems, disable the linking if that is loaded.
+% Since v6.82i footnotes are only disabled inside the environment
+% `tabularx'.
+% \begin{macrocode}
+ \@ifpackageloaded{tabularx}{%
+ \let\HyOrg@TX@endtabularx\TX@endtabularx
+ \def\Hy@tabularx@hook{%
+ \let\@footnotetext\H@@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@mpfootnotetext\H@@mpfootnotetext
+ }%
+ \begingroup
+ \toks@\expandafter{\TX@endtabularx}%
+ \xdef\Hy@gtemp{%
+ \noexpand\Hy@tabularx@hook
+ \the\toks@
+ }%
+ \endgroup
+ \let\TX@endtabularx\Hy@gtemp
+ }{}%
+% \end{macrocode}
+%
+% Support for footnotes in p columns of longtable.
+% Here \verb+\footnote+ commands are splitted into
+% \verb+\footnotemark+ and a call of \verb+\footnotetext+
+% with the optional argument, that is not supported
+% by hyperref. The result is a link by \verb+\footnotemark+
+% without valid anchor
+% \begin{macrocode}
+ \@ifpackageloaded{longtable}{%
+ \CheckCommand*{\LT@p@ftntext}[1]{%
+ \edef\@tempa{%
+ \the\LT@p@ftn
+ \noexpand\footnotetext[\the\c@footnote]%
+ }%
+ \global\LT@p@ftn\expandafter{\@tempa{#1}}%
+ }%
+ \long\def\LT@p@ftntext#1{%
+ \edef\@tempa{%
+ \the\LT@p@ftn
+ \begingroup
+ \noexpand\c@footnote=\the\c@footnote\relax
+ \noexpand\protected@xdef\noexpand\@thefnmark{%
+ \noexpand\thempfn
+ }%
+ \noexpand\Hy@LT@footnotetext{%
+ \Hy@footnote@currentHref
+ }%
+ }%
+ \global\LT@p@ftn\expandafter{%
+ \@tempa{#1}%
+ \endgroup
+ }%
+ }%
+ \long\def\Hy@LT@footnotetext#1#2{%
+ \H@@footnotetext{%
+ \ifHy@nesting
+ \hyper@@anchor{#1}{#2}%
+ \else
+ \Hy@raisedlink{%
+ \hyper@@anchor{#1}{\relax}%
+ }%
+ \def\@currentHref{#1}%
+ \let\@currentlabelname\@empty
+ #2%
+ \fi
+ }%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% Footnotes for fancyvrb (Fix by Manuel P\'egouri\'e-Gonnard).
+% \begin{macrocode}
+ \@ifpackageloaded{fancyvrb}{%
+ \def\V@@footnotetext{%
+ \insert\footins\bgroup
+ \csname reset@font\endcsname
+ \footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty \@MM
+ \hsize\columnwidth
+ \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
+ \@makefntext{}%
+ \rule{\z@}{\footnotesep}%
+ \bgroup
+ \aftergroup\V@@@footnotetext
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\relax}%
+ }%
+ \let\@currentHref\Hy@footnote@currentHref
+ \let\@currentlabelname\@empty
+ \ignorespaces
+ }%
+ }{}%
+% \end{macrocode}
+%
+% KOMA-Script defines \cs{footref} that uses both
+% \cs{ref} and \cs{@footnotemark} resulting in two links,
+% one of them wrong.
+% \begin{macrocode}
+ \def\Hy@temp#1{%
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
+ \endgroup
+ \@footnotemark
+ }%
+ \ifx\Hy@temp\footref
+ \def\footref#1{%
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
+ \endgroup
+ \H@@footnotemark
+ }%
+ \fi
+% \end{macrocode}
+%
+% But the special footnotes
+% in |\maketitle| are much too hard to deal with
+% properly. Let them revert to plain behaviour.
+% The koma classes add an optional argument.
+% \begin{macrocode}
+ \let\HyOrg@maketitle\maketitle
+ \def\maketitle{%
+ \let\Hy@saved@footnotemark\@footnotemark
+ \let\Hy@saved@footnotetext\@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@footnotetext\H@@footnotetext
+ \@ifnextchar[\Hy@maketitle@optarg{% ]
+ \HyOrg@maketitle
+ \Hy@maketitle@end
+ }%
+ }%
+ \def\Hy@maketitle@optarg[#1]{%
+ \HyOrg@maketitle[{#1}]%
+ \Hy@maketitle@end
+ }%
+ \def\Hy@maketitle@end{%
+ \ifx\@footnotemark\H@@footnotemark
+ \let\@footnotemark\Hy@saved@footnotemark
+ \fi
+ \ifx\@footnotetext\H@@footnotetext
+ \let\@footnotetext\Hy@saved@footnotetext
+ \fi
+ }%
+% \end{macrocode}
+% \begin{macro}{\realfootnote}
+% Does anyone remember the function and purpose of \cmd{\realfootnote}?
+% \begin{macrocode}
+ \def\realfootnote{%
+ \@ifnextchar[\@xfootnote{%
+ \stepcounter{\@mpfn}%
+ \protected@xdef\@thefnmark{\thempfn}%
+ \H@@footnotemark\H@@footnotetext
+ }%
+ }%
+% \end{macrocode}
+% \begin{macrocode}
+\fi
+\Hy@DisableOption{hyperfootnotes}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+%<*check>
+\checklatex
+\checkcommand\def\@xfootnotenext[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \@footnotetext
+}
+\checkcommand\def\@xfootnotemark[#1]{%
+ \begingroup
+ \c@footnote #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thefootnote}%
+ \endgroup
+ \@footnotemark
+}
+\checkcommand\def\@footnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \@makefnmark
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}
+%</check>
+%<*package>
+% \end{macrocode}
+%
+% \section{Float captions}\label{captions}
+% Make the float caption the hypertext anchor; curiously enough,
+% we can't just copy the definition of |\@caption|. Its all to do
+% with expansion. It screws up. Sigh.
+% \begin{macrocode}
+\def\caption{%
+ \ifx\@captype\@undefined
+ \@latex@error{\noexpand\caption outside float}\@ehd
+ \expandafter\@gobble
+ \else
+ \H@refstepcounter\@captype
+ \let\Hy@tempa\@caption
+ \@ifundefined{float@caption}{%
+ }{%
+ \expandafter\ifx\csname @float@c@\@captype\endcsname
+ \float@caption
+ \let\Hy@tempa\Hy@float@caption
+ \fi
+ }%
+ \expandafter\@firstofone
+ \fi
+ {\@dblarg{\Hy@tempa\@captype}}%
+}
+\long\def\@caption#1[#2]#3{%
+ \expandafter\ifx\csname if@capstart\expandafter\endcsname
+ \csname iftrue\endcsname
+ \global\let\@currentHref\hc@currentHref
+ \else
+ \hyper@makecurrent{\@captype}%
+ \fi
+ \@ifundefined{NR@gettitle}{%
+ \def\@currentlabelname{#2}%
+ }{%
+ \NR@gettitle{#2}%
+ }%
+ \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
+ }%
+ \begingroup
+ \@parboxrestore
+ \if@minipage
+ \@setminipage
+ \fi
+ \normalsize
+ \expandafter\ifx\csname if@capstart\expandafter\endcsname
+ \csname iftrue\endcsname
+ \global\@capstartfalse
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
+ \else
+ \@makecaption{\csname fnum@#1\endcsname}{%
+ \ignorespaces
+% \end{macrocode}
+% If we cannot have nesting, the anchor is empty.
+% \begin{macrocode}
+ \ifHy@nesting
+ \expandafter\hyper@@anchor\expandafter{\@currentHref}{#3}%
+ \else
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \@currentHref
+ }{\relax}%
+ }%
+ #3%
+ \fi
+ }%
+ \fi
+ \par
+ \endgroup
+}
+% \end{macrocode}
+% Compatibility with float.sty: anchor setting at the top
+% of the float, if the float is controlled by float.sty.
+% Several \verb|\caption| commands inside one float are
+% not supported.
+%
+% \cs{HyNew@float@makebox} is introduced as feature request
+% of Axel Sommerfeldt to make the life easier for his
+% package `caption'.
+% \begin{macrocode}
+\let\Hy@float@caption\@caption
+\newcommand{\HyNew@float@makebox}[1]{%
+ \HyOrg@float@makebox{%
+ #1\relax
+ \ifx\Hy@float@currentHref\@undefined
+ \else
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@float@currentHref
+ }{\relax}%
+ \global\let\Hy@float@currentHref\@undefined
+ \fi
+ }%
+}%
+\@ifpackageloaded{float}{%
+ \def\Hy@float@caption{%
+ \ifx\Hy@float@currentHref\@undefined
+ \hyper@makecurrent{\@captype}%
+ \global\let\Hy@float@currentHref\@currentHref
+ \else
+ \let\@currentHref\Hy@float@currentHref
+ \fi
+ \float@caption
+ }%
+ \let\HyOrg@float@makebox\float@makebox
+ \let\float@makebox\HyNew@float@makebox
+}{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+%<*check>
+\checklatex[1999/06/01 - 2000/06/01]
+\checkcommand\def\caption{%
+ \ifx\@captype\@undefined
+ \@latex@error{\noexpand\caption outside float}\@ehd
+ \expandafter\@gobble
+ \else
+ \refstepcounter\@captype
+ \expandafter\@firstofone
+ \fi
+ {\@dblarg{\@caption\@captype}}%
+}
+\checkcommand\long\def\@caption#1[#2]#3{%
+ \par
+ \addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
+ }%
+ \begingroup
+ \@parboxrestore
+ \if@minipage
+ \@setminipage
+ \fi
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup
+}
+%</check>
+%<*package>
+% \end{macrocode}
+%
+% \section{Bibliographic references}\label{bib}
+% This is not very robust, since many styles redefine these things.
+% The package used to redefine |\@citex| and the like; then we tried
+% adding the hyperref call explicitly into the .aux file.
+% Now we redefine |\bibcite|; this still breaks some citation packages
+% so we have to work around them. But this remains extremely dangerous.
+% Any or all of \emph{achemso}
+% and \emph{drftcite} may break.
+%
+% However, lets make an attempt to get \emph{natbib} right, because
+% thats a powerful, important package.
+% Patrick Daly (\Email{daly@linmpi.mpg.de}) has
+% provided hooks for us, so all we need to do is activate them.
+% \begin{macrocode}
+\def\hyper@natlinkstart#1{%
+ \Hy@backout{#1}%
+ \hyper@linkstart{cite}{cite.#1}%
+ \def\hyper@nat@current{#1}%
+}
+\def\hyper@natlinkend{%
+ \hyper@linkend
+}
+\def\hyper@natlinkbreak#1#2{%
+ \hyper@linkend#1\hyper@linkstart{cite}{cite.#2}%
+}
+\def\hyper@natanchorstart#1{%
+ \Hy@raisedlink{\hyper@anchorstart{cite.#1}}%
+}
+\def\hyper@natanchorend{\hyper@anchorend}
+% \end{macrocode}
+% Do not play games if we have natbib support.
+% Macro \@extra@binfo added for chapterbib support. Chapterbib also
+% wants \cs{@extra@binfo} in the hyper-link, but since the link tag is
+% not expanded immediately, we use \cs{@extra@b@citeb}, so cites in a
+% chapter will link to the bibliography in that chapter.
+% \begin{macrocode}
+\ltx@IfUndefined{NAT@parse}{%
+ \providecommand*\@extra@binfo{}%
+ \providecommand*\@extra@b@citeb{}%
+ \def\bibcite#1#2{%
+ \@newl@bel{b}{#1\@extra@binfo}{%
+ \hyper@@link[cite]{}{cite.#1\@extra@b@citeb}{#2}%
+ }%
+ }%
+ \gdef\@extra@binfo{}%
+% \end{macrocode}
+% Package |babel| redefines \cmd{\bibcite} with
+% macro \cmd{\bbl@cite@choice}. It needs to be overwritten
+% to avoid the warning ``Label(s) may have changed.''.
+% \begin{macrocode}
+ \let\Hy@bibcite\bibcite
+ \begingroup
+ \@ifundefined{bbl@cite@choice}{}{%
+ \g@addto@macro\bbl@cite@choice{%
+ \let\bibcite\Hy@bibcite
+ }%
+ }%
+ \endgroup
+% \end{macrocode}
+% |\@BIBLABEL| is working around a `feature' of Rev\TeX.
+% \begin{macrocode}
+ \providecommand*{\@BIBLABEL}{\@biblabel}%
+ \def\@lbibitem[#1]#2{%
+ \@skiphyperreftrue
+ \H@item[%
+ \ifx\Hy@raisedlink\@empty
+ \hyper@anchorstart{cite.#2\@extra@b@citeb}%
+ \@BIBLABEL{#1}%
+ \hyper@anchorend
+ \else
+ \Hy@raisedlink{%
+ \hyper@anchorstart{cite.#2\@extra@b@citeb}\hyper@anchorend
+ }%
+ \@BIBLABEL{#1}%
+ \fi
+ \hfill
+ ]%
+ \@skiphyperreffalse
+ \if@filesw
+ \begingroup
+ \let\protect\noexpand
+ \immediate\write\@auxout{%
+ \string\bibcite{#2}{#1}%
+ }%
+ \endgroup
+ \fi
+ \ignorespaces
+ }%
+% \end{macrocode}
+% Since |\bibitem| is doing its own labelling, call the raw
+% version of |\item|, to avoid extra spurious labels
+% \begin{macrocode}
+ \def\@bibitem#1{%
+ \@skiphyperreftrue\H@item\@skiphyperreffalse
+ \Hy@raisedlink{%
+ \hyper@anchorstart{cite.#1\@extra@b@citeb}\relax\hyper@anchorend
+ }%
+ \if@filesw
+ \begingroup
+ \let\protect\noexpand
+ \immediate\write\@auxout{%
+ \string\bibcite{#1}{\the\value{\@listctr}}%
+ }%
+ \endgroup
+ \fi
+ \ignorespaces
+ }%
+}{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+%<*check>
+\checklatex
+\checkcommand\def\@lbibitem[#1]#2{%
+ \item[\@biblabel{#1}\hfill]%
+ \if@filesw
+ {%
+ \let\protect\noexpand
+ \immediate\write\@auxout{%
+ \string\bibcite{#2}{#1}%
+ }%
+ }%
+ \fi
+ \ignorespaces
+}
+\checkcommand\def\@bibitem#1{%
+ \item
+ \if@filesw
+ \immediate\write\@auxout{%
+ \string\bibcite{#1}{\the\value{\@listctr}}%
+ }%
+ \fi
+ \ignorespaces
+}
+%</check>
+%<*package>
+% \end{macrocode}
+%
+% Revtex (bless its little heart) takes over |\bibcite| and looks
+% at the result to measure something. Make this a hypertext link
+% and it goes ape. Therefore, make an anodyne result first, call
+% its business, then go back to the real thing.
+% \begin{macrocode}
+\@ifclassloaded{revtex}{%
+ \Hy@Info{*** compatibility with revtex **** }%
+ \def\revtex@checking#1#2{%
+ \expandafter\let\expandafter\T@temp\csname b@#1\endcsname
+ \expandafter\def\csname b@#1\endcsname{#2}%
+ \@SetMaxRnhefLabel{#1}%
+ \expandafter\let\csname b@#1\endcsname\T@temp
+ }%
+% \end{macrocode}
+% Tanmoy provided this replacement for CITEX. Lord knows what it does.
+% For chapterbib added: \@extra@b@citeb
+% \begin{macrocode}
+ \@ifundefined{@CITE}{\def\@CITE{\@cite}}{}%
+ \providecommand*{\@extra@b@citeb}{}%
+ \def\@CITEX[#1]#2{%
+ \let\@citea\@empty
+ \leavevmode
+ \unskip
+ $^{%
+ \scriptstyle
+ \@CITE{%
+ \@for\@citeb:=#2\do{%
+ \@citea
+ \def\@citea{,\penalty\@m\ }%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{\@citeb}}%
+ \fi
+ \@ifundefined{b@\@citeb\extra@b@citeb}{%
+ \mbox{\reset@font\bfseries ?}%
+ \G@refundefinedtrue
+ \@latex@warning{%
+ Citation `\@citeb' on page \thepage \space undefined%
+ }%
+ }{%
+ {\csname b@\@citeb\@extra@b@citeb\endcsname}%
+ }%
+ }%
+ }{#1}%
+ }$%
+ }%
+% \end{macrocode}
+% No, life is too short. I am not going to understand the
+% Revtex |\@collapse| macro, I shall
+% just restore the original behaviour of |\@citex|;
+% sigh. This is SO vile.
+% \begin{macrocode}
+ \def\@citex[#1]#2{%
+ \let\@citea\@empty
+ \@cite{%
+ \@for\@citeb:=#2\do{%
+ \@citea
+ \def\@citea{,\penalty\@m\ }%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{\@citeb}}%
+ \fi
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{%
+ \mbox{\reset@font\bfseries ?}%
+ \G@refundefinedtrue
+ \@latex@warning{%
+ Citation `\@citeb' on page \thepage \space undefined%
+ }%
+ }{%
+ \hbox{\csname b@\@citeb\@extra@b@citeb\endcsname}%
+ }%
+ }%
+ }{#1}%
+ }%
+}{}
+% \end{macrocode}
+%
+% \subsection{Package harvard}
+%
+% Override Peter Williams' Harvard package; we have to
+% a) make each of the citation types into a link; b) make
+% each citation write a backref entry, and c) kick off a backreference
+% section for each bibliography entry.
+%
+% The redefinitions have to be deferred to |\begin{document}|,
+% because if harvard.sty is loaded and html.sty is present and
+% detects pdf\TeX, then hyperref is already loaded at the begin
+% of harvard.sty, and the |\newcommand| macros causes error
+% messages.
+% \begin{macrocode}
+\@ifpackageloaded{harvard}{%
+ \Hy@AtBeginDocument{%
+ \Hy@Info{*** compatibility with harvard **** }%
+ \Hy@raiselinksfalse
+ \def\harvardcite#1#2#3#4{%
+ \global\@namedef{HAR@fn@#1}{\hyper@@link[cite]{}{cite.#1}{#2}}%
+ \global\@namedef{HAR@an@#1}{\hyper@@link[cite]{}{cite.#1}{#3}}%
+ \global\@namedef{HAR@yr@#1}{\hyper@@link[cite]{}{cite.#1}{#4}}%
+ \global\@namedef{HAR@df@#1}{\csname HAR@fn@#1\endcsname}%
+ }%
+ \def\HAR@citetoaux#1{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi%
+ \ifHy@backref
+ \ifx\@empty\@currentlabel
+ \else
+ \@bsphack
+ \if@filesw
+ \protected@write\@auxout{}{%
+ \string\@writefile{brf}{%
+ \string\backcite{#1}{%
+ {\thepage}{\@currentlabel}{\@currentHref}%
+ }%
+ }%
+ }%
+ \fi
+ \@esphack
+ \fi
+ \fi
+ }%
+ \def\harvarditem{%
+ \@ifnextchar[{\@harvarditem}{\@harvarditem[\null]}%
+ }%
+ \def\@harvarditem[#1]#2#3#4#5\par{%
+ \item[]%
+ \hyper@anchorstart{cite.#4}\relax\hyper@anchorend
+ \if@filesw
+ \begingroup
+ \def\protect##1{\string ##1\space}%
+ \ifthenelse{\equal{#1}{\null}}%
+ {\def\next{{#4}{#2}{#2}{#3}}}%
+ {\def\next{{#4}{#2}{#1}{#3}}}%
+ \immediate\write\@auxout{\string\harvardcite\codeof\next}%
+ \endgroup
+ \fi
+ \protect\hspace*{-\labelwidth}%
+ \protect\hspace*{-\labelsep}%
+ \ignorespaces
+ #5%
+ \ifHy@backref
+ \newblock
+ \backref{\csname br@#4\endcsname}%
+ \fi
+ \par
+ }%
+% \end{macrocode}
+% \begin{macro}{\HAR@checkcitations}
+% Package hyperref has added \cmd{\hyper@@link}, so
+% the original test \cmd{\HAR@checkcitations} will
+% fail every time and always will appear the ``Changed
+% labels'' warning. So we have to redefine
+% \cmd{\Har@checkcitations}:
+% \begin{macrocode}
+ \long\def\HAR@checkcitations#1#2#3#4{%
+ \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#2}}%
+ \expandafter\ifx\csname HAR@fn@#1\endcsname\HAR@tempa
+ \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#3}}%
+ \expandafter\ifx\csname HAR@an@#1\endcsname\HAR@tempa
+ \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#4}}%
+ \expandafter\ifx\csname HAR@yr@#1\endcsname\HAR@tempa
+ \else
+ \@tempswatrue
+ \fi
+ \else
+ \@tempswatrue
+ \fi
+ \else
+ \@tempswatrue
+ \fi
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \subsection{Package chicago}
+% The links by \cmd{\citeN} and \cmd{\shortciteN} should
+% include the closing parentheses.
+%
+% \begin{macrocode}
+\@ifpackageloaded{chicago}{%
+% \end{macrocode}
+% \begin{macro}{\citeN}
+% \begin{macrocode}
+ \def\citeN{%
+ \def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1}%
+ \def\citeauthoryear##1##2##3{##1 (##3\@cite@opt)}%
+ \@citedata@opt
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\shortciteN}
+% \begin{macrocode}
+ \def\shortciteN{%
+ \def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1}%
+ \def\citeauthoryear##1##2##3{##2 (##3\@cite@opt)}%
+ \@citedata@opt
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@citedata@opt}
+% \begin{macrocode}
+ \def\@citedata@opt{%
+ \let\@cite@opt\@empty
+ \@ifnextchar [{%
+ \@tempswatrue
+ \@citedatax@opt
+ }{%
+ \@tempswafalse
+ \@citedatax[]%
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@citedatax@opt}
+% \begin{macrocode}
+ \def\@citedatax@opt[#1]{%
+ \def\@cite@opt{, #1}%
+ \@citedatax[{#1}]%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \section{Page numbers}\label{pagenum}
+%
+% The last page should not contain a /Dur key, because there
+% is no page after the last page. Therefore at the last page
+% there should be a command |\hypersetup{pdfpageduration={}}|.
+% This can be set with \cmd{\AtEndDocument}, but it can
+% be too late, if the last page is already finished, or too
+% early, if lots of float pages will follow.
+% Therefore currently nothing is done by hyperref.
+%
+% This where we supply a destination for each page.
+% \begin{macrocode}
+\ltx@ifclassloaded{slides}{%
+ \def\Hy@SlidesFormatOptionalPage#1{(#1)}%
+ \def\Hy@PageAnchorSlidesPlain{%
+ \advance\c@page\ltx@one
+ \edef\Hy@TempPageAnchor{%
+ \noexpand\hyper@@anchor{%
+ page.\the\c@slide.\the\c@overlay.\the\c@note%
+ \ifnum\c@page=\ltx@one
+ \else
+ .\the\c@page
+ \fi
+ }%
+ }%
+ \advance\c@page-\ltx@one
+ }%
+ \def\Hy@PageAnchorSlide{%
+ \advance\c@page\ltx@one
+ \ifnum\c@page>\ltx@one
+ \ltx@IfUndefined{theHpage}{%
+ \protected@edef\Hy@TheSlideOptionalPage{%
+ \Hy@SlidesFormatOptionalPage{\thepage}%
+ }%
+ }{%
+ \protected@edef\Hy@TheSlideOptionalPage{%
+ \Hy@SlidesFormatOptionalPage{\theHpage}%
+ }%
+ }%
+ \else
+ \def\Hy@TheSlideOptionalPage{}%
+ \fi
+ \advance\c@page-\ltx@one
+ \pdfstringdef\@the@H@page{%
+ \csname
+ the%
+ \ltx@ifundefined{theH\Hy@SlidesPage}{}{H}%
+ \Hy@SlidesPage
+ \endcsname
+ \Hy@TheSlideOptionalPage
+ }%
+ \ltx@gobblethree
+ }%
+ \def\Hy@SlidesPage{slide}%
+ \g@addto@macro\slide{%
+ \def\Hy@SlidesPage{slide}%
+ }%
+ \g@addto@macro\overlay{%
+ \def\Hy@SlidesPage{overlay}%
+ }%
+ \g@addto@macro\note{%
+ \def\Hy@SlidesPage{note}%
+ }%
+}{%
+ \def\Hy@PageAnchorSlidesPlain{}%
+ \def\Hy@PageAnchorSlide{}%
+}
+\def\Hy@EveryPageAnchor{%
+ \Hy@DistillerDestFix
+ \ifHy@pageanchor
+ \ifHy@hypertexnames
+ \ifHy@plainpages
+ \def\Hy@TempPageAnchor{\hyper@@anchor{page.\the\c@page}}%
+ \Hy@PageAnchorSlidesPlain
+ \else
+ \begingroup
+ \let\@number\@firstofone
+ \Hy@unicodefalse
+ \Hy@PageAnchorSlide
+ \pdfstringdef\@the@H@page{\thepage}%
+ \endgroup
+ \EdefUnescapeString\@the@H@page{\@the@H@page}%
+ \def\Hy@TempPageAnchor{\hyper@@anchor{page.\@the@H@page}}%
+ \fi
+ \else
+ \Hy@GlobalStepCount\Hy@pagecounter
+ \def\Hy@TempPageAnchor{%
+ \hyper@@anchor{page.\the\Hy@pagecounter}%
+ }%
+ \fi
+ \vbox to 0pt{%
+ \kern\voffset
+ \kern\topmargin
+ \kern-1bp\relax
+ \hbox to 0pt{%
+ \kern\hoffset
+ \kern\ifodd\value{page}%
+ \oddsidemargin
+ \else
+ \evensidemargin
+ \fi
+ \kern-1bp\relax
+ \Hy@TempPageAnchor\relax
+ \hss
+ }%
+ \vss
+ }%
+ \fi
+}
+\g@addto@macro\Hy@EveryPageBoxHook{%
+ \Hy@EveryPageAnchor
+}
+% \end{macrocode}
+%
+% \section{Table of contents}\label{toc}
+% TV Raman noticed that people who add arbitrary material into the TOC
+% generate a bad or null link. We avoid that by checking if the current
+% destination is empty. But if `the most recent destination' is not
+% what you expect, you will be in trouble.
+% \begin{macrocode}
+% In newer \LaTeX\ releases this is defined to put a \verb|%| at the end of the
+% line in the \textt{toc}file.
+% \begin{macrocode}
+\providecommand\protected@file@percent{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\addcontentsline#1#2#3{% toc extension, type, tag
+ \begingroup
+ \let\label\@gobble
+ \ifx\@currentHref\@empty
+ \Hy@Warning{%
+ No destination for bookmark of \string\addcontentsline,%
+ \MessageBreak destination is added%
+ }%
+ \phantomsection
+ \fi
+ \expandafter\ifx\csname toclevel@#2\endcsname\relax
+ \begingroup
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\Hy@bookmarkstype
+ \Hy@WarningNoLine{%
+ bookmark level for unknown #2 defaults to 0%
+ }%
+ \else
+ \Hy@Info{bookmark level for unknown #2 defaults to 0}%
+ \fi
+ \endgroup
+ \expandafter\gdef\csname toclevel@#2\endcsname{0}%
+ \fi
+ \edef\Hy@toclevel{\csname toclevel@#2\endcsname}%
+ \Hy@writebookmark{\csname the#2\endcsname}%
+ {#3}%
+ {\@currentHref}%
+ {\Hy@toclevel}%
+ {#1}%
+ \ifHy@verbose
+ \begingroup
+ \def\Hy@tempa{#3}%
+ \@onelevel@sanitize\Hy@tempa
+ \let\temp@online\on@line
+ \let\on@line\@empty
+ \Hy@Info{%
+ bookmark\temp@online:\MessageBreak
+ thecounter {\csname the#2\endcsname}\MessageBreak
+ text {\Hy@tempa}\MessageBreak
+ reference {\@currentHref}\MessageBreak
+ toclevel {\Hy@toclevel}\MessageBreak
+ type {#1}%
+ }%
+ \endgroup
+ \fi
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}\protected@file@percent
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macro}{\contentsline}
+% The page number might be empty. In this case the link for the
+% page number is suppressed to avoid little link boxes.
+% \begin{macrocode}
+\def\contentsline#1#2#3#4{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\x{\endgroup
+ \def\noexpand\Hy@tocdestname{#4}%
+ }\x
+ \ifx\Hy@tocdestname\ltx@empty
+ \csname l@#1\endcsname{#2}{#3}%
+ \else
+ \ifcase\Hy@linktoc % none
+ \csname l@#1\endcsname{#2}{#3}%
+ \or % section
+ \csname l@#1\endcsname{%
+ \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
+ }{#3}%
+ \or % page
+ \def\Hy@temp{#3}%
+ \ifx\Hy@temp\ltx@empty
+ \csname l@#1\endcsname{#2}{#3}%
+ \else
+ \csname l@#1\endcsname{{#2}}{%
+ \hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
+ }%
+ \fi
+ \else % all
+ \def\Hy@temp{#3}%
+ \ifx\Hy@temp\ltx@empty
+ \csname l@#1\endcsname{%
+ \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
+ }{}%
+ \else
+ \csname l@#1\endcsname{%
+ \hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
+ }{%
+ \hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
+ }%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+%<*check>
+\checklatex
+\checkcommand\def\addcontentsline#1#2#3{%
+ \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}%
+}
+\checkcommand\def\contentsline#1{\csname l@#1\endcsname}
+%</check>
+%<*package>
+% \end{macrocode}
+%
+% \section{New counters}\label{counters}
+% The whole theorem business makes up new counters on the fly;
+% we are going to intercept this. Sigh. Do it at the level where
+% new counters are defined.
+% \begin{macrocode}
+\let\H@definecounter\@definecounter
+\def\@definecounter#1{%
+ \H@definecounter{#1}%
+ \expandafter\gdef\csname theH#1\endcsname{\arabic{#1}}%
+}
+% \end{macrocode}
+% But what if they have used the optional argument to e.g. |\newtheorem|
+% to determine when the numbering is reset? OK, we'll trap that too.
+% \begin{macrocode}
+\let\H@newctr\@newctr
+\def\@newctr#1[#2]{%
+ \H@newctr#1[{#2}]%
+ \expandafter\gdef\csname theH#1\endcsname{%
+ \csname the\@ifundefined{theH#2}{}{H}#2\endcsname.\arabic{#1}%
+ }%
+}
+% \end{macrocode}
+% \section{AMS\LaTeX\ compatibility}\label{ams}
+% Oh, no, they don't use anything as simple as |\refstepcounter|
+% in the AMS! We need to intercept some low-level operations
+% of theirs. Damned if we are going to try and work out what
+% they get up to. Just stick a label of `AMS' on the front, and use the
+% label \emph{they} worked out. If that produces something invalid, I give
+% up. They'll change all the code again anyway, I expect (SR).
+%
+% Version 6.77p uses a patch by Ross Moore.
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}{%
+ \def\Hy@make@anchor{%
+ \Hy@MakeCurrentHrefAuto{AMS}%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
+ }%
+ \def\Hy@make@df@tag@@#1{%
+ \gdef\df@tag{%
+ \maketag@@@{\Hy@make@anchor#1}%
+ \def\@currentlabel{#1}%
+ }%
+ }%
+ \def\Hy@make@df@tag@@@#1{%
+ \gdef\df@tag{%
+ \tagform@{\Hy@make@anchor#1}%
+ \toks@\@xp{\p@equation{#1}}%
+ \edef\@currentlabel{\the\toks@}%
+ }%
+ }%
+ \let\HyOrg@make@df@tag@@\make@df@tag@@
+ \let\HyOrg@make@df@tag@@@\make@df@tag@@@
+ \let\make@df@tag@@\Hy@make@df@tag@@
+ \let\make@df@tag@@@\Hy@make@df@tag@@@
+}{}
+% \end{macrocode}
+% Only play with |\seteqlebal| if we are using pdftex. Other drivers
+% cause problems; requested by Michael Downes (AMS).
+% \begin{macrocode}
+\@ifpackagewith{hyperref}{pdftex}{%
+ \let\H@seteqlabel\@seteqlabel
+ \def\@seteqlabel#1{%
+ \H@seteqlabel{#1}%
+ \xdef\@currentHref{AMS.\the\Hy@linkcounter}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ }%
+}{}
+% \end{macrocode}
+% This code I simply cannot remember what I was trying to achieve.
+% The final result seems to do nothing anyway.
+%\begin{verbatim}
+%\let\H@tagform@\tagform@
+%\def\tagform@#1{%
+% \maketag@@@{\hyper@@anchor{\@currentHref}%
+% {(\ignorespaces#1\unskip)}}%
+%}
+%\def\eqref#1{\textup{\H@tagform@{\ref{#1}}}}
+%\end{verbatim}
+%
+% \subsection{\texorpdfstring{\cs{@addtoreset}}{\\@addtoreset} and
+% \texorpdfstring{\cs{numberwithin}}{\\numberwithin} patches}
+%
+% \cs{@addtoreset} puts a counter to the reset list of
+% another counter. After a reset the counter starts
+% again with perhaps already used values. Therefore
+% the hyperref version of the counter print command
+% \cs{theHcounter} is redefined in order to add the
+% parent counter.
+% \begin{macrocode}
+\let\HyOrg@addtoreset\@addtoreset
+\def\@addtoreset#1#2{%
+ \HyOrg@addtoreset{#1}{#2}%
+ \expandafter\xdef\csname theH#1\endcsname{%
+ \expandafter\noexpand
+ \csname the\@ifundefined{theH#2}{}H#2\endcsname
+ .\noexpand\the\noexpand\value{#1}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\numberwithin}
+% A appropiate definition of hyperref's companion counter
+% (\cmd{\theH...}) is added for correct link names.
+% \begin{macrocode}
+%</package>
+%<*check>
+\checkpackage{amsmath}[1999/12/14 - 2000/06/06]
+\checkcommand\newcommand{\numberwithin}[3][\arabic]{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}{%
+ \@ifundefined{c@#3}{\@nocnterr{#3}}{%
+ \@addtoreset{#2}{#3}%
+ \@xp\xdef\csname the#2\endcsname{%
+ \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}%
+ }%
+ }%
+ }%
+}%
+%</check>
+%<*package>
+\@ifpackageloaded{amsmath}{%
+ \@ifpackagelater{amsmath}{1999/12/14}{%
+ \renewcommand*{\numberwithin}[3][\arabic]{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}{%
+ \@ifundefined{c@#3}{\@nocnterr{#3}}{%
+ \HyOrg@addtoreset{#2}{#3}%
+ \@xp\xdef\csname the#2\endcsname{%
+ \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}%
+ }%
+ \@xp\xdef\csname theH#2\endcsname{%
+ \@xp\@nx
+ \csname the\@ifundefined{theH#3}{}H#3\endcsname
+ .\@nx#1{#2}%
+ }%
+ }%
+ }%
+ }%
+ }{%
+ \Hy@WarningNoLine{%
+ \string\numberwithin\space of package `amsmath' %
+ only fixed\MessageBreak
+ for version 2000/06/06 v2.12 or newer%
+ }%
+ }%
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Included figures}
+% Simply intercept the low level graphics package macro.
+% \begin{macrocode}
+\ifHy@hyperfigures
+ \let\Hy@Gin@setfile\Gin@setfile
+ \def\Gin@setfile#1#2#3{%
+ \hyperimage{#3}{\Hy@Gin@setfile{#1}{#2}{#3}}%
+ }%
+\fi
+\Hy@DisableOption{hyperfigures}
+% \end{macrocode}
+%
+% \section{hyperindex entries}\label{hyperindex}
+% Internal command names are prefixed with \cmd{\HyInd@}.
+%
+% Hyper-indexing works crudely, by forcing code onto the end of the index
+% entry with the \verb+|+ feature; this puts a hyperlink around
+% the printed page numbers. It will not proceed if the author has already
+% used the \verb+|+ specifier for something like emboldening entries.
+% That would make Makeindex fail (cannot have two \verb+|+ specifiers).
+% The solution is for the author to use generic coding, and put in
+% the requisite |\hyperpage| in his/her own macros along with the boldness.
+%
+% This section is poor stuff; it's open to all sorts of abuse. Sensible
+% large projects will design their own indexing macros any bypass this.
+% \begin{macrocode}
+\ifHy@hyperindex
+ \def\HyInd@ParenLeft{(}%
+ \def\HyInd@ParenRight{)}%
+ \def\hyperindexformat#1#2{%
+ \let\HyOrg@hyperpage\hyperpage
+ \let\hyperpage\@firstofone
+ #1{\HyOrg@hyperpage{#2}}%
+ \let\hyperpage\HyOrg@hyperpage
+ }%
+ \Hy@nextfalse
+ \@ifpackageloaded{multind}{\Hy@nexttrue}{}%
+ \@ifpackageloaded{index}{\Hy@nexttrue}{}%
+ \@ifpackageloaded{amsmidx}{\Hy@nexttrue}{}%
+ \begingroup
+ \lccode`\|=\expandafter`\HyInd@EncapChar\relax
+ \lccode`\/=`\\\relax
+ \lowercase{\endgroup
+ \ifHy@next
+ \let\HyInd@org@wrindex\@wrindex
+ \def\@wrindex#1#2{\HyInd@@wrindex{#1}#2||\\}%
+ \def\HyInd@@wrindex#1#2|#3|#4\\{%
+ \ifx\\#3\\%
+ \HyInd@org@wrindex{#1}{#2|hyperpage}%
+ \else
+ \HyInd@@@wrindex{#1}{#2}#3\\%
+ \fi
+ }%
+ \def\HyInd@@@wrindex#1#2#3#4\\{%
+ \def\Hy@temp@A{#3}%
+ \ifcase0\ifx\Hy@temp@A\HyInd@ParenLeft 1\fi
+ \ifx\Hy@temp@A\HyInd@ParenRight 1\fi
+ \relax
+ \HyInd@org@wrindex{#1}{%
+ #2|hyperindexformat{/#3#4}%
+ }%
+ \else
+ \ifx\\#4\\%
+ \ifx\Hy@temp@A\HyInd@ParenRight
+ \HyInd@org@wrindex{#1}{#2|#3}%
+ \else
+ \HyInd@org@wrindex{#1}{#2|#3hyperpage}%
+ \fi
+ \else
+ \HyInd@org@wrindex{#1}{%
+ #2|#3hyperindexformat{/#4}%
+ }%
+ \fi
+ \fi
+ }%
+ \else
+ \def\@wrindex#1{\@@wrindex#1||\\}%
+ \def\@@wrindex#1|#2|#3\\{%
+ \if@filesw
+ \ifx\\#2\\%
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|hyperpage}{\thepage}%
+ }%
+ \else
+ \HyInd@@@wrindex{#1}#2\\%
+ \fi
+ \fi
+ \endgroup
+ \@esphack
+ }%
+ \def\HyInd@@@wrindex#1#2#3\\{%
+ \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|hyperindexformat{/#2#3}%
+ }{\thepage}%
+ }%
+ \else
+ \ifx\\#3\\%
+ \ifx\Hy@temp@A\HyInd@ParenRight
+ \HyInd@DefKey{#1}%
+ \ltx@IfUndefined{HyInd@(\HyInd@key)}{%
+ \let\Hy@temp\ltx@empty
+ }{%
+ \expandafter\let\expandafter\Hy@temp
+ \csname HyInd@(\HyInd@key)\endcsname
+ }%
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|#2\Hy@temp}{\thepage}%
+ }%
+ \else
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|#2hyperpage}{\thepage}%
+ }%
+ \HyInd@DefKey{#1}%
+ \expandafter
+ \gdef\csname HyInd@(\HyInd@key)\endcsname{%
+ hyperpage%
+ }%
+ \fi
+ \else
+ \protected@write\@indexfile{}{%
+ \string\indexentry{%
+ #1|#2hyperindexformat{/#3}%
+ }{\thepage}%
+ }%
+ \ifx\Hy@temp@A\HyInd@ParenLeft
+ \HyInd@DefKey{#1}%
+ \expandafter
+ \gdef\csname HyInd@(\HyInd@key)\endcsname{%
+ hyperindexformat{/#3}%
+ }%
+ \fi
+ \fi
+ \fi
+ }%
+ \def\HyInd@DefKey#1{%
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \edef\Hy@temp{#1}%
+ \ltx@onelevel@sanitize\Hy@temp
+ \global\let\HyInd@key\Hy@temp
+ \endgroup
+ }%
+ \fi
+ }%
+\fi
+\Hy@DisableOption{hyperindex}
+\Hy@DisableOption{encap}
+% \end{macrocode}
+%
+% \begin{macro}{\nohyperpage}
+% The definition of \cs{nohyperpage} is just a precaution.
+% It is used to mark code that does not belong to a page
+% number, but \cs{nohyperpage} is never executed.
+% \begin{macrocode}
+\def\nohyperpage#1{#1}
+% \end{macrocode}
+% \end{macro}
+% This again is quite flaky, but allow for the common situation of a
+% page range separated by en-rule. We split this into two different
+% hyperlinked pages.
+% \begin{macrocode}
+\def\hyperpage#1{%
+ \HyInd@hyperpage#1\nohyperpage{}\@nil
+}
+\def\HyInd@hyperpage#1\nohyperpage#2#3\@nil{%
+ \HyInd@@hyperpage{#1}%
+ #2%
+ \def\Hy@temp{#3}%
+ \ifx\Hy@temp\@empty
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyInd@hyperpage#3\@nil
+ }%
+ \fi
+}
+\def\HyInd@@hyperpage#1{\@hyperpage#1----\\}
+\def\@hyperpage#1--#2--#3\\{%
+ \ifx\\#2\\%
+ \@commahyperpage{#1}%
+ \else
+ \HyInd@pagelink{#1}--\HyInd@pagelink{#2}%
+ \fi
+}
+\def\@commahyperpage#1{\@@commahyperpage#1, ,\\}
+\def\@@commahyperpage#1, #2,#3\\{%
+ \ifx\\#2\\%
+ \HyInd@pagelink{#1}%
+ \else
+ \HyInd@pagelink{#1}, \HyInd@pagelink{#2}%
+ \fi
+}
+% \end{macrocode}
+%
+% The argument of \cmd{\hyperpage} can be empty. And the
+% line breaking algorithm of Makeindex can introduce spaces.
+% So we have to remove them.
+% \begin{macrocode}
+\def\HyInd@pagelink#1{%
+ \begingroup
+ \toks@={}%
+ \HyInd@removespaces#1 \@nil
+ \endgroup
+}
+\def\HyInd@removespaces#1 #2\@nil{%
+ \toks@=\expandafter{\the\toks@#1}%
+ \ifx\\#2\\%
+ \edef\x{\the\toks@}%
+ \ifx\x\@empty
+ \else
+ \hyperlink{page.\the\toks@}{\the\toks@}%
+ \fi
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyInd@removespaces#2\@nil
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+% \section{Compatibility with foiltex}
+%
+% \begin{macrocode}
+\@ifclassloaded{foils}{%
+ \providecommand*\ext@table{lot}%
+ \providecommand*\ext@figure{lof}%
+}{}
+% \end{macrocode}
+%
+% \section{Compatibility with seminar slide package}\label{seminar}
+% This requires \texttt{seminar.bg2}, version 1.6 or later.
+% Contributions by Denis Girou (\Email{denis.girou@idris.fr}).
+% \begin{macrocode}
+\@ifclassloaded{seminar}{%
+ \Hy@seminarslidestrue
+ \providecommand\theHslide{\arabic{slide}}%
+}{%
+ \Hy@seminarslidesfalse
+}
+\@ifpackageloaded{slidesec}{%
+ \providecommand\theHslidesection {\arabic{slidesection}}%
+ \providecommand\theHslidesubsection{%
+ \theHslidesection.\arabic{slidesubsection}%
+ }%
+ \def\slide@heading[#1]#2{%
+ \H@refstepcounter{slidesection}%
+ \@addtoreset{slidesubsection}{slidesection}%
+ \addtocontents{los}{%
+ \protect\l@slide{\the\c@slidesection}{\ignorespaces#1}%
+ {\@SCTR}{slideheading.\theslidesection}%
+ }%
+ \def\Hy@tempa{#2}%
+ \ifx\Hy@tempa\@empty
+ \else
+ {%
+ \edef\@currentlabel{%
+ \csname p@slidesection\endcsname\theslidesection
+ }%
+ \makeslideheading{#2}%
+ }%
+ \fi
+ \gdef\theslideheading{#1}%
+ \gdef\theslidesubheading{}%
+ \ifHy@bookmarksnumbered
+ \def\Hy@slidetitle{\theslidesection\space #1}%
+ \else
+ \def\Hy@slidetitle{#1}%
+ \fi
+ \ifHy@hypertexnames
+ \ifHy@naturalnames
+ \hyper@@anchor{slideheading.\theslidesection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theslidesection}%
+ {1}%
+ {toc}%
+ \else
+ \hyper@@anchor{slideheading.\theHslidesection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theHslidesection}%
+ {1}%
+ {toc}%
+ \fi
+ \else
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \hyper@@anchor{slideheading.\the\Hy@linkcounter}{\relax}%
+ \Hy@writebookmark
+ {\theslidesection}%
+ {\Hy@slidetitle}%
+ {slideheading.\the\Hy@linkcounter}%
+ {1}%
+ {toc}%
+ \fi
+ }%
+ \def\slide@subheading[#1]#2{%
+ \H@refstepcounter{slidesubsection}%
+ \addtocontents{los}{%
+ \protect\l@subslide{\the\c@slidesubsection}{\ignorespaces#1}%
+ {\@SCTR}{slideheading.\theslidesubsection}%
+ }%
+ \def\Hy@tempa{#2}%
+ \ifx\Hy@tempa\@empty
+ \else
+ {%
+ \edef\@currentlabel{%
+ \csname p@slidesubsection\endcsname\theslidesubsection
+ }%
+ \makeslidesubheading{#2}%
+ }%
+ \fi
+ \gdef\theslidesubheading{#1}%
+ \ifHy@bookmarksnumbered
+ \def\Hy@slidetitle{\theslidesubsection\space #1}%
+ \else
+ \def\Hy@slidetitle{#1}%
+ \fi
+ \ifHy@hypertexnames
+ \ifHy@naturalnames
+ \hyper@@anchor{slideheading.\theslidesubsection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesubsection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theslidesubsection}%
+ {2}%
+ {toc}%
+ \else
+ \hyper@@anchor{slideheading.\theHslidesubsection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesubsection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theHslidesubsection}%
+ {2}%
+ {toc}%
+ \fi
+ \else
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \hyper@@anchor{slideheading.\the\Hy@linkcounter}{\relax}%
+ \Hy@writebookmark
+ {\theslidesubsection}%
+ {\Hy@slidetitle}%
+ {slideheading.\the\Hy@linkcounter}%
+ {1}%
+ {toc}%
+ \fi
+ }%
+ \providecommand*{\listslidename}{List of Slides}%
+ \def\listofslides{%
+ \section*{%
+ \listslidename
+ \@mkboth{%
+ \expandafter\MakeUppercase\listslidename
+ }{%
+ \expandafter\MakeUppercase\listslidename
+ }%
+ }%
+ \def\l@slide##1##2##3##4{%
+ \slide@undottedcline{%
+ \slidenumberline{##3}{\hyperlink{##4}{##2}}%
+ }{}%
+ }%
+ \let\l@subslide\l@slide
+ \@startlos
+ }%
+ \def\slide@contents{%
+ \def\l@slide##1##2##3##4{%
+ \slide@cline{\slidenumberline{##3}{\hyperlink{##4}{##2}}}{##3}%
+ }%
+ \let\l@subslide\@gobblefour
+ \@startlos
+ }%
+ \def\Slide@contents{%
+ \def\l@slide##1##2##3##4{%
+ \ifcase\lslide@flag
+ \message{##1 ** \the\c@slidesection}%
+ \ifnum##1>\c@slidesection
+ \def\lslide@flag{1}%
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\Rightarrow\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \else
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\surd\;\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \fi
+ \or
+ \def\lslide@flag{2}%
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \or
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \fi
+ }%
+ \def\l@subslide##1##2##3##4{%
+ \ifnum\lslide@flag=1 %
+ \@undottedtocline{2}{3.8em}{3.2em}{\hyperlink{##4}{##2}}{}%
+ \fi
+ }%
+ \def\lslide@flag{0}%
+ \@startlos
+ }%
+}{}
+% \end{macrocode}
+% This breaks TeX4ht, so leave it to last.
+% Emend |\@setref| to put out a hypertext link as well as its
+% normal text (which is used as an anchor).
+% (|\endinput| have to be on the same line like |\fi|, or you
+% have to use |\expandafter| before.)
+% \begin{macrocode}
+\ifHy@texht
+ \expandafter\endinput
+\fi
+\let\real@setref\@setref
+\def\@setref#1#2#3{% csname, extract group, refname
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#3' on page \thepage \space undefined%
+ }%
+ \else
+ \expandafter\Hy@setref@link#1\@empty\@empty\@nil{#2}%
+ \fi
+}
+% \end{macrocode}
+% \cmd{\Hy@setref@link} extracts the reference information entries,
+% because \cmd{\hyper@@link} does not expand arguments for the
+% automatic link type detection.
+% \begin{macrocode}
+\def\Hy@setref@link#1#2#3#4#5#6\@nil#7{%
+ \begingroup
+ \toks0={\hyper@@link{#5}{#4}}%
+ \toks1=\expandafter{#7{#1}{#2}{#3}{#4}{#5}}%
+ \edef\x{\endgroup
+ \the\toks0 {\the\toks1 }%
+ }%
+ \x
+}
+\def\@pagesetref#1#2#3{% csname, extract macro, ref
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#3' on page \thepage \space undefined%
+ }%
+ \else
+ \protect\hyper@@link
+ {\expandafter\@fifthoffive#1}%
+ {page.\expandafter\@secondoffive#1}%
+ {\expandafter\@secondoffive#1}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+%<*check>
+\checklatex
+\checkcommand\def\@setref#1#2#3{%
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#3' on page \thepage\space undefined%
+ }%
+ \else
+ \expandafter#2#1\null
+ \fi
+}
+%</check>
+%<*package>
+% \end{macrocode}
+%
+% Now some extended referencing. |\ref*| and |\pageref*| are not linked,
+% and |\autoref| prefixes with a tag based on the type.
+% \begin{macrocode}
+\def\HyRef@StarSetRef#1{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \edef\x{\endgroup
+ \noexpand\HyRef@@StarSetRef
+ \expandafter\noexpand\csname r@\x\endcsname{\x}%
+ }%
+ \x
+}
+\def\HyRef@@StarSetRef#1#2#3{%
+ \ifx#1\@undefined
+ \let#1\relax
+ \fi
+ \real@setref#1#3{#2}%
+}
+\def\@refstar#1{%
+ \HyRef@StarSetRef{#1}\@firstoffive
+}
+\def\@pagerefstar#1{%
+ \HyRef@StarSetRef{#1}\@secondoffive
+}
+\def\@namerefstar#1{%
+ \HyRef@StarSetRef{#1}\@thirdoffive
+}
+\Hy@AtBeginDocument{%
+ \@ifpackageloaded{varioref}{%
+ \def\@Refstar#1{%
+ \HyRef@StarSetRef{#1}\HyRef@MakeUppercaseFirstOfFive
+ }%
+ \def\HyRef@MakeUppercaseFirstOfFive#1#2#3#4#5{%
+ \MakeUppercase#1%
+ }%
+ \DeclareRobustCommand*{\Ref}{%
+ \@ifstar\@Refstar\HyRef@Ref
+ }%
+ \def\HyRef@Ref#1{%
+ \hyperref[{#1}]{\Ref*{#1}}%
+ }%
+ \def\Vr@f#1{%
+ \leavevmode\unskip\vref@space
+ \hyperref[{#1}]{%
+ \Ref*{#1}%
+ \let\vref@space\nobreakspace
+ \@vpageref[\unskip]{#1}%
+ }%
+ }%
+ \def\vr@f#1{%
+ \leavevmode\unskip\vref@space
+ \begingroup
+ \let\T@pageref\@pagerefstar
+ \hyperref[{#1}]{%
+ \ref*{#1}%
+ \vpageref[\unskip]{#1}%
+ }%
+ \endgroup
+ }%
+ }{}%
+}
+\DeclareRobustCommand*{\autopageref}{%
+ \@ifstar{%
+ \HyRef@autopagerefname\pageref*%
+ }\HyRef@autopageref
+}
+\def\HyRef@autopageref#1{%
+ \hyperref[{#1}]{\HyRef@autopagerefname\pageref*{#1}}%
+}
+\def\HyRef@autopagerefname{%
+ \ltx@IfUndefined{pageautorefname}{%
+ \ltx@IfUndefined{pagename}{%
+ \Hy@Warning{No autoref name for `page'}%
+ }{%
+ \pagename\nobreakspace
+ }%
+ }{%
+ \pageautorefname\nobreakspace
+ }%
+}
+% \end{macrocode}
+% \cs{leavevmode} is added to make package wrapfigure happy, if
+% \cs{autoref} starts a paragraph.
+% \begin{macrocode}
+\DeclareRobustCommand*{\autoref}{%
+ \leavevmode
+ \@ifstar{\HyRef@autoref\@gobbletwo}{\HyRef@autoref\hyper@@link}%
+}
+\def\HyRef@autoref#1#2{%
+ \begingroup
+ \Hy@safe@activestrue
+ \expandafter\HyRef@autosetref\csname r@#2\endcsname{#2}{#1}%
+ \endgroup
+}
+\def\HyRef@autosetref#1#2#3{% link command, csname, refname
+ \HyRef@ShowKeysRef{#2}%
+ \ifcase 0\ifx#1\relax 1\fi\ifx#1\Hy@varioref@undefined 1\fi\relax
+ \edef\HyRef@thisref{%
+ \expandafter\@fourthoffive#1\@empty\@empty\@empty
+ }%
+ \expandafter\HyRef@testreftype\HyRef@thisref.\\%
+ \Hy@safe@activesfalse
+ #3{%
+ \expandafter\@fifthoffive#1\@empty\@empty\@empty
+ }{%
+ \expandafter\@fourthoffive#1\@empty\@empty\@empty
+ }{%
+ \HyRef@currentHtag
+ \expandafter\@firstoffive#1\@empty\@empty\@empty
+ \null
+ }%
+ \else
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#2' on page \thepage\space undefined%
+ }%
+ \fi
+}
+\def\HyRef@testreftype#1.#2\\{%
+ \ltx@IfUndefined{#1autorefname}{%
+ \ltx@IfUndefined{#1name}{%
+ \HyRef@StripStar#1\\*\\\@nil{#1}%
+ \ltx@IfUndefined{\HyRef@name autorefname}{%
+ \ltx@IfUndefined{\HyRef@name name}{%
+ \def\HyRef@currentHtag{}%
+ \Hy@Warning{No autoref name for `#1'}%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname\HyRef@name name\endcsname
+ \noexpand~%
+ }%
+ }%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand
+ \csname\HyRef@name autorefname\endcsname
+ \noexpand~%
+ }%
+ }%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname#1name\endcsname
+ \noexpand~%
+ }%
+ }%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname#1autorefname\endcsname
+ \noexpand~%
+ }%
+ }%
+}
+\def\HyRef@StripStar#1*\\#2\@nil#3{%
+ \def\HyRef@name{#2}%
+ \ifx\HyRef@name\HyRef@CaseStar
+ \def\HyRef@name{#1}%
+ \else
+ \def\HyRef@name{#3}%
+ \fi
+}
+\def\HyRef@CaseStar{*\\}
+\def\HyRef@currentHtag{}
+% \end{macrocode}
+%
+% Support for package |showkeys|.
+% \begin{macro}{\HyRef@ShowKeysRef}
+% \begin{macrocode}
+\let\HyRef@ShowKeysRef\@gobble
+\def\HyRef@ShowKeysInit{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname SK@@label\endcsname\relax
+ \else
+ \ifx\SK@ref\@empty
+ \else
+ \def\HyRef@ShowKeysRef{%
+ \SK@\SK@@ref
+ }%
+ \fi
+ \fi
+}
+\@ifpackageloaded{showkeys}{%
+ \HyRef@ShowKeysInit
+}{%
+ \Hy@AtBeginDocument{%
+ \@ifpackageloaded{showkeys}{%
+ \HyRef@ShowKeysInit
+ }{}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Defaults for the names that \cmd{\autoref} uses.
+% \begin{macrocode}
+\providecommand*\AMSautorefname{\equationautorefname}
+\providecommand*\Hfootnoteautorefname{\footnoteautorefname}
+\providecommand*\Itemautorefname{\itemautorefname}
+\providecommand*\itemautorefname{item}
+\providecommand*\equationautorefname{Equation}
+\providecommand*\footnoteautorefname{footnote}
+\providecommand*\itemautorefname{item}
+\providecommand*\figureautorefname{Figure}
+\providecommand*\tableautorefname{Table}
+\providecommand*\partautorefname{Part}
+\providecommand*\appendixautorefname{Appendix}
+\providecommand*\chapterautorefname{chapter}
+\providecommand*\sectionautorefname{section}
+\providecommand*\subsectionautorefname{subsection}
+\providecommand*\subsubsectionautorefname{subsubsection}
+\providecommand*\paragraphautorefname{paragraph}
+\providecommand*\subparagraphautorefname{subparagraph}
+\providecommand*\FancyVerbLineautorefname{line}
+\providecommand*\theoremautorefname{Theorem}
+\providecommand*\pageautorefname{page}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \section{Configuration files}
+%
+% \subsection{PS/PDF strings}
+%
+% Some drivers write PS or PDF strings. These strings are delimited
+% by parentheses, therefore a lonely unmatched parenthesis must be
+% avoided to avoid PS or PDF syntax errors. Also the backslash character
+% itself has to be protected.
+%
+% \begin{macro}{\Hy@pstringdef}
+% Therefore such strings should be passed through |\Hy@pstringdef|.
+% The first argument holds a macro for the result, the second
+% argument is the string that needs protecting.
+% Since version 1.30.0 pdf\TeX\ offers \cs{pdfescapestring}.
+% \begin{macrocode}
+%<*pdftex|dvipdfm|xetex|vtex|pdfmarkbase|dviwindo>
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdf@escapestring\endcsname\relax
+ \begingroup
+ \catcode`\|=0 %
+ \@makeother\\%
+ |@firstofone{|endgroup
+ |def|Hy@pstringdef#1#2{%
+ |begingroup
+ |edef~{|string~}%
+ |xdef|Hy@gtemp{#2}%
+ |endgroup
+ |let#1|Hy@gtemp
+ |@onelevel@sanitize#1%
+ |edef#1{|expandafter|Hy@ExchangeBackslash#1\|@nil}%
+ |edef#1{|expandafter|Hy@ExchangeLeftParenthesis#1(|@nil}%
+ |edef#1{|expandafter|Hy@ExchangeRightParenthesis#1)|@nil}%
+ }%
+ |def|Hy@ExchangeBackslash#1\#2|@nil{%
+ #1%
+ |ifx|\#2|\%%
+ |else
+ \\%
+ |ltx@ReturnAfterFi{%
+ |Hy@ExchangeBackslash#2|@nil
+ }%
+ |fi
+ }%
+ }%
+ \def\Hy@ExchangeLeftParenthesis#1(#2\@nil{%
+ #1%
+ \ifx\\#2\\%
+ \else
+ \@backslashchar(%
+ \ltx@ReturnAfterFi{%
+ \Hy@ExchangeLeftParenthesis#2\@nil
+ }%
+ \fi
+ }%
+ \def\Hy@ExchangeRightParenthesis#1)#2\@nil{%
+ #1%
+ \ifx\\#2\\%
+ \else
+ \@backslashchar)%
+ \ltx@ReturnAfterFi{%
+ \Hy@ExchangeRightParenthesis#2\@nil
+ }%
+ \fi
+ }%
+\else
+ \def\Hy@pstringdef#1#2{%
+ \begingroup
+ \edef~{\string~}%
+ \xdef\Hy@gtemp{\pdf@escapestring{#2}}%
+ \endgroup
+ \let#1\Hy@gtemp
+ }%
+\fi
+%</pdftex|dvipdfm|xetex|vtex|pdfmarkbase|dviwindo>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{pdftex}
+%
+% \begin{macrocode}
+%<*pdftex>
+\providecommand*{\XR@ext}{pdf}
+\Hy@setbreaklinks{true}
+\def\HyPat@ObjRef{%
+ [0-9]*[1-9][0-9]* 0 R%
+}
+% \end{macrocode}
+% This driver is for Han The Thanh's \TeX{} variant
+% which produces PDF directly. This has new primitives
+% to do PDF things, which usually translate almost directly to
+% PDF code, so there is a lot of flexibility which we do not at
+% present harness.
+%
+% Set PDF version if requested by option \textsf{pdfversion}.
+% \begin{itemize}
+% \item pdf\TeX\ 1.10a, 2003-01-16: \cs{pdfoptionpdfminorversion}
+% \item pdf\TeX\ 1.30, 2005-08-081: \cs{pdfminorversion}
+% \end{itemize}
+% \begin{macrocode}
+\let\Hy@pdfminorversion\relax
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdfminorversion\endcsname\relax
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname pdfoptionpdfminorversion\endcsname\relax
+ \else
+ \def\Hy@pdfminorversion{\pdfoptionpdfminorversion}%
+ \fi
+\else
+ \def\Hy@pdfminorversion{\pdfminorversion}%
+\fi
+\@ifundefined{Hy@pdfminorversion}{%
+ \PackageInfo{hyperref}{%
+ PDF version is not set, because pdfTeX is too old (<1.10a)%
+ }%
+}{%
+ \ifHy@ocgcolorlinks
+ \ifnum\Hy@pdfminorversion<5 %
+ \kvsetkeys{Hyp}{pdfversion=1.5}%
+ \fi
+ \fi
+ \ifHy@setpdfversion
+ \ifnum\Hy@pdfversion<5 %
+ \ltx@IfUndefined{pdfobjcompresslevel}{%
+ }{%
+ \ifHy@verbose
+ \Hy@InfoNoLine{%
+ PDF object streams are disabled, because they are%
+ \MessageBreak
+ not supported in requested PDF version %
+ 1.\Hy@pdfversion
+ }%
+ \fi
+ \pdfobjcompresslevel=\ltx@zero
+ }%
+ \fi
+ \ifnum\Hy@pdfminorversion=\Hy@pdfversion\relax
+ \else
+ \let\Hy@temp\ltx@empty
+ \def\Hy@temp@A#1#2{%
+ \ifnum#1>\ltx@zero
+ \edef\Hy@temp{%
+ \Hy@temp
+ \space\space
+ \the#1\space #2%
+ \ifnum#1=\ltx@one\else s\fi
+ \MessageBreak
+ }%
+ \fi
+ }%
+ \Hy@temp@A\pdflastobj{PDF object}%
+ \Hy@temp@A\pdflastxform{form XObject}%
+ \Hy@temp@A\pdflastximage{image XObject}%
+ \Hy@temp@A\pdflastannot{annotation}%
+ \ltx@IfUndefined{pdflastlink}{%
+ }{%
+ \Hy@temp@A\pdflastlink{link}%
+ }%
+ \ifx\Hy@temp\ltx@empty
+ \Hy@pdfminorversion=\Hy@pdfversion\relax
+ \else
+ \let\Hy@temp@A\ltx@empty
+ \ifnum\Hy@pdfversion=4 %
+ \IfFileExists{pdf14.sty}{%
+ \def\Hy@temp@A{%
+ \MessageBreak
+ Or \string\RequirePackage{pdf14} can be used%
+ \MessageBreak
+ before \string\documentclass\space as shortcut%
+ }%
+ }{}%
+ \fi
+ \Hy@WarningNoLine{%
+ The PDF version number could not be set,\MessageBreak
+ because some PDF objects are already written:%
+ \MessageBreak
+ \Hy@temp
+ The version should be set as early as possible:%
+ \MessageBreak
+ \space\space
+ \expandafter\string\Hy@pdfminorversion=\Hy@pdfversion
+ \string\relax
+ \ifnum\Hy@pdfversion<5 %
+ \ltx@ifundefined{pdfobjcompresslevel}{%
+ }{%
+ \MessageBreak
+ \space\space
+ \string\pdfobjcompresslevel=0\string\relax
+ }%
+ \fi
+ \Hy@temp@A
+ }%
+ \fi
+ \fi
+ \PackageInfo{hyperref}{%
+ \expandafter\string\Hy@pdfminorversion
+ :=\number\Hy@pdfversion\space
+ }%
+ \fi
+ \edef\Hy@pdfversion{\number\Hy@pdfminorversion}%
+}
+\Hy@DisableOption{pdfversion}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifHy@ocgcolorlinks
+ \pdf@ifdraftmode{}{%
+ \immediate\pdfobj{%
+ <<%
+ /Type/OCG%
+ /Name(View)%
+ /Usage<<%
+ /Print<<%
+ /PrintState/OFF%
+ >>%
+ /View<<%
+ /ViewState/ON%
+ >>%
+ >>%
+ >>%
+ }%
+ \edef\OBJ@OCG@view{\the\pdflastobj\space 0 R}%
+ \immediate\pdfobj{%
+ <<%
+ /Type/OCG%
+ /Name(Print)%
+ /Usage<<%
+ /Print<<%
+ /PrintState/ON%
+ >>%
+ /View<<%
+ /ViewState/OFF%
+ >>%
+ >>%
+ >>%
+ }%
+ \edef\OBJ@OCG@print{\the\pdflastobj\space 0 R}%
+ \immediate\pdfobj{%
+ [%
+ \OBJ@OCG@view\space\OBJ@OCG@print
+ ]%
+ }%
+ \edef\OBJ@OCGs{\the\pdflastobj\space 0 R}%
+ \pdfcatalog{%
+ /OCProperties<<%
+ /OCGs \OBJ@OCGs
+ /D<<%
+ /OFF[\OBJ@OCG@print]%
+ /AS[%
+ <<%
+ /Event/View%
+ /OCGs \OBJ@OCGs
+ /Category[/View]%
+ >>%
+ <<%
+ /Event/Print%
+ /OCGs \OBJ@OCGs
+ /Category[/Print]%
+ >>%
+ <<%
+ /Event/Export%
+ /OCGs \OBJ@OCGs
+ /Category[/Print]%
+ >>%
+ ]%
+ >>%
+ >>%
+ }%
+ \begingroup
+ \edef\x{\endgroup
+ \pdfpageresources{%
+ \the\pdfpageresources
+ /Properties<<%
+ /OCView \OBJ@OCG@view
+ /OCPrint \OBJ@OCG@print
+ >>%
+ }%
+ }%
+ \x
+ }%
+ \Hy@AtBeginDocument{%
+ \def\Hy@colorlink#1{%
+ \begingroup
+ \ifHy@ocgcolorlinks
+ \def\Hy@ocgcolor{#1}%
+ \setbox0=\hbox\bgroup\color@begingroup
+ \else
+ \HyColor@UseColor#1%
+ \fi
+ }%
+ \def\Hy@endcolorlink{%
+ \ifHy@ocgcolorlinks
+ \color@endgroup\egroup
+ \mbox{%
+ \pdfliteral page{/OC/OCPrint BDC}%
+ \rlap{\copy0}%
+ \pdfliteral page{EMC/OC/OCView BDC}%
+ \begingroup
+ \expandafter\HyColor@UseColor\Hy@ocgcolor
+ \box0 %
+ \endgroup
+ \pdfliteral page{EMC}%
+ }%
+ \fi
+ \endgroup
+ }%
+ }%
+\else
+ \Hy@DisableOption{ocgcolorlinks}%
+\fi
+% \end{macrocode}
+%
+% First, allow for some changes and additions to pdftex syntax:
+% \begin{macrocode}
+\def\setpdflinkmargin#1{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \expandafter\endgroup
+ \expandafter\pdflinkmargin\the\dimen@\relax
+}
+\ifx\pdfstartlink\@undefined% less than version 14
+ \let\pdfstartlink\pdfannotlink
+ \let\pdflinkmargin\@tempdima
+ \let\pdfxform\pdfform
+ \let\pdflastxform\pdflastform
+ \let\pdfrefxform\pdfrefform
+\else
+ \pdflinkmargin1pt %
+\fi
+% \end{macrocode}
+% First set up the default linking
+% \begin{macrocode}
+\providecommand*\@pdfview{XYZ}
+% \end{macrocode}
+% First define the anchors:
+% \begin{macrocode}
+\Hy@WrapperDef\new@pdflink#1{%
+ \ifhmode
+ \@savsf\spacefactor
+ \fi
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
+ \Hy@DestName\Hy@pstringDest\@pdfview
+ \Hy@RestoreLastskip
+ \ifhmode
+ \spacefactor\@savsf
+ \fi
+}
+\let\pdf@endanchor\@empty
+% \end{macrocode}
+% \begin{macro}{\Hy@DestName}
+% Wrap the call of \verb|\pdfdest name| in \cs{Hy@DestName}.
+% Then it can easier be catched by package |hypdestopt|.
+% \begin{macrocode}
+\def\Hy@DestName#1#2{%
+ \pdfdest name{#1}#2\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Now the links; the interesting part here is the set of attributes
+% which define how the link looks. We probably want to add a border
+% and color it, but there are other choices. This directly translates
+% to PDF code, so consult the manual for how to change this. We will
+% add an interface at some point.
+% \begin{macrocode}
+\providecommand*\@pdfborder{0 0 1}
+\providecommand*\@pdfborderstyle{}
+\def\Hy@undefinedname{UNDEFINED}
+\def\find@pdflink#1#2{%
+ \leavevmode
+ \protected@edef\Hy@testname{#2}%
+ \ifx\Hy@testname\@empty
+ \Hy@Warning{%
+ Empty destination name,\MessageBreak
+ using `\Hy@undefinedname'%
+ }%
+ \let\Hy@testname\Hy@undefinedname
+ \else
+ \Hy@pstringdef\Hy@testname{%
+ \expandafter\HyperDestNameFilter\expandafter{\Hy@testname}%
+ }%
+ \fi
+ \Hy@StartlinkName{%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\CurrentBorderColor\relax
+ \else
+ /C[\CurrentBorderColor]%
+ \fi
+ }\Hy@testname
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+}
+\def\Hy@StartlinkName#1#2{%
+ \pdfstartlink attr{#1}goto name{#2}\relax
+}
+\def\close@pdflink{%
+ \Hy@endcolorlink
+ \Hy@VerboseLinkStop
+ \pdfendlink
+}
+\def\hyper@anchor#1{%
+ \new@pdflink{#1}\anchor@spot\pdf@endanchor
+}
+\def\hyper@anchorstart#1{%
+ \new@pdflink{#1}%
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \pdf@endanchor
+ \Hy@activeanchorfalse
+}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \ltx@IfUndefined{@#1bordercolor}{%
+ \let\CurrentBorderColor\relax
+ }{%
+ \edef\CurrentBorderColor{\csname @#1bordercolor\endcsname}%
+ }%
+ \find@pdflink{#1}{#2}%
+}
+\def\hyper@linkend{\close@pdflink}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \ltx@IfUndefined{@#1bordercolor}{%
+ \let\CurrentBorderColor\relax
+ }{%
+ \edef\CurrentBorderColor{\csname @#1bordercolor\endcsname}%
+ }%
+ \find@pdflink{#1}{#2}#3\Hy@xspace@end
+ \close@pdflink
+}
+\let\CurrentBorderColor\@linkbordercolor
+\def\hyper@linkurl#1#2{%
+ \begingroup
+ \Hy@pstringdef\Hy@pstringURI{#2}%
+ \hyper@chars
+ \leavevmode
+ \pdfstartlink
+ attr{%
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@urlbordercolor\relax
+ \else
+ /C[\@urlbordercolor]%
+ \fi
+ }%
+ user{%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ /A<<%
+ /Type/Action%
+ /S/URI%
+ /URI(\Hy@pstringURI)%
+ \ifHy@href@ismap
+ /IsMap true%
+ \fi
+ \Hy@href@nextactionraw
+ >>%
+ }%
+ \relax
+ \Hy@colorlink\@urlcolor#1\Hy@xspace@end
+ \close@pdflink
+ \endgroup
+}
+\def\hyper@linkfile#1#2#3{% anchor text, filename, linkname
+ \begingroup
+ \def\Hy@pstringF{#2}%
+ \Hy@CleanupFile\Hy@pstringF
+ \Hy@pstringdef\Hy@pstringF\Hy@pstringF
+ \Hy@pstringdef\Hy@pstringD{#3}%
+ \Hy@MakeRemoteAction
+ \leavevmode
+ \pdfstartlink
+ attr{%
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@filebordercolor\relax
+ \else
+ /C[\@filebordercolor]%
+ \fi
+ }%
+ user {%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ /A<<%
+ /F(\Hy@pstringF)%
+ /S/GoToR%
+ \Hy@SetNewWindow
+% \end{macrocode}
+% If |#3| is empty, page 0; if its a number, Page number, otherwise
+% a named destination.
+% \begin{verbatim}
+% \afterassignment\xxx\count@=0\foo!%
+%
+%\def\xxx#1!{%
+% \ifx\xxx#1\xxx
+% foo was an integer
+% \else
+% it wasnt
+% \fi}
+% \end{verbatim}
+% \begin{macrocode}
+ \ifx\\#3\\%
+ /D[\Hy@href@page\@pdfremotestartview]%
+ \else
+ /D(\Hy@pstringD)%
+ \fi
+ \Hy@href@nextactionraw
+ >>%
+ }%
+ \relax
+ \Hy@colorlink\@filecolor#1\Hy@xspace@end
+ \close@pdflink
+ \endgroup
+}
+\def\@hyper@launch run:#1\\#2#3{% filename, anchor text linkname
+ \begingroup
+ \Hy@pstringdef\Hy@pstringF{#1}%
+ \Hy@pstringdef\Hy@pstringP{#3}%
+ \leavevmode
+ \pdfstartlink
+ attr{%
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@runbordercolor\relax
+ \else
+ /C[\@runbordercolor]%
+ \fi
+ }%
+ user {%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ /A<<%
+ /F(\Hy@pstringF)%
+ /S/Launch%
+ \Hy@SetNewWindow
+ \ifx\\#3\\%
+ \else
+ /Win<</P(\Hy@pstringP)/F(\Hy@pstringF)>>%
+ \fi
+ \Hy@href@nextactionraw
+ >>%
+ }%
+ \relax
+ \Hy@colorlink\@runcolor#2\Hy@xspace@end
+ \close@pdflink
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macro}{\PDF@SetupDox}
+% \begin{macrocode}
+\def\PDF@SetupDoc{%
+ \ifx\@pdfpagescrop\@empty
+ \else
+ \edef\process@me{%
+ \pdfpagesattr={%
+ /CropBox[\@pdfpagescrop]%
+ \expandafter\ifx\expandafter\\\the\pdfpagesattr\\%
+ \else
+ ^^J\the\pdfpagesattr
+ \fi
+ }%
+ }%
+ \process@me
+ \fi
+ \Hy@pstringdef\Hy@pstringB{\@baseurl}%
+ \pdfcatalog{%
+ /PageMode/\@pdfpagemode
+ \ifx\@baseurl\@empty
+ \else
+ /URI<</Base(\Hy@pstringB)>>%
+ \fi
+ }%
+ \ifx\@pdfstartpage\@empty
+ \else
+ \ifx\@pdfstartview\@empty
+ \else
+ openaction goto page\@pdfstartpage{\@pdfstartview}%
+ \fi
+ \fi
+ \edef\Hy@temp{%
+ \ifHy@pdftoolbar\else /HideToolbar true\fi
+ \ifHy@pdfmenubar\else /HideMenubar true\fi
+ \ifHy@pdfwindowui\else /HideWindowUI true\fi
+ \ifHy@pdffitwindow /FitWindow true\fi
+ \ifHy@pdfcenterwindow /CenterWindow true\fi
+ \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
+ \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
+ \Hy@UseNameKey{Direction}\@pdfdirection
+ \Hy@UseNameKey{ViewArea}\@pdfviewarea
+ \Hy@UseNameKey{ViewClip}\@pdfviewclip
+ \Hy@UseNameKey{PrintArea}\@pdfprintarea
+ \Hy@UseNameKey{PrintClip}\@pdfprintclip
+ \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
+ \Hy@UseNameKey{Duplex}\@pdfduplex
+ \ifx\@pdfpicktraybypdfsize\@empty
+ \else
+ /PickTrayByPDFSize \@pdfpicktraybypdfsize
+ \fi
+ \ifx\@pdfprintpagerange\@empty
+ \else
+ /PrintPageRange[\@pdfprintpagerange]%
+ \fi
+ \ifx\@pdfnumcopies\@empty
+ \else
+ /NumCopies \@pdfnumcopies
+ \fi
+ }%
+ \pdfcatalog{%
+ \ifx\Hy@temp\@empty
+ \else
+ /ViewerPreferences<<\Hy@temp>>%
+ \fi
+ \Hy@UseNameKey{PageLayout}\@pdfpagelayout
+ \ifx\@pdflang\relax
+ \else
+ /Lang(\@pdflang)%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PDF@FinishDoc}
+% \begin{macrocode}
+\def\PDF@FinishDoc{%
+ \pdf@ifdraftmode{}{%
+ \Hy@UseMaketitleInfos
+ \HyInfo@GenerateAddons
+ \pdfinfo{%
+ /Author(\@pdfauthor)%
+ /Title(\@pdftitle)%
+ /Subject(\@pdfsubject)%
+ /Creator(\@pdfcreator)%
+ \ifx\@pdfcreationdate\@empty
+ \else
+ /CreationDate(\@pdfcreationdate)%
+ \fi
+ \ifx\@pdfmoddate\@empty
+ \else
+ /ModDate(\@pdfmoddate)%
+ \fi
+ \ifx\@pdfproducer\relax
+ \else
+ /Producer(\@pdfproducer)%
+ \fi
+ /Keywords(\@pdfkeywords)%
+ \ifx\@pdftrapped\@empty
+ \else
+ /Trapped/\@pdftrapped
+ \fi
+ \HyInfo@Addons
+ }%
+ }%
+ \Hy@DisableOption{pdfauthor}%
+ \Hy@DisableOption{pdftitle}%
+ \Hy@DisableOption{pdfsubject}%
+ \Hy@DisableOption{pdfcreator}%
+ \Hy@DisableOption{addtopdfcreator}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfmoddate}%
+ \Hy@DisableOption{pdfproducer}%
+ \Hy@DisableOption{pdfkeywords}%
+ \Hy@DisableOption{pdftrapped}%
+ \Hy@DisableOption{pdfinfo}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hyper@pagetransition}
+% \cmd{\@pdfpagetransition} is initialized with \cmd{\relax}. So
+% it indicates, if option pdfpagetransition is used. First previous
+% |/Trans| entries are removed. If a new |/Trans| key exists, it is
+% appended to \cmd{\pdfpageattr}.
+% \begin{macrocode}
+\def\hyper@pagetransition{%
+ \ifx\@pdfpagetransition\relax
+ \else
+ \expandafter\Hy@RemoveTransPageAttr
+ \the\pdfpageattr^^J/Trans{}>>\END
+ \ifx\@pdfpagetransition\@empty
+ \else
+ \edef\@processme{%
+ \global\pdfpageattr{%
+ \the\pdfpageattr
+ ^^J/Trans << /S /\@pdfpagetransition\space >>%
+ }%
+ }%
+ \@processme
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@RemoveTransPageAttr}
+% Macro \cmd{\Hy@RemoveTransPageAttr} removes a |/Trans|
+% entry from \cmd{\pdfpageattr}. It is called with
+% the end marker |^^J/Trans{}>>\END|. The trick is the
+% empty group that does not appear in legal
+% \cmd{\pdfpageattr} code. It appears in argument
+% |#2| and shows, whether the parameter text
+% catches a really |/Trans| object or the end marker.
+% \begin{macrocode}
+\gdef\Hy@RemoveTransPageAttr#1^^J/Trans#2#3>>#4\END{%
+ \ifx\\#2\\%
+ \global\pdfpageattr{#1}%
+ \else
+ \Hy@RemoveTransPageAttr#1#4\END
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hyper@pageduration}
+% \cmd{\@pdfpageduration} is initialized with \cmd{\relax}. So
+% it indicates, if option pdfpageduration is used. First previous
+% |/Dur| entries are removed. If a new |/Dur| key exists, it is
+% appended to \cmd{\pdfpageattr}.
+% \begin{macrocode}
+\def\hyper@pageduration{%
+ \ifx\@pdfpageduration\relax
+ \else
+ \expandafter
+ \Hy@RemoveDurPageAttr\the\pdfpageattr^^J/Dur{} \END
+ \ifx\@pdfpageduration\@empty
+ \else
+ \edef\@processme{%
+ \global\pdfpageattr{%
+ \the\pdfpageattr
+ ^^J/Dur \@pdfpageduration\space
+ }%
+ }%
+ \@processme
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@RemoveDurPageAttr}
+% Macro \cmd{\Hy@RemoveDurPageAttr} removes a |/Dur|
+% entry from \cmd{\pdfpageattr}. It is called with
+% the end marker |^^J/Dur{} \END|. The trick is the
+% empty group that does not appear in legal
+% \cmd{\pdfpageattr} code. It appears in argument
+% |#2| and shows, whether the parameter text
+% catches a really |/Dur| object or the end marker.
+% \begin{macrocode}
+\gdef\Hy@RemoveDurPageAttr#1^^J/Dur#2#3 #4\END{%
+ \ifx\\#2\\%
+ \global\pdfpageattr{#1}%
+ \else
+ \Hy@RemoveDurPageAttr#1#4\END
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hyper@pagehidden}
+% The boolean value of the key |/Hid| is stored in switch
+% \cmd{\ifHy@pdfpagehidden}.
+% First previous |/Hid| entries are removed, then the new
+% one is appended, if the value is true (the PDF default
+% is false).
+% \begin{macrocode}
+\def\hyper@pagehidden{%
+ \ifHy@useHidKey
+ \expandafter
+ \Hy@RemoveHidPageAttr\the\pdfpageattr^^J/Hid{} \END
+ \ifHy@pdfpagehidden
+ \edef\@processme{%
+ \global\pdfpageattr{%
+ \the\pdfpageattr
+ ^^J/Hid true % SPACE
+ }%
+ }%
+ \@processme
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Hy@RemoveHidPageAttr}
+% Macro \cmd{\Hy@RemoveHidPageAttr} removes a |/Hid|
+% entry from \cmd{\pdfpageattr}. It is called with
+% the end marker |^^J/Hid{} \END|. The trick is the
+% empty group that does not appear in legal
+% \cmd{\pdfpageattr} code. It appears in argument
+% |#2| and shows, whether the parameter text
+% catches a really |/Hid| object or the end marker.
+% \begin{macrocode}
+\gdef\Hy@RemoveHidPageAttr#1^^J/Hid#2#3 #4\END{%
+ \ifx\\#2\\%
+ \global\pdfpageattr{#1}%
+ \else
+ \Hy@RemoveHidPageAttr#1#4\END
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\pdf@ifdraftmode{}{%
+ \g@addto@macro\Hy@EveryPageHook{%
+ \hyper@pagetransition
+ \hyper@pageduration
+ \hyper@pagehidden
+ }%
+}
+% \end{macrocode}
+%
+% Also Xe\TeX\ support \cs{pdfpagewidth} and \cs{pdfpageheight},
+% but it does not provide \cs{pdfhorigin} and \cs{pdfvorigin}.
+% \begin{macrocode}
+%</pdftex>
+%<*pdftex|xetex>
+\Hy@AtBeginDocument{%
+ \ifHy@setpagesize
+ \expandafter\@firstofone
+ \else
+ \expandafter\@gobble
+ \fi
+ {%
+ \@ifclassloaded{seminar}{%
+%<*pdftex>
+ \setlength{\pdfhorigin}{1truein}%
+ \setlength{\pdfvorigin}{1truein}%
+%</pdftex>
+ \ifportrait
+ \ifdim\paperwidth=\z@
+ \else
+ \setlength{\pdfpagewidth}{\strip@pt\paperwidth truept}%
+ \fi
+ \ifdim\paperheight=\z@
+ \else
+ \setlength{\pdfpageheight}{\strip@pt\paperheight truept}%
+ \fi
+ \else
+ \ifdim\paperheight=\z@
+ \else
+ \setlength{\pdfpagewidth}{\strip@pt\paperheight truept}%
+ \fi
+ \ifdim\paperwidth=\z@
+ \else
+ \setlength{\pdfpageheight}{\strip@pt\paperwidth truept}%
+ \fi
+ \fi
+ }{%
+ \ltx@IfUndefined{stockwidth}{%
+ \ifdim\paperwidth>\z@
+ \setlength{\pdfpagewidth}{\paperwidth}%
+ \fi
+ \ifdim\paperheight>\z@
+ \setlength{\pdfpageheight}{\paperheight}%
+ \fi
+ }{%
+ \ifdim\stockwidth>\z@
+ \setlength{\pdfpagewidth}{\stockwidth}%
+ \fi
+ \ifdim\stockheight>\z@
+ \setlength{\pdfpageheight}{\stockheight}%
+ \fi
+ }%
+ }%
+ }%
+ \Hy@DisableOption{setpagesize}%
+}
+%</pdftex|xetex>
+%<*pdftex>
+\def\Acrobatmenu#1#2{%
+ \Hy@Acrobatmenu{#1}{#2}{%
+ \leavevmode
+ \EdefEscapeName\Hy@temp@menu{#1}%
+ \pdfstartlink
+ attr{%
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@menubordercolor\relax
+ \else
+ /C[\@menubordercolor]%
+ \fi
+ }%
+ user{%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ /A<<%
+ /S/Named%
+ /N/\Hy@temp@menu
+ \Hy@href@nextactionraw
+ >>%
+ }%
+ \relax
+ \Hy@colorlink\@menucolor#2%
+ \close@pdflink
+ }%
+}
+% \end{macrocode}
+%
+% \subsubsection{Fix for problem with different nesting levels}
+%
+% \cs{AtBeginShipoutFirst} adds an additional box layer around
+% the first output page. This disturbs pdf\TeX's low level
+% link commands \cs{pdfstartlink} and \cs{pdfendlink}, if a
+% link is broken across the first and second output page.
+%
+% The problem could be fixed by replacing \cs{AtBeginShipoutFirst},
+% because the box layer is not necessary for pdf\TeX -- no \cs{special}s
+% need to be inserted. However it's easier to add an additional
+% box level for the pages after the first one. Also \cs{AtBeginShipoutFirst}
+% could be invoked independently from hyperref.
+%
+% Since version 2011/10/05 v1.16 of package `atbegshi'
+% \cs{AtBeginShipoutFirst} does not add a additional box layer.
+% \begin{macrocode}
+\def\Hy@FixNotFirstPage{%
+ \gdef\Hy@FixNotFirstPage{%
+ \setbox\AtBeginShipoutBox=\hbox{%
+ \copy\AtBeginShipoutBox
+ }%
+ }%
+}
+\ltx@ifpackagelater{atbegshi}{2011/10/05}{%
+}{%
+ \AtBeginShipout{\Hy@FixNotFirstPage}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</pdftex>
+% \end{macrocode}
+%
+% \subsection{hypertex}
+%
+% The Hyper\TeX\ specification (this is
+% borrowed from an article by Arthur Smith)
+% says that conformant viewers/translators
+% must recognize the following set of |\special| commands:
+% \begin{description}
+% \item[href:] |html:<a href = "href_string">|
+% \item[name:] |html:<a name = "name_string">|
+% \item[end:] |html:</a>|
+% \item[image:] |html:<img src = "href_string">|
+% \item[base\_name:] |html:<base href = "href_string">|
+% \end{description}
+%
+% The \emph{href}, \emph{name} and \emph{end} commands are used to do
+% the basic hypertext operations of establishing links between sections
+% of documents. The \emph{image} command is intended (as with current
+% html viewers) to place an image of arbitrary graphical
+% format on the page in the current location. The \emph{base\_name}
+% command is be used to communicate to the \emph{dvi} viewer the full (URL)
+% location of the current document so that
+% files specified by relative URL's may be retrieved correctly.
+%
+% The \emph{href} and \emph{name} commands must be paired with an
+% \emph{end} command later in
+% the \TeX{} file --- the \TeX{} commands between the two ends of a pair
+% form an \emph{anchor} in the document. In the case of an \emph{href}
+% command, the \emph{anchor} is to be highlighted in the
+% \emph{dvi} viewer, and
+% when clicked on will cause the scene to shift to the destination
+% specified by \emph{href\_string}. The \emph{anchor} associated with a
+% name command represents a possible location to which other hypertext
+% links may refer, either as local references (of the form
+% \texttt{href="\#name\_string"} with the \emph{name\_string}
+% identical to the one in the name command) or as part of a URL (of the
+% form \emph{URL\#name\_string}). Here \emph{href\_string} is a valid
+% URL or local identifier, while name\_string could be any string at
+% all: the only caveat is that `|"|' characters should be escaped with a
+% backslash (|\|), and if it looks like a URL name it may cause
+% problems.
+%
+% \begin{macrocode}
+%<*hypertex>
+\providecommand*{\XR@ext}{dvi}
+\let\PDF@FinishDoc\ltx@empty
+\def\PDF@SetupDoc{%
+ \ifx\@baseurl\@empty
+ \else
+ \special{html:<base href="\@baseurl">}%
+ \fi
+}
+\Hy@WrapperDef\hyper@anchor#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \let\protect=\string
+ \hyper@chars
+ \special{html:<a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+ \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
+ \special{html:</a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\Hy@WrapperDef\hyper@anchorstart#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \hyper@chars
+ \special{html:<a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \special{html:</a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\def\@urltype{url}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\@urltype
+ \special{html:<a href=\hyper@quote#2\hyper@quote>}%
+ \else
+ \begingroup
+ \hyper@chars
+ \special{html:<a href=%
+ \hyper@quote\#\HyperDestNameFilter{#2}\hyper@quote>}%
+ \endgroup
+ \fi
+}
+\def\hyper@linkend{%
+ \special{html:</a>}%
+ \Hy@endcolorlink
+}
+\def\hyper@linkfile#1#2#3{%
+ \hyper@linkurl{#1}{\Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi}%
+}
+\def\hyper@linkurl#1#2{%
+% \end{macrocode}
+% If we want to raise up the final link |\special|, we need to
+% get its height; ask me why \LaTeX\ constructs make this totally
+% foul up, and make us revert to basic \TeX. I do not know.
+% \begin{macrocode}
+ \leavevmode
+ \ifHy@raiselinks
+ \Hy@SaveSpaceFactor
+ \Hy@SaveSavedSpaceFactor
+ \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
+ \Hy@RestoreSavedSpaceFactor
+ \@linkdim\dp\@tempboxa
+ \lower\@linkdim\hbox{%
+ \hyper@chars
+ \special{html:<a href=\hyper@quote#2\hyper@quote>}%
+ }%
+ \Hy@colorlink\@urlcolor
+ \Hy@RestoreSpaceFactor
+ #1%
+ \Hy@SaveSpaceFactor
+ \@linkdim\ht\@tempboxa
+% \end{macrocode}
+% Because of the interaction with the dvihps processor, we have to subtract a
+% little from the height. This is not clean, or checked. Check with Mark
+% Doyle about what gives here. It may not be needed with
+% the new dvips (Jan 1997).
+% \begin{macrocode}
+ \advance\@linkdim by -6.5\p@
+ \raise\@linkdim\hbox{\special{html:</a>}}%
+ \Hy@endcolorlink
+ \Hy@RestoreSpaceFactor
+ \else
+ \begingroup
+ \hyper@chars
+ \special{html:<a href=\hyper@quote#2\hyper@quote>}%
+ \Hy@colorlink\@urlcolor#1\Hy@xspace@end
+ \special{html:</a>}%
+ \Hy@endcolorlink
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+% Very poor implementation of \cs{hyper@link} without considering |#1|.
+% \begin{macrocode}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \hyper@linkurl{#3}{\#\HyperDestNameFilter{#2}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\hyper@image#1#2{%
+ \begingroup
+ \hyper@chars
+ \special{html:<img src=\hyper@quote#1\hyper@quote>}%
+ \endgroup
+}
+%</hypertex>
+%<*dviwindo>
+% \end{macrocode}
+% \subsection{dviwindo}
+% [This was developed by David Carlisle].
+% Within a file dviwindo hyperlinking is used, for external
+% URL's a call to |\wwwbrowser| is made. (You can define
+% this command before or after loading the hyperref package
+% if the default |c:/netscape/netscape| is not suitable)
+% Dviwindo could in fact handle external links to dvi files on
+% the same machine without calling a web browser, but that would
+% mean parsing the URL to recognise such, and this is currently
+% not done.
+%
+% This was more or less blindly copied from the hypertex cfg.
+% For dviwindo, \LaTeX{} must specify the size of the active area
+% for links. For some hooks this information is available
+% but for some, the start and end of the link are
+% specified separately in which case a fixed size area
+% of 10000000sp wide by |\baselineskip| high is used.
+% \begin{macrocode}
+\providecommand*{\XR@ext}{dvi}
+\providecommand*\wwwbrowser{c:\string\netscape\string\netscape}
+\Hy@WrapperDef\hyper@anchor#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \let\protect=\string
+ \special{mark: #1}%
+ \endgroup
+ \Hy@activeanchortrue
+ \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\Hy@WrapperDef\hyper@anchorstart#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \special{mark: #1}%
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ \special{button: %
+ 10000000 %
+ \number\baselineskip\space
+ #2%
+ }%
+}
+\def\hyper@linkend{%
+ \Hy@endcolorlink
+}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \leavevmode
+ \ifHy@raiselinks
+ \Hy@SaveSpaceFactor
+ \Hy@SaveSavedSpaceFactor
+ \sbox\@tempboxa{\Hy@RestoreSpaceFactor#3}%
+ \Hy@RestoreSavedSpaceFactor
+ \@linkdim\dp\@tempboxa
+ \lower\@linkdim\hbox{%
+ \special{button: %
+ \number\wd\@tempboxa\space
+ \number\ht\@tempboxa\space
+ #2%
+ }%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ \Hy@RestoreSpaceFactor
+ #3\Hy@xspace@end
+ \Hy@SaveSpaceFactor
+ \Hy@endcolorlink
+ }%
+ \@linkdim\ht\@tempboxa
+ \advance\@linkdim by -6.5\p@
+ \raise\@linkdim\hbox{}%
+ \Hy@RestoreSpaceFactor
+ \else
+ \special{button: %
+ \number\wd\@tempboxa\space
+ \number\ht\@tempboxa\space
+ #2%
+ }%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ #3\Hy@xspace@end
+ \Hy@endcolorlink
+ \fi
+}
+\def\hyper@linkurl#1#2{%
+ \begingroup
+ \hyper@chars
+ \leavevmode
+ \ifHy@raiselinks
+ \Hy@SaveSpaceFactor
+ \Hy@SaveSavedSpaceFactor
+ \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
+ \Hy@RestoreSavedSpaceFactor
+ \@linkdim\dp\@tempboxa
+ \lower\@linkdim\hbox{%
+ \special{button: %
+ \number\wd\@tempboxa\space
+ \number\ht\@tempboxa\space
+ launch: \wwwbrowser\space
+ #2%
+ }%
+ \Hy@colorlink\@urlcolor
+ \Hy@RestoreSpaceFactor
+ #1\Hy@xspace@end
+ \Hy@SaveSpaceFactor
+ \Hy@endcolorlink
+ }%
+ \@linkdim\ht\@tempboxa
+ \advance\@linkdim by -6.5\p@
+ \raise\@linkdim\hbox{}%
+ \Hy@RestoreSpaceFactor
+ \else
+ \special{button: %
+ \number\wd\@tempboxa\space
+ \number\ht\@tempboxa\space
+ launch: \wwwbrowser\space
+ #2%
+ }%
+ \Hy@colorlink\@urlcolor
+ #1\Hy@xspace@end
+ \Hy@endcolorlink
+ \fi
+ \endgroup
+}
+\def\hyper@linkfile#1#2#3{%
+ \begingroup
+ \hyper@chars
+ \leavevmode
+ \ifHy@raiselinks
+ \Hy@SaveSpaceFactor
+ \Hy@SaveSavedSpaceFactor
+ \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
+ \Hy@RestoreSavedSpaceFactor
+ \@linkdim\dp\@tempboxa
+ \lower\@linkdim\hbox{%
+ \special{button: %
+ \number\wd\@tempboxa\space
+ \number\ht\@tempboxa\space
+ #3,%
+ file: #2%
+ }%
+ \Hy@colorlink\@filecolor
+ \Hy@RestoreSpaceFactor
+ #1\Hy@xspace@end
+ \Hy@SaveSpaceFactor
+ \Hy@endcolorlink
+ }%
+ \@linkdim\ht\@tempboxa
+ \advance\@linkdim by -6.5\p@
+ \raise\@linkdim\hbox{}%
+ \Hy@RestoreSpaceFactor
+ \else
+ \special{button: %
+ \number\wd\@tempboxa\space
+ \number\ht\@tempboxa\space
+ #3,%
+ file: #2%
+ }%
+ \Hy@colorlink\@filecolor
+ #1\Hy@xspace@end
+ \Hy@endcolorlink
+ \fi
+ \endgroup
+}
+\HyInfo@AddonUnsupportedtrue
+\def\PDF@FinishDoc{%
+ \Hy@UseMaketitleInfos
+ \HyInfo@TrappedUnsupported
+ \special{PDF: Keywords \@pdfkeywords}%
+ \special{PDF: Title \@pdftitle}%
+ \special{PDF: Creator \@pdfcreator}%
+ \ifx\@pdfcreationdate\@empty
+ \else
+ \special{PDF: CreationDate \@pdfcreationdate}%
+ \fi
+ \ifx\@pdfmoddate\@empty
+ \else
+ \special{PDF: ModDate \@pdfmoddate}%
+ \fi
+ \special{PDF: Author \@pdfauthor}%
+ \ifx\@pdfproducer\relax
+ \else
+ \special{PDF: Producer \@pdfproducer}%
+ \fi
+ \special{PDF: Subject \@pdfsubject}%
+ \Hy@DisableOption{pdfauthor}%
+ \Hy@DisableOption{pdftitle}%
+ \Hy@DisableOption{pdfsubject}%
+ \Hy@DisableOption{pdfcreator}%
+ \Hy@DisableOption{addtopdfcreator}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfmoddate}%
+ \Hy@DisableOption{pdfproducer}%
+ \Hy@DisableOption{pdfkeywords}%
+ \Hy@DisableOption{pdftrapped}%
+ \Hy@DisableOption{pdfinfo}%
+}
+\def\PDF@SetupDoc{%
+ \ifx\@baseurl\@empty
+ \else
+ \special{PDF: Base \@baseurl}%
+ \fi
+ \ifx\@pdfpagescrop\@empty\else
+ \special{PDF: BBox \@pdfpagescrop}%
+ \fi
+ \def\Hy@temp{}%
+ \ifx\@pdfstartpage\@empty
+ \else
+ \ifx\@pdfstartview\@empty
+ \else
+ \edef\Hy@temp{%
+ ,Page=\@pdfstartpage
+ ,View=\@pdfstartview
+ }%
+ \fi
+ \fi
+ \edef\Hy@temp{%
+ \noexpand\pdfmark{%
+ pdfmark=/DOCVIEW,%
+ PageMode=/\@pdfpagemode
+ \Hy@temp
+ }%
+ }%
+ \Hy@temp
+ \ifx\@pdfpagescrop\@empty
+ \else
+ \pdfmark{pdfmark=/PAGES,CropBox=\@pdfpagescrop}%
+ \fi
+ \edef\Hy@temp{%
+ \ifHy@pdftoolbar\else /HideToolbar true\fi
+ \ifHy@pdfmenubar\else /HideMenubar true\fi
+ \ifHy@pdfwindowui\else /HideWindowUI true\fi
+ \ifHy@pdffitwindow /FitWindow true\fi
+ \ifHy@pdfcenterwindow /CenterWindow true\fi
+ \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
+ \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
+ \Hy@UseNameKey{Direction}\@pdfdirection
+ \Hy@UseNameKey{ViewArea}\@pdfviewarea
+ \Hy@UseNameKey{ViewClip}\@pdfviewclip
+ \Hy@UseNameKey{PrintArea}\@pdfprintarea
+ \Hy@UseNameKey{PrintClip}\@pdfprintclip
+ \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
+ \Hy@UseNameKey{Duplex}\@pdfduplex
+ \ifx\@pdfpicktraybypdfsize\@empty
+ \else
+ /PickTrayByPDFSize \@pdfpicktraybypdfsize
+ \fi
+ \ifx\@pdfprintpagerange\@empty
+ \else
+ /PrintPageRange[\@pdfprintpagerange]%
+ \fi
+ \ifx\@pdfnumcopies\@empty
+ \else
+ /NumCopies \@pdfnumcopies
+ \fi
+ }%
+ \pdfmark{pdfmark=/PUT,%
+ Raw={%
+ \string{Catalog\string}<<%
+ \ifx\Hy@temp\@empty
+ \else
+ /ViewerPreferences<<\Hy@temp>>%
+ \fi
+ \Hy@UseNameKey{PageLayout}\@pdfpagelayout
+ \ifx\@pdflang\relax
+ \else
+ /Lang(\@pdflang)%
+ \fi
+ >>%
+ }%
+ }%
+}
+%</dviwindo>
+%<*dvipdfm|xetex>
+% \end{macrocode}
+% \subsection{dvipdfm/xetex dvi to PDF converter}
+% Provided by Mark Wicks (mwicks@kettering.edu)
+% \begin{macrocode}
+\providecommand*{\XR@ext}{pdf}
+\Hy@setbreaklinks{true}
+\def\HyPat@ObjRef{%
+ @[^ ]+%
+}
+\newsavebox{\pdfm@box}
+\def\@pdfm@mark#1{\special{pdf:#1}}
+\Hy@WrapperDef\@pdfm@dest#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
+ \def\x{XYZ}%
+ \ifx\x\@pdfview
+ \def\x{XYZ @xpos @ypos null}%
+ \else
+ \def\x{FitH}%
+ \ifx\x\@pdfview
+ \def\x{FitH @ypos}%
+ \else
+ \def\x{FitBH}%
+ \ifx\x\@pdfview
+ \def\x{FitBH @ypos}%
+ \else
+ \def\x{FitV}%
+ \ifx\x\@pdfview
+ \def\x{FitV @xpos}%
+ \else
+ \def\x{FitBV}%
+ \ifx\x\@pdfview
+ \def\x{FitBV @xpos}%
+ \else
+ \def\x{Fit}%
+ \ifx\x\@pdfview
+ \let\x\@pdfview
+ \else
+ \def\x{FitB}%
+ \ifx\x\@pdfview
+ \let\x\@pdfview
+ \else
+ \def\x{FitR}%
+ \ifx\x\@pdfview
+ \Hy@Warning{`pdfview=FitR' is not supported}%
+ \def\x{XYZ @xpos @ypos null}%
+ \else
+ \@onelevel@sanitize\@pdfview
+ \Hy@Warning{%
+ Unknown value `\@pdfview' for pdfview%
+ }%
+ \def\x{XYZ @xpos @ypos null}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \@pdfm@mark{dest (\Hy@pstringDest) [@thispage /\x]}%
+ \endgroup
+ \Hy@RestoreLastskip
+}
+\providecommand*\@pdfview{XYZ}
+\providecommand*\@pdfborder{0 0 1}
+\providecommand*\@pdfborderstyle{}
+\def\hyper@anchor#1{%
+ \@pdfm@dest{#1}%
+}
+\def\hyper@anchorstart#1{%
+ \Hy@activeanchortrue
+ \@pdfm@dest{#1}%
+}
+\def\hyper@anchorend{%
+ \Hy@activeanchorfalse
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcounter{Hy@AnnotLevel}
+% \end{macrocode}
+% \begin{macrocode}
+\ifHy@ocgcolorlinks
+ \def\OBJ@OCG@view{@OCG@view}%
+ \@pdfm@mark{%
+ obj \OBJ@OCG@view <<%
+ /Type/OCG%
+ /Name(View)%
+ /Usage<<%
+ /Print<<%
+ /PrintState/OFF%
+ >>%
+ /View<<%
+ /ViewState/ON%
+ >>%
+ >>%
+ >>%
+ }%
+ \@pdfm@mark{close \OBJ@OCG@view}%
+ \def\OBJ@OCG@print{@OCG@print}%
+ \@pdfm@mark{%
+ obj \OBJ@OCG@print <<%
+ /Type/OCG%
+ /Name(Print)%
+ /Usage<<%
+ /Print<<%
+ /PrintState/ON%
+ >>%
+ /View<<%
+ /ViewState/OFF%
+ >>%
+ >>%
+ >>%
+ }%
+ \@pdfm@mark{close \OBJ@OCG@print}%
+ \def\OBJ@OCGs{@OCGs}%
+ \@pdfm@mark{%
+ obj \OBJ@OCGs [%
+ \OBJ@OCG@view\space\OBJ@OCG@print
+ ]%
+ }%
+ \@pdfm@mark{close \OBJ@OCGs}%
+ \@pdfm@mark{%
+ put @catalog <<%
+ /OCProperties<<%
+ /OCGs \OBJ@OCGs
+ /D<<%
+ /OFF[\OBJ@OCG@print]%
+ /AS[%
+ <<%
+ /Event/View%
+ /OCGs \OBJ@OCGs
+ /Category[/View]%
+ >>%
+ <<%
+ /Event/Print%
+ /OCGs \OBJ@OCGs
+ /Category[/Print]%
+ >>%
+ <<%
+ /Event/Export%
+ /OCGs \OBJ@OCGs
+ /Category[/Print]%
+ >>%
+ ]%
+ >>%
+ >>%
+ >>%
+ }%
+ \AtBeginShipout{%
+ \setbox\AtBeginShipoutBox=\hbox{%
+ \copy\AtBeginShipoutBox
+ \@pdfm@mark{%
+ put @resources <<%
+ /Properties<<%
+ /OCView \OBJ@OCG@view
+ /OCPrint \OBJ@OCG@print
+ >>%
+ >>%
+ }%
+ }%
+ }%
+ \Hy@AtBeginDocument{%
+ \def\Hy@colorlink#1{%
+ \begingroup
+ \ifHy@ocgcolorlinks
+ \def\Hy@ocgcolor{#1}%
+ \setbox0=\hbox\bgroup\color@begingroup
+ \else
+ \HyColor@UseColor#1%
+ \fi
+ }%
+ \def\Hy@endcolorlink{%
+ \ifHy@ocgcolorlinks
+ \color@endgroup\egroup
+ \mbox{%
+ \@pdfm@mark{content /OC/OCPrint BDC}%
+ \rlap{\copy0}%
+ \@pdfm@mark{content EMC/OC/OCView BDC}%
+ \begingroup
+ \expandafter\HyColor@UseColor\Hy@ocgcolor
+ \box0 %
+ \endgroup
+ \@pdfm@mark{content EMC}%
+ }%
+ \fi
+ \endgroup
+ }%
+ }%
+\else
+ \Hy@DisableOption{ocgcolorlinks}%
+\fi
+% \end{macrocode}
+% Use primitive counter arithmetic here to avoid amsmath
+% redefining |\stepcounter| (github issue/13)
+% \begin{macrocode}
+\def\Hy@BeginAnnot#1{%
+ \global\advance\c@Hy@AnnotLevel\@ne
+ \ifnum\c@Hy@AnnotLevel=\@ne
+ #1%
+ \fi
+}
+\def\Hy@EndAnnot{%
+ \ifnum\value{Hy@AnnotLevel}=\@ne
+ \Hy@endcolorlink
+ \@pdfm@mark{eann}%
+ \fi
+ \global\advance\c@Hy@AnnotLevel\m@ne
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\Hy@undefinedname{UNDEFINED}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \leavevmode
+ \Hy@BeginAnnot{%
+ \protected@edef\Hy@testname{#2}%
+ \ifx\Hy@testname\@empty
+ \Hy@Warning{%
+ Empty destination name,\MessageBreak
+ using `\Hy@undefinedname'%
+ }%
+ \let\Hy@testname\Hy@undefinedname
+ \else
+ \Hy@pstringdef\Hy@testname{%
+ \expandafter\HyperDestNameFilter\expandafter{%
+ \Hy@testname
+ }%
+ }%
+ \fi
+ \@pdfm@mark{%
+ bann<<%
+ /Type/Annot%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \expandafter\ifx\csname @#1bordercolor\endcsname\relax
+ \else
+ /C[\csname @#1bordercolor\endcsname]%
+ \fi
+ /A<<%
+ /S/GoTo%
+ /D(\Hy@testname)%
+ \Hy@href@nextactionraw
+ >>%
+ >>%
+ }%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ }%
+}
+\def\hyper@linkend{\Hy@EndAnnot}%
+\def\hyper@link#1#2#3{%
+ \hyper@linkstart{#1}{#2}#3\Hy@xspace@end\hyper@linkend
+}
+\def\hyper@linkfile#1#2#3{%
+ \leavevmode
+ \Hy@BeginAnnot{%
+ \def\Hy@pstringF{#2}%
+ \Hy@CleanupFile\Hy@pstringF
+ \Hy@pstringdef\Hy@pstringF\Hy@pstringF
+ \Hy@pstringdef\Hy@pstringD{#3}%
+ \Hy@MakeRemoteAction
+ \@pdfm@mark{%
+ bann<<%
+ /Type/Annot%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@filebordercolor\relax
+ \else
+ /C[\@filebordercolor]%
+ \fi
+ /A<<%
+ /S/GoToR%
+ /F(\Hy@pstringF)%
+ /D%
+ \ifx\\#3\\%
+ [\Hy@href@page\@pdfremotestartview]%
+ \else
+ (\Hy@pstringD)%
+ \fi
+ \Hy@SetNewWindow
+ \Hy@href@nextactionraw
+ >>%
+ >>%
+ }%
+ \Hy@colorlink\@filecolor
+ }%
+ #1\Hy@xspace@end
+ \Hy@EndAnnot
+}
+\def\@hyper@launch run:#1\\#2#3{% filename, anchor text linkname
+ \leavevmode
+ \Hy@BeginAnnot{%
+ \Hy@pstringdef\Hy@pstringF{#1}%
+ \Hy@pstringdef\Hy@pstringP{#3}%
+ \@pdfm@mark{%
+ bann<<%
+ /Type/Annot%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@runbordercolor\relax
+ \else
+ /C[\@runbordercolor]%
+ \fi
+ /A<<%
+ /F(\Hy@pstringF)%
+ /S/Launch%
+ \Hy@SetNewWindow
+ \ifx\\#3\\%
+ \else
+ /Win<</P(\Hy@pstringP)/F(\Hy@pstringF)>>%
+ \fi
+ \Hy@href@nextactionraw
+ >>%
+ >>%
+ }%
+ \Hy@colorlink\@runcolor
+ }%
+ #2\Hy@xspace@end
+ \Hy@EndAnnot
+}
+\def\hyper@linkurl#1#2{%
+ \leavevmode
+ \Hy@BeginAnnot{%
+ \Hy@pstringdef\Hy@pstringURI{#2}%
+ \@pdfm@mark{%
+ bann<<%
+ /Type/Annot%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@urlbordercolor\relax
+ \else
+ /C[\@urlbordercolor]%
+ \fi
+ /A<<%
+ /S/URI%
+ /URI(\Hy@pstringURI)%
+ \ifHy@href@ismap
+ /IsMap true%
+ \fi
+ \Hy@href@nextactionraw
+ >>%
+ >>%
+ }%
+ \Hy@colorlink\@urlcolor
+ }%
+ #1\Hy@xspace@end
+ \Hy@EndAnnot
+}
+\def\Acrobatmenu#1#2{%
+ \Hy@Acrobatmenu{#1}{#2}{%
+ \Hy@BeginAnnot{%
+ \EdefEscapeName\Hy@temp@menu{#1}%
+ \@pdfm@mark{%
+ bann<<%
+ /Type/Annot%
+ /Subtype/Link%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \Hy@setpdfhighlight
+ \ifx\@menubordercolor\relax
+ \else
+ /C[\@menubordercolor]%
+ \fi
+ /A<<%
+ /S/Named%
+ /N/\Hy@temp@menu
+ \Hy@href@nextactionraw
+ >>%
+ >>%
+ }%
+ \Hy@colorlink\@menucolor
+ }%
+ #2\Hy@xspace@end
+ \Hy@EndAnnot
+ }%
+}
+
+\def\PDF@FinishDoc{%
+ \Hy@UseMaketitleInfos
+ \HyInfo@GenerateAddons
+ \@pdfm@mark{%
+ docinfo<<%
+ /Title(\@pdftitle)%
+ /Subject(\@pdfsubject)%
+ /Creator(\@pdfcreator)%
+ \ifx\@pdfcreationdate\@empty
+ \else
+ /CreationDate(\@pdfcreationdate)%
+ \fi
+ \ifx\@pdfmoddate\@empty
+ \else
+ /ModDate(\@pdfmoddate)%
+ \fi
+ /Author(\@pdfauthor)%
+ \ifx\@pdfproducer\relax
+ \else
+ /Producer(\@pdfproducer)%
+ \fi
+ /Keywords(\@pdfkeywords)%
+ \ifx\@pdftrapped\@empty
+ \else
+ /Trapped/\@pdftrapped
+ \fi
+ \HyInfo@Addons
+ >>%
+ }%
+ \Hy@DisableOption{pdfauthor}%
+ \Hy@DisableOption{pdftitle}%
+ \Hy@DisableOption{pdfsubject}%
+ \Hy@DisableOption{pdfcreator}%
+ \Hy@DisableOption{addtopdfcreator}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfmoddate}%
+ \Hy@DisableOption{pdfproducer}%
+ \Hy@DisableOption{pdfkeywords}%
+ \Hy@DisableOption{pdftrapped}%
+ \Hy@DisableOption{pdfinfo}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\PDF@SetupDoc{%
+ \edef\Hy@temp{%
+ \ifHy@pdftoolbar\else /HideToolbar true\fi
+ \ifHy@pdfmenubar\else /HideMenubar true\fi
+ \ifHy@pdfwindowui\else /HideWindowUI true\fi
+ \ifHy@pdffitwindow /FitWindow true\fi
+ \ifHy@pdfcenterwindow /CenterWindow true\fi
+ \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
+ \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
+ \Hy@UseNameKey{Direction}\@pdfdirection
+ \Hy@UseNameKey{ViewArea}\@pdfviewarea
+ \Hy@UseNameKey{ViewClip}\@pdfviewclip
+ \Hy@UseNameKey{PrintArea}\@pdfprintarea
+ \Hy@UseNameKey{PrintClip}\@pdfprintclip
+ \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
+ \Hy@UseNameKey{Duplex}\@pdfduplex
+ \ifx\@pdfpicktraybypdfsize\@empty
+ \else
+ /PickTrayByPDFSize \@pdfpicktraybypdfsize
+ \fi
+ \ifx\@pdfprintpagerange\@empty
+ \else
+ /PrintPageRange[\@pdfprintpagerange]%
+ \fi
+ \ifx\@pdfnumcopies\@empty
+ \else
+ /NumCopies \@pdfnumcopies
+ \fi
+ }%
+ \Hy@pstringdef\Hy@pstringB{\@baseurl}%
+ \@pdfm@mark{%
+ docview<<%
+ \ifx\@pdfstartpage\@empty
+ \else
+ \ifx\@pdfstartview\@empty
+ \else
+ /OpenAction[@page\@pdfstartpage\@pdfstartview]%
+ \fi
+ \fi
+ \ifx\@baseurl\@empty
+ \else
+ /URI<</Base(\Hy@pstringB)>>%
+ \fi
+ /PageMode/\@pdfpagemode
+ \ifx\Hy@temp\@empty
+ \else
+ /ViewerPreferences<<\Hy@temp>>%
+ \fi
+ \Hy@UseNameKey{PageLayout}\@pdfpagelayout
+ \ifx\@pdflang\relax
+ \else
+ /Lang(\@pdflang)%
+ \fi
+ >>%
+ }%
+ \ifx\@pdfpagescrop\@empty
+ \else
+ \@pdfm@mark{put @pages <</CropBox[\@pdfpagescrop]>>}%
+ \fi
+}
+%</dvipdfm|xetex>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*dvipdfm|xetex>
+% \end{macrocode}
+% \begin{macro}{\hyper@pagetransition}
+% \begin{macrocode}
+\def\hyper@pagetransition{%
+ \ifx\@pdfpagetransition\relax
+ \else
+ \ifx\@pdfpagetransition\@empty
+ \else
+ \special{pdf:put @thispage %
+ <</Trans<</S/\@pdfpagetransition>>>>%
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hyper@pageduration}
+% \begin{macrocode}
+\def\hyper@pageduration{%
+ \ifx\@pdfpageduration\relax
+ \else
+ \ifx\@pdfpageduration\@empty
+ \else
+ \special{pdf:put @thispage %
+ <</Dur \@pdfpageduration>>%
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hyper@pagehidden}
+% \begin{macrocode}
+\def\hyper@pagehidden{%
+ \ifHy@useHidKey
+ \special{pdf:put @thispage %
+ <</Hid \ifHy@pdfpagehidden true\else false\fi>>%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\g@addto@macro\Hy@EveryPageBoxHook{%
+ \hyper@pagetransition
+ \hyper@pageduration
+ \hyper@pagehidden
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</dvipdfm|xetex>
+% \end{macrocode}
+%
+% Xe\TeX\ uses pdf\TeX's method \cs{pdfpagewidth}
+% and \cs{pdfpageheight} for setting the paper size.
+% \begin{macrocode}
+%<*dvipdfm>
+\AtBeginShipoutFirst{%
+ \ifHy@setpagesize
+ \begingroup
+ \@ifundefined{stockwidth}{%
+ \ifdim\paperwidth>\z@
+ \ifdim\paperheight>\z@
+ \special{papersize=\the\paperwidth,\the\paperheight}%
+ \fi
+ \fi
+ }{%
+ \ifdim\stockwidth>\z@
+ \ifdim\stockheight>\z@
+ \special{papersize=\the\stockwidth,\the\stockheight}%
+ \fi
+ \fi
+ }%
+ \endgroup
+ \fi
+ \Hy@DisableOption{setpagesize}%
+}
+%</dvipdfm>
+% \end{macrocode}
+%
+% \subsection{VTeX typesetting system}
+% Provided by MicroPress, May 1998.
+% They require VTeX version 6.02 or newer;
+% see \url{http://www.micropress-inc.com/} for details.
+% \begin{macrocode}
+%<*vtexhtml>
+\providecommand*{\XR@ext}{htm}
+\RequirePackage{vtexhtml}
+\newif\if@Localurl
+\let\PDF@FinishDoc\ltx@empty
+\def\PDF@SetupDoc{%
+ \ifx\@baseurl\@empty
+ \else
+ \special{!direct <base href="\@baseurl">}%
+ \fi
+}
+\def\@urltype{url}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \leavevmode
+ \special{!direct <a href=%
+ \hyper@quote\hyper@hash\HyperDestNameFilter{#2}\hyper@quote>}%
+ #3\Hy@xspace@end
+ \special{!direct </a>}%
+}
+\def\hyper@linkurl#1#2{%
+ \begingroup
+ \hyper@chars
+ \leavevmode
+ \MathBSuppress=1\relax
+ \special{!direct <a href=%
+ \hyper@quote\HyperDestNameFilter{#2}\hyper@quote>}%
+ #1\Hy@xspace@end
+ \MathBSuppress=0\relax
+ \special{!direct </a>}%
+ \endgroup
+}
+\def\hyper@linkfile#1#2#3{%
+ \hyper@linkurl{#1}{\Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi}%
+}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \def\Hy@tempa{#1}\ifx\Hy@tempa\@urltype
+ \@Localurltrue
+ \special{!direct <a href=\hyper@quote#2\hyper@quote>}%
+ \else
+ \@Localurlfalse
+ \begingroup
+ \hyper@chars
+ \special{!aref \HyperDestNameFilter{#2}}%
+ \endgroup
+ \fi
+}
+\def\hyper@linkend{%
+ \if@Localurl
+ \special{!endaref}%
+ \else
+ \special{!direct </a>}%
+ \fi
+}
+\Hy@WrapperDef\hyper@anchorstart#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \hyper@chars
+ \special{!aname #1}%
+ \special{!direct <a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \special{!direct </a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\Hy@WrapperDef\hyper@anchor#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \let\protect=\string
+ \hyper@chars
+ \leavevmode
+ \special{!aname #1}%
+ \special{!direct <a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+ \bgroup\anchor@spot\egroup
+ \special{!direct </a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\def\@Form[#1]{%
+ \Hy@Message{Sorry, TeXpider does not yet support FORMs}%
+}
+\let\@endForm\ltx@empty
+\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
+ \Hy@Message{Sorry, TeXpider does not yet support FORM gauges}%
+}
+\def\@TextField[#1]#2{% parameters, label
+ \Hy@Message{Sorry, TeXpider does not yet support FORM text fields}%
+}
+\def\@CheckBox[#1]#2{% parameters, label
+ \Hy@Message{Sorry, TeXpider does not yet support FORM checkboxes}%
+}
+\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
+ \Hy@Message{Sorry, TeXpider does not yet support FORM choice menus}%
+}
+\def\@PushButton[#1]#2{% parameters, label
+ \Hy@Message{Sorry, TeXpider does not yet support FORM pushbuttons}%
+}
+\def\@Reset[#1]#2{%
+ \Hy@Message{Sorry, TeXpider does not yet support FORMs}%
+}
+\def\@Submit[#1]#2{%
+ \Hy@Message{Sorry, TeXpider does not yet support FORMs}%
+}
+%</vtexhtml>
+% \end{macrocode}
+% \begin{macrocode}
+%<*vtex>
+% \end{macrocode}
+% VTeX version 6.68 supports \cs{mediawidth} and \cs{mediaheight}.
+% The \cs{ifx} construct is better than a \cs{csname}, because
+% it avoids the definition and the hash table entry of a
+% previous undefined macro.
+% \begin{macrocode}
+\ifx\mediaheight\@undefined
+\else
+ \ifx\mediaheight\relax
+ \else
+ \ifHy@setpagesize
+ \providecommand*{\VTeXInitMediaSize}{%
+ \ltx@IfUndefined{stockwidth}{%
+ \ifdim\paperheight>0pt %
+ \setlength\mediaheight\paperheight
+ \fi
+ \ifdim\paperheight>0pt %
+ \setlength\mediawidth\paperwidth
+ \fi
+ }{%
+ \ifdim\stockheight>0pt %
+ \setlength\mediaheight\stockheight
+ \fi
+ \ifdim\stockwidth>0pt %
+ \setlength\mediawidth\stockwidth
+ \fi
+ }%
+ }%
+ \Hy@AtBeginDocument{\VTeXInitMediaSize}%
+ \fi
+ \Hy@DisableOption{setpagesize}%
+ \fi
+\fi
+% \end{macrocode}
+% Older versions of VTeX require |xyz| in lower case.
+% \begin{macrocode}
+\providecommand*\@pdfview{xyz}
+\providecommand*\@pdfborder{0 0 1}
+\providecommand*\@pdfborderstyle{}
+\let\CurrentBorderColor\@linkbordercolor
+\Hy@WrapperDef\hyper@anchor#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \let\protect=\string
+ \hyper@chars
+ \special{!aname \HyperDestNameFilter{#1};\@pdfview}%
+ \endgroup
+ \Hy@activeanchortrue
+ \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\Hy@WrapperDef\hyper@anchorstart#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \hyper@chars
+ \special{!aname \HyperDestNameFilter{#1};\@pdfview}%
+ \endgroup
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\def\@urltype{url}
+\def\Hy@undefinedname{UNDEFINED}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \Hy@pstringdef\Hy@pstringURI{#2}%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ \ltx@IfUndefined{@#1bordercolor}{%
+ \let\CurrentBorderColor\relax
+ }{%
+ \edef\CurrentBorderColor{%
+ \csname @#1bordercolor\endcsname
+ }%
+ }%
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\@urltype
+ \special{!%
+ aref <u=/Type/Action/S/URI/URI(\Hy@pstringURI)%
+ \ifHy@href@ismap
+ /IsMap true%
+ \fi
+ \Hy@href@nextactionraw
+ >;%
+ a=<%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \ifx\CurrentBorderColor\relax
+ \else
+ /C [\CurrentBorderColor]%
+ \fi
+ >%
+ }%
+ \else
+ \protected@edef\Hy@testname{#2}%
+ \ifx\Hy@testname\@empty
+ \Hy@Warning{%
+ Empty destination name,\MessageBreak
+ using `\Hy@undefinedname'%
+ }%
+ \let\Hy@testname\Hy@undefinedname
+ \fi
+ \special{!%
+ aref \expandafter\HyperDestNameFilter
+ \expandafter{\Hy@testname};%
+ a=<%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \ifx\CurrentBorderColor\relax
+ \else
+ /C [\CurrentBorderColor]%
+ \fi
+ >%
+ }%
+ \fi
+}
+\def\hyper@linkend{%
+ \special{!endaref}%
+ \Hy@endcolorlink
+}
+\def\hyper@linkfile#1#2#3{%
+ \leavevmode
+ \def\Hy@pstringF{#2}%
+ \Hy@CleanupFile\Hy@pstringF
+ \special{!%
+ aref <%
+ \ifnum\Hy@VTeXversion>753 \ifHy@pdfnewwindow n\fi\fi
+ f=\Hy@pstringF>#3;%
+ a=<%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \ifx\@filebordercolor\relax
+ \else
+ /C [\@filebordercolor]%
+ \fi
+ >%
+ }%
+ \Hy@colorlink\@filecolor
+ #1\Hy@xspace@end
+ \Hy@endcolorlink
+ \special{!endaref}%
+}
+\def\hyper@linkurl#1#2{%
+ \begingroup
+ \Hy@pstringdef\Hy@pstringURI{#2}%
+ \hyper@chars
+ \leavevmode
+ \special{!%
+ aref <u=/Type/Action/S/URI/URI(\Hy@pstringURI)%
+ \ifHy@href@ismap
+ /IsMap true%
+ \fi
+ \Hy@href@nextactionraw
+ >;%
+ a=<%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \ifx\@urlbordercolor\relax
+ \else
+ /C [\@urlbordercolor]%
+ \fi
+ >%
+ }%
+ \Hy@colorlink\@urlcolor
+ #1\Hy@xspace@end
+ \Hy@endcolorlink
+ \special{!endaref}%
+ \endgroup
+}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \ltx@IfUndefined{@#1bordercolor}{%
+ \let\CurrentBorderColor\relax
+ }{%
+ \edef\CurrentBorderColor{\csname @#1bordercolor\endcsname}%
+ }%
+ \leavevmode
+ \protected@edef\Hy@testname{#2}%
+ \ifx\Hy@testname\@empty
+ \Hy@Warning{%
+ Empty destination name,\MessageBreak
+ using `\Hy@undefinedname'%
+ }%
+ \let\Hy@testname\Hy@undefinedname
+ \fi
+ \special{!%
+ aref \expandafter\HyperDestNameFilter
+ \expandafter{\Hy@testname};%
+ a=<%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \ifx\CurrentBorderColor\relax
+ \else
+ /C [\CurrentBorderColor]%
+ \fi
+ >%
+ }%
+ \expandafter
+ \Hy@colorlink\csname @#1color\endcsname
+ #3\Hy@xspace@end
+ \Hy@endcolorlink
+ \special{!endaref}%
+}
+\def\hyper@image#1#2{%
+ \hyper@linkurl{#2}{#1}%
+}
+\def\@hyper@launch run:#1\\#2#3{%
+ \Hy@pstringdef\Hy@pstringF{#1}%
+ \Hy@pstringdef\Hy@pstringP{#3}%
+ \leavevmode
+ \special{!aref %
+ <u=%
+ /Type/Action%
+ /S/Launch%
+ /F(\Hy@pstringF)%
+ \Hy@SetNewWindow
+ \ifx\\#3\\%
+ \else
+ /Win<</F(\Hy@pstringF)/P(\Hy@pstringP)>>%
+ \fi
+ \Hy@href@nextactionraw
+ >;%
+ a=<%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \ifx\@runbordercolor\relax
+ \else
+ /C[\@runbordercolor]%
+ \fi
+ >%
+ }%
+ \Hy@colorlink\@runcolor
+ #2\Hy@xspace@end
+ \Hy@endcolorlink
+ \special{!endaref}%
+}
+\def\Acrobatmenu#1#2{%
+ \EdefEscapeName\Hy@temp@menu{#1}%
+ \Hy@Acrobatmenu{#1}{#2}{%
+ \special{!%
+ aref <u=/S /Named /N /\Hy@temp@menu>;%
+ a=<%
+ \ifHy@pdfa /F 4\fi
+ \Hy@setpdfborder
+ \ifx\@menubordercolor\relax
+ \else
+ /C[\@menubordercolor]%
+ \fi
+ >%
+ }%
+ \Hy@colorlink\@menucolor
+ #2\Hy@xspace@end
+ \Hy@endcolorlink
+ \special{!endaref}%
+ }%
+}
+% \end{macrocode}
+%
+% The following code (transition effects) is
+% made by Alex Kostin.
+%
+% The code below makes sense for V\TeX\ 7.02 or later.
+%
+% Please never use |\@ifundefined{VTeXversion}{..}{..}| \emph{globally}.
+% \begin{macrocode}
+\ifnum\Hy@VTeXversion<702 %
+\else
+ \def\hyper@pagetransition{%
+ \ifx\@pdfpagetransition\relax
+ \else
+ \ifx\@pdfpagetransition\@empty
+% \end{macrocode}
+%
+% Standard incantation.
+%
+% 1. Does an old entry have to be deleted?
+% 2. If 1=yes, how to delete?
+% \begin{macrocode}
+ \else
+ \hvtex@parse@trans\@pdfpagetransition
+ \fi
+ \fi
+ }%
+% \end{macrocode}
+%
+% I have to write an ``honest'' parser to convert raw PDF code
+% into V\TeX\ |\special|. (AVK)
+%
+% Syntax of V\TeX\ |\special{!trans <transition_effect>}|:
+%\begin{verbatim}
+%<transition_effect> ::= <transition_style>[,<transition_duration>]
+%<transition_style> ::= <Blinds_effect> | <Box_effect> |
+% <Dissolve_effect> | <Glitter_effect> |
+% <Split_effect> | <Wipe_effect>
+%<Blinds_effect> ::= B[<effect_dimension>]
+%<Box_effect> ::= X[<effect_motion>]
+%<Dissolve_effect> ::= D
+%<Glitter_effect> ::= G[<effect_direction>]
+%<Split_effect> ::= S[<effect_motion>][<effect_dimension>]
+%<Wipe_effect> ::= W[<effect_direction>]
+%<Replace_effect> ::= R
+%<effect_direction> ::= <number>
+%<effect_dimension> ::= H | V
+%<effect_motion> ::= I | O
+%<transition_duration> ::= <number>
+%\end{verbatim}
+%
+% Transition codes:
+% \begin{macrocode}
+ \def\hvtex@trans@effect@Blinds{\def\hvtex@trans@code{B}}%
+ \def\hvtex@trans@effect@Box{\def\hvtex@trans@code{X}}%
+ \def\hvtex@trans@effect@Dissolve{\def\hvtex@trans@code{D}}%
+ \def\hvtex@trans@effect@Glitter{\def\hvtex@trans@code{G}}%
+ \def\hvtex@trans@effect@Split{\def\hvtex@trans@code{S}}%
+ \def\hvtex@trans@effect@Wipe{\def\hvtex@trans@code{W}}%
+ \def\hvtex@trans@effect@R{\def\hvtex@trans@code{R}}%
+% \end{macrocode}
+%
+% Optional parameters:
+% \begin{macrocode}
+ \def\hvtex@par@dimension{/Dm}%
+ \def\hvtex@par@direction{/Di}%
+ \def\hvtex@par@duration{/D}%
+ \def\hvtex@par@motion{/M}%
+% \end{macrocode}
+%
+% Tokenizer:
+% \begin{macrocode}
+ \def\hvtex@gettoken{%
+ \expandafter\hvtex@gettoken@\hvtex@buffer\@nil
+ }%
+% \end{macrocode}
+%
+% Notice that tokens in the input buffer must be space delimited.
+% \begin{macrocode}
+ \def\hvtex@gettoken@#1 #2\@nil{%
+ \edef\hvtex@token{#1}%
+ \edef\hvtex@buffer{#2}%
+ }%
+ \def\hvtex@parse@trans#1{%
+% \end{macrocode}
+%
+% Initializing code:
+% \begin{macrocode}
+ \let\hvtex@trans@code\@empty
+ \let\hvtex@param@dimension\@empty
+ \let\hvtex@param@direction\@empty
+ \let\hvtex@param@duration\@empty
+ \let\hvtex@param@motion\@empty
+ \edef\hvtex@buffer{#1\space}%
+% \end{macrocode}
+% First token is the PDF transition name without escape.
+% \begin{macrocode}
+ \hvtex@gettoken
+ \ifx\hvtex@token\@empty
+% \end{macrocode}
+% Leading space(s)?
+% \begin{macrocode}
+ \ifx\hvtex@buffer\@empty
+% \end{macrocode}
+% The buffer is empty, nothing to do.
+% \begin{macrocode}
+ \else
+ \hvtex@gettoken
+ \fi
+ \fi
+ \csname hvtex@trans@effect@\hvtex@token\endcsname
+% \end{macrocode}
+% Now is time to parse optional parameters.
+% \begin{macrocode}
+ \hvtex@trans@params
+ }%
+% \end{macrocode}
+%
+% Reentrable macro to parse optional parameters.
+% \begin{macrocode}
+ \def\hvtex@trans@params{%
+ \ifx\hvtex@buffer\@empty
+ \else
+ \hvtex@gettoken
+ \let\hvtex@trans@par\hvtex@token
+ \ifx\hvtex@buffer\@empty
+ \else
+ \hvtex@gettoken
+ \ifx\hvtex@trans@par\hvtex@par@duration
+% \end{macrocode}
+% /D is the effect duration in seconds. V\TeX\ special
+% takes it in milliseconds.
+% \begin{macrocode}
+ \let\hvtex@param@duration\hvtex@token
+ \else \ifx\hvtex@trans@par\hvtex@par@motion
+% \end{macrocode}
+% /M can be either /I or /O
+% \begin{macrocode}
+ \expandafter\edef\expandafter\hvtex@param@motion
+ \expandafter{\expandafter\@gobble\hvtex@token}%
+ \else \ifx\hvtex@trans@par\hvtex@par@dimension
+% \end{macrocode}
+% /Dm can be either /H or /V
+% \begin{macrocode}
+ \expandafter\edef\expandafter\hvtex@param@dimension
+ \expandafter{\expandafter\@gobble\hvtex@token}%
+ \else \ifx\hvtex@trans@par\hvtex@par@direction
+% \end{macrocode}
+%
+% Valid values for /Di are 0, 270, 315 (the Glitter effect) or
+% 0, 90, 180, 270 (the Wipe effect).
+% \begin{macrocode}
+ \let\hvtex@param@direction\hvtex@token
+ \fi\fi\fi\fi
+ \fi
+ \fi
+ \ifx\hvtex@buffer\@empty
+ \let\next\hvtex@produce@trans
+ \else
+ \let\next\hvtex@trans@params
+ \fi
+ \next
+ }%
+% \end{macrocode}
+%
+% Merge |<transition_effect>| and issue the special when possible.
+% Too lazy to validate optional parameters.
+% \begin{macrocode}
+ \def\hvtex@produce@trans{%
+ \let\vtex@trans@special\@empty
+ \if S\hvtex@trans@code
+ \edef\vtex@trans@special{\hvtex@trans@code
+ \hvtex@param@dimension\hvtex@param@motion}%
+ \else\if B\hvtex@trans@code
+ \edef\vtex@trans@special{%
+ \hvtex@trans@code\hvtex@param@dimension
+ }%
+ \else\if X\hvtex@trans@code
+ \edef\vtex@trans@special{%
+ \hvtex@trans@code\hvtex@param@motion
+ }%
+ \else\if W\hvtex@trans@code
+ \edef\vtex@trans@special{%
+ \hvtex@trans@code\hvtex@param@direction
+ }%
+ \else\if D\hvtex@trans@code
+ \let\vtex@trans@special\hvtex@trans@code
+ \else\if R\hvtex@trans@code
+ \let\vtex@trans@special\hvtex@trans@code
+ \else\if G\hvtex@trans@code
+ \edef\vtex@trans@special{%
+ \hvtex@trans@code\hvtex@param@direction
+ }%
+ \fi\fi\fi\fi\fi\fi\fi
+ \ifx\vtex@trans@special\@empty
+ \else
+ \ifx\hvtex@param@duration\@empty
+ \else
+ \setlength{\dimen@}{\hvtex@param@duration\p@}%
+% \end{macrocode}
+% I'm not guilty of possible overflow.
+% \begin{macrocode}
+ \multiply\dimen@\@m
+ \edef\vtex@trans@special{%
+ \vtex@trans@special,\strip@pt\dimen@
+ }%
+ \fi
+% \end{macrocode}
+%
+% And all the mess is just for this.
+%
+% \begin{macrocode}
+ \special{!trans \vtex@trans@special}%
+ \fi
+ }%
+% \end{macrocode}
+% \begin{macrocode}
+ \def\hyper@pageduration{%
+ \ifx\@pdfpageduration\relax
+ \else
+ \ifx\@pdfpageduration\@empty
+ \special{!duration-}%
+ \else
+ \special{!duration \@pdfpageduration}%
+ \fi
+ \fi
+ }%
+ \def\hyper@pagehidden{%
+ \ifHy@useHidKey
+ \special{!hidden\ifHy@pdfpagehidden +\else -\fi}%
+ \fi
+ }%
+ \g@addto@macro\Hy@EveryPageBoxHook{%
+ \hyper@pagetransition
+ \hyper@pageduration
+ \hyper@pagehidden
+ }%
+\fi
+% \end{macrocode}
+%
+% Caution: In opposite to the other drivers,
+% the argument of |\special{!onopen #1}| is
+% a reference name. The VTeX's postscript
+% mode will work with a version higher than
+% 7.0x.
+%
+% The command \verb|\VTeXOS| is defined since version 7.45.
+% Magic values encode the operating system:\\
+% \begin{tabular}{@{}l@{: }l@{}}
+% 1 & WinTel\\
+% 2 & Linux\\
+% 3 & OS/2\\
+% 4 & MacOS\\
+% 5 & MacOS/X\\
+% \end{tabular}
+% \begin{macrocode}
+\ifx\@pdfproducer\relax
+ \def\@pdfproducer{VTeX}%
+ \ifnum\Hy@VTeXversion>\z@
+ \count@\VTeXversion
+ \divide\count@ 100 %
+ \edef\@pdfproducer{\@pdfproducer\space v\the\count@}%
+ \multiply\count@ -100 %
+ \advance\count@\VTeXversion
+ \edef\@pdfproducer{%
+ \@pdfproducer
+ .\ifnum\count@<10 0\fi\the\count@
+ \ifx\VTeXOS\@undefined\else
+ \ifnum\VTeXOS>0 %
+ \ifnum\VTeXOS<6 %
+ \space(%
+ \ifcase\VTeXOS
+ \or Windows\or Linux\or OS/2\or MacOS\or MacOS/X%
+ \fi
+ )%
+ \fi
+ \fi
+ \fi
+ ,\space
+ \ifnum\OpMode=\@ne PDF\else PS\fi
+ \space backend%
+ \ifx\gexmode\@undefined\else
+ \ifnum\gexmode>\z@\space with GeX\fi
+ \fi
+ }%
+ \fi
+\fi
+% \end{macrocode}
+%
+% Current |!pdfinfo| key syntax:
+%
+% \begin{tabular}{lll}
+% \hline
+% Key & Field & Type \\
+% \hline
+% \texttt{a} & \textbf{A}uthor & String \\
+% \texttt{b} & Crop\textbf{B}ox & String \\
+% \texttt{c} & \textbf{C}reator & String \\
+% \texttt{k} & \textbf{K}eywords & String \\
+% \texttt{l} & Page\textbf{L}ayout & PS \\
+% \texttt{p} & \textbf{P}ageMode & PS \\
+% \texttt{r} & P\textbf{r}oducer & String \\
+% \texttt{s} & \textbf{S}ubject & String \\
+% \texttt{t} & \textbf{T}itle & String \\
+% \texttt{u} & \textbf{U}RI & PS \\
+% \texttt{v} & \textbf{V}iewPreferences & PS \\
+% \hline
+% \end{tabular}
+%
+% Note: PS objects that are dicts are in |<<<..>>>| (yuck; no choice).
+%
+% \begin{macrocode}
+\def\PDF@SetupDoc{%
+ \ifx\@pdfpagescrop\@empty
+ \else
+ \special{!pdfinfo b=<\@pdfpagescrop>}%
+ \fi
+ \ifx\@pdfstartpage\@empty
+ \else
+ \ifx\@pdfstartview\@empty
+ \else
+ \special{!onopen Page\@pdfstartpage}%
+ \fi
+ \fi
+ \special{!pdfinfo p=</\@pdfpagemode>}%
+ \ifx\@baseurl\@empty
+ \else
+ \special{!pdfinfo u=<<</Base (\@baseurl)>>>}%
+ \fi
+ \special{!pdfinfo v=<<<%
+ \ifHy@pdftoolbar\else /HideToolbar true\fi
+ \ifHy@pdfmenubar\else /HideMenubar true\fi
+ \ifHy@pdfwindowui\else /HideWindowUI true\fi
+ \ifHy@pdffitwindow /FitWindow true\fi
+ \ifHy@pdfcenterwindow /CenterWindow true\fi
+ \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
+ \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
+ \Hy@UseNameKey{Direction}\@pdfdirection
+ \Hy@UseNameKey{ViewArea}\@pdfviewarea
+ \Hy@UseNameKey{ViewClip}\@pdfviewclip
+ \Hy@UseNameKey{PrintArea}\@pdfprintarea
+ \Hy@UseNameKey{PrintClip}\@pdfprintclip
+ \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
+ \Hy@UseNameKey{Duplex}\@pdfduplex
+ \ifx\@pdfpicktraybypdfsize\@empty
+ \else
+ /PickTrayByPDFSize \@pdfpicktraybypdfsize
+ \fi
+ \ifx\@pdfprintpagerange\@empty
+ \else
+ /PrintPageRange[\@pdfprintpagerange]%
+ \fi
+ \ifx\@pdfnumcopies\@empty
+ \else
+ /NumCopies \@pdfnumcopies
+ \fi
+ >>>}%
+ \ifx\@pdfpagelayout\@empty
+ \else
+ \special{!pdfinfo l=</\@pdfpagelayout\space>}%
+ \fi
+}%
+\HyInfo@AddonUnsupportedtrue
+\define@key{Hyp}{pdfcreationdate}{%
+ \Hy@Warning{%
+ VTeX does not support pdfcreationdate.\MessageBreak
+ Therefore its setting is ignored%
+ }%
+}
+\define@key{Hyp}{pdfmoddate}{%
+ \Hy@Warning{%
+ VTeX does not support pdfmoddate.\MessageBreak
+ Therefore its setting is ignored%
+ }%
+}
+\def\PDF@FinishDoc{%
+ \Hy@UseMaketitleInfos
+ \HyInfo@TrappedUnsupported
+ \special{!pdfinfo a=<\@pdfauthor>}%
+ \special{!pdfinfo t=<\@pdftitle>}%
+ \special{!pdfinfo s=<\@pdfsubject>}%
+ \special{!pdfinfo c=<\@pdfcreator>}%
+ \ifx\@pdfproducer\relax
+ \else
+ \special{!pdfinfo r=<\@pdfproducer>}%
+ \fi
+ \special{!pdfinfo k=<\@pdfkeywords>}%
+ \Hy@DisableOption{pdfauthor}%
+ \Hy@DisableOption{pdftitle}%
+ \Hy@DisableOption{pdfsubject}%
+ \Hy@DisableOption{pdfcreator}%
+ \Hy@DisableOption{addtopdfcreator}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfmoddate}%
+ \Hy@DisableOption{pdfproducer}%
+ \Hy@DisableOption{pdfkeywords}%
+ \Hy@DisableOption{pdftrapped}%
+ \Hy@DisableOption{pdfinfo}%
+}
+%</vtex>
+% \end{macrocode}
+%
+% \subsection{Fix for Adobe bug number 466320}
+% If a destination occurs at the very begin of a page,
+% the destination is moved to the previous page by
+% Adobe Distiller 5.
+% As workaround Adobe suggests:
+%\begin{verbatim}
+%/showpage {
+% //showpage
+% clippath stroke erasepage
+%} bind def
+%\end{verbatim}
+%
+% But unfortunately this fix generates an empty page
+% at the end of the document. Therefore another fix
+% is used by writing some clipped text.
+% \begin{macrocode}
+%<dviwindo>\def\literalps@out#1{\special{ps:#1}}%
+%<package>\providecommand*{\Hy@DistillerDestFix}{}
+%<*pdfmark|dviwindo>
+\def\Hy@DistillerDestFix{%
+ \begingroup
+ \let\x\literalps@out
+% \end{macrocode}
+% The fix has to be passed unchanged through GeX, if
+% VTeX in PostScript mode with GeX is used.
+% \begin{macrocode}
+ \ifnum \@ifundefined{OpMode}{0}{%
+ \@ifundefined{gexmode}{0}{%
+ \ifnum\gexmode>0 \OpMode\else 0\fi
+ }}>1 %
+ \def\x##1{%
+ \immediate\special{!=##1}%
+ }%
+ \fi
+ \x{%
+ /product where{%
+ pop %
+ product(Distiller)search{%
+ pop pop pop %
+ version(.)search{%
+ exch pop exch pop%
+ (3011)eq{%
+ gsave %
+ newpath 0 0 moveto closepath clip%
+ /Courier findfont 10 scalefont setfont %
+ 72 72 moveto(.)show %
+ grestore%
+ }if%
+ }{pop}ifelse%
+ }{pop}ifelse%
+ }if%
+ }%
+ \endgroup
+}
+%</pdfmark|dviwindo>
+% \end{macrocode}
+%
+% \subsection{Direct pdfmark support}
+% Drivers that load |pdfmark.def| have to provide the
+% correct macro definitions of
+% \begin{center}
+% \begin{tabular}{@{}ll@{}}
+% |\@pdfproducer|& for document information\\
+% |\literalps@out|& PostScript output\\
+% |\headerps@out|& PostScript output that goes in the header area\\
+% \end{tabular}
+% \end{center}
+% and the correct definitions of the following PostScript procedures:
+% \begin{center}
+% \begin{tabular}{@{}ll@{}}
+% |H.S|& start of anchor, link or rect\\
+% |#1 H.A|& end of anchor, argument=baselineskip in pt\\
+% |#1 H.L|& end of link, argument=baselineskip in pt\\
+% |H.R|& end of rect\\
+% |H.B|& raw rect code\\
+% \end{tabular}
+% \end{center}
+%
+% \begin{macrocode}
+%<*pdfmark>
+\Hy@breaklinks@unsupported
+\def\HyPat@ObjRef{%
+ \{[^{}]+\}%
+}
+\Hy@WrapperDef\hyper@anchor#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \pdfmark[\anchor@spot]{%
+ pdfmark=/DEST,%
+ linktype=anchor,%
+ View=/\@pdfview \@pdfviewparams,%
+ DestAnchor={#1}%
+ }%
+ \endgroup
+ \Hy@RestoreLastskip
+}
+\ltx@IfUndefined{hyper@anchorstart}{}{\endinput}
+\Hy@WrapperDef\hyper@anchorstart#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \literalps@out{H.S}%
+ \Hy@AllowHyphens
+ \xdef\hyper@currentanchor{#1}%
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \literalps@out{\strip@pt@and@otherjunk\baselineskip\space H.A}%
+ \pdfmark{%
+ pdfmark=/DEST,%
+ linktype=anchor,%
+ View=/\@pdfview \@pdfviewparams,%
+ DestAnchor=\hyper@currentanchor,%
+ }%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \ifHy@breaklinks
+ \else
+ \leavevmode
+ \ifmmode
+ \def\Hy@LinkMath{$}%
+ \else
+ \let\Hy@LinkMath\ltx@empty
+ \fi
+ \Hy@SaveSpaceFactor
+ \hbox\bgroup
+ \Hy@RestoreSpaceFactor
+ \Hy@LinkMath
+ \fi
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ \literalps@out{H.S}%
+ \Hy@AllowHyphens
+ \xdef\hyper@currentanchor{#2}%
+ \gdef\hyper@currentlinktype{#1}%
+}
+\def\hyper@linkend{%
+ \literalps@out{\strip@pt@and@otherjunk\baselineskip\space H.L}%
+ \ltx@IfUndefined{@\hyper@currentlinktype bordercolor}{%
+ \let\Hy@tempcolor\relax
+ }{%
+ \edef\Hy@tempcolor{%
+ \csname @\hyper@currentlinktype bordercolor\endcsname
+ }%
+ }%
+ \pdfmark{%
+ pdfmark=/ANN,%
+ linktype=link,%
+ Subtype=/Link,%
+ PDFAFlags=4,%
+ Dest=\hyper@currentanchor,%
+ AcroHighlight=\@pdfhighlight,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ Color=\Hy@tempcolor,%
+ Raw=H.B%
+ }%
+ \Hy@endcolorlink
+ \ifHy@breaklinks
+ \else
+ \Hy@LinkMath
+ \Hy@SaveSpaceFactor
+ \egroup
+ \Hy@RestoreSpaceFactor
+ \fi
+}
+% \end{macrocode}
+%
+% We have to allow for |\baselineskip| having an optional
+% stretch and shrink (you meet this in slide packages, for instance),
+% so we need to strip off the junk. David Carlisle, of course,
+% wrote this bit of code.
+% \begin{macrocode}
+\begingroup
+ \catcode`P=12 %
+ \catcode`T=12 %
+ \lowercase{\endgroup
+ \gdef\rem@ptetc#1.#2PT#3!{#1\ifnum#2>\z@.#2\fi}%
+}
+\def\strip@pt@and@otherjunk#1{\expandafter\rem@ptetc\the#1!}
+% \end{macrocode}
+%
+% \begin{macro}{\hyper@pagetransition}
+% \begin{macrocode}
+\def\hyper@pagetransition{%
+ \ifx\@pdfpagetransition\relax
+ \else
+ \ifx\@pdfpagetransition\@empty
+ % 1. Does an old entry have to be deleted?
+ % 2. If 1=yes, how to delete?
+ \else
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ \string{ThisPage\string}%
+ <</Trans << /S /\@pdfpagetransition\space >> >>%
+ }%
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hyper@pageduration}
+% \begin{macrocode}
+\def\hyper@pageduration{%
+ \ifx\@pdfpageduration\relax
+ \else
+ \ifx\@pdfpageduration\@empty
+ % 1. Does an old entry have to be deleted?
+ % 2. If 1=yes, how to delete?
+ \else
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ \string{ThisPage\string}%
+ <</Dur \@pdfpageduration>>%
+ }%
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hyper@pagehidden}
+% \begin{macrocode}
+\def\hyper@pagehidden{%
+ \ifHy@useHidKey
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ \string{ThisPage\string}%
+ <</Hid \ifHy@pdfpagehidden true\else false\fi>>%
+ }%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\g@addto@macro\Hy@EveryPageBoxHook{%
+ \hyper@pagetransition
+ \hyper@pageduration
+ \hyper@pagehidden
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\hyper@image#1#2{%
+ \hyper@linkurl{#2}{#1}%
+}
+\def\Hy@undefinedname{UNDEFINED}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \ltx@IfUndefined{@#1bordercolor}{%
+ \let\Hy@tempcolor\relax
+ }{%
+ \edef\Hy@tempcolor{\csname @#1bordercolor\endcsname}%
+ }%
+ \begingroup
+ \protected@edef\Hy@testname{#2}%
+ \ifx\Hy@testname\@empty
+ \Hy@Warning{%
+ Empty destination name,\MessageBreak
+ using `\Hy@undefinedname'%
+ }%
+ \let\Hy@testname\Hy@undefinedname
+ \fi
+ \pdfmark[{#3}]{%
+ Color=\Hy@tempcolor,%
+ linktype={#1},%
+ AcroHighlight=\@pdfhighlight,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ pdfmark=/ANN,%
+ Subtype=/Link,%
+ PDFAFlags=4,%
+ Dest=\Hy@testname
+ }%
+ \endgroup
+}
+\newtoks\pdf@docset
+\def\PDF@FinishDoc{%
+ \Hy@UseMaketitleInfos
+ \HyInfo@GenerateAddons
+ \let\Hy@temp\@empty
+ \ifx\@pdfcreationdate\@empty
+ \else
+ \def\Hy@temp{CreationDate=\@pdfcreationdate,}%
+ \fi
+ \ifx\@pdfmoddate\@empty
+ \else
+ \expandafter\def\expandafter\Hy@temp\expandafter{%
+ \Hy@temp
+ ModDate=\@pdfmoddate,%
+ }%
+ \fi
+ \ifx\@pdfproducer\relax
+ \else
+ \expandafter\def\expandafter\Hy@temp\expandafter{%
+ \Hy@temp
+ Producer=\@pdfproducer,%
+ }%
+ \fi
+ \expandafter
+ \pdfmark\expandafter{%
+ \Hy@temp
+ pdfmark=/DOCINFO,%
+ Title=\@pdftitle,%
+ Subject=\@pdfsubject,%
+ Creator=\@pdfcreator,%
+ Author=\@pdfauthor,%
+ Keywords=\@pdfkeywords,%
+ Trapped=\@pdftrapped
+ }%
+ \ifx\HyInfo@Addons\@empty
+ \else
+ \pdfmark{%
+ pdfmark=/DOCINFO,%
+ Raw={\HyInfo@Addons}%
+ }%
+ \fi
+ \Hy@DisableOption{pdfauthor}%
+ \Hy@DisableOption{pdftitle}%
+ \Hy@DisableOption{pdfsubject}%
+ \Hy@DisableOption{pdfcreator}%
+ \Hy@DisableOption{addtopdfcreator}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfmoddate}%
+ \Hy@DisableOption{pdfproducer}%
+ \Hy@DisableOption{pdfkeywords}%
+ \Hy@DisableOption{pdftrapped}%
+ \Hy@DisableOption{pdfinfo}%
+}
+\def\PDF@SetupDoc{%
+ \def\Hy@temp{}%
+ \ifx\@pdfstartpage\@empty
+ \else
+ \ifx\@pdfstartview\@empty
+ \else
+ \edef\Hy@temp{%
+ ,Page=\@pdfstartpage
+ ,View=\@pdfstartview
+ }%
+ \fi
+ \fi
+ \edef\Hy@temp{%
+ \noexpand\pdfmark{%
+ pdfmark=/DOCVIEW,%
+ PageMode=/\@pdfpagemode
+ \Hy@temp
+ }%
+ }%
+ \Hy@temp
+ \ifx\@pdfpagescrop\@empty
+ \else
+ \pdfmark{pdfmark=/PAGES,CropBox=\@pdfpagescrop}%
+ \fi
+ \edef\Hy@temp{%
+ \ifHy@pdftoolbar\else /HideToolbar true\fi
+ \ifHy@pdfmenubar\else /HideMenubar true\fi
+ \ifHy@pdfwindowui\else /HideWindowUI true\fi
+ \ifHy@pdffitwindow /FitWindow true\fi
+ \ifHy@pdfcenterwindow /CenterWindow true\fi
+ \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
+ \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
+ \Hy@UseNameKey{Direction}\@pdfdirection
+ \Hy@UseNameKey{ViewArea}\@pdfviewarea
+ \Hy@UseNameKey{ViewClip}\@pdfviewclip
+ \Hy@UseNameKey{PrintArea}\@pdfprintarea
+ \Hy@UseNameKey{PrintClip}\@pdfprintclip
+ \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
+ \Hy@UseNameKey{Duplex}\@pdfduplex
+ \ifx\@pdfpicktraybypdfsize\@empty
+ \else
+ /PickTrayByPDFSize \@pdfpicktraybypdfsize
+ \fi
+ \ifx\@pdfprintpagerange\@empty
+ \else
+ /PrintPageRange[\@pdfprintpagerange]%
+ \fi
+ \ifx\@pdfnumcopies\@empty
+ \else
+ /NumCopies \@pdfnumcopies
+ \fi
+ }%
+ \Hy@pstringdef\Hy@pstringB{\@baseurl}%
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ \string{Catalog\string}<<%
+ \ifx\Hy@temp\@empty
+ \else
+ /ViewerPreferences<<\Hy@temp>>%
+ \fi
+ \Hy@UseNameKey{PageLayout}\@pdfpagelayout
+ \ifx\@pdflang\relax
+ \else
+ /Lang(\@pdflang)%
+ \fi
+ \ifx\@baseurl\@empty
+ \else
+ /URI<</Base(\Hy@pstringB)>>%
+ \fi
+ >>%
+ }%
+ }%
+}
+%</pdfmark>
+%<*pdfmarkbase>
+% \end{macrocode}
+% We define a single macro, pdfmark, which uses the `keyval' system
+% to define the various allowable keys; these are \emph{exactly}
+% as listed in the pdfmark reference for Acrobat 3.0. The only addition
+% is \texttt{pdfmark} which specifies the type of pdfmark to create
+% (like ANN, LINK etc). The
+% surrounding round and square brackets in the pdfmark commands
+% are supplied, but you have to put in / characters as needed for the
+% values.
+%
+% \begin{macrocode}
+\newif\ifHy@pdfmarkerror
+\def\pdfmark{\@ifnextchar[{\pdfmark@}{\pdfmark@[]}}
+\def\pdfmark@[#1]#2{%
+ \Hy@pdfmarkerrorfalse
+ \edef\@processme{\noexpand\pdf@toks={\the\pdf@defaulttoks}}%
+ \@processme
+ \let\pdf@type\relax
+ \let\pdf@objdef\ltx@empty
+ \kvsetkeys{PDF}{#2}%
+ \ifHy@pdfmarkerror
+ \else
+ \ifx\pdf@type\relax
+ \Hy@WarningNoLine{no pdfmark type specified in #2!!}%
+ \ifx\\#1\\%
+ \else
+ \pdf@rect{#1}%
+ \fi
+ \else
+ \ifx\\#1\\%
+ \literalps@out{%
+ [%
+ \ifx\pdf@objdef\ltx@empty
+ \else
+ /_objdef\string{\pdf@objdef\string}%
+ \fi
+ \the\pdf@toks\space\pdf@type\space pdfmark%
+ }%
+ \else
+ \ltx@IfUndefined{@\pdf@linktype color}{%
+ \Hy@colorlink\@linkcolor
+ }{%
+ \expandafter\Hy@colorlink
+ \csname @\pdf@linktype color\endcsname
+ }%
+ \pdf@rect{#1}%
+ \literalps@out{%
+ [%
+ \ifx\pdf@objdef\ltx@empty
+ \else
+ /_objdef\string{\pdf@objdef\string}%
+ \fi
+ \the\pdf@toks\space\pdf@type\space pdfmark%
+ }%
+ \Hy@endcolorlink
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% The complicated bit is working out the right enclosing rectangle of
+% some piece of \TeX\ text, needed by the /Rect key. This solution originates
+% with Toby Thain (\texttt{tobyt@netspace.net.au}).
+%
+% For the case breaklinks is enabled, I have added two hooks,
+% the first one for package setouterhbox, it provides
+% a hopefully better method without setting the text twice.
+% \begin{quote}
+% \verb|\usepackage[hyperref]{setouterhbox}|
+% \end{quote}
+% With the second hook, also you can set the text twice, e.g.:
+% \begin{quote}
+% \verb|\long\def\Hy@setouterhbox#1#2{\long\def\my@temp{#2}}|\\
+% \verb|\def\Hy@breaklinksunhbox#1{\my@temp}|
+% \end{quote}
+% \begin{macrocode}
+\newsavebox{\pdf@box}
+\providecommand*{\Hy@setouterhbox}{\sbox}
+\providecommand*{\Hy@breaklinksunhbox}{\unhbox}
+\def\Hy@DEST{/DEST}
+\def\pdf@rect#1{%
+ \begingroup
+ \chardef\x=1 %
+ \def\Hy@temp{#1}%
+ \ifx\Hy@temp\ltx@empty
+ \chardef\x=0 %
+ \else
+ \def\y{\anchor@spot}%
+ \ifx\Hy@temp\y
+ \def\y{\relax}%
+ \ifx\anchor@spot\y
+ \chardef\x=0 %
+ \fi
+ \fi
+ \fi
+ \expandafter\endgroup
+ \ifcase\x
+ \literalps@out{H.S}%
+ \literalps@out{H.R}%
+ \else
+ \leavevmode
+ \Hy@SaveSpaceFactor
+ \ifmmode
+ \def\Hy@LinkMath{$}%
+ \else
+ \let\Hy@LinkMath\ltx@empty
+ \fi
+ \ifHy@breaklinks
+ \Hy@setouterhbox\pdf@box{%
+ \Hy@RestoreSpaceFactor
+ \Hy@LinkMath
+ \Hy@AllowHyphens#1\Hy@xspace@end
+ \Hy@LinkMath
+ \Hy@SaveSpaceFactor
+ }%
+ \else
+ \sbox\pdf@box{%
+ \Hy@RestoreSpaceFactor
+ \Hy@LinkMath
+ #1\Hy@xspace@end
+ \Hy@LinkMath
+ \Hy@SaveSpaceFactor
+ }%
+ \fi
+ \dimen@\ht\pdf@box
+ \ifdim\dp\pdf@box=\z@
+ \literalps@out{H.S}%
+ \else
+ \lower\dp\pdf@box\hbox{\literalps@out{H.S}}%
+ \fi
+% \end{macrocode}
+% If the text has to be horizontal mode stuff then just unbox
+% the saved box like this, which saves executing it twice, which can
+% mess up counters etc (thanks DPC\ldots).
+% \begin{macrocode}
+ \ifHy@breaklinks
+ \ifhmode
+ \Hy@breaklinksunhbox\pdf@box
+ \else
+ \box\pdf@box
+ \fi
+ \else
+ \expandafter\box\pdf@box
+ \fi
+% \end{macrocode}
+% but if it can have multiple paragraphs you'd need one of these,
+% but in that case the measured box size would be wrong anyway.
+% \begin{quote}
+% |\ifHy@breaklinks#1\else\box\pdf@box\fi|\\
+% |\ifHy@breaklinks{#1}\else\box\pdf@box\fi|
+% \end{quote}
+% \begin{macrocode}
+ \ifdim\dimen@=\z@
+ \literalps@out{H.R}%
+ \else
+ \raise\dimen@\hbox{\literalps@out{H.R}}%
+ \fi
+ \Hy@RestoreSpaceFactor
+ \fi
+ \ifx\pdf@type\Hy@DEST
+ \else
+ \pdf@addtoksx{H.B}%
+ \fi
+}
+% \end{macrocode}
+% All the supplied material is stored in a token list; since I do not
+% feel sure I quite understand these, things may not work as expected
+% with expansion. We'll have to experiment.
+% \begin{macrocode}
+\newtoks\pdf@toks
+\newtoks\pdf@defaulttoks
+\pdf@defaulttoks={}%
+\def\pdf@addtoks#1#2{%
+ \edef\@processme{\pdf@toks{\the\pdf@toks/#2 #1}}%
+ \@processme
+}
+\def\pdf@addtoksx#1{%
+ \edef\@processme{\pdf@toks{\the\pdf@toks\space #1}}%
+ \@processme
+}
+\def\PDFdefaults#1{%
+ \pdf@defaulttoks={#1}%
+}
+% \end{macrocode}
+% This is the list of allowed keys. See the Acrobat manual for an
+% explanation.
+% \begin{macrocode}
+% what is the type of pdfmark?
+\define@key{PDF}{pdfmark}{\def\pdf@type{#1}}
+% what is the link type?
+\define@key{PDF}{linktype}{\def\pdf@linktype{#1}}
+\def\pdf@linktype{link}
+% named object?
+\define@key{PDF}{objdef}{\edef\pdf@objdef{#1}}
+\let\pdf@objdef\ltx@empty
+% parameter is a stream of PDF
+\define@key{PDF}{Raw}{\pdf@addtoksx{#1}}
+% parameter is a name
+\define@key{PDF}{Action}{\pdf@addtoks{#1}{Action}}
+% parameter is a array
+\define@key{PDF}{Border}{%
+ \edef\Hy@temp{#1}%
+ \ifx\Hy@temp\@empty
+ \else
+ \pdf@addtoks{[#1]\Hy@BorderArrayPatch}{Border}% hash-ok
+ \fi
+}
+\let\Hy@BorderArrayPatch\@empty
+% parameter is a dictionary
+\define@key{PDF}{BorderStyle}{%
+ \edef\Hy@temp{#1}%
+ \ifx\Hy@temp\@empty
+ \else
+ \pdf@addtoks{<<#1>>}{BS}%
+ \fi
+}
+% parameter is a array
+\define@key{PDF}{Color}{%
+ \ifx\relax#1\relax
+ \else
+ \pdf@addtoks{[#1]}{Color}% hash-ok
+ \fi
+}
+% parameter is a string
+\define@key{PDF}{Contents}{\pdf@addtoks{(#1)}{Contents}}
+% parameter is a integer
+\define@key{PDF}{Count}{\pdf@addtoks{#1}{Count}}
+% parameter is a array
+\define@key{PDF}{CropBox}{\pdf@addtoks{[#1]}{CropBox}}% hash-ok
+% parameter is a string
+\define@key{PDF}{DOSFile}{\pdf@addtoks{(#1)}{DOSFile}}
+% parameter is a string or file
+\define@key{PDF}{DataSource}{\pdf@addtoks{(#1)}{DataSource}}
+% parameter is a destination
+\define@key{PDF}{Dest}{%
+ \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
+ \ifx\Hy@pstringDest\@empty
+ \Hy@pdfmarkerrortrue
+ \Hy@Warning{Destination with empty name ignored}%
+ \else
+ \pdf@addtoks{(\Hy@pstringDest) cvn}{Dest}%
+ \fi
+}
+\define@key{PDF}{DestAnchor}{%
+ \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
+ \ifx\Hy@pstringDest\@empty
+ \Hy@pdfmarkerrortrue
+ \Hy@Warning{Destination with empty name ignored}%
+ \else
+ \pdf@addtoks{(\Hy@pstringDest) cvn}{Dest}%
+ \fi
+}
+% parameter is a string
+\define@key{PDF}{Dir}{\pdf@addtoks{(#1)}{Dir}}
+% parameter is a string
+\define@key{PDF}{File}{\pdf@addtoks{(#1)}{File}}
+% parameter is a int
+\define@key{PDF}{Flags}{\pdf@addtoks{#1}{Flags}}
+\define@key{PDF}{PDFAFlags}{%
+ \ifHy@pdfa
+ \pdf@addtoks{#1}{F}%
+ \fi
+}
+% parameter is a name
+\define@key{PDF}{AcroHighlight}{%
+ \begingroup
+ \edef\x{#1}%
+ \expandafter\endgroup\ifx\x\@empty
+ \else
+ \pdf@addtoks{#1}{H}%
+ \fi
+}
+% parameter is a string
+\define@key{PDF}{ID}{\pdf@addtoks{[#1]}{ID}}% hash-ok
+% parameter is a string
+\define@key{PDF}{MacFile}{\pdf@addtoks{(#1)}{MacFile}}
+% parameter is a string
+\define@key{PDF}{ModDate}{\pdf@addtoks{(#1)}{ModDate}}
+% parameter is a string
+\define@key{PDF}{Op}{\pdf@addtoks{(#1)}{Op}}
+% parameter is a Boolean
+\define@key{PDF}{Open}{\pdf@addtoks{#1}{Open}}
+% parameter is a integer or name
+\define@key{PDF}{Page}{\pdf@addtoks{#1}{Page}}
+% parameter is a name
+\define@key{PDF}{PageMode}{\pdf@addtoks{#1}{PageMode}}
+% parameter is a string
+\define@key{PDF}{Params}{\pdf@addtoks{(#1)}{Params}}
+% parameter is a array
+\define@key{PDF}{Rect}{\pdf@addtoks{[#1]}{Rect}}% hash-ok
+% parameter is a integer
+\define@key{PDF}{SrcPg}{\pdf@addtoks{#1}{SrcPg}}
+% parameter is a name
+\define@key{PDF}{Subtype}{\pdf@addtoks{#1}{Subtype}}
+% parameter is a string
+\define@key{PDF}{Title}{\pdf@addtoks{(#1)}{Title}}
+% parameter is a string
+\define@key{PDF}{Unix}{\pdf@addtoks{(#1)}{Unix}}
+% parameter is a string
+\define@key{PDF}{UnixFile}{\pdf@addtoks{(#1)}{UnixFile}}
+% parameter is an array
+\define@key{PDF}{View}{\pdf@addtoks{[#1]}{View}}% hash-ok
+% parameter is a string
+\define@key{PDF}{WinFile}{\pdf@addtoks{(#1)}{WinFile}}
+% \end{macrocode}
+% These are the keys used in the DOCINFO section.
+% \begin{macrocode}
+\define@key{PDF}{Author}{\pdf@addtoks{(#1)}{Author}}
+\define@key{PDF}{Creator}{\pdf@addtoks{(#1)}{Creator}}
+\define@key{PDF}{CreationDate}{\pdf@addtoks{(#1)}{CreationDate}}
+\define@key{PDF}{ModDate}{\pdf@addtoks{(#1)}{ModDate}}
+\define@key{PDF}{Producer}{\pdf@addtoks{(#1)}{Producer}}
+\define@key{PDF}{Subject}{\pdf@addtoks{(#1)}{Subject}}
+\define@key{PDF}{Keywords}{\pdf@addtoks{(#1)}{Keywords}}
+\define@key{PDF}{ModDate}{\pdf@addtoks{(#1)}{ModDate}}
+\define@key{PDF}{Base}{\pdf@addtoks{(#1)}{Base}}
+\define@key{PDF}{URI}{\pdf@addtoks{#1}{URI}}
+\define@key{PDF}{Trapped}{%
+ \edef\Hy@temp{#1}%
+ \ifx\Hy@temp\@empty
+ \else
+ \pdf@addtoks{/#1}{Trapped}%
+ \fi
+}
+
+%</pdfmarkbase>
+%<*pdfmark>
+\def\Acrobatmenu#1#2{%
+ \EdefEscapeName\Hy@temp@menu{#1}%
+ \Hy@Acrobatmenu{#1}{#2}{%
+ \pdfmark[{#2}]{%
+ linktype=menu,%
+ pdfmark=/ANN,%
+ AcroHighlight=\@pdfhighlight,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ Color=\@menubordercolor,%
+ Action={<</Subtype/Named/N/\Hy@temp@menu>>},%
+ Subtype=/Link,%
+ PDFAFlags=4%
+ }%
+ }%
+}
+% \end{macrocode}
+% And now for some useful examples:
+% \begin{macrocode}
+\def\PDFNextPage{\@ifnextchar[{\PDFNextPage@}{\PDFNextPage@[]}}
+\def\PDFNextPage@[#1]#2{%
+ \pdfmark[{#2}]{%
+ #1,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ Color=.2 .1 .5,%
+ pdfmark=/ANN,%
+ Subtype=/Link,%
+ PDFAFlags=4,%
+ Page=/Next%
+ }%
+}
+\def\PDFPreviousPage{%
+ \@ifnextchar[{\PDFPreviousPage@}{\PDFPreviousPage@[]}%
+}
+\def\PDFPreviousPage@[#1]#2{%
+ \pdfmark[{#2}]{%
+ #1,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ Color=.4 .4 .1,%
+ pdfmark=/ANN,%
+ Subtype=/Link,%
+ PDFAFlags=4,%
+ Page=/Prev%
+ }%
+}
+\def\PDFOpen#1{%
+ \pdfmark{#1,pdfmark=/DOCVIEW}%
+}
+% \end{macrocode}
+% This will only work if you use Distiller 2.1 or higher.
+% \begin{macrocode}
+\def\hyper@linkurl#1#2{%
+ \begingroup
+ \Hy@pstringdef\Hy@pstringURI{#2}%
+ \hyper@chars
+ \leavevmode
+ \pdfmark[{#1}]{%
+ pdfmark=/ANN,%
+ linktype=url,%
+ AcroHighlight=\@pdfhighlight,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ Color=\@urlbordercolor,%
+ Action={<<%
+ /Subtype/URI%
+ /URI(\Hy@pstringURI)%
+ \ifHy@href@ismap
+ /IsMap true%
+ \fi
+ >>},%
+ Subtype=/Link,%
+ PDFAFlags=4%
+ }%
+ \endgroup
+}
+\def\hyper@linkfile#1#2#3{%
+ \begingroup
+ \def\Hy@pstringF{#2}%
+ \Hy@CleanupFile\Hy@pstringF
+ \Hy@pstringdef\Hy@pstringF\Hy@pstringF
+ \Hy@pstringdef\Hy@pstringD{#3}%
+ \Hy@MakeRemoteAction
+ \leavevmode
+ \pdfmark[{#1}]{%
+ pdfmark=/ANN,%
+ Subtype=/Link,%
+ PDFAFlags=4,%
+ AcroHighlight=\@pdfhighlight,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ linktype=file,%
+ Color=\@filebordercolor,%
+ Action={%
+ <<%
+ /S/GoToR%
+ \Hy@SetNewWindow
+ /F(\Hy@pstringF)%
+ /D%
+ \ifx\\#3\\%
+ [\Hy@href@page\@pdfremotestartview]%
+ \else
+ (\Hy@pstringD)cvn%
+ \fi
+ \Hy@href@nextactionraw
+ >>%
+ }%
+ }%
+ \endgroup
+}
+\def\@hyper@launch run:#1\\#2#3{%
+ \begingroup
+ \Hy@pstringdef\Hy@pstringF{#1}%
+ \Hy@pstringdef\Hy@pstringP{#3}%
+ \leavevmode
+ \pdfmark[{#2}]{%
+ pdfmark=/ANN,%
+ Subtype=/Link,%
+ PDFAFlags=4,%
+ AcroHighlight=\@pdfhighlight,%
+ Border=\@pdfborder,%
+ BorderStyle=\@pdfborderstyle,%
+ linktype=run,%
+ Color=\@runbordercolor,%
+ Action={%
+ <<%
+ /S/Launch%
+ \Hy@SetNewWindow
+ /F(\Hy@pstringF)%
+ \ifx\\#3\\%
+ \else
+ /Win<</P(\Hy@pstringP)/F(\Hy@pstringF)>>%
+ \fi
+ \Hy@href@nextactionraw
+ >>%
+ }%
+ }%
+ \endgroup
+}
+%</pdfmark>
+% \end{macrocode}
+% Unfortunately, some parts of the |pdfmark|
+% PostScript code depend on vagaries
+% of the dvi driver. We isolate here all the problems.
+%
+% \subsection{Rokicki's dvips}
+% dvips thinks in 10ths of a big point, its
+% coordinate space is resolution dependent,
+% and its $y$ axis starts at the top of the
+% page. Other drivers can and will be different!
+%
+% The work is done in |SDict|, because we add in some header
+% definitions in a moment.
+% \begin{macrocode}
+%<*dvips>
+\providecommand*{\XR@ext}{pdf}
+\let\Hy@raisedlink\ltx@empty
+\def\literalps@out#1{\special{ps:SDict begin #1 end}}%
+\def\headerps@out#1{\special{! #1}}%
+\input{pdfmark.def}%
+\ifx\@pdfproducer\relax
+ \def\@pdfproducer{dvips + Distiller}%
+\fi
+\providecommand*\@pdfborder{0 0 1}
+\providecommand*\@pdfborderstyle{}
+\providecommand*\@pdfview{XYZ}
+\providecommand*\@pdfviewparams{ H.V}
+\def\Hy@BorderArrayPatch{BorderArrayPatch}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\g@addto@macro\Hy@FirstPageHook{%
+ \headerps@out{%
+% \end{macrocode}
+% Unless I am going mad, this \emph{appears} to be the relationship
+% between the default coordinate system (PDF), and dvips;
+% \begin{verbatim}
+% /DvipsToPDF { .01383701 div Resolution div } def
+% /PDFToDvips { .01383701 mul Resolution mul } def
+% \end{verbatim}
+% the latter's coordinates are resolution dependent, but what that
+% .01383701 is, who knows? well, almost everyone except me, I expect\ldots
+% And yes, Maarten Gelderman \texttt{<mgelderman@econ.vu.nl>}
+% points out that its 1/72.27 (the number of points to an inch, big points
+% to inch is 1/72). This also suggests that the code would be more
+% understandable (and exact) if 0.013 div would be replaced by 72.27 mul,
+% so here we go. If this isn't right, I'll revert it.
+% \begin{macrocode}
+ /DvipsToPDF{72.27 mul Resolution div} def%
+ /PDFToDvips{72.27 div Resolution mul} def%
+ /BPToDvips{72 div Resolution mul}def%
+% \end{macrocode}
+% The values inside the /Boder array are not taken literally, but
+% interpreted by ghostscript using the resolution of the dvi driver.
+% I don't know how other distiller programs behaves in this manner.
+% \begin{macrocode}
+ /BorderArrayPatch{%
+ [exch{%
+ dup dup type/integertype eq exch type/realtype eq or%
+ {BPToDvips}if%
+ }forall]%
+ }def%
+% \end{macrocode}
+% The rectangle around the links starts off
+% \emph{exactly} the size of the box;
+% we will to make it slightly bigger, 1 point on all sides.
+% \begin{macrocode}
+ /HyperBorder {1 PDFToDvips} def%
+ /H.V {pdf@hoff pdf@voff null} def%
+ /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def%
+% \end{macrocode}
+% |H.S| (start of anchor, link, or rect) stores
+% the $x$ and $y$ coordinates of the current point, in PDF coordinates
+% \begin{macrocode}
+ /H.S {%
+ currentpoint %
+ HyperBorder add /pdf@lly exch def %
+ dup DvipsToPDF 72 add /pdf@hoff exch def %
+ HyperBorder sub /pdf@llx exch def%
+ } def%
+% \end{macrocode}
+%
+% The calculation of upper left $y$ is done without
+% raising the point in \TeX,
+% by simply adding on the current |\baselineskip| to the current $y$.
+% This is usually too much, so we remove a notional 2 points.
+%
+% We have to see what the current baselineskip is, and convert it
+% to the dvips coordinate system.
+%
+% Argument: baselineskip in pt.
+% The $x$ and $y$ coordinates of the current point, minus the baselineskip
+% \begin{macrocode}
+ /H.L {%
+ 2 sub dup%
+ /HyperBasePt exch def %
+ PDFToDvips /HyperBaseDvips exch def %
+ currentpoint %
+ HyperBaseDvips sub /pdf@ury exch def%
+ /pdf@urx exch def%
+ } def%
+ /H.A {%
+ H.L %
+% |/pdf@voff| = the distance from the top of the page to a point
+% |\baselineskip| above the current point in PDF coordinates
+ currentpoint exch pop %
+ vsize 72 sub exch DvipsToPDF %
+ HyperBasePt sub % baseline skip
+ sub /pdf@voff exch def%
+ } def%
+ /H.R {%
+ currentpoint %
+ HyperBorder sub /pdf@ury exch def %
+ HyperBorder add /pdf@urx exch def %
+% |/pdf@voff| = the distance from the top of the page to the current point, in
+% PDF coordinates
+ currentpoint exch pop vsize 72 sub %
+ exch DvipsToPDF sub /pdf@voff exch def%
+ } def%
+ }%
+}
+\AtBeginShipoutFirst{%
+ \ifHy@setpagesize
+ \begingroup
+ \@ifundefined{stockwidth}{%
+ \ifdim\paperwidth>\z@
+ \ifdim\paperheight>\z@
+ \special{papersize=\the\paperwidth,\the\paperheight}%
+ \fi
+ \fi
+ }{%
+ \ifdim\stockwidth>\z@
+ \ifdim\stockheight>\z@
+ \special{papersize=\the\stockwidth,\the\stockheight}%
+ \fi
+ \fi
+ }%
+ \endgroup
+ \fi
+ \Hy@DisableOption{setpagesize}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\setpdflinkmargin#1{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \literalps@out{%
+ /HyperBorder{\strip@pt\dimen@\space PDFToDvips}def%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</dvips>
+% \end{macrocode}
+%
+% \subsection{VTeX's vtexpdfmark driver}
+%
+% This part is derived from the dvips
+% (many names reflect this).
+%
+% The origin seems to be the same as TeX's origin,
+% 1 in from the left and 1 in downwards from the top.
+% The direction of the $y$ axis is downwards,
+% the opposite of the dvips case. Units seems
+% to be pt or bp.
+%
+% \begin{macrocode}
+%<*vtexpdfmark>
+\providecommand*{\XR@ext}{pdf}
+\let\Hy@raisedlink\ltx@empty
+\def\literalps@out#1{\special{pS:#1}}%
+\def\headerps@out#1{\immediate\special{pS:#1}}%
+\input{pdfmark.def}%
+\ifx\@pdfproducer\relax
+ \ifnum\OpMode=\@ne
+ \def\@pdfproducer{VTeX}%
+ \else
+ \def\@pdfproducer{VTeX + Distiller}%
+ \fi
+\fi
+\providecommand*\@pdfborder{0 0 1}
+\providecommand*\@pdfborderstyle{}
+\providecommand*\@pdfview{XYZ}
+\providecommand*\@pdfviewparams{ H.V}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\g@addto@macro\Hy@FirstPageHook{%
+ \headerps@out{%
+ /vsize {\Hy@pageheight} def%
+% \end{macrocode}
+% The rectangle around the links starts off
+% \emph{exactly} the size of the box;
+% we will to make it slightly bigger, 1 point on all sides.
+% \begin{macrocode}
+ /HyperBorder {1} def%
+ /H.V {pdf@hoff pdf@voff null} def%
+ /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def%
+% \end{macrocode}
+%
+% |H.S| (start of anchor, link, or rect) stores
+% the $x$ and $y$ coordinates of the current point, in PDF coordinates:
+% $\mathtt{pdf@lly} = Y_c - \mathtt{HyperBorder}$,
+% $\mathtt{pdf@hoff} = X_c + 72$,
+% $\mathtt{pdf@llx} = X_c - \mathtt{HyperBorder}$
+% \begin{macrocode}
+ /H.S {%
+ currentpoint %
+ HyperBorder sub%
+ /pdf@lly exch def %
+ dup 72 add /pdf@hoff exch def %
+ HyperBorder sub%
+ /pdf@llx exch def%
+ } def%
+% \end{macrocode}
+% The $x$ and $y$ coordinates of the current point, minus the
+% |\baselineskip|:
+% $\mathtt{pdf@ury} = Y_c + \mathtt{HyperBasePt} + \mathtt{HyperBorder}$,
+% $\mathtt{pdf@urx} = X_c + \mathtt{HyperBorder}$
+% \begin{macrocode}
+ /H.L {%
+ 2 sub%
+ /HyperBasePt exch def %
+ currentpoint %
+ HyperBasePt add HyperBorder add%
+ /pdf@ury exch def %
+ HyperBorder add%
+ /pdf@urx exch def%
+ } def%
+ /H.A {%
+ H.L %
+ currentpoint exch pop %
+ vsize 72 sub exch %
+ HyperBasePt add add%
+ /pdf@voff exch def%
+ } def%
+% \end{macrocode}
+% $\mathtt{pdf@ury} = Y_c + \mathtt{HyperBorder}$,
+% $\mathtt{pdf@urx} = X_c + \mathtt{HyperBorder}$
+% \begin{macrocode}
+ /H.R {%
+ currentpoint %
+ HyperBorder add%
+ /pdf@ury exch def %
+ HyperBorder add%
+ /pdf@urx exch def %
+ currentpoint exch pop vsize 72 sub add%
+ /pdf@voff exch def%
+ } def%
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\setpdflinkmargin#1{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \literalps@out{%
+ /HyperBorder{\strip@pt\dimen@}def%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</vtexpdfmark>
+% \end{macrocode}
+%
+% \subsection{Textures}
+%
+% \begin{macrocode}
+%<*textures>
+\providecommand*{\XR@ext}{pdf}
+% \end{macrocode}
+%
+% At the suggestion of Jacques Distler (distler@golem.ph.utexas.edu), try
+% to derive a suitable driver for Textures. This was initially a copy of
+% dvips, with some guesses about Textures behaviour.
+% Ross Moore (\Email{ross@maths.mq.edu.au}) has added modifications
+% for better compatibility, and to support use of pdfmark.
+%
+% Start by defining a macro that expands to the end-of-line character.
+% This will be used to format the appearance of PostScript code,
+% to enhance readability, and avoid excessively long lines which
+% might otherwise become broken to bad places.
+%
+% \begin{macro}{\Hy@ps@CR}
+% The macro \verb|\Hy@ps@CR| contains the end-of-line character.
+% \begin{macrocode}
+\begingroup
+ \obeylines %
+ \gdef\Hy@ps@CR{\noexpand
+ }%
+\endgroup %
+% \end{macrocode}
+% \end{macro}
+%
+% Textures has two types of \verb|\special| command for inserting
+% PostScript code directly into the dvi output. The `postscript'
+% way preserves TeX's idea of where on the page the \verb|\special|
+% occurred, but it wraps the contents with a \verb|save|--\verb|restore|
+% pair, and adjusts the user-space coordinate system for local drawing
+% commands. The `rawpostscript' way simply inserts code, without regard
+% for the location on the page.
+%
+% Thus, to put arbitrary PostScript coding at a fixed location requires
+% using \emph{both} \verb|\special| constructions.
+% It works by pushing the device-space coordinates onto the operand stack,
+% where they can be used to transform back to the correct user-space
+% coordinates for the whole page, within a `rawpostscript' \verb|\special|.
+%
+% \begin{macrocode}
+\def\literalps@out#1{%
+ \special{postscript 0 0 transform}%
+ \special{rawpostscript itransform moveto\Hy@ps@CR #1}%
+}%
+%
+% \end{macrocode}
+%
+% The `prepostscript' is a 3rd kind of \verb|\special|, used for
+% inserting definitions into the dictionaries, before page-building
+% begins. These are to be available for use on all pages.
+%
+% \begin{macrocode}
+\def\headerps@out#1{%
+ \special{%
+ prepostscript TeXdict begin\Hy@ps@CR
+ #1\Hy@ps@CR
+ end%
+ }%
+}%
+%
+% \end{macrocode}
+%
+% To correctly support the \verb|pdfmark| method, for embedding
+% PDF definitions with \verb|.ps| files in a non-intrusive way,
+% an appropriate definition needs to be made \emph{before}
+% the file \verb|pdfmark.def| is read. Other parameters are best
+% set afterwards.
+%
+% \begin{macrocode}
+\g@addto@macro\Hy@FirstPageHook{%
+ \headerps@out{%
+ /betterpdfmark {%
+ systemdict begin %
+ dup /BP eq%
+ {cleartomark gsave nulldevice [}%
+ {dup /EP eq%
+ {cleartomark cleartomark grestore}%
+ {cleartomark}%
+ ifelse%
+ }ifelse %
+ end%
+ }def\Hy@ps@CR
+ __pdfmark__ not{/pdfmark /betterpdfmark load def}if%
+ }% end of \headerps@out
+}% end of \AtBeginShipoutFirst
+%
+\input{pdfmark.def}%
+%
+\ifx\@pdfproducer\relax
+ \def\@pdfproducer{Textures + Distiller}%
+\fi
+\providecommand*\@pdfborder{0 0 1}
+\providecommand*\@pdfborderstyle{}
+\providecommand*\@pdfview{XYZ}
+\providecommand*\@pdfviewparams{ H.V}
+%
+% \end{macrocode}
+% These are called at the start and end of unboxed links;
+% their job is to leave available PS variables called
+% |pdf@llx pdf@lly pdf@urx pdf@ury|, which are the coordinates
+% of the bounding rectangle of the link, and |pdf@hoff pdf@voff|
+% which are the PDF page offsets.
+% The Rect pair are called at the LL and UR corners of a box
+% known to \TeX.
+% \begin{macrocode}
+\Hy@AtBeginDocument{%
+ \headerps@out{%
+% \end{macrocode}
+% Textures lives in normal points, I think. So conversion from one
+% coordinate system to another involves doing nothing.
+%
+% \begin{macrocode}
+ /vsize {\Hy@pageheight} def%
+ /DvipsToPDF {} def%
+ /PDFToDvips {} def%
+ /BPToDvips {} def%
+ /HyperBorder { 1 PDFToDvips } def\Hy@ps@CR
+ /H.V {pdf@hoff pdf@voff null} def\Hy@ps@CR
+ /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def\Hy@ps@CR
+ /H.S {%
+ currentpoint %
+ HyperBorder add /pdf@lly exch def %
+ dup DvipsToPDF 72 add /pdf@hoff exch def %
+ HyperBorder sub /pdf@llx exch def%
+ } def\Hy@ps@CR
+ /H.L {%
+ 2 sub %
+ PDFToDvips /HyperBase exch def %
+ currentpoint %
+ HyperBase sub /pdf@ury exch def%
+ /pdf@urx exch def%
+ } def\Hy@ps@CR
+ /H.A {%
+ H.L %
+ currentpoint exch pop %
+ vsize 72 sub exch DvipsToPDF %
+ HyperBase sub % baseline skip
+ sub /pdf@voff exch def%
+ } def\Hy@ps@CR
+ /H.R {%
+ currentpoint %
+ HyperBorder sub /pdf@ury exch def %
+ HyperBorder add /pdf@urx exch def %
+ currentpoint exch pop vsize 72 sub %
+ exch DvipsToPDF sub /pdf@voff exch def%
+ } def\Hy@ps@CR
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\setpdflinkmargin#1{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \literalps@out{%
+ /HyperBorder{\strip@pt\dimen@\space PDFToDvips}def%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macrocode}
+\Hy@AtBeginDocument{%
+ \ifHy@colorlinks
+ \headerps@out{/PDFBorder{/Border [0 0 0]}def}%
+ \fi
+}
+% \end{macrocode}
+% Textures provides built-in support for HyperTeX specials
+% so this part combines code from \verb|hypertex.def| with what
+% is established by loading \verb|pdfmark.def|, or any other driver.
+% \begin{macrocode}
+\expandafter\let\expandafter\keepPDF@SetupDoc
+ \csname PDF@SetupDoc\endcsname
+\def\PDF@SetupDoc{%
+ \ifx\@baseurl\@empty
+ \else
+ \special{html:<base href="\@baseurl">}%
+ \fi
+ \keepPDF@SetupDoc
+}
+\Hy@WrapperDef\hyper@anchor#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \let\protect=\string
+ \special{html:<a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+ \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
+ \special{html:</a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\Hy@WrapperDef\hyper@anchorstart#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \hyper@chars
+ \special{html:<a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \special{html:</a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\def\@urltype{url}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\@urltype
+ \special{html:<a href=\hyper@quote#2\hyper@quote>}%
+ \else
+ \begingroup
+ \hyper@chars
+ \special{%
+ html:<a href=%
+ \hyper@quote\#\HyperDestNameFilter{#2}\hyper@quote>%
+ }%
+ \endgroup
+ \fi
+}
+\def\hyper@linkend{%
+ \special{html:</a>}%
+ \Hy@endcolorlink
+}
+\def\hyper@linkfile#1#2#3{%
+ \hyper@linkurl{#1}{%
+ \Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi
+ }%
+}
+\def\hyper@linkurl#1#2{%
+ \leavevmode
+ \ifHy@raiselinks
+ \Hy@SaveSpaceFactor
+ \Hy@SaveSavedSpaceFactor
+ \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
+ \Hy@RestoreSavedSpaceFactor
+ \@linkdim\dp\@tempboxa
+ \lower\@linkdim\hbox{%
+ \hyper@chars
+ \special{html:<a href=\hyper@quote#2\hyper@quote>}%
+ }%
+ \Hy@colorlink\@urlcolor
+ \Hy@RestoreSpaceFactor
+ #1\Hy@xspace@end
+ \Hy@SaveSpaceFactor
+ \@linkdim\ht\@tempboxa
+ \advance\@linkdim by -6.5\p@
+ \raise\@linkdim\hbox{\special{html:</a>}}%
+ \Hy@endcolorlink
+ \Hy@RestoreSpaceFactor
+ \else
+ \begingroup
+ \hyper@chars
+ \special{html:<a href=\hyper@quote#2\hyper@quote>}%
+ \Hy@colorlink\@urlcolor#1\Hy@xspace@end
+ \special{html:</a>}%
+ \Hy@endcolorlink
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+% Very poor implementation of \cs{hyper@link} without considering |#1|.
+% \begin{macrocode}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \hyper@linkurl{#3}{\#\HyperDestNameFilter{#2}}%
+}
+\def\hyper@image#1#2{%
+ \begingroup
+ \hyper@chars
+ \special{html:<img src=\hyper@quote#1\hyper@quote>}%
+ \endgroup
+}
+%</textures>
+% \end{macrocode}
+% \subsection{dvipsone}
+% \begin{macrocode}
+% \subsection{dvipsone driver}
+% Over-ride the default setup macro in pdfmark driver to use Y\&Y
+% |\special| commands.
+%<*dvipsone>
+\providecommand*{\XR@ext}{pdf}
+\let\Hy@raisedlink\ltx@empty
+\providecommand*\@pdfborder{0 0 1}
+\providecommand*\@pdfborderstyle{}
+\def\literalps@out#1{\special{ps:#1}}%
+\def\headerps@out#1{\special{headertext=#1}}%
+\input{pdfmark.def}%
+\HyInfo@AddonUnsupportedtrue
+\def\PDF@FinishDoc{%
+ \Hy@UseMaketitleInfos
+ \HyInfo@TrappedUnsupported
+ \special{PDF: Keywords \@pdfkeywords}%
+ \special{PDF: Title \@pdftitle}%
+ \special{PDF: Creator \@pdfcreator}%
+ \ifx\@pdfcreationdate\@empty
+ \else
+ \special{PDF: CreationDate \@pdfcreationdate}%
+ \fi
+ \ifx\@pdfmoddate\@empty
+ \else
+ \special{PDF: ModDate \@pdfmoddate}%
+ \fi
+ \special{PDF: Author \@pdfauthor}%
+ \ifx\@pdfproducer\relax
+ \else
+ \special{PDF: Producer \@pdfproducer}%
+ \fi
+ \special{PDF: Subject \@pdfsubject}%
+ \Hy@DisableOption{pdfauthor}%
+ \Hy@DisableOption{pdftitle}%
+ \Hy@DisableOption{pdfsubject}%
+ \Hy@DisableOption{pdfcreator}%
+ \Hy@DisableOption{addtopdfcreator}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfcreationdate}%
+ \Hy@DisableOption{pdfmoddate}%
+ \Hy@DisableOption{pdfproducer}%
+ \Hy@DisableOption{pdfkeywords}%
+ \Hy@DisableOption{pdftrapped}%
+ \Hy@DisableOption{pdfinfo}%
+}
+\def\PDF@SetupDoc{%
+ \def\Hy@temp{}%
+ \ifx\@pdfstartpage\@empty
+ \else
+ \ifx\@pdfstartview\@empty
+ \else
+ \edef\Hy@temp{%
+ ,Page=\@pdfstartpage
+ ,View=\@pdfstartview
+ }%
+ \fi
+ \fi
+ \edef\Hy@temp{%
+ \noexpand\pdfmark{%
+ pdfmark=/DOCVIEW,%
+ PageMode=/\@pdfpagemode
+ \Hy@temp
+ }%
+ }%
+ \Hy@temp
+ \ifx\@pdfpagescrop\@empty
+ \else
+ \pdfmark{pdfmark=/PAGES,CropBox=\@pdfpagescrop}%
+ \fi
+ \edef\Hy@temp{%
+ \ifHy@pdftoolbar\else /HideToolbar true\fi
+ \ifHy@pdfmenubar\else /HideMenubar true\fi
+ \ifHy@pdfwindowui\else /HideWindowUI true\fi
+ \ifHy@pdffitwindow /FitWindow true\fi
+ \ifHy@pdfcenterwindow /CenterWindow true\fi
+ \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
+ \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
+ \Hy@UseNameKey{Direction}\@pdfdirection
+ \Hy@UseNameKey{ViewArea}\@pdfviewarea
+ \Hy@UseNameKey{ViewClip}\@pdfviewclip
+ \Hy@UseNameKey{PrintArea}\@pdfprintarea
+ \Hy@UseNameKey{PrintClip}\@pdfprintclip
+ \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
+ \Hy@UseNameKey{Duplex}\@pdfduplex
+ \ifx\@pdfpicktraybypdfsize\@empty
+ \else
+ /PickTrayByPDFSize \@pdfpicktraybypdfsize
+ \fi
+ \ifx\@pdfprintpagerange\@empty
+ \else
+ /PrintPageRange[\@pdfprintpagerange]%
+ \fi
+ \ifx\@pdfnumcopies\@empty
+ \else
+ /NumCopies \@pdfnumcopies
+ \fi
+ }%
+ \Hy@pstringdef\Hy@pstringB{\@baseurl}%
+ \pdfmark{%
+ pdfmark=/PUT,%
+ Raw={%
+ \string{Catalog\string}<<%
+ \ifx\Hy@temp\@empty
+ \else
+ /ViewerPreferences<<\Hy@temp>>%
+ \fi
+ \Hy@UseNameKey{PageLayout}\@pdfpagelayout
+ \ifx\@pdflang\relax
+ \else
+ /Lang(\@pdflang)%
+ \fi
+ \ifx\@baseurl\@empty
+ \else
+ /URI<</Base(\Hy@pstringB)>>%
+ \fi
+ >>%
+ }%
+ }%
+}
+\providecommand*\@pdfview{XYZ}
+\providecommand*\@pdfviewparams{ %
+ gsave revscl currentpoint grestore %
+ 72 add exch pop null exch null%
+}
+\def\Hy@BorderArrayPatch{BorderArrayPatch}
+% \end{macrocode}
+% These are called at the start and end of unboxed links;
+% their job is to leave available PS variables called
+% |pdf@llx pdf@lly pdf@urx pdf@ury|, which are the coordinates
+% of the bounding rectangle of the link, and |pdf@hoff pdf@voff|
+% which are the PDF page offsets. These latter are currently not
+% used in the dvipsone setup.
+% The Rect pair are called at the LL and UR corners of a box
+% known to \TeX.
+% \begin{macrocode}
+\g@addto@macro\Hy@FirstPageHook{%
+ \headerps@out{%
+% \end{macrocode}
+% dvipsone lives in scaled points; does this mean 65536 or 65781?
+% \begin{macrocode}
+ /DvipsToPDF { 65781 div } def%
+ /PDFToDvips { 65781 mul } def%
+ /BPToDvips{65781 mul}def%
+ /HyperBorder { 1 PDFToDvips } def%
+ /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def%
+% \end{macrocode}
+% The values inside the /Boder array are not taken literally, but
+% interpreted by ghostscript using the resolution of the dvi driver.
+% I don't know how other distiller programs behaves in this manner.
+% \begin{macrocode}
+ /BorderArrayPatch{%
+ [exch{%
+ dup dup type/integertype eq exch type/realtype eq or%
+ {BPToDvips}if%
+ }forall]%
+ }def%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ /H.S {%
+ currentpoint %
+ HyperBorder add /pdf@lly exch def %
+ dup DvipsToPDF 72 add /pdf@hoff exch def %
+ HyperBorder sub /pdf@llx exch def%
+ } def%
+ /H.L {%
+ 2 sub %
+ PDFToDvips /HyperBase exch def %
+ currentpoint %
+ HyperBase sub /pdf@ury exch def%
+ /pdf@urx exch def%
+ } def%
+ /H.A {%
+ H.L %
+ currentpoint exch pop %
+ HyperBase sub % baseline skip
+ DvipsToPDF /pdf@voff exch def%
+ } def%
+ /H.R {%
+ currentpoint %
+ HyperBorder sub /pdf@ury exch def %
+ HyperBorder add /pdf@urx exch def %
+ currentpoint exch pop DvipsToPDF /pdf@voff exch def%
+ } def%
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\setpdflinkmargin#1{%
+ \begingroup
+ \setlength{\dimen@}{#1}%
+ \literalps@out{%
+ /HyperBorder{\strip@pt\dimen@\space PDFToDvips}def%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</dvipsone>
+% \end{macrocode}
+%
+% \subsection{TeX4ht}
+% \begin{macrocode}
+%<*tex4ht>
+\providecommand*{\XR@ext}{html}
+\let\Hy@raisedlink\ltx@empty
+\@ifpackageloaded{tex4ht}{%
+ \Hy@InfoNoLine{tex4ht is already loaded}%
+}{%
+ \RequirePackage[htex4ht]{tex4ht}%
+}
+\hyperlinkfileprefix{}
+\let\PDF@FinishDoc\ltx@empty
+\def\PDF@SetupDoc{%
+ \ifx\@baseurl\@empty
+ \else
+ \special{t4ht=<base href="\@baseurl">}%
+ \fi
+}
+\Hy@WrapperDef\hyper@anchor#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \let\protect=\string
+ \special{t4ht=<a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+ \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
+ \special{t4ht=</a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\Hy@WrapperDef\hyper@anchorstart#1{%
+ \Hy@SaveLastskip
+ \Hy@VerboseAnchor{#1}%
+ \begingroup
+ \hyper@chars\special{t4ht=<a name=%
+ \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
+ \endgroup
+ \Hy@activeanchortrue
+}
+\def\hyper@anchorend{%
+ \special{t4ht=</a>}%
+ \Hy@activeanchorfalse
+ \Hy@RestoreLastskip
+}
+\def\@urltype{url}
+\def\hyper@linkstart#1#2{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \expandafter\Hy@colorlink\csname @#1color\endcsname
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\@urltype
+ \special{t4ht=<a href=\hyper@quote#2\hyper@quote>}%
+ \else
+ \begingroup
+ \hyper@chars
+ \special{t4ht=<a href=%
+ \hyper@quote\#\HyperDestNameFilter{#2}\hyper@quote>}%
+ \endgroup
+ \fi
+}
+\def\hyper@linkend{%
+ \special{t4ht=</a>}%
+ \Hy@endcolorlink
+}
+\def\hyper@linkfile#1#2#3{%
+ \hyper@linkurl{#1}{\Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi}%
+}
+\def\hyper@linkurl#1#2{%
+ \leavevmode
+ \ifHy@raiselinks
+ \Hy@SaveSpaceFactor
+ \Hy@SaveSavedSpaceFactor
+ \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
+ \Hy@RestoreSavedSpaceFactor
+ \@linkdim\dp\@tempboxa
+ \lower\@linkdim\hbox{%
+ \begingroup
+ \hyper@chars
+ \special{%
+ t4ht=<a href=\hyper@quote#2\hyper@quote>%
+ }%
+ \endgroup
+ }%
+ \Hy@colorlink\@urlcolor
+ \Hy@RestoreSpaceFactor
+ #1\Hy@xspace@end
+ \Hy@SaveSpaceFactor
+ \Hy@endcolorlink
+ \@linkdim\ht\@tempboxa
+ \advance\@linkdim by -6.5\p@
+ \raise\@linkdim\hbox{\special{t4ht=</a>}}%
+ \Hy@RestoreSpaceFactor
+ \else
+ \begingroup
+ \hyper@chars
+ \special{t4ht=<a href=\hyper@quote#2\hyper@quote>}%
+ \Hy@colorlink\@urlcolor
+ #1\Hy@xspace@end
+ \Hy@endcolorlink
+ \special{t4ht=</a>}%
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+% Poor implementation of \cs{hyper@link} without considering |#1|.
+% \begin{macrocode}
+\def\hyper@link#1#2#3{%
+ \Hy@VerboseLinkStart{#1}{#2}%
+ \hyper@linkurl{#3}{\#\HyperDestNameFilter{#2}}%
+}
+\def\hyper@image#1#2{%
+ \begingroup
+ \hyper@chars
+ \special{t4ht=<img src=\hyper@quote#1\hyper@quote>}%
+ \endgroup
+}
+\let\autoref\ref
+\ifx \rEfLiNK \UnDef
+ \def\rEfLiNK #1#2{#2}%
+\fi
+\let\backref\ltx@gobble
+% \end{macrocode}
+% Fix for tex4ht.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \expandafter
+ \let\expandafter\Hy@OrgMakeLabel\csname Make:Label\endcsname
+ \expandafter\def\csname Make:Label\endcsname#1#2{%
+ \ifhmode
+ \Hy@SaveSpaceFactor
+ \else
+ \global\Hy@SavedSpaceFactor=1000 %
+ \fi
+ \Hy@OrgMakeLabel{#1}{%
+ \Hy@RestoreSpaceFactor
+ #2\Hy@xspace@end%
+ \Hy@SaveSpaceFactor
+ }%
+ \Hy@RestoreSpaceFactor
+ }%
+}
+%</tex4ht>
+%<*tex4htcfg>
+\IfFileExists{\jobname.cfg}{\endinput}{}
+\Preamble{html}
+ \begin{document}%
+\EndPreamble
+\def\TeX{TeX}
+\def\OMEGA{Omega}
+\def\LaTeX{La\TeX}
+\def\LaTeXe{\LaTeX2e}
+\def\eTeX{e-\TeX}
+\def\MF{Metafont}
+\def\MP{MetaPost}
+%</tex4htcfg>
+% \end{macrocode}
+%
+% \section{Driver-specific form support}
+% \subsection{pdfmarks}
+% \begin{macrocode}
+%<*pdfmark>
+\long\def\@Form[#1]{%
+\g@addto@macro\Hy@FirstPageHook{%
+ \headerps@out{%
+[%
+ /_objdef{pdfDocEncoding}%
+ /type/dict%
+/OBJ pdfmark%
+[%
+ {pdfDocEncoding}%
+ <<%
+ /Type/Encoding%
+ /Differences[%
+ 24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek/ring%
+ /tilde %
+ 39/quotesingle %
+ 96/grave %
+ 128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin%
+ /fraction/guilsinglleft/guilsinglright/minus/perthousand%
+ /quotedblbase/quotedblleft/quotedblright/quoteleft%
+ /quoteright/quotesinglbase/trademark/fi/fl/Lslash/OE/Scaron%
+ /Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron %
+ 164/currency %
+ 166/brokenbar %
+ 168/dieresis/copyright/ordfeminine %
+ 172/logicalnot/.notdef/registered/macron/degree/plusminus%
+ /twosuperior/threesuperior/acute/mu %
+ 183/periodcentered/cedilla/onesuperior/ordmasculine %
+ 188/onequarter/onehalf/threequarters %
+ 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE%
+ /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave%
+ /Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute%
+ /Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave%
+ /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls%
+ /agrave/aacute/acircumflex/atilde/adieresis/aring/ae%
+ /ccedilla/egrave/eacute/ecircumflex/edieresis/igrave%
+ /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute%
+ /ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute%
+ /ucircumflex/udieresis/yacute/thorn/ydieresis%
+ ]%
+ >>%
+/PUT pdfmark%
+[%
+ /_objdef{ZaDb}%
+ /type/dict%
+/OBJ pdfmark%
+[%
+ {ZaDb}%
+ <<%
+ /Type/Font%
+ /Subtype/Type1%
+ /Name/ZaDb%
+ /BaseFont/ZapfDingbats%
+ >>%
+/PUT pdfmark%
+[%
+ /_objdef{Helv}%
+ /type/dict%
+/OBJ pdfmark%
+[%
+ {Helv}%
+ <<%
+ /Type/Font%
+ /Subtype/Type1%
+ /Name/Helv%
+ /BaseFont/Helvetica%
+ /Encoding{pdfDocEncoding}%
+ >>%
+/PUT pdfmark%
+[%
+ /_objdef{aform}%
+ /type/dict%
+/OBJ pdfmark%
+[%
+ /_objdef{afields}%
+ /type/array%
+/OBJ pdfmark%
+[%
+ /_objdef{corder}%
+ /type/array%
+/OBJ pdfmark%
+{%
+ [%
+ /BBox[0 0 100 100]%
+ /_objdef{Check}%
+ /BP pdfmark %
+ 1 0 0 setrgbcolor%
+ /ZapfDingbats 80 selectfont %
+ 20 20 moveto%
+ (4)show%
+ [/EP pdfmark%
+ [%
+ /BBox[0 0 100 100]%
+ /_objdef{Cross}%
+ /BP pdfmark %
+ 1 0 0 setrgbcolor%
+ /ZapfDingbats 80 selectfont %
+ 20 20 moveto%
+ (8)show%
+ [/EP pdfmark%
+ [%
+ /BBox[0 0 250 100]%
+ /_objdef{Submit}%
+ /BP pdfmark %
+ 0.6 setgray %
+ 0 0 250 100 rectfill %
+ 1 setgray %
+ 2 2 moveto %
+ 2 98 lineto %
+ 248 98 lineto %
+ 246 96 lineto %
+ 4 96 lineto %
+ 4 4 lineto %
+ fill %
+ 0.34 setgray %
+ 248 98 moveto %
+ 248 2 lineto %
+ 2 2 lineto %
+ 4 4 lineto %
+ 246 4 lineto %
+ 246 96 lineto %
+ fill%
+ /Helvetica 76 selectfont %
+ 0 setgray %
+ 8 22.5 moveto%
+ (Submit)show%
+ [/EP pdfmark%
+ [%
+ /BBox[0 0 250 100]%
+ /_objdef{SubmitP}%
+ /BP pdfmark %
+ 0.6 setgray %
+ 0 0 250 100 rectfill %
+ 0.34 setgray %
+ 2 2 moveto %
+ 2 98 lineto %
+ 248 98 lineto %
+ 246 96 lineto %
+ 4 96 lineto %
+ 4 4 lineto %
+ fill %
+ 1 setgray %
+ 248 98 moveto %
+ 248 2 lineto %
+ 2 2 lineto %
+ 4 4 lineto %
+ 246 4 lineto %
+ 246 96 lineto %
+ fill%
+ /Helvetica 76 selectfont %
+ 0 setgray %
+ 10 20.5 moveto%
+ (Submit)show%
+ [/EP pdfmark%
+} ?pdfmark%
+[%
+ {aform}%
+ <<%
+ /Fields{afields}%
+ /DR<<%
+ /Font<<%
+ /ZaDb{ZaDb}%
+ /Helv{Helv}%
+ >>%
+ >>%
+ /DA(/Helv 10 Tf 0 g)%
+ /CO{corder}%
+ \ifHy@pdfa
+ \else
+ \ifHyField@NeedAppearances
+ /NeedAppearances true%
+ \fi
+ \fi
+ >>%
+/PUT pdfmark%
+[%
+ {Catalog}%
+ <<%
+ /AcroForm{aform}%
+ >>%
+/PUT pdfmark%
+}}%
+ \kvsetkeys{Form}{#1}%
+}
+\let\@endForm\ltx@empty
+\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
+ \Hy@Message{Sorry, pdfmark drivers do not support FORM gauges}%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcount\HyField@AnnotCount
+\HyField@AnnotCount=\z@
+\def\HyField@AdvanceAnnotCount{%
+ \global\advance\HyField@AnnotCount\@ne
+}
+\def\HyField@TheAnnotCount{%
+ \the\HyField@AnnotCount
+}
+% \end{macrocode}
+% \begin{macrocode}
+\edef\Fld@pageobjref{/P\string{ThisPage\string}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\HyField@AddToFields#1{%
+ \pdfmark{%
+ pdfmark=/APPEND,%
+ Raw={%
+ \string{afields\string}%
+ \string{#1\HyField@TheAnnotCount\string}%
+ }%
+ }%
+ \ifx\Fld@calculate@code\ltx@empty
+ \else
+ \pdfmark{%
+ pdfmark=/APPEND,%
+ Raw={%
+ \string{corder\string}%
+ \string{#1\HyField@TheAnnotCount\string}%
+ }%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\@TextField[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \let\Fld@default\ltx@empty
+ \let\Fld@value\@empty
+ \def\Fld@width{\DefaultWidthofText}%
+ \def\Fld@height{%
+ \ifFld@multiline
+ \DefaultHeightofTextMultiline
+ \else
+ \DefaultHeightofText
+ \fi
+ }%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofText,#1%
+ }%
+ \HyField@FlagsText
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\@empty\def\Fld@value{\Fld@default}\fi
+ \HyField@AdvanceAnnotCount
+ \LayoutTextField{#2}{%
+ \leavevmode
+ \Hy@escapeform\PDFForm@Text
+ \pdfmark[\MakeTextField{\Fld@width}{\Fld@height}]{%
+ pdfmark=/ANN,%
+ objdef=text\HyField@TheAnnotCount,%
+ Raw={\PDFForm@Text}%
+ }%
+ }%
+ \HyField@AddToFields{text}%
+ \endgroup
+}
+\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
+ \def\Fld@name{#2}%
+ \let\Fld@default\relax
+ \let\Fld@value\relax
+ \def\Fld@width{\DefaultWidthofChoiceMenu}%
+ \def\Fld@height{\DefaultHeightofChoiceMenu}%
+ \begingroup
+ \Fld@menulength=0 %
+ \@tempdima\z@
+ \@for\@curropt:=#3\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \Hy@StepCount\Fld@menulength
+ \settowidth{\@tempdimb}{\@currDisplay}%
+ \ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
+ }%
+ \advance\@tempdima by 15\p@
+ \begingroup
+ \HyField@SetKeys{#1}%
+ \edef\x{\endgroup
+ \noexpand\expandafter
+ \noexpand\HyField@SetKeys
+ \noexpand\expandafter{%
+ \expandafter\noexpand\csname DefaultOptionsof%
+ \ifFld@radio
+ Radio%
+ \else
+ \ifFld@combo
+ \ifFld@popdown
+ PopdownBox%
+ \else
+ ComboBox%
+ \fi
+ \else
+ ListBox%
+ \fi
+ \fi
+ \endcsname
+ }%
+ }\x
+ \HyField@SetKeys{#1}%
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\relax
+ \let\Fld@value\Fld@default
+ \fi
+ \LayoutChoiceField{#2}{%
+ \ifFld@radio
+ \HyField@FlagsRadioButton
+ \@@Radio{#3}%
+ \else
+ \begingroup
+ \HyField@FlagsChoice
+ \ifdim\Fld@width<\@tempdima
+ \ifdim\@tempdima<1cm\@tempdima1cm\fi
+ \edef\Fld@width{\the\@tempdima}%
+ \fi
+ \ifFld@combo
+ \else
+ \@tempdima=\the\Fld@menulength\Fld@charsize
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \edef\Fld@height{\the\@tempdima}%
+ \fi
+ \@@Listbox{#3}%
+ \endgroup
+ \fi
+ }%
+ \endgroup
+}
+\def\@@Radio#1{%
+ \Fld@listcount=0 %
+ \EdefEscapeName\Fld@default{\Fld@default}%
+ \@for\@curropt:=#1\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \EdefEscapeName\@currValue{\@currValue}%
+ \Hy@StepCount\Fld@listcount
+ \@currDisplay\space
+ \Hy@escapeform\PDFForm@Radio
+ \ifnum\Fld@listcount=1 %
+ \HyField@AdvanceAnnotCount
+ \fi
+ \pdfmark[\MakeRadioField{\Fld@width}{\Fld@height}]{%
+ pdfmark=/ANN,%
+ objdef=\ifnum\Fld@listcount=1 radio\HyField@TheAnnotCount\fi,%
+ Raw={%
+ \PDFForm@Radio /AP <</N <</\@currValue\space {Check}>> >>%
+ }%
+ } % deliberate space between radio buttons
+ \ifnum\Fld@listcount=1 %
+ \HyField@AddToFields{radio}%
+ \fi
+ }%
+}
+\newcount\Fld@listcount
+\def\@@Listbox#1{%
+ \HyField@PDFChoices{#1}%
+ \Hy@escapeform\PDFForm@List
+ \HyField@AdvanceAnnotCount
+ \pdfmark[\MakeChoiceField{\Fld@width}{\Fld@height}]{%
+ pdfmark=/ANN,%
+ objdef=list\HyField@TheAnnotCount,%
+ Raw={\PDFForm@List}%
+ }%
+ \HyField@AddToFields{list}%
+}
+\def\@PushButton[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofPushButton,#1%
+ }%
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Push button with JavaScript is prohibited%
+ }\@ehc
+ \LayoutPushButtonField{%
+ \leavevmode
+ \MakeButtonField{#2}%
+ }%
+ \else
+ \HyField@FlagsPushButton
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \HyField@AdvanceAnnotCount
+ \LayoutPushButtonField{%
+ \leavevmode
+ \Hy@escapeform\PDFForm@Push
+ \pdfmark[\MakeButtonField{#2}]{%
+ pdfmark=/ANN,%
+ objdef=push\HyField@TheAnnotCount,%
+ Raw={\PDFForm@Push}%
+ }%
+ }%
+ \HyField@AddToFields{push}%
+ \fi
+ \endgroup
+}
+\def\@Submit[#1]#2{%
+ \def\Fld@width{\DefaultWidthofSubmit}%
+ \def\Fld@height{\DefaultHeightofSubmit}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofSubmit,#1%
+ }%
+ \HyField@FlagsPushButton
+ \HyField@FlagsSubmit
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \Hy@escapeform\PDFForm@Submit
+ \HyField@AdvanceAnnotCount
+ \pdfmark[\MakeButtonField{#2}]{%
+ pdfmark=/ANN,%
+ objdef=submit\HyField@TheAnnotCount,%
+ Raw={\PDFForm@Submit /AP<</N{Submit}/D{SubmitP}>>}%
+ }%
+ \HyField@AddToFields{submit}%
+ \endgroup
+}
+\def\@Reset[#1]#2{%
+ \def\Fld@width{\DefaultWidthofReset}%
+ \def\Fld@height{\DefaultHeightofReset}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofReset,#1%
+ }%
+ \leavevmode
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Reset action is prohibited%
+ }\@ehc
+ \MakeButtonField{#2}%
+ \else
+ \HyField@FlagsPushButton
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \Hy@escapeform\PDFForm@Reset
+ \HyField@AdvanceAnnotCount
+ \pdfmark[\MakeButtonField{#2}]{%
+ pdfmark=/ANN,%
+ objdef=reset\HyField@TheAnnotCount,%
+ Raw={\PDFForm@Reset}%
+ }%
+ \HyField@AddToFields{reset}%
+ \fi
+ \endgroup
+}%
+\def\@CheckBox[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \def\Fld@default{0}%
+ \begingroup
+ \def\Fld@width{\DefaultWidthofCheckBox}%
+ \def\Fld@height{\DefaultHeightofCheckBox}%
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofCheckBox,#1%
+ }%
+ \HyField@FlagsCheckBox
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \HyField@AdvanceAnnotCount
+ \LayoutCheckField{#2}{%
+ \leavevmode
+ \Hy@escapeform\PDFForm@Check
+ \pdfmark[\MakeCheckField{\Fld@width}{\Fld@height}]{%
+ pdfmark=/ANN,%
+ objdef=check\HyField@TheAnnotCount,%
+ Raw={\PDFForm@Check}%
+ }%
+ }%
+ \HyField@AddToFields{check}%
+ \endgroup
+}
+%</pdfmark>
+% \end{macrocode}
+%
+% \subsection{HyperTeX}
+% \begin{macrocode}
+%<*hypertex>
+\def\@Form[#1]{%
+ \Hy@Message{Sorry, HyperTeX does not support FORMs}%
+}
+\let\@endForm\ltx@empty
+\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
+ \Hy@Message{Sorry, HyperTeX does not support FORM gauges}%
+}
+\def\@TextField[#1]#2{% parameters, label
+ \Hy@Message{Sorry, HyperTeX does not support FORM text fields}%
+}
+\def\@CheckBox[#1]#2{% parameters, label
+ \Hy@Message{Sorry, HyperTeX does not support FORM checkboxes}%
+}
+\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
+ \Hy@Message{Sorry, HyperTeX does not support FORM choice menus}%
+}
+\def\@PushButton[#1]#2{% parameters, label
+ \Hy@Message{Sorry, HyperTeX does not support FORM pushbuttons}%
+}
+\def\@Reset[#1]#2{%
+ \Hy@Message{Sorry, HyperTeX does not support FORMs}%
+}
+\def\@Submit[#1]#2{%
+ \Hy@Message{Sorry, HyperTeX does not support FORMs}%
+}
+%</hypertex>
+% \end{macrocode}
+% \subsection{TeX4ht}
+% \begin{macrocode}
+%<*tex4ht>
+\def\@Form[#1]{%
+ \kvsetkeys{Form}{#1}%
+ \HCode{<form action="\Form@action" method="\Form@method">}%
+}
+\def\@endForm{\HCode{</form>}}
+\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
+ \Hy@Message{Sorry, TeX4ht does not support gauges}%
+}
+\def\@TextField[#1]#2{% parameters, label
+ \let\Hy@reserved@a\@empty
+ \def\Fld@name{#2}%
+ \let\Fld@default\ltx@empty
+ \bgroup
+ \Field@toks={ }%
+ \kvsetkeys{Field}{#1}%
+ \HCode{<label for="\Fld@name">#2</label>}%
+ \ifFld@password
+ \@@PasswordField
+ \else
+ \@@TextField
+ \fi
+ \egroup
+}
+\def\@@PasswordField{%
+ \HCode{%
+ <input type="password" %
+ id="\Fld@name" %
+ name="\Fld@name" %
+ \ifFld@hidden type="hidden" \fi
+ value="\Fld@default" %
+ \the\Field@toks
+ >%
+ }%
+}
+\def\@@TextField{%
+ \ifFld@multiline
+ \HCode{<textarea %
+ \ifFld@readonly readonly \fi
+ id="\Fld@name" %
+ name="\Fld@name" %
+ \ifFld@hidden type="hidden" \fi
+ \the\Field@toks>%
+ }%
+ \Fld@default
+ \HCode{</textarea>}%
+ \else
+ \HCode{<input type="textbox" %
+ \ifFld@readonly readonly \fi
+ id="\Fld@name" %
+ name="\Fld@name" %
+ \ifFld@hidden type="hidden" \fi
+ value="\Fld@default" %
+ \the\Field@toks>%
+ }%
+ \fi
+}
+\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
+ \def\Fld@name{#2}%
+ \let\Fld@default\ltx@empty
+ \let\Hy@reserved@a\relax
+ \begingroup
+ \expandafter\Fld@findlength#3\\%
+ \Field@toks={ }%
+ \kvsetkeys{Field}{#1}%
+ #2%
+ \ifFld@radio
+ \expandafter\@@Radio#3\\%
+ \else
+ \expandafter\@@Menu#3\\%
+ \fi
+ \endgroup
+}
+\def\Fld@findlength#1\\{%
+ \Fld@menulength=0 %
+ \@for\@curropt:=#1\do{\Hy@StepCount\Fld@menulength}%
+}
+\def\@@Menu#1\\{%
+ \HCode{<select size="\the\Fld@menulength" %
+ name="\Fld@name" %
+ \the\Field@toks>%
+ }%
+ \@for\@curropt:=#1\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \HCode{<option %
+ \ifx\@curropt\Fld@default selected \fi
+ value="\@currValue">\@currDisplay</option>%
+ }%
+ }%
+ \HCode{</select>}%
+}
+\def\@@Radio#1\\{%
+ \@for\@curropt:=#1\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \HCode{<input type="radio" %
+ \ifx\@curropt\Fld@default checked \fi
+ name="\Fld@name" %
+ value="\@currValue" %
+ \the\Field@toks>%
+ }%
+ \@currDisplay
+ }%
+}
+\def\@PushButton[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \bgroup
+ \Field@toks={ }%
+ \kvsetkeys{Field}{#1}%
+ \HCode{<input type="button" %
+ name="\Fld@name" %
+ value="#2" %
+ \the\Field@toks>%
+ }%
+ \HCode{</button>}%
+ \egroup
+}
+\def\@Submit[#1]#2{%
+ \HCode{<button type="submit">#2</button>}%
+}
+\def\@Reset[#1]#2{%
+ \HCode{<button type="reset">#2</button>}%
+}
+\def\@CheckBox[#1]#2{% parameters, label
+ \let\Hy@reserved@a\@empty
+ \def\Fld@name{#2}%
+ \def\Fld@default{0}%
+ \bgroup
+ \Field@toks={ }%
+ \kvsetkeys{Field}{#1}%
+ \HCode{<input type="checkbox" %
+ \ifFld@checked checked \fi
+ \ifFld@disabled disabled \fi
+ \ifFld@readonly readonly \fi
+ name="\Fld@name" %
+ \ifFld@hidden type="hidden" \fi
+ value="\Fld@default" %
+ \the\Field@toks>%
+ #2%
+ }%
+ \egroup
+}
+%</tex4ht>
+% \end{macrocode}
+%
+% \subsection{pdfTeX}
+% \begin{macrocode}
+%<*pdftex>
+\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
+ \Hy@Message{Sorry, pdftex does not support FORM gauges}%
+}
+\def\MakeFieldObject#1#2{\sbox0{#1}%
+ \immediate\pdfxform0 %
+ \expandafter\edef\csname #2Object\endcsname{%
+ \the\pdflastxform\space 0 R%
+ }%
+% \hbox to 0pt{\hskip-\maxdimen{\pdfrefxform \the\pdflastxform}}%
+}%
+\let\HyField@afields\ltx@empty
+\let\HyField@cofields\ltx@empty
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdflastlink\endcsname\relax
+ \let\HyField@AddToFields\relax
+ \PackageInfo{hyperref}{%
+ You need pdfTeX 1.40.0 for setting the /Fields entry.%
+ \MessageBreak
+ Adobe Reader/Acrobat accepts an empty /Field array,%
+ \MessageBreak
+ but other PDF viewers might complain%
+ }%
+\else
+ \let\HyField@AuxAddToFields\ltx@gobble
+ \let\HyField@AuxAddToCoFields\ltx@gobbletwo
+ \def\HyField@AfterAuxOpen{\Hy@AtBeginDocument}%
+% \end{macrocode}
+% Insertion sort for calculation field list.
+% In case of equal sort keys (for example, if `calculatesortkey`
+% is not used at all) the keys keep document calling order.
+% \begin{macrocode}
+ \def\HyField@ABD@AuxAddToCoFields#1#2{%
+ \begingroup
+ \Hy@safe@activestrue
+ \let\ltx@secondoftwo\relax
+ \ifx\HyField@cofields\ltx@empty
+ \xdef\HyField@cofields{%
+ \ltx@secondoftwo{#1}{ #2 0 R}%
+ }%
+ \else
+ \let\ltx@secondoftwo\relax
+ \def\HyField@AddCoField##1##2##3{%
+ \ifx##1\ltx@empty
+ \ltx@secondoftwo{#1}{ #2 0 R}%
+ \expandafter\ltx@gobble
+ \else
+ \ifnum\pdfstrcmp{##2}{#1}>\ltx@zero
+ \ltx@secondoftwo{#1}{ #2 0 R}%
+ \ltx@secondoftwo{##2}{##3}%
+ \expandafter\expandafter\expandafter\ltx@gobble
+ \else
+ \ltx@secondoftwo{##2}{##3}%
+ \fi
+ \fi
+ \HyField@AddCoField
+ }%
+ \xdef\HyField@cofields{%
+ \expandafter\HyField@AddCoField
+ \HyField@cofields\ltx@empty\ltx@empty\ltx@empty
+ }%
+ \fi
+ \endgroup
+ }%
+ \Hy@AtBeginDocument{%
+ \if@filesw
+ \immediate\write\@mainaux{%
+ \string\providecommand\string\HyField@AuxAddToFields[1]{}%
+ }%
+ \immediate\write\@mainaux{%
+ \string\providecommand\string\HyField@AuxAddToCoFields[2]{}%
+ }%
+ \fi
+ \let\HyField@AfterAuxOpen\@firstofone
+ \def\HyField@AuxAddToFields#1{%
+ \xdef\HyField@afields{%
+ \ifx\HyField@afields\@empty
+ \else
+ \HyField@afields
+ \space
+ \fi
+ #1 0 R%
+ }%
+ }%
+ \let\HyField@AuxAddToCoFields\HyField@ABD@AuxAddToCoFields
+ }%
+ \def\HyField@AddToFields{%
+ \expandafter\HyField@@AddToFields\expandafter{%
+ \the\pdflastlink
+ }%
+ \ifx\Fld@calculate@code\ltx@empty
+ \else
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\Hy@temp{%
+ \endgroup
+ \if@filesw
+ \write\@mainaux{%
+ \string\HyField@AuxAddToCoFields{%
+ \Fld@calculate@sortkey
+ }{%
+ \the\pdflastlink
+ }%
+ }%
+ \fi
+ }%
+ \Hy@temp
+ \fi
+ }%
+ \def\HyField@@AddToFields#1{%
+ \HyField@AfterAuxOpen{%
+ \if@filesw
+ \write\@mainaux{%
+ \string\HyField@AuxAddToFields{#1}%
+ }%
+ \fi
+ }%
+ }%
+\fi
+\def\@Form[#1]{%
+ \@ifundefined{textcolor}{\let\textcolor\@gobble}{}%
+ \kvsetkeys{Form}{#1}%
+ \pdf@ifdraftmode{}{%
+ \Hy@FormObjects
+ \ifnum\pdftexversion>13 %
+ \pdfrefobj\OBJ@pdfdocencoding
+ \pdfrefobj\OBJ@ZaDb
+ \pdfrefobj\OBJ@Helv
+ \fi
+ \AtVeryEndDocument{%
+ \immediate\pdfobj{%
+ <<%
+ /Fields[\HyField@afields]%
+ \ifx\HyField@cofields\ltx@empty
+ \else
+ /CO[\romannumeral-`\Q\HyField@cofields]%
+ \fi
+ /DR<<%
+ /Font<<%
+ /ZaDb \OBJ@ZaDb\space 0 R%
+ /Helv \OBJ@Helv\space 0 R%
+ >>%
+ >>%
+ /DA(/Helv 10 Tf 0 g)%
+ \ifHy@pdfa
+ \else
+ \ifHyField@NeedAppearances
+ /NeedAppearances true%
+ \fi
+ \fi
+ >>%
+ }%
+ \edef\OBJ@acroform{\the\pdflastobj}%
+ \pdfcatalog{/AcroForm \OBJ@acroform\space 0 R}%
+ }%
+ }%
+ \MakeFieldObject{%
+% \end{macrocode}
+% Same as \verb|\ding{123}| of package pifont.
+% \begin{macrocode}
+ \begingroup
+ \fontfamily{pzd}%
+ \fontencoding{U}%
+ \fontseries{m}%
+ \fontshape{n}%
+ \selectfont
+ \char123 %
+ \endgroup
+ }{Ding}%
+ \MakeFieldObject{%
+ \fbox{\textcolor{yellow}{\textsf{Submit}}}%
+ }{Submit}%
+ \MakeFieldObject{%
+ \fbox{\textcolor{yellow}{\textsf{SubmitP}}}%
+ }{SubmitP}%
+}
+\let\@endForm\ltx@empty
+% \end{macrocode}
+% \begin{macrocode}
+\let\HyAnn@AbsPageLabel\ltx@empty
+\let\Fld@pageobjref\ltx@empty
+\ltx@IfUndefined{pdfpageref}{%
+}{%
+ \ltx@ifpackageloaded{zref-abspage}{%
+ \newcount\HyAnn@Count
+ \HyAnn@Count=\ltx@zero
+ \def\HyAnn@AbsPageLabel{%
+ \global\advance\HyAnn@Count by\ltx@one
+ \zref@labelbyprops{HyAnn@\the\HyAnn@Count}{abspage}%
+ \zref@refused{HyAnn@\the\HyAnn@Count}%
+ }%
+ \def\Fld@pageobjref{%
+ \zref@ifrefundefined{HyAnn@\the\HyAnn@Count}{%
+ }{%
+ \zref@ifrefcontainsprop{HyAnn@\the\HyAnn@Count}{abspage}{%
+ /P \pdfpageref
+ \zref@extractdefault{HyAnn@\the\HyAnn@Count}{abspage}{1} %
+ \space 0 R%
+ }{%
+ }%
+ }%
+ }%
+ }{%
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\@TextField[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \let\Fld@default\ltx@empty
+ \let\Fld@value\@empty
+ \def\Fld@width{\DefaultWidthofText}%
+ \def\Fld@height{%
+ \ifFld@multiline
+ \DefaultHeightofTextMultiline
+ \else
+ \DefaultHeightofText
+ \fi
+ }%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofText,#1%
+ }%
+ \PDFForm@Name
+ \HyField@FlagsText
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\@empty\def\Fld@value{\Fld@default}\fi
+ \LayoutTextField{#2}{%
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Text
+ \pdfstartlink user {\PDFForm@Text}\relax
+ \MakeTextField{\Fld@width}{\Fld@height}\pdfendlink
+ \HyField@AddToFields
+ }%
+ \endgroup
+}
+\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
+ \def\Fld@name{#2}%
+ \let\Fld@default\relax
+ \let\Fld@value\relax
+ \def\Fld@width{\DefaultWidthofChoiceMenu}%
+ \def\Fld@height{\DefaultHeightofChoiceMenu}%
+ \begingroup
+ \Fld@menulength=0 %
+ \@tempdima\z@
+ \@for\@curropt:=#3\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \Hy@StepCount\Fld@menulength
+ \settowidth{\@tempdimb}{\@currDisplay}%
+ \ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
+ }%
+ \advance\@tempdima by 15\p@
+ \begingroup
+ \HyField@SetKeys{#1}%
+ \edef\x{\endgroup
+ \noexpand\expandafter
+ \noexpand\HyField@SetKeys
+ \noexpand\expandafter{%
+ \expandafter\noexpand\csname DefaultOptionsof%
+ \ifFld@radio
+ Radio%
+ \else
+ \ifFld@combo
+ \ifFld@popdown
+ PopdownBox%
+ \else
+ ComboBox%
+ \fi
+ \else
+ ListBox%
+ \fi
+ \fi
+ \endcsname
+ }%
+ }\x
+ \HyField@SetKeys{#1}%
+ \PDFForm@Name
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\relax
+ \let\Fld@value\Fld@default
+ \fi
+ \LayoutChoiceField{#2}{%
+ \ifFld@radio
+ \HyField@FlagsRadioButton
+ \@@Radio{#3}%
+ \else
+ \begingroup
+ \HyField@FlagsChoice
+ \ifdim\Fld@width<\@tempdima
+ \ifdim\@tempdima<1cm\@tempdima1cm\fi
+ \edef\Fld@width{\the\@tempdima}%
+ \fi
+ \ifFld@combo
+ \else
+ \@tempdima=\the\Fld@menulength\Fld@charsize
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \edef\Fld@height{\the\@tempdima}%
+ \fi
+ \@@Listbox{#3}%
+ \endgroup
+ \fi
+ }%
+ \endgroup
+}
+\def\@@Radio#1{%
+ \Fld@listcount=0 %
+ \EdefEscapeName\Fld@default{\Fld@default}%
+ \@for\@curropt:=#1\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \EdefEscapeName\@currValue{\@currValue}%
+ \Hy@StepCount\Fld@listcount
+ \@currDisplay\space
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Radio
+ \pdfstartlink user {%
+ \PDFForm@Radio
+ /AP<<%
+ /N<<%
+% \end{macrocode}
+% Laurent.Guillope@math.univ-nantes.fr (Laurent Guillope)
+% persuades me that this was wrong:
+% |/\Fld@name\the\Fld@listcount|. But I leave it here to remind
+% me that it is untested.
+% \begin{macrocode}
+ /\@currValue\space \DingObject
+ >>%
+ >>%
+ }%
+ \relax
+ \MakeRadioField{\Fld@width}{\Fld@height}\pdfendlink
+ \ifnum\Fld@listcount=1 %
+ \HyField@AddToFields
+ \fi
+ \space % deliberate space between radio buttons
+ }%
+}
+\newcount\Fld@listcount
+\def\@@Listbox#1{%
+ \HyField@PDFChoices{#1}%
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@List
+ \pdfstartlink user {\PDFForm@List}\relax
+ \MakeChoiceField{\Fld@width}{\Fld@height}%
+ \pdfendlink
+ \HyField@AddToFields
+}
+\def\@PushButton[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofPushButton,#1%
+ }%
+ \PDFForm@Name
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Push button with JavaScript is prohibited%
+ }\@ehc
+ \LayoutPushButtonField{%
+ \leavevmode
+ \MakeButtonField{#2}%
+ }%
+ \else
+ \HyField@FlagsPushButton
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \LayoutPushButtonField{%
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Push
+ \pdfstartlink user {\PDFForm@Push}\relax
+ \MakeButtonField{#2}%
+ \pdfendlink
+ \HyField@AddToFields
+ }%
+ \fi
+ \endgroup
+}
+\def\@Submit[#1]#2{%
+ \def\Fld@width{\DefaultWidthofSubmit}%
+ \def\Fld@height{\DefaultHeightofSubmit}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofSubmit,#1%
+ }%
+ \HyField@FlagsPushButton
+ \HyField@FlagsSubmit
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Submit
+ \pdfstartlink user {%
+ \PDFForm@Submit
+ /AP<</N \SubmitObject/D \SubmitPObject>>%
+ }%
+ \relax
+ \MakeButtonField{#2}%
+ \pdfendlink
+ \HyField@AddToFields
+ \endgroup
+}
+\def\@Reset[#1]#2{%
+ \def\Fld@width{\DefaultWidthofReset}%
+ \def\Fld@height{\DefaultHeightofReset}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofReset,#1%
+ }%
+ \leavevmode
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Reset action is prohibited%
+ }\@ehc
+ \MakeButtonField{#2}%
+ \else
+ \HyField@FlagsPushButton
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Reset
+ \pdfstartlink user {\PDFForm@Reset}\relax
+ \MakeButtonField{#2}%
+ \pdfendlink
+ \HyField@AddToFields
+ \fi
+ \endgroup
+}
+\def\@CheckBox[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \def\Fld@default{0}%
+ \begingroup
+ \def\Fld@width{\DefaultWidthofCheckBox}%
+ \def\Fld@height{\DefaultHeightofCheckBox}%
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofCheckBox,#1%
+ }%
+ \PDFForm@Name
+ \HyField@FlagsCheckBox
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \LayoutCheckField{#2}{%
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Check
+ \pdfstartlink user {\PDFForm@Check}\relax
+ \MakeCheckField{\Fld@width}{\Fld@height}%
+ \pdfendlink
+ \HyField@AddToFields
+ }%
+ \endgroup
+}
+\def\Hy@FormObjects{%
+ \pdfobj {%
+ <<%
+ /Type/Encoding%
+ /Differences[%
+ 24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek%
+ /ring/tilde %
+ 39/quotesingle %
+ 96/grave %
+ 128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin%
+ /fraction/guilsinglleft/guilsinglright/minus/perthousand%
+ /quotedblbase/quotedblleft/quotedblright/quoteleft%
+ /quoteright/quotesinglbase/trademark/fi/fl/Lslash/OE%
+ /Scaron/Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron %
+ 164/currency %
+ 166/brokenbar %
+ 168/dieresis/copyright/ordfeminine %
+ 172/logicalnot/.notdef/registered/macron/degree/plusminus%
+ /twosuperior/threesuperior/acute/mu %
+ 183/periodcentered/cedilla/onesuperior/ordmasculine %
+ 188/onequarter/onehalf/threequarters %
+ 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE%
+ /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave%
+ /Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute%
+ /Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave%
+ /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls%
+ /agrave/aacute/acircumflex/atilde/adieresis/aring/ae%
+ /ccedilla/egrave/eacute/ecircumflex/edieresis/igrave%
+ /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute%
+ /ocircumflex/otilde/odieresis/divide/oslash/ugrave%
+ /uacute/ucircumflex/udieresis/yacute/thorn/ydieresis%
+ ]%
+ >>%
+ }%
+ \xdef\OBJ@pdfdocencoding{\the\pdflastobj}%
+ \pdfobj{%
+ <<%
+ /Type/Font%
+ /Subtype/Type1%
+ /Name/ZaDb%
+ /BaseFont/ZapfDingbats%
+ >>%
+ }%
+ \xdef\OBJ@ZaDb{\the\pdflastobj}%
+ \pdfobj{%
+ <<%
+ /Type/Font%
+ /Subtype/Type1%
+ /Name/Helv%
+ /BaseFont/Helvetica%
+ /Encoding \OBJ@pdfdocencoding\space 0 R%
+ >>%
+ }%
+ \xdef\OBJ@Helv{\the\pdflastobj}%
+ \global\let\Hy@FormObjects\relax
+}
+%</pdftex>
+% \end{macrocode}
+%
+% \subsection{dvipdfm, xetex}
+% D. P. Story adapted the pdf\TeX{} forms part for dvipdfm, of which
+% version 0.12.7b or higher is required because of a bug.
+% \begin{macrocode}
+%<*dvipdfm|xetex>
+% \end{macrocode}
+%
+% \begin{macro}{\@Gauge}
+% \begin{macrocode}
+\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
+ \Hy@Message{Sorry, dvipdfm/XeTeX does not support FORM gauges}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@Form}
+% \begin{macrocode}
+\def\@Form[#1]{%
+ \@ifundefined{textcolor}{\let\textcolor\@gobble}{}%
+ \kvsetkeys{Form}{#1}%
+ \Hy@FormObjects
+ \@pdfm@mark{obj @afields []}%
+ \@pdfm@mark{obj @corder []}%
+ \@pdfm@mark{%
+ obj @aform <<%
+ /Fields @afields%
+ /DR<<%
+ /Font<<%
+ /ZaDb @OBJZaDb%
+ /Helv @OBJHelv%
+ >>%
+ >>%
+ /DA(/Helv 10 Tf 0 g)%
+ /CO @corder%
+ \ifHy@pdfa
+ \else
+ \ifHyField@NeedAppearances
+ /NeedAppearances true%
+ \fi
+ \fi
+ >>%
+ }%
+ \@pdfm@mark{put @catalog <</AcroForm @aform>>}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@endForm}
+% \begin{macrocode}
+\let\@endForm\ltx@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dvipdfm@setdim}
+% \cmd{\dvipdfm@setdim} sets dimensions for ann using
+% \cmd{\pdfm@box}.
+% \begin{macrocode}
+\def\dvipdfm@setdim{%
+ height \the\ht\pdfm@box\space
+ width \the\wd\pdfm@box\space
+ depth \the\dp\pdfm@box\space
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyField@AnnotCount}
+% \begin{macrocode}
+\newcount\HyField@AnnotCount
+\HyField@AnnotCount=\z@
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@AdvanceAnnotCount}
+% \begin{macrocode}
+\def\HyField@AdvanceAnnotCount{%
+ \global\advance\HyField@AnnotCount\@ne
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\HyField@TheAnnotCount}
+% \begin{macrocode}
+\def\HyField@TheAnnotCount{%
+ \the\HyField@AnnotCount
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Fld@pageobjref}
+% \begin{macrocode}
+\def\Fld@pageobjref{/P @thispage}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HyField@AddToFields}
+% \begin{macrocode}
+\def\HyField@AddToFields#1{%
+ \@pdfm@mark{put @afields @#1\HyField@TheAnnotCount}%
+ \ifx\Fld@calculate@code\ltx@empty
+ \else
+ \@pdfm@mark{put @corder @#1\HyField@TheAnnotCount}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@TextField}
+% \begin{macrocode}
+\def\@TextField[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \let\Fld@default\ltx@empty
+ \let\Fld@value\@empty
+ \def\Fld@width{\DefaultWidthofText}%
+ \def\Fld@height{%
+ \ifFld@multiline
+ \DefaultHeightofTextMultiline
+ \else
+ \DefaultHeightofText
+ \fi
+ }%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofText,#1%
+ }%
+ \PDFForm@Name
+ \HyField@FlagsText
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\@empty\def\Fld@value{\Fld@default}\fi
+ \setbox\pdfm@box=\hbox{%
+ \MakeTextField{\Fld@width}{\Fld@height}%
+ }%
+ \HyField@AdvanceAnnotCount
+ \LayoutTextField{#2}{%
+ \leavevmode
+ \Hy@escapeform\PDFForm@Text
+ \@pdfm@mark{%
+ ann @text\HyField@TheAnnotCount\space
+ \dvipdfm@setdim << \PDFForm@Text >>%
+ }%
+ }%
+ \unhbox\pdfm@box
+ \HyField@AddToFields{text}%
+ % record in @afields array
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ChoiceMenu}
+% \begin{macrocode}
+\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
+ \def\Fld@name{#2}%
+ \let\Fld@default\relax
+ \let\Fld@value\relax
+ \def\Fld@width{\DefaultWidthofChoiceMenu}%
+ \def\Fld@height{\DefaultHeightofChoiceMenu}%
+ \begingroup
+ \Fld@menulength=0 %
+ \@tempdima\z@
+ \@for\@curropt:=#3\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \Hy@StepCount\Fld@menulength
+ \settowidth{\@tempdimb}{\@currDisplay}%
+ \ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
+ }%
+ \advance\@tempdima by 15\p@
+ \begingroup
+ \HyField@SetKeys{#1}%
+ \edef\x{\endgroup
+ \noexpand\expandafter
+ \noexpand\HyField@SetKeys
+ \noexpand\expandafter{%
+ \expandafter\noexpand\csname DefaultOptionsof%
+ \ifFld@radio
+ Radio%
+ \else
+ \ifFld@combo
+ \ifFld@popdown
+ PopdownBox%
+ \else
+ ComboBox%
+ \fi
+ \else
+ ListBox%
+ \fi
+ \fi
+ \endcsname
+ }%
+ }\x
+ \HyField@SetKeys{#1}%
+ \PDFForm@Name
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\relax
+ \let\Fld@value\Fld@default
+ \fi
+ \LayoutChoiceField{#2}{%
+ \ifFld@radio
+ \HyField@FlagsRadioButton
+ \@@Radio{#3}%
+ \else
+ \begingroup
+ \HyField@FlagsChoice
+ \ifdim\Fld@width<\@tempdima
+ \ifdim\@tempdima<1cm\@tempdima1cm\fi
+ \edef\Fld@width{\the\@tempdima}%
+ \fi
+ \ifFld@combo
+ \else
+ \@tempdima=\the\Fld@menulength\Fld@charsize
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \edef\Fld@height{\the\@tempdima}%
+ \fi
+ \@@Listbox{#3}%
+ \endgroup
+ \fi
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@Radio}
+% \begin{macrocode}
+\def\@@Radio#1{%
+ \Fld@listcount=0 %
+ \EdefEscapeName\Fld@default{\Fld@default}%
+ \setbox\pdfm@box=\hbox{%
+ \MakeRadioField{\Fld@width}{\Fld@height}%
+ }%
+ \@for\@curropt:=#1\do{%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \EdefEscapeName\@currValue{\@currValue}%
+ \Hy@StepCount\Fld@listcount
+ \@currDisplay\space
+ \leavevmode
+ \Hy@escapeform\PDFForm@Radio
+ \ifnum\Fld@listcount=1 %
+ \HyField@AdvanceAnnotCount
+ \fi
+ \@pdfm@mark{%
+ ann %
+ \ifnum\Fld@listcount=1 %
+ @radio\HyField@TheAnnotCount%
+ \space
+ \fi
+ \dvipdfm@setdim
+ <<%
+ \PDFForm@Radio
+ /AP<</N<</\@currValue /null>>>>%
+ >>%
+ }%
+ \unhcopy\pdfm@box\space% deliberate space between radio buttons
+ \ifnum\Fld@listcount=1 %
+ \HyField@AddToFields{radio}%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Fld@listcount}
+% \begin{macrocode}
+\newcount\Fld@listcount
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@Listbox}
+% \begin{macrocode}
+\def\@@Listbox#1{%
+ \HyField@PDFChoices{#1}%
+ \setbox\pdfm@box=\hbox{%
+ \MakeChoiceField{\Fld@width}{\Fld@height}%
+ }%
+ \leavevmode
+ \Hy@escapeform\PDFForm@List
+ \HyField@AdvanceAnnotCount
+ \@pdfm@mark{%
+ ann @list\HyField@TheAnnotCount\space
+ \dvipdfm@setdim
+ <<\PDFForm@List>>%
+ }%
+ \unhbox\pdfm@box
+ \HyField@AddToFields{list}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@PushButton}
+% \begin{macrocode}
+\def\@PushButton[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofPushButton,#1%
+ }%
+ \PDFForm@Name
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Push button with JavaScript is prohibited%
+ }\@ehc
+ \LayoutPushButtonField{%
+ \leavevmode
+ \MakeButtonField{#2}%
+ }%
+ \else
+ \setbox\pdfm@box=\hbox{\MakeButtonField{#2}}%
+ \HyField@FlagsPushButton
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \HyField@AdvanceAnnotCount
+ \LayoutPushButtonField{%
+ \leavevmode
+ \Hy@escapeform\PDFForm@Push
+ \@pdfm@mark{%
+ ann @push\HyField@TheAnnotCount\space
+ \dvipdfm@setdim
+ <<\PDFForm@Push>>%
+ }%
+ }%
+ \unhbox\pdfm@box
+ \HyField@AddToFields{push}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@Submit}
+% \begin{macrocode}
+\def\@Submit[#1]#2{%
+ \def\Fld@width{\DefaultWidthofSubmit}%
+ \def\Fld@height{\DefaultHeightofSubmit}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofSubmit,#1%
+ }%
+ \HyField@FlagsPushButton
+ \HyField@FlagsSubmit
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \setbox\pdfm@box=\hbox{\MakeButtonField{#2}}%
+ \leavevmode
+ \Hy@escapeform\PDFForm@Submit
+ \HyField@AdvanceAnnotCount
+ \@pdfm@mark{%
+ ann @submit\HyField@TheAnnotCount\space
+ \dvipdfm@setdim
+ <<\PDFForm@Submit>>%
+ }%
+ \unhbox\pdfm@box%
+ \HyField@AddToFields{submit}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@Reset}
+% \begin{macrocode}
+\def\@Reset[#1]#2{%
+ \def\Fld@width{\DefaultWidthofReset}%
+ \def\Fld@height{\DefaultHeightofReset}%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofReset,#1%
+ }%
+ \leavevmode
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Reset action is prohibited%
+ }\@ehc
+ \MakeButtonField{#2}%
+ \else
+ \HyField@FlagsPushButton
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \setbox\pdfm@box=\hbox{\MakeButtonField{#2}}%
+ \Hy@escapeform\PDFForm@Reset
+ \HyField@AdvanceAnnotCount
+ \@pdfm@mark{%
+ ann @reset\HyField@TheAnnotCount\space
+ \dvipdfm@setdim
+ <<\PDFForm@Reset>>%
+ }%
+ \unhbox\pdfm@box
+ \HyField@AddToFields{reset}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@CheckBox}
+% \begin{macrocode}
+\def\@CheckBox[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \def\Fld@default{0}%
+ \begingroup
+ \def\Fld@width{\DefaultWidthofCheckBox}%
+ \def\Fld@height{\DefaultHeightofCheckBox}%
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofCheckBox,#1%
+ }%
+ \PDFForm@Name
+ \HyField@FlagsCheckBox
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \setbox\pdfm@box=\hbox{%
+ \MakeCheckField{\Fld@width}{\Fld@height}%
+ }%
+ \HyField@AdvanceAnnotCount
+ \LayoutCheckField{#2}{%
+ \leavevmode
+ \Hy@escapeform\PDFForm@Check
+ \@pdfm@mark{%
+ ann @check\HyField@TheAnnotCount\space
+ \dvipdfm@setdim
+ <<\PDFForm@Check>>%
+ }%
+ \unhbox\pdfm@box
+ \HyField@AddToFields{check}%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\def\Hy@FormObjects{%
+ \@pdfm@mark{obj @OBJpdfdocencoding%
+ <<%
+ /Type/Encoding%
+ /Differences[%
+ 24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek/ring/tilde %
+ 39/quotesingle %
+ 96/grave %
+ 128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin%
+ /fraction/guilsinglleft/guilsinglright/minus/perthousand%
+ /quotedblbase/quotedblleft/quotedblright/quoteleft/quoteright%
+ /quotesinglbase/trademark/fi/fl/Lslash/OE/Scaron/Ydieresis%
+ /Zcaron/dotlessi/lslash/oe/scaron/zcaron %
+ 164/currency %
+ 166/brokenbar %
+ 168/dieresis/copyright/ordfeminine %
+ 172/logicalnot/.notdef/registered/macron/degree/plusminus%
+ /twosuperior/threesuperior/acute/mu %
+ 183/periodcentered/cedilla/onesuperior/ordmasculine %
+ 188/onequarter/onehalf/threequarters %
+ 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE%
+ /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute%
+ /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex%
+ /Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex%
+ /Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex%
+ /atilde/adieresis/aring/ae/ccedilla/egrave/eacute%
+ /ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis%
+ /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis%
+ /divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute%
+ /thorn/ydieresis%
+ ]%
+ >>%
+ }%
+ \@pdfm@mark{obj @OBJZaDb%
+ <<%
+ /Type/Font%
+ /Subtype/Type1%
+ /Name/ZaDb%
+ /BaseFont/ZapfDingbats%
+ >>%
+ }%
+ \@pdfm@mark{obj @OBJHelv%
+ <<%
+ /Type/Font%
+ /Subtype/Type1%
+ /Name/Helv%
+ /BaseFont/Helvetica%
+ /Encoding @OBJpdfdocencoding%
+ >>%
+ }%
+ \global\let\Hy@FormObjects\relax
+}
+%</dvipdfm|xetex>
+% \end{macrocode}
+%
+% \subsection{Common forms part}
+% \begin{macrocode}
+%<*pdfform>
+% \end{macrocode}
+%
+% \begin{macro}{\Fld@pageobjref}
+% \begin{macrocode}
+\providecommand*{\Fld@pageobjref}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hy@escapestring}
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdf@escapestring\endcsname\relax
+ \let\Hy@escapestring\@firstofone
+ \def\Hy@escapeform#1{%
+ \ifHy@pdfescapeform
+ \def\Hy@escapestring##1{%
+ \noexpand\Hy@escapestring{\noexpand##1}%
+ }%
+ \edef\Hy@temp{#1}%
+ \expandafter\Hy@@escapeform\Hy@temp\Hy@escapestring{}\@nil
+ \def\Hy@escapestring##1{%
+ \@ifundefined{Hy@esc@\string##1}{%
+ ##1%
+ \ThisShouldNotHappen
+ }{%
+ \csname Hy@esc@\string##1\endcsname
+ }%
+ }%
+ \else
+ \let\Hy@escapestring\@firstofone
+ \fi
+ }%
+ \def\Hy@@escapeform#1\Hy@escapestring#2#3\@nil{%
+ \ifx\\#3\\%
+ \else
+ \expandafter
+ \Hy@pstringdef\csname Hy@esc@\string#2\endcsname{#2}%
+ \ltx@ReturnAfterFi{%
+ \Hy@@escapeform#3\@nil
+ }%
+ \fi
+ }%
+\else
+ \def\Hy@escapeform#1{%
+ \ifHy@pdfescapeform
+ \let\Hy@escapestring\pdfescapestring
+ \else
+ \let\Hy@escapestring\@firstofone
+ \fi
+ }%
+ \Hy@escapeform{}%
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PDFForm@Name}
+% \begin{macrocode}
+\def\PDFForm@Name{%
+ \PDFForm@@Name\Fld@name
+ \ifx\Fld@altname\relax
+ \else
+ \PDFForm@@Name\Fld@altname
+ \fi
+ \ifx\Fld@mappingname\relax
+ \else
+ \PDFForm@@Name\Fld@mappingname
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PDFForm@@Name}
+% \begin{macrocode}
+\def\PDFForm@@Name#1{%
+ \begingroup
+ \ifnum\Hy@pdfversion<5 % implementation note 117, PDF spec 1.7
+ \ifHy@unicode
+ \Hy@unicodefalse
+ \fi
+ \fi
+ \HyPsd@XeTeXBigCharstrue
+ \pdfstringdef\Hy@gtemp#1%
+ \endgroup
+ \let#1\Hy@gtemp
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Fld@additionalactions}
+% \begin{macrocode}
+\def\Fld@@additionalactions{%
+% \end{macrocode}
+% K input (keystroke) format
+% \begin{macrocode}
+ \ifx\Fld@keystroke@code\@empty
+ \else
+ /K<</S/JavaScript/JS(\Hy@escapestring{\Fld@keystroke@code})>>%
+ \fi
+% \end{macrocode}
+% F display format
+% \begin{macrocode}
+ \ifx\Fld@format@code\@empty
+ \else
+ /F<</S/JavaScript/JS(\Hy@escapestring{\Fld@format@code})>>%
+ \fi
+% \end{macrocode}
+% V validation
+% \begin{macrocode}
+ \ifx\Fld@validate@code\@empty
+ \else
+ /V<</S/JavaScript/JS(\Hy@escapestring{\Fld@validate@code})>>%
+ \fi
+% \end{macrocode}
+% C calculation
+% \begin{macrocode}
+ \ifx\Fld@calculate@code\@empty
+ \else
+ /C<</S/JavaScript/JS(\Hy@escapestring{\Fld@calculate@code})>>%
+ \fi
+% \end{macrocode}
+% Fo receiving the input focus
+% \begin{macrocode}
+ \ifx\Fld@onfocus@code\@empty
+ \else
+ /Fo<</S/JavaScript/JS(\Hy@escapestring{\Fld@onfocus@code})>>%
+ \fi
+% \end{macrocode}
+% Bl loosing the input focus (blurred)
+% \begin{macrocode}
+ \ifx\Fld@onblur@code\@empty
+ \else
+ /Bl<</S/JavaScript/JS(\Hy@escapestring{\Fld@onblur@code})>>%
+ \fi
+% \end{macrocode}
+% D pressing the mouse button (down)
+% \begin{macrocode}
+ \ifx\Fld@onmousedown@code\@empty
+ \else
+ /D<</S/JavaScript/JS(\Hy@escapestring{\Fld@onmousedown@code})>>%
+ \fi
+% \end{macrocode}
+% U releasing the mouse button (up)
+% \begin{macrocode}
+ \ifx\Fld@onmouseup@code\@empty
+ \else
+ /U<</S/JavaScript/JS(\Hy@escapestring{\Fld@onmouseup@code})>>%
+ \fi
+% \end{macrocode}
+% E cursor enters the annotation's active area.
+% \begin{macrocode}
+ \ifx\Fld@onenter@code\@empty
+ \else
+ /E<</S/JavaScript/JS(\Hy@escapestring{\Fld@onenter@code})>>%
+ \fi
+% \end{macrocode}
+% X cursor exits the annotation's active area.
+% \begin{macrocode}
+ \ifx\Fld@onexit@code\@empty
+ \else
+ /X<</S/JavaScript/JS(\Hy@escapestring{\Fld@onexit@code})>>%
+ \fi
+}
+\def\Fld@additionalactions{%
+ \if-\Fld@@additionalactions-%
+ \else
+ \ifHy@pdfa
+ \else
+ /AA<<\Fld@@additionalactions>>%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Fld@annotnames}
+% \begin{macrocode}
+\def\Fld@annotnames{%
+ /T(\Fld@name)%
+ \ifx\Fld@altname\relax
+ \else
+ /TU(\Fld@altname)%
+ \fi
+ \ifx\Fld@mappingname\relax
+ \else
+ /TM(\Fld@mappingname)%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PDFForm@Check}
+% \begin{macrocode}
+\def\PDFForm@Check{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Btn%
+ \Fld@flags
+ /Q \Fld@align
+ /BS<</W \Fld@borderwidth /S/\Fld@borderstyle>>%
+ /AP<< /N <</Yes<<>>>> >> %new string /Yes is from below
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ \ifx\Fld@bcolor\relax
+ \else
+ /BG[\Fld@bcolor]%
+ \fi
+ /CA(\Hy@escapestring{\Fld@cbsymbol})%
+ >>%
+ /DA(/ZaDb \strip@pt\Fld@charsize\space Tf%
+ \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
+ /H/P%
+ \ifFld@checked /V/Yes/AS/Yes\else /V/Off/AS/Off\fi
+ \Fld@additionalactions
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PDFForm@Push}
+% \begin{macrocode}
+\ifHy@pdfa
+\else
+ \def\PDFForm@Push{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Btn%
+ \Fld@flags
+ /H/P%
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ >>%
+ \fi
+ /A<</S/JavaScript/JS(\Hy@escapestring{\Fld@onclick@code})>>%
+ \Fld@additionalactions
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PDFForm@List}
+% \begin{macrocode}
+\def\PDFForm@List{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Ch%
+ \Fld@flags
+ /Q \Fld@align
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \ifx\fld@bcolor\relax \else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ \ifx\Fld@bcolor\relax
+ \else
+ /BG[\Fld@bcolor]%
+ \fi
+ >>%
+ \fi
+ /DA(/Helv \strip@pt\Fld@charsize\space Tf%
+ \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
+ \Fld@choices
+ \Fld@additionalactions
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PDFForm@Radio}
+% \begin{macrocode}
+\def\PDFForm@Radio{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Btn%
+ \Fld@flags
+ /H/P%
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ \ifx\Fld@bcolor\relax
+ \else
+ /BG[\Fld@bcolor]%
+ \fi
+ /CA(\Hy@escapestring{\Fld@radiosymbol})%
+ >>%
+ /DA(/ZaDb \strip@pt\Fld@charsize\space Tf%
+ \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
+% \end{macrocode}
+%^^A \ifx\@currValue\Fld@default %old code
+%^^A /V/\Fld@default
+%^^A /DV/\Fld@default
+%^^A \else
+%^^A /V/Off%
+%^^A /DV/Off%
+%^^A \fi
+% New code, the default value is used for all buttons
+% \begin{macrocode}
+ \ifx\Fld@default\@empty
+ /V/Off%
+ /DV/Off%
+ \else
+ /V/\Fld@default
+ /DV/\Fld@default
+ \fi
+ \Fld@additionalactions
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PDFForm@Text}
+% \begin{macrocode}
+\def\PDFForm@Text{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Tx%
+ \Fld@flags
+ /Q \Fld@align
+ /BS<</W \Fld@borderwidth\space /S /\Fld@borderstyle>>%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \ifx\Fld@bcolor\relax \else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ \ifx\Fld@bcolor\relax
+ \else
+ /BG[\Fld@bcolor]%
+ \fi
+ >>%
+ \fi
+ /DA(/Helv \strip@pt\Fld@charsize\space Tf%
+ \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
+ /DV(\Hy@escapestring{\Fld@default})%
+ /V(\Hy@escapestring{\Fld@value})%
+ \Fld@additionalactions
+ \ifnum\Fld@maxlen>\z@/MaxLen \Fld@maxlen \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PDFForm@Submit}
+% \begin{macrocode}
+\def\PDFForm@Submit{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Btn%
+ \Fld@flags
+ /H/P%
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ >>%
+ \fi
+ /A<<%
+ /S/SubmitForm%
+ /F<<%
+ /FS/URL%
+ /F(\Hy@escapestring{\Form@action})%
+ >>%
+ \Fld@submitflags
+ >>%
+ \Fld@additionalactions
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PDFForm@Reset}
+% \begin{macrocode}
+\ifHy@pdfa
+\else
+ \def\PDFForm@Reset{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Btn%
+ \Fld@flags
+ /H/P%
+ /DA(/Helv \strip@pt\Fld@charsize\space Tf 0 0 1 rg)%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+% /CA (Clear)
+% /AC (Done)
+ >>%
+ \fi
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ /A<</S/ResetForm>>%
+ \Fld@additionalactions
+ }%
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</pdfform>
+%<*package>
+% \end{macrocode}
+%
+% \section{Bookmarks in the PDF file}
+% This was originally developed by Yannis Haralambous
+% (it was the separate |repere.sty|); it needed
+% the |repere| or |makebook.pl| post-processor to work properly. Now
+% redundant, as it is done entirely in \LaTeX{} macros.
+%
+% To write out the current section title, and its rationalized number,
+% we have to intercept the |\@sect| command, which is rather
+% dangerous. But how else to see the information we need?
+% We do the \emph{same} for |\@ssect|, giving anchors to
+% unnumbered sections. This allows things like bibliographies
+% to get bookmarks when used with a manual |\addcontentsline|
+% \begin{macrocode}
+\def\phantomsection{%
+ \Hy@MakeCurrentHrefAuto{section*}%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
+}
+%</package>
+% \end{macrocode}
+%
+% \subsection{Bookmarks}
+% \begin{macrocode}
+%<*outlines>
+% \end{macrocode}
+%
+% This section was written by Heiko Oberdiek; the code replaces
+% an earlier version by David Carlisle.
+%
+% The first part of bookmark code is in section \ref{sec:pdfstring}.
+% Further documentation is available as paper and slides of the
+% talk, that Heiko Oberdiek has given at the EuroTeX'99 meating
+% in Heidelberg. See |paper.pdf| and |slides.pdf| in the
+% |doc| directory of hyperref.
+%
+% When using the right-to-left typesetting based on \eTeX, the order
+% of the |\BOOKMARK| commands written to the |\@outlinefile| could
+% appear wrong, because of mis-feature of \eTeX's implementation (that
+% it processes the shipped out lines left-to-right, instead of the
+% order in which they appear in the document). The wrong order will
+% appear when the file contains two bookmarks on the same line typeset
+% right-to-left.
+%
+% To work around this problem, the |bookmark@seq@number| counter is
+% used to write the bookmark's sequential number into a comment in the
+% |\@outlinefile|, which could be used to post-process it to achieve
+% the proper ordering of |\BOOKMARK| commands in that file.
+%
+% \begin{macrocode}
+\def\Hy@writebookmark#1#2#3#4#5{%
+ % section number, text, label, level, file
+ \ifx\WriteBookmarks\relax%
+ \else
+ \ifnum#4>\Hy@bookmarksdepth\relax
+ \else
+ \@@writetorep{#1}{#2}{#3}{#4}{#5}%
+ \fi
+ \fi
+}
+\def\Hy@currentbookmarklevel{0}
+\def\Hy@numberline#1{#1 }
+\def\@@writetorep#1#2#3#4#5{%
+ \begingroup
+ \edef\Hy@tempa{#5}%
+ \ifx\Hy@tempa\Hy@bookmarkstype
+ \edef\Hy@level{#4}%
+ \ifx\Hy@levelcheck Y%
+ \@tempcnta\Hy@level\relax
+ \advance\@tempcnta by -1 %
+ \ifnum\Hy@currentbookmarklevel<\@tempcnta
+ \advance\@tempcnta by -\Hy@currentbookmarklevel\relax
+ \advance\@tempcnta by 1 %
+ \Hy@Warning{%
+ Difference (\the\@tempcnta) between bookmark levels is %
+ greater \MessageBreak than one, level fixed%
+ }%
+ \@tempcnta\Hy@currentbookmarklevel
+ \advance\@tempcnta by 1 %
+ \edef\Hy@level{\the\@tempcnta}%
+ \fi
+ \else
+ \global\let\Hy@levelcheck Y%
+ \fi
+ \global\let\Hy@currentbookmarklevel\Hy@level
+ \@tempcnta\Hy@level\relax
+ \expandafter\xdef\csname Parent\Hy@level\endcsname{#3}%
+ \advance\@tempcnta by -1 %
+ \edef\Hy@tempa{#3}%
+ \edef\Hy@tempb{\csname Parent\the\@tempcnta\endcsname}%
+ \ifx\Hy@tempa\Hy@tempb
+ \Hy@Warning{%
+ The anchor of a bookmark and its parent's must not%
+ \MessageBreak be the same. Added a new anchor%
+ }%
+ \phantomsection
+ \fi
+ \ifHy@bookmarksnumbered
+ \let\numberline\Hy@numberline
+ \let\booknumberline\Hy@numberline
+ \let\partnumberline\Hy@numberline
+ \let\chapternumberline\Hy@numberline
+ \else
+ \let\numberline\@gobble
+ \let\booknumberline\@gobble
+ \let\partnumberline\@gobble
+ \let\chapternumberline\@gobble
+ \fi
+ \HyPsd@XeTeXBigCharstrue
+ \pdfstringdef\Hy@tempa{#2}%
+ \HyPsd@SanitizeForOutFile\Hy@tempa
+ \if@filesw
+ \stepcounter{bookmark@seq@number}%
+ \@ifundefined{@outlinefile}{%
+ }{%
+ \protected@write\@outlinefile{}{%
+ \protect\BOOKMARK
+ [\Hy@level][\@bookmarkopenstatus{\Hy@level}]{#3}%
+ {\Hy@tempa}{\Hy@tempb}%
+ \@percentchar\space\thebookmark@seq@number
+ }%
+ }%
+ \fi
+ \fi
+ \endgroup
+}
+\newcounter{bookmark@seq@number}
+% \end{macrocode}
+% \begin{macrocode}
+\begingroup
+ \lccode`(=`{%
+ \lccode`)=`}%
+ \lccode`1=\z@
+ \lccode`2=\z@
+ \lccode`3=\z@
+ \lccode`5=\z@
+ \lccode`7=\z@
+ \lccode`\#=\z@
+ \lccode`\`=\z@
+ \lccode`\{=\z@
+ \lccode`\}=\z@
+\lowercase{%
+ \endgroup
+ \def\HyPsd@SanitizeForOutFile#1{%
+ \@onelevel@sanitize\Hy@tempa
+ \escapechar`\\%
+ \edef\Hy@tempa{%
+ \expandafter\HyPsd@SanitizeOut@BraceLeft\Hy@tempa(\@nil
+ }%
+ \edef\Hy@tempa{%
+ \expandafter\HyPsd@SanitizeOut@BraceRight\Hy@tempa)\@nil
+ }%
+ }%
+ \def\HyPsd@SanitizeOut@BraceLeft#1(#2\@nil{%
+ #1%
+ \ifx\\#2\\%
+ \expandafter\ltx@gobble
+ \else
+ \expandafter\ltx@firstofone
+ \fi
+ {%
+ \string\173%
+ \HyPsd@SanitizeOut@BraceLeft#2\@nil
+ }%
+ }%
+ \def\HyPsd@SanitizeOut@BraceRight#1)#2\@nil{%
+ #1%
+ \ifx\\#2\\%
+ \expandafter\ltx@gobble
+ \else
+ \expandafter\ltx@firstofone
+ \fi
+ {%
+ \string\175%
+ \HyPsd@SanitizeOut@BraceRight#2\@nil
+ }%
+ }%
+}
+% \end{macrocode}
+% In the call of \cmd{\BOOKMARK} the braces around \verb|#4|
+% are omitted, because it is not likely, that the level number
+% contains \verb|]|.
+% \begin{macrocode}
+\newcommand{\currentpdfbookmark}{%
+ \pdfbookmark[\Hy@currentbookmarklevel]%
+}
+\newcommand{\subpdfbookmark}{%
+ \@tempcnta\Hy@currentbookmarklevel
+ \Hy@StepCount\@tempcnta
+ \expandafter\pdfbookmark\expandafter[\the\@tempcnta]%
+}
+\newcommand{\belowpdfbookmark}[2]{%
+ \@tempcnta\Hy@currentbookmarklevel
+ \Hy@StepCount\@tempcnta
+ \expandafter\pdfbookmark\expandafter[\the\@tempcnta]{#1}{#2}%
+ \advance\@tempcnta by -1 %
+ \xdef\Hy@currentbookmarklevel{\the\@tempcnta}%
+}
+% \end{macrocode}
+% Tobias Oetiker rightly points out that we need a way to
+% force a bookmark entry. So we introduce |\pdfbookmark|,
+% with two parameters, the title, and a symbolic name.
+% By default this is at level 1, but we can reset that with the
+% optional first argument.
+% \begin{macrocode}
+\renewcommand\pdfbookmark[3][0]{%
+ \Hy@writebookmark{}{#2}{#3.#1}{#1}{toc}%
+ \hyper@anchorstart{#3.#1}\hyper@anchorend
+}
+\def\BOOKMARK{%
+ \@ifnextchar[{\@BOOKMARK}{\@@BOOKMARK[1][-]}%
+}
+\def\@BOOKMARK[#1]{%
+ \@ifnextchar[{\@@BOOKMARK[{#1}]}{\@@BOOKMARK[{#1}][-]}%
+}
+% \end{macrocode}
+% The macros for calculating structure of outlines
+% are derived from those by Petr Olsak used in the texinfopdf macros.
+%
+% \subsubsection{Rerun warning}
+%
+% \begin{macro}{\Hy@OutlineRerunCheck}
+% \begin{macrocode}
+\RequirePackage{rerunfilecheck}[2009/12/10]
+\def\Hy@OutlineRerunCheck{%
+ \RerunFileCheck{\jobname.out}{%
+ \immediate\closeout\@outlinefile
+ }{%
+ Rerun to get outlines right\MessageBreak
+ or use package `bookmark'%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Driver stuff}
+%
+% The VTEX section was written originally by VTEX, but then
+% amended by Denis Girou (\Email{denis.girou@idris.fr}),
+% then by by Taco Hoekwater (\Email{taco.hoekwater@wkap.nl}. The problem
+% is that VTEX, with its close integration of the PDF backend, does
+% look at the contents of bookmarks, escaping |\| and the like.
+% \begin{macrocode}
+%<*vtex>
+% \end{macrocode}
+% \begin{macrocode}
+\newcount\@serial@counter\@serial@counter=1\relax
+% \end{macrocode}
+% \begin{macro}{\hv@pdf@char}
+% Plain octal codes doesn't work with versions below 6.50.
+% So for early versions hex numbers have to be used.
+% It would be possible to program this instead of the
+% large |\ifcase|, but I'm too lazy to sort that out now.
+% \begin{macrocode}
+\begingroup
+ \catcode`\'=12 %
+ \ifnum\Hy@VTeXversion<650 %
+ \catcode`\"=12 %
+ \gdef\hv@pdf@char#1#2#3{%
+ \char
+ \ifcase'#1#2#3 %
+ "00\or"01\or"02\or"03\or"04\or"05\or"06\or"07%
+ \or"08\or"09\or"0A\or"0B\or"0C\or"0D\or"0E\or"0F%
+ \or"10\or"11\or"12\or"13\or"14\or"15\or"16\or"17%
+ \or"18\or"19\or"1A\or"1B\or"1C\or"1D\or"1E\or"1F%
+ \or"20\or"21\or"22\or"23\or"24\or"25\or"26\or"27%
+ \or"28\or"29\or"2A\or"2B\or"2C\or"2D\or"2E\or"2F%
+ \or"30\or"31\or"32\or"33\or"34\or"35\or"36\or"37%
+ \or"38\or"39\or"3A\or"3B\or"3C\or"3D\or"3E\or"3F%
+ \or"40\or"41\or"42\or"43\or"44\or"45\or"46\or"47%
+ \or"48\or"49\or"4A\or"4B\or"4C\or"4D\or"4E\or"4F%
+ \or"50\or"51\or"52\or"53\or"54\or"55\or"56\or"57%
+ \or"58\or"59\or"5A\or"5B\or"5C\or"5D\or"5E\or"5F%
+ \or"60\or"61\or"62\or"63\or"64\or"65\or"66\or"67%
+ \or"68\or"69\or"6A\or"6B\or"6C\or"6D\or"6E\or"6F%
+ \or"70\or"71\or"72\or"73\or"74\or"75\or"76\or"77%
+ \or"78\or"79\or"7A\or"7B\or"7C\or"7D\or"7E\or"7F%
+ \or"80\or"81\or"82\or"83\or"84\or"85\or"86\or"87%
+ \or"88\or"89\or"8A\or"8B\or"8C\or"8D\or"8E\or"8F%
+ \or"90\or"91\or"92\or"93\or"94\or"95\or"96\or"97%
+ \or"98\or"99\or"9A\or"9B\or"9C\or"9D\or"9E\or"9F%
+ \or"A0\or"A1\or"A2\or"A3\or"A4\or"A5\or"A6\or"A7%
+ \or"A8\or"A9\or"AA\or"AB\or"AC\or"AD\or"AE\or"AF%
+ \or"B0\or"B1\or"B2\or"B3\or"B4\or"B5\or"B6\or"B7%
+ \or"B8\or"B9\or"BA\or"BB\or"BC\or"BD\or"BE\or"BF%
+ \or"C0\or"C1\or"C2\or"C3\or"C4\or"C5\or"C6\or"C7%
+ \or"C8\or"C9\or"CA\or"CB\or"CC\or"CD\or"CE\or"CF%
+ \or"D0\or"D1\or"D2\or"D3\or"D4\or"D5\or"D6\or"D7%
+ \or"D8\or"D9\or"DA\or"DB\or"DC\or"DD\or"DE\or"DF%
+ \or"E0\or"E1\or"E2\or"E3\or"E4\or"E5\or"E6\or"E7%
+ \or"E8\or"E9\or"EA\or"EB\or"EC\or"ED\or"EE\or"EF%
+ \or"F0\or"F1\or"F2\or"F3\or"F4\or"F5\or"F6\or"F7%
+ \or"F8\or"F9\or"FA\or"FB\or"FC\or"FD\or"FE\or"FF%
+ \fi
+ }%
+ \else
+ \gdef\hv@pdf@char{\char'}%
+ \fi
+\endgroup
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@BOOKMARK}
+% \begin{macrocode}
+\def\@@BOOKMARK[#1][#2]#3#4#5{%
+ \expandafter\edef\csname @count@#3\endcsname{%
+ \the\@serial@counter
+ }%
+ \edef\@mycount{\the\@serial@counter}%
+ \Hy@StepCount\@serial@counter
+ \edef\@parcount{%
+ \expandafter\ifx\csname @count@#5\endcsname\relax
+ 0%
+ \else
+ \csname @count@#5\endcsname
+ \fi
+ }%
+ \immediate\special{%
+ !outline \HyperDestNameFilter{#3};p=\@parcount,i=\@mycount,%
+ s=\ifx#2-c\else o\fi,t=#4%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ReadBookmarks}
+% \begin{macrocode}
+\def\ReadBookmarks{%
+ \begingroup
+ \def\0{\hv@pdf@char 0}%
+ \def\1{\hv@pdf@char 1}%
+ \def\2{\hv@pdf@char 2}%
+ \def\3{\hv@pdf@char 3}%
+ \def\({(}%
+ \def\){)}%
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \InputIfFileExists{\jobname.out}{}{}%
+ \endgroup
+ \ifx\WriteBookmarks\relax
+ \else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</vtex>
+% \end{macrocode}
+% \begin{macrocode}
+%<*!vtex>
+\def\ReadBookmarks{%
+ \pdf@ifdraftmode{}{%
+ \begingroup
+ \def\do##1{%
+ \ifnum\catcode`##1=\active
+ \@makeother##1%
+ \else
+ \ifnum\catcode`##1=6 %
+ \@makeother##1%
+ \fi
+ \fi
+ }%
+ \dospecials
+ \Hy@safe@activestrue
+ \escapechar=`\\%
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \calc@bm@number{##5}%
+ }%
+ \InputIfFileExists{\jobname.out}{}{}%
+ \ifx\WriteBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ \fi
+ \def\@@BOOKMARK[##1][##2]##3##4##5{%
+ \def\Hy@temp{##4}%
+%<*pdftex>
+ \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
+ \Hy@OutlineName{}\Hy@pstringName{%
+ ##2\check@bm@number{##3}%
+ }{%
+ \expandafter\strip@prefix\meaning\Hy@temp
+ }%
+%</pdftex>
+%<*pdfmark>
+ \pdfmark{%
+ pdfmark=/OUT,%
+ Count={##2\check@bm@number{##3}},%
+ Dest={##3},%
+ Title=\expandafter\strip@prefix\meaning\Hy@temp
+ }%
+%</pdfmark>
+%<*dvipdfm|xetex>
+ \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
+ \@pdfm@mark{%
+ outline \ifHy@DvipdfmxOutlineOpen
+ [%
+ \ifnum##21>\z@
+ \else
+ -%
+ \fi
+ ] %
+ \fi
+ ##1<<%
+ /Title(\expandafter\strip@prefix\meaning\Hy@temp)%
+ /A<<%
+ /S/GoTo%
+ /D(\Hy@pstringName)%
+ >>%
+ >>%
+ }%
+%</dvipdfm|xetex>
+ }%
+ \begingroup
+ \def\WriteBookmarks{0}%
+ \InputIfFileExists{\jobname.out}{}{}%
+ \endgroup
+ %{\escapechar\m@ne\InputIfFileExists{\jobname.out}{}{}}%
+ \endgroup
+ }%
+ \ifx\WriteBookmarks\relax
+ \else
+ \if@filesw
+ \newwrite\@outlinefile
+ \Hy@OutlineRerunCheck
+ \immediate\openout\@outlinefile=\jobname.out\relax
+ \ifHy@typexml
+ \immediate\write\@outlinefile{<relaxxml>\relax}%
+ \fi
+ \fi
+ \fi
+}
+%<*pdftex>
+\def\Hy@OutlineName#1#2#3#4{%
+ \pdfoutline goto name{#2}count#3{#4}%
+}
+%</pdftex>
+\def\check@bm@number#1{%
+ \expandafter\ifx\csname B_#1\endcsname\relax
+ 0%
+ \else
+ \csname B_#1\endcsname
+ \fi
+}
+\def\calc@bm@number#1{%
+ \@tempcnta=\check@bm@number{#1}\relax
+ \advance\@tempcnta by 1 %
+ \expandafter\xdef\csname B_#1\endcsname{\the\@tempcnta}%
+}
+%</!vtex>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifHy@implicit
+\else
+ \expandafter\endinput
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</outlines>
+%<*outlines|hypertex>
+% \end{macrocode}
+% \begin{macrocode}
+\newlength\Hy@SectionHShift
+\def\Hy@SectionAnchorHref#1{%
+ \ifx\protect\@typeset@protect
+ \Hy@@SectionAnchor{#1}%
+ \fi
+}
+\DeclareRobustCommand*{\Hy@@SectionAnchor}[1]{%
+ \leavevmode
+ \hbox to 0pt{%
+ \kern-\Hy@SectionHShift
+ \Hy@raisedlink{%
+ \hyper@anchorstart{#1}\hyper@anchorend
+ }%
+ \hss
+ }%
+}
+\let\H@old@ssect\@ssect
+\def\@ssect#1#2#3#4#5{%
+ \Hy@MakeCurrentHrefAuto{section*}%
+ \setlength{\Hy@SectionHShift}{#1}%
+ \begingroup
+ \toks@{\H@old@ssect{#1}{#2}{#3}{#4}}%
+ \toks\tw@\expandafter{%
+ \expandafter\Hy@SectionAnchorHref\expandafter{\@currentHref}%
+ #5%
+ }%
+ \edef\x{\endgroup
+ \the\toks@{\the\toks\tw@}%
+ }\x
+}
+\let\H@old@schapter\@schapter
+\def\@schapter#1{%
+ \begingroup
+ \let\@mkboth\@gobbletwo
+ \Hy@MakeCurrentHrefAuto{\Hy@chapapp*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ \endgroup
+ \H@old@schapter{#1}%
+}
+% \end{macrocode}
+% If there is no chapter number (\cmd{\frontmatter} or
+% \cmd{\backmatter}) then the counting by |\refstepcounter{chapter}|
+% is not executed, so there will be no destination for \cmd{addcontentsline}.
+% So \cmd{\@chapter} is overloaded to avoid this:
+% \begin{macrocode}
+\ltx@IfUndefined{@chapter}{}{%
+ \let\Hy@org@chapter\@chapter
+ \def\@chapter{%
+ \def\Hy@next{%
+ \Hy@MakeCurrentHrefAuto{\Hy@chapapp*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ }%
+ \ifnum\c@secnumdepth>\m@ne
+ \ltx@IfUndefined{if@mainmatter}%
+ \iftrue{\csname if@mainmatter\endcsname}%
+ \let\Hy@next\relax
+ \fi
+ \fi
+ \Hy@next
+ \Hy@org@chapter
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+\let\H@old@part\@part
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname chapter\endcsname\relax
+ \let\Hy@secnum@part\z@
+\else
+ \let\Hy@secnum@part\m@ne
+\fi
+\def\@part{%
+ \ifnum\Hy@secnum@part>\c@secnumdepth
+ \phantomsection
+ \fi
+ \H@old@part
+}
+% \end{macrocode}
+% \begin{macrocode}
+\let\H@old@spart\@spart
+\def\@spart#1{%
+ \Hy@MakeCurrentHrefAuto{part*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ \H@old@spart{#1}%
+}
+\let\H@old@sect\@sect
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {%
+ \Hy@MakeCurrentHrefAuto{section*}%
+ \setlength{\Hy@SectionHShift}{#3}%
+ \begingroup
+ \toks@{\H@old@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]}%
+ \toks\tw@\expandafter{%
+ \expandafter\Hy@SectionAnchorHref\expandafter{\@currentHref}%
+ #8%
+ }%
+ \edef\x{\endgroup
+ \the\toks@{\the\toks\tw@}%
+ }\x
+ }{%
+ \H@old@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}%
+ }%
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</outlines|hypertex>
+%<*outlines>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\expandafter\def\csname Parent-4\endcsname{}
+\expandafter\def\csname Parent-3\endcsname{}
+\expandafter\def\csname Parent-2\endcsname{}
+\expandafter\def\csname Parent-1\endcsname{}
+\expandafter\def\csname Parent0\endcsname{}
+\expandafter\def\csname Parent1\endcsname{}
+\expandafter\def\csname Parent2\endcsname{}
+\expandafter\def\csname Parent3\endcsname{}
+\expandafter\def\csname Parent4\endcsname{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</outlines>
+% \end{macrocode}
+%
+% \section{Compatibility with koma-script classes}
+%
+% \begin{macrocode}
+%<*outlines|hypertex>
+% \end{macrocode}
+%
+% Hard-wire in an unpleasant over-ride of komascript `scrbook' class
+% for Tobias Isenberg (\Email{Tobias.Isenberg@gmx.de}).
+% With version 6.71b the hack is also applied to `scrreprt' class
+% and is removed for koma-script versions since 2001/01/01,
+% because Markus Kohm supports hyperref in komascript.
+% \begin{macrocode}
+\def\Hy@tempa{%
+ \def\@addchap[##1]##2{%
+ \typeout{##2}%
+ \if@twoside
+ \@mkboth{##1}{}%
+ \else
+ \@mkboth{}{##1}%
+ \fi
+ \addtocontents{lof}{\protect\addvspace{10\p@}}%
+ \addtocontents{lot}{\protect\addvspace{10\p@}}%
+ \Hy@MakeCurrentHrefAuto{\Hy@chapapp*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ \if@twocolumn
+ \@topnewpage[\@makeschapterhead{##2}]%
+ \else
+ \@makeschapterhead{##2}%
+ \@afterheading
+ \fi
+ \addcontentsline{toc}{chapter}{##1}%
+ }%
+}
+\@ifclassloaded{scrbook}{%
+ \@ifclasslater{scrbook}{2001/01/01}{%
+ \let\Hy@tempa\@empty
+ }{}%
+}{%
+ \@ifclassloaded{scrreprt}{%
+ \@ifclasslater{scrreprt}{2001/01/01}{%
+ \let\Hy@tempa\@empty
+ }{}%
+ }{%
+ \let\Hy@tempa\@empty
+ }%
+}%
+\Hy@tempa
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</outlines|hypertex>
+% \end{macrocode}
+%
+% \section{Encoding definition files for encodings of PDF strings}
+% This was contributed by
+% Heiko Oberdiek.
+%
+% \subsection{PD1 encoding}
+% \begin{macrocode}
+%<*pd1enc>
+\DeclareFontEncoding{PD1}{}{}
+% \end{macrocode}
+% Accents
+% \begin{macrocode}
+\DeclareTextAccent{\`}{PD1}{\textasciigrave}
+\DeclareTextAccent{\'}{PD1}{\textacute}
+\DeclareTextAccent{\^}{PD1}{\textasciicircum}
+\DeclareTextAccent{\~}{PD1}{\texttilde}
+\DeclareTextAccent{\"}{PD1}{\textasciidieresis}
+\DeclareTextAccent{\r}{PD1}{\textring}
+\DeclareTextAccent{\v}{PD1}{\textasciicaron}
+\DeclareTextAccent{\.}{PD1}{\textdotaccent}
+\DeclareTextAccent{\c}{PD1}{\textcedilla}
+\DeclareTextAccent{\=}{PD1}{\textasciimacron}
+\DeclareTextAccent{\b}{PD1}{\textmacronbelow}
+\DeclareTextAccent{\d}{PD1}{\textdotbelow}
+\DeclareTextCompositeCommand{\`}{PD1}{\@empty}{\textasciigrave}
+\DeclareTextCompositeCommand{\'}{PD1}{\@empty}{\textacute}
+\DeclareTextCompositeCommand{\^}{PD1}{\@empty}{\textasciicircum}
+\DeclareTextCompositeCommand{\~}{PD1}{\@empty}{\texttilde}
+\DeclareTextCompositeCommand{\"}{PD1}{\@empty}{\textasciidieresis}
+\DeclareTextCompositeCommand{\r}{PD1}{\@empty}{\textring}
+\DeclareTextCompositeCommand{\v}{PD1}{\@empty}{\textasciicaron}
+\DeclareTextCompositeCommand{\.}{PD1}{\@empty}{\textdotaccent}
+\DeclareTextCompositeCommand{\c}{PD1}{\@empty}{\textcedilla}
+\DeclareTextCompositeCommand{\=}{PD1}{\@empty}{\textasciimacron}
+\DeclareTextCompositeCommand{\b}{PD1}{\@empty}{\textmacronbelow}
+\DeclareTextCompositeCommand{\d}{PD1}{\@empty}{\textdotbelow}
+\DeclareTextCompositeCommand{\`}{PD1}{\ }{\textasciigrave}
+\DeclareTextCompositeCommand{\'}{PD1}{\ }{\textacute}
+\DeclareTextCompositeCommand{\^}{PD1}{\ }{\textasciicircum}
+\DeclareTextCompositeCommand{\~}{PD1}{\ }{\texttilde}
+\DeclareTextCompositeCommand{\"}{PD1}{\ }{\textasciidieresis}
+\DeclareTextCompositeCommand{\r}{PD1}{\ }{\textring}
+\DeclareTextCompositeCommand{\v}{PD1}{\ }{\textasciicaron}
+\DeclareTextCompositeCommand{\.}{PD1}{\ }{\textdotaccent}
+\DeclareTextCompositeCommand{\c}{PD1}{\ }{\textcedilla}
+\DeclareTextCompositeCommand{\=}{PD1}{\ }{\textasciimacron}
+\DeclareTextCompositeCommand{\b}{PD1}{\ }{\textmacronbelow}
+\DeclareTextCompositeCommand{\d}{PD1}{\ }{\textdotbelow}
+\DeclareTextCommand{\k}{PD1}[1]{\TextSymbolUnavailable{\k{#1}}#1}
+\DeclareTextCommand{\t}{PD1}[1]{\TextSymbolUnavailable{\t{#1}}#1}
+\DeclareTextCommand{\newtie}{PD1}[1]{%
+ \TextSymbolUnavailable{\newtie{#1}}#1%
+}
+% \end{macrocode}
+% Special white space escape characters
+% not for use in bookmarks but for other PDF strings.
+% \begin{macrocode}
+% U+0009 (CHARACTER TABULATION)
+\DeclareTextCommand{\textHT}{PD1}{\011}% U+0009
+% U+000A (LINE FEED)
+\DeclareTextCommand{\textLF}{PD1}{\012}% U+000A
+% U+000D (CARRIAGE RETURN)
+\DeclareTextCommand{\textCR}{PD1}{\015}% U+000D
+% \end{macrocode}
+% Accent glyph names
+% \begin{macrocode}
+% U+02D8 BREVE; breve
+\DeclareTextCommand{\textasciibreve}{PD1}{\030}% U+02D8
+% U+02C7 CARON; caron
+\DeclareTextCommand{\textasciicaron}{PD1}{\031}% U+02C7
+% U+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT; circumflex
+\DeclareTextCommand{\textcircumflex}{PD1}{\032}% U+02C6
+% U+02D9 DOT ABOVE; dotaccent
+\DeclareTextCommand{\textdotaccent}{PD1}{\033}% U+02D9
+% U+02DD DOUBLE ACUTE ACCENT; hungarumlaut
+\DeclareTextCommand{\texthungarumlaut}{PD1}{\034}% U+02DD
+% U+02DB OGONEK; ogonek
+\DeclareTextCommand{\textogonek}{PD1}{\035}% U+02DB
+% U+02DA RING ABOVE; ring
+\DeclareTextCommand{\textring}{PD1}{\036}% U+02DA
+% U+02DC SMALL TILDE; ilde, *tilde
+\DeclareTextCommand{\texttilde}{PD1}{\037}% U+02DC
+% \end{macrocode}
+% \cs{040}: U+0020 SPACE; *space, spacehackarabic\\
+% \cs{041}: U+0021 EXCLAMATION MARK; exclam
+% \begin{macrocode}
+% U+0022 QUOTATION MARK; quotedbl
+\DeclareTextCommand{\textquotedbl}{PD1}{"}% \042 U+0022
+% U+0023 NUMBER SIGN; numbersign
+\DeclareTextCommand{\textnumbersign}{PD1}{\043}% U+0023
+% U+0024 DOLLAR SIGN; dollar
+\DeclareTextCommand{\textdollar}{PD1}{\044}% U+0024
+% U+0025 PERCENT SIGN; percent
+\DeclareTextCommand{\textpercent}{PD1}{\045}% U+0025
+% U+0026 AMPERSAND; ampersand
+\DeclareTextCommand{\textampersand}{PD1}{\046}% U+0026
+% \end{macrocode}
+% \cs{047}: U+0027 APOSTROPHE; quotesingle\\
+% \begin{macrocode}
+% U+0028 LEFT PARENTHESIS; parenleft
+\DeclareTextCommand{\textparenleft}{PD1}{\string\(}% \050 U+0028
+% U+0029 RIGHT PARENTHESIS; parenright
+\DeclareTextCommand{\textparenright}{PD1}{\string\)}% \051 U+0029
+% \end{macrocode}
+% \cs{052}: U+002A ASTERISK; asterisk\\
+% \cs{053}: U+002B PLUS SIGN; plus\\
+% \cs{054}: U+002C COMMA; comma\\
+% \cs{055}: U+002D HYPHEN-MINUS; hyphen\\
+% \cs{056}: U+002E FULL STOP; period
+% \begin{macrocode}
+% U+002E FULL STOP; period
+\DeclareTextCommand{\textdotbelow}{PD1}{.}% \056 U+002E
+% \end{macrocode}
+% \cs{057}: % U+002F SOLIDUS; slash\\
+% \cs{060}: U+0030 DIGIT ZERO; zero\\
+% \dots\\
+% \cs{071}: U+0039 DIGIT NINE; nine\\
+% \cs{072}: U+003A COLON; colon\\
+% \cs{073}: U+003B SEMICOLON; semicolon
+% \begin{macrocode}
+% U+003C LESS-THAN SIGN; less
+\DeclareTextCommand{\textless}{PD1}{<}% \074 U+003C
+% \end{macrocode}
+% \cs{075}: U+003D EQUALS SIGN; equal
+% \begin{macrocode}
+% U+003E GREATER-THAN SIGN; greater
+\DeclareTextCommand{\textgreater}{PD1}{>}% \076 U+003E
+% \end{macrocode}
+% \cs{077}: U+003F QUESTION MARK; question\\
+% \cs{100}: U+0040 COMMERCIAL AT; at\\
+% \cs{101}: U+0041 LATIN CAPITAL LETTER A; A\\
+% \dots\\
+% \cs{132}: U+005A LATIN CAPITAL LETTER Z; Z\\
+% \cs{133}: U+005B LEFT SQUARE BRACKET; bracketleft
+% \begin{macrocode}
+% U+005C REVERSE SOLIDUS; backslash
+\DeclareTextCommand{\textbackslash}{PD1}{\134}% U+005C
+% "U+2216 SET MINUS" simulated by "U+005C REVERSE SOLIDUS"
+\DeclareTextCommand{\textsetminus}{PD1}{\textbackslash}
+% \end{macrocode}
+% \cs{135}: U+005D RIGHT SQUARE BRACKET; bracketright
+% \begin{macrocode}
+% U+005E CIRCUMFLEX ACCENT; asciicircum
+\DeclareTextCommand{\textasciicircum}{PD1}{\136}% U+005E
+% U+005F LOW LINE; underscore
+\DeclareTextCommand{\textunderscore}{PD1}{\137}% U+005F
+\DeclareTextCommand{\textmacronbelow}{PD1}{\137}% U+005F
+% U+0060 GRAVE ACCENT; grave
+\DeclareTextCommand{\textasciigrave}{PD1}{\140}% U+0060
+% \end{macrocode}
+% \cs{141}: U+0061 LATIN SMALL LETTER A; a\\
+% \dots\\
+% \cs{150}: U+0068 LATIN SMALL LETTER H; h
+% \begin{macrocode}
+% U+0069 LATIN SMALL LETTER I; i
+\DeclareTextCompositeCommand{\.}{PD1}{i}{i}% \151 U+0069
+% \end{macrocode}
+% \cs{152}: U+006A LATIN SMALL LETTER J; j\\
+% \dots\\
+% \cs{172}: U+007A LATIN SMALL LETTER Z; z
+% \begin{macrocode}
+% U+007B LEFT CURLY BRACKET; braceleft
+\DeclareTextCommand{\textbraceleft}{PD1}{\173}% U+007B
+% U+007C VERTICAL LINE; *bar, verticalbar
+\DeclareTextCommand{\textbar}{PD1}{|}% U+007C
+% U+007D RIGHT CURLY BRACKET; braceright
+\DeclareTextCommand{\textbraceright}{PD1}{\175}% U+007D
+% U+007E TILDE; asciitilde
+\DeclareTextCommand{\textasciitilde}{PD1}{\176}% U+007E
+% \end{macrocode}
+% Slot \cs{177} (0x7F) is undefined in PDFDocEncoding.
+% \begin{macrocode}
+% U+2022 BULLET; bullet
+\DeclareTextCommand{\textbullet}{PD1}{\200}% U+2022
+% U+2020 DAGGER; dagger
+\DeclareTextCommand{\textdagger}{PD1}{\201}% U+2020
+% U+2021 DOUBLE DAGGER; daggerdbl; \ddagger (LaTeX)
+\DeclareTextCommand{\textdaggerdbl}{PD1}{\202}% U+2021
+\DeclareTextCommand{\textddagger}{PD1}{\textddagger}
+% U+2026 HORIZONTAL ELLIPSIS; ellipsis
+\DeclareTextCommand{\textellipsis}{PD1}{\203}% U+2026
+% U+2014 EM DASH; emdash
+\DeclareTextCommand{\textemdash}{PD1}{\204}% U+2014
+% U+2013 EN DASH; endash
+\DeclareTextCommand{\textendash}{PD1}{\205}% U+2013
+% U+0192 LATIN SMALL LETTER F WITH HOOK; florin
+\DeclareTextCommand{\textflorin}{PD1}{\206}% U+0192
+% U+2044 FRACTION SLASH; fraction
+\DeclareTextCommand{\textfractionsolidus}{PD1}{\207}% U+2044
+% U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK; guilsinglleft
+\DeclareTextCommand{\guilsinglleft}{PD1}{\210}% U+2039
+% U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK; guilsinglright
+\DeclareTextCommand{\guilsinglright}{PD1}{\211}% U+203A
+% U+2212 MINUS SIGN; minus
+\DeclareTextCommand{\textminus}{PD1}{\212}% U+2212
+% U+2030 PER MILLE SIGN; perthousand
+\DeclareTextCommand{\textperthousand}{PD1}{\213}% U+2030
+% U+201E DOUBLE LOW-9 QUOTATION MARK; quotedblbase
+\DeclareTextCommand{\quotedblbase}{PD1}{\214}% U+201E
+% U+201C LEFT DOUBLE QUOTATION MARK; quotedblleft
+\DeclareTextCommand{\textquotedblleft}{PD1}{\215}% U+201C
+% U+201D RIGHT DOUBLE QUOTATION MARK; quotedblright
+\DeclareTextCommand{\textquotedblright}{PD1}{\216}% U+201D
+% U+2018 LEFT SINGLE QUOTATION MARK; quoteleft
+\DeclareTextCommand{\textquoteleft}{PD1}{\217}% U+2018
+% U+2019 RIGHT SINGLE QUOTATION MARK; quoteright
+\DeclareTextCommand{\textquoteright}{PD1}{\220}% U+2019
+% U+201A SINGLE LOW-9 QUOTATION MARK; quotesinglbase
+\DeclareTextCommand{\quotesinglbase}{PD1}{\221}% U+201A
+% U+2122 TRADE MARK SIGN; trademark
+\DeclareTextCommand{\texttrademark}{PD1}{\222}% U+2122
+% U+FB01 LATIN SMALL LIGATURE FI; fi
+\DeclareTextCommand{\textfi}{PD1}{\223}% U+FB01
+% U+FB02 LATIN SMALL LIGATURE FL; fl
+\DeclareTextCommand{\textfl}{PD1}{\224}% U+FB02
+% U+0141 LATIN CAPITAL LETTER L WITH STROKE; Lslash
+\DeclareTextCommand{\L}{PD1}{\225}% U+0141
+% U+0152 LATIN CAPITAL LIGATURE OE; OE
+\DeclareTextCommand{\OE}{PD1}{\226}% U+0152
+% U+0160 LATIN CAPITAL LETTER S WITH CARON; Scaron
+\DeclareTextCompositeCommand{\v}{PD1}{S}{\227}% U+0160
+% U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS; Ydieresis
+\DeclareTextCompositeCommand{\"}{PD1}{Y}{\230}% U+0178
+\DeclareTextCommand{\IJ}{PD1}{IJ}% ligature U+0049 U+004A
+% U+017D LATIN CAPITAL LETTER Z WITH CARON; Zcaron
+\DeclareTextCompositeCommand{\v}{PD1}{Z}{\231}% U+017D
+% U+0131 LATIN SMALL LETTER DOTLESS I; dotlessi
+\DeclareTextCommand{\i}{PD1}{\232}% U+0131
+% U+0142 LATIN SMALL LETTER L WITH STROKE; lslash
+\DeclareTextCommand{\l}{PD1}{\233}% U+0142
+% U+0153 LATIN SMALL LIGATURE OE; oe
+\DeclareTextCommand{\oe}{PD1}{\234}% U+0153
+% U+0161 LATIN SMALL LETTER S WITH CARON; scaron
+\DeclareTextCompositeCommand{\v}{PD1}{s}{\235}% U+0161
+% U+017E LATIN SMALL LETTER Z WITH CARON; zcaron
+\DeclareTextCompositeCommand{\v}{PD1}{z}{\236}% U+017E
+% \end{macrocode}
+% Slot \cs{237} (0x9F) is not defined in PDFDocEncoding.\\
+% The euro \cs{240} is inserted in version 1.3 of the pdf
+% specification.
+% \begin{macrocode}
+% U+20AC EURO SIGN; *Euro, euro
+\DeclareTextCommand{\texteuro}{PD1}{\240}% U+20AC
+% U+00A1 INVERTED EXCLAMATION MARK; exclamdown
+\DeclareTextCommand{\textexclamdown}{PD1}{\241}% U+00A1
+% U+00A2 CENT SIGN; cent
+\DeclareTextCommand{\textcent}{PD1}{\242}% U+00A2
+% U+00A3 POUND SIGN; sterling
+\DeclareTextCommand{\textsterling}{PD1}{\243}% U+00A3
+% U+00A4 CURRENCY SIGN; currency
+\DeclareTextCommand{\textcurrency}{PD1}{\244}% U+00A4
+% U+00A5 YEN SIGN; yen
+\DeclareTextCommand{\textyen}{PD1}{\245}% U+00A5
+% U+00A6 BROKEN BAR; brokenbar
+\DeclareTextCommand{\textbrokenbar}{PD1}{\246}% U+00A6
+% U+00A7 SECTION SIGN; section
+\DeclareTextCommand{\textsection}{PD1}{\247}% U+00A7
+% U+00A8 DIAERESIS; dieresis
+\DeclareTextCommand{\textasciidieresis}{PD1}{\250}% U+00A8
+% U+00A9 COPYRIGHT SIGN; copyright
+\DeclareTextCommand{\textcopyright}{PD1}{\251}% U+00A9
+% U+00AA FEMININE ORDINAL INDICATOR; ordfeminine
+\DeclareTextCommand{\textordfeminine}{PD1}{\252}% U+00AA
+% U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemotleft
+\DeclareTextCommand{\guillemotleft}{PD1}{\253}% U+00AB
+% U+00AC NOT SIGN; logicalnot
+\DeclareTextCommand{\textlogicalnot}{PD1}{\254}% U+00AC
+\DeclareTextCommand{\textlnot}{PD1}{\254}% logical not
+% \end{macrocode}
+% No glyph \cs{255} in PDFDocEncoding.
+% \begin{macrocode}
+% U+00AE REGISTERED SIGN; registered
+\DeclareTextCommand{\textregistered}{PD1}{\256}% U+00AE
+% U+00AF MACRON; *macron, overscore
+\DeclareTextCommand{\textasciimacron}{PD1}{\257}% U+00AF
+% U+00B0 DEGREE SIGN; degree
+\DeclareTextCommand{\textdegree}{PD1}{\260}% U+00B0
+% U+00B1 PLUS-MINUS SIGN; plusminus
+\DeclareTextCommand{\textplusminus}{PD1}{\261}% U+00B1
+% U+00B2 SUPERSCRIPT TWO; twosuperior
+\DeclareTextCommand{\texttwosuperior}{PD1}{\262}%* U+00B2
+% U+00B3 SUPERSCRIPT THREE; threesuperior
+\DeclareTextCommand{\textthreesuperior}{PD1}{\263}%* U+00B3
+% U+00B4 ACUTE ACCENT; acute
+\DeclareTextCommand{\textacute}{PD1}{\264}% U+00B4
+% U+00B5 MICRO SIGN; mu, mu1
+\DeclareTextCommand{\textmu}{PD1}{\265}% U+00B5
+% U+00B6 PILCROW SIGN; paragraph
+\DeclareTextCommand{\textparagraph}{PD1}{\266}% U+00B6
+% U+00B7 MIDDLE DOT; middot, *periodcentered
+\DeclareTextCommand{\textperiodcentered}{PD1}{\267}% U+00B7
+% U+00B8 CEDILLA; cedilla
+\DeclareTextCommand{\textcedilla}{PD1}{\270}% U+00B8
+% U+00B9 SUPERSCRIPT ONE; onesuperior
+\DeclareTextCommand{\textonesuperior}{PD1}{\271}%* U+00B9
+% U+00BA MASCULINE ORDINAL INDICATOR; ordmasculine
+\DeclareTextCommand{\textordmasculine}{PD1}{\272}% U+00BA
+% U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemotright
+\DeclareTextCommand{\guillemotright}{PD1}{\273}% U+00BB
+% U+00BC VULGAR FRACTION ONE QUARTER; onequarter
+\DeclareTextCommand{\textonequarter}{PD1}{\274}% U+00BC
+% U+00BD VULGAR FRACTION ONE HALF; onehalf
+\DeclareTextCommand{\textonehalf}{PD1}{\275}% U+00BD
+% U+00BE VULGAR FRACTION THREE QUARTERS; threequarters
+\DeclareTextCommand{\textthreequarters}{PD1}{\276}% U+00BE
+% U+00BF INVERTED QUESTION MARK; questiondown
+\DeclareTextCommand{\textquestiondown}{PD1}{\277}% U+00BF
+% U+00C0 LATIN CAPITAL LETTER A WITH GRAVE; Agrave
+\DeclareTextCompositeCommand{\`}{PD1}{A}{\300}% U+00C0
+% U+00C1 LATIN CAPITAL LETTER A WITH ACUTE; Aacute
+\DeclareTextCompositeCommand{\'}{PD1}{A}{\301}% U+00C1
+% U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX; Acircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{A}{\302}% U+00C2
+% U+00C3 LATIN CAPITAL LETTER A WITH TILDE; Atilde
+\DeclareTextCompositeCommand{\~}{PD1}{A}{\303}% U+00C3
+% U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS; Adieresis
+\DeclareTextCompositeCommand{\"}{PD1}{A}{\304}% U+00C4
+% U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE; Aring
+\DeclareTextCompositeCommand{\r}{PD1}{A}{\305}% U+00C5
+% U+00C6 LATIN CAPITAL LETTER AE; AE
+\DeclareTextCommand{\AE}{PD1}{\306}% U+00C6
+% U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA; Ccedilla
+\DeclareTextCompositeCommand{\c}{PD1}{C}{\307}% U+00C7
+% U+00C8 LATIN CAPITAL LETTER E WITH GRAVE; Egrave
+\DeclareTextCompositeCommand{\`}{PD1}{E}{\310}% U+00C8
+% U+00C9 LATIN CAPITAL LETTER E WITH ACUTE; Eacute
+\DeclareTextCompositeCommand{\'}{PD1}{E}{\311}% U+00C9
+% U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX; Ecircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{E}{\312}% U+00CA
+% U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS; Edieresis
+\DeclareTextCompositeCommand{\"}{PD1}{E}{\313}% U+00CB
+% U+00CC LATIN CAPITAL LETTER I WITH GRAVE; Igrave
+\DeclareTextCompositeCommand{\`}{PD1}{I}{\314}% U+00CC
+% U+00CD LATIN CAPITAL LETTER I WITH ACUTE; Iacute
+\DeclareTextCompositeCommand{\'}{PD1}{I}{\315}% U+00CD
+% U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX; Icircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{I}{\316}% U+00CE
+% U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS; Idieresis
+\DeclareTextCompositeCommand{\"}{PD1}{I}{\317}% U+00CF
+% U+00D0 LATIN CAPITAL LETTER ETH; Eth
+\DeclareTextCommand{\DH}{PD1}{\320}% U+00D0
+\DeclareTextCommand{\DJ}{PD1}{\320}% U+00D0
+% U+00D1 LATIN CAPITAL LETTER N WITH TILDE; Ntilde
+\DeclareTextCompositeCommand{\~}{PD1}{N}{\321}% U+00D1
+% U+00D2 LATIN CAPITAL LETTER O WITH GRAVE; Ograve
+\DeclareTextCompositeCommand{\`}{PD1}{O}{\322}% U+00D2
+% U+00D3 LATIN CAPITAL LETTER O WITH ACUTE; Oacute
+\DeclareTextCompositeCommand{\'}{PD1}{O}{\323}% U+00D3
+% U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX; Ocircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{O}{\324}% U+00D4
+% U+00D5 LATIN CAPITAL LETTER O WITH TILDE; Otilde
+\DeclareTextCompositeCommand{\~}{PD1}{O}{\325}% U+00D5
+% U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS; Odieresis
+\DeclareTextCompositeCommand{\"}{PD1}{O}{\326}% U+00D6
+% U+00D7 MULTIPLICATION SIGN; multiply
+\DeclareTextCommand{\textmultiply}{PD1}{\327}% U+00D7
+% U+00D8 LATIN CAPITAL LETTER O WITH STROKE; Oslash
+\DeclareTextCommand{\O}{PD1}{\330}% U+00D8
+% U+00D9 LATIN CAPITAL LETTER U WITH GRAVE; Ugrave
+\DeclareTextCompositeCommand{\`}{PD1}{U}{\331}% U+00D9
+% U+00DA LATIN CAPITAL LETTER U WITH ACUTE; Uacute
+\DeclareTextCompositeCommand{\'}{PD1}{U}{\332}% U+00DA
+% U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX; Ucircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{U}{\333}% U+00DB
+% U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS; Udieresis
+\DeclareTextCompositeCommand{\"}{PD1}{U}{\334}% U+00DC
+% U+00DD LATIN CAPITAL LETTER Y WITH ACUTE; Yacute
+\DeclareTextCompositeCommand{\'}{PD1}{Y}{\335}% U+00DD
+% U+00DE LATIN CAPITAL LETTER THORN; Thorn; \TH, \Thorn (wasysym)
+\DeclareTextCommand{\TH}{PD1}{\336}% U+00DE
+\DeclareTextCommand{\textThorn}{PD1}{\336}%* U+00DE
+% U+00DF LATIN SMALL LETTER SHARP S; germandbls
+\DeclareTextCommand{\ss}{PD1}{\337}% U+00DF
+% U+00E0 LATIN SMALL LETTER A WITH GRAVE; agrave
+\DeclareTextCompositeCommand{\`}{PD1}{a}{\340}% U+00E0
+% U+00E1 LATIN SMALL LETTER A WITH ACUTE; aacute
+\DeclareTextCompositeCommand{\'}{PD1}{a}{\341}% U+00E1
+% U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX; acircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{a}{\342}% U+00E2
+% U+00E3 LATIN SMALL LETTER A WITH TILDE; atilde
+\DeclareTextCompositeCommand{\~}{PD1}{a}{\343}% U+00E3
+% U+00E4 LATIN SMALL LETTER A WITH DIAERESIS; adieresis
+\DeclareTextCompositeCommand{\"}{PD1}{a}{\344}% U+00E4
+% U+00E5 LATIN SMALL LETTER A WITH RING ABOVE; aring
+\DeclareTextCompositeCommand{\r}{PD1}{a}{\345}% U+00E5
+% U+00E6 LATIN SMALL LETTER AE; ae
+\DeclareTextCommand{\ae}{PD1}{\346}% U+00E6
+% U+00E7 LATIN SMALL LETTER C WITH CEDILLA; ccedilla
+\DeclareTextCompositeCommand{\c}{PD1}{c}{\347}% U+00E7
+% U+00E8 LATIN SMALL LETTER E WITH GRAVE; egrave
+\DeclareTextCompositeCommand{\`}{PD1}{e}{\350}% U+00E8
+% U+00E9 LATIN SMALL LETTER E WITH ACUTE; eacute
+\DeclareTextCompositeCommand{\'}{PD1}{e}{\351}% U+00E9
+% U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX; ecircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{e}{\352}% U+00EA
+% U+00EB LATIN SMALL LETTER E WITH DIAERESIS; edieresis
+\DeclareTextCompositeCommand{\"}{PD1}{e}{\353}% U+00EB
+% U+00EC LATIN SMALL LETTER I WITH GRAVE; igrave
+\DeclareTextCompositeCommand{\`}{PD1}{i}{\354}% U+00EC
+\DeclareTextCompositeCommand{\`}{PD1}{\i}{\354}% U+00EC
+% U+00ED LATIN SMALL LETTER I WITH ACUTE; iacute
+\DeclareTextCompositeCommand{\'}{PD1}{i}{\355}% U+00ED
+\DeclareTextCompositeCommand{\'}{PD1}{\i}{\355}% U+00ED
+% U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX; icircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{i}{\356}% U+00EE
+\DeclareTextCompositeCommand{\^}{PD1}{\i}{\356}% U+00EE
+% U+00EF LATIN SMALL LETTER I WITH DIAERESIS; idieresis
+\DeclareTextCompositeCommand{\"}{PD1}{i}{\357}% U+00EF
+\DeclareTextCompositeCommand{\"}{PD1}{\i}{\357}% U+00EF
+% U+00F0 LATIN SMALL LETTER ETH; eth
+\DeclareTextCommand{\dh}{PD1}{\360}% U+00F0
+% U+00F1 LATIN SMALL LETTER N WITH TILDE; ntilde
+\DeclareTextCompositeCommand{\~}{PD1}{n}{\361}% U+00F1
+% U+00F2 LATIN SMALL LETTER O WITH GRAVE; ograve
+\DeclareTextCompositeCommand{\`}{PD1}{o}{\362}% U+00F2
+% U+00F3 LATIN SMALL LETTER O WITH ACUTE; oacute
+\DeclareTextCompositeCommand{\'}{PD1}{o}{\363}% U+00F3
+% U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX; ocircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{o}{\364}% U+00F4
+% U+00F5 LATIN SMALL LETTER O WITH TILDE; otilde
+\DeclareTextCompositeCommand{\~}{PD1}{o}{\365}% U+00F5
+% U+00F6 LATIN SMALL LETTER O WITH DIAERESIS; odieresis
+\DeclareTextCompositeCommand{\"}{PD1}{o}{\366}% U+00F6
+% U+00F7 DIVISION SIGN; divide
+\DeclareTextCommand{\textdivide}{PD1}{\367}% U+00F7
+% U+00F8 LATIN SMALL LETTER O WITH STROKE; oslash
+\DeclareTextCommand{\o}{PD1}{\370}% U+00F8
+% U+00F9 LATIN SMALL LETTER U WITH GRAVE; ugrave
+\DeclareTextCompositeCommand{\`}{PD1}{u}{\371}% U+00F9
+% U+00FA LATIN SMALL LETTER U WITH ACUTE; uacute
+\DeclareTextCompositeCommand{\'}{PD1}{u}{\372}% U+00FA
+% U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX; ucircumflex
+\DeclareTextCompositeCommand{\^}{PD1}{u}{\373}% U+00FB
+% U+00FC LATIN SMALL LETTER U WITH DIAERESIS; udieresis
+\DeclareTextCompositeCommand{\"}{PD1}{u}{\374}% U+00FC
+% U+00FD LATIN SMALL LETTER Y WITH ACUTE; yacute
+\DeclareTextCompositeCommand{\'}{PD1}{y}{\375}% U+00FD
+% U+00FE LATIN SMALL LETTER THORN; thorn; \th, \thorn (wasysym)
+\DeclareTextCommand{\th}{PD1}{\376}% U+00FE
+\DeclareTextCommand{\textthorn}{PD1}{\376}%* U+00FE
+% U+00FF LATIN SMALL LETTER Y WITH DIAERESIS; ydieresis
+\DeclareTextCompositeCommand{\"}{PD1}{y}{\377}% U+00FF
+\DeclareTextCommand{\ij}{PD1}{ij}% ligature U+0069 U+006A
+% \end{macrocode}
+% Glyphs that consist of several characters.
+% \begin{macrocode}
+\DeclareTextCommand{\SS}{PD1}{SS}%
+\DeclareTextCommand{\textcelsius}{PD1}{\textdegree C}%
+% \end{macrocode}
+% Aliases (german.sty)
+% \begin{macrocode}
+\DeclareTextCommand{\textglqq}{PD1}{\quotedblbase}%
+\DeclareTextCommand{\textgrqq}{PD1}{\textquotedblleft}%
+\DeclareTextCommand{\textglq}{PD1}{\quotesinglbase}%
+\DeclareTextCommand{\textgrq}{PD1}{\textquoteleft}%
+\DeclareTextCommand{\textflqq}{PD1}{\guillemotleft}%
+\DeclareTextCommand{\textfrqq}{PD1}{\guillemotright}%
+\DeclareTextCommand{\textflq}{PD1}{\guilsinglleft}%
+\DeclareTextCommand{\textfrq}{PD1}{\guilsinglright}%
+% \end{macrocode}
+% Aliases (math names)
+% \begin{macrocode}
+\DeclareTextCommand{\textneg}{PD1}{\textlogicalnot}%
+\DeclareTextCommand{\texttimes}{PD1}{\textmultiply}%
+\DeclareTextCommand{\textdiv}{PD1}{\textdivide}%
+\DeclareTextCommand{\textpm}{PD1}{\textplusminus}%
+\DeclareTextCommand{\textcdot}{PD1}{\textperiodcentered}%
+\DeclareTextCommand{\textbeta}{PD1}{\ss}%
+% \end{macrocode}
+% Polish aliases. PDF encoding does not have the characters, but it
+% is useful to Poles to have the plain letters regardless. Requested by
+% Wojciech Myszka (\Email{W.Myszka@immt.pwr.wroc.pl}).
+% \begin{macrocode}
+\DeclareTextCompositeCommand{\k}{PD1}{a}{a}% aogonek
+\DeclareTextCompositeCommand{\'}{PD1}{c}{c}% cacute
+\DeclareTextCompositeCommand{\k}{PD1}{e}{e}% eogonek
+\DeclareTextCompositeCommand{\'}{PD1}{n}{n}% nacute
+\DeclareTextCompositeCommand{\'}{PD1}{s}{s}% sacute
+\DeclareTextCompositeCommand{\'}{PD1}{z}{z}% zacute
+\DeclareTextCompositeCommand{\.}{PD1}{z}{z}% zdot
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareTextCompositeCommand{\k}{PD1}{A}{A}% Aogonek
+\DeclareTextCompositeCommand{\'}{PD1}{C}{C}% Cacute
+\DeclareTextCompositeCommand{\k}{PD1}{E}{E}% Eogonek
+\DeclareTextCompositeCommand{\'}{PD1}{N}{N}% Nacute
+\DeclareTextCompositeCommand{\'}{PD1}{S}{S}% Sacute
+\DeclareTextCompositeCommand{\'}{PD1}{Z}{Z}% Zacute
+\DeclareTextCompositeCommand{\.}{PD1}{Z}{Z}% Zdot
+% \end{macrocode}
+% \begin{macrocode}
+%</pd1enc>
+% \end{macrocode}
+%
+% \subsection{PU encoding}
+% \begin{macrocode}
+%<*puenc>
+\DeclareFontEncoding{PU}{}{}
+% \end{macrocode}
+%
+% \subsubsection{NFSS2 accents}
+%
+% \begin{macrocode}
+% U+0300 COMBINING GRAVE ACCENT; gravecmb, *gravecomb
+\DeclareTextCommand{\`}{PU}[1]{#1\83\000}% U+0300
+% U+0301 COMBINING ACUTE ACCENT; acutecmb, *acutecomb
+\DeclareTextCommand{\'}{PU}[1]{#1\83\001}% U+0301
+% U+0302 COMBINING CIRCUMFLEX ACCENT; circumflexcmb
+\DeclareTextCommand{\^}{PU}[1]{#1\83\002}% U+0302
+% U+0303 COMBINING TILDE; tildecmb, *tildecomb
+\DeclareTextCommand{\~}{PU}[1]{#1\83\003}% U+0303
+% U+0304 COMBINING MACRON; macroncmb
+\DeclareTextCommand{\=}{PU}[1]{#1\83\004}% U+0304
+% U+0306 COMBINING BREVE; brevecmb
+\DeclareTextCommand{\u}{PU}[1]{#1\83\006}% U+0306
+\DeclareTextCommand{\U}{PU}[1]{#1\83\006}% U+0306
+% U+0307 COMBINING DOT ABOVE; dotaccentcmb
+\DeclareTextCommand{\.}{PU}[1]{#1\83\007}% U+0307
+% U+0308 COMBINING DIAERESIS; dieresiscmb
+\DeclareTextCommand{\"}{PU}[1]{#1\83\010}% U+0308
+% U+030A COMBINING RING ABOVE; ringcmb
+\DeclareTextCommand{\r}{PU}[1]{#1\83\012}% U+030A
+% U+030B COMBINING DOUBLE ACUTE ACCENT; hungarumlautcmb
+\DeclareTextCommand{\H}{PU}[1]{#1\83\013}% U+030B
+% U+030C COMBINING CARON; caroncmb
+\DeclareTextCommand{\v}{PU}[1]{#1\83\014}% U+030C
+% U+030F COMBINING DOUBLE GRAVE ACCENT; dblgravecmb
+\DeclareTextCommand{\G}{PU}[1]{#1\83\017}% U+030F
+\DeclareTextCommand{\C}{PU}[1]{#1\83\017}% U+030F
+% U+0311 COMBINING INVERTED BREVE; breveinvertedcmb
+\DeclareTextCommand{\textinvbreve}{PU}[1]{#1\83\021}% U+0311
+\DeclareTextCommand{\newtie}{PU}[1]{#1\83\021}% U+0311
+% U+0323 COMBINING DOT BELOW; dotbelowcmb, *dotbelowcomb
+\DeclareTextCommand{\d}{PU}[1]{#1\83\043}% U+0323
+% U+0324 COMBINING DIAERESIS BELOW; dieresisbelowcmb; \textsubumlaut (tipa)
+\DeclareTextCommand{\textsubumlaut}{PU}[1]{#1\83\044}% U+0324
+% U+0325 COMBINING RING BELOW; ringbelowcmb; \textsubring (tipa)
+\DeclareTextCommand{\textsubring}{PU}[1]{#1\83\045}% U+0325
+% U+0327 COMBINING CEDILLA; cedillacmb
+\DeclareTextCommand{\c}{PU}[1]{#1\83\047}% U+0327
+% U+0328 COMBINING OGONEK; ogonekcmb
+\DeclareTextCommand{\k}{PU}[1]{#1\83\050}% U+0328
+% U+032D COMBINING CIRCUMFLEX ACCENT BELOW;
+% \textsubcircum (tipa)
+\DeclareTextCommand{\textsubcircum}{PU}[1]{#1\83\055}% U+032D
+% U+032E COMBINING BREVE BELOW; brevebelowcmb
+\DeclareTextCommand{\textsubbreve}{PU}[1]{#1\83\056}% U+032E
+% U+0330 COMBINING TILDE BELOW; tildebelowcmb; \textsubtilde (tipa)
+\DeclareTextCommand{\textsubtilde}{PU}[1]{#1\83\060}% U+0330
+% U+0331 COMBINING MACRON BELOW; macronbelowcmb
+\DeclareTextCommand{\b}{PU}[1]{#1\83\061}% U+0331
+% U+0361 COMBINING DOUBLE INVERTED BREVE; breveinverteddoublecmb
+\DeclareTextCommand{\t}{PU}[1]{#1\83\141}% U+0361
+% U+20DD COMBINING ENCLOSING CIRCLE
+\DeclareTextCommand{\textcircled}{PU}[1]{#1\9040\335}% U+20DD
+% \end{macrocode}
+%
+% Double accents.
+% \begin{macrocode}
+\DeclareTextCommand{\textacutemacron}{PU}[1]{#1\83\001\83\004}% U+0301 U+0304
+\DeclareTextCommand{\textgravemacron}{PU}[1]{#1\83\000\83\004}% U+0300 U+0304
+% \end{macrocode}
+%
+% \cs{@empty} is an artefact of the NFSS2 machinery, it
+% gets inserted for empty arguments and spaces.
+% \begin{macrocode}
+\DeclareTextCompositeCommand{\`}{PU}{\@empty}{\textasciigrave}%
+\DeclareTextCompositeCommand{\'}{PU}{\@empty}{\textacute}%
+\DeclareTextCompositeCommand{\^}{PU}{\@empty}{\textasciicircum}%
+\DeclareTextCompositeCommand{\~}{PU}{\@empty}{\texttilde}%
+\DeclareTextCompositeCommand{\"}{PU}{\@empty}{\textasciidieresis}%
+\DeclareTextCompositeCommand{\r}{PU}{\@empty}{\textring}%
+\DeclareTextCompositeCommand{\v}{PU}{\@empty}{\textasciicaron}%
+\DeclareTextCompositeCommand{\.}{PU}{\@empty}{\textdotaccent}%
+\DeclareTextCompositeCommand{\c}{PU}{\@empty}{\textcedilla}%
+\DeclareTextCompositeCommand{\u}{PU}{\@empty}{\textasciibreve}%
+\DeclareTextCompositeCommand{\G}{PU}{\@empty}{\textdoublegrave}%
+\DeclareTextCompositeCommand{\=}{PU}{\@empty}{\textasciimacron}%
+\DeclareTextCompositeCommand{\H}{PU}{\@empty}{\texthungarumlaut}%
+\DeclareTextCompositeCommand{\k}{PU}{\@empty}{\textogonek}%
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{\@empty}{{ \83\021}}% U+0311
+\DeclareTextCompositeCommand{\textsubumlaut}{PU}{\@empty}{{ \83\044}}% U+0324
+\DeclareTextCompositeCommand{\textsubring}{PU}{\@empty}{\textringlow}%
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{\@empty}{\textcircumlow}%
+\DeclareTextCompositeCommand{\textsubbreve}{PU}{\@empty}{{ \83\056}}% U+032E
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{\@empty}{\texttildelow}%
+\DeclareTextCompositeCommand{\b}{PU}{\@empty}{\textmacronbelow}%
+\DeclareTextCompositeCommand{\d}{PU}{\@empty}{\textdotbelow}%
+\DeclareTextCompositeCommand{\t}{PU}{\@empty}{\texttie}%
+\DeclareTextCompositeCommand{\newtie}{PU}{\@empty}{\textnewtie}%
+\DeclareTextCompositeCommand{\textcircled}{PU}{\@empty}{\textbigcircle}%
+\DeclareTextCompositeCommand{\textacutemacron}{PU}{\@empty}{{ \83\001\83\004}}% U+0301 U+0304
+\DeclareTextCompositeCommand{\textgravemacron}{PU}{\@empty}{{ \83\000\83\004}}% U+0300 U+0304
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareTextCompositeCommand{\`}{PU}{\ }{\textasciigrave}%
+\DeclareTextCompositeCommand{\'}{PU}{\ }{\textacute}%
+\DeclareTextCompositeCommand{\^}{PU}{\ }{\textasciicircum}%
+\DeclareTextCompositeCommand{\~}{PU}{\ }{\texttilde}%
+\DeclareTextCompositeCommand{\"}{PU}{\ }{\textasciidieresis}%
+\DeclareTextCompositeCommand{\r}{PU}{\ }{\textring}%
+\DeclareTextCompositeCommand{\v}{PU}{\ }{\textasciicaron}%
+\DeclareTextCompositeCommand{\.}{PU}{\ }{\textdotaccent}%
+\DeclareTextCompositeCommand{\c}{PU}{\ }{\textcedilla}%
+\DeclareTextCompositeCommand{\u}{PU}{\ }{\textasciibreve}%
+\DeclareTextCompositeCommand{\G}{PU}{\ }{\textdoublegrave}%
+\DeclareTextCompositeCommand{\=}{PU}{\ }{\textasciimacron}%
+\DeclareTextCompositeCommand{\H}{PU}{\ }{\texthungarumlaut}%
+\DeclareTextCompositeCommand{\k}{PU}{\ }{\textogonek}%
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{\ }{{ \83\021}}% U+0311
+\DeclareTextCompositeCommand{\textsubumlaut}{PU}{\ }{{ \83\044}}% U+0324
+\DeclareTextCompositeCommand{\textsubring}{PU}{\ }{\textringlow}%
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{\ }{\textcircumlow}%
+\DeclareTextCompositeCommand{\textsubbreve}{PU}{\ }{{ \83\056}}% U+032E
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{\ }{\texttildelow}%
+\DeclareTextCompositeCommand{\b}{PU}{\ }{\textmacronbelow}%
+\DeclareTextCompositeCommand{\d}{PU}{\ }{\textdotbelow}%
+\DeclareTextCompositeCommand{\t}{PU}{\ }{\texttie}%
+\DeclareTextCompositeCommand{\newtie}{PU}{\ }{\textnewtie}%
+\DeclareTextCompositeCommand{\textcircled}{PU}{\ }{\textbigcircle}%
+\DeclareTextCompositeCommand{\textacutemacron}{PU}{\ }{{ \83\001\83\004}}% U+0301 U+0304
+\DeclareTextCompositeCommand{\textgravemacron}{PU}{\ }{{ \83\000\83\004}}% U+0300 U+0304
+% \end{macrocode}
+% Accents for capitals (see encoding TS1)
+% \begin{macrocode}
+\DeclareTextCommand{\capitalcedilla}{PU}[1]{\c{#1}}%
+\DeclareTextCommand{\capitalogonek}{PU}[1]{\k{#1}}%
+\DeclareTextCommand{\capitalgrave}{PU}[1]{\`{#1}}%
+\DeclareTextCommand{\capitalacute}{PU}[1]{\'{#1}}%
+\DeclareTextCommand{\capitalcircumflex}{PU}[1]{\^{#1}}%
+\DeclareTextCommand{\capitaltilde}{PU}[1]{\~{#1}}%
+\DeclareTextCommand{\capitaldieresis}{PU}[1]{\"{#1}}%
+\DeclareTextCommand{\capitalhungarumlaut}{PU}[1]{\H{#1}}%
+\DeclareTextCommand{\capitalring}{PU}[1]{\r{#1}}%
+\DeclareTextCommand{\capitalcaron}{PU}[1]{\v{#1}}%
+\DeclareTextCommand{\capitalbreve}{PU}[1]{\u{#1}}%
+\DeclareTextCommand{\capitalmacron}{PU}[1]{\={#1}}%
+\DeclareTextCommand{\capitaldotaccent}{PU}[1]{\.{#1}}%
+\DeclareTextCommand{\capitaltie}{PU}[1]{\t{#1}}%
+\DeclareTextCommand{\capitalnewtie}{PU}[1]{\newtie{#1}}%
+% \end{macrocode}
+%
+% \subsubsection{Basic Latin: U+0000 to U+007F}
+%
+% Special white space escape characters.
+% \begin{macrocode}
+% U+0009 (CHARACTER TABULATION)
+\DeclareTextCommand{\textHT}{PU}{\80\011}% U+0009
+% U+000A (LINE FEED)
+\DeclareTextCommand{\textLF}{PU}{\80\012}% U+000A
+% U+000D (CARRIAGE RETURN)
+\DeclareTextCommand{\textCR}{PU}{\80\015}% U+000D
+% \end{macrocode}
+% |\80\040|: U+0020 SPACE; space, spacehackarabic\\
+% |\80\041|: U+0021 EXCLAMATION MARK; exclam
+% \begin{macrocode}
+% U+0022 QUOTATION MARK; quotedbl
+\DeclareTextCommand{\textquotedbl}{PU}{"}% \80\042 U+0022
+% U+0023 NUMBER SIGN; numbersign
+\DeclareTextCommand{\textnumbersign}{PU}{\80\043}% U+0023
+% U+0024 DOLLAR SIGN; dollar
+\DeclareTextCommand{\textdollar}{PU}{\80\044}% U+0024
+%* \textdollar -> \mathdollar
+%* \textdollar -> \EyesDollar (marvosym)
+% U+0025 PERCENT SIGN; percent
+\DeclareTextCommand{\textpercent}{PU}{\80\045}% U+0025
+% U+0026 AMPERSAND; ampersand
+\DeclareTextCommand{\textampersand}{PU}{\80\046}% U+0026
+%* \textampersand -> \binampersand (stmaryrd)
+%* \textampersand -> \with (cmll)
+% U+0027 APOSTROPHE; quotesingle
+\DeclareTextCommand{\textquotesingle}{PU}{\80\047}% U+0027
+% U+0028 LEFT PARENTHESIS; parenleft
+\DeclareTextCommand{\textparenleft}{PU}{\80\050}% U+0028
+% U+0029 RIGHT PARENTHESIS; parenright
+\DeclareTextCommand{\textparenright}{PU}{\80\051}% U+0029
+% U+002A ASTERISK; asterisk; (?)
+\DeclareTextCommand{\textasteriskcentered}{PU}{\80\052}% U+002A
+% U+002B PLUS SIGN; plus; \MVPlus (marvosym)
+\DeclareTextCommand{\textMVPlus}{PU}{\80\053}%* U+002B
+% U+002C COMMA; comma; \MVComma (marvosym)
+\DeclareTextCommand{\textMVComma}{PU}{\80\054}%* U+002C
+% U+002D HYPHEN-MINUS; hyphen; \MVMinus (marvosym)
+\DeclareTextCommand{\textMVMinus}{PU}{\80\055}%* U+002D
+% U+002E FULL STOP; period; \MVPeriod (marvosym)
+\DeclareTextCommand{\textMVPeriod}{PU}{\80\056}%* U+002E
+% U+002F SOLIDUS; slash; \MVDivision (marvosym)
+\DeclareTextCommand{\textMVDivision}{PU}{\80\057}%* U+002F
+% U+0030 DIGIT ZERO; zero; \MVZero (marvosym)
+\DeclareTextCommand{\textMVZero}{PU}{\80\060}%* U+0030
+% U+0031 DIGIT ONE; one; \MVOne (marvosym)
+\DeclareTextCommand{\textMVOne}{PU}{\80\061}%* U+0031
+% U+0032 DIGIT TWO; two; \MVTwo (marvosym)
+\DeclareTextCommand{\textMVTwo}{PU}{\80\062}%* U+0032
+% U+0033 DIGIT THREE; three; \MVThree (marvosym)
+\DeclareTextCommand{\textMVThree}{PU}{\80\063}%* U+0033
+% U+0034 DIGIT FOUR; four; \MVFour (marvosym)
+\DeclareTextCommand{\textMVFour}{PU}{\80\064}%* U+0034
+% U+0035 DIGIT FIVE; five; \MVFive (marvosym)
+\DeclareTextCommand{\textMVFive}{PU}{\80\065}%* U+0035
+% U+0036 DIGIT SIX; six; \MVSix (marvosym)
+\DeclareTextCommand{\textMVSix}{PU}{\80\066}%* U+0036
+% U+0037 DIGIT SEVEM; seven; \MVSeven (marvosym)
+\DeclareTextCommand{\textMVSeven}{PU}{\80\067}%* U+0037
+% U+0038 DIGIT EIGHT; eight; \MVEight (marvosym)
+\DeclareTextCommand{\textMVEight}{PU}{\80\070}%* U+0038
+% U+0039 DIGIT NINE; nine; \MVNine (marvosym)
+\DeclareTextCommand{\textMVNine}{PU}{\80\071}%* U+0039
+% \end{macrocode}
+% |\80\072|: U+003A COLON; colon\\
+% |\80\073|: U+003B SEMICOLON; semicolon
+% \begin{macrocode}
+% U+003C LESS-THAN SIGN; less
+\DeclareTextCommand{\textless}{PU}{<}% \80\074 U+003C
+% \end{macrocode}
+% |\80\075|: U+003D EQUALS SIGN; equal
+% \begin{macrocode}
+% U+003E GREATER-THAN SIGN; greater
+\DeclareTextCommand{\textgreater}{PU}{>}% \80\076 U+003E
+% \end{macrocode}
+% |\80\077|: U+003F QUESTION MARK; question
+% \begin{macrocode}
+% U+0040 COMMERCIAL AT; at; \MVAt (marvosym)
+\DeclareTextCommand{\textMVAt}{PU}{\80\100}%* U+0040
+% \end{macrocode}
+% |\80\101|: U+0041 LATIN CAPITAL LETTER A; A\\
+% \dots\\
+% |\80\132|: U+005A LATIN CAPITAL LETTER Z; Z\\
+% |\80\133|: U+005B LEFT SQUARE BRACKET; bracketleft
+% \begin{macrocode}
+% U+005C REVERSE SOLIDUS; backslash
+\DeclareTextCommand{\textbackslash}{PU}{\80\134}% U+005C
+% \end{macrocode}
+% |\80\135|: U+005D RIGHT SQUARE BRACKET; bracketright
+% \begin{macrocode}
+% U+005E CIRCUMFLEX ACCENT; asciicircum
+\DeclareTextCommand{\textasciicircum}{PU}{\80\136}% U+005E
+% U+005F LOW LINE; underscore
+\DeclareTextCommand{\textunderscore}{PU}{\80\137}% U+005F
+%* \textunderscore -> \mathunderscore (LaTeX)
+% U+0060 GRAVE ACCENT; grave
+\DeclareTextCommand{\textasciigrave}{PU}{\80\140}% U+0060
+% \end{macrocode}
+% |\80\141|: U+0061 LATIN SMALL LETTER A; a\\
+% \dots\\
+% |\80\150|: U+0068 LATIN SMALL LETTER H; h
+% \begin{macrocode}
+% U+0069 LATIN SMALL LETTER I; i
+\DeclareTextCompositeCommand{\.}{PU}{\i}{i}% \80\151 U+0069
+\DeclareTextCompositeCommand{\.}{PU}{i}{i}% \80\151 U+0069
+% \end{macrocode}
+% |\80\152|: U+006A LATIN SMALL LETTER J; j\\
+% \dots\\
+% |\80\172|: U+007A LATIN SMALL LETTER Z; z
+% \begin{macrocode}
+% U+007B LEFT CURLY BRACKET; braceleft
+\DeclareTextCommand{\textbraceleft}{PU}{\80\173}% U+007B
+% U+007C VERTICAL LINE; *bar, verticalbar
+\DeclareTextCommand{\textbar}{PU}{|}% \80\174 U+007C
+%* \textbar -> \textvertline (tipa)
+% U+007D RIGHT CURLY BRACKET; braceright
+\DeclareTextCommand{\textbraceright}{PU}{\80\175}% U+007D
+% U+007E TILDE; asciitilde
+\DeclareTextCommand{\textasciitilde}{PU}{\80\176}% U+007E
+% \end{macrocode}
+%
+% \subsubsection{Latin-1 Supplement: U+0080 to U+00FF}
+%
+% |\80\240|: U+00A0 NO-BREAK SPACE; nbspace, nonbreakingspace
+% \begin{macrocode}
+% U+00A1 INVERTED EXCLAMATION MARK; exclamdown
+\DeclareTextCommand{\textexclamdown}{PU}{\80\241}% U+00A1
+% U+00A2 CENT SIGN; cent
+\DeclareTextCommand{\textcent}{PU}{\80\242}% U+00A2
+% U+00A3 POUND SIGN; sterling
+\DeclareTextCommand{\textsterling}{PU}{\80\243}% U+00A3
+%* \textsterling -> \mathsterling (LaTeX)
+%* \textsterling -> \pounds (LaTeX)
+% U+00A4 CURRENCY SIGN; currency
+\DeclareTextCommand{\textcurrency}{PU}{\80\244}% U+00A4
+% U+00A5 YEN SIGN; yen
+\DeclareTextCommand{\textyen}{PU}{\80\245}% U+00A5
+% U+00A6 BROKEN BAR; brokenbar
+\DeclareTextCommand{\textbrokenbar}{PU}{\80\246}% U+00A6
+%* \textbrokenbar -> \brokenvert (wasysym)
+% U+00A7 SECTION SIGN; section
+\DeclareTextCommand{\textsection}{PU}{\80\247}% U+00A7
+%* \textsection -> \mathsection (LaTeX)
+%* \textsection -> \S (LaTeX)
+% U+00A8 DIAERESIS; dieresis
+\DeclareTextCommand{\textasciidieresis}{PU}{\80\250}% U+00A8
+% U+00A9 COPYRIGHT SIGN; copyright
+\DeclareTextCommand{\textcopyright}{PU}{\80\251}%* U+00A9
+% U+00AA FEMININE ORDINAL INDICATOR; ordfeminine
+\DeclareTextCommand{\textordfeminine}{PU}{\80\252}% U+00AA
+% U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemotleft
+\DeclareTextCommand{\guillemotleft}{PU}{\80\253}% U+00AB
+% U+00AC NOT SIGN; logicalnot
+\DeclareTextCommand{\textlogicalnot}{PU}{\80\254}% U+00AC
+\DeclareTextCommand{\textlnot}{PU}{\80\254}% U+00AC
+% \end{macrocode}
+% |\80\255|: U+00AD SOFT HYPHEN; sfthyphen, softhyphen
+% \begin{macrocode}
+% U+00AE REGISTERED SIGN; registered
+\DeclareTextCommand{\textregistered}{PU}{\80\256}% U+00AE
+% U+00AF MACRON; *macron, overscore
+\DeclareTextCommand{\textasciimacron}{PU}{\80\257}% U+00AF
+% U+00B0 DEGREE SIGN; degree
+\DeclareTextCommand{\textdegree}{PU}{\80\260}% U+00B0
+% U+00B1 PLUS-MINUS SIGN; plusminus
+\DeclareTextCommand{\textplusminus}{PU}{\80\261}% U+00B1
+% U+00B2 SUPERSCRIPT TWO; twosuperior
+\DeclareTextCommand{\texttwosuperior}{PU}{\80\262}%* U+00B2
+% U+00B3 SUPERSCRIPT THREE; threesuperior
+\DeclareTextCommand{\textthreesuperior}{PU}{\80\263}%* U+00B3
+% U+00B4 ACUTE ACCENT; acute
+\DeclareTextCommand{\textacute}{PU}{\80\264}% U+00B4
+\DeclareTextCommand{\textasciiacute}{PU}{\80\264}% U+00B4
+% U+00B5 MICRO SIGN; mu, mu1
+\DeclareTextCommand{\textmu}{PU}{\80\265}% U+00B5
+% U+00B6 PILCROW SIGN; paragraph
+\DeclareTextCommand{\textparagraph}{PU}{\80\266}% U+00B6
+%* \textparagraph -> \mathparagraph (LaTeX)
+% U+00B7 MIDDLE DOT; middot, *periodcentered
+\DeclareTextCommand{\textperiodcentered}{PU}{\80\267}% U+00B7
+%* \textperiodcentered -> \MultiplicationDot (marvosym)
+%* \textperiodcentered -> \Squaredot (marvosym)
+% U+00B8 CEDILLA; cedilla
+\DeclareTextCommand{\textcedilla}{PU}{\80\270}% U+00B8
+% U+00B9 SUPERSCRIPT ONE; onesuperior
+\DeclareTextCommand{\textonesuperior}{PU}{\80\271}%* U+00B9
+% U+00BA MASCULINE ORDINAL INDICATOR; ordmasculine
+\DeclareTextCommand{\textordmasculine}{PU}{\80\272}% U+00BA
+% U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemotright
+\DeclareTextCommand{\guillemotright}{PU}{\80\273}% U+00BB
+% U+00BC VULGAR FRACTION ONE QUARTER; onequarter
+\DeclareTextCommand{\textonequarter}{PU}{\80\274}% U+00BC
+% U+00BD VULGAR FRACTION ONE HALF; onehalf
+\DeclareTextCommand{\textonehalf}{PU}{\80\275}% U+00BD
+% U+00BE VULGAR FRACTION THREE QUARTERS; threequarters
+\DeclareTextCommand{\textthreequarters}{PU}{\80\276}% U+00BE
+% U+00BF INVERTED QUESTION MARK; questiondown
+\DeclareTextCommand{\textquestiondown}{PU}{\80\277}% U+00BF
+% U+00C0 LATIN CAPITAL LETTER A WITH GRAVE; Agrave
+\DeclareTextCompositeCommand{\`}{PU}{A}{\80\300}% U+00C0
+% U+00C1 LATIN CAPITAL LETTER A WITH ACUTE; Aacute
+\DeclareTextCompositeCommand{\'}{PU}{A}{\80\301}% U+00C1
+% U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX; Acircumflex
+\DeclareTextCompositeCommand{\^}{PU}{A}{\80\302}% U+00C2
+% U+00C3 LATIN CAPITAL LETTER A WITH TILDE; Atilde
+\DeclareTextCompositeCommand{\~}{PU}{A}{\80\303}% U+00C3
+% U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS; Adieresis
+\DeclareTextCompositeCommand{\"}{PU}{A}{\80\304}% U+00C4
+% U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE; Aring
+\DeclareTextCompositeCommand{\r}{PU}{A}{\80\305}% U+00C5
+% U+00C6 LATIN CAPITAL LETTER AE; AE
+\DeclareTextCommand{\AE}{PU}{\80\306}% U+00C6
+% U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA; Ccedilla
+\DeclareTextCompositeCommand{\c}{PU}{C}{\80\307}% U+00C7
+% U+00C8 LATIN CAPITAL LETTER E WITH GRAVE; Egrave
+\DeclareTextCompositeCommand{\`}{PU}{E}{\80\310}% U+00C8
+% U+00C9 LATIN CAPITAL LETTER E WITH ACUTE; Eacute
+\DeclareTextCompositeCommand{\'}{PU}{E}{\80\311}% U+00C9
+% U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX; Ecircumflex
+\DeclareTextCompositeCommand{\^}{PU}{E}{\80\312}% U+00CA
+% U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS; Edieresis
+\DeclareTextCompositeCommand{\"}{PU}{E}{\80\313}% U+00CB
+% U+00CC LATIN CAPITAL LETTER I WITH GRAVE; Igrave
+\DeclareTextCompositeCommand{\`}{PU}{I}{\80\314}% U+00CC
+% U+00CD LATIN CAPITAL LETTER I WITH ACUTE; Iacute
+\DeclareTextCompositeCommand{\'}{PU}{I}{\80\315}% U+00CD
+% U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX; Icircumflex
+\DeclareTextCompositeCommand{\^}{PU}{I}{\80\316}% U+00CE
+% U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS; Idieresis
+\DeclareTextCompositeCommand{\"}{PU}{I}{\80\317}% U+00CF
+% U+00D0 LATIN CAPITAL LETTER ETH; Eth
+\DeclareTextCommand{\DH}{PU}{\80\320}% U+00D0
+% U+00D1 LATIN CAPITAL LETTER N WITH TILDE; Ntilde
+\DeclareTextCompositeCommand{\~}{PU}{N}{\80\321}% U+00D1
+% U+00D2 LATIN CAPITAL LETTER O WITH GRAVE; Ograve
+\DeclareTextCompositeCommand{\`}{PU}{O}{\80\322}% U+00D2
+% U+00D3 LATIN CAPITAL LETTER O WITH ACUTE; Oacute
+\DeclareTextCompositeCommand{\'}{PU}{O}{\80\323}% U+00D3
+% U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX; Ocircumflex
+\DeclareTextCompositeCommand{\^}{PU}{O}{\80\324}% U+00D4
+% U+00D5 LATIN CAPITAL LETTER O WITH TILDE; Otilde
+\DeclareTextCompositeCommand{\~}{PU}{O}{\80\325}% U+00D5
+% U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS; Odieresis
+\DeclareTextCompositeCommand{\"}{PU}{O}{\80\326}% U+00D6
+% U+00D7 MULTIPLICATION SIGN; multiply
+\DeclareTextCommand{\textmultiply}{PU}{\80\327}% U+00D7
+%* \textmultiply -> \vartimes (stmaryrd)
+%* \textmultiply -> \MVMultiplication (marvosym)
+% U+00D8 LATIN CAPITAL LETTER O WITH STROKE; Oslash
+\DeclareTextCommand{\O}{PU}{\80\330}% U+00D8
+% U+00D9 LATIN CAPITAL LETTER U WITH GRAVE; Ugrave
+\DeclareTextCompositeCommand{\`}{PU}{U}{\80\331}% U+00D9
+% U+00DA LATIN CAPITAL LETTER U WITH ACUTE; Uacute
+\DeclareTextCompositeCommand{\'}{PU}{U}{\80\332}% U+00DA
+% U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX; Ucircumflex
+\DeclareTextCompositeCommand{\^}{PU}{U}{\80\333}% U+00DB
+% U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS; Udieresis
+\DeclareTextCompositeCommand{\"}{PU}{U}{\80\334}% U+00DC
+% U+00DD LATIN CAPITAL LETTER Y WITH ACUTE; Yacute
+\DeclareTextCompositeCommand{\'}{PU}{Y}{\80\335}% U+00DD
+% U+00DE LATIN CAPITAL LETTER THORN; Thorn; \TH, \Thorn (wasysym)
+\DeclareTextCommand{\TH}{PU}{\80\336}% U+00DE
+\DeclareTextCommand{\textThorn}{PU}{\80\336}%* U+00DE
+% U+00DF LATIN SMALL LETTER SHARP S; germandbls
+\DeclareTextCommand{\ss}{PU}{\80\337}% U+00DF
+% U+00E0 LATIN SMALL LETTER A WITH GRAVE; agrave
+\DeclareTextCompositeCommand{\`}{PU}{a}{\80\340}% U+00E0
+% U+00E1 LATIN SMALL LETTER A WITH ACUTE; aacute
+\DeclareTextCompositeCommand{\'}{PU}{a}{\80\341}% U+00E1
+% U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX; acircumflex
+\DeclareTextCompositeCommand{\^}{PU}{a}{\80\342}% U+00E2
+% U+00E3 LATIN SMALL LETTER A WITH TILDE; atilde
+\DeclareTextCompositeCommand{\~}{PU}{a}{\80\343}% U+00E3
+% U+00E4 LATIN SMALL LETTER A WITH DIAERESIS; adieresis
+\DeclareTextCompositeCommand{\"}{PU}{a}{\80\344}% U+00E4
+% U+00E5 LATIN SMALL LETTER A WITH RING ABOVE; aring
+\DeclareTextCompositeCommand{\r}{PU}{a}{\80\345}% U+00E5
+% U+00E6 LATIN SMALL LETTER AE; ae
+\DeclareTextCommand{\ae}{PU}{\80\346}% U+00E6
+% U+00E7 LATIN SMALL LETTER C WITH CEDILLA; ccedilla
+\DeclareTextCompositeCommand{\c}{PU}{c}{\80\347}% U+00E7
+% U+00E8 LATIN SMALL LETTER E WITH GRAVE; egrave
+\DeclareTextCompositeCommand{\`}{PU}{e}{\80\350}% U+00E8
+% U+00E9 LATIN SMALL LETTER E WITH ACUTE; eacute
+\DeclareTextCompositeCommand{\'}{PU}{e}{\80\351}% U+00E9
+% U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX; ecircumflex
+\DeclareTextCompositeCommand{\^}{PU}{e}{\80\352}% U+00EA
+% U+00EB LATIN SMALL LETTER E WITH DIAERESIS; edieresis
+\DeclareTextCompositeCommand{\"}{PU}{e}{\80\353}% U+00EB
+% U+00EC LATIN SMALL LETTER I WITH GRAVE; igrave
+\DeclareTextCompositeCommand{\`}{PU}{i}{\80\354}% U+00EC
+\DeclareTextCompositeCommand{\`}{PU}{\i}{\80\354}% U+00EC
+% U+00ED LATIN SMALL LETTER I WITH ACUTE; iacute
+\DeclareTextCompositeCommand{\'}{PU}{i}{\80\355}% U+00ED
+\DeclareTextCompositeCommand{\'}{PU}{\i}{\80\355}% U+00ED
+% U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX; icircumflex
+\DeclareTextCompositeCommand{\^}{PU}{i}{\80\356}% U+00EE
+\DeclareTextCompositeCommand{\^}{PU}{\i}{\80\356}% U+00EE
+% U+00EF LATIN SMALL LETTER I WITH DIAERESIS; idieresis
+\DeclareTextCompositeCommand{\"}{PU}{i}{\80\357}% U+00EF
+\DeclareTextCompositeCommand{\"}{PU}{\i}{\80\357}% U+00EF
+% U+00F0 LATIN SMALL LETTER ETH; eth
+\DeclareTextCommand{\dh}{PU}{\80\360}% U+00F0
+%* \dh -> \eth (wsuipa, phonetic)
+% U+00F1 LATIN SMALL LETTER N WITH TILDE; ntilde
+\DeclareTextCompositeCommand{\~}{PU}{n}{\80\361}% U+00F1
+% U+00F2 LATIN SMALL LETTER O WITH GRAVE; ograve
+\DeclareTextCompositeCommand{\`}{PU}{o}{\80\362}% U+00F2
+% U+00F3 LATIN SMALL LETTER O WITH ACUTE; oacute
+\DeclareTextCompositeCommand{\'}{PU}{o}{\80\363}% U+00F3
+% U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX; ocircumflex
+\DeclareTextCompositeCommand{\^}{PU}{o}{\80\364}% U+00F4
+% U+00F5 LATIN SMALL LETTER O WITH TILDE; otilde
+\DeclareTextCompositeCommand{\~}{PU}{o}{\80\365}% U+00F5
+% U+00F6 LATIN SMALL LETTER O WITH DIAERESIS; odieresis
+\DeclareTextCompositeCommand{\"}{PU}{o}{\80\366}% U+00F6
+% U+00F7 DIVISION SIGN; divide
+\DeclareTextCommand{\textdivide}{PU}{\80\367}% U+00F7
+% U+00F8 LATIN SMALL LETTER O WITH STROKE; oslash
+\DeclareTextCommand{\o}{PU}{\80\370}% U+00F8
+% U+00F9 LATIN SMALL LETTER U WITH GRAVE; ugrave
+\DeclareTextCompositeCommand{\`}{PU}{u}{\80\371}% U+00F9
+% U+00FA LATIN SMALL LETTER U WITH ACUTE; uacute
+\DeclareTextCompositeCommand{\'}{PU}{u}{\80\372}% U+00FA
+% U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX; ucircumflex
+\DeclareTextCompositeCommand{\^}{PU}{u}{\80\373}% U+00FB
+% U+00FC LATIN SMALL LETTER U WITH DIAERESIS; udieresis
+\DeclareTextCompositeCommand{\"}{PU}{u}{\80\374}% U+00FC
+% U+00FD LATIN SMALL LETTER Y WITH ACUTE; yacute
+\DeclareTextCompositeCommand{\'}{PU}{y}{\80\375}% U+00FD
+% U+00FE LATIN SMALL LETTER THORN; thorn;
+% \th, \thorn (wasysym), \textthorn (tipa)
+\DeclareTextCommand{\th}{PU}{\80\376}% U+00FE
+\DeclareTextCommand{\textthorn}{PU}{\80\376}%* U+00FE
+% U+00FF LATIN SMALL LETTER Y WITH DIAERESIS; ydieresis
+\DeclareTextCompositeCommand{\"}{PU}{y}{\80\377}% U+00FF
+% \end{macrocode}
+%
+% \subsubsection{Latin Extended-A: U+0080 to U+017F}
+%
+% \begin{macrocode}
+% U+0100 LATIN CAPITAL LETTER A WITH MACRON; Amacron
+\DeclareTextCompositeCommand{\=}{PU}{A}{\81\000}% U+0100
+% U+0101 LATIN SMALL LETTER A WITH MACRON; amacron
+\DeclareTextCompositeCommand{\=}{PU}{a}{\81\001}% U+0101
+% U+0102 LATIN CAPITAL LETTER A WITH BREVE; Abreve
+\DeclareTextCompositeCommand{\u}{PU}{A}{\81\002}% U+0102
+% U+0103 LATIN SMALL LETTER A WITH BREVE; abreve
+\DeclareTextCompositeCommand{\u}{PU}{a}{\81\003}% U+0103
+% U+0104 LATIN CAPITAL LETTER A WITH OGONEK; Aogonek
+\DeclareTextCompositeCommand{\k}{PU}{A}{\81\004}% U+0104
+% U+0105 LATIN SMALL LETTER A WITH OGONEK; aogonek
+\DeclareTextCompositeCommand{\k}{PU}{a}{\81\005}% U+0105
+% U+0106 LATIN CAPITAL LETTER C WITH ACUTE; Cacute
+\DeclareTextCompositeCommand{\'}{PU}{C}{\81\006}% U+0106
+% U+0107 LATIN SMALL LETTER C WITH ACUTE; cacute
+\DeclareTextCompositeCommand{\'}{PU}{c}{\81\007}% U+0107
+% U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX; Ccircumflex
+\DeclareTextCompositeCommand{\^}{PU}{C}{\81\010}% U+0108
+% U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX; ccircumflex
+\DeclareTextCompositeCommand{\^}{PU}{c}{\81\011}% U+0109
+% U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE; Cdot, Cdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{C}{\81\012}% U+010A
+% U+010B LATIN SMALL LETTER C WITH DOT ABOVE; cdot, cdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{c}{\81\013}% U+010B
+% U+010C LATIN CAPITAL LETTER C WITH CARON; Ccaron
+\DeclareTextCompositeCommand{\v}{PU}{C}{\81\014}% U+010C
+% U+010D LATIN SMALL LETTER C WITH CARON; ccaron
+\DeclareTextCompositeCommand{\v}{PU}{c}{\81\015}% U+010D
+% U+010E LATIN CAPITAL LETTER D WITH CARON; Dcaron
+\DeclareTextCompositeCommand{\v}{PU}{D}{\81\016}% U+010E
+% U+010F LATIN SMALL LETTER D WITH CARON; dcaron
+\DeclareTextCompositeCommand{\v}{PU}{d}{\81\017}% U+010F
+% U+0110 LATIN CAPITAL LETTER D WITH STROKE; Dcroat, Dslash
+\DeclareTextCommand{\DJ}{PU}{\81\020}% U+0110
+% U+0111 LATIN SMALL LETTER D WITH STROKE; dcroat, dmacron;
+% \textcrd (tipa)
+\DeclareTextCommand{\dj}{PU}{\81\021}% U+0111
+\DeclareTextCommand{\textcrd}{PU}{\81\021}% U+0111
+%* \textcrd -> \crossd (wsuipa)
+% An alternate glyph with the stroke through the bowl:
+%* \textcrd -> \textbard (tipa)
+%* \textcrd -> \bard (wsuipa)
+% U+0112 LATIN CAPITAL LETTER E WITH MACRON; Emacron
+\DeclareTextCompositeCommand{\=}{PU}{E}{\81\022}% U+0112
+% U+0113 LATIN SMALL LETTER E WITH MACRON; emacron
+\DeclareTextCompositeCommand{\=}{PU}{e}{\81\023}% U+0113
+% U+0114 LATIN CAPITAL LETTER E WITH BREVE; Ebreve
+\DeclareTextCompositeCommand{\u}{PU}{E}{\81\024}% U+0114
+% U+0115 LATIN SMALL LETTER E WITH BREVE; ebreve
+\DeclareTextCompositeCommand{\u}{PU}{e}{\81\025}% U+0115
+% U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE; Edot, Edotaccent
+\DeclareTextCompositeCommand{\.}{PU}{E}{\81\026}% U+0116
+% U+0117 LATIN SMALL LETTER E WITH DOT ABOVE; edot, edotaccent
+\DeclareTextCompositeCommand{\.}{PU}{e}{\81\027}% U+0117
+% U+0118 LATIN CAPITAL LETTER E WITH OGONEK; Eogonek
+\DeclareTextCompositeCommand{\k}{PU}{E}{\81\030}% U+0118
+% U+0119 LATIN SMALL LETTER E WITH OGONEK; eogonek
+\DeclareTextCompositeCommand{\k}{PU}{e}{\81\031}% U+0119
+% U+011A LATIN CAPITAL LETTER E WITH CARON; Ecaron
+\DeclareTextCompositeCommand{\v}{PU}{E}{\81\032}% U+011A
+% U+011B LATIN SMALL LETTER E WITH CARON; ecaron
+\DeclareTextCompositeCommand{\v}{PU}{e}{\81\033}% U+011B
+% U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX; Gcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{G}{\81\034}% U+011C
+% U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX; gcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{g}{\81\035}% U+011D
+% U+011E LATIN CAPITAL LETTER G WITH BREVE; Gbreve
+\DeclareTextCompositeCommand{\u}{PU}{G}{\81\036}% U+011E
+% U+011F LATIN SMALL LETTER G WITH BREVE; gbreve
+\DeclareTextCompositeCommand{\u}{PU}{g}{\81\037}% U+011F
+% U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE; Gdot, Gdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{G}{\81\040}% U+0120
+% U+0121 LATIN SMALL LETTER G WITH DOT ABOVE; gdot, gdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{g}{\81\041}% U+0121
+% U+0122 LATIN CAPITAL LETTER G WITH CEDILLA; Gcedilla, Gcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{G}{\81\042}% U+0122
+% U+0123 LATIN SMALL LETTER G WITH CEDILLA; gcedilla, gcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{g}{\81\043}% U+0123
+% U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX; Hcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{H}{\81\044}% U+0124
+% U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX; hcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{h}{\81\045}% U+0125
+% U+0126 LATIN CAPITAL LETTER H WITH STROKE; Hbar
+\DeclareTextCommand{\textHslash}{PU}{\81\046}% U+0126
+% U+0127 LATIN SMALL LETTER H WITH STROKE; hbar; \hbar (AmS)
+\DeclareTextCommand{\texthbar}{PU}{\81\047}%* U+0127
+%* \texthbar -> \textcrh (tipa)
+%* \texthbar -> \crossh (wsuipa)
+%* \texthbar -> \planck (phonetic)
+% U+0128 LATIN CAPITAL LETTER I WITH TILDE; Itilde
+\DeclareTextCompositeCommand{\~}{PU}{I}{\81\050}% U+0128
+% U+0129 LATIN SMALL LETTER I WITH TILDE; itilde
+\DeclareTextCompositeCommand{\~}{PU}{i}{\81\051}% U+0129
+\DeclareTextCompositeCommand{\~}{PU}{\i}{\81\051}% U+0129
+% U+012A LATIN CAPITAL LETTER I WITH MACRON; Imacron
+\DeclareTextCompositeCommand{\=}{PU}{I}{\81\052}% U+012A
+% U+012B LATIN SMALL LETTER I WITH MACRON; imacron
+\DeclareTextCompositeCommand{\=}{PU}{i}{\81\053}% U+012B
+\DeclareTextCompositeCommand{\=}{PU}{\i}{\81\053}% U+012B
+% U+012C LATIN CAPITAL LETTER I WITH BREVE; Ibreve
+\DeclareTextCompositeCommand{\u}{PU}{I}{\81\054}% U+012C
+% U+012D LATIN SMALL LETTER I WITH BREVE; ibreve
+\DeclareTextCompositeCommand{\u}{PU}{i}{\81\055}% U+012D
+\DeclareTextCompositeCommand{\u}{PU}{\i}{\81\055}% U+012D
+% U+012E LATIN CAPITAL LETTER I WITH OGONEK; Iogonek
+\DeclareTextCompositeCommand{\k}{PU}{I}{\81\056}% U+012E
+% U+012F LATIN SMALL LETTER I WITH OGONEK; iogonek
+\DeclareTextCompositeCommand{\k}{PU}{i}{\81\057}% U+012F
+\DeclareTextCompositeCommand{\k}{PU}{\i}{\81\057}% U+012F
+% U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE; Idot, Idotaccent
+\DeclareTextCompositeCommand{\.}{PU}{I}{\81\060}% U+0130
+% U+0131 LATIN SMALL LETTER DOTLESS I; dotlessi
+\DeclareTextCommand{\i}{PU}{\81\061}% U+0131
+% U+0132 LATIN CAPITAL LIGATURE IJ; IJ
+\DeclareTextCommand{\IJ}{PU}{\81\062}% U+0132
+% U+0133 LATIN SMALL LIGATURE IJ; ij
+\DeclareTextCommand{\ij}{PU}{\81\063}% U+0133
+% U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX; Jcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{J}{\81\064}% U+0134
+% U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX; jcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{j}{\81\065}% U+0135
+\DeclareTextCompositeCommand{\^}{PU}{\j}{\81\065}% U+0135
+% U+0136 LATIN CAPITAL LETTER K WITH CEDILLA; Kcedilla, Kcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{K}{\81\066}% U+0136
+% U+0137 LATIN SMALL LETTER K WITH CEDILLA; kcedilla, kcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{k}{\81\067}% U+0137
+% \end{macrocode}
+% The canonical name of U+0138, small letter kra, would be
+% \cs{textkgreenlandic}, following the glyph naming convention.
+% However |latex/base/inputenc.dtx| has choosen \cs{textkra}.
+% \begin{macrocode}
+% U+0138 LATIN SMALL LETTER KRA; kgreenlandic
+\DeclareTextCommand{\textkra}{PU}{\81\070}% U+0138
+% U+0139 LATIN CAPITAL LETTER L WITH ACUTE; Lacute
+\DeclareTextCompositeCommand{\'}{PU}{L}{\81\071}% U+0139
+% U+013A LATIN SMALL LETTER L WITH ACUTE; lacute
+\DeclareTextCompositeCommand{\'}{PU}{l}{\81\072}% U+013A
+% U+013B LATIN CAPITAL LETTER L WITH CEDILLA; Lcedilla, Lcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{L}{\81\073}% U+013B
+% U+013C LATIN SMALL LETTER L WITH CEDILLA; lcedilla, lcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{l}{\81\074}% U+013C
+% U+013D LATIN CAPITAL LETTER L WITH CARON; Lcaron
+\DeclareTextCompositeCommand{\v}{PU}{L}{\81\075}% U+013D
+% U+013E LATIN SMALL LETTER L WITH CARON; lcaron
+\DeclareTextCompositeCommand{\v}{PU}{l}{\81\076}% U+013E
+% \end{macrocode}
+% There seems to be no variants of letters `L' and `l' with
+% a dot above (reasonable). Therefore the \cs{.} accent
+% is reused instead of making a separate accent macro
+% \cs{textmiddledot}.
+% \begin{macrocode}
+% U+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT; Ldot, Ldotaccent
+\DeclareTextCompositeCommand{\.}{PU}{L}{\81\077}% U+013F
+% U+0140 LATIN SMALL LETTER L WITH MIDDLE DOT; ldot, ldotaccent
+\DeclareTextCompositeCommand{\.}{PU}{l}{\81\100}% U+0140
+% U+0141 LATIN CAPITAL LETTER L WITH STROKE; Lslash
+\DeclareTextCommand{\L}{PU}{\81\101}% U+0141
+% U+0142 LATIN SMALL LETTER L WITH STROKE; lslash
+\DeclareTextCommand{\l}{PU}{\81\102}% U+0142
+% U+0143 LATIN CAPITAL LETTER N WITH ACUTE; Nacute
+\DeclareTextCompositeCommand{\'}{PU}{N}{\81\103}% U+0143
+% U+0144 LATIN SMALL LETTER N WITH ACUTE; nacute
+\DeclareTextCompositeCommand{\'}{PU}{n}{\81\104}% U+0144
+% U+0145 LATIN CAPITAL LETTER N WITH CEDILLA; Ncedilla, Ncommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{N}{\81\105}% U+0145
+% U+0146 LATIN SMALL LETTER N WITH CEDILLA; ncedilla, ncommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{n}{\81\106}% U+0146
+% U+0147 LATIN CAPITAL LETTER N WITH CARON; Ncaron
+\DeclareTextCompositeCommand{\v}{PU}{N}{\81\107}% U+0147
+% U+0148 LATIN SMALL LETTER N WITH CARON; ncaron
+\DeclareTextCompositeCommand{\v}{PU}{n}{\81\110}% U+0148
+% U+0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE; napostrophe, quoterightn
+\DeclareTextCommand{\textnapostrophe}{PU}{\81\111}% U+0149
+% U+014A LATIN CAPITAL LETTER ENG; Eng
+\DeclareTextCommand{\NG}{PU}{\81\112}% U+014A
+% U+014B LATIN SMALL LETTER ENG; eng
+\DeclareTextCommand{\ng}{PU}{\81\113}% U+014B
+%* \ng -> \eng (wsuipa)
+%* \ng -> \engma (phonetic)
+% U+014C LATIN CAPITAL LETTER O WITH MACRON; Omacron
+\DeclareTextCompositeCommand{\=}{PU}{O}{\81\114}% U+014C
+% U+014D LATIN SMALL LETTER O WITH MACRON; omacron
+\DeclareTextCompositeCommand{\=}{PU}{o}{\81\115}% U+014D
+% U+014E LATIN CAPITAL LETTER O WITH BREVE; Obreve
+\DeclareTextCompositeCommand{\u}{PU}{O}{\81\116}% U+014E
+% U+014F LATIN SMALL LETTER O WITH BREVE; obreve
+\DeclareTextCompositeCommand{\u}{PU}{o}{\81\117}% U+014F
+% U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE; Odblacute, Ohungarumlaut
+\DeclareTextCompositeCommand{\H}{PU}{O}{\81\120}% U+0150
+% U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE; odblacute, ohungarumlaut
+\DeclareTextCompositeCommand{\H}{PU}{o}{\81\121}% U+0151
+% U+0152 LATIN CAPITAL LIGATURE OE; OE
+\DeclareTextCommand{\OE}{PU}{\81\122}% U+0152
+% U+0153 LATIN SMALL LIGATURE OE; oe
+\DeclareTextCommand{\oe}{PU}{\81\123}% U+0153
+% U+0154 LATIN CAPITAL LETTER R WITH ACUTE; Racute
+\DeclareTextCompositeCommand{\'}{PU}{R}{\81\124}% U+0154
+% U+0155 LATIN SMALL LETTER R WITH ACUTE; racute
+\DeclareTextCompositeCommand{\'}{PU}{r}{\81\125}% U+0155
+% U+0156 LATIN CAPITAL LETTER R WITH CEDILLA; Rcedilla, Rcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{R}{\81\126}% U+0156
+% U+0157 LATIN SMALL LETTER R WITH CEDILLA; rcedilla, rcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{r}{\81\127}% U+0157
+% U+0158 LATIN CAPITAL LETTER R WITH CARON; Rcaron
+\DeclareTextCompositeCommand{\v}{PU}{R}{\81\130}% U+0158
+% U+0159 LATIN SMALL LETTER R WITH CARON; rcaron
+\DeclareTextCompositeCommand{\v}{PU}{r}{\81\131}% U+0159
+% U+015A LATIN CAPITAL LETTER S WITH ACUTE; Sacute
+\DeclareTextCompositeCommand{\'}{PU}{S}{\81\132}% U+015A
+% U+015B LATIN SMALL LETTER S WITH ACUTE; sacute
+\DeclareTextCompositeCommand{\'}{PU}{s}{\81\133}% U+015B
+% U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX; Scircumflex
+\DeclareTextCompositeCommand{\^}{PU}{S}{\81\134}% U+015C
+% U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX; scircumflex
+\DeclareTextCompositeCommand{\^}{PU}{s}{\81\135}% U+015D
+% U+015E LATIN CAPITAL LETTER S WITH CEDILLA; Scedilla
+\DeclareTextCompositeCommand{\c}{PU}{S}{\81\136}% U+015E
+% U+015F LATIN SMALL LETTER S WITH CEDILLA; scedilla
+\DeclareTextCompositeCommand{\c}{PU}{s}{\81\137}% U+015F
+% U+0160 LATIN CAPITAL LETTER S WITH CARON; Scaron
+\DeclareTextCompositeCommand{\v}{PU}{S}{\81\140}% U+0160
+% U+0161 LATIN SMALL LETTER S WITH CARON; scaron
+\DeclareTextCompositeCommand{\v}{PU}{s}{\81\141}% U+0161
+% U+0162 LATIN CAPITAL LETTER T WITH CEDILLA; Tcedilla, Tcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{T}{\81\142}% U+0162
+% U+0163 LATIN SMALL LETTER T WITH CEDILLA; tcedilla, tcommaaccent
+\DeclareTextCompositeCommand{\c}{PU}{t}{\81\143}% U+0163
+% U+0164 LATIN CAPITAL LETTER T WITH CARON; Tcaron
+\DeclareTextCompositeCommand{\v}{PU}{T}{\81\144}% U+0164
+% U+0165 LATIN SMALL LETTER T WITH CARON; tcaron
+\DeclareTextCompositeCommand{\v}{PU}{t}{\81\145}% U+0165
+% U+0166 LATIN CAPITAL LETTER T WITH STROKE; Tbar
+\DeclareTextCommand{\textTslash}{PU}{\81\146}% U+0166
+% U+0167 LATIN SMALL LETTER T WITH STROKE; tbar
+\DeclareTextCommand{\texttslash}{PU}{\81\147}% U+0167
+% U+0168 LATIN CAPITAL LETTER U WITH TILDE; Utilde
+\DeclareTextCompositeCommand{\~}{PU}{U}{\81\150}% U+0168
+% U+0169 LATIN SMALL LETTER U WITH TILDE; utilde
+\DeclareTextCompositeCommand{\~}{PU}{u}{\81\151}% U+0169
+% U+016A LATIN CAPITAL LETTER U WITH MACRON; Umacron
+\DeclareTextCompositeCommand{\=}{PU}{U}{\81\152}% U+016A
+% U+016B LATIN SMALL LETTER U WITH MACRON; umacron
+\DeclareTextCompositeCommand{\=}{PU}{u}{\81\153}% U+016B
+% U+016C LATIN CAPITAL LETTER U WITH BREVE; Ubreve
+\DeclareTextCompositeCommand{\u}{PU}{U}{\81\154}% U+016C
+% U+016D LATIN SMALL LETTER U WITH BREVE; ubreve
+\DeclareTextCompositeCommand{\u}{PU}{u}{\81\155}% U+016D
+% U+016E LATIN CAPITAL LETTER U WITH RING ABOVE; Uring
+\DeclareTextCompositeCommand{\r}{PU}{U}{\81\156}% U+016E
+% U+016F LATIN SMALL LETTER U WITH RING ABOVE; uring
+\DeclareTextCompositeCommand{\r}{PU}{u}{\81\157}% U+016F
+% U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE; Udblacute, Uhungarumlaut
+\DeclareTextCompositeCommand{\H}{PU}{U}{\81\160}% U+0170
+% U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE; udblacute, uhungarumlaut
+\DeclareTextCompositeCommand{\H}{PU}{u}{\81\161}% U+0171
+% U+0172 LATIN CAPITAL LETTER U WITH OGONEK; Uogonek
+\DeclareTextCompositeCommand{\k}{PU}{U}{\81\162}% U+0172
+% U+0173 LATIN SMALL LETTER U WITH OGONEK; uogonek
+\DeclareTextCompositeCommand{\k}{PU}{u}{\81\163}% U+0173
+% U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX; Wcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{W}{\81\164}% U+0174
+% U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX; wcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{w}{\81\165}% U+0175
+% U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX; Ycircumflex
+\DeclareTextCompositeCommand{\^}{PU}{Y}{\81\166}% U+0176
+% U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX; ycircumflex
+\DeclareTextCompositeCommand{\^}{PU}{y}{\81\167}% U+0177
+% U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS; Ydieresis
+\DeclareTextCompositeCommand{\"}{PU}{Y}{\81\170}% U+0178
+% U+0179 LATIN CAPITAL LETTER Z WITH ACUTE; Zacute
+\DeclareTextCompositeCommand{\'}{PU}{Z}{\81\171}% U+0179
+% U+017A LATIN SMALL LETTER Z WITH ACUTE; zacute
+\DeclareTextCompositeCommand{\'}{PU}{z}{\81\172}% U+017A
+% U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE; Zdot, Zdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{Z}{\81\173}% U+017B
+% U+017C LATIN SMALL LETTER Z WITH DOT ABOVE; zdot, zdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{z}{\81\174}% U+017C
+% U+017D LATIN CAPITAL LETTER Z WITH CARON; Zcaron
+\DeclareTextCompositeCommand{\v}{PU}{Z}{\81\175}% U+017D
+% U+017E LATIN SMALL LETTER Z WITH CARON; zcaron
+\DeclareTextCompositeCommand{\v}{PU}{z}{\81\176}% U+017E
+% U+017F LATIN SMALL LETTER LONG S; longs, slong
+\DeclareTextCommand{\textlongs}{PU}{\81\177}% U+017F
+% \end{macrocode}
+%
+% \subsubsection{Latin Extended-B: U+0180 to U+024F}
+%
+% \begin{macrocode}
+% U+0180 LATIN SMALL LETTER B WITH STROKE; bstroke; \textcrb (tipa)
+\DeclareTextCommand{\textcrb}{PU}{\81\200}% U+0180
+%* \textcrb -> \crossb (wsuipa)
+% An alternate glyph with the stroke through the bowl:
+%* \textcrb -> \textbarb (tipa)
+%* \textcrb -> \barb (wsuipa)
+% U+0181 LATIN CAPITAL LETTER B WITH HOOK; Bhook; \hausaB (phonetic)
+\DeclareTextCommand{\texthausaB}{PU}{\81\201}%* U+0181
+% U+0188 LATIN SMALL LETTER C WITH HOOK; chook; \texthtc (tipa)
+\DeclareTextCommand{\texthtc}{PU}{\81\210}% U+0188
+% U+018A LATIN CAPITAL LETTER D WITH HOOK; Dhook; \hausaD (phonetic)
+\DeclareTextCommand{\texthausaD}{PU}{\81\212}%* U+018A
+% U+018E LATIN CAPITAL LETTER REVERSED E; Ereversed
+\DeclareTextCommand{\textEreversed}{PU}{\81\216}% U+018E
+\DeclareTextCommand{\textrevE}{PU}{\81\216}% U+018E
+% U+0192 LATIN SMALL LETTER F WITH HOOK; florin
+\DeclareTextCommand{\textflorin}{PU}{\81\222}% U+0192
+%* \textflorin -> \Florin (marvosym)
+% U+0195 LATIN SMALL LETTER HV; hv; \texthvlig (tipa)
+\DeclareTextCommand{\texthvlig}{PU}{\81\225}% U+0195
+%* \texthvlig -> \hv (wsuipa)
+% U+0198 LATIN CAPITAL LETTER K WITH HOOK; Khook; \hausaK (phonetic)
+\DeclareTextCommand{\texthausaK}{PU}{\81\230}%* U+0198
+% U+0199 LATIN SMALL LETTER K WITH HOOK; khook; \texthtk (tipa)
+\DeclareTextCommand{\texthtk}{PU}{\81\231}% U+0199
+%* \texthtk -> \hausak (phonetic)
+% U+019A LATIN SMALL LETTER L WITH BAR; lbar;
+% \textbarl (tipa), \barl (wsuipa)
+\DeclareTextCommand{\textbarl}{PU}{\81\232}%* U+019A
+% U+019B LATIN SMALL LETTER LAMBDA WITH STROKE/
+% LATIN SMALL LETTER BARRED LAMBDA; lambdastroke;
+% \textcrlambda (tipa)
+\DeclareTextCommand{\textcrlambda}{PU}{\81\233}% U+019B
+%* \textcrlambda -> \crossnilambda (wsuipa)
+%* \textcrlambda -> \barlambda (phonetic)
+%* \textcrlambda -> \lambdabar (txfonts/pxfonts)
+%* \textcrlambda -> \lambdaslash (txfonts/pxfonts)
+% U+019E LATIN SMALL LETTER N WITH LONG RIGHT LEG; nlegrightlong;
+% \textnrleg (tipx)
+\DeclareTextCommand{\textPUnrleg}{PU}{\81\236}% U+019E
+%* \textPUnrleg -> \textnrleg (tipx)
+% U+01A5 LATIN SMALL LETTER P WITH HOOK; phook; \texthtp (tipa)
+\DeclareTextCommand{\texthtp}{PU}{\81\245}% U+01A5
+% U+01AB LATIN SMALL LETTER T WITH PALATAL HOOK; tpalatalhook;
+% \textlhookt (tipa)
+\DeclareTextCommand{\textlhookt}{PU}{\81\253}% U+01AB
+% U+01AD LATIN SMALL LETTER T WITH HOOK; thook; \texthtt (tipa)
+\DeclareTextCommand{\texthtt}{PU}{\81\255}% U+01AD
+% U+01B9 LATIN SMALL LETTER EZH REVERSED/
+% LATIN SMALL LETTER REVERSED YOGH; \textrevyogh (tipa)
+\DeclareTextCommand{\textrevyogh}{PU}{\81\271}% U+01B9
+% U+01BB LATIN LETTER TWO WITH STROKE; twostroke; \textcrtwo (tipa)
+\DeclareTextCommand{\textcrtwo}{PU}{\81\273}% U+01BB
+% U+01BE LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;
+% glottalinvertedstroke; \textcrinvglotstop (tipa)
+\DeclareTextCommand{\textcrinvglotstop}{PU}{\81\276}% U+01BE
+% U+01BF LATIN LETTER WYNN; wynn; \textwynn (tipa)
+\DeclareTextCommand{\textwynn}{PU}{\81\277}% U+01BF
+% U+01C0 LATIN LETTER DENTAL CLICK/LATIN LETTER PIPE; clickdental;
+% \textpipe (tipa)
+\DeclareTextCommand{\textpipe}{PU}{\81\300}% U+01C0
+%* \textpipe -> \textpipevar (tipx)
+% U+01C1 LATIN LETTER LATERAL CLICK/LATIN LETTER
+% DOUBLE PIPE; clicklateral; \textdoublepipe (tipa)
+\DeclareTextCommand{\textdoublepipe}{PU}{\81\301}% U+01C1
+%* \textdoublepipe -> \textdoublepipevar (tipx)
+% U+01C2 LATIN LETTER ALVEOLAR CLICK/LATIN LETTER PIPE DOUBLE BAR;
+% clickalveolar; \textdoublebarpipe (tipa)
+\DeclareTextCommand{\textdoublebarpipe}{PU}{\81\302}% U+01C2
+%* \textdoublebarpipe -> \textdoublebarpipevar (tipx)
+% U+01CD LATIN CAPITAL LETTER A WITH CARON; Acaron
+\DeclareTextCompositeCommand{\v}{PU}{A}{\81\315}% U+01CD
+% U+01CE LATIN SMALL LETTER A WITH CARON; acaron
+\DeclareTextCompositeCommand{\v}{PU}{a}{\81\316}% U+01CE
+% U+01CF LATIN CAPITAL LETTER I WITH CARON; Icaron
+\DeclareTextCompositeCommand{\v}{PU}{I}{\81\317}% U+01CF
+% U+01D0 LATIN SMALL LETTER I WITH CARON; icaron
+\DeclareTextCompositeCommand{\v}{PU}{\i}{\81\320}% U+01D0
+\DeclareTextCompositeCommand{\v}{PU}{i}{\81\320}% U+01D0
+% U+01D1 LATIN CAPITAL LETTER O WITH CARON; Ocaron
+\DeclareTextCompositeCommand{\v}{PU}{O}{\81\321}% U+01D1
+% U+01D2 LATIN SMALL LETTER O WITH CARON; ocaron
+\DeclareTextCompositeCommand{\v}{PU}{o}{\81\322}% U+01D2
+% U+01D3 LATIN CAPITAL LETTER U WITH CARON; Ucaron
+\DeclareTextCompositeCommand{\v}{PU}{U}{\81\323}% U+01D3
+% U+01D4 LATIN SMALL LETTER U WITH CARON; ucaron
+\DeclareTextCompositeCommand{\v}{PU}{u}{\81\324}% U+01D4
+% U+01DD LATIN SMALL LETTER TURNED E; eturned; \inve (wasysym)
+\DeclareTextCommand{\textinve}{PU}{\81\335}%* U+01DD
+% U+01E4 LATIN CAPITAL LETTER G WITH STROKE; Gstroke
+\DeclareTextCommand{\textGslash}{PU}{\81\344}% U+01E4
+% U+01E5 LATIN SMALL LETTER G WITH STROKE; gstroke
+\DeclareTextCommand{\textgslash}{PU}{\81\345}% U+01E5
+%* \textgslash -> \textcrg (tipa)
+% U+01E6 LATIN CAPITAL LETTER G WITH CARON; Gcaron
+\DeclareTextCompositeCommand{\v}{PU}{G}{\81\346}% U+01E6
+% U+01E7 LATIN SMALL LETTER G WITH CARON; gcaron
+\DeclareTextCompositeCommand{\v}{PU}{g}{\81\347}% U+01E7
+% U+01E8 LATIN CAPITAL LETTER K WITH CARON; Kcaron
+\DeclareTextCompositeCommand{\v}{PU}{K}{\81\350}% U+01E8
+% U+01E9 LATIN SMALL LETTER K WITH CARON; kcaron
+\DeclareTextCompositeCommand{\v}{PU}{k}{\81\351}% U+01E9
+% U+01EA LATIN CAPITAL LETTER O WITH OGONEK; Oogonek
+\DeclareTextCompositeCommand{\k}{PU}{O}{\81\352}% U+01EA
+% U+01EB LATIN SMALL LETTER O WITH OGONEK; oogonek
+\DeclareTextCompositeCommand{\k}{PU}{o}{\81\353}% U+01EB
+% U+01F0 LATIN SMALL LETTER J WITH CARON; jcaron
+\DeclareTextCompositeCommand{\v}{PU}{\j}{\81\360}% U+01F0
+\DeclareTextCompositeCommand{\v}{PU}{j}{\81\360}% U+01F0
+% U+01F4 LATIN CAPITAL LETTER G WITH ACUTE; Gacute
+\DeclareTextCompositeCommand{\'}{PU}{G}{\81\364}% U+01F4
+% U+01F5 LATIN SMALL LETTER G WITH ACUTE; gacute
+\DeclareTextCompositeCommand{\'}{PU}{g}{\81\365}% U+01F5
+% U+01F8 LATIN CAPITAL LETTER N WITH GRAVE
+\DeclareTextCompositeCommand{\`}{PU}{N}{\81\370}% U+01F8
+% U+01F9 LATIN SMALL LETTER N WITH GRAVE
+\DeclareTextCompositeCommand{\`}{PU}{n}{\81\371}% U+01F9
+% U+01FC LATIN CAPITAL LETTER AE WITH ACUTE; AEacute
+\DeclareTextCompositeCommand{\'}{PU}{\AE}{\81\374}% U+01FC
+% U+01FD LATIN SMALL LETTER AE WITH ACUTE; aeacute
+\DeclareTextCompositeCommand{\'}{PU}{\ae}{\81\375}% U+01FD
+% U+01FE LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;
+% *Oslashacute, Ostrokeacut
+\DeclareTextCompositeCommand{\'}{PU}{\O}{\81\376}% U+01FE
+% U+01FF LATIN SMALL LETTER O WITH STROKE AND ACUTE;
+% *oslashacute, ostrokeacute
+\DeclareTextCompositeCommand{\'}{PU}{\o}{\81\377}% U+01FF
+% U+0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE; Adblgrave
+\DeclareTextCompositeCommand{\G}{PU}{A}{\82\000}% U+0200
+% U+0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE; adblgrave
+\DeclareTextCompositeCommand{\G}{PU}{a}{\82\001}% U+0201
+% U+0204 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE; Edblgrave
+\DeclareTextCompositeCommand{\G}{PU}{E}{\82\004}% U+0204
+% U+0205 LATIN SMALL LETTER E WITH DOUBLE GRAVE; edblgrave
+\DeclareTextCompositeCommand{\G}{PU}{e}{\82\005}% U+0205
+% U+0206 LATIN CAPITAL LETTER E WITH INVERTED BREVE; Einvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{E}{\82\006}% U+0206
+% U+0207 LATIN SMALL LETTER E WITH INVERTED BREVE; einvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{e}{\82\007}% U+0207
+% U+0208 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE; Idblgrave
+\DeclareTextCompositeCommand{\G}{PU}{I}{\82\010}% U+0208
+% U+0209 LATIN SMALL LETTER I WITH DOUBLE GRAVE; idblgrave
+\DeclareTextCompositeCommand{\G}{PU}{\i}{\82\011}% U+0209
+\DeclareTextCompositeCommand{\G}{PU}{i}{\82\011}% U+0209
+% U+020A LATIN CAPITAL LETTER I WITH INVERTED BREVE; Iinvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{I}{\82\012}% U+020A
+% U+020B LATIN SMALL LETTER I WITH INVERTED BREVE; iinvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{i}{\82\013}% U+020B
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{\i}{\82\013}% U+020B
+% U+020C LATIN CAPITAL LETTER O WITH DOUBLE GRAVE; Odblgrave
+\DeclareTextCompositeCommand{\G}{PU}{O}{\82\014}% U+020C
+% U+020D LATIN SMALL LETTER O WITH DOUBLE GRAVE; odblgrave
+\DeclareTextCompositeCommand{\G}{PU}{o}{\82\015}% U+020D
+% U+020E LATIN CAPITAL LETTER O WITH INVERTED BREVE; Oinvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{O}{\82\016}% U+020E
+% U+020F LATIN SMALL LETTER O WITH INVERTED BREVE; oinvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{o}{\82\017}% U+020F
+% U+0210 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE; Rdblgrave
+\DeclareTextCompositeCommand{\G}{PU}{R}{\82\020}% U+0210
+% U+0211 LATIN SMALL LETTER R WITH DOUBLE GRAVE; rdblgrave
+\DeclareTextCompositeCommand{\G}{PU}{r}{\82\021}% U+0211
+% U+0214 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE; Udblgrave
+\DeclareTextCompositeCommand{\G}{PU}{U}{\82\024}% U+0214
+% U+0215 LATIN SMALL LETTER U WITH DOUBLE GRAVE; udblgrave
+\DeclareTextCompositeCommand{\G}{PU}{u}{\82\025}% U+0215
+% U+0216 LATIN CAPITAL LETTER U WITH INVERTED BREVE; Uinvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{U}{\82\026}% U+0216
+% U+0217 LATIN SMALL LETTER U WITH INVERTED BREVE; uinvertedbreve
+\DeclareTextCompositeCommand{\textinvbreve}{PU}{u}{\82\027}% U+0217
+% U+021E LATIN CAPITAL LETTER H WITH CARON
+\DeclareTextCompositeCommand{\v}{PU}{H}{\82\036}% U+021E
+% U+021F LATIN SMALL LETTER H WITH CARON
+\DeclareTextCompositeCommand{\v}{PU}{h}{\82\037}% U+021F
+% U+0221 LATIN SMALL LETTER D WITH CURL; \textctd (tipa)
+\DeclareTextCommand{\textctd}{PU}{\82\041}% U+0221
+% U+0225 LATIN SMALL LETTER Z WITH HOOK; \textcommatailz (tipa)
+\DeclareTextCommand{\textcommatailz}{PU}{\82\045}% U+0225
+% U+0226 LATIN CAPITAL LETTER A WITH DOT ABOVE
+\DeclareTextCompositeCommand{\.}{PU}{A}{\82\046}% U+0226
+% U+0227 LATIN SMALL LETTER A WITH DOT ABOVE
+\DeclareTextCompositeCommand{\.}{PU}{a}{\82\047}% U+0227
+% U+0228 LATIN CAPITAL LETTER E WITH CEDILLA
+\DeclareTextCompositeCommand{\c}{PU}{E}{\82\050}% U+0228
+% U+0229 LATIN SMALL LETTER E WITH CEDILLA
+\DeclareTextCompositeCommand{\c}{PU}{e}{\82\051}% U+0229
+% U+022E LATIN CAPITAL LETTER O WITH DOT ABOVE
+\DeclareTextCompositeCommand{\.}{PU}{O}{\82\056}% U+022E
+% U+022F LATIN SMALL LETTER O WITH DOT ABOVE
+\DeclareTextCompositeCommand{\.}{PU}{o}{\82\057}% U+022F
+% U+0232 LATIN CAPITAL LETTER Y WITH MACRON
+\DeclareTextCompositeCommand{\=}{PU}{Y}{\82\062}% U+0232
+% U+0233 LATIN SMALL LETTER Y WITH MACRON
+\DeclareTextCompositeCommand{\=}{PU}{y}{\82\063}% U+0233
+% U+0235 LATIN SMALL LETTER N WITH CURL; \textctn (tipa)
+\DeclareTextCommand{\textctn}{PU}{\82\065}% U+0235
+% U+0236 LATIN SMALL LETTER T WITH CURL; \textctt (tipa)
+\DeclareTextCommand{\textctt}{PU}{\82\066}% U+0236
+% U+0237 LATIN SMALL LETTER DOTLESS J
+\DeclareTextCommand{\j}{PU}{\82\067}% U+0237
+% U+0238 LATIN SMALL LETTER DB DIGRAPH; \textdblig (tipx)
+\DeclareTextCommand{\textPUdblig}{PU}{\82\070}% U+0238
+%* \textPUdblig -> \textdblig (tipx)
+% U+0239 LATIN SMALL LETTER QP DIGRAPH; \textqplig (tipx)
+\DeclareTextCommand{\textPUqplig}{PU}{\82\071}% U+0239
+%* \textPUqplig -> \textqplig (tipx)
+% U+023C LATIN SMALL LETTER C WITH STROKE; \slashc (wsuipa)
+\DeclareTextCommand{\textslashc}{PU}{\82\074}%* U+023C
+%* \textslashc -> \textcentoldstyle (textcomp)
+% With bar instead of stroke:
+%* \textslashc -> \textbarc (tipa)
+% \end{macrocode}
+%
+% \subsubsection{IPA Extensions: U+0250 to U+02AF}
+%
+% \begin{macrocode}
+% U+0250 LATIN SMALL LETTER TURNED A; aturned; \textturna (tipa)
+\DeclareTextCommand{\textturna}{PU}{\82\120}% U+0250
+%* \textturna -> \inva (wasysym)
+% U+0251 LATIN SMALL LETTER ALPHA/LATIN SMALL LETTER
+% SCRIPT A; ascript; \textscripta (tipa), \scripta (wsuipa)
+\DeclareTextCommand{\textscripta}{PU}{\82\121}%* U+0251
+%* \textscripta -> \vara (phonetic)
+% U+0252 LATIN SMALL LETTER TURNED ALPHA; ascriptturned;
+% \textturnscripta (tipa)
+\DeclareTextCommand{\textturnscripta}{PU}{\82\122}% U+0252
+%* \textturnscripta -> \invscripta (wsuipa)
+%* \textturnscripta -> \rotvara (phonetic)
+% U+0253 LATIN CAPITAL LETTER B WITH HOOK; bhook; \texthtb (tipa)
+\DeclareTextCommand{\texthtb}{PU}{\82\123}% U+0253
+%* \texthtb -> \hookb (wsuipa)
+%* \texthtb -> \hausab (phonetic)
+% U+0254 LATIN SMALL LETTER OPEN O; oopen;
+% \textopeno (tipa), \openo (wasysym)
+\DeclareTextCommand{\textopeno}{PU}{\82\124}%* U+0254
+%* \textopeno -> \varopeno (phonetic)
+% U+0255 LATIN SMALL LETTER C WITH CURL; ccurl; \textctc (tipa)
+\DeclareTextCommand{\textctc}{PU}{\82\125}% U+0255
+%* \textctc -> \curlyc (wsuipa)
+% U+0256 LATIN SMALL LETTER D WITH TAIL; dtail; \textrtaild (tipa)
+\DeclareTextCommand{\textrtaild}{PU}{\82\126}%* U+0256
+%* \textrtaild -> \taild (wsuipa)
+% U+0257 LATIN SMALL LETTER D WITH HOOK; dhook; \texthtd (tipa)
+\DeclareTextCommand{\texthtd}{PU}{\82\127}% U+0257
+%* \texthtd -> \hookd (wsuipa)
+%* \texthtd -> \hausad (phonetic)
+% U+0258 LATIN SMALL LETTER REVERSED E; ereversed;
+% \textreve (tipa), \reve (wsuipa)
+\DeclareTextCommand{\textreve}{PU}{\82\130}%* U+0258
+% U+0259 LATIN SMALL LETTER SCHWA; schwa;
+% \textschwa (tipa), \schwa (wsuipa, phonetic)
+\DeclareTextCommand{\textschwa}{PU}{\82\131}%* U+0259
+% U+025A LATIN SMALL LETTER SCHWA WITH HOOK; schwahook;
+% \textrhookschwa (tipa)
+\DeclareTextCommand{\textrhookschwa}{PU}{\82\132}% U+025A
+%* \textrhookschwa -> \er (wsuipa)
+% U+025B LATIN SMALL LETTER OPEN E/LATIN SMALL LETTER EPSILON; eopen;
+% \niepsilon (wsuipa)
+\DeclareTextCommand{\textniepsilon}{PU}{\82\133}%* U+025B
+%* \textniepsilon -> \epsi (phonetic)
+% U+025C LATIN SMALL LETTER REVERSED OPEN E; eopenreversed;
+% \textrevepsilon (tipa), \revepsilon (wsuipa)
+\DeclareTextCommand{\textrevepsilon}{PU}{\82\134}%* U+025C
+% U+025D LATIN SMALL LETTER REVERSED OPEN E WITH HOOK; eopenreversedhook;
+% \textrhookrevepsilon (tipa)
+\DeclareTextCommand{\textrhookrevepsilon}{PU}{\82\135}%* U+025D
+%* \textrhookrevepsilon -> \hookrevepsilon (wsuipa)
+% U+025E LATIN SMALL LETTER CLOSED REVERSED OPEN E; eopenreversedclosed;
+% \textcloserevepsilon (tipa)
+\DeclareTextCommand{\textcloserevepsilon}{PU}{\82\136}% U+025E
+%* \textcloserevepsilon -> \closedrevepsilon (wsuipa)
+% U+025F LATIN SMALL LETTER DOTLESS J WITH STROKE; jdotlessstroke;
+% \textbardotlessj (tipa)
+\DeclareTextCommand{\textbardotlessj}{PU}{\82\137}% U+025F
+%* \textbardotlessj -> \barj (phonetic)
+% U+0260 LATIN SMALL LETTER G WITH HOOK; ghook; \texthtg (tipa)
+\DeclareTextCommand{\texthtg}{PU}{\82\140}% U+0260
+%* \texthtg -> \hookg (wsuipa)
+% U+0261 LATIN SMALL LETTER SCRIPT G; gscript;
+% \textscriptg (tipa), \scriptg (wsuipa)
+\DeclareTextCommand{\textscriptg}{PU}{\82\141}%* U+0261
+%* \textscriptg -> \varg (phonetic)
+% U+0262 LATIN LETTER SMALL CAPITAL G; \textscg (tipa), \scg (wsuipa)
+\DeclareTextCommand{\textscg}{PU}{\82\142}%* U+0262
+% U+0263 LATIN SMALL LETTER GAMMA; gammalatinsmall;
+% \ipagamma (wsuipa), \vod (phonetic)
+\DeclareTextCommand{\textipagamma}{PU}{\82\143}%* U+0263
+%* \textipagamma -> \vod (pnonetic)
+% U+0264 LATIN SMALL LETTER RAMS HORN; ramshorn;
+% \babygamma (wsuipa)
+\DeclareTextCommand{\textbabygamma}{PU}{\82\144}%* U+0264
+% U+0265 LATIN SMALL LETTER TURNED H; hturned; \textturnh (tipa)
+\DeclareTextCommand{\textturnh}{PU}{\82\145}% U+0265
+%* \textturnh -> \invh (wsuipa)
+%* \textturnh -> \udesc (phonetic)
+% U+0266 LATIN SMALL LETTER H WITH HOOK; hhook; \texthth (tipa)
+\DeclareTextCommand{\texthth}{PU}{\82\146}% U+0266
+%* \texthth -> \hookh (wsuipa)
+%* \texthth -> \voicedh (phonetic)
+% U+0267 LATIN SMALL LETTER HENG WITH HOOK; henghook; \texththeng (tipa)
+\DeclareTextCommand{\texththeng}{PU}{\82\147}% U+0267
+%* \texththeng -> \hookheng (wsuipa)
+% U+0268 LATIN SMALL LETTER I WITH STROKE;
+% \textbari (tipa), \bari (wsuipa)
+\DeclareTextCommand{\textbari}{PU}{\82\150}%* U+0268
+%* \textbari -> \ibar (phonetic)
+% U+0269 LATIN SMALL LETTER IOTA; iotalatin; \niiota (wsuipa)
+\DeclareTextCommand{\textniiota}{PU}{\82\151}%* U+0269
+%* \textniiota -> \vari (phonetic)
+% U+026A LATIN LETTER SMALL CAPITAL I; \textsci (tipa), \sci (wsuipa)
+\DeclareTextCommand{\textsci}{PU}{\82\152}%* U+026A
+% U+026B LATIN SMALL LETTER L WITH MIDDLE TILDE; lmiddletilde;
+% \textltilde (tipa)
+\DeclareTextCommand{\textltilde}{PU}{\82\153}% U+026B
+%* \textltilde -> \tildel (wsuipa)
+% U+026C LATIN SMALL LETTER L WITH BELT; lbelt; \textbeltl (tipa)
+\DeclareTextCommand{\textbeltl}{PU}{\82\154}% U+026C
+%* \textbeltl -> \latfric (wsuipa)
+% U+026D LATIN SMALL LETTER L WITH RETROFLEX HOOK;
+% lhookretroflex; \textrtaill (tipa)
+\DeclareTextCommand{\textrtaill}{PU}{\82\155}% U+026D
+%* \textrtaill -> \taill (wsuipa)
+% U+026E LATIN SMALL LETTER LEZH; lezh; \textlyoghlig (tipa)
+\DeclareTextCommand{\textlyoghlig}{PU}{\82\156}% U+026E
+%* \textlyoghlig -> \lz (wsuipa)
+% U+026F LATIN SMALL LETTER TURNED M; mturned; \textturnm (tipa)
+\DeclareTextCommand{\textturnm}{PU}{\82\157}% U+026F
+%* \textturnm -> \invm (wsuipa)
+%* \textturnm -> \rotm (phonetic)
+% U+0270 LATIN SMALL LETTER TURNED M WITH LONG LEG; mlonglegturned;
+% \textturnmrleg (tipa)
+\DeclareTextCommand{\textturnmrleg}{PU}{\82\160}% U+0270
+%* \textturnmrleg -> \legm (wsuipa)
+% U+0271 LATIN SMALL LETTER M WITH HOOK; mhook; \textltailm (tipa)
+\DeclareTextCommand{\textltailm}{PU}{\82\161}% U+0271
+%* \textltailm -> \labdentalnas (wsuipa)
+%* \textltailm -> \emgma (phonetic)
+% U+0272 LATIN SMALL LETTER N WITH LEFT HOOK; nhookleft; \textltailn (tipa)
+\DeclareTextCommand{\textltailn}{PU}{\82\162}% U+0272
+%* \textltailn -> \nj (wsuipa)
+%* \textltailn -> \enya (phonetic)
+% U+0273 LATIN SMALL LETTER N WITH RETROFLEX HOOK;
+% nhookretroflex; \textrtailn (tipa)
+\DeclareTextCommand{\textrtailn}{PU}{\82\163}% U+0273
+%* \textrtailn -> \tailn (wsuipa)
+% U+0274 LATIN LETTER SMALL CAPITAL N; \textscn (tipa), \scn (wsuipa)
+\DeclareTextCommand{\textscn}{PU}{\82\164}%* U+0274
+% U+0275 LATIN CAPITAL LETTER O WITH MIDDLE TILDE/
+% LATIN CAPITAL LETTER BARRED O; obarred;
+% \textbaro (tipa), \baro (wsuipa)
+% But \baro from stmaryrd is different!
+\DeclareTextCommand{\textbaro}{PU}{\82\165}% U+0275
+% U+0276 LATIN LETTER SMALL CAPITAL OE; \textscoelig (tipa)
+\DeclareTextCommand{\textscoelig}{PU}{\82\166}% U+0276
+% U+0277 LATIN SMALL LETTER CLOSED OMEGA; omegalatinclosed;
+% \textcloseomega (tipa)
+\DeclareTextCommand{\textcloseomega}{PU}{\82\167}% U+0277
+%* \textcloseomega -> \closedniomega (wsuipa)
+%* \textcloseomega -> \varomega (phonetic)
+% U+0278 LATIN SMALL LETTER PHI; philatin; \niphi (wsuipa)
+\DeclareTextCommand{\textniphi}{PU}{\82\170}%* U+0278
+% U+0279 LATIN SMALL LETTER TURNED R; rturned; \textturnr (tipa)
+\DeclareTextCommand{\textturnr}{PU}{\82\171}% U+0279
+%* \textturnr -> \invr (wsuipa)
+%* \textturnr -> \rotr (phonetic)
+% U+027A LATIN SMALL LETTER TURNED R WITH LONG LEG;
+% rlonglegturned; \textturnlonglegr (tipa)
+\DeclareTextCommand{\textturnlonglegr}{PU}{\82\172}% U+027A
+%* \textturnlonglegr -> \invlegr (wsuipa)
+% U+027B LATIN SMALL LETTER TURNED R WITH HOOK; rhookturned;
+% \textturnrrtail (tipa)
+\DeclareTextCommand{\textturnrrtail}{PU}{\82\173}% U+027B
+%* \textturnrrtail -> \tailinvr (wsuipa)
+% U+027C LATIN SMALL LETTER R WITH LONG LEG; rlongleg; \textlonglegr (tipa)
+\DeclareTextCommand{\textlonglegr}{PU}{\82\174}%* U+027C
+%* \textlonglegr -> \legr (wsuipa)
+% U+027D LATIN SMALL LETTER R WITH TAIL; rhook; \textrtailr (tipa)
+\DeclareTextCommand{\textrtailr}{PU}{\82\175}% U+027D
+%* \textrtailr -> \tailr (wsuipa)
+% U+027E LATIN SMALL LETTER R WITH FISHHOOK; rfishhook;
+% \textfishhookr (tipa)
+\DeclareTextCommand{\textfishhookr}{PU}{\82\176}% U+027E
+%* \textfishhookr -> \flapr (wsuipa)
+%* \textfishhookr -> \flap (phonetic)
+% U+027F LATIN SMALL LETTER REVERSED R WITH FISHHOOK; rfishhookreversed;
+% \textlhtlongi (tipa)
+\DeclareTextCommand{\textlhtlongi}{PU}{\82\177}% U+027F
+% U+0280 LATIN LETTER SMALL CAPITAL R; \textscr (tipa), \scr (wsuipa)
+\DeclareTextCommand{\textscr}{PU}{\82\200}%* U+0280
+% U+0281 LATIN LETTER SMALL CAPITAL INVERTED R; Rsmallinverted;
+% \textinvscr (tipa), \invscr (wsuipa)
+\DeclareTextCommand{\textinvscr}{PU}{\82\201}%* U+0281
+% U+0282 LATIN SMALL LETTER S WITH HOOK; shook; \textrtails (tipa)
+\DeclareTextCommand{\textrtails}{PU}{\82\202}% U+0282
+%* \textrtails -> \tails (wsuipa)
+% U+0283 LATIN SMALL LETTER ESH; esh; \textesh (tipa), \esh (wsuipa)
+\DeclareTextCommand{\textesh}{PU}{\82\203}%* U+0283
+% U+0284 LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;
+% dotlessjstrokehook; \texthtbardotlessj (tipa)
+\DeclareTextCommand{\texthtbardotlessj}{PU}{\82\204}% U+0284
+% U+0285 LATIN SMALL LETTER SQUAT REVERSED ESH; eshsquatreversed;
+% \textvibyi (tipa)
+\DeclareTextCommand{\textvibyi}{PU}{\82\205}% U+0285
+% U+0286 LATIN SMALL LETTER ESH WITH CURL; eshcurl; \textctesh (tipa)
+\DeclareTextCommand{\textctesh}{PU}{\82\206}% U+0286
+%* \textctesh -> \curlyesh (wsuipa)
+% U+0287 LATIN SMALL LETTER TURNED T; tturned; \textturnt (tipa)
+\DeclareTextCommand{\textturnt}{PU}{\82\207}% U+0287
+%* \textturnt -> \clickt (wsuipa)
+% U+0288 LATIN SMALL LETTER T WITH RETROFLEX HOOK; tretroflexhook;
+% \textrtailt (tipa)
+\DeclareTextCommand{\textrtailt}{PU}{\82\210}% U+0288
+%* \textrtailt -> \tailt (wsuipa)
+% U+0289 LATIN SMALL LETTER U BAR; ubar;
+% \textbaru (tipa), \baru (wsuipa)
+\DeclareTextCommand{\textbaru}{PU}{\82\211}%* U+0289
+%* \textbaru -> \ubar (phonetic)
+% U+028A LATIN SMALL LETTER UPSILON; \niupsilon (wsuipa)
+\DeclareTextCommand{\textniupsilon}{PU}{\82\212}%* U+028A
+%* \textniupsilon -> \rotOmega (phonetic)
+% U+028B LATIN SMALL LETTER V WITH HOOK/LATIN SMALL LETTER SCRIPT V;
+% vhook; \textscriptv (tipa), \scriptv (wsuipa)
+\DeclareTextCommand{\textscriptv}{PU}{\82\213}%* U+028B
+% U+028C LATIN SMALL LETTER TURNED V; vturned; \textturnv (tipa)
+\DeclareTextCommand{\textturnv}{PU}{\82\214}%* U+028C
+%* \textturnv -> \invv (wsuipa)
+%* \textturnv -> \pwedge (phonetic)
+% U+028D LATIN SMALL LETTER TURNED W; wturned; \textturnw (tipa)
+\DeclareTextCommand{\textturnw}{PU}{\82\215}%* U+028D
+%* \textturnw -> \invw (wsuipa)
+%* \textturnw -> \rotw (phonetic)
+% U+028E LATIN SMALL LETTER TURNED Y; yturned; \textturny (tipa)
+\DeclareTextCommand{\textturny}{PU}{\82\216}%* U+028E
+%* \textturny -> \invy (wsuipa)
+%* \textturny -> \roty (phonetic)
+% U+028F LATIN LETTER SMALL CAPITAL Y; \textscy (tipa), \scy (wsuipa)
+\DeclareTextCommand{\textscy}{PU}{\82\217}%* U+028F
+% U+0290 LATIN SMALL LETTER Z WITH RETROFLEX HOOK; zretroflexhook;
+% \textrtailz (tipa)
+\DeclareTextCommand{\textrtailz}{PU}{\82\220}% U+0290
+%* \textrtailz -> \tailz (wsuipa)
+% U+0291 LATIN SMALL LETTER Z WITH CURL; zcurl; \textctz (tipa)
+\DeclareTextCommand{\textctz}{PU}{\82\221}% U+0291
+%* \textctz -> \curlyz (wsuipa)
+% U+0292 LATIN SMALL LETTER EZH/LATIN SMALL LETTER YOGH; ezh;
+% \textyogh (tipa), \yogh (wsuipa)
+\DeclareTextCommand{\textyogh}{PU}{\82\222}%* U+0292
+% U+0293 LATIN SMALL LETTER EZH WITH CURL/LATIN SMALL LETTER YOGH CURL;
+% ezhcurl; \textctyogh (tipa)
+\DeclareTextCommand{\textctyogh}{PU}{\82\223}% U+0293
+%* \textctyogh -> \curlyyogh (wsuipa)
+% U+0294 LATIN LETTER GLOTTAL STOP; glottalstop;
+% \textglotstop (tipa), \glotstop (wsuipa)
+\DeclareTextCommand{\textglotstop}{PU}{\82\224}%* U+0294
+%* \textglotstop -> \ejective (wsuipa)
+%* \textglotstop -> \glottal (phonetic)
+% U+0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE/
+% LATIN LETTER REVERSED GLOTTAL STOP; glottalstopreversed;
+% \textrevglotstop (tipa), \revglotstop (wsuipa)
+\DeclareTextCommand{\textrevglotstop}{PU}{\82\225}%* U+0295
+%* \textrevglotstop -> \reveject (wsuipa)
+% U+0296 LATIN LETTER INVERTED GLOTTAL STOP; glottalstopinverted;
+% \textinvglotstop (tipa), \invglotstop (wsuipa)
+\DeclareTextCommand{\textinvglotstop}{PU}{\82\226}%* U+0296
+% U+0297 LATIN LETTER STRETCHED C; cstretched; \textstretchc (tipa)
+\DeclareTextCommand{\textstretchc}{PU}{\82\227}% U+0297
+%* \textstretchc -> \clickc (wsuipa)
+%* \textstretchc -> \textstretchcvar (tipx)
+% U+0298 LATIN LETTER BILABIAL CLICK; bilabialclick;
+% \textbullseye (tipa)
+\DeclareTextCommand{\textbullseye}{PU}{\82\230}% U+0298
+%* \textbullseye -> \clickb (wsuipa)
+%* \textbullseye -> \textObullseye (tipx)
+% U+0299 LATIN LETTER SMALL CAPITAL B; \textscb (tipa)
+\DeclareTextCommand{\textscb}{PU}{\82\231}% U+0299
+% U+029A LATIN SMALL LETTER CLOSED OPEN E; eopenclosed;
+% \textcloseepsilon (tipa)
+\DeclareTextCommand{\textcloseepsilon}{PU}{\82\232}% U+029A
+% U+029B LATIN LETTER SMALL CAPITAL G WITH HOOK; Gsmallhook;
+% \texthtscg (tipa)
+\DeclareTextCommand{\texthtscg}{PU}{\82\233}% U+029B
+% U+029C LATIN LETTER SMALL CAPITAL H; \textsch (tipa)
+\DeclareTextCommand{\textsch}{PU}{\82\234}% U+029C
+% U+029D LATIN SMALL LETTER J WITH CROSSED-TAIL; jcrossedtail; \textcdj (tipa)
+\DeclareTextCommand{\textctj}{PU}{\82\235}% U+029D
+%* \textctj -> \textctjvar (tipx)
+% U+029E LATIN SMALL LETTER TURNED K; kturned; \textturnk (tipa)
+\DeclareTextCommand{\textturnk}{PU}{\82\236}% U+029E
+%* \textturnk -> \textturnsck (tipx)
+% U+029F LATIN LETTER SMALL CAPITAL L; \textscl (tipa)
+\DeclareTextCommand{\textscl}{PU}{\82\237}% U+029F
+% U+02A0 LATIN SMALL LETTER Q WITH HOOK; qhook; \texthtq (tipa)
+\DeclareTextCommand{\texthtq}{PU}{\82\240}% U+02A0
+% U+02A1 LATIN LETTER GLOTTAL STOP WITH STROKE; glottalstopstroke;
+% \textbarglotstop (tipa)
+\DeclareTextCommand{\textbarglotstop}{PU}{\82\241}% U+02A1
+% U+02A2 LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE/
+% LATIN LETTER REVERSED GLOTTAL STOP BAR; glottalstopstrokereversed;
+% \textbarrevglotstop (tipa)
+\DeclareTextCommand{\textbarrevglotstop}{PU}{\82\242}% U+02A2
+% U+02A3 LATIN SMALL LETTER DZ DIGRAPH; dzaltone; \textdzlig (tipa)
+\DeclareTextCommand{\textdzlig}{PU}{\82\243}% U+02A3
+%* \textdzlig -> \dz (wsupipa)
+% U+02A4 LATIN SMALL LETTER DEZH DIGRAPH; dezh; \textdyoghlig (tipa)
+\DeclareTextCommand{\textdyoghlig}{PU}{\82\244}% U+02A4
+% U+02A5 LATIN SMALL LETTER DZ DIGRAPH WITH CURL; dzcurl;
+% \textdctzlig (tipa)
+\DeclareTextCommand{\textdctzlig}{PU}{\82\245}% U+02A5
+% U+02A6 LATIN SMALL LETTER TS DIGRAPH; ts; \texttslig (tipa)
+\DeclareTextCommand{\texttslig}{PU}{\82\246}% U+02A6
+% U+02A7 LATIN SMALL LETTER TESH DIGRAPH; tesh; \textteshlig (tipa)
+\DeclareTextCommand{\textteshlig}{PU}{\82\247}% U+02A7
+%* \textteshlig -> \tesh (wsuipa)
+% U+02A8 LATIN SMALL LETTER TC DIGRAPH WITH CURL; tccurl;
+% \texttctclig (tipa)
+\DeclareTextCommand{\texttctclig}{PU}{\82\250}% U+02A8
+% U+02AE LATIN SMALL LETTER TURNED H WITH FISHHOOK;
+% \textlhtlongy (tipa)
+\DeclareTextCommand{\textlhtlongy}{PU}{\82\256}% U+02AE
+% U+02AF LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;
+% \textvibyy (tipa)
+\DeclareTextCommand{\textvibyy}{PU}{\82\257}% U+02AF
+% \end{macrocode}
+%
+% \subsubsection{Spacing Modifier Letters: U+02B0 to U+02FF}
+%
+% \begin{macrocode}
+% U+02BD MODIFIER LETTER REVERSED COMMA;
+% commareversedmod, afii64937; \textrevapostrophe (tipa)
+\DeclareTextCommand{\textrevapostrophe}{PU}{\82\275}% U+02BD
+% U+02C0 MODIFIER LETTER GLOTTAL STOP; glottalstopmod;
+% \textraiseglotstop (tipa)
+\DeclareTextCommand{\textraiseglotstop}{PU}{\82\300}% U+02C0
+% U+02C2 MODIFIER LETTER LEFT ARROWHEAD; arrowheadleftmod;
+% \textlptr (tipa)
+\DeclareTextCommand{\textlptr}{PU}{\82\302}% U+02C2
+% U+02C3 MODIFIER LETTER RIGHT ARROWHEAD; arrowheadrightmod;
+% \textrptr (tipa)
+\DeclareTextCommand{\textrptr}{PU}{\82\303}% U+02C3
+% U+02C7 CARON; caron
+\DeclareTextCommand{\textasciicaron}{PU}{\82\307}% U+02C7
+% U+02C8 MODIFIER LETTER VERTICAL LINE; verticallinemod;
+% \textprimstress (tipa)
+\DeclareTextCommand{\textprimstress}{PU}{\82\310}% U+02C8
+% U+02CC MODIFIER LETTER LOW VERTICAL LINE; verticallinelowmod;
+% \textsecstress (tipa)
+\DeclareTextCommand{\textsecstress}{PU}{\82\314}% U+02CC
+% U+02D0 MODIFIER LETTER TRIANGULAR COLON; colontriangularmod;
+% \textlengthmark (tipa)
+\DeclareTextCommand{\textlengthmark}{PU}{\82\320}% U+02D0
+% U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON; colontriangularhalfmod;
+% \texthalflength (tipa)
+\DeclareTextCommand{\texthalflength}{PU}{\82\321}% U+02D1
+% U+02D8 BREVE; breve
+\DeclareTextCommand{\textasciibreve}{PU}{\82\330}% U+02D8
+% U+02D9 DOT ABOVE; dotaccent
+\DeclareTextCommand{\textdotaccent}{PU}{\82\331}% U+02D9
+% U+02DA RING ABOVE; ring
+\DeclareTextCommand{\textring}{PU}{\82\332}% U+02DA
+% U+02DB OGONEK; ogonek
+\DeclareTextCommand{\textogonek}{PU}{\82\333}% U+02DB
+% U+02DC SMALL TILDE; ilde, *tilde
+\DeclareTextCommand{\texttilde}{PU}{\82\334}% U+02DC
+% U+02DD DOUBLE ACUTE ACCENT; hungarumlaut
+\DeclareTextCommand{\texthungarumlaut}{PU}{\82\335}% U+02DD
+\DeclareTextCommand{\textacutedbl}{PU}{\82\335}% U+02DD
+% U+02F3 MODIFIER LETTER LOW RING
+\DeclareTextCommand{\textringlow}{PU}{\82\363}% U+02F3
+% U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+\DeclareTextCommand{\textgravedbl}{PU}{\82\365}% U+02F5
+% U+02F7 MODIFIER LETTER LOW TILDE
+\DeclareTextCommand{\texttildelow}{PU}{\82\367}% U+02F7
+% U+02F9 MODIFIER LETTER BEGIN HIGH TONE; \textopencorner (tipa)
+\DeclareTextCommand{\textopencorner}{PU}{\82\371}% U+02F9
+% U+02FA MODIFIER LETTER END HIGH TONE; \textcorner (tipa)
+\DeclareTextCommand{\textcorner}{PU}{\82\372}% U+02FA
+% \end{macrocode}
+%
+% \subsubsection{Combining Diacritical Marks: U+0300 to U+036F}
+%
+% \begin{macrocode}
+% U+030F COMBINING DOUBLE GRAVE ACCENT; dblgravecmb
+\DeclareTextCommand{\textdoublegrave}{PU}{ \83\017}% U+030F
+% U+0311 COMBINING INVERTED BREVE; breveinvertedcmb
+\DeclareTextCommand{\textnewtie}{PU}{ \83\021}% U+0311
+% U+0323 COMBINING DOT BELOW; dotbelowcmb, *dotbelowcomb
+\DeclareTextCommand{\textdotbelow}{PU}{ \83\043}% U+0323
+% U+0331 COMBINING MACRON BELOW; macronbelowcmb
+\DeclareTextCommand{\textmacronbelow}{PU}{ \83\061}% U+0331
+% U+0361 COMBINING DOUBLE INVERTED BREVE; breveinverteddoublecmb
+\DeclareTextCommand{\texttie}{PU}{ \83\141}% U+0361
+% \end{macrocode}
+%
+% \subsubsection{Greek and Coptic: U+0370 to U+03FF}
+%
+% \begin{macrocode}
+% U+0374 GREEK NUMERAL SIGN; numeralsigngreek
+\DeclareTextCommand{\textnumeralsigngreek}{PU}{\83\164}% U+0374
+% U+0375 GREEK LOWER NUMERAL SIGN; numeralsignlowergreek
+\DeclareTextCommand{\textnumeralsignlowergreek}{PU}{\83\165}% U+0375
+% U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS; Alphatonos
+\DeclareTextCompositeCommand{\'}{PU}{\textAlpha}{\83\206}% U+0386
+% U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS; Epsilontonos
+\DeclareTextCompositeCommand{\'}{PU}{\textEpsilon}{\83\210}% U+0388
+% U+0389 GREEK CAPITAL LETTER ETA WITH TONOS; Etatonos
+\DeclareTextCompositeCommand{\'}{PU}{\textEta}{\83\211}% U+0389
+% U+038A GREEK CAPITAL LETTER IOTA WITH TONOS; Iotatonos
+\DeclareTextCompositeCommand{\'}{PU}{\textIota}{\83\212}% U+038A
+% U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS; Omicrontonos
+\DeclareTextCompositeCommand{\'}{PU}{\textOmicron}{\83\214}% U+038C
+% U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS; Upsilontonos
+\DeclareTextCompositeCommand{\'}{PU}{\textUpsilon}{\83\216}% U+038E
+% U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS; Omegatonos
+\DeclareTextCompositeCommand{\'}{PU}{\textOmega}{\83\217}% U+038F
+% U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;
+% iotadieresistonos
+\DeclareTextCompositeCommand{\'}{PU}{\textIotadieresis}{\83\220}% U+0390
+% U+0391 GREEK CAPITAL LETTER ALPHA; Alpha
+\DeclareTextCommand{\textAlpha}{PU}{\83\221}% U+0391
+% U+0392 GREEK CAPITAL LETTER BETA; Beta
+\DeclareTextCommand{\textBeta}{PU}{\83\222}% U+0392
+% U+0393 GREEK CAPITAL LETTER GAMMA; Gamma; \Gamma (LaTeX)
+\DeclareTextCommand{\textGamma}{PU}{\83\223}%* U+0393
+% U+0394 GREEK CAPITAL LETTER DELTA; Deltagreek, *Delta; \Delta (LaTeX)
+\DeclareTextCommand{\textDelta}{PU}{\83\224}%* U+0394
+% U+0395 GREEK CAPITAL LETTER EPSILON; Epsilon
+\DeclareTextCommand{\textEpsilon}{PU}{\83\225}% U+0395
+% U+0396 GREEK CAPITAL LETTER ZETA; Zeta
+\DeclareTextCommand{\textZeta}{PU}{\83\226}% U+0396
+% U+0397 GREEK CAPITAL LETTER ETA; Eta
+\DeclareTextCommand{\textEta}{PU}{\83\227}% U+0397
+% U+0398 GREEK CAPITAL LETTER THETA; Theta; \Theta (LaTeX)
+\DeclareTextCommand{\textTheta}{PU}{\83\230}%* U+0398
+% U+0399 GREEK CAPITAL LETTER IOTA; Iota
+\DeclareTextCommand{\textIota}{PU}{\83\231}% U+0399
+% U+039A GREEK CAPITAL LETTER KAPPA; Kappa
+\DeclareTextCommand{\textKappa}{PU}{\83\232}% U+039A
+% U+039B GREEK CAPITAL LETTER LAMDA; Lambda; \Lambda (LaTeX)
+\DeclareTextCommand{\textLambda}{PU}{\83\233}%* U+039B
+% U+039C GREEK CAPITAL LETTER MU; Mu
+\DeclareTextCommand{\textMu}{PU}{\83\234}% U+039C
+% U+039D GREEK CAPITAL LETTER NU; Nu
+\DeclareTextCommand{\textNu}{PU}{\83\235}% U+039D
+% U+039E GREEK CAPITAL LETTER XI; Xi; \Xi (LaTeX)
+\DeclareTextCommand{\textXi}{PU}{\83\236}%* U+039E
+% U+039F GREEK CAPITAL LETTER OMICRON; Omicron
+\DeclareTextCommand{\textOmicron}{PU}{\83\237}% U+039F
+% U+03A0 GREEK CAPITAL LETTER PI; Pi
+\DeclareTextCommand{\textPi}{PU}{\83\240}%* U+03A0
+% U+03A1 GREEK CAPITAL LETTER RHO; Rho
+\DeclareTextCommand{\textRho}{PU}{\83\241}% U+03A1
+% U+03A3 GREEK CAPITAL LETTER SIGMA; Sigma; \Sigma (LaTeX)
+\DeclareTextCommand{\textSigma}{PU}{\83\243}%* U+03A3
+% U+03A4 GREEK CAPITAL LETTER TAU; Tau
+\DeclareTextCommand{\textTau}{PU}{\83\244}% U+03A4
+% U+03A5 GREEK CAPITAL LETTER UPSILON; Upsilon; \Upsilon (LaTeX)
+\DeclareTextCommand{\textUpsilon}{PU}{\83\245}%* U+03A5
+% U+03A6 GREEK CAPITAL LETTER PHI; Phi; \Phi (LaTeX)
+\DeclareTextCommand{\textPhi}{PU}{\83\246}%* U+03A6
+% U+03A7 GREEK CAPITAL LETTER CHI; Chi
+\DeclareTextCommand{\textChi}{PU}{\83\247}% U+03A7
+% U+03A8 GREEK CAPITAL LETTER PSI; Psi; \Psi (LaTeX)
+\DeclareTextCommand{\textPsi}{PU}{\83\250}%* U+03A8
+% U+03A9 GREEK CAPITAL LETTER OMEGA; Omegagreek, *Omega;
+% \Omega (LaTeX)
+\DeclareTextCommand{\textOmega}{PU}{\83\251}%* U+03A9
+% U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA; Iotadieresis
+\DeclareTextCommand{\textIotadieresis}{PU}{\83\252}% U+03AA
+\DeclareTextCompositeCommand{\"}{PU}{\textIota}{\83\252}% U+03AA
+% U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA; Upsilondieresis
+\DeclareTextCompositeCommand{\"}{PU}{\textUpsilon}{\83\253}% U+03AB
+% U+03AC GREEK SMALL LETTER ALPHA WITH TONOS; alphatonos
+\DeclareTextCompositeCommand{\'}{PU}{\textalpha}{\83\254}%* U+03AC
+% U+03AD GREEK SMALL LETTER EPSILON WITH TONOS; epsilontonos
+\DeclareTextCompositeCommand{\'}{PU}{\textepsilon}{\83\255}% U+03AD
+% U+03AE GREEK SMALL LETTER ETA WITH TONOS; etatonos
+\DeclareTextCompositeCommand{\'}{PU}{\texteta}{\83\256}% U+03AE
+% U+03AF GREEK SMALL LETTER IOTA WITH TONOS; iotatonos
+\DeclareTextCompositeCommand{\'}{PU}{\textiota}{\83\257}% U+03AF
+% U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+% AND TONOS; upsilondieresisto
+\DeclareTextCompositeCommand{\"}{PU}{\textupsilonacute}{\83\260}% U+03B0
+% U+03B1 GREEK SMALL LETTER ALPHA; alpha; \alpha (LaTeX)
+\DeclareTextCommand{\textalpha}{PU}{\83\261}%* U+03B1
+% U+03B2 GREEK SMALL LETTER BETA; beta; \beta (LaTeX)
+\DeclareTextCommand{\textbeta}{PU}{\83\262}%* U+03B2
+% U+03B3 GREEK SMALL LETTER GAMMA; gamma; \gamma (LaTeX)
+\DeclareTextCommand{\textgamma}{PU}{\83\263}%* U+03B3
+% U+03B4 GREEK SMALL LETTER DELTA; delta; \delta (LaTeX)
+\DeclareTextCommand{\textdelta}{PU}{\83\264}%* U+03B4
+% U+03B5 GREEK SMALL LETTER EPSILON; epsilon; \epsilon (LaTeX)
+\DeclareTextCommand{\textepsilon}{PU}{\83\265}%* U+03B5
+% U+03B6 GREEK SMALL LETTER ZETA; zeta; \zeta (LaTeX)
+\DeclareTextCommand{\textzeta}{PU}{\83\266}%* U+03B6
+% U+03B7 GREEK SMALL LETTER ETA; eta; \eta (LaTeX)
+\DeclareTextCommand{\texteta}{PU}{\83\267}%* U+03B7
+% U+03B8 GREEK SMALL LETTER THETA; theta; \theta (LaTeX)
+\DeclareTextCommand{\texttheta}{PU}{\83\270}%* U+03B8
+% U+03B9 GREEK SMALL LETTER IOTA; iota; \iota (LaTeX)
+\DeclareTextCommand{\textiota}{PU}{\83\271}%* U+03B9
+% U+03BA GREEK SMALL LETTER KAPPA; kappa; \kappa (LaTeX)
+\DeclareTextCommand{\textkappa}{PU}{\83\272}%* U+03BA
+% U+03BB GREEK SMALL LETTER LAMDA; lambda; \lambda (LaTeX)
+\DeclareTextCommand{\textlambda}{PU}{\83\273}%* U+03BB
+% U+03BC GREEK SMALL LETTER MU; mugreek, *mu; \mu (LaTeX)
+\DeclareTextCommand{\textmugreek}{PU}{\83\274}%* U+03BC
+% U+03BD GREEK SMALL LETTER NU; nu; \nu (LaTeX)
+\DeclareTextCommand{\textnu}{PU}{\83\275}%* U+03BD
+% U+03BE GREEK SMALL LETTER XI; xi; \xi (LaTeX)
+\DeclareTextCommand{\textxi}{PU}{\83\276}%* U+03BE
+% U+03BF GREEK SMALL LETTER OMICRON; omicron
+\DeclareTextCommand{\textomicron}{PU}{\83\277}% U+03BF
+% U+03C0 GREEK SMALL LETTER PI; pi; \pi (LaTeX)
+\DeclareTextCommand{\textpi}{PU}{\83\300}%* U+03C0
+% U+03C1 GREEK SMALL LETTER RHO; rho; \rho (LaTeX)
+\DeclareTextCommand{\textrho}{PU}{\83\301}%* U+03C1
+% U+03C2 GREEK SMALL LETTER FINAL SIGMA; *sigma1, sigmafinal
+\DeclareTextCommand{\textvarsigma}{PU}{\83\302}%* U+03C2
+% U+03C3 GREEK SMALL LETTER SIGMA; sigma; \sigma (LaTeX)
+\DeclareTextCommand{\textsigma}{PU}{\83\303}%* U+03C3
+% U+03C4 GREEK SMALL LETTER TAU; tau; \tau (LaTeX)
+\DeclareTextCommand{\texttau}{PU}{\83\304}%* U+03C4
+% U+03C5 GREEK SMALL LETTER UPSILON; upsilon; \upsilon (LaTeX)
+\DeclareTextCommand{\textupsilon}{PU}{\83\305}%* U+03C5
+% U+03C6 GREEK SMALL LETTER PHI; phi; \phi (LaTeX)
+\DeclareTextCommand{\textphi}{PU}{\83\306}%* U+03C6
+% U+03C7 GREEK SMALL LETTER CHI; chi; \chi (LaTeX)
+\DeclareTextCommand{\textchi}{PU}{\83\307}%* U+03C7
+% U+03C8 GREEK SMALL LETTER PSI; psi; \psi (LaTeX)
+\DeclareTextCommand{\textpsi}{PU}{\83\310}%* U+03C8
+% U+03C9 GREEK SMALL LETTER OMEGA; omega; \omega (LaTeX)
+\DeclareTextCommand{\textomega}{PU}{\83\311}%* U+03C9
+% U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA; iotadieresis
+\DeclareTextCompositeCommand{\"}{PU}{\textiota}{\83\312}% U+03CA
+% U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA; upsilondieresis
+\DeclareTextCompositeCommand{\"}{PU}{\textupsilon}{\83\313}% U+03CB
+% U+03CC GREEK SMALL LETTER OMICRON WITH TONOS; omicrontonos
+\DeclareTextCompositeCommand{\'}{PU}{\textomicron}{\83\314}% U+03CC
+% U+03CD GREEK SMALL LETTER UPSILON WITH TONOS; upsilontonos
+\DeclareTextCommand{\textupsilonacute}{PU}{\83\315}% U+03CD
+\DeclareTextCompositeCommand{\'}{PU}{\textupsilon}{\83\315}% U+03CD
+% U+03CE GREEK SMALL LETTER OMEGA WITH TONOS; omegatonos
+\DeclareTextCompositeCommand{\'}{PU}{\textomega}{\83\316}% U+03CE
+% U+03DA GREEK LETTER STIGMA; Stigmagreek
+\DeclareTextCommand{\textStigmagreek}{PU}{\83\332}% U+03DA
+% U+03DB GREEK SMALL LETTER STIGMA
+\DeclareTextCommand{\textstigmagreek}{PU}{\83\333}% U+03DB
+% U+03DC GREEK LETTER DIGAMMA; Digammagreek
+\DeclareTextCommand{\textDigammagreek}{PU}{\83\334}% U+03DC
+% U+03DD GREEK SMALL LETTER DIGAMMA
+\DeclareTextCommand{\textdigammagreek}{PU}{\83\335}% U+03DD
+%* \textdigammagreek -> \digamma (AmS)
+% U+03DE GREEK LETTER KOPPA; Koppagreek
+\DeclareTextCommand{\textKoppagreek}{PU}{\83\336}% U+03DE
+% U+03DF GREEK SMALL LETTER KOPPA
+\DeclareTextCommand{\textkoppagreek}{PU}{\83\337}% U+03DF
+% U+03E0 GREEK LETTER SAMPI; Sampigreek
+\DeclareTextCommand{\textSampigreek}{PU}{\83\340}% U+03E0
+% U+03E1 GREEK SMALL LETTER SAMPI
+\DeclareTextCommand{\textsampigreek}{PU}{\83\341}% U+03E1
+% U+03F6 GREEK REVERSED LUNATE EPSILON SYMBOL;
+% \backepsilon (AmS)
+\DeclareTextCommand{\textbackepsilon}{PU}{\83\366}% U+03F6
+% \end{macrocode}
+%
+% \subsubsection{Cyrillic: U+0400 to U+04FF}
+%
+% Thanks to Vladimir Volovich (\Email{vvv@vvv.vsu.ru}) for
+% the help with the Cyrillic glyph names.
+% \begin{macrocode}
+% U+0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
+\DeclareTextCompositeCommand{\`}{PU}{\CYRE}{\84\000}% U+0400
+% U+0401 CYRILLIC CAPITAL LETTER IO; Iocyrillic, *afii10023
+\DeclareTextCommand{\CYRYO}{PU}{\84\001}% U+0401
+\DeclareTextCompositeCommand{\"}{PU}{\CYRE}{\84\001}% U+0401
+% U+0402 CYRILLIC CAPITAL LETTER DJE; Djecyrillic, *afii10051
+\DeclareTextCommand{\CYRDJE}{PU}{\84\002}% U+0402
+% U+0403 CYRILLIC CAPITAL LETTER GJE; Gjecyrillic, *afii10052
+\DeclareTextCompositeCommand{\'}{PU}{\CYRG}{\84\003}% U+0403
+% U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE; Ecyrillic, *afii10053
+\DeclareTextCommand{\CYRIE}{PU}{\84\004}% U+0404
+% U+0405 CYRILLIC CAPITAL LETTER DZE; Dzecyrillic, *afii10054
+\DeclareTextCommand{\CYRDZE}{PU}{\84\005}% U+0405
+% U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;
+% Icyrillic, *afii10055
+\DeclareTextCommand{\CYRII}{PU}{\84\006}% U+0406
+% U+0407 CYRILLIC CAPITAL LETTER YI; Yicyrillic, *afii10056
+\DeclareTextCommand{\CYRYI}{PU}{\84\007}% U+0407
+\DeclareTextCompositeCommand{\"}{PU}{\CYRII}{\84\007}% U+0407
+% U+0408 CYRILLIC CAPITAL LETTER JE; Jecyrillic, *afii10057
+\DeclareTextCommand{\CYRJE}{PU}{\84\010}% U+0408
+% U+0409 CYRILLIC CAPITAL LETTER LJE; Ljecyrillic, *afii10058
+\DeclareTextCommand{\CYRLJE}{PU}{\84\011}% U+0409
+% U+040A CYRILLIC CAPITAL LETTER NJE; Njecyrillic, *afii10059
+\DeclareTextCommand{\CYRNJE}{PU}{\84\012}% U+040A
+% U+040B CYRILLIC CAPITAL LETTER TSHE; Tshecyrillic, *afii10060
+\DeclareTextCommand{\CYRTSHE}{PU}{\84\013}% U+040B
+% U+040C CYRILLIC CAPITAL LETTER KJE; Kjecyrillic, *afii10061
+\DeclareTextCompositeCommand{\'}{PU}{\CYRK}{\84\014}% U+040C
+% U+040D CYRILLIC CAPITAL LETTER I WITH GRAVE
+\DeclareTextCompositeCommand{\`}{PU}{\CYRI}{\84\015}% U+040D
+% U+040E CYRILLIC CAPITAL LETTER SHORT U; Ushortcyrillic, *afii10062
+\DeclareTextCommand{\CYRUSHRT}{PU}{\84\016}% U+040E
+\DeclareTextCompositeCommand{\U}{PU}{\CYRU}{\84\016}% U+040E
+% U+040F CYRILLIC CAPITAL LETTER DZHE; Dzhecyrillic, *afii10145
+\DeclareTextCommand{\CYRDZHE}{PU}{\84\017}% U+040F
+% U+0410 CYRILLIC CAPITAL LETTER A; Acyrillic, *afii10017
+\DeclareTextCommand{\CYRA}{PU}{\84\020}% U+0410
+% U+0411 CYRILLIC CAPITAL LETTER BE; Becyrillic, *afii10018
+\DeclareTextCommand{\CYRB}{PU}{\84\021}% U+0411
+% U+0412 CYRILLIC CAPITAL LETTER VE; Vecyrillic, *afii10019
+\DeclareTextCommand{\CYRV}{PU}{\84\022}% U+0412
+% U+0413 CYRILLIC CAPITAL LETTER GHE; Gecyrillic, *afii10020
+\DeclareTextCommand{\CYRG}{PU}{\84\023}% U+0413
+% U+0414 CYRILLIC CAPITAL LETTER DE; Decyrillic, *afii10021
+\DeclareTextCommand{\CYRD}{PU}{\84\024}% U+0414
+% U+0415 CYRILLIC CAPITAL LETTER IE; Iecyrillic, *afii10022
+\DeclareTextCommand{\CYRE}{PU}{\84\025}% U+0415
+% U+0416 CYRILLIC CAPITAL LETTER ZHE; Zhecyrillic, *afii10024
+\DeclareTextCommand{\CYRZH}{PU}{\84\026}% U+0416
+% U+0417 CYRILLIC CAPITAL LETTER ZE; Zecyrillic, *afii10025
+\DeclareTextCommand{\CYRZ}{PU}{\84\027}% U+0417
+% U+0418 CYRILLIC CAPITAL LETTER I; Iicyrillic, *afii10026
+\DeclareTextCommand{\CYRI}{PU}{\84\030}% U+0418
+% U+0419 CYRILLIC CAPITAL LETTER SHORT I; Iishortcyrillic, *afii10027
+\DeclareTextCommand{\CYRISHRT}{PU}{\84\031}% U+0419
+\DeclareTextCompositeCommand{\U}{PU}{\CYRI}{\84\031}% U+0419
+% U+041A CYRILLIC CAPITAL LETTER KA; Kacyrillic, *afii10028
+\DeclareTextCommand{\CYRK}{PU}{\84\032}% U+041A
+% U+041B CYRILLIC CAPITAL LETTER EL; Elcyrillic, *afii10029
+\DeclareTextCommand{\CYRL}{PU}{\84\033}% U+041B
+% U+041C CYRILLIC CAPITAL LETTER EM; Emcyrillic, *afii10030
+\DeclareTextCommand{\CYRM}{PU}{\84\034}% U+041C
+% U+041D CYRILLIC CAPITAL LETTER EN; Encyrillic, *afii10031
+\DeclareTextCommand{\CYRN}{PU}{\84\035}% U+041D
+% U+041E CYRILLIC CAPITAL LETTER O; Ocyrillic, *afii10032
+\DeclareTextCommand{\CYRO}{PU}{\84\036}% U+041E
+% U+041F CYRILLIC CAPITAL LETTER PE; Pecyrillic, *afii10033
+\DeclareTextCommand{\CYRP}{PU}{\84\037}% U+041F
+% U+0420 CYRILLIC CAPITAL LETTER ER; Ercyrillic, *afii10034
+\DeclareTextCommand{\CYRR}{PU}{\84\040}% U+0420
+% U+0421 CYRILLIC CAPITAL LETTER ES; Escyrillic, *afii10035
+\DeclareTextCommand{\CYRS}{PU}{\84\041}% U+0421
+% U+0422 CYRILLIC CAPITAL LETTER TE; Tecyrillic, *afii10036
+\DeclareTextCommand{\CYRT}{PU}{\84\042}% U+0422
+% U+0423 CYRILLIC CAPITAL LETTER U; Ucyrillic, *afii10037
+\DeclareTextCommand{\CYRU}{PU}{\84\043}% U+0423
+% U+0424 CYRILLIC CAPITAL LETTER EF; Efcyrillic, *afii10038
+\DeclareTextCommand{\CYRF}{PU}{\84\044}% U+0424
+% U+0425 CYRILLIC CAPITAL LETTER HA; Khacyrillic, *afii10039
+\DeclareTextCommand{\CYRH}{PU}{\84\045}% U+0425
+% U+0426 CYRILLIC CAPITAL LETTER TSE; Tsecyrillic, *afii10040
+\DeclareTextCommand{\CYRC}{PU}{\84\046}% U+0426
+% U+0427 CYRILLIC CAPITAL LETTER CHE; Checyrillic, *afii10041
+\DeclareTextCommand{\CYRCH}{PU}{\84\047}% U+0427
+% U+0428 CYRILLIC CAPITAL LETTER SHA; Shacyrillic, *afii10042
+\DeclareTextCommand{\CYRSH}{PU}{\84\050}% U+0428
+% U+0429 CYRILLIC CAPITAL LETTER SHCHA; Shchacyrillic, *afii10043
+\DeclareTextCommand{\CYRSHCH}{PU}{\84\051}% U+0429
+% U+042A CYRILLIC CAPITAL LETTER HARD SIGN;
+% Hardsigncyrillic, *afii10044
+\DeclareTextCommand{\CYRHRDSN}{PU}{\84\052}% U+042A
+% U+042B CYRILLIC CAPITAL LETTER YERU; Yericyrillic, *afii10045
+\DeclareTextCommand{\CYRERY}{PU}{\84\053}% U+042B
+% U+042C CYRILLIC CAPITAL LETTER SOFT SIGN;
+% Softsigncyrillic, *afii10046
+\DeclareTextCommand{\CYRSFTSN}{PU}{\84\054}% U+042C
+% U+042D CYRILLIC CAPITAL LETTER E; Ereversedcyrillic, *afii10047
+\DeclareTextCommand{\CYREREV}{PU}{\84\055}% U+042D
+% U+042E CYRILLIC CAPITAL LETTER YU; IUcyrillic, *afii10048
+\DeclareTextCommand{\CYRYU}{PU}{\84\056}% U+042E
+% U+042F CYRILLIC CAPITAL LETTER YA; IAcyrillic, *afii10049
+\DeclareTextCommand{\CYRYA}{PU}{\84\057}% U+042F
+% U+0430 CYRILLIC SMALL LETTER A; acyrillic, *afii10065
+\DeclareTextCommand{\cyra}{PU}{\84\060}% U+0430
+% U+0431 CYRILLIC SMALL LETTER BE; *afii10066, becyrillic
+\DeclareTextCommand{\cyrb}{PU}{\84\061}% U+0431
+% U+0432 CYRILLIC SMALL LETTER VE; *afii10067, vecyrillic
+\DeclareTextCommand{\cyrv}{PU}{\84\062}% U+0432
+% U+0433 CYRILLIC SMALL LETTER GHE; *afii10068, gecyrillic
+\DeclareTextCommand{\cyrg}{PU}{\84\063}% U+0433
+% U+0434 CYRILLIC SMALL LETTER DE; *afii10069, decyrillic
+\DeclareTextCommand{\cyrd}{PU}{\84\064}% U+0434
+% U+0435 CYRILLIC SMALL LETTER IE; *afii10070, iecyrillic
+\DeclareTextCommand{\cyre}{PU}{\84\065}% U+0435
+% U+0436 CYRILLIC SMALL LETTER ZHE; *afii10072, zhecyrillic
+\DeclareTextCommand{\cyrzh}{PU}{\84\066}% U+0436
+% U+0437 CYRILLIC SMALL LETTER ZE; *afii10073, zecyrillic
+\DeclareTextCommand{\cyrz}{PU}{\84\067}% U+0437
+% U+0438 CYRILLIC SMALL LETTER I; *afii10074, iicyrillic
+\DeclareTextCommand{\cyri}{PU}{\84\070}% U+0438
+% U+0439 CYRILLIC SMALL LETTER SHORT I; *afii10075, iishortcyrillic
+\DeclareTextCommand{\cyrishrt}{PU}{\84\071}% U+0439
+\DeclareTextCompositeCommand{\U}{PU}{\cyri}{\84\071}% U+0439
+% U+043A CYRILLIC SMALL LETTER KA; *afii10076, kacyrillic
+\DeclareTextCommand{\cyrk}{PU}{\84\072}% U+043A
+% U+043B CYRILLIC SMALL LETTER EL; *afii10077, elcyrillic
+\DeclareTextCommand{\cyrl}{PU}{\84\073}% U+043B
+% U+043C CYRILLIC SMALL LETTER EM; *afii10078, emcyrillic
+\DeclareTextCommand{\cyrm}{PU}{\84\074}% U+043C
+% U+043D CYRILLIC SMALL LETTER EN; *afii10079, encyrillic
+\DeclareTextCommand{\cyrn}{PU}{\84\075}% U+043D
+% U+043E CYRILLIC SMALL LETTER O; *afii10080, ocyrillic
+\DeclareTextCommand{\cyro}{PU}{\84\076}% U+043E
+% U+043F CYRILLIC SMALL LETTER PE; *afii10081, pecyrillic
+\DeclareTextCommand{\cyrp}{PU}{\84\077}% U+043F
+% U+0440 CYRILLIC SMALL LETTER ER; *afii10082, ercyrillic
+\DeclareTextCommand{\cyrr}{PU}{\84\100}% U+0440
+% U+0441 CYRILLIC SMALL LETTER ES; *afii10083, escyrillic
+\DeclareTextCommand{\cyrs}{PU}{\84\101}% U+0441
+% U+0442 CYRILLIC SMALL LETTER TE; *afii10084, tecyrillic
+\DeclareTextCommand{\cyrt}{PU}{\84\102}% U+0442
+% U+0443 CYRILLIC SMALL LETTER U; *afii10085, ucyrillic
+\DeclareTextCommand{\cyru}{PU}{\84\103}% U+0443
+% U+0444 CYRILLIC SMALL LETTER EF; *afii10086, efcyrillic
+\DeclareTextCommand{\cyrf}{PU}{\84\104}% U+0444
+% U+0445 CYRILLIC SMALL LETTER HA; *afii10087, khacyrillic
+\DeclareTextCommand{\cyrh}{PU}{\84\105}% U+0445
+% U+0446 CYRILLIC SMALL LETTER TSE; *afii10088, tsecyrillic
+\DeclareTextCommand{\cyrc}{PU}{\84\106}% U+0446
+% U+0447 CYRILLIC SMALL LETTER CHE; *afii10089, checyrillic
+\DeclareTextCommand{\cyrch}{PU}{\84\107}% U+0447
+% U+0448 CYRILLIC SMALL LETTER SHA; *afii10090, shacyrillic
+\DeclareTextCommand{\cyrsh}{PU}{\84\110}% U+0448
+% U+0449 CYRILLIC SMALL LETTER SHCHA; *afii10091, shchacyrillic
+\DeclareTextCommand{\cyrshch}{PU}{\84\111}% U+0449
+% U+044A CYRILLIC SMALL LETTER HARD SIGN; *afii10092, hardsigncyrillic
+\DeclareTextCommand{\cyrhrdsn}{PU}{\84\112}% U+044A
+%* \cyrhrdsn -> \hardsign (tipa)
+% U+044B CYRILLIC SMALL LETTER YERU; *afii10093, yericyrillic
+\DeclareTextCommand{\cyrery}{PU}{\84\113}% U+044B
+% U+044C CYRILLIC SMALL LETTER SOFT SIGN; *afii10094, softsigncyrillic
+\DeclareTextCommand{\cyrsftsn}{PU}{\84\114}% U+044C
+%* \cyrsftsn -> \softsign (tipa)
+% U+044D CYRILLIC SMALL LETTER E; *afii10095, ereversedcyrillic
+\DeclareTextCommand{\cyrerev}{PU}{\84\115}% U+044D
+% U+044E CYRILLIC SMALL LETTER YU; *afii10096, iucyrillic
+\DeclareTextCommand{\cyryu}{PU}{\84\116}% U+044E
+% U+044F CYRILLIC SMALL LETTER YA; *afii10097, iacyrillic
+\DeclareTextCommand{\cyrya}{PU}{\84\117}% U+044F
+% U+0450 CYRILLIC SMALL LETTER IE WITH GRAVE
+\DeclareTextCompositeCommand{\`}{PU}{\cyre}{\84\120}% U+0450
+% U+0451 CYRILLIC SMALL LETTER IO; *afii10071, iocyrillic
+\DeclareTextCommand{\cyryo}{PU}{\84\121}% U+0451
+\DeclareTextCompositeCommand{\"}{PU}{\cyre}{\84\121}% U+0451
+% U+0452 CYRILLIC SMALL LETTER DJE; *afii10099, djecyrillic
+\DeclareTextCommand{\cyrdje}{PU}{\84\122}% U+0452
+% U+0453 CYRILLIC SMALL LETTER GJE; *afii10100, gjecyrillic
+\DeclareTextCompositeCommand{\'}{PU}{\cyrg}{\84\123}% U+0453
+% U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE; *afii10101, ecyrillic
+\DeclareTextCommand{\cyrie}{PU}{\84\124}% U+0454
+% U+0455 CYRILLIC SMALL LETTER DZE; *afii10102, dzecyrillic
+\DeclareTextCommand{\cyrdze}{PU}{\84\125}% U+0455
+% U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;
+% *afii10103, icyrillic
+\DeclareTextCommand{\cyrii}{PU}{\84\126}% U+0456
+% U+0457 CYRILLIC SMALL LETTER YI; *afii10104, yicyrillic
+\DeclareTextCommand{\cyryi}{PU}{\84\127}% U+0457
+\DeclareTextCompositeCommand{\"}{PU}{\cyrii}{\84\127}% U+0457
+% U+0458 CYRILLIC SMALL LETTER JE; *afii10105, jecyrillic
+\DeclareTextCommand{\cyrje}{PU}{\84\130}% U+0458
+% U+0459 CYRILLIC SMALL LETTER LJE; *afii10106, ljecyrillic
+\DeclareTextCommand{\cyrlje}{PU}{\84\131}% U+0459
+% U+045A CYRILLIC SMALL LETTER NJE; *afii10107, njecyrillic
+\DeclareTextCommand{\cyrnje}{PU}{\84\132}% U+045A
+% U+045B CYRILLIC SMALL LETTER TSHE; *afii10108, tshecyrillic
+\DeclareTextCommand{\cyrtshe}{PU}{\84\133}% U+045B
+% U+045C CYRILLIC SMALL LETTER KJE; *afii10109, kjecyrillic
+\DeclareTextCompositeCommand{\'}{PU}{\cyrk}{\84\134}% U+045C
+% U+045D CYRILLIC SMALL LETTER I WITH GRAVE
+\DeclareTextCompositeCommand{\`}{PU}{\cyri}{\84\135}% U+045D
+% U+045E CYRILLIC SMALL LETTER SHORT U; *afii10110, ushortcyrillic
+\DeclareTextCommand{\cyrushrt}{PU}{\84\136}% U+045E
+\DeclareTextCompositeCommand{\U}{PU}{\curu}{\84\136}% U+045E
+% U+045F CYRILLIC SMALL LETTER DZHE; *afii10193, dzhecyrillic
+\DeclareTextCommand{\cyrdzhe}{PU}{\84\137}% U+045F
+% U+0460 CYRILLIC CAPITAL LETTER OMEGA; Omegacyrillic
+\DeclareTextCommand{\CYROMEGA}{PU}{\84\140}% U+0460
+% U+0461 CYRILLIC SMALL LETTER OMEGA; omegacyrillic
+\DeclareTextCommand{\cyromega}{PU}{\84\141}% U+0461
+% U+0462 CYRILLIC CAPITAL LETTER YAT; Yatcyrillic, *afii10146
+\DeclareTextCommand{\CYRYAT}{PU}{\84\142}% U+0462
+% U+0463 CYRILLIC SMALL LETTER YAT; *afii10194, yatcyrillic
+\DeclareTextCommand{\cyryat}{PU}{\84\143}% U+0463
+% U+0464 CYRILLIC CAPITAL LETTER IOTIFIED E; Eiotifiedcyrillic
+\DeclareTextCommand{\CYRIOTE}{PU}{\84\144}% U+0464
+% U+0465 CYRILLIC SMALL LETTER IOTIFIED E; eiotifiedcyrillic
+\DeclareTextCommand{\cyriote}{PU}{\84\145}% U+0465
+% U+0466 CYRILLIC CAPITAL LETTER LITTLE YUS; Yuslittlecyrillic
+\DeclareTextCommand{\CYRLYUS}{PU}{\84\146}% U+0466
+% U+0467 CYRILLIC SMALL LETTER LITTLE YUS; yuslittlecyrillic
+\DeclareTextCommand{\cyrlyus}{PU}{\84\147}% U+0467
+% U+0468 CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS; Yuslittleiotifiedcyrillic
+\DeclareTextCommand{\CYRIOTLYUS}{PU}{\84\150}% U+0468
+% U+0469 CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS; yuslittleiotifiedcyrillic
+\DeclareTextCommand{\cyriotlyus}{PU}{\84\151}% U+0469
+% U+046A CYRILLIC CAPITAL LETTER BIG YUS; Yusbigcyrillic
+\DeclareTextCommand{\CYRBYUS}{PU}{\84\152}% U+046A
+% U+046B CYRILLIC SMALL LETTER BIG YUS; yusbigcyrillic
+\DeclareTextCommand{\cyrbyus}{PU}{\84\153}% U+046B
+% U+046C CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS; Yusbigiotifiedcyrillic
+\DeclareTextCommand{\CYRIOTBYUS}{PU}{\84\154}% U+046C
+% U+046D CYRILLIC SMALL LETTER IOTIFIED BIG YUS; yusbigiotifiedcyrillic
+\DeclareTextCommand{\cyriotbyus}{PU}{\84\155}% U+046D
+% U+046E CYRILLIC CAPITAL LETTER KSI; Ksicyrillic
+\DeclareTextCommand{\CYRKSI}{PU}{\84\156}% U+046E
+% U+046F CYRILLIC SMALL LETTER KSI; ksicyrillic
+\DeclareTextCommand{\cyrksi}{PU}{\84\157}% U+046F
+% U+0470 CYRILLIC CAPITAL LETTER PSI; Psicyrillic
+\DeclareTextCommand{\CYRPSI}{PU}{\84\160}% U+0470
+% U+0471 CYRILLIC SMALL LETTER PSI; psicyrillic
+\DeclareTextCommand{\cyrpsi}{PU}{\84\161}% U+0471
+% U+0472 CYRILLIC CAPITAL LETTER FITA; Fitacyrillic, *afii10147
+\DeclareTextCommand{\CYRFITA}{PU}{\84\162}% U+0472
+% U+0473 CYRILLIC SMALL LETTER FITA; *afii10195, fitacyrillic
+\DeclareTextCommand{\cyrfita}{PU}{\84\163}% U+0473
+% U+0474 CYRILLIC CAPITAL LETTER IZHITSA; Izhitsacyrillic, *afii10148
+\DeclareTextCommand{\CYRIZH}{PU}{\84\164}% U+0474
+% U+0475 CYRILLIC SMALL LETTER IZHITSA; *afii10196, izhitsacyrillic
+\DeclareTextCommand{\cyrizh}{PU}{\84\165}% U+0475
+% U+0476 CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE
+% GRAVE ACCENT; Izhitsadblgravecyrillic
+\DeclareTextCompositeCommand{\C}{PU}{\CYRIZH}{\84\166}% U+0476
+% U+0477 CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE
+% GRAVE ACCENT; izhitsadblgravecyrillic
+\DeclareTextCompositeCommand{\C}{PU}{\cyrizh}{\84\167}% U+0477
+% U+0478 CYRILLIC CAPITAL LETTER UK; Ukcyrillic
+\DeclareTextCommand{\CYRUK}{PU}{\84\170}% U+0478
+% U+0479 CYRILLIC SMALL LETTER UK; ukcyrillic
+\DeclareTextCommand{\cyruk}{PU}{\84\171}% U+0479
+% U+047A CYRILLIC CAPITAL LETTER ROUND OMEGA; Omegaroundcyrillic
+\DeclareTextCommand{\CYROMEGARND}{PU}{\84\172}% U+047A
+% U+047B CYRILLIC SMALL LETTER ROUND OMEGA; omegaroundcyrillic
+\DeclareTextCommand{\cyromegarnd}{PU}{\84\173}% U+047B
+% U+047C CYRILLIC CAPITAL LETTER OMEGA WITH TITLO; Omegatitlocyrillic
+\DeclareTextCommand{\CYROMEGATITLO}{PU}{\84\174}% U+047C
+% U+047D CYRILLIC SMALL LETTER OMEGA WITH TITLO; omegatitlocyrillic
+\DeclareTextCommand{\cyromegatitlo}{PU}{\84\175}% U+047D
+% U+047E CYRILLIC CAPITAL LETTER OT; Otcyrillic
+\DeclareTextCommand{\CYROT}{PU}{\84\176}% U+047E
+% U+047F CYRILLIC SMALL LETTER OT; otcyrillic
+\DeclareTextCommand{\cyrot}{PU}{\84\177}% U+047F
+% U+0480 CYRILLIC CAPITAL LETTER KOPPA; Koppacyrillic
+\DeclareTextCommand{\CYRKOPPA}{PU}{\84\200}% U+0480
+% U+0481 CYRILLIC SMALL LETTER KOPPA; koppacyrillic
+\DeclareTextCommand{\cyrkoppa}{PU}{\84\201}% U+0481
+% U+0482 CYRILLIC THOUSANDS SIGN; thousandcyrillic
+\DeclareTextCommand{\cyrthousands}{PU}{\84\202}% U+0482
+% \end{macrocode}
+% |\84\203|: U+0483 COMBINING CYRILLIC TITLO; titlocyrilliccmb\\
+% |\84\204|: U+0484 COMBINING CYRILLIC PALATALIZATION; palatalizationcyrilliccmb\\
+% |\84\205|: U+0485 COMBINING CYRILLIC DASIA PNEUMATA; dasiapneumatacyrilliccmb\\
+% |\84\206|: U+0486 COMBINING CYRILLIC PSILI PNEUMATA; psilipneumatacyrilliccmb\\
+% |\84\207|: U+0487 COMBINING CYRILLIC POKRYTIE\\
+% |\84\210|: U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN\\
+% |\84\211|: U+0489 COMBINING CYRILLIC MILLIONS SIGN
+% \begin{macrocode}
+% U+048A CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+\DeclareTextCommand{\CYRISHRTDSC}{PU}{\84\212}% U+048A
+% U+048B CYRILLIC SMALL LETTER SHORT I WITH TAIL
+\DeclareTextCommand{\cyrishrtdsc}{PU}{\84\213}% U+048B
+% U+048C CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+\DeclareTextCommand{\CYRSEMISFTSN}{PU}{\84\214}% U+048C
+% U+048D CYRILLIC SMALL LETTER SEMISOFT SIGN
+\DeclareTextCommand{\cyrsemisftsn}{PU}{\84\215}% U+048D
+% U+048E CYRILLIC CAPITAL LETTER ER WITH TICK
+\DeclareTextCommand{\CYRRTICK}{PU}{\84\216}% U+048E
+% U+048F CYRILLIC SMALL LETTER ER WITH TICK
+\DeclareTextCommand{\cyrrtick}{PU}{\84\217}% U+048F
+% U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN; Gheupturncyrillic, *afii10050
+\DeclareTextCommand{\CYRGUP}{PU}{\84\220}% U+0490
+% U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN; *afii10098, gheupturncyrillic
+\DeclareTextCommand{\cyrgup}{PU}{\84\221}% U+0491
+% U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE; Ghestrokecyrillic
+\DeclareTextCommand{\CYRGHCRS}{PU}{\84\222}% U+0492
+% U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE; ghestrokecyrillic
+\DeclareTextCommand{\cyrghcrs}{PU}{\84\223}% U+0493
+% U+0494 CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;
+% Ghemiddlehookcyrillic
+\DeclareTextCommand{\CYRGHK}{PU}{\84\224}% U+0494
+% U+0495 CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;
+% ghemiddlehookcyrillic
+\DeclareTextCommand{\cyrghk}{PU}{\84\225}% U+0495
+% U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;
+% Zhedescendercyrillic
+\DeclareTextCommand{\CYRZHDSC}{PU}{\84\226}% U+0496
+% U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER;
+% zhedescendercyrillic
+\DeclareTextCommand{\cyrzhdsc}{PU}{\84\227}% U+0497
+% U+0498 CYRILLIC CAPITAL LETTER ZE WITH DESCENDER; Zedescendercyrillic
+\DeclareTextCommand{\CYRZDSC}{PU}{\84\230}% U+0498
+\DeclareTextCompositeCommand{\c}{PU}{\CYRZ}{\84\230}% U+0498
+% U+0499 CYRILLIC SMALL LETTER ZE WITH DESCENDER; zedescendercyrillic
+\DeclareTextCommand{\cyrzdsc}{PU}{\84\231}% U+0499
+\DeclareTextCompositeCommand{\c}{PU}{\cyrz}{\84\231}% U+0499
+% U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER; Kadescendercyrillic
+\DeclareTextCommand{\CYRKDSC}{PU}{\84\232}% U+049A
+% U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER; kadescendercyrillic
+\DeclareTextCommand{\cyrkdsc}{PU}{\84\233}% U+049B
+% U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;
+% Kaverticalstrokecyrillic
+\DeclareTextCommand{\CYRKVCRS}{PU}{\84\234}% U+049C
+% U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;
+% kaverticalstrokecyrillic
+\DeclareTextCommand{\cyrkvcrs}{PU}{\84\235}% U+049D
+% U+049E CYRILLIC CAPITAL LETTER KA WITH STROKE; Kastrokecyrillic
+\DeclareTextCommand{\CYRKHCRS}{PU}{\84\236}% U+049E
+% U+049F CYRILLIC SMALL LETTER KA WITH STROKE; kastrokecyrillic
+\DeclareTextCommand{\cyrkhcrs}{PU}{\84\237}% U+049F
+% U+04A0 CYRILLIC CAPITAL LETTER BASHKIR KA; Kabashkircyrillic
+\DeclareTextCommand{\CYRKBEAK}{PU}{\84\240}% U+04A0
+% U+04A1 CYRILLIC SMALL LETTER BASHKIR KA; kabashkircyrillic
+\DeclareTextCommand{\cyrkbeak}{PU}{\84\241}% U+04A1
+% U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER; Endescendercyrillic
+\DeclareTextCommand{\CYRNDSC}{PU}{\84\242}% U+04A2
+% U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER; endescendercyrillic
+\DeclareTextCommand{\cyrndsc}{PU}{\84\243}% U+04A3
+% U+04A4 CYRILLIC CAPITAL LIGATURE EN GHE; Enghecyrillic
+\DeclareTextCommand{\CYRNG}{PU}{\84\244}% U+04A4
+% U+04A5 CYRILLIC SMALL LIGATURE EN GHE; enghecyrillic
+\DeclareTextCommand{\cyrng}{PU}{\84\245}% U+04A5
+% U+04A6 CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK; Pemiddlehookcyrillic
+\DeclareTextCommand{\CYRPHK}{PU}{\84\246}% U+04A6
+% U+04A7 CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK; pemiddlehookcyrillic
+\DeclareTextCommand{\cyrphk}{PU}{\84\247}% U+04A7
+% U+04A8 CYRILLIC CAPITAL LETTER ABKHASIAN HA; Haabkhasiancyrillic
+\DeclareTextCommand{\CYRABHHA}{PU}{\84\250}% U+04A8
+% U+04A9 CYRILLIC SMALL LETTER ABKHASIAN HA; haabkhasiancyrillic
+\DeclareTextCommand{\cyrabhha}{PU}{\84\251}% U+04A9
+% U+04AA CYRILLIC CAPITAL LETTER ES WITH DESCENDER; Esdescendercyrillic
+\DeclareTextCommand{\CYRSDSC}{PU}{\84\252}% U+04AA
+\DeclareTextCompositeCommand{\CYRSDSC}{PU}{\CYRS}{\84\252}% U+04AA
+% U+04AB CYRILLIC SMALL LETTER ES WITH DESCENDER; esdescendercyrillic
+\DeclareTextCommand{\cyrsdsc}{PU}{\84\253}% U+04AB
+\DeclareTextCompositeCommand{\k}{PU}{\cyrs}{\84\253}% U+04AB
+% U+04AC CYRILLIC CAPITAL LETTER TE WITH DESCENDER; Tedescendercyrillic
+\DeclareTextCommand{\CYRTDSC}{PU}{\84\254}% U+04AC
+% U+04AD CYRILLIC SMALL LETTER TE WITH DESCENDER; tedescendercyrillic
+\DeclareTextCommand{\cyrtdsc}{PU}{\84\255}% U+04AD
+% U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U; Ustraightcyrillic
+\DeclareTextCommand{\CYRY}{PU}{\84\256}% U+04AE
+% U+04AF CYRILLIC SMALL LETTER STRAIGHT U; ustraightcyrillic
+\DeclareTextCommand{\cyry}{PU}{\84\257}% U+04AF
+% U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE; Ustraightstrokecyrillic
+\DeclareTextCommand{\CYRYHCRS}{PU}{\84\260}% U+04B0
+% U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE; ustraightstrokecyrillic
+\DeclareTextCommand{\cyryhcrs}{PU}{\84\261}% U+04B1
+% U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER; Hadescendercyrillic
+\DeclareTextCommand{\CYRHDSC}{PU}{\84\262}% U+04B2
+% U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER; hadescendercyrillic
+\DeclareTextCommand{\cyrhdsc}{PU}{\84\263}% U+04B3
+% U+04B4 CYRILLIC CAPITAL LIGATURE TE TSE; Tetsecyrillic
+\DeclareTextCommand{\CYRTETSE}{PU}{\84\264}% U+04B4
+% U+04B5 CYRILLIC SMALL LIGATURE TE TSE; tetsecyrillic
+\DeclareTextCommand{\cyrtetse}{PU}{\84\265}% U+04B5
+% U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;
+% Chedescendercyrillic
+\DeclareTextCommand{\CYRCHRDSC}{PU}{\84\266}% U+04B6
+% U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER; chedescendercyrillic
+\DeclareTextCommand{\cyrchrdsc}{PU}{\84\267}% U+04B7
+% U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;
+% Cheverticalstrokecyrillic
+\DeclareTextCommand{\CYRCHVCRS}{PU}{\84\270}% U+04B8
+% U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;
+% cheverticalstrokecyrillic
+\DeclareTextCommand{\cyrchvcrs}{PU}{\84\271}% U+04B9
+% U+04BA CYRILLIC CAPITAL LETTER SHHA; Shhacyrillic
+\DeclareTextCommand{\CYRSHHA}{PU}{\84\272}% U+04BA
+% U+04BB CYRILLIC SMALL LETTER SHHA; shhacyrillic
+\DeclareTextCommand{\cyrshha}{PU}{\84\273}% U+04BB
+% U+04BC CYRILLIC CAPITAL LETTER ABKHASIAN CHE; Cheabkhasiancyrillic
+\DeclareTextCommand{\CYRABHCH}{PU}{\84\274}% U+04BC
+% U+04BD CYRILLIC SMALL LETTER ABKHASIAN CHE; cheabkhasiancyrillic
+\DeclareTextCommand{\cyrabhch}{PU}{\84\275}% U+04BD
+% U+04BE CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER; Chedescenderabkhasiancyrillic
+\DeclareTextCommand{\CYRABHCHDSC}{PU}{\84\276}% U+04BE
+\DeclareTextCompositeCommand{\k}{PU}{\CYRABHCH}{\84\276}% U+04BE
+% U+04BF CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER; chedescenderabkhasiancyrillic
+\DeclareTextCommand{\cyrabhchdsc}{PU}{\84\277}% U+04BF
+\DeclareTextCompositeCommand{\k}{PU}{\cyrabhch}{\84\277}% U+04BF
+% U+04C0 CYRILLIC LETTER PALOCHKA; palochkacyrillic
+\DeclareTextCommand{\CYRpalochka}{PU}{\84\300}% U+04C0
+% U+04C1 CYRILLIC CAPITAL LETTER ZHE WITH BREVE; Zhebrevecyrillic
+\DeclareTextCompositeCommand{\U}{PU}{\CYRZH}{\84\301}% U+04C1
+% U+04C2 CYRILLIC SMALL LETTER ZHE WITH BREVE; zhebrevecyrillic
+\DeclareTextCompositeCommand{\U}{PU}{\cyrzh}{\84\302}% U+04C2
+% U+04C3 CYRILLIC CAPITAL LETTER KA WITH HOOK; Kahookcyrillic
+\DeclareTextCommand{\CYRKHK}{PU}{\84\303}% U+04C3
+% U+04C4 CYRILLIC SMALL LETTER KA WITH HOOK; kahookcyrillic
+\DeclareTextCommand{\cyrkhk}{PU}{\84\304}% U+04C4
+% U+04C5 CYRILLIC CAPITAL LETTER EL WITH TAIL
+\DeclareTextCommand{\CYRLDSC}{PU}{\84\305}% U+04C5
+% U+04C6 CYRILLIC SMALL LETTER EL WITH TAIL
+\DeclareTextCommand{\cyrldsc}{PU}{\84\306}% U+04C6
+% U+04C7 CYRILLIC CAPITAL LETTER EN WITH HOOK; Enhookcyrillic
+\DeclareTextCommand{\CYRNHK}{PU}{\84\307}% U+04C7
+% U+04C8 CYRILLIC SMALL LETTER EN WITH HOOK; enhookcyrillic
+\DeclareTextCommand{\cyrnhk}{PU}{\84\310}% U+04C8
+% U+04CB CYRILLIC CAPITAL LETTER KHAKASSIAN CHE; Chekhakassiancyrillic
+\DeclareTextCommand{\CYRCHLDSC}{PU}{\84\313}% U+04CB
+% U+04CC CYRILLIC SMALL LETTER KHAKASSIAN CHE; chekhakassiancyrillic
+\DeclareTextCommand{\cyrchldsc}{PU}{\84\314}% U+04CC
+% U+04CD CYRILLIC CAPITAL LETTER EM WITH TAIL
+\DeclareTextCommand{\CYRMDSC}{PU}{\84\315}% U+04CD
+% U+04CE CYRILLIC SMALL LETTER EM WITH TAIL
+\DeclareTextCommand{\cyrmdsc}{PU}{\84\316}% U+04CE
+% \end{macrocode}
+% |\84\317|: U+04CF CYRILLIC SMALL LETTER PALOCHKA
+% \begin{macrocode}
+% U+04D0 CYRILLIC CAPITAL LETTER A WITH BREVE; Abrevecyrillic
+\DeclareTextCompositeCommand{\U}{PU}{\CYRA}{\84\320}% U+04D0
+% U+04D1 CYRILLIC SMALL LETTER A WITH BREVE; abrevecyrillic
+\DeclareTextCompositeCommand{\U}{PU}{\cyra}{\84\321}% U+04D1
+% U+04D2 CYRILLIC CAPITAL LETTER A WITH DIAERESIS; Adieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRA}{\84\322}% U+04D2
+% U+04D3 CYRILLIC SMALL LETTER A WITH DIAERESIS; adieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyra}{\84\323}% U+04D3
+% U+04D4 CYRILLIC CAPITAL LIGATURE A IE; Aiecyrillic
+\DeclareTextCommand{\CYRAE}{PU}{\84\324}% U+04D4
+% U+04D5 CYRILLIC SMALL LIGATURE A IE; aiecyrillic
+\DeclareTextCommand{\cyrae}{PU}{\84\325}% U+04D5
+% U+04D6 CYRILLIC CAPITAL LETTER IE WITH BREVE; Iebrevecyrillic
+\DeclareTextCompositeCommand{\U}{PU}{\CYRE}{\84\326}% U+04D6
+% U+04D7 CYRILLIC SMALL LETTER IE WITH BREVE; iebrevecyrillic
+\DeclareTextCompositeCommand{\U}{PU}{\cyre}{\84\327}% U+04D7
+% U+04D8 CYRILLIC CAPITAL LETTER SCHWA; Schwacyrillic
+\DeclareTextCommand{\CYRSCHWA}{PU}{\84\330}% U+04D8
+% U+04D9 CYRILLIC SMALL LETTER SCHWA; *afii10846, schwacyrillic
+\DeclareTextCommand{\cyrschwa}{PU}{\84\331}% U+04D9
+% U+04DA CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;
+% Schwadieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRSCHWA}{\84\332}% U+04DA
+% U+04DB CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;
+% schwadieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyrschwa}{\84\333}% U+04DB
+% U+04DC CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS; Zhedieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRZH}{\84\334}% U+04DC
+% U+04DD CYRILLIC SMALL LETTER ZHE WITH DIAERESIS; zhedieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyrzh}{\84\335}% U+04DD
+% U+04DE CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS; Zedieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRZ}{\84\336}% U+04DE
+% U+04DF CYRILLIC SMALL LETTER ZE WITH DIAERESIS; zedieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyrz}{\84\337}% U+04DF
+% U+04E0 CYRILLIC CAPITAL LETTER ABKHASIAN DZE; Dzeabkhasiancyrillic
+\DeclareTextCommand{\CYRABHDZE}{PU}{\84\340}% U+04E0
+% U+04E1 CYRILLIC SMALL LETTER ABKHASIAN DZE; dzeabkhasiancyrillic
+\DeclareTextCommand{\cyrabhdze}{PU}{\84\341}% U+04E1
+% U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON; Imacroncyrillic
+\DeclareTextCompositeCommand{\=}{PU}{\CYRI}{\84\342}% U+04E2
+% U+04E3 CYRILLIC SMALL LETTER I WITH MACRON; imacroncyrillic
+\DeclareTextCompositeCommand{\=}{PU}{\cyri}{\84\343}% U+04E3
+% U+04E4 CYRILLIC CAPITAL LETTER I WITH DIAERESIS; Idieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRI}{\84\344}% U+04E4
+% U+04E5 CYRILLIC SMALL LETTER I WITH DIAERESIS; idieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyri}{\84\345}% U+04E5
+% U+04E6 CYRILLIC CAPITAL LETTER O WITH DIAERESIS; Odieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRO}{\84\346}% U+04E6
+% U+04E7 CYRILLIC SMALL LETTER O WITH DIAERESIS; odieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyro}{\84\347}% U+04E7
+% U+04E8 CYRILLIC CAPITAL LETTER BARRED O; Obarredcyrillic
+\DeclareTextCommand{\CYROTLD}{PU}{\84\350}% U+04E8
+% U+04E9 CYRILLIC SMALL LETTER BARRED O; obarredcyrillic
+\DeclareTextCommand{\cyrotld}{PU}{\84\351}% U+04E9
+% U+04EA CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;
+% Obarreddieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYROTLD}{\84\352}% U+04EA
+% U+04EB CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;
+% obarreddieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyrotld}{\84\353}% U+04EB
+% U+04EC CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+\DeclareTextCompositeCommand{\"}{PU}{\CYREREV}{\84\354}% U+04EC
+% U+04ED CYRILLIC SMALL LETTER E WITH DIAERESIS
+\DeclareTextCompositeCommand{\"}{PU}{\cyreref}{\84\355}% U+04ED
+% U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON; Umacroncyrillic
+\DeclareTextCompositeCommand{\=}{PU}{\CYRU}{\84\356}% U+04EE
+% U+04EF CYRILLIC SMALL LETTER U WITH MACRON; umacroncyrillic
+\DeclareTextCompositeCommand{\=}{PU}{\cyru}{\84\357}% U+04EF
+% U+04F0 CYRILLIC CAPITAL LETTER U WITH DIAERESIS; Udieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRU}{\84\360}% U+04F0
+% U+04F1 CYRILLIC SMALL LETTER U WITH DIAERESIS; udieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyru}{\84\361}% U+04F1
+% U+04F2 CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE; Uhungarumlautcyrillic
+\DeclareTextCompositeCommand{\H}{PU}{\CYRU}{\84\362}% U+04F2
+% U+04F3 CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE; uhungarumlautcyrillic
+\DeclareTextCompositeCommand{\H}{PU}{\cyru}{\84\363}% U+04F3
+% U+04F4 CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS; Chedieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRCH}{\84\364}% U+04F4
+% U+04F5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS; chedieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyrch}{\84\365}% U+04F5
+% U+04F6 CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+\DeclareTextCommand{\CYRGDSC}{PU}{\84\366}% U+04F6
+% U+04F7 CYRILLIC SMALL LETTER GHE WITH DESCENDER
+\DeclareTextCommand{\cyrgdsc}{PU}{\84\367}% U+04F7
+% U+04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS; Yerudieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\CYRERY}{\84\370}% U+04F8
+% U+04F9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS; yerudieresiscyrillic
+\DeclareTextCompositeCommand{\"}{PU}{\cyrery}{\84\371}% U+04F9
+% \end{macrocode}
+% |\84\372|: U+04FA CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK\\
+% |\84\373|: U+04FB CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+% \begin{macrocode}
+% U+04FC CYRILLIC CAPITAL LETTER HA WITH HOOK
+\DeclareTextCommand{\CYRHHK}{PU}{\84\374}% U+04FC
+% U+04FD CYRILLIC SMALL LETTER HA WITH HOOK
+\DeclareTextCommand{\cyrhhk}{PU}{\84\375}% U+04FD
+% \end{macrocode}
+% |\84\376|: U+04FE CYRILLIC CAPITAL LETTER HA WITH STROKE\\
+% |\84\377|: U+04FF CYRILLIC SMALL LETTER HA WITH STROKE
+%
+% \subsubsection{Hebrew: U+0590 to U+05FF}
+%
+% Macro names are taken from \texttt{he8enc.def}.
+% \begin{macrocode}
+% U+05C3 HEBREW PUNCTUATION SOF PASUQ
+\DeclareTextCommand{\sofpasuq}{PU}{\85\303}% U+05C3
+% U+05D0 HEBREW LETTER ALEF
+\DeclareTextCommand{\hebalef}{PU}{\85\320}% U+05D0
+% U+05D1 HEBREW LETTER BET
+\DeclareTextCommand{\hebbet}{PU}{\85\321}% U+05D1
+% U+05D2 HEBREW LETTER GIMEL
+\DeclareTextCommand{\hebgimel}{PU}{\85\322}% U+05D2
+% U+05D3 HEBREW LETTER DALET
+\DeclareTextCommand{\hebdalet}{PU}{\85\323}% U+05D3
+% U+05D4 HEBREW LETTER HE
+\DeclareTextCommand{\hebhe}{PU}{\85\324}% U+05D4
+% U+05D5 HEBREW LETTER VAV
+\DeclareTextCommand{\hebvav}{PU}{\85\325}% U+05D5
+% U+05D6 HEBREW LETTER ZAYIN
+\DeclareTextCommand{\hebzayin}{PU}{\85\326}% U+05D6
+% U+05D7 HEBREW LETTER HET
+\DeclareTextCommand{\hebhet}{PU}{\85\327}% U+05D7
+% U+05D8 HEBREW LETTER TET
+\DeclareTextCommand{\hebtet}{PU}{\85\330}% U+05D8
+% U+05D9 HEBREW LETTER YOD
+\DeclareTextCommand{\hebyod}{PU}{\85\331}% U+05D9
+% U+05DA HEBREW LETTER FINAL KAF
+\DeclareTextCommand{\hebfinalkaf}{PU}{\85\332}% U+05DA
+% U+05DB HEBREW LETTER KAF
+\DeclareTextCommand{\hebkaf}{PU}{\85\333}% U+05DB
+% U+05DC HEBREW LETTER LAMED
+\DeclareTextCommand{\heblamed}{PU}{\85\334}% U+05DC
+% U+05DD HEBREW LETTER FINAL MEM
+\DeclareTextCommand{\hebfinalmem}{PU}{\85\335}% U+05DD
+% U+05DE HEBREW LETTER MEM
+\DeclareTextCommand{\hebmem}{PU}{\85\336}% U+05DE
+% U+05DF HEBREW LETTER FINAL NUN
+\DeclareTextCommand{\hebfinalnun}{PU}{\85\337}% U+05DF
+% U+05E0 HEBREW LETTER NUN
+\DeclareTextCommand{\hebnun}{PU}{\85\340}% U+05E0
+% U+05E1 HEBREW LETTER SAMEKH
+\DeclareTextCommand{\hebsamekh}{PU}{\85\341}% U+05E1
+% U+05E2 HEBREW LETTER AYIN
+\DeclareTextCommand{\hebayin}{PU}{\85\342}% U+05E2
+% U+05E3 HEBREW LETTER FINAL PE
+\DeclareTextCommand{\hebfinalpe}{PU}{\85\343}% U+05E3
+% U+05E4 HEBREW LETTER PE
+\DeclareTextCommand{\hebpe}{PU}{\85\344}% U+05E4
+% U+05E5 HEBREW LETTER FINAL TSADI
+\DeclareTextCommand{\hebfinaltsadi}{PU}{\85\345}% U+05E5
+% U+05E6 HEBREW LETTER TSADI
+\DeclareTextCommand{\hebtsadi}{PU}{\85\346}% U+05E6
+% U+05E7 HEBREW LETTER QOF
+\DeclareTextCommand{\hebqof}{PU}{\85\347}% U+05E7
+% U+05E8 HEBREW LETTER RESH
+\DeclareTextCommand{\hebresh}{PU}{\85\350}% U+05E8
+% U+05E9 HEBREW LETTER SHIN
+\DeclareTextCommand{\hebshin}{PU}{\85\351}% U+05E9
+%* \hebshin -> \hebsin (he8)
+% U+05EA HEBREW LETTER TAV
+\DeclareTextCommand{\hebtav}{PU}{\85\352}% U+05EA
+% U+05F0 HEBREW LIGATURE YIDDISH DOUBLE VAV
+\DeclareTextCommand{\doublevav}{PU}{\85\360}% U+05F0
+% U+05F1 HEBREW LIGATURE YIDDISH VAV YOD
+\DeclareTextCommand{\vavyod}{PU}{\85\361}% U+05F1
+% U+05F2 HEBREW LIGATURE YIDDISH DOUBLE YOD
+\DeclareTextCommand{\doubleyod}{PU}{\85\362}% U+05F2
+% \end{macrocode}
+%
+% \subsubsection{Thai: U+0E00 to U+0E7F}
+%
+% \begin{macrocode}
+% U+0E3F THAI CURRENCY SYMBOL BAHT; bahtthai
+\DeclareTextCommand{\textbaht}{PU}{\9016\077}% U+0E3F
+% \end{macrocode}
+%
+% \subsubsection{Phonetic Extensions: U+1D00 to U+1D7F}
+%
+% \begin{macrocode}
+% U+1D00 LATIN LETTER SMALL CAPITAL A; \textsca (tipa)
+\DeclareTextCommand{\textsca}{PU}{\9035\000}% U+1D00
+% U+1D05 LATIN LETTER SMALL CAPITAL D; \scd (wsuipa)
+\DeclareTextCommand{\textscd}{PU}{\9035\005}%* U+1D05
+% U+1D07 LATIN LETTER SMALL CAPITAL E; \textsce (tipa)
+\DeclareTextCommand{\textsce}{PU}{\9035\007}% U+1D07
+% U+1D0A LATIN LETTER SMALL CAPITAL J; \textscj (tipa)
+\DeclareTextCommand{\textscj}{PU}{\9035\012}% U+1D0A
+% U+1D0B LATIN LETTER SMALL CAPITAL K; \textsck (tipx)
+\DeclareTextCommand{\textPUsck}{PU}{\9035\013}% U+1D0B
+%* \textPUsck -> \textsck (tipx)
+% U+1D0D LATIN LETTER SMALL CAPITAL M; \textscm (tipx)
+\DeclareTextCommand{\textPUscm}{PU}{\9035\015}% U+1D0D
+%* \textPUscm -> \textscm (tipx)
+% U+1D18 LATIN LETTER SMALL CAPITAL P; \textscp (tipx)
+\DeclareTextCommand{\textPUscp}{PU}{\9035\030}% U+1D18
+%* \textPUscp -> \textscp (tipx)
+% U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R; \textrevscr (tipx)
+\DeclareTextCommand{\textPUrevscr}{PU}{\9035\031}% U+1D19
+%* \textPUrevscr -> \textrevscr (tipx)
+% U+1D1C LATIN LETTER SMALL CAPITAL U; \textscu (tipa), \scu (wsuipa)
+\DeclareTextCommand{\textscu}{PU}{\9035\034}%* U+1D1C
+% U+1D62 LATIN SUBSCRIPT SMALL LETTER I
+\DeclareTextCommand{\textiinferior}{PU}{\9035\142}%* U+1D62
+% U+1D63 LATIN SUBSCRIPT SMALL LETTER R
+\DeclareTextCommand{\textrinferior}{PU}{\9035\143}%* U+1D63
+% U+1D64 LATIN SUBSCRIPT SMALL LETTER U
+\DeclareTextCommand{\textuinferior}{PU}{\9035\144}%* U+1D64
+% U+1D65 LATIN SUBSCRIPT SMALL LETTER V
+\DeclareTextCommand{\textvinferior}{PU}{\9035\145}%* U+1D65
+% U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA
+\DeclareTextCommand{\textbetainferior}{PU}{\9035\146}%* U+1D66
+% U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA
+\DeclareTextCommand{\textgammainferior}{PU}{\9035\147}%* U+1D67
+% U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO
+\DeclareTextCommand{\textrhoinferior}{PU}{\9035\150}%* U+1D68
+% U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI
+\DeclareTextCommand{\textphiinferior}{PU}{\9035\151}%* U+1D69
+% U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI
+\DeclareTextCommand{\textchiinferior}{PU}{\9035\152}%* U+1D6A
+% U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE;
+% \barsci (wsuipa)
+\DeclareTextCommand{\textbarsci}{PU}{\9035\173}%* U+1D7B
+% U+1D7D LATIN SMALL LETTER P WITH STROKE; \barp (wsuipa)
+\DeclareTextCommand{\textbarp}{PU}{\9035\175}%* U+1D7D
+% U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE;
+% \barscu (wsuipa)
+\DeclareTextCommand{\textbarscu}{PU}{\9035\176}%* U+1D7E
+% \end{macrocode}
+%
+% \subsubsection{Phonetic Extensions Supplement: U+1D80 to U+1DBF}
+%
+% \begin{macrocode}
+% U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK; \textrhooka (tipx)
+\DeclareTextCommand{\textPUrhooka}{PU}{\9035\217}% U+1D8F
+%* \textPUrhooka -> \textrhooka (tipx)
+% U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL; \texthtrtaild (tipa)
+\DeclareTextCommand{\texthtrtaild}{PU}{\9035\221}%* U+1D91
+% U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK; \textrhooke (tipx)
+\DeclareTextCommand{\textPUrhooke}{PU}{\9035\222}% U+1D92
+%* \textPUrhooke -> \textrhooke (tipx)
+% U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;
+% \textrhookepsilon (tipx)
+\DeclareTextCommand{\textPUrhookepsilon}{PU}{\9035\223}% U+1D93
+%* \textPUrhookepsilon -> \textrhookepsilon (tipx)
+% U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;
+% \textrhookopeno (tipx)
+\DeclareTextCommand{\textPUrhookopeno}{PU}{\9035\227}% U+1D97
+%* \textPUrhookopeno -> \textrhookopeno (tipx)
+% \end{macrocode}
+%
+% \subsubsection{Latin Extended Additional: U+1E00 to U+1EFF}
+%
+% \begin{macrocode}
+% U+1E00 LATIN CAPITAL LETTER A WITH RING BELOW; Aringbelow
+\DeclareTextCompositeCommand{\textsubring}{PU}{A}{\9036\000}% U+1E00
+% U+1E01 LATIN SMALL LETTER A WITH RING BELOW; aringbelow
+\DeclareTextCompositeCommand{\textsubring}{PU}{a}{\9036\001}% U+1E01
+% U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE; Bdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{B}{\9036\002}% U+1E02
+% U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE; bdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{b}{\9036\003}% U+1E03
+% U+1E04 LATIN CAPITAL LETTER B WITH DOT BELOW; Bdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{B}{\9036\004}% U+1E04
+% U+1E05 LATIN SMALL LETTER B WITH DOT BELOW; bdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{b}{\9036\005}% U+1E05
+% U+1E06 LATIN CAPITAL LETTER B WITH LINE BELOW; Blinebelow
+\DeclareTextCompositeCommand{\b}{PU}{B}{\9036\006}% U+1E06
+% U+1E07 LATIN SMALL LETTER B WITH LINE BELOW; blinebelow
+\DeclareTextCompositeCommand{\b}{PU}{b}{\9036\007}% U+1E07
+% U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE; Ddotaccent
+\DeclareTextCompositeCommand{\.}{PU}{D}{\9036\012}% U+1E0A
+% U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE; ddotaccent
+\DeclareTextCompositeCommand{\.}{PU}{d}{\9036\013}% U+1E0B
+% U+1E0C LATIN CAPITAL LETTER D WITH DOT BELOW; Ddotbelow
+\DeclareTextCompositeCommand{\d}{PU}{D}{\9036\014}% U+1E0C
+% U+1E0D LATIN SMALL LETTER D WITH DOT BELOW; ddotbelow
+\DeclareTextCompositeCommand{\d}{PU}{d}{\9036\015}% U+1E0D
+% U+1E0E LATIN CAPITAL LETTER D WITH LINE BELOW; Dlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{D}{\9036\016}% U+1E0E
+% U+1E0F LATIN SMALL LETTER D WITH LINE BELOW; dlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{d}{\9036\017}% U+1E0F
+% U+1E10 LATIN CAPITAL LETTER D WITH CEDILLA; Dcedilla
+\DeclareTextCompositeCommand{\c}{PU}{D}{\9036\020}% U+1E10
+% U+1E11 LATIN SMALL LETTER D WITH CEDILLA; dcedilla
+\DeclareTextCompositeCommand{\c}{PU}{d}{\9036\021}% U+1E11
+% U+1E12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW; Dcircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{D}{\9036\022}% U+1E12
+% U+1E13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW; dcircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{d}{\9036\023}% U+1E13
+% U+1E14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;
+% Emacrongrave
+\DeclareTextCompositeCommand{\textgravemacron}{PU}{E}{\9036\024}% U+1E14
+% U+1E15 LATIN SMALL LETTER E WITH MACRON AND GRAVE;
+% emacrongrave
+\DeclareTextCompositeCommand{\textgravemacron}{PU}{e}{\9036\025}% U+1E15
+% U+1E16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;
+% Emacronacute
+\DeclareTextCompositeCommand{\textacutemacron}{PU}{E}{\9036\026}% U+1E16
+% U+1E17 LATIN SMALL LETTER E WITH MACRON AND ACUTE;
+% emacronacute
+\DeclareTextCompositeCommand{\textacutemacron}{PU}{e}{\9036\027}% U+1E17
+% U+1E18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW; Ecircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{E}{\9036\030}% U+1E18
+% U+1E19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW; ecircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{e}{\9036\031}% U+1E19
+% U+1E1A LATIN CAPITAL LETTER E WITH TILDE BELOW; Etildebelow
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{E}{\9036\032}% U+1E1A
+% U+1E1B LATIN SMALL LETTER E WITH TILDE BELOW; etildebelow
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{e}{\9036\033}% U+1E1B
+% U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE; Fdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{F}{\9036\036}% U+1E1E
+% U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE; fdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{f}{\9036\037}% U+1E1F
+% U+1E20 LATIN CAPITAL LETTER G WITH MACRON; Gmacron
+\DeclareTextCompositeCommand{\=}{PU}{G}{\9036\040}% U+1E20
+% U+1E21 LATIN SMALL LETTER G WITH MACRON; gmacron
+\DeclareTextCompositeCommand{\=}{PU}{g}{\9036\041}% U+1E21
+% U+1E22 LATIN CAPITAL LETTER H WITH DOT ABOVE; Hdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{H}{\9036\042}% U+1E22
+% U+1E23 LATIN SMALL LETTER H WITH DOT ABOVE; hdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{h}{\9036\043}% U+1E23
+% U+1E24 LATIN CAPITAL LETTER H WITH DOT BELOW; Hdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{H}{\9036\044}% U+1E24
+% U+1E25 LATIN SMALL LETTER H WITH DOT BELOW; hdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{h}{\9036\045}% U+1E25
+% U+1E26 LATIN CAPITAL LETTER H WITH DIAERESIS; Hdieresis
+\DeclareTextCompositeCommand{\"}{PU}{H}{\9036\046}% U+1E26
+% U+1E27 LATIN SMALL LETTER H WITH DIAERESIS; hdieresis
+\DeclareTextCompositeCommand{\"}{PU}{h}{\9036\047}% U+1E27
+% U+1E28 LATIN CAPITAL LETTER H WITH CEDILLA; Hcedilla
+\DeclareTextCompositeCommand{\c}{PU}{H}{\9036\050}% U+1E28
+% U+1E29 LATIN SMALL LETTER H WITH CEDILLA; hcedilla
+\DeclareTextCompositeCommand{\c}{PU}{h}{\9036\051}% U+1E29
+% U+1E2A LATIN CAPITAL LETTER H WITH BREVE BELOW; Hbrevebelow
+\DeclareTextCompositeCommand{\textsubbreve}{PU}{H}{\9036\052}% U+1E2A
+% U+1E2B LATIN SMALL LETTER H WITH BREVE BELOW; hbrevebelow
+\DeclareTextCompositeCommand{\textsubbreve}{PU}{h}{\9036\053}% U+1E2B
+% U+1E2C LATIN CAPITAL LETTER I WITH TILDE BELOW; Itildebelow
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{I}{\9036\054}% U+1E2C
+% U+1E2D LATIN SMALL LETTER I WITH TILDE BELOW; itildebelow
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{i}{\9036\055}% U+1E2D
+% U+1E30 LATIN CAPITAL LETTER K WITH ACUTE; Kacute
+\DeclareTextCompositeCommand{\'}{PU}{K}{\9036\060}% U+1E30
+% U+1E31 LATIN SMALL LETTER K WITH ACUTE; kacute
+\DeclareTextCompositeCommand{\'}{PU}{k}{\9036\061}% U+1E31
+% U+1E32 LATIN CAPITAL LETTER K WITH DOT BELOW; Kdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{K}{\9036\062}% U+1E32
+% U+1E33 LATIN SMALL LETTER K WITH DOT BELOW; kdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{k}{\9036\063}% U+1E33
+% U+1E34 LATIN CAPITAL LETTER K WITH LINE BELOW; Klinebelow
+\DeclareTextCompositeCommand{\b}{PU}{K}{\9036\064}% U+1E34
+% U+1E35 LATIN SMALL LETTER K WITH LINE BELOW; klinebelow
+\DeclareTextCompositeCommand{\b}{PU}{k}{\9036\065}% U+1E35
+% U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW; Ldotbelow
+\DeclareTextCompositeCommand{\d}{PU}{L}{\9036\066}% U+1E36
+% U+1E37 LATIN SMALL LETTER L WITH DOT BELOW; ldotbelow
+\DeclareTextCompositeCommand{\d}{PU}{l}{\9036\067}% U+1E37
+% U+1E3A LATIN CAPITAL LETTER L WITH LINE BELOW; Llinebelow
+\DeclareTextCompositeCommand{\b}{PU}{L}{\9036\072}% U+1E3A
+% U+1E3B LATIN SMALL LETTER L WITH LINE BELOW; llinebelow
+\DeclareTextCompositeCommand{\b}{PU}{l}{\9036\073}% U+1E3B
+% U+1E3C LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW; Lcircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{L}{\9036\074}% U+1E3C
+% U+1E3D LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW; lcircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{l}{\9036\075}% U+1E3D
+% U+1E3E LATIN CAPITAL LETTER M WITH ACUTE; Macute
+\DeclareTextCompositeCommand{\'}{PU}{M}{\9036\076}% U+1E3E
+% U+1E3F LATIN SMALL LETTER M WITH ACUTE; macute
+\DeclareTextCompositeCommand{\'}{PU}{m}{\9036\077}% U+1E3F
+% U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE; Mdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{M}{\9036\100}% U+1E40
+% U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE; mdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{m}{\9036\101}% U+1E41
+% U+1E42 LATIN CAPITAL LETTER M WITH DOT BELOW; Mdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{M}{\9036\102}% U+1E42
+% U+1E43 LATIN SMALL LETTER M WITH DOT BELOW; mdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{m}{\9036\103}% U+1E43
+% U+1E44 LATIN CAPITAL LETTER N WITH DOT ABOVE; Ndotaccent
+\DeclareTextCompositeCommand{\.}{PU}{N}{\9036\104}% U+1E44
+% U+1E45 LATIN SMALL LETTER N WITH DOT ABOVE; ndotaccent
+\DeclareTextCompositeCommand{\.}{PU}{n}{\9036\105}% U+1E45
+% U+1E46 LATIN CAPITAL LETTER N WITH DOT BELOW; Ndotbelow
+\DeclareTextCompositeCommand{\d}{PU}{N}{\9036\106}% U+1E46
+% U+1E47 LATIN SMALL LETTER N WITH DOT BELOW; ndotbelow
+\DeclareTextCompositeCommand{\d}{PU}{n}{\9036\107}% U+1E47
+% U+1E48 LATIN CAPITAL LETTER N WITH LINE BELOW; Nlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{N}{\9036\110}% U+1E48
+% U+1E49 LATIN SMALL LETTER N WITH LINE BELOW; nlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{n}{\9036\111}% U+1E49
+% U+1E4A LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW; Ncircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{N}{\9036\112}% U+1E4A
+% U+1E4B LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW; ncircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{n}{\9036\113}% U+1E4B
+% U+1E50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;
+% Omacrongrave
+\DeclareTextCompositeCommand{\textgravemacron}{PU}{O}{\9036\120}% U+1E50
+% U+1E51 LATIN SMALL LETTER O WITH MACRON AND GRAVE;
+% omacrongrave
+\DeclareTextCompositeCommand{\textgravemacron}{PU}{o}{\9036\121}% U+1E51
+% U+1E52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;
+% Omacronacute
+\DeclareTextCompositeCommand{\textacutemacron}{PU}{O}{\9036\122}% U+1E52
+% U+1E53 LATIN SMALL LETTER O WITH MACRON AND ACUTE;
+% omacronacute
+\DeclareTextCompositeCommand{\textacutemacron}{PU}{o}{\9036\123}% U+1E53
+% U+1E54 LATIN CAPITAL LETTER P WITH ACUTE; Pacute
+\DeclareTextCompositeCommand{\'}{PU}{P}{\9036\124}% U+1E54
+% U+1E55 LATIN SMALL LETTER P WITH ACUTE; pacute
+\DeclareTextCompositeCommand{\'}{PU}{p}{\9036\125}% U+1E55
+% U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE; Pdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{P}{\9036\126}% U+1E56
+% U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE; pdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{p}{\9036\127}% U+1E57
+% U+1E58 LATIN CAPITAL LETTER R WITH DOT ABOVE; Rdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{R}{\9036\130}% U+1E58
+% U+1E59 LATIN SMALL LETTER R WITH DOT ABOVE; rdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{r}{\9036\131}% U+1E59
+% U+1E5A LATIN CAPITAL LETTER R WITH DOT BELOW; Rdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{R}{\9036\132}% U+1E5A
+% U+1E5B LATIN SMALL LETTER R WITH DOT BELOW; rdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{r}{\9036\133}% U+1E5B
+% U+1E5E LATIN CAPITAL LETTER R WITH LINE BELOW; Rlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{R}{\9036\136}% U+1E5E
+% U+1E5F LATIN SMALL LETTER R WITH LINE BELOW; rlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{r}{\9036\137}% U+1E5F
+% U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE; Sdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{S}{\9036\140}% U+1E60
+% U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE; sdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{s}{\9036\141}% U+1E61
+% U+1E62 LATIN CAPITAL LETTER S WITH DOT BELOW; Sdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{S}{\9036\142}% U+1E62
+% U+1E63 LATIN SMALL LETTER S WITH DOT BELOW; sdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{s}{\9036\143}% U+1E63
+% U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE; Tdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{T}{\9036\152}% U+1E6A
+% U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE; tdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{t}{\9036\153}% U+1E6B
+% U+1E6C LATIN CAPITAL LETTER T WITH DOT BELOW; Tdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{T}{\9036\154}% U+1E6C
+% U+1E6D LATIN SMALL LETTER T WITH DOT BELOW; tdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{t}{\9036\155}% U+1E6D
+% U+1E6E LATIN CAPITAL LETTER T WITH LINE BELOW; Tlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{T}{\9036\156}% U+1E6E
+% U+1E6F LATIN SMALL LETTER T WITH LINE BELOW; tlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{t}{\9036\157}% U+1E6F
+% U+1E70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW; Tcircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{T}{\9036\160}% U+1E70
+% U+1E71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW; tcircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{t}{\9036\161}% U+1E71
+% U+1E72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW; Udieresisbelow
+\DeclareTextCompositeCommand{\textsubumlaut}{PU}{U}{\9036\162}% U+1E72
+% U+1E73 LATIN SMALL LETTER U WITH DIAERESIS BELOW; udieresisbelow
+\DeclareTextCompositeCommand{\textsubumlaut}{PU}{u}{\9036\163}% U+1E73
+% U+1E74 LATIN CAPITAL LETTER U WITH TILDE BELOW; Utildebelow
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{U}{\9036\164}% U+1E74
+% U+1E75 LATIN SMALL LETTER U WITH TILDE BELOW; utildebelow
+\DeclareTextCompositeCommand{\textsubtilde}{PU}{u}{\9036\165}% U+1E75
+% U+1E76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW; Ucircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{U}{\9036\166}% U+1E76
+% U+1E77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW; ucircumflexbelow
+\DeclareTextCompositeCommand{\textsubcircum}{PU}{u}{\9036\167}% U+1E77
+% U+1E7C LATIN CAPITAL LETTER V WITH TILDE; Vtilde
+\DeclareTextCompositeCommand{\~}{PU}{V}{\9036\174}% U+1E7C
+% U+1E7D LATIN SMALL LETTER V WITH TILDE; vtilde
+\DeclareTextCompositeCommand{\~}{PU}{v}{\9036\175}% U+1E7D
+% U+1E7E LATIN CAPITAL LETTER V WITH DOT BELOW; Vdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{V}{\9036\176}% U+1E7E
+% U+1E7F LATIN SMALL LETTER V WITH DOT BELOW; vdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{v}{\9036\177}% U+1E7F
+% U+1E80 LATIN CAPITAL LETTER W WITH GRAVE; Wgrave
+\DeclareTextCompositeCommand{\`}{PU}{W}{\9036\200}% U+1E80
+% U+1E81 LATIN SMALL LETTER W WITH GRAVE; wgrave
+\DeclareTextCompositeCommand{\`}{PU}{w}{\9036\201}% U+1E81
+% U+1E82 LATIN CAPITAL LETTER W WITH ACUTE; Wacute
+\DeclareTextCompositeCommand{\'}{PU}{W}{\9036\202}% U+1E82
+% U+1E83 LATIN SMALL LETTER W WITH ACUTE; wacute
+\DeclareTextCompositeCommand{\'}{PU}{w}{\9036\203}% U+1E83
+% U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS; Wdieresis
+\DeclareTextCompositeCommand{\"}{PU}{W}{\9036\204}% U+1E84
+% U+1E85 LATIN SMALL LETTER W WITH DIAERESIS; wdieresis
+\DeclareTextCompositeCommand{\"}{PU}{w}{\9036\205}% U+1E85
+% U+1E86 LATIN CAPITAL LETTER W WITH DOT ABOVE; Wdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{W}{\9036\206}% U+1E86
+% U+1E87 LATIN SMALL LETTER W WITH DOT ABOVE; wdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{w}{\9036\207}% U+1E87
+% U+1E88 LATIN CAPITAL LETTER W WITH DOT BELOW; wdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{W}{\9036\210}% U+1E88
+% U+1E89 LATIN SMALL LETTER W WITH DOT BELOW; wdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{w}{\9036\211}% U+1E89
+% U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE; Xdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{X}{\9036\212}% U+1E8A
+% U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE; xdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{x}{\9036\213}% U+1E8B
+% U+1E8C LATIN CAPITAL LETTER X WITH DIAERESIS; Xdieresis
+\DeclareTextCompositeCommand{\"}{PU}{X}{\9036\214}% U+1E8C
+% U+1E8D LATIN SMALL LETTER X WITH DIAERESIS; xdieresis
+\DeclareTextCompositeCommand{\"}{PU}{x}{\9036\215}% U+1E8D
+% U+1E8E LATIN CAPITAL LETTER Y WITH DOT ABOVE; Ydotaccent
+\DeclareTextCompositeCommand{\.}{PU}{Y}{\9036\216}% U+1E8E
+% U+1E8F LATIN SMALL LETTER Y WITH DOT ABOVE; ydotaccent
+\DeclareTextCompositeCommand{\.}{PU}{y}{\9036\217}% U+1E8F
+% U+1E90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX; Zcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{Z}{\9036\220}% U+1E90
+% U+1E91 LATIN SMALL LETTER Z WITH CIRCUMFLEX; zcircumflex
+\DeclareTextCompositeCommand{\^}{PU}{z}{\9036\221}% U+1E91
+% U+1E92 LATIN CAPITAL LETTER Z WITH DOT BELOW; Zdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{Z}{\9036\222}% U+1E92
+% U+1E93 LATIN SMALL LETTER Z WITH DOT BELOW; zdotbelow
+\DeclareTextCompositeCommand{\d}{PU}{z}{\9036\223}% U+1E93
+% U+1E94 LATIN CAPITAL LETTER Z WITH LINE BELOW; Zlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{Z}{\9036\224}% U+1E94
+% U+1E95 LATIN SMALL LETTER Z WITH LINE BELOW; zlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{z}{\9036\225}% U+1E95
+% U+1E96 LATIN SMALL LETTER H WITH LINE BELOW; hlinebelow
+\DeclareTextCompositeCommand{\b}{PU}{h}{\9036\226}% U+1E96
+% U+1E97 LATIN SMALL LETTER T WITH DIAERESIS; tdieresis
+\DeclareTextCompositeCommand{\"}{PU}{t}{\9036\227}% U+1E97
+% U+1E98 LATIN SMALL LETTER W WITH RING ABOVE; wring
+\DeclareTextCompositeCommand{\r}{PU}{w}{\9036\230}% U+1E98
+% U+1E99 LATIN SMALL LETTER Y WITH RING ABOVE; yring
+\DeclareTextCompositeCommand{\r}{PU}{y}{\9036\231}% U+1E99
+% U+1E9B LATIN SMALL LETTER LONG S WITH DOT ABOVE; slongdotaccent
+\DeclareTextCompositeCommand{\.}{PU}{\textlongs}{\9036\233}% U+1E9B
+% U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW; Adotbelow
+\DeclareTextCompositeCommand{\d}{PU}{A}{\9036\240}% U+1EA0
+% U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW; adotbelow
+\DeclareTextCompositeCommand{\d}{PU}{a}{\9036\241}% U+1EA1
+% U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW; Edotbelow
+\DeclareTextCompositeCommand{\d}{PU}{E}{\9036\270}% U+1EB8
+% U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW; edotbelow
+\DeclareTextCompositeCommand{\d}{PU}{e}{\9036\271}% U+1EB9
+% U+1EBC LATIN CAPITAL LETTER E WITH TILDE; Etilde
+\DeclareTextCompositeCommand{\~}{PU}{E}{\9036\274}% U+1EBC
+% U+1EBD LATIN SMALL LETTER E WITH TILDE; etilde
+\DeclareTextCompositeCommand{\~}{PU}{e}{\9036\275}% U+1EBD
+% U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW; Idotbelow
+\DeclareTextCompositeCommand{\d}{PU}{I}{\9036\312}% U+1ECA
+% U+1ECB LATIN SMALL LETTER I WITH DOT BELOW; idotbelow
+\DeclareTextCompositeCommand{\d}{PU}{i}{\9036\313}% U+1ECB
+% U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW; Odotbelow
+\DeclareTextCompositeCommand{\d}{PU}{O}{\9036\314}% U+1ECC
+% U+1ECD LATIN SMALL LETTER O WITH DOT BELOW; odotbelow
+\DeclareTextCompositeCommand{\d}{PU}{o}{\9036\315}% U+1ECD
+% U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW; Udotbelow
+\DeclareTextCompositeCommand{\d}{PU}{U}{\9036\344}% U+1EE4
+% U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW; udotbelow
+\DeclareTextCompositeCommand{\d}{PU}{u}{\9036\345}% U+1EE5
+% U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE; Ygrave
+\DeclareTextCompositeCommand{\`}{PU}{Y}{\9036\362}% U+1EF2
+% U+1EF3 LATIN SMALL LETTER Y WITH GRAVE; ygrave
+\DeclareTextCompositeCommand{\`}{PU}{y}{\9036\363}% U+1EF3
+% U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW; Ydotbelow
+\DeclareTextCompositeCommand{\d}{PU}{Y}{\9036\364}% U+1EF4
+% U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW; ydotbelow
+\DeclareTextCompositeCommand{\d}{PU}{y}{\9036\365}% U+1EF5
+% U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE; Ytilde
+\DeclareTextCompositeCommand{\~}{PU}{Y}{\9036\370}% U+1EF8
+% U+1EF9 LATIN SMALL LETTER Y WITH TILDE; ytilde
+\DeclareTextCompositeCommand{\~}{PU}{y}{\9036\371}% U+1EF9
+% \end{macrocode}
+%
+% \subsubsection{General Punctuation: U+2000 to U+206F}
+%
+% \begin{macrocode}
+% U+200C ZERO WIDTH NON-JOINER; *afii61664, zerowidthnonjoiner
+\DeclareTextCommand{\textcompwordmark}{PU}{\9040\014}% U+200C
+% U+2013 EN DASH; endash
+\DeclareTextCommand{\textendash}{PU}{\9040\023}% U+2013
+% U+2014 EM DASH; emdash
+\DeclareTextCommand{\textemdash}{PU}{\9040\024}% U+2014
+% U+2016 DOUBLE VERTICAL LINE; dblverticalbar
+\DeclareTextCommand{\textbardbl}{PU}{\9040\026}% U+2016
+%* \textbardbl -> \textdoublevertline (tipa)
+% U+2018 LEFT SINGLE QUOTATION MARK; quoteleft
+\DeclareTextCommand{\textquoteleft}{PU}{\9040\030}% U+2018
+% U+2019 RIGHT SINGLE QUOTATION MARK; quoteright
+\DeclareTextCommand{\textquoteright}{PU}{\9040\031}% U+2019
+% U+201A SINGLE LOW-9 QUOTATION MARK; quotesinglbase
+\DeclareTextCommand{\quotesinglbase}{PU}{\9040\032}% U+201A
+% U+201C LEFT DOUBLE QUOTATION MARK; quotedblleft
+\DeclareTextCommand{\textquotedblleft}{PU}{\9040\034}% U+201C
+% U+201D RIGHT DOUBLE QUOTATION MARK; quotedblright
+\DeclareTextCommand{\textquotedblright}{PU}{\9040\035}% U+201D
+% U+201E DOUBLE LOW-9 QUOTATION MARK; quotedblbase
+\DeclareTextCommand{\quotedblbase}{PU}{\9040\036}% U+201E
+% U+2020 DAGGER; dagger
+\DeclareTextCommand{\textdagger}{PU}{\9040\040}%* U+2020
+%* \textdagger -> \dag (LaTeX)
+% U+2021 DOUBLE DAGGER; daggerdbl; \ddagger (LaTeX)
+\DeclareTextCommand{\textdaggerdbl}{PU}{\9040\041}% U+2021
+%* \textdaggerdbl -> \ddagger (LaTeX)
+%* \textdaggerdbl -> \ddag (LaTeX)
+% U+2022 BULLET; bullet
+\DeclareTextCommand{\textbullet}{PU}{\9040\042}%* U+2022
+% U+2025 TWO DOT LEADER; \hdotfor (MnSymbol)
+\DeclareTextCommand{\texthdotfor}{PU}{\9040\045}%* U+2025
+% U+2026 HORIZONTAL ELLIPSIS; ellipsis
+\DeclareTextCommand{\textellipsis}{PU}{\9040\046}% U+2026
+%* \textellipsis -> \mathellipsis
+% U+2030 PER MILLE SIGN; perthousand
+\DeclareTextCommand{\textperthousand}{PU}{\9040\060}% U+2030
+% U+2031 PER TEN THOUSAND SIGN
+\DeclareTextCommand{\textpertenthousand}{PU}{\9040\061}% U+2031
+% U+2032 PRIME; minute; \prime (MnSymbol)
+\DeclareTextCommand{\textprime}{PU}{\9040\062}%* U+2032
+% U+2033 DOUBLE PRIME; \second (mathabx)
+\DeclareTextCommand{\textsecond}{PU}{\9040\063}%* U+2033
+% U+2034 TRIPLE PRIME; \third (mathabx)
+\DeclareTextCommand{\textthird}{PU}{\9040\064}%* U+2034
+% U+2035 REVERSED PRIME; \backprime (AmS)
+\DeclareTextCommand{\textbackprime}{PU}{\9040\065}%* U+2035
+% U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK; guilsinglleft
+\DeclareTextCommand{\guilsinglleft}{PU}{\9040\071}% U+2039
+% U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK; guilsinglright
+\DeclareTextCommand{\guilsinglright}{PU}{\9040\072}% U+203A
+% U+203B REFERENCE MARK; referencemark
+\DeclareTextCommand{\textreferencemark}{PU}{\9040\073}% U+203B
+% U+203D INTERROBANG
+\DeclareTextCommand{\textinterrobang}{PU}{\9040\075}% U+203D
+% U+2044 FRACTION SLASH; fraction
+\DeclareTextCommand{\textfractionsolidus}{PU}{\9040\104}% U+2044
+% U+2045 LEFT SQUARE BRACKET WITH QUILL
+\DeclareTextCommand{\textlquill}{PU}{\9040\105}% U+2045
+% U+2046 RIGHT SQUARE BRACKET WITH QUILL
+\DeclareTextCommand{\textrquill}{PU}{\9040\106}% U+2046
+% U+2052 COMMERCIAL MINUS SIGN
+\DeclareTextCommand{\textdiscount}{PU}{\9040\122}% U+2052
+% U+2056 THREE DOT PUNCTUATION; \lefttherefore (MnSymbol)
+\DeclareTextCommand{\textlefttherefore}{PU}{\9040\126}%* U+2056
+% U+2057 QUADRUPLE PRIME; \fourth (mathabx)
+\DeclareTextCommand{\textfourth}{PU}{\9040\127}%* U+2057
+% U+2058 FOUR DOT PUNCTUATION; \diamonddots (MnSymbol)
+\DeclareTextCommand{\textdiamonddots}{PU}{\9040\130}%* U+2058
+% \end{macrocode}
+%
+% \subsubsection{Superscripts and Subscripts: U+2070 to U+209F}
+%
+% \begin{macrocode}
+% U+2070 SUPERSCRIPT ZERO; zerosuperior
+\DeclareTextCommand{\textzerosuperior}{PU}{\9040\160}%* U+2070
+% U+2071 SUPERSCRIPT LATIN SMALL LETTER I
+\DeclareTextCommand{\textisuperior}{PU}{\9040\161}%* U+2071
+% U+2074 SUPERSCRIPT FOUR; foursuperior
+\DeclareTextCommand{\textfoursuperior}{PU}{\9040\164}%* U+2074
+% U+2075 SUPERSCRIPT FIVE; fivesuperior
+\DeclareTextCommand{\textfivesuperior}{PU}{\9040\165}%* U+2075
+% U+2076 SUPERSCRIPT SIX; sixsuperior
+\DeclareTextCommand{\textsixsuperior}{PU}{\9040\166}%* U+2076
+% U+2077 SUPERSCRIPT SEVEN; sevensuperior
+\DeclareTextCommand{\textsevensuperior}{PU}{\9040\167}%* U+2077
+% U+2078 SUPERSCRIPT EIGHT; eightsuperior
+\DeclareTextCommand{\texteightsuperior}{PU}{\9040\170}%* U+2078
+% U+2079 SUPERSCRIPT NINE; ninesuperior
+\DeclareTextCommand{\textninesuperior}{PU}{\9040\171}%* U+2079
+% U+207A SUPERSCRIPT PLUS SIGN; plussuperior
+\DeclareTextCommand{\textplussuperior}{PU}{\9040\172}%* U+207A
+% U+207B SUPERSCRIPT MINUS
+\DeclareTextCommand{\textminussuperior}{PU}{\9040\173}%* U+207B
+% U+207C SUPERSCRIPT EQUALS SIGN; equalsuperior
+\DeclareTextCommand{\textequalsuperior}{PU}{\9040\174}%* U+207C
+% U+207D SUPERSCRIPT LEFT PARENTHESIS; parenleftsuperior
+\DeclareTextCommand{\textparenleftsuperior}{PU}{\9040\175}%* U+207D
+% U+207E SUPERSCRIPT RIGHT PARENTHESIS; parenrightsuperior
+\DeclareTextCommand{\textparenrightsuperior}{PU}{\9040\176}%* U+207E
+% U+207F SUPERSCRIPT LATIN SMALL LETTER N; nsuperior
+\DeclareTextCommand{\textnsuperior}{PU}{\9040\177}%* U+207F
+% U+2080 SUBSCRIPT ZERO; zeroinferior
+\DeclareTextCommand{\textzeroinferior}{PU}{\9040\200}%* U+2080
+% U+2081 SUBSCRIPT ONE; oneinferior
+\DeclareTextCommand{\textoneinferior}{PU}{\9040\201}%* U+2081
+% U+2082 SUBSCRIPT TWO; twoinferior
+\DeclareTextCommand{\texttwoinferior}{PU}{\9040\202}%* U+2082
+% U+2083 SUBSCRIPT THREE; threeinferior
+\DeclareTextCommand{\textthreeinferior}{PU}{\9040\203}%* U+2083
+% U+2084 SUBSCRIPT FOUR; fourinferior
+\DeclareTextCommand{\textfourinferior}{PU}{\9040\204}%* U+2084
+% U+2085 SUBSCRIPT FIVE; fiveinferior
+\DeclareTextCommand{\textfiveinferior}{PU}{\9040\205}%* U+2085
+% U+2086 SUBSCRIPT SIX; sixinferior
+\DeclareTextCommand{\textsixinferior}{PU}{\9040\206}%* U+2086
+% U+2087 SUBSCRIPT SEVEN; seveninferior
+\DeclareTextCommand{\textseveninferior}{PU}{\9040\207}%* U+2087
+% U+2088 SUBSCRIPT EIGHT; eightinferior
+\DeclareTextCommand{\texteightinferior}{PU}{\9040\210}%* U+2088
+% U+2089 SUBSCRIPT NINE; nineinferior
+\DeclareTextCommand{\textnineinferior}{PU}{\9040\211}%* U+2089
+% U+208A SUBSCRIPT PLUS SIGN
+\DeclareTextCommand{\textplusinferior}{PU}{\9040\212}%* U+208A
+% U+208B SUBSCRIPT MINUS
+\DeclareTextCommand{\textminusinferior}{PU}{\9040\213}%* U+208B
+% U+208C SUBSCRIPT EQUALS SIGN
+\DeclareTextCommand{\textequalsinferior}{PU}{\9040\214}%* U+208C
+% U+208D SUBSCRIPT LEFT PARENTHESIS; parenleftinferior
+\DeclareTextCommand{\textparenleftinferior}{PU}{\9040\215}%* U+208D
+% U+208E SUBSCRIPT RIGHT PARENTHESIS; parenrightinferior
+\DeclareTextCommand{\textparenrightinferior}{PU}{\9040\216}%* U+208E
+% U+2090 LATIN SUBSCRIPT SMALL LETTER A
+\DeclareTextCommand{\textainferior}{PU}{\9040\220}%* U+2090
+% U+2091 LATIN SUBSCRIPT SMALL LETTER E
+\DeclareTextCommand{\texteinferior}{PU}{\9040\221}%* U+2091
+% U+2092 LATIN SUBSCRIPT SMALL LETTER O
+\DeclareTextCommand{\textoinferior}{PU}{\9040\222}%* U+2092
+% U+2093 LATIN SUBSCRIPT SMALL LETTER X
+\DeclareTextCommand{\textxinferior}{PU}{\9040\223}%* U+2093
+% U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA
+\DeclareTextCommand{\textschwainferior}{PU}{\9040\224}%* U+2094
+% U+2095 LATIN SUBSCRIPT SMALL LETTER H
+\DeclareTextCommand{\texthinferior}{PU}{\9040\225}%* U+2095
+% U+2096 LATIN SUBSCRIPT SMALL LETTER K
+\DeclareTextCommand{\textkinferior}{PU}{\9040\226}%* U+2096
+% U+2097 LATIN SUBSCRIPT SMALL LETTER L
+\DeclareTextCommand{\textlinferior}{PU}{\9040\227}%* U+2097
+% U+2098 LATIN SUBSCRIPT SMALL LETTER M
+\DeclareTextCommand{\textminferior}{PU}{\9040\230}%* U+2098
+% U+2099 LATIN SUBSCRIPT SMALL LETTER N
+\DeclareTextCommand{\textninferior}{PU}{\9040\231}%* U+2099
+% U+209A LATIN SUBSCRIPT SMALL LETTER P
+\DeclareTextCommand{\textpinferior}{PU}{\9040\232}%* U+209A
+% U+209B LATIN SUBSCRIPT SMALL LETTER S
+\DeclareTextCommand{\textsinferior}{PU}{\9040\233}%* U+209B
+% U+209C LATIN SUBSCRIPT SMALL LETTER T
+\DeclareTextCommand{\texttinferior}{PU}{\9040\234}%* U+209C
+% \end{macrocode}
+%
+% \subsubsection{Currency Symbols: U+20A0 to U+20CF}
+%
+% \begin{macrocode}
+% U+20A1 COLON SIGN; *colonmonetary, colonsign
+\DeclareTextCommand{\textcolonmonetary}{PU}{\9040\241}% U+20A1
+% U+20A4 LIRA SIGN; afii08941, *lira
+\DeclareTextCommand{\textlira}{PU}{\9040\244}% U+20A4
+% U+20A6 NAIRA SIGN
+\DeclareTextCommand{\textnaira}{PU}{\9040\246}% U+20A6
+% U+20A7 PESETA SIGN; peseta
+\DeclareTextCommand{\textpeseta}{PU}{\9040\247}% U+20A7
+% U+20A9 WON SIGN; won
+\DeclareTextCommand{\textwon}{PU}{\9040\251}% U+20A9
+% U+20AB DONG SIGN; dong
+\DeclareTextCommand{\textdong}{PU}{\9040\253}% U+20AB
+% U+20AC EURO SIGN; *Euro, euro
+\DeclareTextCommand{\texteuro}{PU}{\9040\254}% U+20AC
+%* \texteuro -> \EurDig (marvosym)
+%* \texteuro -> \EURdig (marvosym)
+%* \texteuro -> \EurHv (marvosym)
+%* \texteuro -> \EURhv (marvosym)
+%* \texteuro -> \EurCr (marvosym)
+%* \texteuro -> \EURcr (marvosym)
+%* \texteuro -> \EurTm (marvosym)
+%* \texteuro -> \EURtm (marvosym)
+%* \texteuro -> \Eur (marvosym)
+% U+20B0 GERMAN PENNY SIGN; \Deleatur (marvosym)
+\DeclareTextCommand{\textDeleatur}{PU}{\9040\260}%* U+20B0
+%* \textDeleatur -> \Denarius (marvosym)
+% U+20B1 PESO SIGN
+\DeclareTextCommand{\textpeso}{PU}{\9040\261}% U+20B1
+% U+20B2 GUARANI SIGN
+\DeclareTextCommand{\textguarani}{PU}{\9040\262}% U+20B2
+% \end{macrocode}
+%
+% \subsubsection{Letterlike Symbols: U+2100 to U+214F}
+%
+% \begin{macrocode}
+% U+2103 DEGREE CELSIUS; centigrade
+\DeclareTextCommand{\textcelsius}{PU}{\9041\003}% U+2103
+% U+210F PLANCK CONSTANT OVER TWO PI; \hslash (AmS)
+\DeclareTextCommand{\texthslash}{PU}{\9041\017}%* U+210F
+% U+2111 BLACK-LETTER CAPITAL I (=imaginary part); Ifraktur; \Im (LaTeX)
+\DeclareTextCommand{\textIm}{PU}{\9041\021}%* U+2111
+% U+2113 SCRIPT SMALL L (=ell, liter); afii61289, lsquare; \ell (LaTeX)
+\DeclareTextCommand{\textell}{PU}{\9041\023}%* U+2113
+% U+2116 NUMERO SIGN; *afii61352, numero
+\DeclareTextCommand{\textnumero}{PU}{\9041\026}% U+2116
+% U+2117 SOUND RECORDING COPYRIGHT
+\DeclareTextCommand{\textcircledP}{PU}{\9041\027}% U+2117
+% U+2118 SCRIPT CAPITAL P (=Weierstrass elliptic function);
+% weierstrass; \wp (LaTeX)
+\DeclareTextCommand{\textwp}{PU}{\9041\030}%* U+2118
+% U+211C BLACK-LETTER CAPITAL R (=real part); Rfraktur; \Re (LaTeX)
+\DeclareTextCommand{\textRe}{PU}{\9041\034}%* U+211C
+% U+211E PRESCRIPTION TAKE; prescription
+\DeclareTextCommand{\textrecipe}{PU}{\9041\036}% U+211E
+% U+2120 SERVICE MARK
+\DeclareTextCommand{\textservicemark}{PU}{\9041\040}% U+2120
+% U+2122 TRADE MARK SIGN; trademark
+\DeclareTextCommand{\texttrademark}{PU}{\9041\042}% U+2122
+% U+2126 OHM SIGN; Ohm, Omega
+\DeclareTextCommand{\textohm}{PU}{\9041\046}% U+2126
+% U+2127 INVERTED OHM SIGN
+\DeclareTextCommand{\textmho}{PU}{\9041\047}%* U+2127
+%* \textmho -> \agemO (wasysym)
+% U+2129 TURNED GREEK SMALL LETTER IOTA; \riota (phonetic)
+\DeclareTextCommand{\textriota}{PU}{\9041\051}%* U+2129
+% U+212B ANGSTROM SIGN; angstrom
+\DeclareTextCommand{\textangstrom}{PU}{\9041\053}% U+212B
+% U+212E ESTIMATED SYMBOL; estimated
+\DeclareTextCommand{\textestimated}{PU}{\9041\056}% U+212E
+%* \textestimated -> \EstimatedSign (marvosym)
+%* \textestimated -> \Ecommerce (marvosym)
+% U+2132 TURNED CAPITAL F; \Finv (AmS)
+\DeclareTextCommand{\textFinv}{PU}{\9041\062}%* U+2132
+% U+2135 ALEF SYMBOL; aleph; \aleph (LaTeX)
+\DeclareTextCommand{\textaleph}{PU}{\9041\065}%* U+2135
+% U+2136 BET SYMBOL; \beth (AmS, MnSymbol)
+\DeclareTextCommand{\textbeth}{PU}{\9041\066}%* U+2136
+% U+2137 GIMEL SYMBOL; \gimel (AmS, MnSymbol)
+\DeclareTextCommand{\textgimel}{PU}{\9041\067}%* U+2137
+% U+2138 DALET SYMBOL; \daleth (AmS, MnSymbol)
+\DeclareTextCommand{\textdaleth}{PU}{\9041\070}%* U+2138
+% U+213B FACSIMILE SIGN; \fax (marvosym)
+\DeclareTextCommand{\textfax}{PU}{\9041\073}%* U+213B
+% U+2141 TURNED SANS-SERIF CAPITAL G (=game); \Game
+\DeclareTextCommand{\textGame}{PU}{\9041\101}%* U+2141
+% U+214B TURNED AMPERSAND; \invamp (txfonts/pxfonts)
+\DeclareTextCommand{\textinvamp}{PU}{\9041\113}% U+214B
+%* \textinvamp -> \bindnasrepma (stmaryrd)
+%* \textinvamp -> \parr (cmll)
+% \end{macrocode}
+%
+% \subsubsection{Number Forms: U+2150 to U+218F}
+%
+% \begin{macrocode}
+% U+2150 VULGAR FRACTION ONE SEVENTH
+\DeclareTextCommand{\textoneseventh}{PU}{\9041\120}% U+2150
+% U+2151 VULGAR FRACTION ONE NINTH
+\DeclareTextCommand{\textoneninth}{PU}{\9041\121}% U+2151
+% U+2152 VULGAR FRACTION ONE TENTH
+\DeclareTextCommand{\textonetenth}{PU}{\9041\122}% U+2152
+% U+2153 VULGAR FRACTION ONE THIRD; onethird
+\DeclareTextCommand{\textonethird}{PU}{\9041\123}% U+2153
+% U+2154 VULGAR FRACTION TWO THIRDS; twothirds
+\DeclareTextCommand{\texttwothirds}{PU}{\9041\124}% U+2154
+% U+2155 VULGAR FRACTION ONE FIFTH
+\DeclareTextCommand{\textonefifth}{PU}{\9041\125}% U+2155
+% U+2156 VULGAR FRACTION TWO FIFTHS
+\DeclareTextCommand{\texttwofifths}{PU}{\9041\126}% U+2156
+% U+2157 VULGAR FRACTION THREE FIFTHS
+\DeclareTextCommand{\textthreefifths}{PU}{\9041\127}% U+2157
+% U+2158 VULGAR FRACTION FOUR FIFTHS
+\DeclareTextCommand{\textfourfifths}{PU}{\9041\130}% U+2158
+% U+2159 VULGAR FRACTION ONE SIXTH
+\DeclareTextCommand{\textonesixth}{PU}{\9041\131}% U+2159
+% U+215A VULGAR FRACTION FIVE SIXTHS
+\DeclareTextCommand{\textfivesixths}{PU}{\9041\132}% U+215A
+% U+215B VULGAR FRACTION ONE EIGHTH; oneeighth
+\DeclareTextCommand{\textoneeighth}{PU}{\9041\133}% U+215B
+% U+215C VULGAR FRACTION THREE EIGHTHS; threeeighths
+\DeclareTextCommand{\textthreeeighths}{PU}{\9041\134}% U+215C
+% U+215D VULGAR FRACTION FIVE EIGHTHS; fiveeighths
+\DeclareTextCommand{\textfiveeighths}{PU}{\9041\135}% U+215D
+% U+215E VULGAR FRACTION SEVEN EIGHTHS; seveneighths
+\DeclareTextCommand{\textseveneighths}{PU}{\9041\136}% U+215E
+% U+2184 LATIN SMALL LETTER REVERSED C
+\DeclareTextCommand{\textrevc}{PU}{\9041\204}% U+2184
+% U+2189 VULGAR FRACTION ZERO THIRDS
+\DeclareTextCommand{\textzerothirds}{PU}{\9041\211}% U+2189
+% \end{macrocode}
+%
+% \subsubsection{Arrows: U+2190 to U+21FF}
+%
+% \begin{macrocode}
+% U+2190 LEFTWARDS ARROW; arrowleft
+\DeclareTextCommand{\textleftarrow}{PU}{\9041\220}%* U+2190
+% U+2191 UPWARDS ARROW; arrowup
+\DeclareTextCommand{\textuparrow}{PU}{\9041\221}%* U+2191
+% U+2192 RIGHTWARDS ARROW; arrowright
+\DeclareTextCommand{\textrightarrow}{PU}{\9041\222}%* U+2192
+%* \textrightarrow -> \MVRightArrow (marvosym)
+%* \textrightarrow -> \MVRightarrow (marvosym)
+% U+2193 DOWNWARDS ARROW; arrowdown
+\DeclareTextCommand{\textdownarrow}{PU}{\9041\223}%* U+2193
+%* \textdownarrow -> \MVArrowDown (marvosym)
+%* \textdownarrow -> \Force (marvosym)
+% U+2194 LEFT RIGHT ARROW; arrowboth; \leftrightarrow (LaTeX)
+\DeclareTextCommand{\textleftrightarrow}{PU}{\9041\224}%* U+2194
+% U+2195 UP DOWN ARROW; arrowupdn; \updownarrow (LaTeX)
+\DeclareTextCommand{\textupdownarrow}{PU}{\9041\225}%* U+2195
+% U+2196 NORTH WEST ARROW; arrowupleft; \nwarrow (LaTeX)
+\DeclareTextCommand{\textnwarrow}{PU}{\9041\226}%* U+2196
+% U+2197 NORTH EAST ARROW; arrowupright; \nearrow (LaTeX)
+\DeclareTextCommand{\textnearrow}{PU}{\9041\227}%* U+2197
+%* \textnearrow -> \textglobrise (tipa)
+% U+2198 SOUTH EAST ARROW; arrowdownright; \searrow (LaTeX)
+\DeclareTextCommand{\textsearrow}{PU}{\9041\230}%* U+2198
+%* \textsearrow -> \textglobfall (tipa)
+% U+2199 SOUTH WEST ARROW; arrowdownleft; \swarrow (LaTeX)
+\DeclareTextCommand{\textswarrow}{PU}{\9041\231}%* U+2199
+% U+219A LEFTWARDS ARROW WITH STROKE; \nleftarrow (AmS)
+\DeclareTextCommand{\textnleftarrow}{PU}{\9041\232}%* U+219A
+% U+219B RIGHTWARDS ARROW WITH STROKE; \nrightarrow (AmS)
+\DeclareTextCommand{\textnrightarrow}{PU}{\9041\233}%* U+219B
+% U+219E LEFTWARDS TWO HEADED ARROW; \twoheadleftarrow (AmS)
+\DeclareTextCommand{\texttwoheadleftarrow}{PU}{\9041\236}%* U+219E
+% \ntwoheadleftarrow (txfonts/pxfonts)
+\DeclareTextCommand{\textntwoheadleftarrow}{PU}{\9041\236\83\070}%* U+219E U+0338
+% U+219F UPWARDS TWO HEADED ARROW; \twoheaduparrow (MnSymbol)
+\DeclareTextCommand{\texttwoheaduparrow}{PU}{\9041\237}%* U+219F
+% U+21A0 RIGHTWARDS TWO HEADED ARROW;
+% \twoheadrightarrow (AmS)
+\DeclareTextCommand{\texttwoheadrightarrow}{PU}{\9041\240}%* U+21A0
+% \ntwoheadrightarrow (txfonts/pxfonts)
+\DeclareTextCommand{\textntwoheadrightarrow}{PU}{\9041\240\83\070}%* U+21A0 U+0338
+% U+21A1 DOWNWARDS TWO HEADED ARROW; \twoheaddownarrow (MnSymbol)
+\DeclareTextCommand{\texttwoheaddownarrow}{PU}{\9041\241}%* U+21A1
+% U+21A2 LEFTWARDS ARROW WITH TAIL; \leftarrowtail (AmS)
+\DeclareTextCommand{\textleftarrowtail}{PU}{\9041\242}%* U+21A2
+% U+21A3 RIGHTWARDS ARROW WITH TAIL; \rightarrowtail (AmS)
+\DeclareTextCommand{\textrightarrowtail}{PU}{\9041\243}%* U+21A3
+% U+21A6 RIGHTWARDS ARROW FROM BAR; \mapsto (LaTeX)
+\DeclareTextCommand{\textmapsto}{PU}{\9041\246}%* U+21A6
+% U+21A9 LEFTWARDS ARROW WITH HOOK; \hookleftarrow (LaTeX)
+\DeclareTextCommand{\texthookleftarrow}{PU}{\9041\251}%* U+21A9
+% U+21AA RIGHTWARDS ARROW WITH HOOK; \hookrightarrow (LaTeX)
+\DeclareTextCommand{\texthookrightarrow}{PU}{\9041\252}%* U+21AA
+% U+21AB LEFTWARDS ARROW WITH LOOP; \looparrowleft (AmS)
+\DeclareTextCommand{\textlooparrowleft}{PU}{\9041\253}%* U+21AB
+% U+21AC RIGHTWARDS ARROW WITH LOOP; \looparrowright (AmS)
+\DeclareTextCommand{\textlooparrowright}{PU}{\9041\254}%* U+21AC
+% U+21AE LEFT RIGHT ARROW WITH STROKE; \nleftrightarrow (AmS)
+\DeclareTextCommand{\textnleftrightarrow}{PU}{\9041\256}%* U+21AE
+% U+21AF DOWNWARDS ZIGZAG ARROW; \lightning (stmaryrd)
+\DeclareTextCommand{\textlightning}{PU}{\9041\257}%* U+21AF
+%* \textlightning -> \Lightning (marvosym)
+% U+21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS;
+% \dlsh (mathabx)
+\DeclareTextCommand{\textdlsh}{PU}{\9041\265}%* U+21B5
+% U+21B6 ANTICLOCKWISE TOP SEMICIRCLE ARROW;
+% \curvearrowleft (AmS)
+\DeclareTextCommand{\textcurvearrowleft}{PU}{\9041\266}%* U+21B6
+% U+21B7 CLOCKWISE TOP SEMICIRCLE ARROW; \curvearrowright (AmS)
+\DeclareTextCommand{\textcurvearrowright}{PU}{\9041\267}%* U+21B7
+% U+21BC LEFTWARDS HARPOON WITH BARB UPWARDS; harpoonleftbarbup;
+% \leftharpoonup (LaTeX)
+\DeclareTextCommand{\textleftharpoonup}{PU}{\9041\274}%* U+21BC
+% U+21BD LEFTWARDS HARPOON WITH BARB DOWNWARDS;
+% \leftharpoondown (LaTeX)
+\DeclareTextCommand{\textleftharpoondown}{PU}{\9041\275}%* U+21BD
+% U+21BE UPWARDS HARPOON WITH BARB RIGHTWARDS;
+% \upharpoonright (AmS)
+\DeclareTextCommand{\textupharpoonright}{PU}{\9041\276}%* U+21BE
+% U+21BF UPWARDS HARPOON WITH BARB LEFTWARDS;
+% \upharpoonleft (AmS)
+\DeclareTextCommand{\textupharpoonleft}{PU}{\9041\277}%* U+21BF
+% U+21C0 RIGHTWARDS HARPOON WITH BARB UPWARDS; harpoonrightbarbup
+% \rightharpoonup (LaTeX)
+\DeclareTextCommand{\textrightharpoonup}{PU}{\9041\300}%* U+21C0
+% U+21C1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS;
+% \rightharpoondown (LaTeX)
+\DeclareTextCommand{\textrightharpoondown}{PU}{\9041\301}%* U+21C1
+% U+21C2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS;
+% \downharpoonright (AmS)
+\DeclareTextCommand{\textdownharpoonright}{PU}{\9041\302}%* U+21C2
+% U+21C3 DOWNWARDS HARPOON WITH BARB LEFTWARDS;
+% \downharpoonleft (AmS)
+\DeclareTextCommand{\textdownharpoonleft}{PU}{\9041\303}%* U+21C3
+% U+21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW;
+% arrowrightoverleft; \rightleftarrows (MnSymbol)
+\DeclareTextCommand{\textrightleftarrows}{PU}{\9041\304}%* U+21C4
+% U+21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW; arrowupleftofdown;
+% \updownarrows (MnSymbol)
+\DeclareTextCommand{\textupdownarrows}{PU}{\9041\305}%* U+21C5
+% U+21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW; arrowleftoverright;
+% \leftrightarrows (AmS)
+\DeclareTextCommand{\textleftrightarrows}{PU}{\9041\306}%* U+21C6
+% U+21C7 LEFTWARDS PAIRED ARROWS; \leftleftarrows (AmS)
+\DeclareTextCommand{\textleftleftarrows}{PU}{\9041\307}%* U+21C7
+% U+21C8 UPWARDS PAIRED ARROWS; \upuparrows (AmS)
+\DeclareTextCommand{\textupuparrows}{PU}{\9041\310}%* U+21C8
+% U+21C9 RIGHTWARDS PAIRED ARROWS; \rightrightarrows (AmS)
+\DeclareTextCommand{\textrightrightarrows}{PU}{\9041\311}%* U+21C9
+% U+21CA DOWNWARDS PAIRED ARROWS; \downdownarrows (AmS)
+\DeclareTextCommand{\textdowndownarrows}{PU}{\9041\312}%* U+21CA
+% U+21CB LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;
+% \leftrightharpoons (AmS);
+\DeclareTextCommand{\textleftrightharpoons}{PU}{\9041\313}%* U+21CB
+% U+21CC RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;
+% \rightleftharpoons (LaTeX, AmS)
+\DeclareTextCommand{\textrightleftharpoons}{PU}{\9041\314}%* U+21CC
+% U+21CD LEFTWARDS DOUBLE ARROW WITH STROKE; arrowleftdblstroke;
+% \nLeftarrow (AmS)
+\DeclareTextCommand{\textnLeftarrow}{PU}{\9041\315}%* U+21CD
+% U+21CE LEFT RIGHT DOUBLE ARROW WITH STROKE; \nLeftrightarrow (AmS)
+\DeclareTextCommand{\textnLeftrightarrow}{PU}{\9041\316}%* U+21CE
+% U+21CF RIGHTWARDS DOUBLE ARROW WITH STROKE; arrowrightdblstroke;
+% \nRightarrow (AmS)
+\DeclareTextCommand{\textnRightarrow}{PU}{\9041\317}%* U+21CF
+% U+21D0 LEFTWARDS DOUBLE ARROW; arrowdblleft, arrowleftdbl;
+% \Leftarrow (LaTeX)
+\DeclareTextCommand{\textLeftarrow}{PU}{\9041\320}%* U+21D0
+% U+21D1 UPWARDS DOUBLE ARROW; arrowdblup; \Uparrow (LaTeX)
+\DeclareTextCommand{\textUparrow}{PU}{\9041\321}%* U+21D1
+% U+21D2 RIGHTWARDS DOUBLE ARROW; arrowdblright, dblarrowright;
+% \Rightarrow (LaTeX)
+\DeclareTextCommand{\textRightarrow}{PU}{\9041\322}%* U+21D2
+%* \textRightarrow -> \Conclusion (marvosym)
+% U+21D3 DOWNWARDS DOUBLE ARROW; arrowdbldown; \Downarrow (LaTeX)
+\DeclareTextCommand{\textDownarrow}{PU}{\9041\323}%* U+21D3
+% U+21D4 LEFT RIGHT DOUBLE ARROW; arrowdblboth;
+% \Leftrightarrow (LaTeX)
+\DeclareTextCommand{\textLeftrightarrow}{PU}{\9041\324}%* U+21D4
+%* textLeftrightarrow -> \Equivalence (marvosym)
+% U+21D5 UP DOWN DOUBLE ARROW; \Updownarrow (LaTeX)
+\DeclareTextCommand{\textUpdownarrow}{PU}{\9041\325}%* U+21D5
+% U+21D6 NORTH WEST DOUBLE ARROW; \Nwarrow (MnSymbol)
+\DeclareTextCommand{\textNwarrow}{PU}{\9041\326}%* U+21D6
+% U+21D7 NORTH EAST DOUBLE ARROW; \Nearrow (MnSymbol)
+\DeclareTextCommand{\textNearrow}{PU}{\9041\327}%* U+21D7
+% U+21D8 SOUTH EAST DOUBLE ARROW; \Searrow (MnSymbol)
+\DeclareTextCommand{\textSearrow}{PU}{\9041\330}%* U+21D8
+% U+21D9 SOUTH WEST DOUBLE ARROW; \Swarrow (MnSymbol)
+\DeclareTextCommand{\textSwarrow}{PU}{\9041\331}%* U+21D9
+% U+21DA LEFTWARDS TRIPLE ARROW; \Lleftarrow (AmS)
+\DeclareTextCommand{\textLleftarrow}{PU}{\9041\332}%* U+21DA
+% U+21DB RIGHTWARDS TRIPLE ARROW; \Rrightarrow (MnSymbol)
+\DeclareTextCommand{\textRrightarrow}{PU}{\9041\333}%* U+21DB
+% U+21DC LEFTWARDS SQUIGGLE ARROW; \leftsquigarrow (mathabx)
+\DeclareTextCommand{\textleftsquigarrow}{PU}{\9041\334}%* U+21DC
+% U+21DD RIGHTWARDS SQUIGGLE ARROW; \rightsquigarrow (mathabx)
+\DeclareTextCommand{\textrightsquigarrow}{PU}{\9041\335}%* U+21DD
+% U+21E0 LEFTWARDS DASHED ARROW; arrowdashleft;
+% \dashleftarrow (AmS)
+\DeclareTextCommand{\textdashleftarrow}{PU}{\9041\340}%* U+21E0
+%* \textdashleftarrow -> \dashedleftarrow (MnSymbol)
+% U+21E1 UPWARDS DASHED ARROW; arrowdashup; \dasheduparrow (MnSymbol)
+\DeclareTextCommand{\textdasheduparrow}{PU}{\9041\341}%* U+21E1
+% U+21E2 RIGHTWARDS DASHED ARROW; arrowdashright; \dashrightarrow (AmS)
+\DeclareTextCommand{\textdashrightarrow}{PU}{\9041\342}%* U+21E2
+%* \textdashrightarrow -> \dashedrightarrow (MnSymbol)
+% U+21E3 DOWNWARDS DASHED ARROW; arrowdashdown; \dasheddownarrow (MnSymbol)
+\DeclareTextCommand{\textdasheddownarrow}{PU}{\9041\343}%* U+21E3
+% U+21E8 RIGHTWARDS WHITE ARROW; \pointer (wasysym)
+\DeclareTextCommand{\textpointer}{PU}{\9041\350}%* U+21E8
+% U+21F5 DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;
+% \downuparrows (MnSymbol)
+\DeclareTextCommand{\textdownuparrows}{PU}{\9041\365}%* U+21F5
+% U+21FD LEFTWARDS OPEN-HEADED ARROW; \leftarrowtriangle (stmaryrd)
+\DeclareTextCommand{\textleftarrowtriangle}{PU}{\9041\375}%* U+21FD
+% U+21FE RIGHTWARDS OPEN-HEADED ARROW; \rightarrowtriangle (stmaryrd)
+\DeclareTextCommand{\textrightarrowtriangle}{PU}{\9041\376}%* U+21FE
+% U+21FF LEFT RIGHT OPEN-HEADED ARROW; \leftrightarrowtriangle (stmaryrd)
+\DeclareTextCommand{\textleftrightarrowtriangle}{PU}{\9041\377}%* U+21FF
+% \end{macrocode}
+%
+% \subsubsection{Mathematical Operators: U+2200 to U+22FF}
+%
+% \begin{macrocode}
+% U+2200 FOR ALL; forall; \forall (LaTeX)
+\DeclareTextCommand{\textforall}{PU}{\9042\000}%* U+2200
+% U+2201 COMPLEMENT; \complement (AmS)
+\DeclareTextCommand{\textcomplement}{PU}{\9042\001}%* U+2201
+% U+2202 PARTIAL DIFFERENTIAL; partialdiff; \partial (LaTeX)
+\DeclareTextCommand{\textpartial}{PU}{\9042\002}%* U+2202
+% U+2203 THERE EXISTS; existential; \exists (LaTeX)
+\DeclareTextCommand{\textexists}{PU}{\9042\003}%* U+2203
+% U+2204 THERE DOES NOT EXIST; \nexists (AmS)
+\DeclareTextCommand{\textnexists}{PU}{\9042\004}%* U+2204
+% U+2205 EMPTY SET; emptyset; \emptyset (LaTeX), \varnothing (AmS)
+\DeclareTextCommand{\textemptyset}{PU}{\9042\005}%* U+2205
+%* \textemptyset -> \varnothing (AmS)
+% U+2206 INCREMENT; increment, Deta; \triangle (LaTeX)
+\DeclareTextCommand{\texttriangle}{PU}{\9042\006}%* U+2206
+% U+2207 NABLA; nabla, gradient; \nabla (LaTeX)
+\DeclareTextCommand{\textnabla}{PU}{\9042\007}%* U+2207
+% U+2208 ELEMENT OF; element; \in (LaTeX)
+\DeclareTextCommand{\textin}{PU}{\9042\010}%* U+2208
+% U+2209 NOT AN ELEMENT OF; notelement, notelementof; \notin (LaTeX)
+\DeclareTextCommand{\textnotin}{PU}{\9042\011}%* U+2209
+% U+220A SMALL ELEMENT OF; \smallin (mathdesign)
+\DeclareTextCommand{\textsmallin}{PU}{\9042\012}%* U+220A
+% U+220B CONTAINS AS MEMBER; suchthat; \ni (LaTeX)
+\DeclareTextCommand{\textni}{PU}{\9042\013}%* U+220B
+%* \textni -> \owns (mathabx)
+% U+220C DOES NOT CONTAIN AS MEMBER; \notowner (mathabx)
+\DeclareTextCommand{\textnotowner}{PU}{\9042\014}%* U+220C
+%* \textnotowner -> \notni (txfonts/pxfonts)
+% U+220D SMALL CONTAINS AS MEMBER; \smallowns (mathdesign)
+\DeclareTextCommand{\textsmallowns}{PU}{\9042\015}%* U+220D
+% U+220F N-ARY PRODUCT; \prod (LaTeX)
+\DeclareTextCommand{\textprod}{PU}{\9042\017}%* U+220F
+% U+2210 N-ARY COPRODUCT; \amalg (LaTeX)
+\DeclareTextCommand{\textamalg}{PU}{\9042\020}%* U+2210
+% U+2211 N-ARY SUMMATION; summation; \sum (LaTeX)
+\DeclareTextCommand{\textsum}{PU}{\9042\021}%* U+2211
+% U+2212 MINUS SIGN; minus
+\DeclareTextCommand{\textminus}{PU}{\9042\022}% U+2212
+% U+2213 MINUS-OR-PLUS SIGN; minusplus; \mp (LaTeX)
+\DeclareTextCommand{\textmp}{PU}{\9042\023}%* U+2213
+% U+2214 DOT PLUS; \dotplus (AmS)
+\DeclareTextCommand{\textdotplus}{PU}{\9042\024}%* U+2214
+% U+2215 DIVISION SLASH; divisionslash; \Divides (marvosym)
+\DeclareTextCommand{\textDivides}{PU}{\9042\025}%* U+2215
+% \DividesNot (marvosym)
+\DeclareTextCommand{\textDividesNot}{PU}{\9042\025\9040\322}%* U+2215 U+20D2
+% U+2216 SET MINUS; \setminus (LaTeX)
+\DeclareTextCommand{\textsetminus}{PU}{\9042\026}%* U+2216
+% U+2217 ASTERISK OPERATOR; asteriskmath; \ast (LaTeX)
+\DeclareTextCommand{\textast}{PU}{\9042\027}%* U+2217
+% U+2218 RING OPERATOR; \circ (LaTeX)
+\DeclareTextCommand{\textcirc}{PU}{\9042\030}%* U+2218
+% U+2219 BULLET OPERATOR; bulletoperator; \bullet (LaTeX)
+\DeclareTextCommand{\textbulletoperator}{PU}{\9042\031}% U+2219
+% U+221A SQUARE ROOT; radical
+\DeclareTextCommand{\textsurd}{PU}{\9042\032}%* U+221A
+% U+221D PROPORTIONAL TO; proportional; \propto (LaTeX)
+\DeclareTextCommand{\textpropto}{PU}{\9042\035}%* U+221D
+%* \textpropto -> \varprop (wasysym)
+% U+221E INFINITY; infinity; \infty (LaTeX)
+\DeclareTextCommand{\textinfty}{PU}{\9042\036}%* U+221E
+% U+2220 ANGLE; angle; \angle (LaTeX)
+\DeclareTextCommand{\textangle}{PU}{\9042\040}%* U+2220
+% U+2221 MEASURED ANGLE; \measuredangle (mathabx, MnSymbol)
+\DeclareTextCommand{\textmeasuredangle}{PU}{\9042\041}%* U+2221
+% U+2222 SPHERICAL ANGLE; \sphericalangle (AmS)
+\DeclareTextCommand{\textsphericalangle}{PU}{\9042\042}%* U+2222
+%* \textsphericalangle -> \varangle (wasysym)
+%* \textsphericalangle -> \Anglesign (marvosym)
+%* \textsphericalangle -> \AngleSign (marvosym)
+% U+2223 DIVIDES; divides; \mid (LaTeX)
+\DeclareTextCommand{\textmid}{PU}{\9042\043}%* U+2223
+% U+2224 DOES NOT DIVIDE; \nmid (AmS)
+\DeclareTextCommand{\textnmid}{PU}{\9042\044}%* U+2224
+%* \textnmid -> \notdivides (mathabx)
+% U+2225 PARALLEL TO; parallel; \parallel (LaTeX)
+\DeclareTextCommand{\textparallel}{PU}{\9042\045}%* U+2225
+% U+2226 NOT PARALLEL TO; notparallel; \nparallel (AmS)
+\DeclareTextCommand{\textnparallel}{PU}{\9042\046}%* U+2226
+%* \textnparallel -> nUpdownline (MnSymbol)
+% U+2227 LOGICAL AND; logicaland; \wedge (LaTeX)
+\DeclareTextCommand{\textwedge}{PU}{\9042\047}%* U+2227
+% \owedge (stmaryrd)
+\DeclareTextCommand{\textowedge}{PU}{\9042\047\9040\335}%* U+2227 U+20DD
+%* \textowedge -> \varowedge (stmaryrd)
+% U+2228 LOGICAL OR; logicalor; \vee (LaTeX)
+\DeclareTextCommand{\textvee}{PU}{\9042\050}%* U+2228
+% \ovee (stmaryrd)
+\DeclareTextCommand{\textovee}{PU}{\9042\050\9040\335}%* U+2228 U+20DD
+%* \textovee -> \varovee (stmaryrd)
+% U+2229 INTERSECTION; intersection; \cap (LaTeX)
+\DeclareTextCommand{\textcap}{PU}{\9042\051}%* U+2229
+% U+222A UNION; union; \cup (LaTeX)
+\DeclareTextCommand{\textcup}{PU}{\9042\052}%* U+222A
+% U+222B INTEGRAL; integral; \int (LaTeX)
+\DeclareTextCommand{\textint}{PU}{\9042\053}%* U+222B
+%* \textint -> \varint (wasysym)
+% U+222C DOUBLE INTEGRAL; dblintegral; \iint (AmS)
+\DeclareTextCommand{\textiint}{PU}{\9042\054}%* U+222C
+% U+222D TRIPLE INTEGRAL; \iiint (AmS)
+\DeclareTextCommand{\textiiint}{PU}{\9042\055}%* U+222D
+% U+222E CONTOUR INTEGRAL; contourintegral; \oint (LaTeX)
+\DeclareTextCommand{\textoint}{PU}{\9042\056}%* U+222E
+%* \textoint -> \varoint (wasysym)
+% U+222F SURFACE INTEGRAL; \oiint (wasysym)
+\DeclareTextCommand{\textoiint}{PU}{\9042\057}%* U+222F
+% U+2232 CLOCKWISE CONTOUR INTEGRAL;
+% \ointclockwise (txfonts/pxfonts)
+\DeclareTextCommand{\textointclockwise}{PU}{\9042\062}%* U+2232
+% U+2233 ANTICLOCKWISE CONTOUR INTEGRAL; \ointctrclockwise (txfonts/pxfonts)
+\DeclareTextCommand{\textointctrclockwise}{PU}{\9042\063}%* U+2233
+% U+2234 THEREFORE; therefore; \therefore (AmS)
+\DeclareTextCommand{\texttherefore}{PU}{\9042\064}%* U+2234
+%* \texttherefore -> uptherefore (MnSymbol)
+% U+2235 BECAUSE; because; \because (AmS)
+\DeclareTextCommand{\textbecause}{PU}{\9042\065}%* U+2235
+%* \textbecause -> \downtherefore (MnSymbol)
+% U+2236 RATIO; \vdotdot (MnSymbol)
+\DeclareTextCommand{\textvdotdot}{PU}{\9042\066}%* U+2236
+% U+2237 PROPORTION; \squaredots (MnSymbol)
+\DeclareTextCommand{\textsquaredots}{PU}{\9042\067}%* U+2237
+% U+2238 DOT MINUS; \dotminus (MnSymbol)
+\DeclareTextCommand{\textdotminus}{PU}{\9042\070}%* U+2238
+%* \textdotminus -> \textdotdiv (mathabx)
+% U+2239 EXCESS; \eqcolon (txfonts/pxfonts)
+\DeclareTextCommand{\texteqcolon}{PU}{\9042\071}%* U+2239
+% U+223C TILDE OPERATOR; similar; \sim (LaTeX)
+\DeclareTextCommand{\textsim}{PU}{\9042\074}%* U+223C
+%* \textsim -> \AC (wasysym)
+% U+223D REVERSED TILDE; reversedtilde; \backsim (AmS)
+\DeclareTextCommand{\textbacksim}{PU}{\9042\075}%* U+223D
+% \nbacksim (txfonts/pxfonts)
+\DeclareTextCommand{\textnbacksim}{PU}{\9042\075\83\070}%* U+223D U+0338
+% U+2240 WREATH PRODUCT; \wr (LaTeX)
+\DeclareTextCommand{\textwr}{PU}{\9042\100}%* U+2240
+%* \textwr -> \wreath (MnSymbol)
+% U+2241 NOT TILDE; \nsim (AmS)
+\DeclareTextCommand{\textnsim}{PU}{\9042\101}%* U+2241
+% U+2242 MINUS TILDE; \eqsim (MnSymbol)
+\DeclareTextCommand{\texteqsim}{PU}{\9042\102}%* U+2242
+% \neqsim (MnSymbol)
+\DeclareTextCommand{\textneqsim}{PU}{\9042\102\83\070}%* U+2242 U+0338
+% U+2243 ASYMPTOTICALLY EQUAL TO; asymptoticallyequal; \simeq (LaTeX)
+\DeclareTextCommand{\textsimeq}{PU}{\9042\103}%* U+2243
+% U+2244 NOT ASYMPTOTICALLY EQUAL TO; \nsimeq (txfonts/pxfonts)
+\DeclareTextCommand{\textnsimeq}{PU}{\9042\104}%* U+2244
+% U+2245 APPROXIMATELY EQUAL TO; approximatelyequal; \cong (LaTeX)
+\DeclareTextCommand{\textcong}{PU}{\9042\105}%* U+2245
+% U+2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;
+% \ncong (AmS)
+\DeclareTextCommand{\textncong}{PU}{\9042\107}%* U+2247
+% U+2248 ALMOST EQUAL TO; approxequal; \approx (LaTeX)
+\DeclareTextCommand{\textapprox}{PU}{\9042\110}%* U+2248
+% U+2249 NOT ALMOST EQUAL TO; \napprox (txfonts/pxfonts0
+\DeclareTextCommand{\textnapprox}{PU}{\9042\111}%* U+2249
+%* \textnapprox -> \nthickapprox (txfonts/pxfonts)
+% U+224A ALMOST EQUAL OR EQUAL TO; \approxeq (AmS)
+\DeclareTextCommand{\textapproxeq}{PU}{\9042\112}%* U+224A
+% \napproxeq (txfonts/pxfonts)
+\DeclareTextCommand{\textnapproxeq}{PU}{\9042\112\83\070}%* U+224A U+0338
+% U+224B TRIPLE TILDE; \triplesim (MnSymbol)
+\DeclareTextCommand{\texttriplesim}{PU}{\9042\113}%* U+224B
+%* \texttriplesim -> \VHF (wasysym)
+% \ntriplesim (MnSymbol)
+\DeclareTextCommand{\textntriplesim}{PU}{\9042\113\83\070}%* U+224B U+0338
+% U+224C ALL EQUAL TO; allequal; \backcong (MnSymbol)
+\DeclareTextCommand{\textbackcong}{PU}{\9042\114}%* U+224C
+% \nbackcong (MnSymbol)
+\DeclareTextCommand{\textnbackcong}{PU}{\9042\114\83\070}%* U+224C U+0338
+% U+224D EQUIVALENT TO; \asymp (LaTeX)
+\DeclareTextCommand{\textasymp}{PU}{\9042\115}%* U+224D
+% \nasymp (txfonts/pxfonts)
+\DeclareTextCommand{\textnasymp}{PU}{\9042\115\83\070}%* U+224D U+0338
+%* \textnasymp -> \notasymp (mathabx)
+% U+224E GEOMETRICALLY EQUIVALENT TO; \Bumpeq (AmS)
+\DeclareTextCommand{\textBumpeq}{PU}{\9042\116}%* U+224E
+% \nBumpeq (txfonts/pxfonts)
+\DeclareTextCommand{\textnBumpeq}{PU}{\9042\116\83\070}%* U+224E U+0338
+% U+224F DIFFERENCE BETWEEN; \bumpeq (AmS)
+\DeclareTextCommand{\textbumpeq}{PU}{\9042\117}%* U+224F
+% \nbumpeq (txfonts/pxfonts)
+\DeclareTextCommand{\textnbumpeq}{PU}{\9042\117\83\070}%* U+224F U+0338
+% U+2250 APPROACHES THE LIMIT; approaches; \doteq (LaTeX)
+\DeclareTextCommand{\textdoteq}{PU}{\9042\120}%* U+2250
+% \ndoteq (MnSymbol)
+\DeclareTextCommand{\textndoteq}{PU}{\9042\120\83\070}%* U+2250 U+0338
+% U+2251 GEOMETRICALLY EQUAL TO; geometricallyequal;
+% \doteqdot (AmS)
+\DeclareTextCommand{\textdoteqdot}{PU}{\9042\121}%* U+2251
+%* \textdoteqdot -> \Doteq (MnSymbol)
+% \nDoteq (MnSymbol)
+\DeclareTextCommand{\textnDoteq}{PU}{\9042\121\83\070}%* U+2251 U+0338
+% U+2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF; approxequalorimage;
+% \fallingdotseq (AmS)
+\DeclareTextCommand{\textfallingdoteq}{PU}{\9042\122}%* U+2252
+% \nfallingdotseq (MnSymbol)
+\DeclareTextCommand{\textnfallingdoteq}{PU}{\9042\122\83\070}%* U+2252 U+0338
+% U+2253 IMAGE OF OR APPROXIMATELY EQUAL TO; imageorapproximatelyequal;
+% \risingdotseq (AmS)
+\DeclareTextCommand{\textrisingdoteq}{PU}{\9042\123}%* U+2253
+% \nrisingdoteq (MnSymbol)
+\DeclareTextCommand{\textnrisingdoteq}{PU}{\9042\123\83\070}%* U+2253 U+0338
+% U+2254 COLON EQUALS; \colonequals (colonequals)
+\DeclareTextCommand{\textcolonequals}{PU}{\9042\124}%* U+2254
+% U+2255 EQUALS COLON; \equalscolon (colonequals)
+\DeclareTextCommand{\textequalscolon}{PU}{\9042\125}%* U+2255
+% U+2256 RING IN EQUAL TO; \eqcirc (AmS)
+\DeclareTextCommand{\texteqcirc}{PU}{\9042\126}%* U+2256
+% \neqcirc (MnSymbol)
+\DeclareTextCommand{\textneqcirc}{PU}{\9042\126\83\070}%* U+2256 U+0338
+% U+2257 RING EQUAL TO; \circeq (AmS)
+\DeclareTextCommand{\textcirceq}{PU}{\9042\127}%* U+2257
+% \ncirceq (MnSymbol)
+\DeclareTextCommand{\textncirceq}{PU}{\9042\127\83\070}%* U+2257 U+0338
+% U+2259 ESTIMATES; \hateq (MnSymbol)
+\DeclareTextCommand{\texthateq}{PU}{\9042\131}%* U+2259
+%* \texthateq -> \corresponds (mathabx)
+%* \texthateq -> \Corresponds (marvosym)
+% \nhateq (MnSymbol)
+\DeclareTextCommand{\textnhateq}{PU}{\9042\131\83\070}%* U+2259 U+0338
+% U+225C DELTA EQUAL TO; \triangleeq (AmS)
+\DeclareTextCommand{\texttriangleeq}{PU}{\9042\134}%* U+225C
+% U+2260 NOT EQUAL TO; notequal; \ne (LaTeX), \neq (LaTeX)
+\DeclareTextCommand{\textneq}{PU}{\9042\140}%* U+2260
+\DeclareTextCommand{\textne}{PU}{\9042\140}%* U+2260
+%* \textneq -> \nequal (MnSymbol)
+% U+2261 IDENTICAL TO; equivalence; \equiv (LaTeX)
+\DeclareTextCommand{\textequiv}{PU}{\9042\141}%* U+2261
+%* \textequiv -> \Congruent (marvosym)
+% U+2262 NOT IDENTICAL TO; notidentical; \nequiv (txfonts/pxfonts)
+\DeclareTextCommand{\textnequiv}{PU}{\9042\142}%* U+2262
+%* \textnequiv -> \NotCongruent (marvosym)
+%* \textnequiv -> \notequiv (mathabx)
+% U+2264 LESS-THAN OR EQUAL TO; lessequal; \le (LaTeX), \leq (LaTeX)
+\DeclareTextCommand{\textleq}{PU}{\9042\144}%* U+2264
+\DeclareTextCommand{\textle}{PU}{\9042\144}%* U+2264
+%* \textleq -> \LessOrEqual (marvosym)
+% U+2265 GREATER-THAN OR EQUAL TO; greaterequal;
+% \ge (LaTeX), \geq (LaTeX)
+\DeclareTextCommand{\textgeq}{PU}{\9042\145}%* U+2265
+\DeclareTextCommand{\textge}{PU}{\9042\145}%* U+2265
+%* \textgeq -> \LargerOrEqual (marvosym)
+% U+2266 LESS-THAN OVER EQUAL TO; lessoverequal; \leqq (AmS)
+\DeclareTextCommand{\textleqq}{PU}{\9042\146}%* U+2266
+% \nleqq (txfonts/pxfonts)
+\DeclareTextCommand{\textnleqq}{PU}{\9042\146\83\070}%* U+2266 U+0338
+% U+2267 GREATER-THAN OVER EQUAL TO; greateroverequal; \geqq (AmS)
+\DeclareTextCommand{\textgeqq}{PU}{\9042\147}%* U+2267
+% \ngeqq (txfonts/pxfonts)
+\DeclareTextCommand{\textngeqq}{PU}{\9042\147\83\070}%* U+2267 U+0338
+% U+2268 LESS-THAN BUT NOT EQUAL TO; \lneqq (AmS)
+\DeclareTextCommand{\textlneqq}{PU}{\9042\150}%* U+2268
+% U+2269 GREATER-THAN BUT NOT EQUAL TO; \gneqq (AmS)
+\DeclareTextCommand{\textgneqq}{PU}{\9042\151}%* U+2269
+% U+226A MUCH LESS-THAN; muchless; \ll (LaTeX)
+\DeclareTextCommand{\textll}{PU}{\9042\152}%* U+226A
+% \nll (txfonts/pxfonts)
+\DeclareTextCommand{\textnll}{PU}{\9042\152\83\070}%* U+226A U+0338
+% U+226B MUCH GREATER-THAN; muchgreater; \gg (LaTeX)
+\DeclareTextCommand{\textgg}{PU}{\9042\153}%* U+226B
+% \ngg (txfonts/pxfonts)
+\DeclareTextCommand{\textngg}{PU}{\9042\153\83\070}%* U+226B U+0338
+% U+226C BETWEEN; \between (AmS)
+\DeclareTextCommand{\textbetween}{PU}{\9042\154}%* U+226C
+% U+226E NOT LESS-THAN; notless; \nless (AmS)
+\DeclareTextCommand{\textnless}{PU}{\9042\156}%* U+226E
+% U+226F NOT GREATER-THAN; notgreater; \ngtr (AmS)
+\DeclareTextCommand{\textngtr}{PU}{\9042\157}%* U+226F
+% U+2270 NEITHER LESS-THAN NOR EQUAL TO; notlessnorequal;
+% \nleq (AmS)
+\DeclareTextCommand{\textnleq}{PU}{\9042\160}%* U+2270
+% U+2271 NEITHER GREATER-THAN NOR EQUAL TO; notgreaternorequal; \ngeq (AmS)
+\DeclareTextCommand{\textngeq}{PU}{\9042\161}%* U+2271
+% U+2272 LESS-THAN OR EQUIVALENT TO; lessorequivalent; \lesssim (AmS)
+\DeclareTextCommand{\textlesssim}{PU}{\9042\162}%* U+2272
+%* \textlesssim -> \apprle (wasysym)
+% U+2273 GREATER-THAN OR EQUIVALENT TO; greaterorequivalent; \gtrsim (AmS)
+\DeclareTextCommand{\textgtrsim}{PU}{\9042\163}%* U+2273
+%* \textgtrsim -> \apprge (wasysym)
+% U+2274 NEITHER LESS-THAN NOR EQUIVALENT TO; \nlesssim (txfonts/pxfonts)
+\DeclareTextCommand{\textnlesssim}{PU}{\9042\164}%* U+2274
+% U+2275 NEITHER GREATER-THAN NOR EQUIVALENT TO; \ngtrsim (txfonts/pxfonts)
+\DeclareTextCommand{\textngtrsim}{PU}{\9042\165}%* U+2275
+% U+2276 LESS-THAN OR GREATER-THAN; lessorgreater; \lessgtr (AmS)
+\DeclareTextCommand{\textlessgtr}{PU}{\9042\166}%* U+2276
+% U+2277 GREATER-THAN OR LESS-THAN; greaterorless; \gtrless (AmS)
+\DeclareTextCommand{\textgtrless}{PU}{\9042\167}%* U+2277
+% U+2278 NEITHER LESS-THAN NOR GREATER-THAN; \ngtrless (txfonts/pxfonts)
+\DeclareTextCommand{\textngtrless}{PU}{\9042\170}%* U+2278
+% U+2279 NEITHER GREATER-THAN NOR LESS-THAN; \nlessgtr (txfonts/pxfonts)
+\DeclareTextCommand{\textnlessgtr}{PU}{\9042\171}%* U+2279
+% U+227A PRECEDES; precedes; \prec (LaTeX)
+\DeclareTextCommand{\textprec}{PU}{\9042\172}%* U+227A
+% U+227B SUCCEEDS; succeeds; \succ (LaTeX)
+\DeclareTextCommand{\textsucc}{PU}{\9042\173}%* U+227B
+% U+227C PRECEDES OR EQUAL TO; \preccurlyeq (AmS)
+\DeclareTextCommand{\textpreccurlyeq}{PU}{\9042\174}%* U+227C
+% U+227D SUCCEEDS OR EQUAL TO; \succcurlyeq (AmS)
+\DeclareTextCommand{\textsucccurlyeq}{PU}{\9042\175}%* U+227D
+% U+227E PRECEDES OR EQUIVALENT TO; \precsim (AmS)
+\DeclareTextCommand{\textprecsim}{PU}{\9042\176}%* U+227E
+% \nprecsim (txfonts/pxfonts)
+\DeclareTextCommand{\textnprecsim}{PU}{\9042\176\83\070}%* U+227E U+0338
+% U+227F SUCCEEDS OR EQUIVALENT TO; \succsim (AmS)
+\DeclareTextCommand{\textsuccsim}{PU}{\9042\177}%* U+227F
+% \nsuccsim (txfonts/pxfonts)
+\DeclareTextCommand{\textnsuccsim}{PU}{\9042\177\83\070}%* U+227F U+0338
+% U+2280 DOES NOT PRECEDE; notprecedes; \nprec (AmS)
+\DeclareTextCommand{\textnprec}{PU}{\9042\200}%* U+2280
+% U+2281 DOES NOT SUCCEED; notsucceeds; \nsucc (AmS)
+\DeclareTextCommand{\textnsucc}{PU}{\9042\201}%* U+2281
+% U+2282 SUBSET OF; propersubset; \subset (LaTeX)
+\DeclareTextCommand{\textsubset}{PU}{\9042\202}%* U+2282
+% U+2283 SUPERSET OF; propersuperset; \supset (LaTeX)
+\DeclareTextCommand{\textsupset}{PU}{\9042\203}%* U+2283
+% U+2284 NOT A SUBSET OF; notsubset; \nsubset (mathabx)
+\DeclareTextCommand{\textnsubset}{PU}{\9042\204}%* U+2284
+% U+2285 NOT A SUPERSET OF; notsuperset; \nsupset (mathabx)
+\DeclareTextCommand{\textnsupset}{PU}{\9042\205}%* U+2285
+% U+2286 SUBSET OF OR EQUAL TO; reflexsubset; \subseteq (LaTeX)
+\DeclareTextCommand{\textsubseteq}{PU}{\9042\206}%* U+2286
+% U+2287 SUPERSET OF OR EQUAL TO; reflexsuperset; \supseteq (LaTeX)
+\DeclareTextCommand{\textsupseteq}{PU}{\9042\207}%* U+2287
+% U+2288 NEITHER A SUBSET OF NOR EQUAL TO; \nsubseteq (AmS)
+\DeclareTextCommand{\textnsubseteq}{PU}{\9042\210}%* U+2288
+% U+2289 NEITHER A SUPERSET OF NOR EQUAL TO; \nsupseteq (AmS)
+\DeclareTextCommand{\textnsupseteq}{PU}{\9042\211}%* U+2289
+% U+228A SUBSET OF WITH NOT EQUAL TO; subsetnotequal; \subsetneq (AmS)
+\DeclareTextCommand{\textsubsetneq}{PU}{\9042\212}%* U+228A
+% U+228B SUPERSET OF WITH NOT EQUAL TO; supersetnotequal; \supsetneq (AmS)
+\DeclareTextCommand{\textsupsetneq}{PU}{\9042\213}%* U+228B
+% U+228D MULTISET MULTIPLICATION; \cupdot (MnSymbol)
+\DeclareTextCommand{\textcupdot}{PU}{\9042\215}%* U+228D
+% U+228E MULTISET UNION; \cupplus (MnSymbol)
+\DeclareTextCommand{\textcupplus}{PU}{\9042\216}%* U+228E
+% U+228F SQUARE IMAGE OF; \sqsubset (latexsym, ...)
+\DeclareTextCommand{\textsqsubset}{PU}{\9042\217}%* U+228F
+% \nsqsubset (txfonts/pxfonts)
+\DeclareTextCommand{\textnsqsubset}{PU}{\9042\217\83\070}%* U+228F U+0338
+% U+2290 SQUARE ORIGINAL OF; \sqsupset (latexsym, ...)
+\DeclareTextCommand{\textsqsupset}{PU}{\9042\220}%* U+2290
+% \nsqsupset (txfonts/pxfonts)
+\DeclareTextCommand{\textnsqsupset}{PU}{\9042\220\83\070}%* U+2290 U+0338
+% U+2291 SQUARE IMAGE OF OR EQUAL TO; \sqsubseteq (LaTeX)
+\DeclareTextCommand{\textsqsubseteq}{PU}{\9042\221}%* U+2291
+% \nsqsubseteq (txfonts/pxfonts)
+\DeclareTextCommand{\textnsqsubseteq}{PU}{\9042\221\83\070}%* U+2291 U+0338
+% U+2292 SQUARE ORIGINAL OF OR EQUAL TO; \sqsupseteq (LaTeX)
+\DeclareTextCommand{\textsqsupseteq}{PU}{\9042\222}%* U+2292
+% \nsqsupseteq (txfonts/pxfonts)
+\DeclareTextCommand{\textnsqsupseteq}{PU}{\9042\222\83\070}%* U+2292 U+0338
+% U+2293 SQUARE CAP; \sqcap (LaTeX)
+\DeclareTextCommand{\textsqcap}{PU}{\9042\223}%* U+2293
+% U+2294 SQUARE CUP; \sqcup (LaTeX)
+\DeclareTextCommand{\textsqcup}{PU}{\9042\224}%* U+2294
+% U+2295 CIRCLED PLUS; circleplus; \oplus (LaTeX)
+\DeclareTextCommand{\textoplus}{PU}{\9042\225}%* U+2295
+%* \textoplus -> \varoplus (stmaryrd)
+% U+2296 CIRCLED MINUS; minuscircle; \ominus (LaTeX)
+\DeclareTextCommand{\textominus}{PU}{\9042\226}%* U+2296
+%* \textominus -> \varominus (stmaryrd)
+% U+2297 CIRCLED TIMES; circlemultiply; \otimes (LaTeX)
+\DeclareTextCommand{\textotimes}{PU}{\9042\227}%* U+2297
+%* \textotimes -> \varotimes (stmaryrd)
+% U+2298 CIRCLED DIVISION SLASH; \oslash (LaTeX)
+\DeclareTextCommand{\textoslash}{PU}{\9042\230}%* U+2298
+%* \textoslash -> \varoslash (stmaryrd)
+% U+2299 CIRCLED DOT OPERATOR; circle(d?)ot; \odot (LaTeX)
+\DeclareTextCommand{\textodot}{PU}{\9042\231}%* U+2299
+%* \textodot -> \varodot (stmaryrd)
+% U+229A CIRCLED RING OPERATOR; \circledcirc (AmS)
+\DeclareTextCommand{\textcircledcirc}{PU}{\9042\232}%* U+229A
+%* \textcircledcirc -> \ocirc (mathabx)
+%* \textcircledcirc -> \varocircle (stmaryrd)
+% U+229B CIRCLED ASTERISK OPERATOR; \circledast (AmS)
+\DeclareTextCommand{\textcircledast}{PU}{\9042\233}%* U+229B
+%* \textcircledast -> \varoast (stmaryrd)
+%* \textcircledast -> \oasterisk (mathabx)
+% U+229D CIRCLED DASH; \circleddash (AmS)
+\DeclareTextCommand{\textcircleddash}{PU}{\9042\235}%* U+229D
+% U+229E SQUARED PLUS; \boxplus (AmS)
+\DeclareTextCommand{\textboxplus}{PU}{\9042\236}%* U+229E
+% U+229F SQUARED MINUS; \boxminus (AmS)
+\DeclareTextCommand{\textboxminus}{PU}{\9042\237}%* U+229F
+% U+22A0 SQUARED TIMES; \boxtimes (AmS)
+\DeclareTextCommand{\textboxtimes}{PU}{\9042\240}%* U+22A0
+% U+22A1 SQUARED DOT OPERATOR; \boxdot (AmS)
+\DeclareTextCommand{\textboxdot}{PU}{\9042\241}%* U+22A1
+% U+22A2 RIGHT TACK; \vdash (LaTeX)
+\DeclareTextCommand{\textvdash}{PU}{\9042\242}%* U+22A2
+%* \textvdash -> \rightvdash (MnSymbol)
+% U+22A3 LEFT TACK; tackleft; \dashv (LaTeX)
+\DeclareTextCommand{\textdashv}{PU}{\9042\243}%* U+22A3
+%* \textdashv -> \leftvdash (MnSymbol)
+% \ndashv (mathabx)
+\DeclareTextCommand{\textndashv}{PU}{\9042\243\83\070}%* U+22A3 U+0338
+%* \textndashv -> \nleftvdash (MnSymbol)
+% U+22A4 DOWN TACK (=top); tackdown; \top (LaTeX)
+\DeclareTextCommand{\texttop}{PU}{\9042\244}%* U+22A4
+%* \texttop -> \downvdash (MnSymbol)
+% \ndownvdash (MnSymbol)
+\DeclareTextCommand{\textndownvdash}{PU}{\9042\244\83\070}%* U+22A4 U+0338
+% U+22A5 UP TACK (=base, bottom); \bot (LaTeX)
+\DeclareTextCommand{\textbot}{PU}{\9042\245}%* U+22A5
+%* \textbot -> \upvdash (MnSymbol)
+% \nupvdash (MnSymbol)
+\DeclareTextCommand{\textnupvdash}{PU}{\9042\245\83\070}%* U+22A5 U+0338
+%* \textnupvdash -> \nperp (MnSymbol)
+% U+22A8 TRUE; \vDash (AmS)
+\DeclareTextCommand{\textvDash}{PU}{\9042\250}%* U+22A8
+%* \textvDash -> \models (LaTeX)
+%* \textvDash -> \rightmodels (MnSymbol)
+% U+22A9 FORCES; \Vdash (AmS)
+\DeclareTextCommand{\textVdash}{PU}{\9042\251}%* U+22A9
+%* \textVdash -> \rightVdash (MnSymbol)
+% U+22AA TRIPLE VERTICAL BAR RIGHT TURNSTILE; \Vvdash (AmS)
+\DeclareTextCommand{\textVvdash}{PU}{\9042\252}%* U+22AA
+% \nVvash (mathabx)
+\DeclareTextCommand{\textnVvash}{PU}{\9042\252\83\070}%* U+22AA U+0338
+% U+22AB DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;
+% \VDash (mathabx)
+\DeclareTextCommand{\textVDash}{PU}{\9042\253}%* U+22AB
+%* \textVDash -> \rightModels (MnSymbol)
+% U+22AC DOES NOT PROVE; \nvdash (AmS)
+\DeclareTextCommand{\textnvdash}{PU}{\9042\254}%* U+22AC
+%* \textnvdash -> \nrightvdash (MnSymbol)
+% U+22AD NOT TRUE; \nvDash (AmS)
+\DeclareTextCommand{\textnvDash}{PU}{\9042\255}%* U+22AD
+%* \textnvDash -> \nrightmodels (MnSymbol)
+%* \textnvDash -> \nmodels (MnSymbol)
+% U+22AE DOES NOT FORCE; \nVdash (txfonts/pxfonts)
+\DeclareTextCommand{\textnVdash}{PU}{\9042\256}%* U+22AE
+%* \textnVdash -> \nrightVdash (MnSymbol)
+% U+22AF NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE; \nVDash (AmS)
+\DeclareTextCommand{\textnVDash}{PU}{\9042\257}%* U+22AF
+%* \textnVDash -> \nrightModels (MnSymbol)
+% U+22B2 NORMAL SUBGROUP OF; \lhd (latexsym, ...)
+\DeclareTextCommand{\textlhd}{PU}{\9042\262}%* U+22B2
+%* \textlhd -> \lessclosed (MnSymbol)
+% U+22B3 CONTAINS AS NORMAL SUBGROUP; \rhd (latexsym, ...)
+\DeclareTextCommand{\textrhd}{PU}{\9042\263}%* U+22B3
+%* \textrhd -> \gtrclosed (MnSymbol)
+% U+22B4 NORMAL SUBGROUP OF OR EQUAL TO; \unlhd (latexsym, ...)
+\DeclareTextCommand{\textunlhd}{PU}{\9042\264}%* U+22B4
+%* \textunlhd -> \leqclosed (MnSymbol)
+%* \textunlhd -> \trianglelefteq (MnSymbol)
+% U+22B5 CONTAINS AS NORMAL SUBGROUP OR EQUAL TO; \unrhd (latexsym, ...)
+\DeclareTextCommand{\textunrhd}{PU}{\9042\265}%* U+22B5
+%* \textunrhd -> \geqclosed (MnSymbol)
+%* \textunrhd -> \trianglerighteq (MnSymbol)
+% U+22B6 ORIGINAL OF; \multimapdotbothA (txfonts/pxfonts)
+\DeclareTextCommand{\textmultimapdotbothA}{PU}{\9042\266}%* U+22B6
+% U+22B7 IMAGE OF; \multimapdotbothB (txfonts/pxfonts)
+\DeclareTextCommand{\textmultimapdotbothB}{PU}{\9042\267}%* U+22B7
+% U+22B8 MULTIMAP; \multimap (AmS, txfonts/pxfonts)
+\DeclareTextCommand{\textmultimap}{PU}{\9042\270}%* U+22B8
+% U+22BB XOR; \veebar (AmS)
+\DeclareTextCommand{\textveebar}{PU}{\9042\273}%* U+22BB
+% U+22BC NAND; \barwedge (mathabx)
+\DeclareTextCommand{\textbarwedge}{PU}{\9042\274}%* U+22BC
+% U+22C6 STAR OPERATOR; \star (LaTeX)
+\DeclareTextCommand{\textstar}{PU}{\9042\306}%* U+22C6
+% U+22C7 DIVISION TIMES; \divideontimes (AmS)
+\DeclareTextCommand{\textdivideontimes}{PU}{\9042\307}%* U+22C7
+% U+22C8 BOWTIE; \bowtie (LaTeX)
+\DeclareTextCommand{\textbowtie}{PU}{\9042\310}%* U+22C8
+%* \textbowtie -> \Bowtie (wasysym)
+% U+22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT; \ltimes (AmS)
+\DeclareTextCommand{\textltimes}{PU}{\9042\311}%* U+22C9
+% U+22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;
+% \rtimes (AmS)
+\DeclareTextCommand{\textrtimes}{PU}{\9042\312}%* U+22CA
+% U+22CB LEFT SEMIDIRECT PRODUCT; \leftthreetimes (AmS)
+\DeclareTextCommand{\textleftthreetimes}{PU}{\9042\313}%* U+22CB
+% U+22CC RIGHT SEMIDIRECT PRODUCT; \rightthreetimes (AmS)
+\DeclareTextCommand{\textrightthreetimes}{PU}{\9042\314}%* U+22CC
+% U+22CD REVERSED TILDE EQUALS; \backsimeq (AmS)
+\DeclareTextCommand{\textbacksimeq}{PU}{\9042\315}%* U+22CD
+% \nbacksimeq (txfonts/pxfonts)
+\DeclareTextCommand{\textnbacksimeq}{PU}{\9042\315\83\070}%* U+22CD U+0338
+% U+22CE CURLY LOGICAL OR; curlyor; \curlyvee (AmS)
+\DeclareTextCommand{\textcurlyvee}{PU}{\9042\316}%* U+22CE
+%* \textcurlyvee -> \varcurlyvee (stmaryrd)
+% U+22CF CURLY LOGICAL AND; curlyand; \curlywedge (AmS)
+\DeclareTextCommand{\textcurlywedge}{PU}{\9042\317}%* U+22CF
+%* \textcurlywedge -> \varcurlywedge (stmaryrd)
+% U+22D0 DOUBLE SUBSET; \Subset (AmS)
+\DeclareTextCommand{\textSubset}{PU}{\9042\320}%* U+22D0
+% \nSubset (txfonts/pxfonts)
+\DeclareTextCommand{\textnSubset}{PU}{\9042\320\83\070}%* U+22D0 U+0338
+% U+22D1 DOUBLE SUPERSET; \Supset (AmS)
+\DeclareTextCommand{\textSupset}{PU}{\9042\321}%* U+22D1
+% \nSupset (txfonts/pxfonts)
+\DeclareTextCommand{\textnSupset}{PU}{\9042\321\83\070}%* U+22D1 U+0338
+% U+22D2 DOUBLE INTERSECTION; \Cap (AmS)
+\DeclareTextCommand{\textCap}{PU}{\9042\322}%* U+22D2
+%* \textCap -> \doublecap (mathabx)
+% U+22D3 DOUBLE UNION; \Cup (AmS)
+\DeclareTextCommand{\textCup}{PU}{\9042\323}%* U+22D3
+%* \textCup -> \doublecup (mathabx)
+% U+22D4 PITCHFORK; \pitchfork (mathabx)
+\DeclareTextCommand{\textpitchfork}{PU}{\9042\324}%* U+22D4
+% U+22D6 LESS-THAN WITH DOT; \lessdot (AmS)
+\DeclareTextCommand{\textlessdot}{PU}{\9042\326}%* U+22D6
+% U+22D7 GREATER-THAN WITH DOT; \gtrdot (AmS)
+\DeclareTextCommand{\textgtrdot}{PU}{\9042\327}%* U+22D7
+% U+22D8 VERY MUCH LESS-THAN; \lll (AmS)
+\DeclareTextCommand{\textlll}{PU}{\9042\330}%* U+22D8
+% U+22D9 VERY MUCH GREATER-THAN; \ggg (AmS)
+\DeclareTextCommand{\textggg}{PU}{\9042\331}%* U+22D9
+% U+22DA LESS-THAN EQUAL TO OR GREATER-THAN; lessequalorgreater;
+% \lesseqgtr (AmS)
+\DeclareTextCommand{\textlesseqgtr}{PU}{\9042\332}%* U+22DA
+% U+22DB GREATER-THAN EQUAL TO OR LESS-THAN; greaterequalorless;
+% \gtreqless (AmS)
+\DeclareTextCommand{\textgtreqless}{PU}{\9042\333}%* U+22DB
+% U+22DE EQUAL TO OR PRECEDES; \curlyeqprec (MnSymbol)
+\DeclareTextCommand{\textcurlyeqprec}{PU}{\9042\336}%* U+22DE
+% \ncurlyeqprec (mathabx)
+\DeclareTextCommand{\textncurlyeqprec}{PU}{\9042\336\83\070}%* U+22DE U+0338
+% U+22DF EQUAL TO OR SUCCEEDS; \curlyeqsucc (MnSymbol)
+\DeclareTextCommand{\textcurlyeqsucc}{PU}{\9042\337}%* U+22DF
+% \ncurlyeqsucc (mathabx)
+\DeclareTextCommand{\textncurlyeqsucc}{PU}{\9042\337\83\070}%* U+22DF U+0338
+% U+22E0 DOES NOT PRECEDE OR EQUAL; \npreccurlyeq (txfonts/pxfonts)
+\DeclareTextCommand{\textnpreccurlyeq}{PU}{\9042\340}%* U+22E0
+% U+22E1 DOES NOT SUCCEED OR EQUAL; \nsucccurlyeq (txfonts/pxfonts)
+\DeclareTextCommand{\textnsucccurlyeq}{PU}{\9042\341}%* U+22E1
+% U+22E2 NOT SQUARE IMAGE OF OR EQUAL TO; \nsqsubseteq (txfonts/pxfonts)
+\DeclareTextCommand{\textnqsubseteq}{PU}{\9042\342}%* U+22E2
+% U+22E3 NOT SQUARE ORIGINAL OF OR EQUAL TO; \nsqsupseteq (txfonts/pxfonts)
+\DeclareTextCommand{\textnqsupseteq}{PU}{\9042\343}%* U+22E3
+% U+22E4 SQUARE IMAGE OF OR NOT EQUAL TO; \sqsubsetneq (mathabx)
+\DeclareTextCommand{\textsqsubsetneq}{PU}{\9042\344}%* U+22E4
+%* \textsqsubsetneq -> \varsqsubsetneq (mathabx)
+% U+22E5 SQUARE ORIGINAL OF OR NOT EQUAL TO; \sqsupsetneq (mathabx)
+\DeclareTextCommand{\textsqsupsetneq}{PU}{\9042\345}%* U+22E5
+%* \textsqsupsetneq -> \varsqsupsetneq (mathabx)
+% U+22E6 LESS-THAN BUT NOT EQUIVALENT TO; \lnsim (AmS)
+\DeclareTextCommand{\textlnsim}{PU}{\9042\346}%* U+22E6
+% U+22E7 GREATER-THAN BUT NOT EQUIVALENT TO; \gnsim (AmS)
+\DeclareTextCommand{\textgnsim}{PU}{\9042\347}%* U+22E7
+% U+22E8 PRECEDES BUT NOT EQUIVALENT TO; \precnsim (AmS)
+\DeclareTextCommand{\textprecnsim}{PU}{\9042\350}%* U+22E8
+% U+22E9 SUCCEEDS BUT NOT EQUIVALENT TO; \succnsim (AmS)
+\DeclareTextCommand{\textsuccnsim}{PU}{\9042\351}%* U+22E9
+% U+22EA NOT NORMAL SUBGROUP OF; \ntriangleleft (AmS)
+\DeclareTextCommand{\textntriangleleft}{PU}{\9042\352}%* U+22EA
+%* \textntriangleleft -> \nlessclosed (MnSymbol)
+% U+22EB DOES NOT CONTAIN AS NORMAL SUBGROUP; \ntriangleright (AmS)
+\DeclareTextCommand{\textntriangleright}{PU}{\9042\353}%* U+22EB
+%* \textntriangleright -> \ngtrclosed (MnSymbol)
+% U+22EC NOT NORMAL SUBGROUP OF OR EQUAL TO;
+% \ntrianglelefteq (AmS)
+\DeclareTextCommand{\textntrianglelefteq}{PU}{\9042\354}%* U+22EC
+% U+22ED DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;
+% \ntrianglerighteq (AmS)
+\DeclareTextCommand{\textntrianglerighteq}{PU}{\9042\355}%* U+22ED
+%* \textntrianglerighteq -> textngeqclosed
+% U+22EE VERTICAL ELLIPSIS; ellipsisvertical; \vdots (LaTeX)
+\DeclareTextCommand{\textvdots}{PU}{\9042\356}%* U+22EE
+% U+22EF MIDLINE HORIZONTAL ELLIPSIS; \cdots (LaTeX)
+\DeclareTextCommand{\textcdots}{PU}{\9042\357}%* U+22EF
+% U+22F0 UP RIGHT DIAGONAL ELLIPSIS; \udots (MnSymbol)
+\DeclareTextCommand{\textudots}{PU}{\9042\360}%* U+22F0
+% U+22F1 DOWN RIGHT DIAGONAL ELLIPSIS; \ddots (LaTeX)
+\DeclareTextCommand{\textddots}{PU}{\9042\361}%* U+22F1
+% U+22F6 ELEMENT OF WITH OVERBAR; \barin (mathabx)
+\DeclareTextCommand{\textbarin}{PU}{\9042\366}%* U+22F6
+% \end{macrocode}
+%
+% \subsubsection{Miscellaneous Technical: U+2300 to U+23FF}
+%
+% \begin{macrocode}
+% U+2300 DIAMETER SIGN; \diameter (mathabx,wasysym)
+\DeclareTextCommand{\textdiameter}{PU}{\9043\000}%* U+2300
+% U+2310 REVERSED NOT SIGN; \backneg (MnSymbol)
+\DeclareTextCommand{\textbackneg}{PU}{\9043\020}%* U+2310
+% U+2311 SQUARE LOZENGE; \wasylozenge (wasysym)
+\DeclareTextCommand{\textwasylozenge}{PU}{\9043\021}%* U+2311
+% U+2319 TURNED NOT SIGN; \invbackneg (MnSymbol)
+\DeclareTextCommand{\textinvbackneg}{PU}{\9043\031}%* U+2319
+% U+231A WATCH; \clock (wasysym)
+\DeclareTextCommand{\textclock}{PU}{\9043\032}%* U+231A
+%* \textclock -> \Clocklogo (marvosym)
+%* \textclock -> \ClockLogo (marvosym)
+% U+231C TOP LEFT CORNER; \ulcorner (AmS)
+\DeclareTextCommand{\textulcorner}{PU}{\9043\034}%* U+231C
+% U+231D TOP RIGHT CORNER; \urcorner (AmS)
+\DeclareTextCommand{\texturcorner}{PU}{\9043\035}%* U+231D
+% U+231E BOTTOM LEFT CORNER; \llcorner (AmS)
+\DeclareTextCommand{\textllcorner}{PU}{\9043\036}%* U+231E
+% U+231F BOTTOM RIGHT CORNER; \lrcorner (AmS)
+\DeclareTextCommand{\textlrcorner}{PU}{\9043\037}%* U+231F
+% U+2322 FROWN; \frown (LaTeX)
+\DeclareTextCommand{\textfrown}{PU}{\9043\042}%* U+2322
+% U+2323 SMILE; \smile (LaTeX)
+\DeclareTextCommand{\textsmile}{PU}{\9043\043}%* U+2323
+% U+2328 KEYBOARD; \Keyboard (marvosym)
+\DeclareTextCommand{\textKeyboard}{PU}{\9043\050}%* U+2328
+% U+2329 LEFT-POINTING ANGLE BRACKET; angleleft; \langle (LaTeX)
+\DeclareTextCommand{\textlangle}{PU}{\9043\051}%* U+2329
+% U+232A RIGHT-POINTING ANGLE BRACKET; angleright; \rangle (LaTeX)
+\DeclareTextCommand{\textrangle}{PU}{\9043\052}%* U+232A
+% U+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE; \APLinv (wasysym)
+\DeclareTextCommand{\textAPLinv}{PU}{\9043\071}%* U+2339
+% U+233C APL FUNCTIONAL SYMBOL QUAD CIRCLE; \Tumbler (marvosym)
+\DeclareTextCommand{\textTumbler}{PU}{\9043\074}%* U+233C
+% U+233D APL FUNCTIONAL SYMBOL CIRCLE STILE; \baro (stmaryrd)
+\DeclareTextCommand{\textstmaryrdbaro}{PU}{\9043\075}% U+233D
+%* \textstmaryrdbaro -> \baro (stmaryrd)
+% U+233F APL FUNCTIONAL SYMBOL SLASH BAR; \notslash (wasysym)
+\DeclareTextCommand{\textnotslash}{PU}{\9043\077}%* U+233F
+% U+2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR;
+% \notbackslash (wasysym)
+\DeclareTextCommand{\textnotbackslash}{PU}{\9043\100}%* U+2340
+% U+2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH; \boxbackslash (mathabx)
+\DeclareTextCommand{\textboxbackslash}{PU}{\9043\102}%* U+2342
+% U+2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;
+% \APLleftarrowbox (wasysym)
+\DeclareTextCommand{\textAPLleftarrowbox}{PU}{\9043\107}%* U+2347
+% U+2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;
+% \APLrightarrowbox (wasysym)
+\DeclareTextCommand{\textAPLrightarrowbox}{PU}{\9043\110}%* U+2348
+% U+2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW; \APLuparrowbox (wasysym)
+\DeclareTextCommand{\textAPLuparrowbox}{PU}{\9043\120}%* U+2350
+% U+2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;
+% \APLdownarrowbox (wasysym)
+\DeclareTextCommand{\textAPLdownarrowbox}{PU}{\9043\127}%* U+2357
+% U+235E APL FUNCTIONAL SYMBOL QUOTE QUAD;
+% \APLinput (wasysym)
+\DeclareTextCommand{\textAPLinput}{PU}{\9043\136}%* U+235E
+% U+2370 APL FUNCTIONAL SYMBOL QUAD QUESTION; \Request (china2e)
+\DeclareTextCommand{\textRequest}{PU}{\9043\160}%* U+2370
+% U+2393 DIRECT CURRENT SYMBOL FORM TWO; \Beam (marvosym)
+\DeclareTextCommand{\textBeam}{PU}{\9043\223}%* U+2393
+% U+2394 SOFTWARE-FUNCTION SYMBOL; \hexagon (wasysym)
+\DeclareTextCommand{\texthexagon}{PU}{\9043\224}%* U+2394
+% U+2395 APL FUNCTIONAL SYMBOL QUAD; \APLbox (wasysym)
+\DeclareTextCommand{\textAPLbox}{PU}{\9043\225}%* U+2395
+% U+23ED BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;
+% \ForwardToIndex (marvosym)
+\DeclareTextCommand{\textForwardToIndex}{PU}{\9043\355}%* U+23ED
+% U+23EE BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;
+% \RewindToIndex (marvosym)
+\DeclareTextCommand{\textRewindToIndex}{PU}{\9043\356}%* U+23EE
+% \end{macrocode}
+%
+% \subsubsection{Control Pictures: U+2400 to U+243F}
+%
+% \begin{macrocode}
+% U+2422 BLANK SYMBOL
+\DeclareTextCommand{\textblank}{PU}{\9044\042}% U+2422
+% U+2423 OPEN BOX; blank
+\DeclareTextCommand{\textvisiblespace}{PU}{\9044\043}% U+2423
+% \end{macrocode}
+%
+% \subsubsection{Optical Character Recognition: U+2440 to U+245F}
+%
+% \begin{macrocode}
+% U+244A OCR DOUBLE BACKSLASH; \bbslash (stmaryrd)
+\DeclareTextCommand{\textbbslash}{PU}{\9044\112}%* U+244A
+%* \textbbslash -> \varparallelinv (txfonts/pxfonts)
+% \end{macrocode}
+%
+% \subsubsection{Enclosed Alphanumerics: U+2460 to U+24FF}
+%
+% \begin{macrocode}
+% U+2460 CIRCLED DIGIT ONE; onecircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{1}{\9044\140}% U+2460
+% U+2461 CIRCLED DIGIT TWO; twocircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{2}{\9044\141}% U+2461
+% U+2462 CIRCLED DIGIT THREE; threecircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{3}{\9044\142}% U+2462
+% U+2463 CIRCLED DIGIT FOUR; fourcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{4}{\9044\143}% U+2463
+% U+2464 CIRCLED DIGIT FIVE; fivecircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{5}{\9044\144}% U+2464
+% U+2465 CIRCLED DIGIT SIX; sixcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{6}{\9044\145}% U+2465
+% U+2466 CIRCLED DIGIT SEVEN; sevencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{7}{\9044\146}% U+2466
+% U+2467 CIRCLED DIGIT EIGHT; eightcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{8}{\9044\147}% U+2467
+% U+2468 CIRCLED DIGIT NINE; ninecircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{9}{\9044\150}% U+2468
+% U+2469 CIRCLED NUMBER TEN; tencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{10}{\9044\151}% U+2469
+% U+246A CIRCLED NUMBER ELEVEN; elevencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{11}{\9044\152}% U+246A
+% U+246B CIRCLED NUMBER TWELVE; twelvecircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{12}{\9044\153}% U+246B
+% U+246C CIRCLED NUMBER THIRTEEN; thirteencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{13}{\9044\154}% U+246C
+% U+246D CIRCLED NUMBER FOURTEEN; fourteencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{14}{\9044\155}% U+246D
+% U+246E CIRCLED NUMBER FIFTEEN; fifteencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{15}{\9044\156}% U+246E
+% U+246F CIRCLED NUMBER SIXTEEN; sixteencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{16}{\9044\157}% U+246F
+% U+2470 CIRCLED NUMBER SEVENTEEN; seventeencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{17}{\9044\160}% U+2470
+% U+2471 CIRCLED NUMBER EIGHTEEN; eighteencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{18}{\9044\161}% U+2471
+% U+2472 CIRCLED NUMBER NINETEEN; nineteencircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{19}{\9044\162}% U+2472
+% U+2473 CIRCLED NUMBER TWENTY; twentycircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{20}{\9044\163}% U+2473
+% U+24B6 CIRCLED LATIN CAPITAL LETTER A; Acircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{A}{\9044\266}% U+24B6
+% \CircledA (marvosym)
+\DeclareTextCommand{\textCircledA}{PU}{\9044\266}%* U+24B6
+%* \textCircledA -> \CleaningA
+% U+24B7 CIRCLED LATIN CAPITAL LETTER B; Bcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{B}{\9044\267}% U+24B7
+% U+24B8 CIRCLED LATIN CAPITAL LETTER C; Ccircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{C}{\9044\270}% U+24B8
+% U+24B9 CIRCLED LATIN CAPITAL LETTER D; Dcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{D}{\9044\271}% U+24B9
+% U+24BA CIRCLED LATIN CAPITAL LETTER E; Ecircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{E}{\9044\272}% U+24BA
+% U+24BB CIRCLED LATIN CAPITAL LETTER F; Fcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{F}{\9044\273}% U+24BB
+% \CleaningF (marvosym)
+\DeclareTextCommand{\textCleaningF}{PU}{\9044\273}%* U+24BB
+% \CleaningFF (marvosym)
+\DeclareTextCommand{\textCleaningFF}{PU}{\9044\273\83\062}%* U+24BB U+0332
+% U+24BC CIRCLED LATIN CAPITAL LETTER G; Gcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{G}{\9044\274}% U+24BC
+% U+24BD CIRCLED LATIN CAPITAL LETTER H; Hcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{H}{\9044\275}% U+24BD
+% U+24BE CIRCLED LATIN CAPITAL LETTER I; Icircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{I}{\9044\276}% U+24BE
+% U+24BF CIRCLED LATIN CAPITAL LETTER J; Jcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{J}{\9044\277}% U+24BF
+% U+24C0 CIRCLED LATIN CAPITAL LETTER K; Kcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{K}{\9044\300}% U+24C0
+% U+24C1 CIRCLED LATIN CAPITAL LETTER L; Lcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{L}{\9044\301}% U+24C1
+% U+24C2 CIRCLED LATIN CAPITAL LETTER M; Mcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{M}{\9044\302}% U+24C2
+% U+24C3 CIRCLED LATIN CAPITAL LETTER N; Ncircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{N}{\9044\303}% U+24C3
+% U+24C4 CIRCLED LATIN CAPITAL LETTER O; Ocircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{O}{\9044\304}% U+24C4
+% U+24C5 CIRCLED LATIN CAPITAL LETTER P; Pcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{P}{\9044\305}% U+24C5
+% \CleaningP (marvosym)
+\DeclareTextCommand{\textCleaningP}{PU}{\9044\305}%* U+24C5
+% \CleaningPP (marvosym)
+\DeclareTextCommand{\textCleaningPP}{PU}{\9044\305\83\062}%* U+24C5 U+0332
+% U+24C6 CIRCLED LATIN CAPITAL LETTER Q; Qcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{Q}{\9044\306}% U+24C6
+% U+24C7 CIRCLED LATIN CAPITAL LETTER R; Rcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{R}{\9044\307}% U+24C7
+% U+24C8 CIRCLED LATIN CAPITAL LETTER S; Scircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{S}{\9044\310}% U+24C8
+% U+24C9 CIRCLED LATIN CAPITAL LETTER T; Tcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{T}{\9044\311}% U+24C9
+% U+24CA CIRCLED LATIN CAPITAL LETTER U; Ucircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{U}{\9044\312}% U+24CA
+% U+24CB CIRCLED LATIN CAPITAL LETTER V; Vcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{V}{\9044\313}% U+24CB
+% U+24CC CIRCLED LATIN CAPITAL LETTER W; Wcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{W}{\9044\314}% U+24CC
+% U+24CD CIRCLED LATIN CAPITAL LETTER X; Xcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{X}{\9044\315}% U+24CD
+% U+24CE CIRCLED LATIN CAPITAL LETTER Y; Ycircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{Y}{\9044\316}% U+24CE
+% U+24CF CIRCLED LATIN CAPITAL LETTER Z; Zcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{Z}{\9044\317}% U+24CF
+% U+24D0 CIRCLED LATIN SMALL LETTER A; acircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{a}{\9044\320}% U+24D0
+% U+24D1 CIRCLED LATIN SMALL LETTER B; bcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{b}{\9044\321}% U+24D1
+% U+24D2 CIRCLED LATIN SMALL LETTER C; ccircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{c}{\9044\322}% U+24D2
+% U+24D3 CIRCLED LATIN SMALL LETTER D; dcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{d}{\9044\323}% U+24D3
+% U+24D4 CIRCLED LATIN SMALL LETTER E; ecircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{e}{\9044\324}% U+24D4
+% U+24D5 CIRCLED LATIN SMALL LETTER F; fcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{f}{\9044\325}% U+24D5
+% U+24D6 CIRCLED LATIN SMALL LETTER G; gcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{g}{\9044\326}% U+24D6
+% U+24D7 CIRCLED LATIN SMALL LETTER H; hcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{h}{\9044\327}% U+24D7
+% U+24D8 CIRCLED LATIN SMALL LETTER I; icircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{i}{\9044\330}% U+24D8
+% U+24D9 CIRCLED LATIN SMALL LETTER J; jcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{j}{\9044\331}% U+24D9
+% U+24DA CIRCLED LATIN SMALL LETTER K; kcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{k}{\9044\332}% U+24DA
+% U+24DB CIRCLED LATIN SMALL LETTER L; lcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{l}{\9044\333}% U+24DB
+% U+24DC CIRCLED LATIN SMALL LETTER M; mcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{m}{\9044\334}% U+24DC
+% U+24DD CIRCLED LATIN SMALL LETTER N; ncircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{n}{\9044\335}% U+24DD
+% U+24DE CIRCLED LATIN SMALL LETTER O; ocircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{o}{\9044\336}% U+24DE
+% U+24DF CIRCLED LATIN SMALL LETTER P; pcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{p}{\9044\337}% U+24DF
+% U+24E0 CIRCLED LATIN SMALL LETTER Q; qcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{q}{\9044\340}% U+24E0
+% U+24E1 CIRCLED LATIN SMALL LETTER R; rcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{r}{\9044\341}% U+24E1
+% U+24E2 CIRCLED LATIN SMALL LETTER S; scircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{s}{\9044\342}% U+24E2
+% U+24E3 CIRCLED LATIN SMALL LETTER T; tcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{t}{\9044\343}% U+24E3
+% U+24E4 CIRCLED LATIN SMALL LETTER U; ucircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{u}{\9044\344}% U+24E4
+% U+24E5 CIRCLED LATIN SMALL LETTER V; vcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{v}{\9044\345}% U+24E5
+% U+24E6 CIRCLED LATIN SMALL LETTER W; wcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{w}{\9044\346}% U+24E6
+% U+24E7 CIRCLED LATIN SMALL LETTER X; xcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{x}{\9044\347}% U+24E7
+% U+24E8 CIRCLED LATIN SMALL LETTER Y; ycircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{y}{\9044\350}% U+24E8
+% U+24E9 CIRCLED LATIN SMALL LETTER Z; zcircle
+\DeclareTextCompositeCommand{\textcircled}{PU}{z}{\9044\351}% U+24E9
+% U+24EA CIRCLED DIGIT ZERO
+\DeclareTextCompositeCommand{\textcircled}{PU}{0}{\9044\352}% U+24EA
+% \end{macrocode}
+%
+% \subsubsection{Box Drawing: U+2500 to 257F}
+%
+% \begin{macrocode}
+% U+2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL; \CuttingLine (marvosym)
+\DeclareTextCommand{\textCuttingLine}{PU}{\9045\004}%* U+2504
+%* \textCuttingLine -> \Kutline (marvosym)
+%* \textCuttingLine -> \CutLine (marvosym)
+%* \textCuttingLine -> \Cutline (marvosym)
+% \end{macrocode}
+%
+% \subsubsection{Geometric Shapes: U+25A0 to U+25FF}
+%
+% \begin{macrocode}
+% U+25B2 BLACK UP-POINTING TRIANGLE; \UParrow (wasysym)
+\DeclareTextCommand{\textUParrow}{PU}{\9045\262}%* U+25B2
+%* \textUParrow -> \MoveUp (marvosym)
+% U+25B3 WHITE UP-POINTING TRIANGLE; whiteuppointingtriangle;
+% \bigtriangleup (LaTeX)
+\DeclareTextCommand{\textbigtriangleup}{PU}{\9045\263}%* U+25B3
+%* \textbigtriangleup -> \APLup (wasysym)
+%* \textbigtriangleup -> \Bleech (marvosym)
+% U+25B6 BLACK RIGHT-POINTING TRIANGLE; \Forward (marvosym)
+\DeclareTextCommand{\textForward}{PU}{\9045\266}%* U+25B6
+% U+25B7 WHITE RIGHT-POINTING TRIANGLE (= z notation range restriction);
+% whiterightpointingtriangle; \triangleright (LaTeX)
+\DeclareTextCommand{\texttriangleright}{PU}{\9045\267}%* U+25B7
+% U+25BA BLACK RIGHT-POINTING POINTER; \RHD (wasysym)
+\DeclareTextCommand{\textRHD}{PU}{\9045\272}%* U+25BA
+% U+25BC BLACK DOWN-POINTING TRIANGLE; \DOWNarrow (wasysym)
+\DeclareTextCommand{\textDOWNarrow}{PU}{\9045\274}%* U+25BC
+%* \textDOWNarrow -> \MoveDown (marvosym)
+% U+25BD WHITE DOWN-POINTING TRIANGLE; whitedownpointingtriangle;
+% \bigtriangledown (LaTeX)
+\DeclareTextCommand{\textbigtriangledown}{PU}{\9045\275}%* U+25BD
+%* \textbigtriangledown -> \APLdown (wasysym)
+% U+25C0 BLACK LEFT-POINTING TRIANGLE; \Rewind (marvosym)
+\DeclareTextCommand{\textRewind}{PU}{\9045\300}%* U+25C0
+% U+25C1 WHITE RIGHT-POINTING TRIANGLE (= z notation domain restriction);
+% whiteleftpointingtriangle; \triangleleft (LaTeX)
+\DeclareTextCommand{\texttriangleleft}{PU}{\9045\301}%* U+25C1
+% U+25C4 BLACK LEFT-POINTING POINTER; \LHD (wasysym)
+\DeclareTextCommand{\textLHD}{PU}{\9045\304}%* U+25C4
+% U+25C7 WHITE DIAMOND; whitediamond; \diamond (LaTeX)
+\DeclareTextCommand{\textdiamond}{PU}{\9045\307}%* U+25C7
+%* \textdiamond -> \Diamond (wasysym)
+% U+25CA LOZENGE; lozenge; \lozenge (AmS)
+\DeclareTextCommand{\textlozenge}{PU}{\9045\312}%* U+25CA
+% U+25D6 LEFT HALF BLACK CIRCLE; \LEFTCIRCLE (wasysym)
+\DeclareTextCommand{\textLEFTCIRCLE}{PU}{\9045\326}%* U+25D6
+% U+25D7 RIGHT HALF BLACK CIRCLE; \RIGHTCIRCLE (wasysym)
+\DeclareTextCommand{\textRIGHTCIRCLE}{PU}{\9045\327}%* U+25D7
+% U+25E6 WHITE BULLET; *openbullet, whitebullet
+\DeclareTextCommand{\textopenbullet}{PU}{\9045\346}%* U+25E6
+% U+25EB WHITE SQUARE WITH VERTICAL BISECTING LINE;
+% \boxbar (stmaryrd)
+\DeclareTextCommand{\textboxbar}{PU}{\9045\353}%* U+25EB
+% U+25EF LARGE CIRCLE; largecircle
+\DeclareTextCommand{\textbigcircle}{PU}{\9045\357}%* U+25EF
+%* \textbigcircle -> \varbigcirc (stmaryrd)
+%
+% \end{macrocode}
+%
+% \subsubsection{Miscellaneous Symbols: U+2600 to U+26FF}
+%
+% \begin{macrocode}
+% U+2601 CLOUD; \Cloud (ifsym)
+\DeclareTextCommand{\textCloud}{PU}{\9046\001}%* U+2601
+% U+2605 BLACK STAR; \FiveStar (bbding)
+\DeclareTextCommand{\textFiveStar}{PU}{\9046\005}%* U+2605
+% U+2606 WHITE STAR; \FiveStarOpen (bbding)
+\DeclareTextCommand{\textFiveStarOpen}{PU}{\9046\006}%* U+2606
+% U+260E BLACK TELEPHONE; telephoneblack; \Phone (bbding)
+\DeclareTextCommand{\textPhone}{PU}{\9046\016}%* U+260E
+%* \textPhone -> \Telefon (marvosym)
+% U+2610 BALLOT BOX; \boxempty (stmaryrd)
+\DeclareTextCommand{\textboxempty}{PU}{\9046\020}%* U+2610
+%* \textboxempty -> \Box (wasysym)
+% U+2611 BALLOT BOX WITH CHECK; \Checkedbox (marvosym)
+\DeclareTextCommand{\textCheckedbox}{PU}{\9046\021}%* U+2611
+%* \textCheckedbox -> \CheckedBox (marvosym)
+% U+2612 BALLOT BOX WITH X; \Crossedbox (marvosym)
+\DeclareTextCommand{\textCrossedbox}{PU}{\9046\022}%* U+2612
+%* \textCrossedbox -> \XBox (wasysym)
+%* \textCrossedbox -> \CrossedBox (marvosym)
+% U+2615 HOT BEVERAGE; \Coffeecup (marvosym)
+\DeclareTextCommand{\textCoffeecup}{PU}{\9046\025}%* U+2615
+% U+261A BLACK LEFT POINTING INDEX; \HandCuffLeft (bbding)
+\DeclareTextCommand{\textHandCuffLeft}{PU}{\9046\032}%* U+261A
+% U+261B BLACK RIGHT POINTING INDEX; \HandCuffRight (bbding)
+\DeclareTextCommand{\textHandCuffRight}{PU}{\9046\033}%* U+261B
+% U+261C WHITE LEFT POINTING INDEX; \HandLeft (bbding)
+\DeclareTextCommand{\textHandLeft}{PU}{\9046\034}%* U+261C
+%* \textHandLeft -> \rightpointleft (fourier)
+% U+261E WHITE RIGHT POINTING INDEX; \HandRight (bbding)
+\DeclareTextCommand{\textHandRight}{PU}{\9046\036}%* U+261E
+%* \textHandRight -> \leftpointright (fourier)
+%* \textHandRight -> \PointingHand (marvosym)
+%* \textHandRight -> \Pointinghand (marvosym)
+% U+2622 RADIOACTIVE SIGN; \Radioactivity (marvosym)
+\DeclareTextCommand{\textRadioactivity}{PU}{\9046\042}%* U+2622
+%* \textRadioactivity -> \Radiation (ifsym)
+% U+2623 BIOHAZARD SIGN; \Biohazard (marvosym)
+\DeclareTextCommand{\textBiohazard}{PU}{\9046\043}%* U+2623
+% U+2625 ANKH; \Ankh (marvosym)
+\DeclareTextCommand{\textAnkh}{PU}{\9046\045}%* U+2625
+% U+262F YIN YANG; \YinYang (marvosym)
+\DeclareTextCommand{\textYinYang}{PU}{\9046\057}%* U+262F
+%* \textYinYang -> \Yinyang (marvosym)
+%* \textYinYang -> \YingYang (marvosym)
+%* \textYinYang -> \Yingyang (marvosym)
+% U+2639 WHITE FROWNING FACE; \frownie (wasysym)
+\DeclareTextCommand{\textfrownie}{PU}{\9046\071}%* U+2639
+%* \textfrownie -> \Frowny (marvosym)
+% U+263A WHITE SMILING FACE; \smiley (wasysym)
+\DeclareTextCommand{\textsmiley}{PU}{\9046\072}%* U+263A
+%* \textsmiley -> \Smiley (marvosym)
+% U+263B BLACK SMILING FACE; \blacksmiley (wasysym)
+\DeclareTextCommand{\textblacksmiley}{PU}{\9046\073}%* U+263B
+% U+263C WHITE SUN WITH RAYS; \sun (wasysym)
+\DeclareTextCommand{\textsun}{PU}{\9046\074}%* U+263C
+%* \textsun -> \Sun (marvosym)
+% U+263D FIRST QUARTER MOON; \leftmoon (wasysym, mathabx)
+\DeclareTextCommand{\textleftmoon}{PU}{\9046\075}%* U+263D
+% U+263E LAST QUARTER MOON; \rightmoon (wasysym, mathabx)
+\DeclareTextCommand{\textrightmoon}{PU}{\9046\076}%* U+263E
+% U+263F MERCURY; \mercury (wasysym)
+\DeclareTextCommand{\textmercury}{PU}{\9046\077}%* U+263F
+%* \textmercury -> \Mercury (marvosym)
+% U+2640 FEMALE SIGN; female; \female (wasysym)
+\DeclareTextCommand{\textPUfemale}{PU}{\9046\100}% U+2640
+%* \textPUfemale -> \textfemale (tipx)
+%* \textPUfemale -> \female (wasysym)
+%* \textPUfemale -> \venus (wasysym)
+%* \textPUfemale -> \Venus (marvosym)
+%* \textPUfemale -> \Female (marvosym)
+% U+2641 EARTH; \earth (wasysym)
+\DeclareTextCommand{\textearth}{PU}{\9046\101}%* U+2641
+%* \textearth -> \Earth (marvosym)
+% U+2642 MALE SIGN; male, mars; \male (wasysym)
+\DeclareTextCommand{\textmale}{PU}{\9046\102}%* U+2642
+%* \textmale -> \mars (wasysym)
+%* \textmale -> \Mars (marvosym)
+%* \textmale -> \Male (marvosym)
+% U+2643 JUPITER; \jupiter (wasysym)
+\DeclareTextCommand{\textjupiter}{PU}{\9046\103}%* U+2643
+%* \textjupiter -> \Jupiter (marvosym)
+% U+2644 SATURN; \saturn (wasysym)
+\DeclareTextCommand{\textsaturn}{PU}{\9046\104}%* U+2644
+%* \textsaturn -> \Saturn (marvosym)
+% U+2645 URANUS; \uranus (wasysym)
+\DeclareTextCommand{\texturanus}{PU}{\9046\105}%* U+2645
+%* \texturanus -> \Uranus (marvosym)
+% U+2646 NEPTUNE; \neptune (wasysym)
+\DeclareTextCommand{\textneptune}{PU}{\9046\106}%* U+2646
+%* \textneptune -> \Neptune (marvosym)
+% U+2647 PLUTO; \pluto (wasysym)
+\DeclareTextCommand{\textpluto}{PU}{\9046\107}%* U+2647
+%* \textpluto -> \Pluto (marvosym)
+% U+2648 ARIES; \aries (wasysym)
+\DeclareTextCommand{\textaries}{PU}{\9046\110}%* U+2648
+%* \textaries -> \Aries (marvosym)
+% U+2649 TAURUS; \taurus (wasysym)
+\DeclareTextCommand{\texttaurus}{PU}{\9046\111}%* U+2649
+%* \texttaurus -> \Taurus (marvosym)
+% U+264A GEMINI; \gemini (wasysym)
+\DeclareTextCommand{\textgemini}{PU}{\9046\112}%* U+264A
+%* \textgemini -> \Gemini (marvosym)
+% U+264B CANCER; \cancer (wasysym)
+\DeclareTextCommand{\textcancer}{PU}{\9046\113}%* U+264B
+%* \textcancer -> \Cancer (marvosym)
+% U+264C LEO; \leo (wasysym)
+\DeclareTextCommand{\textleo}{PU}{\9046\114}%* U+264C
+%* \textleo -> \Leo (marvosym)
+% U+264D VIRGO; \virgo (wasysym)
+\DeclareTextCommand{\textvirgo}{PU}{\9046\115}%* U+264D
+%* \textvirgo -> \Virgo (marvosym)
+% U+264E LIBRA; \libra (wasysym)
+\DeclareTextCommand{\textlibra}{PU}{\9046\116}%* U+264E
+%* \textlibra -> \Libra (marvosym)
+% U+264F SCORPIO; \scorpio (wasysym)
+\DeclareTextCommand{\textscorpio}{PU}{\9046\117}%* U+264F
+%* \textscorpio -> \Scorpio (marvosym)
+% U+2650 SAGITTARIUS; \sagittarius (wasysym)
+\DeclareTextCommand{\textsagittarius}{PU}{\9046\120}%* U+2650
+%* \textsagittarius -> \Sagittarius (marvosym)
+% U+2651 CAPRICORN; \capricornus (wasysym)
+\DeclareTextCommand{\textcapricornus}{PU}{\9046\121}%* U+2651
+%* \textcapricornus -> \Capricorn (marvosym)
+% U+2652 AQUARIUS; \aquarius (wasysym)
+\DeclareTextCommand{\textaquarius}{PU}{\9046\122}%* U+2652
+%* \textaquarius -> \Aquarius (marvosym)
+% U+2653 PISCES; \pisces (wasysym)
+\DeclareTextCommand{\textpisces}{PU}{\9046\123}%* U+2653
+%* \textpisces -> \Pisces (marvosym)
+% U+2660 BLACK SPADE SUIT; spade, spadesuitblack; \spadesuit (LaTeX)
+\DeclareTextCommand{\textspadesuitblack}{PU}{\9046\140}% U+2660
+%* \textspadesuitblack -> \spadesuit (MnSymbol)
+% U+2661 WHITE HEART SUIT; heartsuitwhite; \heartsuit (LaTeX)
+\DeclareTextCommand{\textheartsuitwhite}{PU}{\9046\141}% U+2661
+%* \textheartsuitwhite -> \Heart (marvosym)
+%* \textheartsuitwhite -> \heartsuit (MnSymbol)
+% U+2662 WHITE DIAMOND SUIT; diamondsuitwhite; \diamondsuit (LaTeX)
+\DeclareTextCommand{\textdiamondsuitwhite}{PU}{\9046\142}% U+2662
+%* \textdiamondsuitwhite -> \diamondsuit (MnSymbol)
+% U+2663 BLACK CLUB SUIT; club, clubsuitblack; \clubsuit (LaTeX)
+\DeclareTextCommand{\textclubsuitblack}{PU}{\9046\143}% U+2663
+%* \textclubsuitblack -> \clubsuit (MnSymbol)
+% U+2664 WHITE SPADE SUIT; spadesuitwhite
+\DeclareTextCommand{\textspadesuitwhite}{PU}{\9046\144}% U+2664
+% U+2665 BLACK HEART SUIT; heartsuitblack, heart
+\DeclareTextCommand{\textheartsuitblack}{PU}{\9046\145}% U+2665
+% U+2666 BLACK DIAMOND SUIT; diamond
+\DeclareTextCommand{\textdiamondsuitblack}{PU}{\9046\146}% U+2666
+% U+2667 WHITE CLUB SUIT; clubsuitwhite
+\DeclareTextCommand{\textclubsuitwhite}{PU}{\9046\147}% U+2667
+% U+2669 QUARTER NOTE; quarternote; \quarternote (wasysym, arev)
+\DeclareTextCommand{\textquarternote}{PU}{\9046\151}%* U+2669
+% U+266A EIGHTH NOTE; musicalnote; \textmusicalnote (textcomp)
+\DeclareTextCommand{\textmusicalnote}{PU}{\9046\152}% U+266A
+%* \textmusicalnote -> \eighthnote (wasysym, arev)
+% U+266B BEAMED EIGHTH NOTES; eighthnotebeamed; \twonotes (wasysym)
+\DeclareTextCommand{\texttwonotes}{PU}{\9046\153}%* U+266B
+% U+266C BEAMED SIXTEENTH NOTES; beamedsixteenthnotes; \sixteenthnote (arev)
+\DeclareTextCommand{\textsixteenthnote}{PU}{\9046\154}%* U+266C
+% U+266D MUSIC FLAT SIGN; musicflatsign; \flat (LaTeX)
+\DeclareTextCommand{\textflat}{PU}{\9046\155}%* U+266D
+% U+266E MUSIC NATURAL SIGN; \natural (LaTeX)
+\DeclareTextCommand{\textnatural}{PU}{\9046\156}%* U+266E
+% U+266F MUSIC SHARP SIGN; musicsharpsign; \sharp (LaTeX)
+\DeclareTextCommand{\textsharp}{PU}{\9046\157}%* U+266F
+% U+2672 UNIVERSAL RECYCLING SYMBOL; \recycle (recycle)
+\DeclareTextCommand{\textrecycle}{PU}{\9046\162}%* U+2672
+%* \textrecycle -> \Recycling (marvosym)
+% U+267F WHEELCHAIR SYMBOL; \Wheelchair (marvosym)
+\DeclareTextCommand{\textWheelchair}{PU}{\9046\177}%* U+267F
+% U+2691 BLACK FLAG; \Flag (ifsym)
+\DeclareTextCommand{\textFlag}{PU}{\9046\221}%* U+2691
+%* \textFlag -> \VarFlag (ifsym)
+% U+2692 HAMMER AND PICK; \MineSign (marvosym)
+\DeclareTextCommand{\textMineSign}{PU}{\9046\222}%* U+2692
+% U+2694 CROSSED SWORDS; \dsmilitary (dictsym)
+\DeclareTextCommand{\textdsmilitary}{PU}{\9046\224}%* U+2694
+%* \textdsmilitary -> \textxswup (fourier)
+% U+2695 STAFF OF AESCULAPIUS; \dsmedical (dictsym)
+\DeclareTextCommand{\textdsmedical}{PU}{\9046\225}%* U+2695
+% U+2696 SCALES; \dsjuridical (dictsym)
+\DeclareTextCommand{\textdsjuridical}{PU}{\9046\226}%* U+2696
+% U+2697 ALEMBIC; \dschemical (dictsym)
+\DeclareTextCommand{\textdschemical}{PU}{\9046\227}%* U+2697
+% U+2698 FLOWER; \dsbiological (dictsym)
+\DeclareTextCommand{\textdsbiological}{PU}{\9046\230}%* U+2698
+% U+269A STAFF OF HERMES; \dscommercial (dictsym)
+\DeclareTextCommand{\textdscommercial}{PU}{\9046\232}%* U+269A
+% U+269D OUTLINED WHITE STAR; \manstar (manfnt)
+\DeclareTextCommand{\textmanstar}{PU}{\9046\235}%* U+269D
+% U+26A0 WARNING SIGN; \danger (fourier)
+\DeclareTextCommand{\textdanger}{PU}{\9046\240}%* U+26A0
+% U+26A2 DOUBLED FEMALE SIGN; \FemaleFemale (marvosym)
+\DeclareTextCommand{\textFemaleFemale}{PU}{\9046\242}%* U+26A2
+% U+26A3 DOUBLED MALE SIGN; \MaleMale (marvosym)
+\DeclareTextCommand{\textMaleMale}{PU}{\9046\243}%* U+26A3
+% U+26A4 INTERLOCKED FEMALE AND MALE SIGN; \FemaleMale (marvosym)
+\DeclareTextCommand{\textFemaleMale}{PU}{\9046\244}%* U+26A4
+% U+26A5 MALE AND FEMALE SIGN; \Hermaphrodite (marvosym)
+\DeclareTextCommand{\textHermaphrodite}{PU}{\9046\245}%* U+26A5
+% U+26AA MEDIUM WHITE CIRCLE; \Neural (marvosym)
+\DeclareTextCommand{\textNeutral}{PU}{\9046\252}%* U+26AA
+% U+26AD MARRIAGE SYMBOL
+\DeclareTextCommand{\textmarried}{PU}{\9046\255}% U+26AD
+% U+26AE DIVORCE SYMBOL
+\DeclareTextCommand{\textdivorced}{PU}{\9046\256}% U+26AE
+% U+26B2 NEUTER; \textuncrfemale (tipx)
+\DeclareTextCommand{\textPUuncrfemale}{PU}{\9046\262}% U+26B2
+%* \textPUuncrfemale -> \textuncrfemale (tipx)
+% U+26B9 SEXTILE; \hexstar (wasysym)
+\DeclareTextCommand{\texthexstar}{PU}{\9046\271}%* U+26B9
+% U+26BD SOCCER BALL; \Football (marvosym)
+\DeclareTextCommand{\textSoccerBall}{PU}{\9046\275}% U+26BD
+%* \textSoccerBall -> \Football (marvosym)
+% U+26C5 SUN BEHIND CLOUD; \SunCloud (ifsym)
+\DeclareTextCommand{\textSunCload}{PU}{\9046\305}%* U+26C5
+% U+26C6 RAIN; \Rain (ifsym)
+\DeclareTextCommand{\textRain}{PU}{\9046\306}%* U+26C6
+% U+26D4 NO ENTRY; \noway (fourier)
+\DeclareTextCommand{\textnoway}{PU}{\9046\324}%* U+26D4
+% U+26F0 MOUNTAIN; \Mountain (ifsym)
+\DeclareTextCommand{\textMountain}{PU}{\9046\360}%* U+26F0
+% U+26FA TENT; \Tent (ifsym)
+\DeclareTextCommand{\textTent}{PU}{\9046\372}%* U+26FA
+% \end{macrocode}
+%
+% \subsubsection{Dingbats: U+2700 to U+27BF}
+%
+% \begin{macrocode}
+% U+2701 UPPER BLADE SCISSORS; \ScissorRightBrokenBottom (bbding)
+\DeclareTextCommand{\textScissorRightBrokenBottom}{PU}{\9047\001}% U+2701
+%* \textScissorRightBrokenBottom -> \CutLeft (marvosym)
+%* \textScissorRightBrokenBottom -> \Cutright (marvosym)
+% U+2702 BLACK SCISSORS; \ScissorRight (bbding)
+\DeclareTextCommand{\textScissorRight}{PU}{\9047\002}%* U+2702
+%* \textScissorRight -> \RightScissors (marvosym)
+%* \textScissorRight -> \Leftscissors (marvosym)
+% U+2703 LOWER BLADE SCISSORS; \ScissorRightBrokenTop (bbding)
+\DeclareTextCommand{\textScissorRightBrokenTop}{PU}{\9047\003}%* U+2703
+% U+2704 WHITE SCISSORS; \ScissorHollowRight (bbding)
+\DeclareTextCommand{\textScissorHollowRight}{PU}{\9047\004}%* U+2704
+% U+2706 TELEPHONE LOCATION SIGN; \PhoneHandset (bbding)
+\DeclareTextCommand{\textPhoneHandset}{PU}{\9047\006}%* U+2706
+% U+2707 TAPE DRIVE; \Tape (bbding)
+\DeclareTextCommand{\textTape}{PU}{\9047\007}%* U+2707
+% U+2708 AIRPLANE; \Plane (bbding)
+\DeclareTextCommand{\textPlane}{PU}{\9047\010}%* U+2708
+% U+2709 ENVELOPE; \Envelope (bbding),
+\DeclareTextCommand{\textEnvelope}{PU}{\9047\011}%* U+2709
+%* \textEnvelope -> \Letter (marvosym)
+% U+270C VICTORY HAND; \Peace (bbding)
+\DeclareTextCommand{\textPeace}{PU}{\9047\014}%* U+270C
+% U+270D WRITING HAND; \WritingHand (marvosym)
+\DeclareTextCommand{\textWritingHand}{PU}{\9047\015}%* U+270D
+%* \textWritingHand -> \Writinghand (marvosym)
+% U+270E LOWER RIGHT PENCIL; \PencilRightDown (bbding)
+\DeclareTextCommand{\textPencilRightDown}{PU}{\9047\016}%* U+270E
+% U+270F PENCIL; \PencilRight (bbding)
+\DeclareTextCommand{\textPencilRight}{PU}{\9047\017}%* U+270F
+% U+2710 UPPER RIGHT PENCIL; \PencilRightUp (bbding)
+\DeclareTextCommand{\textPencilRightUp}{PU}{\9047\020}%* U+2710
+% U+2711 WHITE NIB; \NibRight (bbding)
+\DeclareTextCommand{\textNibRight}{PU}{\9047\021}%* U+2711
+% U+2712 BLACK NIB; \NibSolidRight (bbding)
+\DeclareTextCommand{\textNibSolidRight}{PU}{\9047\022}%* U+2712
+% U+2713 CHECK MARK; checkmark; \Checkmark (bbding)
+\DeclareTextCommand{\textCheckmark}{PU}{\9047\023}%* U+2713
+%* \textCheckmark -> \checkmark (MnSymbol)
+% U+2714 HEAVY CHECK MARK; \CheckmarkBold (bbding)
+\DeclareTextCommand{\textCheckmarkBold}{PU}{\9047\024}%* U+2714
+% U+2715 MULTIPLICATION X; \XSolid (bbding)
+\DeclareTextCommand{\textXSolid}{PU}{\9047\025}%* U+2715
+% U+2716 HEAVY MULTIPLICATION X; \XSolidBold (bbding)
+\DeclareTextCommand{\textXSolidBold}{PU}{\9047\026}%* U+2716
+% U+2717 BALLOT X; \XSolidBrush (bbding)
+\DeclareTextCommand{\textXSolidBrush}{PU}{\9047\027}%* U+2717
+% U+2719 OUTLINED GREEK CROSS; \PlusOutline (bbding)
+\DeclareTextCommand{\textPlusOutline}{PU}{\9047\031}%* U+2719
+% U+271A HEAVY GREEK CROSS; \Plus (bbding)
+\DeclareTextCommand{\textPlus}{PU}{\9047\032}%* U+271A
+% U+271B OPEN CENTRE CROSS; \PlusThinCenterOpen (bbding)
+\DeclareTextCommand{\textPlusThinCenterOpen}{PU}{\9047\033}%* U+271B
+% U+271C HEAVY OPEN CENTRE CROSS; \PlusCenterOpen (bbding)
+\DeclareTextCommand{\textPlusCenterOpen}{PU}{\9047\034}%* U+271C
+% U+271D LATIN CROSS; \Cross (bbding)
+\DeclareTextCommand{\textCross}{PU}{\9047\035}%* U+271D
+% U+271E SHADOWED WHITE LATIN CROSS; \CrossOpenShadow (bbding)
+\DeclareTextCommand{\textCrossOpenShadow}{PU}{\9047\036}%* U+271E
+% U+271F OUTLINED LATIN CROSS; \CrossOutline (bbding)
+\DeclareTextCommand{\textCrossOutline}{PU}{\9047\037}%* U+271F
+% U+2720 MALTESE CROSS; \CrossMaltese (bbding)
+\DeclareTextCommand{\textCrossMaltese}{PU}{\9047\040}%* U+2720
+% U+2721 STAR OF DAVID; \DavidStar (bbding)
+\DeclareTextCommand{\textDavidStar}{PU}{\9047\041}%* U+2721
+%* \textDavidStar -> \davidstar (wasysym)
+% U+2722 FOUR TEARDROP-SPOKED ASTERISK; \FourAsterisk (bbding)
+\DeclareTextCommand{\textFourAsterisk}{PU}{\9047\042}%* U+2722
+% U+2723 FOUR BALLOON-SPOKED ASTERISK; \JackStar (bbding)
+\DeclareTextCommand{\textJackStar}{PU}{\9047\043}%* U+2723
+% U+2724 HEAVY FOUR BALLOON-SPOKED ASTERISK; \JackStarBold (bbding)
+\DeclareTextCommand{\textJackStarBold}{PU}{\9047\044}%* U+2724
+% U+2725 FOUR CLUB-SPOKED ASTERISK; \CrossClowerTips (bbding)
+\DeclareTextCommand{\textClowerTips}{PU}{\9047\045}%* U+2725
+% U+2726 BLACK FOUR POINTED STAR; \FourStar (bbding)
+\DeclareTextCommand{\textFourStar}{PU}{\9047\046}%* U+2726
+% U+2727 WHITE FOUR POINTED STAR; \FourStarOpen (bbding)
+\DeclareTextCommand{\textFourStarOpen}{PU}{\9047\047}%* U+2727
+% U+272A CIRCLED WHITE STAR; \FiveStarOpenCircled (bbding)
+\DeclareTextCommand{\textFiveStarOpenCircled}{PU}{\9047\052}%* U+272A
+% U+272B OPEN CENTRE BLACK STAR; \FiveStarCenterOpen (bbding)
+\DeclareTextCommand{\textFiveStarCenterOpen}{PU}{\9047\053}%* U+272B
+% U+272C BLACK CENTRE WHITE STAR; \FiveStarOpenDotted (bbding)
+\DeclareTextCommand{\textFiveStarOpenDotted}{PU}{\9047\054}%* U+272C
+% U+272D OUTLINED BLACK STAR; \FiveStarOutline (bbding)
+\DeclareTextCommand{\textFiveStarOutline}{PU}{\9047\055}%* U+272D
+% U+272E HEAVY OUTLINED BLACK STAR; \FiveStarOutlineHeavy (bbding)
+\DeclareTextCommand{\textFiveStarOutlineHeavy}{PU}{\9047\056}%* U+272E
+% U+272F PINWHEEL STAR; \FiveStarConvex (bbding)
+\DeclareTextCommand{\textFiveStarConvex}{PU}{\9047\057}%* U+272F
+% U+2730 SHADOWED WHITE STAR; \FiveStarShadow (bbding)
+\DeclareTextCommand{\textFiveStarShadow}{PU}{\9047\060}%* U+2730
+% U+2731 HEAVY ASTERISK; \AsteriskBold (bbding)
+\DeclareTextCommand{\textAsteriskBold}{PU}{\9047\061}%* U+2731
+% U+2732 OPEN CENTRE ASTERISK; \AsteriskCenterOpen (bbding)
+\DeclareTextCommand{\textAsteriskCenterOpen}{PU}{\9047\062}%* U+2732
+% U+2734 EIGHT POINTED BLACK STAR; \EightStarTaper (bbding)
+\DeclareTextCommand{\textEightStarTaper}{PU}{\9047\064}%* U+2734
+% U+2735 EIGHT POINTED PINWHEEL STAR; \EightStarConvex (bbding)
+\DeclareTextCommand{\textEightStarConvex}{PU}{\9047\065}%* U+2735
+% U+2736 SIX POINTED BLACK STAR; \SixStar (bbding)
+\DeclareTextCommand{\textSixStar}{PU}{\9047\066}%* U+2736
+% U+2737 EIGHT POINTED RECTILINEAR BLACK STAR; \EightStar (bbding)
+\DeclareTextCommand{\textEightStar}{PU}{\9047\067}%* U+2737
+% U+2738 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR; \EightStarBold (bbding)
+\DeclareTextCommand{\textEightStarBold}{PU}{\9047\070}%* U+2738
+% U+2739 TWELVE POINTED BLACK STAR; \TwelveStar (bbding)
+\DeclareTextCommand{\textTwelveStar}{PU}{\9047\071}%* U+2739
+% U+273A SIXTEEN POINTED ASTERISK; \SixteenStarLight (bbding)
+\DeclareTextCommand{\textSixteenStarLight}{PU}{\9047\072}%* U+273A
+% U+273B TEARDROP-SPOKED ASTERISK; \SixFlowerPetalRemoved (bbding)
+\DeclareTextCommand{\textSixFlowerPetalRemoved}{PU}{\9047\073}%* U+273B
+% U+273C OPEN CENTRE TEARDROP-SPOKED ASTERISK;
+% \SixFlowerOpenCenter (bbding)
+\DeclareTextCommand{\textSixFlowerOpenCenter}{PU}{\9047\074}%* U+273C
+% U+273D HEAVY TEARDROP-SPOKED ASTERISK; \Asterisk (bbding)
+\DeclareTextCommand{\textAsterisk}{PU}{\9047\075}%* U+273D
+% U+273E SIX PETALLED BLACK AND WHITE FLORETTE; \SixFlowerAlternate (bbding)
+\DeclareTextCommand{\textSixFlowerAlternate}{PU}{\9047\076}%* U+273E
+% U+273F BLACK FLORETTE; \FiveFlowerPetal (bbding)
+\DeclareTextCommand{\textFiveFlowerPetal}{PU}{\9047\077}%* U+273F
+% U+2740 WHITE FLORETTE; \FiveFlowerOpen (bbding)
+\DeclareTextCommand{\textFiveFlowerOpen}{PU}{\9047\100}%* U+2740
+% U+2741 EIGHT PETALLED OUTLINED BLACK FLORETTE; \EightFlowerPetal (bbding)
+\DeclareTextCommand{\textEightFlowerPetal}{PU}{\9047\101}%* U+2741
+% U+2742 CIRCLED OPEN CENTRE EIGHT POINTED STAR; \SunshineOpenCircled (bbding)
+\DeclareTextCommand{\textSunshineOpenCircled}{PU}{\9047\102}%* U+2742
+% U+2743 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK; \SixFlowerAltPetal (bbding)
+\DeclareTextCommand{\textSixFlowerAltPetal}{PU}{\9047\103}%* U+2743
+% U+2744 SNOWFLAKE; \SnowflakeChevron (bbding)
+\DeclareTextCommand{\textSnowflakeChevron}{PU}{\9047\104}%* U+2744
+% U+2745 TIGHT TRIFOLIATE SNOWFLAKE; \Snowflake (bbding)
+\DeclareTextCommand{\textSnowflake}{PU}{\9047\105}%* U+2745
+% U+2746 HEAVY CHEVRON SNOWFLAKE; \SnowflakeChevronBold (bbding)
+\DeclareTextCommand{\textSnowflakeChevronBold}{PU}{\9047\106}%* U+2746
+% U+2747 SPARKLE; \Sparkle (bbding)
+\DeclareTextCommand{\textSparkle}{PU}{\9047\107}%* U+2747
+% U+2748 HEAVY SPARKLE; \SparkleBold (bbding)
+\DeclareTextCommand{\textSparkleBold}{PU}{\9047\110}%* U+2748
+% U+2749 BALLOON-SPOKED ASTERISK; \AsteriskRoundedEnds (bbding)
+\DeclareTextCommand{\textAsteriskRoundedEnds}{PU}{\9047\111}%* U+2749
+% U+274A EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;
+% \EightFlowerPetalRemoved (bbding)
+\DeclareTextCommand{\textEightFlowerPetalRemoved}{PU}{\9047\112}%* U+274A
+% U+274B HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;
+% \EightAsterisk (bbding)
+\DeclareTextCommand{\textEightAsterisk}{PU}{\9047\113}%* U+274B
+% U+274D SHADOWED WHITE CIRCLE; \CircleShadow (bbding)
+\DeclareTextCommand{\textCircleShadow}{PU}{\9047\115}%* U+274D
+% U+274F LOWER RIGHT DROP-SHADOWED WHITE SQUARE;
+% \SquareShadowBottomRight (bbding)
+\DeclareTextCommand{\textSquareShadowBottomRight}{PU}{\9047\117}%* U+274F
+% U+2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE;
+% \SquareShadowTopRight (bbding)
+\DeclareTextCommand{\textSquareTopRight}{PU}{\9047\120}%* U+2750
+% U+2751 LOWER RIGHT SHADOWED WHITE SQUARE;
+% \SquareCastShadowBottomRight (bbding)
+\DeclareTextCommand{\textSquareCastShadowBottomRight}{PU}{\9047\121}%* U+2751
+% U+2752 UPPER RIGHT SHADOWED WHITE SQUARE;
+% \SquareCastShadowTopRight (bbding)
+\DeclareTextCommand{\textSquareCastShadowTopRight}{PU}{\9047\122}%* U+2752
+% U+2756 BLACK DIAMOND MINUS WHITE X; \OrnamentDiamandSolid (bbding)
+\DeclareTextCommand{\textDiamandSolid}{PU}{\9047\126}%* U+2756
+% U+2758 LIGHT VERTICAL BAR; \RectangleThin (bbding)
+\DeclareTextCommand{\textRectangleThin}{PU}{\9047\130}%* U+2758
+% U+2759 MEDIUM VERTICAL BAR; \Rectangle (bbding)
+\DeclareTextCommand{\textRectangle}{PU}{\9047\131}%* U+2759
+% U+275A HEAVY VERTICAL BAR; \RectangleBold (bbding)
+\DeclareTextCommand{\textRectangleBold}{PU}{\9047\132}%* U+275A
+% \end{macrocode}
+%
+% \subsubsection{Miscellaneous Mathematical Symbols-A: U+27C0 to U+27EF}
+%
+% \begin{macrocode}
+% U+27C2 PERPENDICULAR; perpendicular; \perp (LaTeX)
+\DeclareTextCommand{\textperp}{PU}{\9047\302}%* U+27C2
+% \notperp (mathabx)
+\DeclareTextCommand{\textnotperp}{PU}{\9047\302\83\070}%* U+27C2 U+0338
+% U+27C7 OR WITH DOT INSIDE; \veedot (MnSymbol)
+\DeclareTextCommand{\textveedot}{PU}{\9047\307}%* U+27C7
+% U+27D1 AND WITH DOT; \wedgedot (MnSymbol)
+\DeclareTextCommand{\textwedgedot}{PU}{\9047\321}%* U+27D1
+% U+27DC LEFT MULTIMAP; \leftspoon (MnSymbol)
+\DeclareTextCommand{\textleftspoon}{PU}{\9047\334}%* U+27DC
+% U+27E6 MATHEMATICAL LEFT WHITE SQUARE BRACKET
+\DeclareTextCommand{\textlbrackdbl}{PU}{\9047\346}%* U+27E6
+%* \textlbrackdbl -> \llbracket (stmaryrd)
+% U+27E7 MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+\DeclareTextCommand{\textrbrackdbl}{PU}{\9047\347}%* U+27E7
+%* \textrbrackdbl -> \rrbracket (stmaryrd)
+% \end{macrocode}
+%
+% \subsubsection{Supplemental Arrows-A: U+27F0 to U+27FF}
+%
+% \begin{macrocode}
+% U+27F2 ANTICLOCKWISE GAPPED CIRCLE ARROW;
+% \circlearrowleft (AmS)
+\DeclareTextCommand{\textcirclearrowleft}{PU}{\9047\362}%* U+27F2
+% U+27F3 CLOCKWISE GAPPED CIRCLE ARROW; \circlearrowright (AmS)
+\DeclareTextCommand{\textcirclearrowright}{PU}{\9047\363}%* U+27F3
+% U+27F5 LONG LEFTWARDS ARROW; \longleftarrow (AmS)
+\DeclareTextCommand{\textlongleftarrow}{PU}{\9047\365}%* U+27F5
+% U+27F6 LONG RIGHTWARDS ARROW; \longrightarrow (AmS)
+\DeclareTextCommand{\textlongrightarrow}{PU}{\9047\366}%* U+27F6
+% U+27F7 LONG LEFT RIGHT ARROW; \longleftrightarrow (AmS)
+\DeclareTextCommand{\textlongleftrightarrow}{PU}{\9047\367}%* U+27F7
+% U+27F8 LONG LEFTWARDS DOUBLE ARROW; \Longleftarrow (AmS)
+\DeclareTextCommand{\textLongleftarrow}{PU}{\9047\370}%* U+27F8
+% U+27F9 LONG RIGHTWARDS DOUBLE ARROW; \Longrightarrow (AmS)
+\DeclareTextCommand{\textLongrightarrow}{PU}{\9047\371}%* U+27F9
+% U+27FA LONG LEFT RIGHT DOUBLE ARROW; \Longleftrightarrow (AmS)
+\DeclareTextCommand{\textLongleftrightarrow}{PU}{\9047\372}%* U+27FA
+% U+27FC LONG RIGHTWARDS ARROW FROM BAR; \longmapsto (AmS)
+\DeclareTextCommand{\textlongmapsto}{PU}{\9047\374}%* U+27FC
+% U+27FD LONG LEFTWARDS DOUBLE ARROW FROM BAR; \Longmapsfrom (stmaryrd)
+\DeclareTextCommand{\textLongmapsfrom}{PU}{\9047\375}%* U+27FD
+% U+27FE LONG RIGHTWARDS DOUBLE ARROW FROM BAR; \Longmapsto (stmaryrd)
+\DeclareTextCommand{\textLongmapsto}{PU}{\9047\376}%* U+27FE
+% \end{macrocode}
+%
+% \subsubsection{Supplemental Arrows-B: U+2900 to U+297F}
+%
+% \begin{macrocode}
+% U+2921 NORTH WEST AND SOUTH EAST ARROW; \nwsearrow (MnSymbol)
+\DeclareTextCommand{\textnwsearrow}{PU}{\9051\041}%* U+2921
+% U+2922 NORTH EAST AND SOUTH WEST ARROW; \neswarrow (MnSymbol)
+\DeclareTextCommand{\textneswarrow}{PU}{\9051\042}%* U+2922
+% U+2923 NORTH WEST ARROW WITH HOOK; \lhooknwarrow (MnSymbol)
+\DeclareTextCommand{\textlhooknwarrow}{PU}{\9051\043}%* U+2923
+% U+2924 NORTH EAST ARROW WITH HOOK; \rhooknearrow (MnSymbol)
+\DeclareTextCommand{\textrhooknearrow}{PU}{\9051\044}%* U+2924
+% U+2925 SOUTH EAST ARROW WITH HOOK; \lhooksearrow (MnSymbol)
+\DeclareTextCommand{\textlhooksearrow}{PU}{\9051\045}%* U+2925
+% U+2926 SOUTH WEST ARROW WITH HOOK; \rhookswarrow (MnSymbol)
+\DeclareTextCommand{\textrhookswarrow}{PU}{\9051\046}%* U+2926
+% U+2933 WAVE ARROW POINTING DIRECTLY RIGHT; \leadsto (wasysym)
+\DeclareTextCommand{\textleadsto}{PU}{\9051\063}%* U+2933
+% U+2934 ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;
+% \rcurvearrowne (MnSymbol)
+\DeclareTextCommand{\textrcurvearrowne}{PU}{\9051\064}%* U+2934
+% U+2935 ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;
+% \lcurvearrowse (MnSymbol)
+\DeclareTextCommand{\textlcurvearrowse}{PU}{\9051\065}%* U+2935
+% U+2936 ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;
+% \lcurvearrowsw (MnSymbol)
+\DeclareTextCommand{\textlcurvearrowsw}{PU}{\9051\066}%* U+2936
+% U+2937 ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;
+% \rcurvearrowse (MnSymbol)
+\DeclareTextCommand{\textrcurvearrowse}{PU}{\9051\067}%* U+2937
+% U+2938 RIGHT-SIDE ARC CLOCKWISE ARROW; \lcurvearrowdown (MnSymbol)
+\DeclareTextCommand{\textlcurvearrowdown}{PU}{\9051\070}%* U+2938
+%* \textlcurvearrowdown -> \RightTorque (marvosym)
+%* \textlcurvearrowdown -> \Righttorque (marvosym)
+% U+2939 LEFT-SIDE ARC ANTICLOCKWISE ARROW;
+% \rcurvearrowdown (MnSymbol)
+\DeclareTextCommand{\textrcurvearrowdown}{PU}{\9051\071}%* U+2939
+%* \textrcurvearrowdown -> \LeftTorque (marvosym)
+%* \textrcurvearrowdown -> \Lefttorque (marvosym)
+% U+293A TOP ARC ANTICLOCKWISE ARROW; \rcurvearrowleft (MnSymbol)
+\DeclareTextCommand{\textrcurvearrowleft}{PU}{\9051\072}%* U+293A
+% U+293B BOTTOM ARC ANTICLOCKWISE ARROW;
+% \rcurvearrowright (MnSymbol)
+\DeclareTextCommand{\textrcurvearrowright}{PU}{\9051\073}%* U+293B
+% U+294A LEFT BARB UP RIGHT BARB DOWN HARPOON; \leftrightharpoon (mathabx)
+\DeclareTextCommand{\textleftrightharpoon}{PU}{\9051\112}%* U+294A
+% U+294B LEFT BARB DOWN RIGHT BARB UP HARPOON; \rightleftharpoon (mathabx)
+\DeclareTextCommand{\textrightleftharpoon}{PU}{\9051\113}%* U+294B
+% U+294C UP BARB RIGHT DOWN BARB LEFT HARPOON;
+% \updownharpoonrightleft (MnSymbol)
+\DeclareTextCommand{\textupdownharpoonrightleft}{PU}{\9051\114}%* U+294C
+% U+294D UP BARB LEFT DOWN BARB RIGHT HARPOON;
+% \updownharpoonleftright (MnSymbol)
+\DeclareTextCommand{\textupdownharpoonleftright}{PU}{\9051\115}%* U+294D
+% U+2962 LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS
+% HARPOON WITH BARB DOWN; \leftleftharpoons (mathabx)
+\DeclareTextCommand{\textleftleftharpoons}{PU}{\9051\142}%* U+2962
+% U+2963 UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS
+% HARPOON WITH BARB RIGHT; \upupharpoons (mathabx)
+\DeclareTextCommand{\textupupharpoons}{PU}{\9051\143}%* U+2963
+% U+2964 RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON
+% WITH BARB DOWN; \rightrightharpoons (mathabx)
+\DeclareTextCommand{\textrightrightharpoons}{PU}{\9051\144}%* U+2964
+% U+2965 DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON
+% WITH BARB RIGHT; \downdownharpoons (mathabx)
+\DeclareTextCommand{\textdowndownharpoons}{PU}{\9051\145}%* U+2965
+% U+296A LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;
+% \leftbarharpoon (mathabx)
+\DeclareTextCommand{\textleftbarharpoon}{PU}{\9051\152}%* U+296A
+% U+296B LEFTWARDS HARPOON WITH BARB DOWN BELOW
+% LONG DASH; \barleftharpoon (mathabx)
+\DeclareTextCommand{\textbarleftharpoon}{PU}{\9051\153}%* U+296B
+% U+296C RIGHTWARDS HARPOON WITH BARB UP ABOVE
+% LONG DASH; \rightbarharpoon (mathabx)
+\DeclareTextCommand{\textrightbarharpoon}{PU}{\9051\154}%* U+296C
+% U+296D RIGHTWARDS HARPOON WITH BARB DOWN BELOW
+% LONG DASH; \barrightharpoon (mathabx)
+\DeclareTextCommand{\textbarrightharpoon}{PU}{\9051\155}%* U+296D
+% U+296E UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON
+% WITH BARB RIGHT; \updownharpoons (mathabx)
+\DeclareTextCommand{\textupdownharpoons}{PU}{\9051\156}%* U+296E
+% U+296F DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON
+% WITH BARB RIGHT; \downupharpoons (mathabx)
+\DeclareTextCommand{\textdownupharpoons}{PU}{\9051\157}%* U+296F
+% U+297F DOWN FISH TAIL
+\DeclareTextCommand{\textmoo}{PU}{\9051\177\83\066}%* U+297F U+0336
+% \end{macrocode}
+%
+% \subsubsection{Miscellaneous Mathematical Symbols-B: U+2980 to U+29FF}
+%
+% \begin{macrocode}
+% U+2987 Z NOTATION LEFT IMAGE BRACKET; \llparenthesis (stmaryrd)
+\DeclareTextCommand{\textllparenthesis}{PU}{\9051\207}%* U+2987
+% U+2988 Z NOTATION RIGHT IMAGE BRACKET; \rrparenthesis (stmaryrd)
+\DeclareTextCommand{\textrrparenthesis}{PU}{\9051\210}%* U+2988
+% U+29B0 REVERSED EMPTY SET; \invdiameter (wasysym)
+\DeclareTextCommand{\textinvdiameter}{PU}{\9051\260}%* U+29B0
+% U+29B6 CIRCLED VERTICAL BAR; \obar (stmaryrd)
+\DeclareTextCommand{\textobar}{PU}{\9051\266}%* U+29B6
+%* \textobar -> \textvarobar (stmaryrd)
+% U+29B8 CIRCLED REVERSE SOLIDUS; \obslash (stmaryrd)
+\DeclareTextCommand{\textobslash}{PU}{\9051\270}%* U+29B8
+%* \textobslash -> \circledbslash (txfonts/pxfonts)
+%* \textobslash -> \obackslash (mathabx)
+%* \textobslash -> \varobslash (stmaryrd)
+% U+29BA CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF
+% DIVIDED BY VERTICAL BAR; \obot (mathabx)
+\DeclareTextCommand{\textobot}{PU}{\9051\272}%* U+29BA
+%* \textobot -> \odplus (ulsy)
+% U+29BB CIRCLE WITH SUPERIMPOSED X; \NoChemicalCleaning (marvosym)
+\DeclareTextCommand{\textNoChemicalCleaning}{PU}{\9051\273}%* U+29BB
+% U+29C0 CIRCLED LESS-THAN; \olessthan (stmaryrd)
+\DeclareTextCommand{\textolessthan}{PU}{\9051\300}%* U+29C0
+%* \textolessthan -> \varolessthan (stmaryrd)
+% U+29C1 CIRCLED GREATER-THAN; \ogreaterthan (stmaryrd)
+\DeclareTextCommand{\textogreaterthan}{PU}{\9051\301}%* U+29C1
+%* \textogreaterthan -> \varogreaterthan (stmaryrd)
+% U+29C4 SQUARED RISING DIAGONAL SLASH; \boxslash (mathabx, stmaryrd)
+\DeclareTextCommand{\textboxslash}{PU}{\9051\304}%* U+29C4
+% U+29C5 SQUARED FALLING DIAGONAL SLASH; \boxbslash (stmaryrd)
+\DeclareTextCommand{\textboxbslash}{PU}{\9051\305}%* U+29C5
+% U+29C6 SQUARED ASTERISK; \boxast (stmaryrd)
+\DeclareTextCommand{\textboxast}{PU}{\9051\306}%* U+29C6
+% U+29C7 SQUARED SMALL CIRCLE; \boxcircle (stmaryrd)
+\DeclareTextCommand{\textboxcircle}{PU}{\9051\307}%* U+29C7
+% U+29C8 SQUARED SQUARE; \boxbox (stmaryrd)
+\DeclareTextCommand{\textboxbox}{PU}{\9051\310}%* U+29C8
+% U+29D3 BLACK BOWTIE; \Valve (marvosym)
+\DeclareTextCommand{\textValve}{PU}{\9051\323}%* U+29D3
+% U+29DF DOUBLE-ENDED MULTIMAP; \multimapboth (txfonts/pxfonts)
+\DeclareTextCommand{\textmultimapboth}{PU}{\9051\337}%* U+29DF
+% U+29E2 SHUFFLE PRODUCT; \shuffle (shuffle)
+\DeclareTextCommand{\textshuffle}{PU}{\9051\342}%* U+29E2
+% \end{macrocode}
+%
+% \subsubsection{Supplemental Mathematical Operators: U+2A00 to U+2AFF}
+%
+% \begin{macrocode}
+% U+2A04 N-ARY UNION OPERATOR WITH PLUS; \uplus (LaTeX)
+\DeclareTextCommand{\textuplus}{PU}{\9052\004}%* U+2A04
+% U+2A07 TWO LOGICAL AND OPERATOR; \bigdoublewedge (MnSymbol)
+\DeclareTextCommand{\textbigdoublewedge}{PU}{\9052\007}%* U+2A07
+% U+2A08 TWO LOGICAL OR OPERATOR; \bigdoublevee (MnSymbol)
+\DeclareTextCommand{\textbigdoublevee}{PU}{\9052\010}%* U+2A08
+% U+2A1D JOIN; \Join (latexsym, amsfonts, amssymb, mathabx, txfonts,
+% pxfonts, wasysym)
+\DeclareTextCommand{\textJoin}{PU}{\9052\035}%* U+2A1D
+% U+2A1F Z NOTATION SCHEMA COMPOSITION; \fatsemi (stmaryrd)
+\DeclareTextCommand{\textfatsemi}{PU}{\9052\037}%* U+2A1F
+% U+2A22 PLUS SIGN WITH SMALL CIRCLE ABOVE; \circplus (mathabx)
+\DeclareTextCommand{\textcircplus}{PU}{\9052\042}%* U+2A22
+% U+2A2A MINUS SIGN WITH DOT BELOW; \minusdot (MnSymbol)
+\DeclareTextCommand{\textminusdot}{PU}{\9052\052}%* U+2A2A
+%* \textminusdot -> \divdot (mathabx)
+% U+2A30 MULTIPLICATION SIGN WITH DOT ABOVE; \dottimes (mathabx)
+\DeclareTextCommand{\textdottimes}{PU}{\9052\060}%* U+2A30
+% U+2A32 SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;
+% \dtimes (mathdesign)
+\DeclareTextCommand{\textdtimes}{PU}{\9052\062}%* U+2A32
+% U+2A38 CIRCLED DIVISION SIGN; \odiv (mathabx)
+\DeclareTextCommand{\textodiv}{PU}{\9052\070}%* U+2A38
+% U+2A3C INTERIOR PRODUCT; \invneg (MnSymbol)
+\DeclareTextCommand{\textinvneg}{PU}{\9052\074}%* U+2A3C
+% U+2A4E DOUBLE SQUARE INTERSECTION; \sqdoublecap (mathabx)
+\DeclareTextCommand{\textsqdoublecap}{PU}{\9052\116}%* U+2A4E
+%* \textsqdoublecap -> \doublesqcap (MnSymbol)
+% U+2A40 INTERSECTION WITH DOT; \capdot (MnSymbol)
+\DeclareTextCommand{\textcapdot}{PU}{\9052\100}%* U+2A40
+% U+2A4F DOUBLE SQUARE UNION; \sqdoublecup (mathabx)
+\DeclareTextCommand{\textsqdoublecup}{PU}{\9052\117}%* U+2A4F
+%* \textsqdoublecup -> \doublesqcup (MnSymbol)
+% U+2A55 TWO INTERSECTING LOGICAL AND; \doublewedge (MnSymbol)
+\DeclareTextCommand{\textdoublewedge}{PU}{\9052\125}%* U+2A55
+% U+2A56 TWO INTERSECTING LOGICAL OR; \doublevee (MnSymbol
+\DeclareTextCommand{\textdoublevee}{PU}{\9052\126}%* U+2A56
+%* \textdoublevee -> \merge (stmaryrd)
+% U+2A5E LOGICAL AND WITH DOUBLE OVERBAR;
+% \doublebarwedge (AmS)
+\DeclareTextCommand{\textdoublebarwedge}{PU}{\9052\136}%* U+2A5E
+% U+2A63 LOGICAL OR WITH DOUBLE UNDERBAR;
+% \veedoublebar (mahtabx)
+\DeclareTextCommand{\textveedoublebar}{PU}{\9052\143}%* U+2A63
+% U+2A66 EQUALS SIGN WITH DOT BELOW; \eqdot (MnSymbol)
+\DeclareTextCommand{\texteqdot}{PU}{\9052\146}%* U+2A66
+% \neqdot (MnSymbol)
+\DeclareTextCommand{\textneqdot}{PU}{\9052\146\83\070}%* U+2A66 U+0338
+% U+2A74 DOUBLE COLON EQUAL; \coloncolonequals (colonequals)
+\DeclareTextCommand{\textcoloncolonequals}{PU}{\9052\164}%* U+2A74
+% U+2A7D LESS-THAN OR SLANTED EQUAL TO; \leqslant (AmS)
+\DeclareTextCommand{\textleqslant}{PU}{\9052\175}%* U+2A7D
+% \nleqslant (txfonts/pxfonts)
+\DeclareTextCommand{\textnleqslant}{PU}{\9052\175\83\070}%* U+2A7D U+0338
+% U+2A7E GREATER-THAN OR SLANTED EQUAL TO; \geqslant (AmS)
+\DeclareTextCommand{\textgeqslant}{PU}{\9052\176}%* U+2A7E
+% \ngeqslang (txfonts/pxfonts)
+\DeclareTextCommand{\textngeqslant}{PU}{\9052\176\83\070}%* U+2A7E U+0338
+% U+2A85 LESS-THAN OR APPROXIMATE; \lessapprox (AmS)
+\DeclareTextCommand{\textlessapprox}{PU}{\9052\205}%* U+2A85
+% \nlessapprox (txfonts/pxfonts)
+\DeclareTextCommand{\textnlessapprox}{PU}{\9052\205\83\070}%* U+2A85 U+0338
+% U+2A86 GREATER-THAN OR APPROXIMATE; \gtrapprox (AmS)
+\DeclareTextCommand{\textgtrapprox}{PU}{\9052\206}%* U+2A86
+% \ngtrapprox (txfonts/pxfonts)
+\DeclareTextCommand{\textngtrapprox}{PU}{\9052\206\83\070}%* U+2A86 U+0338
+% U+2A87 LESS-THAN AND SINGLE-LINE NOT EQUAL TO; \lneq (AmS)
+\DeclareTextCommand{\textlneq}{PU}{\9052\207}%* U+2A87
+% U+2A88 GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;
+% \gneq (AmS)
+\DeclareTextCommand{\textgneq}{PU}{\9052\210}%* U+2A88
+% U+2A89 LESS-THAN AND NOT APPROXIMATE; \lnapprox (AmS)
+\DeclareTextCommand{\textlnapprox}{PU}{\9052\211}%* U+2A89
+% U+2A8A GREATER-THAN AND NOT APPROXIMATE; \gnapprox (AmS)
+\DeclareTextCommand{\textgnapprox}{PU}{\9052\212}%* U+2A8A
+% U+2A8B LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;
+% \lesseqqgtr (AmS)
+\DeclareTextCommand{\textlesseqqgtr}{PU}{\9052\213}%* U+2A8B
+% U+2A8C GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;
+% \gtreqqless (AmS)
+\DeclareTextCommand{\textgtreqqless}{PU}{\9052\214}%* U+2A8C
+% U+2A95 SLANTED EQUAL TO OR LESS-THAN; \eqslantless (AmS)
+\DeclareTextCommand{\texteqslantless}{PU}{\9052\225}%* U+2A95
+% U+2A96 SLANTED EQUAL TO OR GREATER-THAN; \eqslantgtr (AmS)
+\DeclareTextCommand{\texteqslantgtr}{PU}{\9052\226}%* U+2A96
+% U+2AA6 LESS-THAN CLOSED BY CURVE; \leftslice (stmaryrd)
+\DeclareTextCommand{\textleftslice}{PU}{\9052\246}%* U+2AA6
+% U+2AA7 GREATER-THAN CLOSED BY CURVE; \rightslice (stmaryrd)
+\DeclareTextCommand{\textrightslice}{PU}{\9052\247}%* U+2AA7
+% U+2AAF PRECEDES ABOVE SINGLE-LINE EQUALS SIGN; \preceq (MnSymbol)
+\DeclareTextCommand{\textpreceq}{PU}{\9052\257}%* U+2AAF
+% \npreceq (txfonts/pxfonts)
+\DeclareTextCommand{\textnpreceq}{PU}{\9052\257\83\070}%* U+2AAF U+0338
+% U+2AB0 SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN; \succeq (MnSymbol)
+\DeclareTextCommand{\textsucceq}{PU}{\9052\260}%* U+2AB0
+% \nsucceq (txfonts/pxfonts)
+\DeclareTextCommand{\textnsucceq}{PU}{\9052\260\83\070}%* U+2AB0 U+0338
+% U+2AB1 PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO; \precneq (mathabx)
+\DeclareTextCommand{\textprecneq}{PU}{\9052\261}%* U+2AB1
+% U+2AB2 SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO; \succneq (mathabx)
+\DeclareTextCommand{\textsuccneq}{PU}{\9052\262}%* U+2AB2
+% U+2AB3 PRECEDES ABOVE EQUALS SIGN; \preceqq (txfonts/pxfonts)
+\DeclareTextCommand{\textpreceqq}{PU}{\9052\263}%* U+2AB3
+% \npreceqq (txfonts/pxfonts)
+\DeclareTextCommand{\textnpreceqq}{PU}{\9052\263\83\070}%* U+2AB3 U+0338
+% U+2AB4 SUCCEEDS ABOVE EQUALS SIGN; \succeqq (txfonts/pxfonts)
+\DeclareTextCommand{\textsucceqq}{PU}{\9052\264}%* U+2AB4
+% \nsucceqq (txfonts/pxfonts)
+\DeclareTextCommand{\textnsucceqq}{PU}{\9052\264\83\070}%* U+2AB4 U+0338
+% U+2AB5 PRECEDES ABOVE NOT EQUAL TO; \precneqq (txfonts/pxfonts)
+\DeclareTextCommand{\textprecneqq}{PU}{\9052\265}%* U+2AB5
+% U+2AB6 SUCCEEDS ABOVE NOT EQUAL TO; \succneqq (txfonts/pxfonts)
+\DeclareTextCommand{\textsuccneqq}{PU}{\9052\266}%* U+2AB6
+% U+2AB7 PRECEDES ABOVE ALMOST EQUAL TO; \precapprox (AmS)
+\DeclareTextCommand{\textprecapprox}{PU}{\9052\267}%* U+2AB7
+% \nprecapprox (txfonts/pxfonts)
+\DeclareTextCommand{\textnprecapprox}{PU}{\9052\267\83\070}%* U+2AB7 U+0338
+% U+2AB8 SUCCEEDS ABOVE ALMOST EQUAL TO; \succapprox (AmS)
+\DeclareTextCommand{\textsuccapprox}{PU}{\9052\270}%* U+2AB8
+% \nsuccapprox (txfonts/pxfonts)
+\DeclareTextCommand{\textnsuccapprox}{PU}{\9052\270\83\070}%* U+2AB8 U+0338
+% U+2AB9 PRECEDES ABOVE NOT ALMOST EQUAL TO; \precnapprox (AmS)
+\DeclareTextCommand{\textprecnapprox}{PU}{\9052\271}%* U+2AB9
+% U+2ABA SUCCEEDS ABOVE NOT ALMOST EQUAL TO; \succnapprox (AmS)
+\DeclareTextCommand{\textsuccnapprox}{PU}{\9052\272}%* U+2ABA
+% U+2AC5 SUBSET OF ABOVE EQUALS SIGN; \subseteqq (AmS)
+\DeclareTextCommand{\textsubseteqq}{PU}{\9052\305}%* U+2AC5
+% \nsubseteqq (txfonts/pxfonts, mathabx)
+\DeclareTextCommand{\textnsubseteqq}{PU}{\9052\305\83\070}%* U+2AC5 U+0338
+% U+2AC6 SUPERSET OF ABOVE EQUALS SIGN; \supseteqq (AmS)
+\DeclareTextCommand{\textsupseteqq}{PU}{\9052\306}%* U+2AC6
+% \nsupseteqq (mathabx)
+\DeclareTextCommand{\textnsupseteqq}{PU}{\9052\306\83\070}%* U+2AC6 U+0338
+% U+2AE3 DOUBLE VERTICAL BAR LEFT TURNSTILE
+\DeclareTextCommand{\textdashV}{PU}{\9052\343}%* U+2AE3
+%* \textdashV -> \leftVdash (MnSymbol)
+% \ndashV (mathabx)
+\DeclareTextCommand{\textndashV}{PU}{\9052\343\83\070}%* U+2AE3 U+0338
+%* \textndashV -> \nleftVdash (MnSymbol)
+% U+2AE4 VERTICAL BAR DOUBLE LEFT TURNSTILE; \Dashv (mathabx)
+\DeclareTextCommand{\textDashv}{PU}{\9052\344}%* U+2AE4
+%* \textDashv -> \leftmodels (MnSymbol)
+% \nDashv (mathabx)
+\DeclareTextCommand{\textnDashv}{PU}{\9052\344\83\070}%* U+2AE4 U+0338
+%* \textnDashv -> \nleftmodels (MnSymbol)
+% U+2AE5 DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;
+% \DashV (mathabx)
+\DeclareTextCommand{\textDashV}{PU}{\9052\345}%* U+2AE5
+%* \textDashV -> \leftModels (MnSymbol)
+% \nDashV (mathabx)
+\DeclareTextCommand{\textnDashV}{PU}{\9052\345\83\070}%* U+2AE5 U+0338
+%* \textnDashV -> \nleftModels (MnSymbol)
+% U+2AEA DOUBLE DOWN TACK; \downmodels (MnSymbol)
+\DeclareTextCommand{\textdownmodels}{PU}{\9052\352}%* U+2AEA
+% \ndownmodels (MnSymbol)
+\DeclareTextCommand{\textndownmodels}{PU}{\9052\352\83\070}%* U+2AEA U+0338
+% U+2AEB DOUBLE UP TACK; \upmodels (MnSymbol)
+\DeclareTextCommand{\textupmodels}{PU}{\9052\353}%* U+2AEB
+% \nupmodels (MnSymbol)
+\DeclareTextCommand{\textnupmodels}{PU}{\9052\353\83\070}%* U+2AEB U+0338
+% U+2AEF VERTICAL LINE WITH CIRCLE ABOVE; \upspoon (MnSymbol)
+\DeclareTextCommand{\textupspoon}{PU}{\9052\357}%* U+2AEF
+% U+2AF4 TRIPLE VERTICAL BAR BINARY RELATION;
+% \interleave (stmaryrd)
+\DeclareTextCommand{\textinterleave}{PU}{\9052\364}%* U+2AF4
+% U+2AFD DOUBLE SOLIDUS OPERATOR; \sslash (stmaryrd)
+\DeclareTextCommand{\textsslash}{PU}{\9052\375}%* U+2AFD
+%* \textsslash -> \varparallel (txfonts\pxfonts)
+% \end{macrocode}
+%
+% \subsubsection{Miscellaneous Symbols and Arrows: U+2B00 to U+2BFF}
+%
+% \begin{macrocode}
+% U+2B20 WHITE PENTAGON; \pentagon (wasysym)
+\DeclareTextCommand{\textpentagon}{PU}{\9053\040}%* U+2B20
+% U+2B21 WHITE HEXAGON; \varhexagon (wasysym)
+\DeclareTextCommand{\textvarhexagon}{PU}{\9053\041}%* U+2B21
+% \end{macrocode}
+%
+% \subsubsection{Latin Extended-C: U+2C60 to U+2C7F}
+%
+% \begin{macrocode}
+% U+2C7C LATIN SUBSCRIPT SMALL LETTER J
+\DeclareTextCommand{\textjinferior}{PU}{\9054\174}%* U+2C7C
+% \end{macrocode}
+%
+% \subsubsection{Supplemental Punctuation: U+2E00 to U+2E7F}
+%
+% \begin{macrocode}
+% U+2E13 DOTTED OBELOS; \slashdiv (MnSymbol)
+\DeclareTextCommand{\textslashdiv}{PU}{\9056\023}%* U+2E13
+% U+2E18 INVERTED INTERROBANG; \textinterrobangdown (textcomp)
+\DeclareTextCommand{\textinterrobangdown}{PU}{\9056\030}% U+2E18
+% U+2E2D FIVE DOT MARK; \fivedots (MnSymbol)
+\DeclareTextCommand{\textfivedots}{PU}{\9056\055}%* U+2E2D
+% \end{macrocode}
+%
+% \subsubsection{Modifier Tone Letters: U+A700 to U+A71F}
+%
+% \begin{macrocode}
+% U+A71B MODIFIER LETTER RAISED UP ARROW; \textupstep (tipa)
+\DeclareTextCommand{\textupstep}{PU}{\9247\033}% U+A71B
+% U+A71C MODIFIER LETTER RAISED DOWN ARROW;
+% \textdownstep (tipa)
+\DeclareTextCommand{\textdownstep}{PU}{\9247\034}% U+A71C
+% \end{macrocode}
+%
+% \subsubsection{Latin Extended-D: U+A720 to U+A7FF}
+%
+% \begin{macrocode}
+% U+A727 LATIN SMALL LETTER HENG; \textheng (tipx)
+\DeclareTextCommand{\textPUheng}{PU}{\9247\047}% U+A727
+%* \textPUheng -> \textheng (tipx)
+% U+A72C LATIN CAPITAL LETTER CUATRILLO; \textlhookfour (tipx)
+\DeclareTextCommand{\textPUlhookfour}{PU}{\9247\054}% U+A72C
+%* \textPUlhookfour -> \textlhookfour (tipx)
+% U+A730 LATIN LETTER SMALL CAPITAL F; \textscf (tipx)
+\DeclareTextCommand{\textPUscf}{PU}{\9247\060}% U+A730
+%* \textPUscf -> \textscf (tipx)
+% U+A735 LATIN SMALL LETTER AO; \textaolig (tipx)
+\DeclareTextCommand{\textPUaolig}{PU}{\9247\065}% U+A735
+%* \textPUaolig -> \textaolig (tipx)
+% U+A74F LATIN SMALL LETTER OO; \oo (wsuipa)
+\DeclareTextCommand{\textoo}{PU}{\9247\117}%* U+A74F
+% U+A788 MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+\DeclareTextCommand{\textcircumlow}{PU}{\9247\210}% U+A788
+% \end{macrocode}
+%
+% \subsubsection{Alphabetic Presentation Forms: U+FB00 to U+FB4F}
+%
+% \begin{macrocode}
+% U+FB01 LATIN SMALL LIGATURE FI; fi
+\DeclareTextCommand{\textfi}{PU}{\9373\001}% U+FB01
+% U+FB02 LATIN SMALL LIGATURE FL; fl
+\DeclareTextCommand{\textfl}{PU}{\9373\002}% U+FB02
+% \end{macrocode}
+%
+% \subsubsection{Musical Symbols: U+1D100 to U+1D1FF}
+%
+% \begin{macrocode}
+% U+1D13B MUSICAL SYMBOL WHOLE REST; \GaPa (harmony)
+\DeclareTextCommand{\textGaPa}{PU}{\9330\064\9335\073}%* U+1D13B
+% U+1D13C MUSICAL SYMBOL HALF REST; \HaPa (harmony)
+\DeclareTextCommand{\textHaPa}{PU}{\9330\064\9335\074}%* U+1D13C
+% U+1D13D MUSICAL SYMBOL QUARTER REST; \ViPa (harmony)
+\DeclareTextCommand{\textViPa}{PU}{\9330\064\9335\075}%* U+1D13D
+% U+1D13E MUSICAL SYMBOL EIGHTH REST; \AcPa (harmony)
+\DeclareTextCommand{\textAcPa}{PU}{\9330\064\9335\076}%* U+1D13E
+% U+1D13F MUSICAL SYMBOL SIXTEENTH REST; \SePa (harmony)
+\DeclareTextCommand{\textSePa}{PU}{\9330\064\9335\077}%* U+1D13F
+% U+1D140 MUSICAL SYMBOL THIRTY-SECOND REST; \ZwPa (harmony)
+\DeclareTextCommand{\textZwPa}{PU}{\9330\064\9335\100}%* U+1D140
+% U+1D15D MUSICAL SYMBOL WHOLE NOTE; \fullnote (wasysym)
+\DeclareTextCommand{\textfullnote}{PU}{\9330\064\9335\135}%* U+1D15D
+%* \textfullnote -> \Ganz (harmony)
+% U+1D15E MUSICAL SYMBOL HALF NOTE; \halfnote (wasysym)
+\DeclareTextCommand{\texthalfnote}{PU}{\9330\064\9335\136}%* U+1D15E
+%* \texthalfnote -> \Halb (harmony)
+% U+1D15F MUSICAL SYMBOL QUARTER NOTE; \Vier (harmony)
+\DeclareTextCommand{\textVier}{PU}{\9330\064\9335\137}%* U+1D15F
+% U+1D160 MUSICAL SYMBOL EIGHTH NOTE; \Acht (harmony)
+\DeclareTextCommand{\textAcht}{PU}{\9330\064\9335\140}%* U+1D160
+% U+1D161 MUSICAL SYMBOL SIXTEENTH NOTE; \Sech (harmony)
+\DeclareTextCommand{\textSech}{PU}{\9330\064\9335\141}%* U+1D161
+% U+1D162 MUSICAL SYMBOL THIRTY-SECOND NOTE; \Zwdr (harmony)
+\DeclareTextCommand{\textZwdr}{PU}{\9330\064\9335\142}%* U+1D162
+% \end{macrocode}
+%
+% \subsubsection{Miscellaneous Symbols and Pictographs: U+1F300 to U+1F5FF}
+%
+% \begin{macrocode}
+% U+1F30D EARTH GLOBE EUROPE-AFRICA; \Mundus (marvosym)
+\DeclareTextCommand{\textMundus}{PU}{\9330\074\9337\015}%* U+1F30D
+% U+1F319 CRESCENT MOON; \Moon (marvosym)
+\DeclareTextCommand{\textMoon}{PU}{\9330\074\9337\031}%* U+1F319
+% U+1F468 MAN; \ManFace (marvosym)
+\DeclareTextCommand{\textManFace}{PU}{\9330\075\9334\150}%* U+1F468
+% U+1F469 WOMAN; \WomanFace (marvosym)
+\DeclareTextCommand{\textWomanFace}{PU}{\9330\075\9334\151}%* U+1F469
+%* \textWomanFace -> \Womanface (marvosym)
+% U+1F4E0 FAX MACHINE; \Fax (marvosym)
+\DeclareTextCommand{\textFax}{PU}{\9330\075\9334\340}%* U+1F4E0
+%* \textFax -> \Faxmachine (marvosym)
+% U+1F525 FIRE; \Fire (ifsym)
+\DeclareTextCommand{\textFire}{PU}{\9330\075\9335\045}%* U+1F525
+% \end{macrocode}
+%
+% \subsubsection{Transport and Map Symbols: U+1F680 to U+1F6FF}
+%
+% \begin{macrocode}
+% U+1F6B2 BICYCLE; \Bicycle (marvosym)
+\DeclareTextCommand{\textBicycle}{PU}{\9330\075\9336\262}%* U+1F6B2
+% U+1F6B9 MENS SYMBOL; \Gentsroom (marvosym)
+\DeclareTextCommand{\textGentsroom}{PU}{\9330\075\9336\271}%* U+1F6B9
+% U+1F6BA WOMENS SYMBOL; \Ladiesroom (marvosym)
+\DeclareTextCommand{\textLadiesroom}{PU}{\9330\075\9336\272}%* U+1F6BA
+% \end{macrocode}
+%
+% \subsubsection{Miscellaneous}
+%
+% \begin{macrocode}
+\DeclareTextCommand{\SS}{PU}{SS}%
+% \textcopyleft (textcomp)
+\DeclareTextCommand{\textcopyleft}{PU}{\9041\204\9040\335}% U+2184 U+20DD
+% \ccnc (cclicenses)
+\DeclareTextCommand{\textccnc}{PU}{\80\044\9040\340}%* U+0024 U+20E0
+% \ccnd (cclicenses)
+\DeclareTextCommand{\textccnd}{PU}{=\9040\335}%* U+003D U+20DD
+% \ccsa (cclicenses)
+\DeclareTextCommand{\textccsa}{PU}{\9047\362\9040\335}%* U+27F2 U+20DD
+% \Info (marvosym, china2e)
+\DeclareTextCommand{\textInfo}{PU}{\9330\065\9334\042\9040\336}%* U+1D422 U+20DE
+% \CESign (marvosym)
+\DeclareTextCommand{\textCESign}{PU}{\80\103\80\105}%* U+0043 U+0045
+%* \textCESign -> \CEsign (marvosym)
+% \end{macrocode}
+%
+% \subsubsection{Aliases}
+%
+% Aliases (german.sty)
+% \begin{macrocode}
+\DeclareTextCommand{\textglqq}{PU}{\quotedblbase}%
+\DeclareTextCommand{\textgrqq}{PU}{\textquotedblleft}%
+\DeclareTextCommand{\textglq}{PU}{\quotesinglbase}%
+\DeclareTextCommand{\textgrq}{PU}{\textquoteleft}%
+\DeclareTextCommand{\textflqq}{PU}{\guillemotleft}%
+\DeclareTextCommand{\textfrqq}{PU}{\guillemotright}%
+\DeclareTextCommand{\textflq}{PU}{\guilsinglleft}%
+\DeclareTextCommand{\textfrq}{PU}{\guilsinglright}%
+% \end{macrocode}
+% Aliases (math names)
+% \begin{macrocode}
+\DeclareTextCommand{\textneg}{PU}{\textlogicalnot}%*
+\DeclareTextCommand{\texttimes}{PU}{\textmultiply}%*
+\DeclareTextCommand{\textdiv}{PU}{\textdivide}%*
+\DeclareTextCommand{\textpm}{PU}{\textplusminus}%*
+\DeclareTextCommand{\textcdot}{PU}{\textperiodcentered}%*
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</puenc>
+% \end{macrocode}
+%
+% \subsection{PU encoding, additions for Vn\TeX}
+%
+% This file is provided by Han The Thanh.
+%
+% \begin{macrocode}
+%<*puvnenc>
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareTextCommand{\abreve}{PU}{\81\003}% U+0103
+\DeclareTextCommand{\acircumflex}{PU}{\80\342}% U+00E2
+\DeclareTextCommand{\ecircumflex}{PU}{\80\352}% U+00EA
+\DeclareTextCommand{\ocircumflex}{PU}{\80\364}% U+00F4
+\DeclareTextCommand{\ohorn}{PU}{\81\241}% U+01A1
+\DeclareTextCommand{\uhorn}{PU}{\81\260}% U+01B0
+\DeclareTextCommand{\ABREVE}{PU}{\81\002}% U+0102
+\DeclareTextCommand{\ACIRCUMFLEX}{PU}{\80\302}% U+00C2
+\DeclareTextCommand{\ECIRCUMFLEX}{PU}{\80\312}% U+00CA
+\DeclareTextCommand{\OCIRCUMFLEX}{PU}{\80\324}% U+00D4
+\DeclareTextCommand{\OHORN}{PU}{\81\240}% U+01A0
+\DeclareTextCommand{\UHORN}{PU}{\81\257}% U+01AF
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareTextCompositeCommand{\'}{PU}{a}{\80\341}% U+00E1
+\DeclareTextCompositeCommand{\d}{PU}{a}{\9036\241}% U+1EA1
+\DeclareTextCompositeCommand{\`}{PU}{a}{\80\340}% U+00E0
+\DeclareTextCompositeCommand{\h}{PU}{a}{\9036\243}% U+1EA3
+\DeclareTextCompositeCommand{\~}{PU}{a}{\80\343}% U+00E3
+\DeclareTextCompositeCommand{\'}{PU}{\abreve}{\9036\257}% U+1EAF
+\DeclareTextCompositeCommand{\d}{PU}{\abreve}{\9036\267}% U+1EB7
+\DeclareTextCompositeCommand{\`}{PU}{\abreve}{\9036\261}% U+1EB1
+\DeclareTextCompositeCommand{\h}{PU}{\abreve}{\9036\263}% U+1EB3
+\DeclareTextCompositeCommand{\~}{PU}{\abreve}{\9036\265}% U+1EB5
+\DeclareTextCompositeCommand{\'}{PU}{\acircumflex}{\9036\245}% U+1EA5
+\DeclareTextCompositeCommand{\d}{PU}{\acircumflex}{\9036\255}% U+1EAD
+\DeclareTextCompositeCommand{\`}{PU}{\acircumflex}{\9036\247}% U+1EA7
+\DeclareTextCompositeCommand{\h}{PU}{\acircumflex}{\9036\251}% U+1EA9
+\DeclareTextCompositeCommand{\~}{PU}{\acircumflex}{\9036\253}% U+1EAB
+\DeclareTextCompositeCommand{\'}{PU}{e}{\80\351}% U+00E9
+\DeclareTextCompositeCommand{\d}{PU}{e}{\9036\271}% U+1EB9
+\DeclareTextCompositeCommand{\`}{PU}{e}{\80\350}% U+00E8
+\DeclareTextCompositeCommand{\h}{PU}{e}{\9036\273}% U+1EBB
+\DeclareTextCompositeCommand{\~}{PU}{e}{\9036\275}% U+1EBD
+\DeclareTextCompositeCommand{\'}{PU}{\ecircumflex}{\9036\277}% U+1EBF
+\DeclareTextCompositeCommand{\d}{PU}{\ecircumflex}{\9036\307}% U+1EC7
+\DeclareTextCompositeCommand{\`}{PU}{\ecircumflex}{\9036\301}% U+1EC1
+\DeclareTextCompositeCommand{\h}{PU}{\ecircumflex}{\9036\303}% U+1EC3
+\DeclareTextCompositeCommand{\~}{PU}{\ecircumflex}{\9036\305}% U+1EC5
+\DeclareTextCompositeCommand{\'}{PU}{i}{\80\355}% U+00ED
+\DeclareTextCompositeCommand{\d}{PU}{i}{\9036\313}% U+1ECB
+\DeclareTextCompositeCommand{\`}{PU}{i}{\80\354}% U+00EC
+\DeclareTextCompositeCommand{\h}{PU}{i}{\9036\311}% U+1EC9
+\DeclareTextCompositeCommand{\~}{PU}{i}{\81\051}% U+0129
+\DeclareTextCompositeCommand{\'}{PU}{o}{\80\363}% U+00F3
+\DeclareTextCompositeCommand{\d}{PU}{o}{\9036\315}% U+1ECD
+\DeclareTextCompositeCommand{\`}{PU}{o}{\80\362}% U+00F2
+\DeclareTextCompositeCommand{\h}{PU}{o}{\9036\317}% U+1ECF
+\DeclareTextCompositeCommand{\~}{PU}{o}{\80\365}% U+00F5
+\DeclareTextCompositeCommand{\'}{PU}{\ocircumflex}{\9036\321}% U+1ED1
+\DeclareTextCompositeCommand{\d}{PU}{\ocircumflex}{\9036\331}% U+1ED9
+\DeclareTextCompositeCommand{\`}{PU}{\ocircumflex}{\9036\323}% U+1ED3
+\DeclareTextCompositeCommand{\h}{PU}{\ocircumflex}{\9036\325}% U+1ED5
+\DeclareTextCompositeCommand{\~}{PU}{\ocircumflex}{\9036\327}% U+1ED7
+\DeclareTextCompositeCommand{\'}{PU}{\ohorn}{\9036\333}% U+1EDB
+\DeclareTextCompositeCommand{\d}{PU}{\ohorn}{\9036\343}% U+1EE3
+\DeclareTextCompositeCommand{\`}{PU}{\ohorn}{\9036\335}% U+1EDD
+\DeclareTextCompositeCommand{\h}{PU}{\ohorn}{\9036\337}% U+1EDF
+\DeclareTextCompositeCommand{\~}{PU}{\ohorn}{\9036\341}% U+1EE1
+\DeclareTextCompositeCommand{\'}{PU}{u}{\80\372}% U+00FA
+\DeclareTextCompositeCommand{\d}{PU}{u}{\9036\345}% U+1EE5
+\DeclareTextCompositeCommand{\`}{PU}{u}{\80\371}% U+00F9
+\DeclareTextCompositeCommand{\h}{PU}{u}{\9036\347}% U+1EE7
+\DeclareTextCompositeCommand{\~}{PU}{u}{\81\151}% U+0169
+\DeclareTextCompositeCommand{\'}{PU}{\uhorn}{\9036\351}% U+1EE9
+\DeclareTextCompositeCommand{\d}{PU}{\uhorn}{\9036\361}% U+1EF1
+\DeclareTextCompositeCommand{\`}{PU}{\uhorn}{\9036\353}% U+1EEB
+\DeclareTextCompositeCommand{\h}{PU}{\uhorn}{\9036\355}% U+1EED
+\DeclareTextCompositeCommand{\~}{PU}{\uhorn}{\9036\357}% U+1EEF
+\DeclareTextCompositeCommand{\'}{PU}{y}{\80\375}% U+00FD
+\DeclareTextCompositeCommand{\d}{PU}{y}{\9036\365}% U+1EF5
+\DeclareTextCompositeCommand{\`}{PU}{y}{\9036\363}% U+1EF3
+\DeclareTextCompositeCommand{\h}{PU}{y}{\9036\367}% U+1EF7
+\DeclareTextCompositeCommand{\~}{PU}{y}{\9036\371}% U+1EF9
+\DeclareTextCompositeCommand{\'}{PU}{A}{\80\301}% U+00C1
+\DeclareTextCompositeCommand{\d}{PU}{A}{\9036\240}% U+1EA0
+\DeclareTextCompositeCommand{\`}{PU}{A}{\80\300}% U+00C0
+\DeclareTextCompositeCommand{\h}{PU}{A}{\9036\242}% U+1EA2
+\DeclareTextCompositeCommand{\~}{PU}{A}{\80\303}% U+00C3
+\DeclareTextCompositeCommand{\'}{PU}{\ABREVE}{\9036\256}% U+1EAE
+\DeclareTextCompositeCommand{\d}{PU}{\ABREVE}{\9036\266}% U+1EB6
+\DeclareTextCompositeCommand{\`}{PU}{\ABREVE}{\9036\260}% U+1EB0
+\DeclareTextCompositeCommand{\h}{PU}{\ABREVE}{\9036\262}% U+1EB2
+\DeclareTextCompositeCommand{\~}{PU}{\ABREVE}{\9036\264}% U+1EB4
+\DeclareTextCompositeCommand{\'}{PU}{\ACIRCUMFLEX}{\9036\244}% U+1EA4
+\DeclareTextCompositeCommand{\d}{PU}{\ACIRCUMFLEX}{\9036\254}% U+1EAC
+\DeclareTextCompositeCommand{\`}{PU}{\ACIRCUMFLEX}{\9036\246}% U+1EA6
+\DeclareTextCompositeCommand{\h}{PU}{\ACIRCUMFLEX}{\9036\250}% U+1EA8
+\DeclareTextCompositeCommand{\~}{PU}{\ACIRCUMFLEX}{\9036\252}% U+1EAA
+\DeclareTextCompositeCommand{\'}{PU}{E}{\80\311}% U+00C9
+\DeclareTextCompositeCommand{\d}{PU}{E}{\9036\270}% U+1EB8
+\DeclareTextCompositeCommand{\`}{PU}{E}{\80\310}% U+00C8
+\DeclareTextCompositeCommand{\h}{PU}{E}{\9036\272}% U+1EBA
+\DeclareTextCompositeCommand{\~}{PU}{E}{\9036\274}% U+1EBC
+\DeclareTextCompositeCommand{\'}{PU}{\ECIRCUMFLEX}{\9036\276}% U+1EBE
+\DeclareTextCompositeCommand{\d}{PU}{\ECIRCUMFLEX}{\9036\306}% U+1EC6
+\DeclareTextCompositeCommand{\`}{PU}{\ECIRCUMFLEX}{\9036\300}% U+1EC0
+\DeclareTextCompositeCommand{\h}{PU}{\ECIRCUMFLEX}{\9036\302}% U+1EC2
+\DeclareTextCompositeCommand{\~}{PU}{\ECIRCUMFLEX}{\9036\304}% U+1EC4
+\DeclareTextCompositeCommand{\'}{PU}{I}{\80\315}% U+00CD
+\DeclareTextCompositeCommand{\d}{PU}{I}{\9036\312}% U+1ECA
+\DeclareTextCompositeCommand{\`}{PU}{I}{\80\314}% U+00CC
+\DeclareTextCompositeCommand{\h}{PU}{I}{\9036\310}% U+1EC8
+\DeclareTextCompositeCommand{\~}{PU}{I}{\81\050}% U+0128
+\DeclareTextCompositeCommand{\'}{PU}{O}{\80\323}% U+00D3
+\DeclareTextCompositeCommand{\d}{PU}{O}{\9036\314}% U+1ECC
+\DeclareTextCompositeCommand{\`}{PU}{O}{\80\322}% U+00D2
+\DeclareTextCompositeCommand{\h}{PU}{O}{\9036\316}% U+1ECE
+\DeclareTextCompositeCommand{\~}{PU}{O}{\80\325}% U+00D5
+\DeclareTextCompositeCommand{\'}{PU}{\OCIRCUMFLEX}{\9036\320}% U+1ED0
+\DeclareTextCompositeCommand{\d}{PU}{\OCIRCUMFLEX}{\9036\330}% U+1ED8
+\DeclareTextCompositeCommand{\`}{PU}{\OCIRCUMFLEX}{\9036\322}% U+1ED2
+\DeclareTextCompositeCommand{\h}{PU}{\OCIRCUMFLEX}{\9036\324}% U+1ED4
+\DeclareTextCompositeCommand{\~}{PU}{\OCIRCUMFLEX}{\9036\326}% U+1ED6
+\DeclareTextCompositeCommand{\'}{PU}{\OHORN}{\9036\332}% U+1EDA
+\DeclareTextCompositeCommand{\d}{PU}{\OHORN}{\9036\342}% U+1EE2
+\DeclareTextCompositeCommand{\`}{PU}{\OHORN}{\9036\334}% U+1EDC
+\DeclareTextCompositeCommand{\h}{PU}{\OHORN}{\9036\336}% U+1EDE
+\DeclareTextCompositeCommand{\~}{PU}{\OHORN}{\9036\340}% U+1EE0
+\DeclareTextCompositeCommand{\'}{PU}{U}{\80\332}% U+00DA
+\DeclareTextCompositeCommand{\d}{PU}{U}{\9036\344}% U+1EE4
+\DeclareTextCompositeCommand{\`}{PU}{U}{\80\331}% U+00D9
+\DeclareTextCompositeCommand{\h}{PU}{U}{\9036\346}% U+1EE6
+\DeclareTextCompositeCommand{\~}{PU}{U}{\81\150}% U+0168
+\DeclareTextCompositeCommand{\'}{PU}{\UHORN}{\9036\350}% U+1EE8
+\DeclareTextCompositeCommand{\d}{PU}{\UHORN}{\9036\360}% U+1EF0
+\DeclareTextCompositeCommand{\`}{PU}{\UHORN}{\9036\352}% U+1EEA
+\DeclareTextCompositeCommand{\h}{PU}{\UHORN}{\9036\354}% U+1EEC
+\DeclareTextCompositeCommand{\~}{PU}{\UHORN}{\9036\356}% U+1EEE
+\DeclareTextCompositeCommand{\'}{PU}{Y}{\80\335}% U+00DD
+\DeclareTextCompositeCommand{\d}{PU}{Y}{\9036\364}% U+1EF4
+\DeclareTextCompositeCommand{\`}{PU}{Y}{\9036\362}% U+1EF2
+\DeclareTextCompositeCommand{\h}{PU}{Y}{\9036\366}% U+1EF6
+\DeclareTextCompositeCommand{\~}{PU}{Y}{\9036\370}% U+1EF8
+% \end{macrocode}
+% \begin{macrocode}
+%</puvnenc>
+% \end{macrocode}
+%
+% \subsection{PU encoding, additions for Arabi}
+%
+% This file is provided and maintained by Youssef Jabri.
+%
+% \begin{macrocode}
+%<*puarenc>
+% \end{macrocode}
+% \begin{macrocode}
+% U+0621;afii57409;ARABIC LETTER HAMZA
+\DeclareTextCommand{\hamza}{PU}{\86\041}% U+0621
+% U+0622;afii57410;ARABIC LETTER ALEF WITH MADDA ABOVE
+\DeclareTextCommand{\alefmadda}{PU}{\86\042}% U+0622
+% U+0623;afii57411;ARABIC LETTER ALEF WITH HAMZA ABOVE
+\DeclareTextCommand{\alefhamza}{PU}{\86\043}% U+0623
+% U+0624;afii57412;ARABIC LETTER WAW WITH HAMZA ABOVE
+\DeclareTextCommand{\wawhamza}{PU}{\86\044}% U+0624
+% U+0625;afii57413;ARABIC LETTER ALEF WITH HAMZA BELOW
+\DeclareTextCommand{\aleflowerhamza}{PU}{\86\045}% U+0625
+% U+0626;afii57414;ARABIC LETTER YEH WITH HAMZA ABOVE
+\DeclareTextCommand{\yahamza}{PU}{\86\046}% U+0626
+% U+0627;afii57415;ARABIC LETTER ALEF
+\DeclareTextCommand{\alef}{PU}{\86\047}% U+0627
+% U+0628;afii57416;ARABIC LETTER BEH
+\DeclareTextCommand{\baa}{PU}{\86\050}% U+0628
+% U+0629;afii57417;ARABIC LETTER TEH MARBUTA
+\DeclareTextCommand{\T}{PU}{\86\051}% U+0629
+% U+062A;afii57418;ARABIC LETTER TEH
+\DeclareTextCommand{\taa}{PU}{\86\052}% U+062A
+% U+062B;afii57419;ARABIC LETTER THEH
+\DeclareTextCommand{\thaa}{PU}{\86\053}% U+062B
+% U+062C;afii57420;ARABIC LETTER JEEM
+\DeclareTextCommand{\jeem}{PU}{\86\054}% U+062C
+% U+062D;afii57421;ARABIC LETTER HAH
+\DeclareTextCommand{\Haa}{PU}{\86\055}% U+062D
+% U+062E;afii57422;ARABIC LETTER KHAH
+\DeclareTextCommand{\kha}{PU}{\86\056}% U+062E
+% U+062F;afii57423;ARABIC LETTER DAL
+\DeclareTextCommand{\dal}{PU}{\86\057}% U+062F
+% U+0630;afii57424;ARABIC LETTER THAL
+\DeclareTextCommand{\dhal}{PU}{\86\060}% U+0630
+% U+0631;afii57425;ARABIC LETTER REH
+\DeclareTextCommand{\ra}{PU}{\86\061}% U+0631
+% U+0632;afii57426;ARABIC LETTER ZAIN
+\DeclareTextCommand{\zay}{PU}{\86\062}% U+0632
+% U+0633;afii57427;ARABIC LETTER SEEN
+\DeclareTextCommand{\seen}{PU}{\86\063}% U+0633
+% U+0634;afii57428;ARABIC LETTER SHEEN
+\DeclareTextCommand{\sheen}{PU}{\86\064}% U+0634
+% U+0635;afii57429;ARABIC LETTER SAD
+\DeclareTextCommand{\sad}{PU}{\86\065}% U+0635
+% U+0636;afii57430;ARABIC LETTER DAD
+\DeclareTextCommand{\dad}{PU}{\86\066}% U+0636
+% U+0637;afii57431;ARABIC LETTER TAH
+\DeclareTextCommand{\Ta}{PU}{\86\067}% U+0637
+% U+0638;afii57432;ARABIC LETTER ZAH
+\DeclareTextCommand{\za}{PU}{\86\070}% U+0638
+% U+0639;afii57433;ARABIC LETTER AIN
+\DeclareTextCommand{\ayn}{PU}{\86\071}% U+0639
+% U+063A;afii57434;ARABIC LETTER GHAIN
+\DeclareTextCommand{\ghayn}{PU}{\86\072}% U+063A
+% U+0640;afii57440;ARABIC TATWEEL
+\DeclareTextCommand{\tatweel}{PU}{\86\100}% U+0640
+% U+0641;afii57441;ARABIC LETTER FEH
+\DeclareTextCommand{\fa}{PU}{\86\101}% U+0641
+% U+0642;afii57442;ARABIC LETTER QAF
+\DeclareTextCommand{\qaf}{PU}{\86\102}% U+0642
+% U+0643;afii57443;ARABIC LETTER KAF
+\DeclareTextCommand{\kaf}{PU}{\86\103}% U+0643
+% U+0644;afii57444;ARABIC LETTER LAM
+\DeclareTextCommand{\lam}{PU}{\86\104}% U+0644
+% U+0645;afii57445;ARABIC LETTER MEEM
+\DeclareTextCommand{\meem}{PU}{\86\105}% U+0645
+% U+0646;afii57446;ARABIC LETTER NOON
+\DeclareTextCommand{\nun}{PU}{\86\106}% U+0646
+% U+0647;afii57470;ARABIC LETTER HEH
+\DeclareTextCommand{\ha}{PU}{\86\107}% U+0647
+% U+0648;afii57448;ARABIC LETTER WAW
+\DeclareTextCommand{\waw}{PU}{\86\110}% U+0648
+% U+0649;afii57449;ARABIC LETTER ALEF MAKSURA
+\DeclareTextCommand{\alefmaqsura}{PU}{\86\111}% U+0649
+% U+064A;afii57450;ARABIC LETTER YEH
+\DeclareTextCommand{\ya}{PU}{\86\112}% U+064A
+% \end{macrocode}
+% \begin{macrocode}
+% U+064B;afii57451;ARABIC FATHATAN
+\DeclareTextCommand{\nasb}{PU}{\86\113}% U+064B
+% U+064C;afii57452;ARABIC DAMMATAN
+\DeclareTextCommand{\raff}{PU}{\86\114}% U+064C
+% U+064D;afii57453;ARABIC KASRATAN
+\DeclareTextCommand{\jarr}{PU}{\86\115}% U+064D
+% U+064E;afii57454;ARABIC FATHA
+\DeclareTextCommand{\fatha}{PU}{\86\116}% U+064E
+% U+064F;afii57455;ARABIC DAMMA
+\DeclareTextCommand{\damma}{PU}{\86\117}% U+064F
+% U+0650;afii57456;ARABIC KASRA
+\DeclareTextCommand{\kasra}{PU}{\86\120}% U+0650
+% U+0651;afii57457;ARABIC SHADDA
+\DeclareTextCommand{\shadda}{PU}{\86\121}% U+0651
+% U+0652;afii57458;ARABIC SUKUN
+\DeclareTextCommand{\sukun}{PU}{\86\122}% U+0652
+% \end{macrocode}
+% Farsi
+% \begin{macrocode}
+% U+067E ARABIC LETTER PEH; afii57506
+\DeclareTextCommand{\peh}{PU}{\86\176}% U+067E
+% U+0686 ARABIC LETTER TCHEH; afii57507
+\DeclareTextCommand{\tcheh}{PU}{\86\206}% U+0686
+% U+0698 ARABIC LETTER JEH; afii57508
+\DeclareTextCommand{\jeh}{PU}{\86\230}% U+0698
+% U+06A9 ARABIC LETTER KEHEH
+\DeclareTextCommand{\farsikaf}{PU}{\86\251}% U+06A9
+% U+06AF ARABIC LETTER GAF; afii57509
+\DeclareTextCommand{\gaf}{PU}{\86\257}% U+06AF
+% U+06CC ARABIC LETTER FARSI YEH
+\DeclareTextCommand{\farsiya}{PU}{\86\314}% U+06CC
+% \end{macrocode}
+% \begin{macrocode}
+% U+200C ZERO WIDTH NON-JOINER; afii61664
+\DeclareTextCommand{\ZWNJ}{PU}{\9040\014}% U+200C
+% U+200D ZERO WIDTH JOINER; afii301
+\DeclareTextCommand{\textEncodingNoboundary}{PU}{\9040\015}% U+200D
+% \end{macrocode}
+% \begin{macrocode}
+%</puarenc>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*psdextra>
+\Hy@VersionCheck{psdextra.def}
+\newcommand*{\psdmapshortnames}{%
+ \let\MVPlus\textMVPlus
+ \let\MVComma\textMVComma
+ \let\MVMinus\textMVMinus
+ \let\MVPeriod\textMVPeriod
+ \let\MVDivision\textMVDivision
+ \let\MVZero\textMVZero
+ \let\MVOne\textMVOne
+ \let\MVTwo\textMVTwo
+ \let\MVThree\textMVThree
+ \let\MVFour\textMVFour
+ \let\MVFive\textMVFive
+ \let\MVSix\textMVSix
+ \let\MVSeven\textMVSeven
+ \let\MVEight\textMVEight
+ \let\MVNine\textMVNine
+ \let\MVAt\textMVAt
+ \let\copyright\textcopyright
+ \let\twosuperior\texttwosuperior
+ \let\threesuperior\textthreesuperior
+ \let\onesuperior\textonesuperior
+ \let\Thorn\textThorn
+ \let\thorn\textthorn
+ \let\hbar\texthbar
+ \let\hausaB\texthausaB
+ \let\hausaD\texthausaD
+ \let\hausaK\texthausaK
+ \let\barl\textbarl
+ \let\inve\textinve
+ \let\slashc\textslashc
+ \let\scripta\textscripta
+ \let\openo\textopeno
+ \let\rtaild\textrtaild
+ \let\reve\textreve
+ \let\schwa\textschwa
+ \let\niepsilon\textniepsilon
+ \let\revepsilon\textrevepsilon
+ \let\rhookrevepsilon\textrhookrevepsilon
+ \let\scriptg\textscriptg
+ \let\scg\textscg
+ \let\ipagamma\textipagamma
+ \let\babygamma\textbabygamma
+ \let\bari\textbari
+ \let\niiota\textniiota
+ \let\sci\textsci
+ \let\scn\textscn
+ \let\niphi\textniphi
+ \let\longlegr\textlonglegr
+ \let\scr\textscr
+ \let\invscr\textinvscr
+ \let\esh\textesh
+ \let\baru\textbaru
+ \let\niupsilon\textniupsilon
+ \let\scriptv\textscriptv
+ \let\turnv\textturnv
+ \let\turnw\textturnw
+ \let\turny\textturny
+ \let\scy\textscy
+ \let\yogh\textyogh
+ \let\glotstop\textglotstop
+ \let\revglotstop\textrevglotstop
+ \let\invglotstop\textinvglotstop
+ \let\Gamma\textGamma
+ \let\Delta\textDelta
+ \let\Theta\textTheta
+ \let\Lambda\textLambda
+ \let\Xi\textXi
+ \let\Pi\textPi
+ \let\Sigma\textSigma
+ \let\Upsilon\textUpsilon
+ \let\Phi\textPhi
+ \let\Psi\textPsi
+ \let\Omega\textOmega
+ \let\alpha\textalpha
+ \let\beta\textbeta
+ \let\gamma\textgamma
+ \let\delta\textdelta
+ \let\epsilon\textepsilon
+ \let\zeta\textzeta
+ \let\eta\texteta
+ \let\theta\texttheta
+ \let\iota\textiota
+ \let\kappa\textkappa
+ \let\lambda\textlambda
+ \let\mu\textmu
+ \let\mugreek\textmugreek
+ \let\nu\textnu
+ \let\xi\textxi
+ \let\pi\textpi
+ \let\rho\textrho
+ \let\varsigma\textvarsigma
+ \let\sigma\textsigma
+ \let\tau\texttau
+ \let\upsilon\textupsilon
+ \let\phi\textphi
+ \let\chi\textchi
+ \let\psi\textpsi
+ \let\omega\textomega
+ \let\scd\textscd
+ \let\scu\textscu
+ \let\iinferior\textiinferior
+ \let\rinferior\textrinferior
+ \let\uinferior\textuinferior
+ \let\vinferior\textvinferior
+ \let\betainferior\textbetainferior
+ \let\gammainferior\textgammainferior
+ \let\rhoinferior\textrhoinferior
+ \let\phiinferior\textphiinferior
+ \let\chiinferior\textchiinferior
+ \let\barsci\textbarsci
+ \let\barp\textbarp
+ \let\barscu\textbarscu
+ \let\htrtaild\texthtrtaild
+ \let\dagger\textdagger
+ \let\bullet\textbullet
+ \let\hdotfor\texthdotfor
+ \let\prime\textprime
+ \let\second\textsecond
+ \let\third\textthird
+ \let\backprime\textbackprime
+ \let\lefttherefore\textlefttherefore
+ \let\fourth\textfourth
+ \let\diamonddots\textdiamonddots
+ \let\zerosuperior\textzerosuperior
+ \let\isuperior\textisuperior
+ \let\foursuperior\textfoursuperior
+ \let\fivesuperior\textfivesuperior
+ \let\sixsuperior\textsixsuperior
+ \let\sevensuperior\textsevensuperior
+ \let\eightsuperior\texteightsuperior
+ \let\ninesuperior\textninesuperior
+ \let\plussuperior\textplussuperior
+ \let\minussuperior\textminussuperior
+ \let\equalsuperior\textequalsuperior
+ \let\parenleftsuperior\textparenleftsuperior
+ \let\parenrightsuperior\textparenrightsuperior
+ \let\nsuperior\textnsuperior
+ \let\zeroinferior\textzeroinferior
+ \let\oneinferior\textoneinferior
+ \let\twoinferior\texttwoinferior
+ \let\threeinferior\textthreeinferior
+ \let\fourinferior\textfourinferior
+ \let\fiveinferior\textfiveinferior
+ \let\sixinferior\textsixinferior
+ \let\seveninferior\textseveninferior
+ \let\eightinferior\texteightinferior
+ \let\nineinferior\textnineinferior
+ \let\plusinferior\textplusinferior
+ \let\minusinferior\textminusinferior
+ \let\equalsinferior\textequalsinferior
+ \let\parenleftinferior\textparenleftinferior
+ \let\parenrightinferior\textparenrightinferior
+ \let\ainferior\textainferior
+ \let\einferior\texteinferior
+ \let\oinferior\textoinferior
+ \let\xinferior\textxinferior
+ \let\schwainferior\textschwainferior
+ \let\hinferior\texthinferior
+ \let\kinferior\textkinferior
+ \let\linferior\textlinferior
+ \let\minferior\textminferior
+ \let\ninferior\textninferior
+ \let\pinferior\textpinferior
+ \let\sinferior\textsinferior
+ \let\tinferior\texttinferior
+ \let\Deleatur\textDeleatur
+ \let\hslash\texthslash
+ \let\Im\textIm
+ \let\ell\textell
+ \let\wp\textwp
+ \let\Re\textRe
+ \let\mho\textmho
+ \let\riota\textriota
+ \let\Finv\textFinv
+ \let\aleph\textaleph
+ \let\beth\textbeth
+ \let\gimel\textgimel
+ \let\daleth\textdaleth
+ \let\fax\textfax
+ \let\Game\textGame
+ \let\leftarrow\textleftarrow
+ \let\uparrow\textuparrow
+ \let\rightarrow\textrightarrow
+ \let\downarrow\textdownarrow
+ \let\leftrightarrow\textleftrightarrow
+ \let\updownarrow\textupdownarrow
+ \let\nwarrow\textnwarrow
+ \let\nearrow\textnearrow
+ \let\searrow\textsearrow
+ \let\swarrow\textswarrow
+ \let\nleftarrow\textnleftarrow
+ \let\nrightarrow\textnrightarrow
+ \let\twoheadleftarrow\texttwoheadleftarrow
+ \let\ntwoheadleftarrow\textntwoheadleftarrow
+ \let\twoheaduparrow\texttwoheaduparrow
+ \let\twoheadrightarrow\texttwoheadrightarrow
+ \let\ntwoheadrightarrow\textntwoheadrightarrow
+ \let\twoheaddownarrow\texttwoheaddownarrow
+ \let\leftarrowtail\textleftarrowtail
+ \let\rightarrowtail\textrightarrowtail
+ \let\mapsto\textmapsto
+ \let\hookleftarrow\texthookleftarrow
+ \let\hookrightarrow\texthookrightarrow
+ \let\looparrowleft\textlooparrowleft
+ \let\looparrowright\textlooparrowright
+ \let\nleftrightarrow\textnleftrightarrow
+ \let\lightning\textlightning
+ \let\dlsh\textdlsh
+ \let\curvearrowleft\textcurvearrowleft
+ \let\curvearrowright\textcurvearrowright
+ \let\leftharpoonup\textleftharpoonup
+ \let\leftharpoondown\textleftharpoondown
+ \let\upharpoonright\textupharpoonright
+ \let\upharpoonleft\textupharpoonleft
+ \let\rightharpoonup\textrightharpoonup
+ \let\rightharpoondown\textrightharpoondown
+ \let\downharpoonright\textdownharpoonright
+ \let\downharpoonleft\textdownharpoonleft
+ \let\rightleftarrows\textrightleftarrows
+ \let\updownarrows\textupdownarrows
+ \let\leftrightarrows\textleftrightarrows
+ \let\leftleftarrows\textleftleftarrows
+ \let\upuparrows\textupuparrows
+ \let\rightrightarrows\textrightrightarrows
+ \let\downdownarrows\textdowndownarrows
+ \let\leftrightharpoons\textleftrightharpoons
+ \let\rightleftharpoons\textrightleftharpoons
+ \let\nLeftarrow\textnLeftarrow
+ \let\nLeftrightarrow\textnLeftrightarrow
+ \let\nRightarrow\textnRightarrow
+ \let\Leftarrow\textLeftarrow
+ \let\Uparrow\textUparrow
+ \let\Rightarrow\textRightarrow
+ \let\Downarrow\textDownarrow
+ \let\Leftrightarrow\textLeftrightarrow
+ \let\Updownarrow\textUpdownarrow
+ \let\Nwarrow\textNwarrow
+ \let\Nearrow\textNearrow
+ \let\Searrow\textSearrow
+ \let\Swarrow\textSwarrow
+ \let\Lleftarrow\textLleftarrow
+ \let\Rrightarrow\textRrightarrow
+ \let\leftsquigarrow\textleftsquigarrow
+ \let\rightsquigarrow\textrightsquigarrow
+ \let\dashleftarrow\textdashleftarrow
+ \let\dasheduparrow\textdasheduparrow
+ \let\dashrightarrow\textdashrightarrow
+ \let\dasheddownarrow\textdasheddownarrow
+ \let\pointer\textpointer
+ \let\downuparrows\textdownuparrows
+ \let\leftarrowtriangle\textleftarrowtriangle
+ \let\rightarrowtriangle\textrightarrowtriangle
+ \let\leftrightarrowtriangle\textleftrightarrowtriangle
+ \let\forall\textforall
+ \let\complement\textcomplement
+ \let\partial\textpartial
+ \let\exists\textexists
+ \let\nexists\textnexists
+ \let\emptyset\textemptyset
+ \let\triangle\texttriangle
+ \let\nabla\textnabla
+ \let\in\textin
+ \let\notin\textnotin
+ \let\smallin\textsmallin
+ \let\ni\textni
+ \let\notowner\textnotowner
+ \let\smallowns\textsmallowns
+ \let\prod\textprod
+ \let\amalg\textamalg
+ \let\sum\textsum
+ \let\mp\textmp
+ \let\dotplus\textdotplus
+ \let\Divides\textDivides
+ \let\DividesNot\textDividesNot
+ \let\setminus\textsetminus
+ \let\ast\textast
+ \let\circ\textcirc
+ \let\surd\textsurd
+ \let\propto\textpropto
+ \let\infty\textinfty
+ \let\angle\textangle
+ \let\measuredangle\textmeasuredangle
+ \let\sphericalangle\textsphericalangle
+ \let\mid\textmid
+ \let\nmid\textnmid
+ \let\parallel\textparallel
+ \let\nparallel\textnparallel
+ \let\wedge\textwedge
+ \let\owedge\textowedge
+ \let\vee\textvee
+ \let\ovee\textovee
+ \let\cap\textcap
+ \let\cup\textcup
+ \let\int\textint
+ \let\iint\textiint
+ \let\iiint\textiiint
+ \let\oint\textoint
+ \let\oiint\textoiint
+ \let\ointclockwise\textointclockwise
+ \let\ointctrclockwise\textointctrclockwise
+ \let\therefore\texttherefore
+ \let\because\textbecause
+ \let\vdotdot\textvdotdot
+ \let\squaredots\textsquaredots
+ \let\dotminus\textdotminus
+ \let\eqcolon\texteqcolon
+ \let\sim\textsim
+ \let\backsim\textbacksim
+ \let\nbacksim\textnbacksim
+ \let\wr\textwr
+ \let\nsim\textnsim
+ \let\eqsim\texteqsim
+ \let\neqsim\textneqsim
+ \let\simeq\textsimeq
+ \let\nsimeq\textnsimeq
+ \let\cong\textcong
+ \let\ncong\textncong
+ \let\approx\textapprox
+ \let\napprox\textnapprox
+ \let\approxeq\textapproxeq
+ \let\napproxeq\textnapproxeq
+ \let\triplesim\texttriplesim
+ \let\ntriplesim\textntriplesim
+ \let\backcong\textbackcong
+ \let\nbackcong\textnbackcong
+ \let\asymp\textasymp
+ \let\nasymp\textnasymp
+ \let\Bumpeq\textBumpeq
+ \let\nBumpeq\textnBumpeq
+ \let\bumpeq\textbumpeq
+ \let\nbumpeq\textnbumpeq
+ \let\doteq\textdoteq
+ \let\ndoteq\textndoteq
+ \let\doteqdot\textdoteqdot
+ \let\nDoteq\textnDoteq
+ \let\fallingdoteq\textfallingdoteq
+ \let\nfallingdoteq\textnfallingdoteq
+ \let\risingdoteq\textrisingdoteq
+ \let\nrisingdoteq\textnrisingdoteq
+ \let\colonequals\textcolonequals
+ \let\equalscolon\textequalscolon
+ \let\eqcirc\texteqcirc
+ \let\neqcirc\textneqcirc
+ \let\circeq\textcirceq
+ \let\ncirceq\textncirceq
+ \let\hateq\texthateq
+ \let\nhateq\textnhateq
+ \let\triangleeq\texttriangleeq
+ \let\neq\textneq
+ \let\ne\textne
+ \let\equiv\textequiv
+ \let\nequiv\textnequiv
+ \let\leq\textleq
+ \let\le\textle
+ \let\geq\textgeq
+ \let\ge\textge
+ \let\leqq\textleqq
+ \let\nleqq\textnleqq
+ \let\geqq\textgeqq
+ \let\ngeqq\textngeqq
+ \let\lneqq\textlneqq
+ \let\gneqq\textgneqq
+ \let\ll\textll
+ \let\nll\textnll
+ \let\gg\textgg
+ \let\ngg\textngg
+ \let\between\textbetween
+ \let\nless\textnless
+ \let\ngtr\textngtr
+ \let\nleq\textnleq
+ \let\ngeq\textngeq
+ \let\lesssim\textlesssim
+ \let\gtrsim\textgtrsim
+ \let\nlesssim\textnlesssim
+ \let\ngtrsim\textngtrsim
+ \let\lessgtr\textlessgtr
+ \let\gtrless\textgtrless
+ \let\ngtrless\textngtrless
+ \let\nlessgtr\textnlessgtr
+ \let\prec\textprec
+ \let\succ\textsucc
+ \let\preccurlyeq\textpreccurlyeq
+ \let\succcurlyeq\textsucccurlyeq
+ \let\precsim\textprecsim
+ \let\nprecsim\textnprecsim
+ \let\succsim\textsuccsim
+ \let\nsuccsim\textnsuccsim
+ \let\nprec\textnprec
+ \let\nsucc\textnsucc
+ \let\subset\textsubset
+ \let\supset\textsupset
+ \let\nsubset\textnsubset
+ \let\nsupset\textnsupset
+ \let\subseteq\textsubseteq
+ \let\supseteq\textsupseteq
+ \let\nsubseteq\textnsubseteq
+ \let\nsupseteq\textnsupseteq
+ \let\subsetneq\textsubsetneq
+ \let\supsetneq\textsupsetneq
+ \let\cupdot\textcupdot
+ \let\cupplus\textcupplus
+ \let\sqsubset\textsqsubset
+ \let\nsqsubset\textnsqsubset
+ \let\sqsupset\textsqsupset
+ \let\nsqsupset\textnsqsupset
+ \let\sqsubseteq\textsqsubseteq
+ \let\nsqsubseteq\textnsqsubseteq
+ \let\sqsupseteq\textsqsupseteq
+ \let\nsqsupseteq\textnsqsupseteq
+ \let\sqcap\textsqcap
+ \let\sqcup\textsqcup
+ \let\oplus\textoplus
+ \let\ominus\textominus
+ \let\otimes\textotimes
+ \let\oslash\textoslash
+ \let\odot\textodot
+ \let\circledcirc\textcircledcirc
+ \let\circledast\textcircledast
+ \let\circleddash\textcircleddash
+ \let\boxplus\textboxplus
+ \let\boxminus\textboxminus
+ \let\boxtimes\textboxtimes
+ \let\boxdot\textboxdot
+ \let\vdash\textvdash
+ \let\dashv\textdashv
+ \let\ndashv\textndashv
+ \let\top\texttop
+ \let\ndownvdash\textndownvdash
+ \let\bot\textbot
+ \let\nupvdash\textnupvdash
+ \let\vDash\textvDash
+ \let\Vdash\textVdash
+ \let\Vvdash\textVvdash
+ \let\nVvash\textnVvash
+ \let\VDash\textVDash
+ \let\nvdash\textnvdash
+ \let\nvDash\textnvDash
+ \let\nVdash\textnVdash
+ \let\nVDash\textnVDash
+ \let\lhd\textlhd
+ \let\rhd\textrhd
+ \let\unlhd\textunlhd
+ \let\unrhd\textunrhd
+ \let\multimapdotbothA\textmultimapdotbothA
+ \let\multimapdotbothB\textmultimapdotbothB
+ \let\multimap\textmultimap
+ \let\veebar\textveebar
+ \let\barwedge\textbarwedge
+ \let\star\textstar
+ \let\divideontimes\textdivideontimes
+ \let\bowtie\textbowtie
+ \let\ltimes\textltimes
+ \let\rtimes\textrtimes
+ \let\leftthreetimes\textleftthreetimes
+ \let\rightthreetimes\textrightthreetimes
+ \let\backsimeq\textbacksimeq
+ \let\nbacksimeq\textnbacksimeq
+ \let\curlyvee\textcurlyvee
+ \let\curlywedge\textcurlywedge
+ \let\Subset\textSubset
+ \let\nSubset\textnSubset
+ \let\Supset\textSupset
+ \let\nSupset\textnSupset
+ \let\Cap\textCap
+ \let\Cup\textCup
+ \let\pitchfork\textpitchfork
+ \let\lessdot\textlessdot
+ \let\gtrdot\textgtrdot
+ \let\lll\textlll
+ \let\ggg\textggg
+ \let\lesseqgtr\textlesseqgtr
+ \let\gtreqless\textgtreqless
+ \let\curlyeqprec\textcurlyeqprec
+ \let\ncurlyeqprec\textncurlyeqprec
+ \let\curlyeqsucc\textcurlyeqsucc
+ \let\ncurlyeqsucc\textncurlyeqsucc
+ \let\npreccurlyeq\textnpreccurlyeq
+ \let\nsucccurlyeq\textnsucccurlyeq
+ \let\nqsubseteq\textnqsubseteq
+ \let\nqsupseteq\textnqsupseteq
+ \let\sqsubsetneq\textsqsubsetneq
+ \let\sqsupsetneq\textsqsupsetneq
+ \let\lnsim\textlnsim
+ \let\gnsim\textgnsim
+ \let\precnsim\textprecnsim
+ \let\succnsim\textsuccnsim
+ \let\ntriangleleft\textntriangleleft
+ \let\ntriangleright\textntriangleright
+ \let\ntrianglelefteq\textntrianglelefteq
+ \let\ntrianglerighteq\textntrianglerighteq
+ \let\vdots\textvdots
+ \let\cdots\textcdots
+ \let\udots\textudots
+ \let\ddots\textddots
+ \let\barin\textbarin
+ \let\diameter\textdiameter
+ \let\backneg\textbackneg
+ \let\wasylozenge\textwasylozenge
+ \let\invbackneg\textinvbackneg
+ \let\clock\textclock
+ \let\ulcorner\textulcorner
+ \let\urcorner\texturcorner
+ \let\llcorner\textllcorner
+ \let\lrcorner\textlrcorner
+ \let\frown\textfrown
+ \let\smile\textsmile
+ \let\Keyboard\textKeyboard
+ \let\langle\textlangle
+ \let\rangle\textrangle
+ \let\APLinv\textAPLinv
+ \let\Tumbler\textTumbler
+ \let\notslash\textnotslash
+ \let\notbackslash\textnotbackslash
+ \let\boxbackslash\textboxbackslash
+ \let\APLleftarrowbox\textAPLleftarrowbox
+ \let\APLrightarrowbox\textAPLrightarrowbox
+ \let\APLuparrowbox\textAPLuparrowbox
+ \let\APLdownarrowbox\textAPLdownarrowbox
+ \let\APLinput\textAPLinput
+ \let\Request\textRequest
+ \let\Beam\textBeam
+ \let\hexagon\texthexagon
+ \let\APLbox\textAPLbox
+ \let\ForwardToIndex\textForwardToIndex
+ \let\RewindToIndex\textRewindToIndex
+ \let\bbslash\textbbslash
+ \let\CircledA\textCircledA
+ \let\CleaningF\textCleaningF
+ \let\CleaningFF\textCleaningFF
+ \let\CleaningP\textCleaningP
+ \let\CleaningPP\textCleaningPP
+ \let\CuttingLine\textCuttingLine
+ \let\UParrow\textUParrow
+ \let\bigtriangleup\textbigtriangleup
+ \let\Forward\textForward
+ \let\triangleright\texttriangleright
+ \let\RHD\textRHD
+ \let\DOWNarrow\textDOWNarrow
+ \let\bigtriangledown\textbigtriangledown
+ \let\Rewind\textRewind
+ \let\triangleleft\texttriangleleft
+ \let\LHD\textLHD
+ \let\diamond\textdiamond
+ \let\lozenge\textlozenge
+ \let\LEFTCIRCLE\textLEFTCIRCLE
+ \let\RIGHTCIRCLE\textRIGHTCIRCLE
+ \let\openbullet\textopenbullet
+ \let\boxbar\textboxbar
+ \let\bigcircle\textbigcircle
+ \let\Cloud\textCloud
+ \let\FiveStar\textFiveStar
+ \let\FiveStarOpen\textFiveStarOpen
+ \let\Phone\textPhone
+ \let\boxempty\textboxempty
+ \let\Checkedbox\textCheckedbox
+ \let\Crossedbox\textCrossedbox
+ \let\Coffeecup\textCoffeecup
+ \let\HandCuffLeft\textHandCuffLeft
+ \let\HandCuffRight\textHandCuffRight
+ \let\HandLeft\textHandLeft
+ \let\HandRight\textHandRight
+ \let\Radioactivity\textRadioactivity
+ \let\Biohazard\textBiohazard
+ \let\Ankh\textAnkh
+ \let\YinYang\textYinYang
+ \let\frownie\textfrownie
+ \let\smiley\textsmiley
+ \let\blacksmiley\textblacksmiley
+ \let\sun\textsun
+ \let\leftmoon\textleftmoon
+ \let\rightmoon\textrightmoon
+ \let\mercury\textmercury
+ \let\earth\textearth
+ \let\male\textmale
+ \let\jupiter\textjupiter
+ \let\saturn\textsaturn
+ \let\uranus\texturanus
+ \let\neptune\textneptune
+ \let\pluto\textpluto
+ \let\aries\textaries
+ \let\taurus\texttaurus
+ \let\gemini\textgemini
+ \let\cancer\textcancer
+ \let\leo\textleo
+ \let\virgo\textvirgo
+ \let\libra\textlibra
+ \let\scorpio\textscorpio
+ \let\sagittarius\textsagittarius
+ \let\capricornus\textcapricornus
+ \let\aquarius\textaquarius
+ \let\pisces\textpisces
+ \let\quarternote\textquarternote
+ \let\twonotes\texttwonotes
+ \let\sixteenthnote\textsixteenthnote
+ \let\flat\textflat
+ \let\natural\textnatural
+ \let\sharp\textsharp
+ \let\recycle\textrecycle
+ \let\Wheelchair\textWheelchair
+ \let\Flag\textFlag
+ \let\MineSign\textMineSign
+ \let\dsmilitary\textdsmilitary
+ \let\dsmedical\textdsmedical
+ \let\dsjuridical\textdsjuridical
+ \let\dschemical\textdschemical
+ \let\dsbiological\textdsbiological
+ \let\dscommercial\textdscommercial
+ \let\manstar\textmanstar
+ \let\danger\textdanger
+ \let\FemaleFemale\textFemaleFemale
+ \let\MaleMale\textMaleMale
+ \let\FemaleMale\textFemaleMale
+ \let\Hermaphrodite\textHermaphrodite
+ \let\Neutral\textNeutral
+ \let\hexstar\texthexstar
+ \let\SunCload\textSunCload
+ \let\Rain\textRain
+ \let\noway\textnoway
+ \let\Mountain\textMountain
+ \let\Tent\textTent
+ \let\ScissorRight\textScissorRight
+ \let\ScissorRightBrokenTop\textScissorRightBrokenTop
+ \let\ScissorHollowRight\textScissorHollowRight
+ \let\PhoneHandset\textPhoneHandset
+ \let\Tape\textTape
+ \let\Plane\textPlane
+ \let\Envelope\textEnvelope
+ \let\Peace\textPeace
+ \let\WritingHand\textWritingHand
+ \let\PencilRightDown\textPencilRightDown
+ \let\PencilRight\textPencilRight
+ \let\PencilRightUp\textPencilRightUp
+ \let\NibRight\textNibRight
+ \let\NibSolidRight\textNibSolidRight
+ \let\Checkmark\textCheckmark
+ \let\CheckmarkBold\textCheckmarkBold
+ \let\XSolid\textXSolid
+ \let\XSolidBold\textXSolidBold
+ \let\XSolidBrush\textXSolidBrush
+ \let\PlusOutline\textPlusOutline
+ \let\Plus\textPlus
+ \let\PlusThinCenterOpen\textPlusThinCenterOpen
+ \let\PlusCenterOpen\textPlusCenterOpen
+ \let\Cross\textCross
+ \let\CrossOpenShadow\textCrossOpenShadow
+ \let\CrossOutline\textCrossOutline
+ \let\CrossMaltese\textCrossMaltese
+ \let\DavidStar\textDavidStar
+ \let\FourAsterisk\textFourAsterisk
+ \let\JackStar\textJackStar
+ \let\JackStarBold\textJackStarBold
+ \let\ClowerTips\textClowerTips
+ \let\FourStar\textFourStar
+ \let\FourStarOpen\textFourStarOpen
+ \let\FiveStarOpenCircled\textFiveStarOpenCircled
+ \let\FiveStarCenterOpen\textFiveStarCenterOpen
+ \let\FiveStarOpenDotted\textFiveStarOpenDotted
+ \let\FiveStarOutline\textFiveStarOutline
+ \let\FiveStarOutlineHeavy\textFiveStarOutlineHeavy
+ \let\FiveStarConvex\textFiveStarConvex
+ \let\FiveStarShadow\textFiveStarShadow
+ \let\AsteriskBold\textAsteriskBold
+ \let\AsteriskCenterOpen\textAsteriskCenterOpen
+ \let\EightStarTaper\textEightStarTaper
+ \let\EightStarConvex\textEightStarConvex
+ \let\SixStar\textSixStar
+ \let\EightStar\textEightStar
+ \let\EightStarBold\textEightStarBold
+ \let\TwelveStar\textTwelveStar
+ \let\SixteenStarLight\textSixteenStarLight
+ \let\SixFlowerPetalRemoved\textSixFlowerPetalRemoved
+ \let\SixFlowerOpenCenter\textSixFlowerOpenCenter
+ \let\Asterisk\textAsterisk
+ \let\SixFlowerAlternate\textSixFlowerAlternate
+ \let\FiveFlowerPetal\textFiveFlowerPetal
+ \let\FiveFlowerOpen\textFiveFlowerOpen
+ \let\EightFlowerPetal\textEightFlowerPetal
+ \let\SunshineOpenCircled\textSunshineOpenCircled
+ \let\SixFlowerAltPetal\textSixFlowerAltPetal
+ \let\SnowflakeChevron\textSnowflakeChevron
+ \let\Snowflake\textSnowflake
+ \let\SnowflakeChevronBold\textSnowflakeChevronBold
+ \let\Sparkle\textSparkle
+ \let\SparkleBold\textSparkleBold
+ \let\AsteriskRoundedEnds\textAsteriskRoundedEnds
+ \let\EightFlowerPetalRemoved\textEightFlowerPetalRemoved
+ \let\EightAsterisk\textEightAsterisk
+ \let\CircleShadow\textCircleShadow
+ \let\SquareShadowBottomRight\textSquareShadowBottomRight
+ \let\SquareTopRight\textSquareTopRight
+ \let\SquareCastShadowBottomRight\textSquareCastShadowBottomRight
+ \let\SquareCastShadowTopRight\textSquareCastShadowTopRight
+ \let\DiamandSolid\textDiamandSolid
+ \let\RectangleThin\textRectangleThin
+ \let\Rectangle\textRectangle
+ \let\RectangleBold\textRectangleBold
+ \let\perp\textperp
+ \let\notperp\textnotperp
+ \let\veedot\textveedot
+ \let\wedgedot\textwedgedot
+ \let\leftspoon\textleftspoon
+ \let\lbrackdbl\textlbrackdbl
+ \let\rbrackdbl\textrbrackdbl
+ \let\circlearrowleft\textcirclearrowleft
+ \let\circlearrowright\textcirclearrowright
+ \let\longleftarrow\textlongleftarrow
+ \let\longrightarrow\textlongrightarrow
+ \let\longleftrightarrow\textlongleftrightarrow
+ \let\Longleftarrow\textLongleftarrow
+ \let\Longrightarrow\textLongrightarrow
+ \let\Longleftrightarrow\textLongleftrightarrow
+ \let\longmapsto\textlongmapsto
+ \let\Longmapsfrom\textLongmapsfrom
+ \let\Longmapsto\textLongmapsto
+ \let\nwsearrow\textnwsearrow
+ \let\neswarrow\textneswarrow
+ \let\lhooknwarrow\textlhooknwarrow
+ \let\rhooknearrow\textrhooknearrow
+ \let\lhooksearrow\textlhooksearrow
+ \let\rhookswarrow\textrhookswarrow
+ \let\leadsto\textleadsto
+ \let\rcurvearrowne\textrcurvearrowne
+ \let\lcurvearrowse\textlcurvearrowse
+ \let\lcurvearrowsw\textlcurvearrowsw
+ \let\rcurvearrowse\textrcurvearrowse
+ \let\lcurvearrowdown\textlcurvearrowdown
+ \let\rcurvearrowdown\textrcurvearrowdown
+ \let\rcurvearrowleft\textrcurvearrowleft
+ \let\rcurvearrowright\textrcurvearrowright
+ \let\leftrightharpoon\textleftrightharpoon
+ \let\rightleftharpoon\textrightleftharpoon
+ \let\updownharpoonrightleft\textupdownharpoonrightleft
+ \let\updownharpoonleftright\textupdownharpoonleftright
+ \let\leftleftharpoons\textleftleftharpoons
+ \let\upupharpoons\textupupharpoons
+ \let\rightrightharpoons\textrightrightharpoons
+ \let\downdownharpoons\textdowndownharpoons
+ \let\leftbarharpoon\textleftbarharpoon
+ \let\barleftharpoon\textbarleftharpoon
+ \let\rightbarharpoon\textrightbarharpoon
+ \let\barrightharpoon\textbarrightharpoon
+ \let\updownharpoons\textupdownharpoons
+ \let\downupharpoons\textdownupharpoons
+ \let\moo\textmoo
+ \let\llparenthesis\textllparenthesis
+ \let\rrparenthesis\textrrparenthesis
+ \let\invdiameter\textinvdiameter
+ \let\obar\textobar
+ \let\obslash\textobslash
+ \let\obot\textobot
+ \let\NoChemicalCleaning\textNoChemicalCleaning
+ \let\olessthan\textolessthan
+ \let\ogreaterthan\textogreaterthan
+ \let\boxslash\textboxslash
+ \let\boxbslash\textboxbslash
+ \let\boxast\textboxast
+ \let\boxcircle\textboxcircle
+ \let\boxbox\textboxbox
+ \let\Valve\textValve
+ \let\multimapboth\textmultimapboth
+ \let\shuffle\textshuffle
+ \let\uplus\textuplus
+ \let\bigdoublewedge\textbigdoublewedge
+ \let\bigdoublevee\textbigdoublevee
+ \let\Join\textJoin
+ \let\fatsemi\textfatsemi
+ \let\circplus\textcircplus
+ \let\minusdot\textminusdot
+ \let\dottimes\textdottimes
+ \let\dtimes\textdtimes
+ \let\odiv\textodiv
+ \let\invneg\textinvneg
+ \let\sqdoublecap\textsqdoublecap
+ \let\capdot\textcapdot
+ \let\sqdoublecup\textsqdoublecup
+ \let\doublewedge\textdoublewedge
+ \let\doublevee\textdoublevee
+ \let\doublebarwedge\textdoublebarwedge
+ \let\veedoublebar\textveedoublebar
+ \let\eqdot\texteqdot
+ \let\neqdot\textneqdot
+ \let\coloncolonequals\textcoloncolonequals
+ \let\leqslant\textleqslant
+ \let\nleqslant\textnleqslant
+ \let\geqslant\textgeqslant
+ \let\ngeqslant\textngeqslant
+ \let\lessapprox\textlessapprox
+ \let\nlessapprox\textnlessapprox
+ \let\gtrapprox\textgtrapprox
+ \let\ngtrapprox\textngtrapprox
+ \let\lneq\textlneq
+ \let\gneq\textgneq
+ \let\lnapprox\textlnapprox
+ \let\gnapprox\textgnapprox
+ \let\lesseqqgtr\textlesseqqgtr
+ \let\gtreqqless\textgtreqqless
+ \let\eqslantless\texteqslantless
+ \let\eqslantgtr\texteqslantgtr
+ \let\leftslice\textleftslice
+ \let\rightslice\textrightslice
+ \let\preceq\textpreceq
+ \let\npreceq\textnpreceq
+ \let\succeq\textsucceq
+ \let\nsucceq\textnsucceq
+ \let\precneq\textprecneq
+ \let\succneq\textsuccneq
+ \let\preceqq\textpreceqq
+ \let\npreceqq\textnpreceqq
+ \let\succeqq\textsucceqq
+ \let\nsucceqq\textnsucceqq
+ \let\precneqq\textprecneqq
+ \let\succneqq\textsuccneqq
+ \let\precapprox\textprecapprox
+ \let\nprecapprox\textnprecapprox
+ \let\succapprox\textsuccapprox
+ \let\nsuccapprox\textnsuccapprox
+ \let\precnapprox\textprecnapprox
+ \let\succnapprox\textsuccnapprox
+ \let\subseteqq\textsubseteqq
+ \let\nsubseteqq\textnsubseteqq
+ \let\supseteqq\textsupseteqq
+ \let\nsupseteqq\textnsupseteqq
+ \let\dashV\textdashV
+ \let\ndashV\textndashV
+ \let\Dashv\textDashv
+ \let\nDashv\textnDashv
+ \let\DashV\textDashV
+ \let\nDashV\textnDashV
+ \let\downmodels\textdownmodels
+ \let\ndownmodels\textndownmodels
+ \let\upmodels\textupmodels
+ \let\nupmodels\textnupmodels
+ \let\upspoon\textupspoon
+ \let\interleave\textinterleave
+ \let\sslash\textsslash
+ \let\pentagon\textpentagon
+ \let\varhexagon\textvarhexagon
+ \let\jinferior\textjinferior
+ \let\slashdiv\textslashdiv
+ \let\fivedots\textfivedots
+ \let\oo\textoo
+ \let\GaPa\textGaPa
+ \let\HaPa\textHaPa
+ \let\ViPa\textViPa
+ \let\AcPa\textAcPa
+ \let\SePa\textSePa
+ \let\ZwPa\textZwPa
+ \let\fullnote\textfullnote
+ \let\halfnote\texthalfnote
+ \let\Vier\textVier
+ \let\Acht\textAcht
+ \let\Sech\textSech
+ \let\Zwdr\textZwdr
+ \let\Mundus\textMundus
+ \let\Moon\textMoon
+ \let\ManFace\textManFace
+ \let\WomanFace\textWomanFace
+ \let\Fax\textFax
+ \let\Fire\textFire
+ \let\Bicycle\textBicycle
+ \let\Gentsroom\textGentsroom
+ \let\Ladiesroom\textLadiesroom
+ \let\ccnc\textccnc
+ \let\ccsa\textccsa
+ \let\Info\textInfo
+ \let\CESign\textCESign
+ \let\neg\textneg
+ \let\times\texttimes
+ \let\div\textdiv
+ \let\pm\textpm
+ \let\cdot\textcdot
+}% \psdmapshortnames
+\newcommand*{\psdaliasnames}{%
+ \let\epsdice\HyPsd@DieFace
+ \let\fcdice\HyPsd@DieFace
+ \let\MoonPha\HyPsd@MoonPha
+ \let\mathdollar\textdollar
+ \let\EyesDollar\textdollar
+ \let\binampersand\textampersand
+ \let\with\textampersand
+ \let\mathunderscore\textunderscore
+ \let\textvertline\textbar
+ \let\mathsterling\textsterling
+ \let\pounds\textsterling
+ \let\brokenvert\textbrokenbar
+ \let\mathsection\textsection
+ \let\S\textsection
+ \let\mathparagraph\textparagraph
+ \let\MultiplicationDot\textperiodcentered
+ \let\Squaredot\textperiodcentered
+ \let\vartimes\textmultiply
+ \let\MVMultiplication\textmultiply
+ \let\eth\dh
+ \let\crossd\textcrd
+ \let\textbard\textcrd
+ \let\bard\textcrd
+ \let\textcrh\texthbar
+ \let\crossh\texthbar
+ \let\planck\texthbar
+ \let\eng\ng
+ \let\engma\ng
+ \let\crossb\textcrb
+ \let\textbarb\textcrb
+ \let\barb\textcrb
+ \let\Florin\textflorin
+ \let\hv\texthvlig
+ \let\hausak\texthtk
+ \let\crossnilambda\textcrlambda
+ \let\barlambda\textcrlambda
+ \let\lambdabar\textcrlambda
+ \let\lambdaslash\textcrlambda
+ \let\textnrleg\textPUnrleg
+ \let\textpipevar\textpipe
+ \let\textdoublepipevar\textdoublepipe
+ \let\textdoublebarpipevar\textdoublebarpipe
+ \let\textcrg\textgslash
+ \let\textdblig\textPUdblig
+ \let\textqplig\textPUqplig
+ \let\textcentoldstyle\textslashc
+ \let\textbarc\textslashc
+ \let\inva\textturna
+ \let\vara\textscripta
+ \let\invscripta\textturnscripta
+ \let\rotvara\textturnscripta
+ \let\hookb\texthtb
+ \let\hausab\texthtb
+ \let\varopeno\textopeno
+ \let\curlyc\textctc
+ \let\taild\textrtaild
+ \let\hookd\texthtd
+ \let\hausad\texthtd
+ \let\er\textrhookschwa
+ \let\epsi\textniepsilon
+ \let\hookrevepsilon\textrhookrevepsilon
+ \let\closedrevepsilon\textcloserevepsilon
+ \let\barj\textbardotlessj
+ \let\hookg\texthtg
+ \let\varg\textscriptg
+ \let\vod\textipagamma
+ \let\invh\textturnh
+ \let\udesc\textturnh
+ \let\hookh\texthth
+ \let\voicedh\texthth
+ \let\hookheng\texththeng
+ \let\ibar\textbari
+ \let\vari\textniiota
+ \let\tildel\textltilde
+ \let\latfric\textbeltl
+ \let\taill\textrtaill
+ \let\lz\textlyoghlig
+ \let\invm\textturnm
+ \let\rotm\textturnm
+ \let\legm\textturnmrleg
+ \let\labdentalnas\textltailm
+ \let\emgma\textltailm
+ \let\nj\textltailn
+ \let\enya\textltailn
+ \let\tailn\textrtailn
+ \let\closedniomega\textcloseomega
+ \let\varomega\textcloseomega
+ \let\invr\textturnr
+ \let\rotr\textturnr
+ \let\invlegr\textturnlonglegr
+ \let\tailinvr\textturnrrtail
+ \let\legr\textlonglegr
+ \let\tailr\textrtailr
+ \let\flapr\textfishhookr
+ \let\flap\textfishhookr
+ \let\tails\textrtails
+ \let\curlyesh\textctesh
+ \let\clickt\textturnt
+ \let\tailt\textrtailt
+ \let\ubar\textbaru
+ \let\rotOmega\textniupsilon
+ \let\invv\textturnv
+ \let\pwedge\textturnv
+ \let\invw\textturnw
+ \let\rotw\textturnw
+ \let\invy\textturny
+ \let\roty\textturny
+ \let\tailz\textrtailz
+ \let\curlyz\textctz
+ \let\curlyyogh\textctyogh
+ \let\ejective\textglotstop
+ \let\glottal\textglotstop
+ \let\reveject\textrevglotstop
+ \let\clickc\textstretchc
+ \let\textstretchcvar\textstretchc
+ \let\clickb\textbullseye
+ \let\textObullseye\textbullseye
+ \let\textctjvar\textctj
+ \let\textturnsck\textturnk
+ \let\dz\textdzlig
+ \let\tesh\textteshlig
+ \let\digamma\textdigammagreek
+ \let\hardsign\cyrhrdsn
+ \let\softsign\cyrsftsn
+ \let\hebsin\hebshin
+ \let\textsck\textPUsck
+ \let\textscm\textPUscm
+ \let\textscp\textPUscp
+ \let\textrevscr\textPUrevscr
+ \let\textrhooka\textPUrhooka
+ \let\textrhooke\textPUrhooke
+ \let\textrhookepsilon\textPUrhookepsilon
+ \let\textrhookopeno\textPUrhookopeno
+ \let\textdoublevertline\textbardbl
+ \let\dag\textdagger
+ \let\ddagger\textdaggerdbl
+ \let\ddag\textdaggerdbl
+ \let\mathellipsis\textellipsis
+ \let\EurDig\texteuro
+ \let\EURdig\texteuro
+ \let\EurHv\texteuro
+ \let\EURhv\texteuro
+ \let\EurCr\texteuro
+ \let\EURcr\texteuro
+ \let\EurTm\texteuro
+ \let\EURtm\texteuro
+ \let\Eur\texteuro
+ \let\Denarius\textDeleatur
+ \let\agemO\textmho
+ \let\EstimatedSign\textestimated
+ \let\Ecommerce\textestimated
+ \let\bindnasrepma\textinvamp
+ \let\parr\textinvamp
+ \let\MVRightArrow\textrightarrow
+ \let\MVRightarrow\textrightarrow
+ \let\MVArrowDown\textdownarrow
+ \let\Force\textdownarrow
+ \let\textglobrise\textnearrow
+ \let\textglobfall\textsearrow
+ \let\Lightning\textlightning
+ \let\Conclusion\textRightarrow
+ \let\dashedleftarrow\textdashleftarrow
+ \let\dashedrightarrow\textdashrightarrow
+ \let\varnothing\textemptyset
+ \let\owns\textni
+ \let\notni\textnotowner
+ \let\varprop\textpropto
+ \let\varangle\textsphericalangle
+ \let\Anglesign\textsphericalangle
+ \let\AngleSign\textsphericalangle
+ \let\notdivides\textnmid
+ \let\varowedge\textowedge
+ \let\varovee\textovee
+ \let\varint\textint
+ \let\varoint\textoint
+ \let\downtherefore\textbecause
+ \let\textdotdiv\textdotminus
+ \let\AC\textsim
+ \let\wreath\textwr
+ \let\nthickapprox\textnapprox
+ \let\VHF\texttriplesim
+ \let\notasymp\textnasymp
+ \let\Doteq\textdoteqdot
+ \let\corresponds\texthateq
+ \let\Corresponds\texthateq
+ \let\nequal\textneq
+ \let\Congruent\textequiv
+ \let\NotCongruent\textnequiv
+ \let\notequiv\textnequiv
+ \let\LessOrEqual\textleq
+ \let\LargerOrEqual\textgeq
+ \let\apprle\textlesssim
+ \let\apprge\textgtrsim
+ \let\varoplus\textoplus
+ \let\varominus\textominus
+ \let\varotimes\textotimes
+ \let\varoslash\textoslash
+ \let\varodot\textodot
+ \let\ocirc\textcircledcirc
+ \let\varocircle\textcircledcirc
+ \let\varoast\textcircledast
+ \let\oasterisk\textcircledast
+ \let\rightvdash\textvdash
+ \let\leftvdash\textdashv
+ \let\nleftvdash\textndashv
+ \let\downvdash\texttop
+ \let\upvdash\textbot
+ \let\nperp\textnupvdash
+ \let\models\textvDash
+ \let\rightmodels\textvDash
+ \let\rightVdash\textVdash
+ \let\rightModels\textVDash
+ \let\nrightvdash\textnvdash
+ \let\nrightmodels\textnvDash
+ \let\nmodels\textnvDash
+ \let\nrightVdash\textnVdash
+ \let\nrightModels\textnVDash
+ \let\lessclosed\textlhd
+ \let\gtrclosed\textrhd
+ \let\leqclosed\textunlhd
+ \let\trianglelefteq\textunlhd
+ \let\geqclosed\textunrhd
+ \let\trianglerighteq\textunrhd
+ \let\Bowtie\textbowtie
+ \let\varcurlyvee\textcurlyvee
+ \let\varcurlywedge\textcurlywedge
+ \let\doublecap\textCap
+ \let\doublecup\textCup
+ \let\varsqsubsetneq\textsqsubsetneq
+ \let\varsqsupsetneq\textsqsupsetneq
+ \let\nlessclosed\textntriangleleft
+ \let\ngtrclosed\textntriangleright
+ \let\Clocklogo\textclock
+ \let\ClockLogo\textclock
+ \let\baro\textstmaryrdbaro
+ \let\varparallelinv\textbbslash
+ \let\CleaningA\textCircledA
+ \let\Kutline\textCuttingLine
+ \let\CutLine\textCuttingLine
+ \let\Cutline\textCuttingLine
+ \let\MoveUp\textUParrow
+ \let\APLup\textbigtriangleup
+ \let\Bleech\textbigtriangleup
+ \let\MoveDown\textDOWNarrow
+ \let\APLdown\textbigtriangledown
+ \let\Diamond\textdiamond
+ \let\varbigcirc\textbigcircle
+ \let\Telefon\textPhone
+ \let\Box\textboxempty
+ \let\CheckedBox\textCheckedbox
+ \let\XBox\textCrossedbox
+ \let\CrossedBox\textCrossedbox
+ \let\rightpointleft\textHandLeft
+ \let\leftpointright\textHandRight
+ \let\PointingHand\textHandRight
+ \let\Pointinghand\textHandRight
+ \let\Radiation\textRadioactivity
+ \let\Yinyang\textYinYang
+ \let\YingYang\textYinYang
+ \let\Yingyang\textYinYang
+ \let\Frowny\textfrownie
+ \let\Smiley\textsmiley
+ \let\Sun\textsun
+ \let\Mercury\textmercury
+ \let\textfemale\textPUfemale
+ \let\female\textPUfemale
+ \let\venus\textPUfemale
+ \let\Venus\textPUfemale
+ \let\Female\textPUfemale
+ \let\Earth\textearth
+ \let\mars\textmale
+ \let\Mars\textmale
+ \let\Male\textmale
+ \let\Jupiter\textjupiter
+ \let\Saturn\textsaturn
+ \let\Uranus\texturanus
+ \let\Neptune\textneptune
+ \let\Pluto\textpluto
+ \let\Aries\textaries
+ \let\Taurus\texttaurus
+ \let\Gemini\textgemini
+ \let\Cancer\textcancer
+ \let\Leo\textleo
+ \let\Virgo\textvirgo
+ \let\Libra\textlibra
+ \let\Scorpio\textscorpio
+ \let\Sagittarius\textsagittarius
+ \let\Capricorn\textcapricornus
+ \let\Aquarius\textaquarius
+ \let\Pisces\textpisces
+ \let\spadesuit\textspadesuitblack
+ \let\Heart\textheartsuitwhite
+ \let\heartsuit\textheartsuitwhite
+ \let\diamondsuit\textdiamondsuitwhite
+ \let\clubsuit\textclubsuitblack
+ \let\eighthnote\textmusicalnote
+ \let\Recycling\textrecycle
+ \let\VarFlag\textFlag
+ \let\textxswup\textdsmilitary
+ \let\textuncrfemale\textPUuncrfemale
+ \let\Football\textSoccerBall
+ \let\CutLeft\textScissorRightBrokenBottom
+ \let\Cutright\textScissorRightBrokenBottom
+ \let\RightScissors\textScissorRight
+ \let\Leftscissors\textScissorRight
+ \let\Letter\textEnvelope
+ \let\Writinghand\textWritingHand
+ \let\checkmark\textCheckmark
+ \let\davidstar\textDavidStar
+ \let\llbracket\textlbrackdbl
+ \let\rrbracket\textrbrackdbl
+ \let\RightTorque\textlcurvearrowdown
+ \let\Righttorque\textlcurvearrowdown
+ \let\LeftTorque\textrcurvearrowdown
+ \let\Lefttorque\textrcurvearrowdown
+ \let\textvarobar\textobar
+ \let\circledbslash\textobslash
+ \let\obackslash\textobslash
+ \let\varobslash\textobslash
+ \let\odplus\textobot
+ \let\varolessthan\textolessthan
+ \let\varogreaterthan\textogreaterthan
+ \let\divdot\textminusdot
+ \let\doublesqcap\textsqdoublecap
+ \let\doublesqcup\textsqdoublecup
+ \let\merge\textdoublevee
+ \let\leftVdash\textdashV
+ \let\nleftVdash\textndashV
+ \let\leftmodels\textDashv
+ \let\nleftmodels\textnDashv
+ \let\leftModels\textDashV
+ \let\nleftModels\textnDashV
+ \let\varparallel\textsslash
+ \let\textheng\textPUheng
+ \let\textlhookfour\textPUlhookfour
+ \let\textscf\textPUscf
+ \let\textaolig\textPUaolig
+ \let\Ganz\textfullnote
+ \let\Halb\texthalfnote
+ \let\Womanface\textWomanFace
+ \let\Faxmachine\textFax
+ \let\CEsign\textCESign
+}% \psdaliasnames
+%</psdextra>
+% \end{macrocode}
+%
+% \section{End of file hycheck.tex}
+%
+% \begin{macrocode}
+%<*check>
+\typeout{}
+\begin{document}
+\end{document}
+%</check>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput