% \iffalse
%% File: hyperref.dtx Copyright 1995-2001 Sebastian Rahtz,
%% with portions written by David Carlisle and Heiko Oberdiek,
%% 2001-2010 Heiko Oberdiek.
%%
%% 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'.
%%
%\NeedsTeXFormat{LaTeX2e}
%\ProvidesPackage{hyperref}
%\ProvidesPackage{nohyperref}
%\ProvidesFile{hyperref.drv}
%\ProvidesFile{hycheck.tex}
%\ProvidesFile{hypertex.def}
%\ProvidesFile{hpdftex.def}
%\ProvidesFile{pdfmark.def}
%\ProvidesFile{hvtexmrk.def}
%\ProvidesFile{hdvips.def}
%\ProvidesFile{hdvipson.def}
%\ProvidesFile{htexture.def}
%\ProvidesFile{hdviwind.def}
%\ProvidesFile{hdvipdfm.def}
%\ProvidesFile{hxetex.def}
%\ProvidesFile{hvtex.def}
%\ProvidesFile{hvtexhtml.def}
%\ProvidesFile{htex4ht.def}
%\ProvidesFile{htex4ht.cfg}
%\ProvidesFile{pd1enc.def}
%\ProvidesFile{puenc.def}
%\ProvidesFile{puvnenc.def}
%\ProvidesFile{puarenc.def}
% [2010/02/25 v6.80h
% Hypertext links for LaTeX]
% Dummy hyperref (SR)]
% Hyperref documentation driver file]
% Hyperref test file]
% Hyperref driver for HyperTeX specials]
% Hyperref driver for pdfTeX]
% Hyperref definitions for pdfmark specials]
% Hyperref driver for VTeX in PDF/PS mode (pdfmark specials)]
% Hyperref driver for dvips]
% Hyperref driver for dvipsone]
% Hyperref driver for Textures]
% Hyperref driver for dviwindo]
% Hyperref driver for dvipdfm]
% Hyperref driver for XeTeX]
% Hyperref driver for VTeX in PDF/PS mode]
% Hyperref driver for VTeX in HTML mode]
% Hyperref driver for TeX4ht]
% Hyperref configuration file for TeX4ht]
% Hyperref: PDFDocEncoding definition (HO)]
% Hyperref: PDF Unicode definition (HO)]
% Hyperref: Additions to puenc.def for VnTeX]
% Hyperref: Additions to puenc.def for Arabi]
%<*driver>
\documentclass{ltxdoc}
\usepackage{array,times}
\usepackage[T1]{fontenc}
\renewcommand*{\ttdefault}{lmvtt}
\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.drv}%
\title{Hypertext marks in \LaTeX}%
\author{Sebastian Rahtz\\%
Email: \texttt{sebastian.rahtz@oucs.ox.ac.uk}\\[1.5ex]%
Heiko Oberdiek\\%
Email: \texttt{oberdiek@uni-freiburg.de}}%
% \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}
%
% \fi
% \CheckSum{25557}
%
% \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}
% **************************************************
%
% \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!
% \begin{macrocode}
\RequirePackage{keyval}[1997/11/10]
\RequirePackage{kvsetkeys}[2007/09/29]
\RequirePackage{pdfescape}[2007/11/11]
\RequirePackage{ifpdf}[2006/02/20]
\RequirePackage{ifvtex}
\RequirePackage{ifxetex}[2006/08/21]
\RequirePackage{hycolor}
\RequirePackage{letltxmacro}[2008/06/13]
\def\Hy@Warning#1{\PackageWarning{hyperref}{#1}}
\def\Hy@WarningNoLine#1{\PackageWarningNoLine{hyperref}{#1}}
\def\Hy@Info#1{\PackageInfo{hyperref}{#1}}
% \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}
%
% \subsection{Switches}
% \begin{macrocode}
\newif\ifHy@typexml
\newif\ifHy@activeanchor
\newif\ifHy@backref
\newif\ifHy@bookmarks
\newif\ifHy@bookmarksnumbered
\newif\ifHy@bookmarksopen
\newif\ifHy@breaklinks
\newif\ifHy@centerwindow
\newif\ifHy@CJKbookmarks
\newif\ifHy@colorlinks
\newif\ifHy@draft
\let\Hy@finaltrue\Hy@draftfalse
\let\Hy@finalfalse\Hy@drafttrue
\newif\ifHy@escapeform
\newif\ifHy@figures
\newif\ifHy@fitwindow
\newif\ifHy@frenchlinks
\newif\ifHy@hyperfootnotes
\newif\ifHy@hyperindex
\newif\ifHy@hypertexnames
\newif\ifHy@implicit
\newif\ifHy@linktocpage
\newif\ifHy@menubar
\newif\ifHy@naturalnames
\newif\ifHy@nesting
\newif\ifHy@newwindowset
\newif\ifHy@newwindow
\newif\ifHy@ocgcolorlinks
\newif\ifHy@pageanchor
\newif\ifHy@pagelabels
\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@toolbar
\newif\ifHy@unicode
\newif\ifHy@usetitle
\newif\ifHy@verbose
\newif\ifHy@windowui
\newif\ifHy@displaydoctitle
\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@centerwindowfalse
\Hy@CJKbookmarksfalse
\Hy@escapeformfalse
\Hy@figuresfalse
\Hy@fitwindowfalse
\Hy@hyperfootnotestrue
\Hy@hyperindextrue
\Hy@hypertexnamestrue
\Hy@implicittrue
\Hy@linktocpagefalse
\Hy@menubartrue
\Hy@naturalnamesfalse
\Hy@nestingfalse
\Hy@newwindowsetfalse
\Hy@newwindowfalse
\Hy@pageanchortrue
\Hy@pagelabelstrue
\Hy@pdfpagehiddenfalse
\Hy@pdfstringfalse
\Hy@plainpagesfalse
\Hy@raiselinksfalse
\Hy@setpagesizetrue
\Hy@texhtfalse
\Hy@toolbartrue
\Hy@typexmlfalse
\Hy@unicodefalse
\Hy@usetitlefalse
\Hy@verbosefalse
\Hy@windowuitrue
\Hy@displaydoctitlefalse
\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\@empty
\let\MaybeStopEarly\relax
\newcount\Hy@linkcounter
\newcount\Hy@pagecounter
\Hy@linkcounter0
\Hy@pagecounter0
% \end{macrocode}
%
% \subsection{Macros for recursions}
%
% \begin{macro}{\Hy@ReturnAfterElseFi}
% \begin{macro}{\Hy@ReturnAfterFi}
% The commands \cs{Hy@ReturnAfterElseFi} and \cs{Hy@ReturnAfterFi}
% avoid a too deep \cs{if}-nesting especially for recursive macros.
% \begin{macrocode}
\long\def\Hy@ReturnAfterElseFi#1\else#2\fi{\fi#1}
\long\def\Hy@ReturnAfterFi#1\fi{\fi#1}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \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
\Hy@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.\\
% Email: \Email{oberdiek@uni-freiburg.de}.
%
% 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
\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.
% \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
% \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{\LaTeX2e}%
\def\eTeX{e-\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\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 color.}
% \begin{macrocode}
\def\textcolor##1##{\@secondoftwo}%
% \end{macrocode}
%
% \paragraph{Upper- and lowercase.}
% \begin{macrocode}
\def\MakeUppercase{\MakeUppercaseUnsupportedInPdfStrings}%
\def\MakeLowercase{\MakeLowercaseUnsupportedInPdfStrings}%
% \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\textlatin\@firstofone
\@ifundefined{language@group}{}{%
\csname HyPsd@babel@\language@group\endcsname
}%
\HyPsd@GreekPatch
\HyPsd@SpanishPatch
% \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\@secondoftwo
\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}
%
% \paragraph{Patch for cjk bookmarks.}
% \begin{macrocode}
\ifHy@CJKbookmarks
\HyPsd@CJKhook
\fi
% \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}
\@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¶meter, 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%
\@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
\@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
\Hy@unicodefalse
}{%
\HyPsd@ToBigChars#1%
}%
\else
\StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
{utf16be}{pdfdoc}{%
\EdefEscapeString\HyPsd@temp\HyPsd@temp
\global\let#1\HyPsd@temp
\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
}%
\AtEndOfPackage{%
\pdfstringdefDisableCommands{%
\@ifundefined{oldb}{}{\let\b\oldb}%
\@ifundefined{oldc}{}{\let\c\oldc}%
\@ifundefined{oldd}{}{\let\d\oldd}%
}%
}%
}{%
\let\HyLinguex@Restore\relax
}%
% \end{macrocode}
%
% \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}{%
\input{pd1enc.def}%
\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@InitUnicode}
% Because the file |puenc.def| takes a lot of memory, the loading
% is defined in the macro \cs{HyPsd@InitUnicode} called by
% the package option |unicode|.
% \begin{macrocode}
\def\HyPsd@InitUnicode{%
\@ifundefined{T@PU}{%
\input{puenc.def}%
\HyLinguex@Restore
}{}%
\DeclareFontFamily{PU}{pdf}{}%
\DeclareFontShape{PU}{pdf}{m}{n}{ <-> cmr10 }{}%
\DeclareFontSubstitution{PU}{pdf}{m}{n}%
\let\HyPsd@InitUnicode\relax
}
% \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{%
\toks0=\expandafter{\pdfstringdefPreHook}%
\toks1={#1}%
\xdef\pdfstringdefPreHook{\the\toks0 \the\toks1}%
\endgroup
}
% \end{macrocode}
% \end{macro}
%
% \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
}
\RequirePackage{pdftexcmds}[2009/04/10]
\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\AtBeginDocument\expandafter{\Hy@temp}
% \end{macrocode}
%
% \begin{macrocode}
\newif\ifHy@next
% \end{macrocode}
%
% Nothing to do for english.
% \begin{macrocode}
\@ifundefined{danish@sh@"@sel}{}{%
\def\HyPsd@babel@danish{%
\declare@shorthand{danish}{"|}{}%
\declare@shorthand{danish}{"~}{-}%
}%
}
\@ifundefined{dutch@sh@"@sel}{}{%
\def\HyPsd@babel@dutch{%
\declare@shorthand{dutch}{"|}{}%
\declare@shorthand{dutch}{"~}{-}%
}%
}
\@ifundefined{finnish@sh@"@sel}{}{%
\def\HyPsd@babel@finnish{%
\declare@shorthand{finnish}{"|}{}%
}%
}
\@ifundefined{french@sh@:@sel}{}{%
\def\HyPsd@babel@frenchb{%
\def\guill@spacing{ }%
}%
}
\@ifundefined{german@sh@"@sel}{}{%
\def\HyPsd@babel@german{%
\declare@shorthand{german}{"f}{f}%
\declare@shorthand{german}{"|}{}%
\declare@shorthand{german}{"~}{-}%
}%
}
\@ifundefined{macedonian@sh@"@sel}{}{%
\def\HyPsd@babel@macedonian{%
\declare@shorthand{macedonian}{"|}{}%
\declare@shorthand{macedonian}{"~}{-}%
}%
}{}
\@ifundefined{ngerman@sh@"@sel}{}{%
\def\HyPsd@babel@ngerman{%
\declare@shorthand{ngerman}{"|}{}%
\declare@shorthand{ngerman}{"~}{-}%
}%
}
\@ifundefined{portuges@sh@"@sel}{}{%
\def\HyPsd@babel@portuges{%
\declare@shorthand{portuges}{"|}{}%
}%
}
\@ifundefined{russian@sh@"@sel}{}{%
\def\HyPsd@babel@russian{%
\declare@shorthand{russian}{"|}{}%
\declare@shorthand{russian}{"~}{-}%
}%
}
\@ifundefined{slovene@sh@"@sel}{}{%
\def\HyPsd@babel@slovene{%
\declare@shorthand{slovene}{"|}{}%
}%
}
% \end{macrocode}
% Nested quoting environments are not supported (|<<|, |>>|).
% \begin{macrocode}
\@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}%
}%
}
\@ifundefined{swedish@sh@"@sel}{}{%
\def\HyPsd@babel@swedish{%
\declare@shorthand{swedish}{"|}{}%
\declare@shorthand{swedish}{"~}{-}%
}%
}
\@ifundefined{ukrainian@sh@"@sel}{}{%
\def\HyPsd@babel@ukrainian{%
\declare@shorthand{ukrainian}{"|}{}%
\declare@shorthand{ukrainian}{"~}{-}%
}%
}
\@ifundefined{usorbian@sh@"@sel}{}{%
\def\HyPsd@babel@usorbian{%
\declare@shorthand{usorbian}{"f}{f}%
\declare@shorthand{usorbian}{"|}{}%
}%
}
% \end{macrocode}
% \begin{macrocode}
\@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{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname es@save@dot\endcsname\relax
\else
\let\.\es@save@dot
\fi
}
% \end{macrocode}
%
% \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^^7f^^7f
%\end{verbatim}
% \verb|| is the first byte in the range (always $>$ 0x80);
% \verb|| 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{\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{\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}
\@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@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{%
\@ifundefined{#1autorefname}{%
\@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{-command} and \cs{-command}
% with the meaning of \cs{def} and \cs{let}. So it is detected by
% \cs{HyPsd@CheckCatcodes} and the command name \cs{-command}
% or \cs{-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 -command\expandafter\endcsname
\csname -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
\def\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{Hy@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{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}).
%
% \begin{macrocode}
\def\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#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%
\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
\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
}
% \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
\Hy@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}
%
% \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
|Hy@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
|Hy@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}
\RequirePackage{intcalc}[2007/09/27]
\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}
%
% \section{Support of other packages}
%
% \subsection{Class memoir}
%
% \begin{macrocode}
\@ifclassloaded{memoir}{%
\AtEndOfPackage{\RequirePackage{memhfixc}}%
}{}
% \end{macrocode}
%
% \subsection{Package subfigure}
% Added fix for version 2.1. Here \cmd{\sub@label} is defined.
% \begin{macrocode}
\@ifpackageloaded{subfigure}{%
\@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}
\@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}
\def\Hy@raisedlink#1{%
\ifvmode
#1%
\else
\penalty\@M
\smash{%
\begingroup
\let\HyperRaiseLinkLength\@tempdima
\setlength\HyperRaiseLinkLength\HyperRaiseLinkDefault
\HyperRaiseLinkHook
\expandafter\endgroup
\expandafter\raise\the\HyperRaiseLinkLength\hbox{#1}%
}%
\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}
%
% \subsection{Help macros}
%
% \begin{macro}{\Hy@boolkey}
% \begin{macrocode}
\def\Hy@boolkey{\@dblarg\Hy@@boolkey}
\def\Hy@@boolkey[#1]#2#3{%
\edef\Hy@tempa{#3}%
\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{#3}{#1}{`true' or 'false'}%
\else
\Hy@Info{Option `#1' set `\Hy@tempa'}%
\csname Hy@#2\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@DisableOption#1{%
\@ifundefined{KV@Hyp@#1@default}{%
\define@key{Hyp}{#1}%
}{%
\define@key{Hyp}{#1}[]%
}%
{\Hy@WarnOptionDisabled{#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]{verbose}{#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}
% 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}{unicode}[true]{%
\Hy@boolkey{unicode}{#1}%
\ifHy@unicode
\def\HyPsd@pdfencoding{unicode}%
\HyPsd@LoadUnicode
\else
\def\HyPsd@pdfencoding{pdfdoc}%
\fi
}
\def\HyPsd@LoadUnicode{%
\@ifundefined{T@PU}{%
\input{puenc.def}%
\HyLinguex@Restore
}{}%
\DeclareFontFamily{PU}{pdf}{}%
\DeclareFontShape{PU}{pdf}{m}{n}{ <-> cmr10 }{}%
\DeclareFontSubstitution{PU}{pdf}{m}{n}%
\global\let\HyPsd@LoadUnicode\relax
}
\AtBeginDocument{%
\ifx\HyPsd@LoadUnicode\relax
\else
\def\HyPsd@LoadUnicode{%
\PackageError{hyperref}{%
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
}
\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}
\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{2}
% \end{macrocode}
%
% \section{Options for different drivers}\label{drivers}
% \begin{macrocode}
\define@key{Hyp}{hyperref}[true]{}
\define@key{Hyp}{tex4ht}[true]{%
\Hy@texhttrue
\setkeys{Hyp}{colorlinks=true}%
\def\BeforeTeXIVht{\usepackage{color}}%
\def\Hy@driver{htex4ht}%
\def\MaybeStopEarly{%
\typeout{Hyperref stopped early}%
\AfterBeginDocument{%
\PDF@FinishDoc
\gdef\PDF@FinishDoc{}%
}%
\endinput
}%
}
\define@key{Hyp}{pdftex}[true]{%
\def\Hy@driver{hpdftex}%
}
\define@key{Hyp}{nativepdf}[true]{%
\def\Hy@driver{hdvips}%
}
\define@key{Hyp}{dvipdfm}[true]{%
\def\Hy@driver{hdvipdfm}%
}
\define@key{Hyp}{dvipdfmx}[true]{%
\def\Hy@driver{hdvipdfm}%
}
\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
}
\define@key{Hyp}{xetex}[true]{%
\def\Hy@driver{hxetex}%
}
\define@key{Hyp}{pdfmark}[true]{%
\def\Hy@driver{hdvips}%
}
\define@key{Hyp}{dvips}[true]{%
\def\Hy@driver{hdvips}%
}
\define@key{Hyp}{hypertex}[true]{%
\def\Hy@driver{hypertex}%
}
\let\Hy@MaybeStopNow\relax
\define@key{Hyp}{vtex}[true]{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname OpMode\endcsname\relax
\@latex@error{Non-VTeX processor}{}%
\global\let\Hy@MaybeStopNow\endinput
\endinput
\else
\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{%
\typeout{Hyperref stopped early}%
\AfterBeginDocument{%
\PDF@FinishDoc
\gdef\PDF@FinishDoc{}%
}%
\endinput
}%
\else
\@latex@error{Mode (\the\OpMode) has no hyperref driver}{}%
\global\let\Hy@MaybeStopNow\endinput
\endinput
\fi
\fi
\fi
}
\define@key{Hyp}{vtexpdfmark}[true]{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname OpMode\endcsname\relax
\@latex@error{Non-VTeX processor}{}%
\let\Hy@MaybeStopNow\endinput
\endinput
\else
\ifnum 0\ifnum\OpMode<1 1\fi \ifnum\OpMode>3 1\fi =0 %
\def\Hy@driver{hvtexmrk}%
\else
\@latex@error{Mode (\the\OpMode) has no hyperref driver}{}%
\let\Hy@MaybeStopNow\endinput
\endinput
\fi
\fi
}
\define@key{Hyp}{dviwindo}[true]{%
\def\Hy@driver{hdviwind}%
\setkeys{Hyp}{colorlinks}%
\ifpdf
\else
\ifxetex
\else
\PassOptionsToPackage{dviwindo}{color}%
\fi
\fi
}
\define@key{Hyp}{dvipsone}[true]{%
\def\Hy@driver{hdvipson}%
}
\define@key{Hyp}{textures}[true]{%
\def\Hy@driver{htexture}%
}
\define@key{Hyp}{latex2html}[true]{%
\AtBeginDocument{\@@latextohtmlX}%
}
% \end{macrocode}
% No more special treatment for ps2pdf. Let it sink or swim.
% \begin{macrocode}
\define@key{Hyp}{ps2pdf}[true]{%
\def\Hy@driver{hdvips}%
\providecommand*\@pdfborder{0 0 1}%
}
% \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]{figures}{#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}%
}
\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}
%
% 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{%
\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\HyLang@addto{\noexpand##1}{\noexpand##2}%
#3%
}%
}%
\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{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}{}
% \end{macrocode}
% More work is needed in case of options |vietnamese| and |vietnam|.
% \begin{macrocode}
\define@key{Hyp}{vietnamese}[]{%
\HyLang@addto\extrasvietnamese\HyLang@vietnamese
\AtEndOfPackage{%
\@ifundefined{T@PU}{}{%
\input{puvnenc.def}%
}%
}%
}
\define@key{Hyp}{vietnam}[]{%
\HyLang@addto\extrasvietnam\HyLang@vietnamese
\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}
\define@key{Hyp}{arabic}[]{%
\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}%
}
\define@key{Hyp}{ocgcolorlinks}[true]{%
\Hy@boolkey{ocgcolorlinks}{#1}%
}
\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=|: the depth is set to
% \verb||.
% \item \verb|bookmarksdepth=|: The \verb|| 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@| 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 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
}
% \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}}
% \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
}
% \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}%
}
\define@key{Hyp}{pdfborder}{\def\@pdfborder{#1}}
\define@key{Hyp}{pdfborderstyle}{\def\@pdfborderstyle{#1}}
\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]{usetitle}{#1}%
}
\def\HyXeTeX@CheckUnicode{%
\ifxetex
\ifHy@unicode
\else
\Hy@WarningNoLine{%
XeTeX driver only supports unicode.\MessageBreak
Enabling option `unicode'%
}%
\setkeys{Hyp}{unicode}%
\fi
\else
\let\HyXeTeX@CheckUnicode\relax
\fi
}
\define@key{Hyp}{pdftitle}{%
\HyXeTeX@CheckUnicode
\HyPsd@XeTeXBigCharstrue
\pdfstringdef\@pdftitle{#1}%
}
\define@key{Hyp}{pdfauthor}{%
\HyXeTeX@CheckUnicode
\HyPsd@XeTeXBigCharstrue
\pdfstringdef\@pdfauthor{#1}%
}
\define@key{Hyp}{pdfproducer}{%
\HyXeTeX@CheckUnicode
\HyPsd@XeTeXBigCharstrue
\pdfstringdef\@pdfproducer{#1}%
}
\define@key{Hyp}{pdfcreator}{%
\HyXeTeX@CheckUnicode
\HyPsd@XeTeXBigCharstrue
\pdfstringdef\@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
\pdfstringdef\@pdfsubject{#1}%
}
\define@key{Hyp}{pdfkeywords}{%
\HyXeTeX@CheckUnicode
\HyPsd@XeTeXBigCharstrue
\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
\define@key{pdfinfo}{\HyInfo@Key}{%
\HyXeTeX@CheckUnicode
\HyPsd@XeTeXBigCharstrue
\pdfstringdef\HyInfo@Value{##1}%
\expandafter\let\csname HyInfo@Value@\HyInfo@Key\endcsname
\HyInfo@Value
}%
\edef\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
}
\def\HyInfo@AddonList{}
% \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\\%
\def\@pdfstartpage{}%
\else
\edef\@pdfstartpage{\Hy@number{#1}}%
\fi
}%
\define@key{Hyp}{pdfstartview}{%
\ifx\\#1\\%
\def\@pdfstartview{}%
\else
\hypercalcbpdef\@pdfstartview{ /#1 }%
\fi
}
\define@key{Hyp}{pdfpagescrop}{\edef\@pdfpagescrop{#1}}
\define@key{Hyp}{pdftoolbar}[true]{%
\Hy@boolkey[pdftoolbar]{toolbar}{#1}%
}
\define@key{Hyp}{pdfmenubar}[true]{%
\Hy@boolkey[pdfmenubar]{menubar}{#1}%
}
\define@key{Hyp}{pdfwindowui}[true]{%
\Hy@boolkey[pdfwindowui]{windowui}{#1}%
}
\define@key{Hyp}{pdffitwindow}[true]{%
\Hy@boolkey[pdffitwindow]{fitwindow}{#1}%
}
\define@key{Hyp}{pdfcenterwindow}[true]{%
\Hy@boolkey[pdfcenterwindow]{centerwindow}{#1}%
}
\define@key{Hyp}{pdfdisplaydoctitle}[true]{%
\Hy@boolkey[pdfdisplaydoctitle]{displaydoctitle}{#1}%
}
\define@key{Hyp}{pdfa}[true]{%
\Hy@boolkey{pdfa}{#1}%
}
\define@key{Hyp}{pdfnewwindow}[true]{%
\def\Hy@temp{#1}%
\ifx\Hy@temp\@empty
\Hy@newwindowsetfalse
\else
\Hy@newwindowsettrue
\Hy@boolkey[pdfnewwindow]{newwindow}{#1}%
\fi
}
\def\Hy@SetNewWindow{%
\ifHy@newwindowset
/NewWindow %
\ifHy@newwindow 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}{%
\def\@pdflang{#1}%
}
\define@key{Hyp}{pdfpagelabels}[true]{%
\Hy@boolkey[pdfpagelabels]{pagelabels}{#1}%
}
\define@key{Hyp}{pdfescapeform}[true]{%
\Hy@boolkey[pdfescapeform]{escapeform}{#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}
\def\@pdftitle{}
\def\@pdfauthor{}
\let\@pdfproducer\relax
\def\@pdfcreator{LaTeX with hyperref package}
\def\@pdfcreationdate{}
\def\@pdfmoddate{}
\def\@pdfsubject{}
\def\@pdfkeywords{}
\def\@pdftrapped{}
\def\@pdfpagescrop{}
\def\@pdfstartview{ /Fit }
\def\@pdfstartpage{1}
\def\@pdfprintpagerange{}
\def\@pdflang{}
\let\PDF@SetupDoc\@empty
\let\PDF@FinishDoc\@empty
\let\phantomsection\@empty
\let\special@paper\@empty
\def\HyperDestNameFilter#1{#1}
\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}
%
% \begin{macrocode}
\def\hypersetup{\setkeys{Hyp}}
% \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
\Hy@MaybeStopNow
% \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.
%
% 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}
%
% \begin{macrocode}
\SetupKeyvalOptions{family=Hyp}
\DeclareLocalOptions{%
a4paper,a5paper,b5paper,letterpaper,legalpaper,executivepaper%
}
% \end{macrocode}
%
% Add option |tex4ht| if package |tex4ht| is loaded.
% \begin{macrocode}
\@ifpackageloaded{tex4ht}{%
\@ifpackagewith{hyperref}{tex4ht}{}{%
\PassOptionsToPackage{tex4ht}{hyperref}%
}%
}{}
% \end{macrocode}
%
% \begin{macrocode}
\let\ReadBookmarks\relax
\ProcessKeyvalOptions{Hyp}
% \end{macrocode}
%
% After processing options.
%
% \begin{macrocode}
\AtBeginDocument{%
\ifHy@draft
\let\hyper@@anchor\@gobble
\gdef\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{}%
\def\Acrobatmenu#1#2{\leavevmode#2}%
\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
\setkeys{Hyp}{pdfversion=1.4}%
\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
\PackageError{hyperref}{%
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
\@ifundefined{spanish@sh@"@sel}{}{\Hy@nexttrue}
\@ifundefined{galician@sh@"@sel}{}{\Hy@nexttrue}
\@ifundefined{estonian@sh@"@sel}{}{\Hy@nexttrue}
\ifHy@next
\let\texttilde\~%
\fi
% \end{macrocode}
%
% \begin{macrocode}
\ifHy@figures
\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
\AtEndOfPackage{%
\RequirePackage{color}%
\RequirePackage{nameref}%
}%
\fi
\Hy@DisableOption{typexml}
\ifHy@implicit
\typeout{Implicit mode ON; LaTeX internals redefined}%
\else
\typeout{Implicit mode OFF; no redefinition of LaTeX internals}%
\def\MaybeStopEarly{%
\typeout{Hyperref stopped early}%
\AfterBeginDocument{%
\PDF@FinishDoc
\gdef\PDF@FinishDoc{}%
}%
\endinput
}%
\AtBeginDocument{%
\let\autoref\ref
\let\autopageref\pageref
\ifx\@pdfpagemode\@empty
\gdef\@pdfpagemode{UseNone}%
\fi
\global\Hy@backreffalse
}%
\AtEndOfPackage{%
\global\let\ReadBookmarks\relax
\global\let\WriteBookmarks\relax
}%
\fi
\Hy@DisableOption{implicit}
% \end{macrocode}
%
% \subsubsection{Driver loading}
%
% \begin{macrocode}
\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
\def\Hy@temp{hpdftex}%
\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
\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
\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}
\ifx\Hy@driver\@empty
\providecommand*{\Hy@defaultdriver}{hypertex}%
\ifpdf
\def\Hy@driver{hpdftex}%
\else
\ifxetex
\def\Hy@driver{hxetex}%
\else
\ifvtexhtml
\def\Hy@driver{hvtexhtm}%
\def\MaybeStopEarly{%
\typeout{Hyperref stopped early}%
\AfterBeginDocument{%
\PDF@FinishDoc
\gdef\PDF@FinishDoc{}%
}%
\endinput
}%
\else
\ifvtexpdf
\def\Hy@driver{hvtex}%
\else
\ifvtexps
\def\Hy@driver{hvtex}%
\else
\let\Hy@driver\Hy@defaultdriver
\fi
\fi
\fi
\fi
\fi
\ifx\Hy@driver\Hy@defaultdriver
\def\Hy@temp{hdviwind}%
\ifx\Hy@temp\Hy@driver
\setkeys{Hyp}{colorlinks}%
\PassOptionsToPackage{dviwindo}{color}%
\fi
\fi
\typeout{*hyperref using default driver \Hy@driver*}%
\else
\typeout{*hyperref using driver \Hy@driver*}%
\fi
\input{\Hy@driver.def}%
\let\@unprocessedoptions\relax
\Hy@RestoreCatcodes
}
% \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
\Hy@DvipdfmxOutlineOpentrue
\fi
\fi
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname SpecialDvipdfmxOutlineOpen\endcsname\relax
\else
\ifnum\SpecialDvipdfmxOutlineOpen>\z@
\Hy@DvipdfmxOutlineOpentrue
\fi
\fi
\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}
\AtEndOfPackage{%
\Hy@DisableOption{pdfversion}%
}
% \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
\def\@bookmarkopenstatus#1{}%
\Hy@Info{Bookmarks OFF}%
\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{%
\def\Hy@EndWrap{}%
\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}
\AtBeginDocument{%
\ifHy@ocgcolorlinks
\setkeys{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{sc}\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}%
}%
\fi
\fi
\DeclareRobustCommand\ref{\@ifstar\@refstar\T@ref}%
\DeclareRobustCommand\pageref{%
\@ifstar\@pagerefstar\T@pageref
}%
}
\AfterBeginDocument{%
\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
\Hy@ReturnAfterElseFi{^^A
\hyper@@normalise{#1}^^A
}^^A
\else
\Hy@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
\Hy@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
\Hy@Info{Reference (#1) to `#2'}%
\endgroup
\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}
\DeclareRobustCommand*{\href}{%
\@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\\{%
\hyper@@link{$1}{$2}%
}%
\endgroup
% \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.
% \begin{macrocode}
\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%
}%
\hyper@@link{}{??}{#3}%
\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}
% \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]}%
}
\def\hyper@link@[#1]#2#3#4{%
\begingroup
\protected@edef\Hy@tempa{#2}%
\Hy@safe@activestrue
\edef\x{#3}%
\ifx\Hy@tempa\@empty
\toks0{\hyper@link{#1}}%
\else
\toks0{\expandafter\hyper@readexternallink#2\\{#1}}%
\fi
\toks2{%
\Hy@safe@activesfalse
#4%
}%
\edef\Hy@tempa{\the\toks2}%
\edef\x{\endgroup
\ifx\Hy@tempa\@empty
\noexpand\Hy@Warning{Suppressing empty link}%
\else
\the\toks0 {\x}{\the\toks2}%%
\fi
}%
\x
}
% \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{%
% \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}
\expandafter\@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\\%
\expandafter\@hyper@linkfile file:#7\\{#3}{#2}%
\else
\ifx\\#4\\%
\expandafter\@hyper@linkfile file:#7\\{#3}{#2}%
\else
% \end{macrocode}
% If the URL type is `file', pass it for local opening
% \begin{macrocode}
\def\@pdftempa{#4}%
\ifx\@pdftempa\@pdftempwordfile
\expandafter\@hyper@linkfile#7\\{#3}{#2}%
\else
% \end{macrocode}
% if it starts `run:', its to launch an application.
% \begin{macrocode}
\ifx\@pdftempa\@pdftempwordrun
\ifHy@pdfa
\PackageError{hyperref}{%
PDF/A: Launch action is prohibited%
}\@ehc
\begingroup
\leavevmode
#2%
\endgroup
\else
\expandafter\@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 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{%
%file url,link string, name
\filename@parse{#1}%
\ifx\filename@ext\relax
\edef\filename@ext{\XR@ext}%
\fi
\def\use@file{\filename@area\filename@base.\filename@ext}%
\ifx\filename@ext\XR@ext
\hyper@linkfile{#2}{\use@file}{#3}%
\else
\ifx\@baseurl\@empty
\hyper@linkurl{#2}{%
\Hy@linkfileprefix\use@file\ifx\\#3\\\else\hyper@hash#3\fi
}%
\else
\hyper@linkurl{#2}{\use@file\ifx\\#3\\\else\hyper@hash#3\fi}%
\fi
\fi
}
% \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@WarningNoLine{empty link? #1: #2#3}%
\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
}
% \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
\PackageError{hyperref}{%
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}{%
\def\Fld@submitflags{}%
}{%
\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}{%
\def\Fld@annotflags{}%
}{%
\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}{%
\def\Fld@flags{}%
}{%
\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}{%
\def\Fld@flags{}%
}{%
\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}{%
\def\Fld@flags{}%
}{%
\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
\PackageError{hyperref}{%
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}{%
\def\Fld@flags{}%
}{%
\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}{%
\def\Fld@flags{}%
}{%
\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
\gdef\Fld@choices{}%
\def\HyTmp@optlist{}%
\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{%
\setkeys{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
\typeout{hyperref: form `encoding' key set to #1 %
-- unknown type%
}%
\Form@htmlfalse
\fi
}
\define@key{Form}{method}{%
\lowercase{\def\Hy@temp{#1}}%
\@ifundefined{Form@method@\Hy@temp}{%
\@onelevel@sanitize\Hy@temp
\PackageError{hyperref}{%
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}
\def\Field@boolkey#1#2{%
\csname Fld@#2\ifx\relax#1\relax true\else#1\fi\endcsname
}
\newtoks\Field@toks
\Field@toks={ }%
\def\Field@addtoks#1#2{%
\edef\@processme{\Field@toks{\the\Field@toks\space #1="#2"}}%
\@processme
}
\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}%
}
\define@key{Field}{accesskey}{%
\Field@addtoks{accesskey}{#1}%
}
\define@key{Field}{tabkey}{%
\Field@addtoks{tabkey}{#1}%
}
\define@key{Field}{name}{%
\def\Fld@name{#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}{%
\Fld@charsize#1%
}
\define@key{Field}{borderwidth}{%
\def\Fld@borderwidth{#1}%
}
\define@key{Field}{borderstyle}{%
\def\Fld@borderstyle{#1}%
}
\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}{%
\def\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{%
\def\Fld@temp{}%
\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}
\def\Fld@onclick@code{}
\def\Fld@format@code{}
\def\Fld@validate@code{}
\def\Fld@calculate@code{}
\def\Fld@keystroke@code{}
\def\Fld@onfocus@code{}
\def\Fld@onblur@code{}
\def\Fld@onmousedown@code{}
\def\Fld@onmouseup@code{}
\def\Fld@onenter@code{}
\def\Fld@onexit@code{}
\def\Hy@temp#1{%
\expandafter\Hy@@temp\csname Fld@#1@code\endcsname{#1}%
}
\def\Hy@@temp#1#2{%
\ifHy@pdfa
\define@key{Field}{#2}{%
\PackageError{hyperref}{%
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}
\def\Hy@temp#1{%
\define@key{Field}{#1}{%
\Field@addtoks{#1}{##1}%
}%
}
\Hy@temp{onselect}
\Hy@temp{onchange}
\Hy@temp{ondblclick}
\Hy@temp{onmousedown}
\Hy@temp{onmouseup}
\Hy@temp{onmouseover}
\Hy@temp{onmousemove}
\Hy@temp{onmouseout}
\Hy@temp{onkeypress}
\Hy@temp{onkeydown}
\Hy@temp{onkeyup}
\ifHy@pdfa
\define@key{Field}{onclick}{%
\PackageError{hyperref}{%
PDF/A: Action `onclick' is prohibited%
}\@ehc
}%
\else
\define@key{Field}{onclick}{%
\def\Fld@onclick@code{#1}%
\Field@addtoks{onclick}{#1}%
}%
\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@figures
\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"}
\let\@currentHref\@empty
\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}
\AfterBeginDocument{%
\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}%
\def\hyper@@anchor##1{}%
\global\let\hyper@livelink\hyper@link
\gdef\hyper@link##1##2##3{##3}%
\def\hyper@anchor##1{}%
\def\hyper@anchorstart##1{}%
\let\hyper@anchorend\@empty
\def\hyper@linkstart##1##2{}%
\let\hyper@linkend\@empty
\def\hyper@linkurl##1##2{##1}%
\def\hyper@linkfile##1##2##3{##1}%
\def\hyper@link@[##1]##2##3{}%
\let\Hy@backout\@gobble
}
\def\stop@hyper{%
\def\hyper@link@[##1]##2##3##4{##4}%
\let\Hy@backout\@gobble
\def\hyper@@anchor##1{}%
\def\hyper@link##1##2##3{##3}%
\def\hyper@anchor##1{}%
\def\hyper@anchorstart##1{}%
\let\hyper@anchorend\@empty
\def\hyper@linkstart##1##2{}%
\let\hyper@linkend\@empty
\def\hyper@linkurl##1##2{##1}%
\def\hyper@linkfile##1##2##3{##1}%
\def\hyper@link@[##1]##2##3{}%
}
\def\endNoHyper{%
\global\let\hyper@link\hyper@livelink
}
%
% \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
\let\href\@gobble
\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
}
%
% \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>
\AfterBeginDocument{%
% \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{\relax}%
\fi
\immediate\write\@auxout{%
% \end{macrocode}
%
% \begin{macrocode}
\string\ifx\string\hyper@anchor\string\@undefined^^J%
% \end{macrocode}
%
% \begin{macrocode}
\global\let\string\oldcontentsline\string\contentsline^^J%
\gdef\string\contentsline%
\string#1\string#2\string#3\string#4{%
\string\oldcontentsline%
{\string#1}{\string#2}{\string#3}}^^J%
\global\let\string\oldnewlabel\string\newlabel^^J%
\gdef\string\newlabel\string#1\string#2{%
\string\newlabelxx{\string#1}\string#2}^^J%
\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{%
\let\string\contentsline\string\oldcontentsline^^J%
\let\string\newlabel\string\oldnewlabel}^^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\else^^J%
\global\let\string\hyper@last\relax^^J%
\string\fi^^J%
}%
\fi
% \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
\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 \title and \author.
% \begin{macrocode}
\ifHy@usetitle
\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 \title, or \author are given before
% hyperref is loaded, is much more complicate, because
% LaTeX initializes the macros \@title and \@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.
%
% \begin{macrocode}
\def\Hy@UseMaketitleString#1{%
\@ifundefined{Hy@#1}{}{%
\begingroup
\let\Hy@saved@hook\pdfstringdefPreHook
\pdfstringdefDisableCommands{%
\expandafter\let\expandafter\\\csname Hy@newline@#1\endcsname
\let\newline\\%
}%
\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]
\def\Hy@EveryPageHook{}
\def\Hy@EveryPageBoxHook{}
\def\Hy@FirstPageHook{}
\AtBeginShipout{%
\Hy@EveryPageHook
\ifx\Hy@EveryPageBoxHook\@empty
\else
\setbox\AtBeginShipoutBox=\vbox{%
\offinterlineskip
\Hy@EveryPageBoxHook
\box\AtBeginShipoutBox
}%
\fi
}
\AtBeginShipoutFirst{%
\Hy@FirstPageHook
}
\g@addto@macro\Hy@FirstPageHook{%
\PDF@FinishDoc
\gdef\PDF@FinishDoc{}%
}
% \end{macrocode}
%
% \subsection{PDF /PageLabels}
% Internal macros of this module are marked with |\HyPL@|.
%
% \begin{macrocode}
\ifHy@pagelabels
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname thepage\endcsname\relax
\Hy@pagelabelsfalse
\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}
\def\HyPL@Labels{}%
% \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}%
\def\HyPL@LastPrefix{}%
% \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{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
\else
\let\HyPL@page\HyPL@thisLabel
\global\let\HyPL@thisLabel\relax
\fi
\let\HyPL@Type\relax
\ifnum\the\c@page>0 %
\expandafter\HyPL@CheckThePage\HyPL@page\@nil
\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<>}%
\@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<>}%
\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}
%
% \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}
%\let\Hy@PutCatalog\pdfcatalog
% \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
%
% \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@pagelabels
\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
%
% \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'.\MessageBreak
Ignoring 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
\HyWarning{%
XeTeX driver only supports `pdfencoding=unicode|auto.%
\MessageBreak
Ignoring option setting `pdfencoding=\HyPsd@temp'%
}%
\fi
\fi
}
\let\HyXeTeX@CheckUnicode\relax
%
% \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
%
% \end{macrocode}
%
% \begin{macro}{\Hy@PutCatalog}
% \begin{macrocode}
%\def\Hy@PutCatalog#1{\@pdfm@mark{docview << #1 >>}}
%<*pdfmarkbase>
\def\Hy@PutCatalog#1{%
\pdfmark{pdfmark=/PUT,Raw={\string{Catalog\string} << #1 >>}}%
}
%
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
%<*pdfmarkbase|dvipdfm|xetex>
\ifHy@pagelabels
% \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}
\AfterBeginDocument{%
\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
%
% \end{macrocode}
%
% \begin{macrocode}
%<*package>
% \end{macrocode}
%
% \begin{macrocode}
\MaybeStopEarly
% \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|
% does not expand to a sensible reference. This means that classes
% or package which introduce new elements need to define
% an equivalent |\theH| for every |\the|. We do make
% a trap to make |\theH| be the same as |\arabic{}|,
% if |\theH| 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}{%
\newcommand\theHequation{\theHsection.\arabic{equation}}%
}
\Hy@CounterExists{part}{%
\newcommand\theHpart{\arabic{part}}%
}
\@ifundefined{thechapter}{%
\newcommand\theHsection {\arabic{section}}%
\newcommand\theHfigure {\arabic{figure}}%
\newcommand\theHtable {\arabic{table}}%
}{%
\newcommand\theHchapter {\arabic{chapter}}%
\newcommand\theHfigure {\theHchapter.\arabic{figure}}%
\newcommand\theHtable {\theHchapter.\arabic{table}}%
\newcommand\theHsection {\theHchapter.\arabic{section}}%
}
\newcommand\theHsubsection {\theHsection.\arabic{subsection}}
\newcommand\theHsubsubsection{\theHsubsection.\arabic{subsubsection}}
\newcommand\theHparagraph {\theHsubsubsection.\arabic{paragraph}}
\newcommand\theHsubparagraph {\theHparagraph.\arabic{subparagraph}}
\newcommand\theHtheorem {\theHsection.\arabic{theorem}}
\newcommand\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}
\newcommand\theHenumi {\theHItem}
\newcommand\theHenumii {\theHItem}
\newcommand\theHenumiii {\theHItem}
\newcommand\theHenumiv {\theHItem}
\newcommand\theHHfootnote {\arabic{Hfootnote}}
\newcommand\theHmpfootnote{\arabic{mpfootnote}}
\let\theHHmpfootnote\theHHfootnote
% \end{macrocode}
% Tanmoy asked for this default handling of undefined |\theH|
% 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
}
% \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
\@ifundefined{theH#1}{%
\expandafter\def\csname theH#1\endcsname{\arabic{#1}}%
}{}%
\hyper@makecurrent{#1}%
\ifmeasuring@
\else
\Hy@raisedlink{%
\hyper@anchorstart{\@currentHref}\hyper@anchorend
}%
\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}
\let\HyOrg@appendix\appendix
\def\appendix{%
\@ifundefined{chapter}%
{\gdef\theHsection{\Alph{section}}}%
{\gdef\theHchapter{\Alph{chapter}}}%
\xdef\Hy@chapapp{\Hy@appendixstring}%
\HyOrg@appendix
}
% \end{macrocode}
% \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
\edef\Hy@param{#1}%
\ifx\Hy@param\Hy@chapterstring
\let\Hy@param\Hy@chapapp
\fi
\ifHy@hypertexnames
\let\@number\@firstofone
\@ifundefined{latin@Alph}{}{%
\ifx\@Alph\greek@Alph
\def\@Alph{Alph\@arabic}%
\fi
}%
\ifx\@Alph\@Alph@bul
\def\@Alph{Alph\@arabic}%
\fi
\ifx\@alph\@alph@bul
\def\@alph{alph\@arabic}%
\fi
\ifHy@naturalnames
\let\textlatin\@firstofone
\xdef\@currentHlabel{\csname the#1\endcsname}%
\else
\xdef\@currentHlabel{%
\csname
the%
\expandafter\ifx\csname theH#1\endcsname\relax\else H\fi
#1%
\endcsname
}%
\fi
\xdef\@currentHref{%
\Hy@param.\expandafter\strip@prefix\meaning\@currentHlabel
}%
\else
\Hy@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{\Hy@param.\the\Hy@linkcounter}%
\fi
\endgroup
}
% \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}
\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
}{}%
}{}%
}
%
%<*check>
\checkpackage{lastpage}[1994/06/25]
\checkcommand\def\lastpage@putlabel{%
\addtocounter{page}{-1}%
\immediate\write\@auxout{%
\string\newlabel{LastPage}{{}{\thepage}}%
}%
\addtocounter{page}{1}%
}
%
%<*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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{#1*.\the\Hy@linkcounter}%
\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}
%
% \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}{}{\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@currentHlabel\@currentHlabel
\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@firsthead\copy#2\@nil{%
\endgroup
\def\LT@start{%
#1%
\let\@currentHlabel\Hy@LT@currentHlabel
\let\@currentHref\Hy@LT@currentHref
\Hy@raisedlink{%
\hyper@anchorstart{\@currentHref}\hyper@anchorend
}%
\ifvoid\LT@firsthead\copy
#2%
}%
}%
\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}%
\Hy@raisedlink{\hyper@anchorstart{\@currentHref}}%
\let\refstepcounter\new@refstepcounter
}%
\def\endequation{\Hy@raisedlink{\hyper@anchorend}\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}%
\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}
\@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
}%
\newcommand\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):
% \begin{macrocode}
\@ifpackageloaded{amsthm}{%
\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}%
\def\@tempa{%
\@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]%
}%
\fi
\@tempa
}%
\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{\@currentHref}\hyper@anchorend
}%
\fi
\unhbox\@labels
\fi
\if@nobreak
\@nobreakfalse \clubpenalty\@M
\else
\clubpenalty\@clubpenalty \everypar{}%
\fi
}%
}{}
% \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.
%
% Tabularx causes footnote problems, disable the linking if that is loaded.
% \begin{macrocode}
\@ifpackageloaded{tabularx}{\Hy@hyperfootnotesfalse}{}
\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\hyper@@anchor\expandafter{%
\Hy@footnote@currentHref
}{#1}%
\else
\Hy@raisedlink{%
\expandafter\hyper@@anchor\expandafter{%
\Hy@footnote@currentHref
}{\relax}%
}#1%
\fi
}%
}%
\long\def\@footnotetext#1{%
\H@@footnotetext{%
\ifHy@nesting
\expandafter\hyper@@anchor\expandafter{%
\Hy@footnote@currentHref
}{#1}%
\else
\Hy@raisedlink{%
\expandafter\hyper@@anchor\expandafter{%
\Hy@footnote@currentHref
}{\relax}%
}%
\let\@currentHlabel\Hy@footnote@currentHlabel
\let\@currentHref\Hy@footnote@currentHref
\let\@currentlabelname\@empty
#1%
\fi
}%
}%
% \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@currentHlabel\@currentHlabel
\global\let\Hy@saved@currentHref\@currentHref
\hyper@makecurrent{Hfootnote}%
\global\let\Hy@footnote@currentHlabel\@currentHlabel
\global\let\Hy@footnote@currentHref\@currentHref
\global\let\@currentHlabel\Hy@saved@currentHlabel
\global\let\@currentHref\Hy@saved@currentHref
\hyper@linkstart{link}{\Hy@footnote@currentHref}%
\@makefnmark
\hyper@linkend
\ifhmode\spacefactor\@x@sf\fi
\relax
}%
% \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\protected@xdef\noexpand\@thefnmark{%
\noexpand\thempfn
}%
\expandafter\expandafter\expandafter\noexpand
\expandafter\expandafter\expandafter\Hy@LT@footnotetext
\expandafter\expandafter\expandafter{%
\expandafter\Hy@footnote@currentHref\expandafter
}\expandafter{\Hy@footnote@currentHlabel}%
}%
\global\LT@p@ftn\expandafter{%
\@tempa{#1}%
\endgroup
}%
}%
\long\def\Hy@LT@footnotetext#1#2#3{%
\H@@footnotetext{%
\ifHy@nesting
\hyper@@anchor{#1}{#3}%
\else
\Hy@raisedlink{%
\hyper@@anchor{#1}{\relax}%
}%
\def\@currentHlabel{#2}%
\def\@currentHref{#1}%
\let\@currentlabelname\@empty
#3%
\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\@currentHlabel\Hy@footnote@currentHlabel
\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}
%
%<*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
}
%
%<*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.
% \begin{macrocode}
\let\Hy@float@caption\@caption
\@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
\renewcommand{\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
}%
}%
}{}
% \end{macrocode}
%
% \begin{macrocode}
%
%<*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
}
%
%<*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}
\@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}
%
%<*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
}
%
%<*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}{%
\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}
\def\Hy@EveryPageAnchor{%
\Hy@DistillerDestFix
\ifHy@pageanchor
\ifHy@hypertexnames
\ifHy@plainpages
\def\Hy@TempPageAnchor{\hyper@@anchor{page.\the\c@page}}%
\else
\begingroup
\let\@number\@firstofone
\Hy@unicodefalse
\pdfstringdef\@the@H@page{\thepage}%
\endgroup
\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
\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}
\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}%
}%
\endgroup
}
\def\contentsline#1#2#3#4{%
\ifx\\#4\\%
\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}{#4}{#2}\hyper@linkend
}{#3}%
\or % page
\csname l@#1\endcsname{{#2}}{%
\hyper@linkstart{link}{#4}{#3}\hyper@linkend
}%
\else % all
\csname l@#1\endcsname{%
\hyper@linkstart{link}{#4}{#2}\hyper@linkend
}{%
\hyper@linkstart{link}{#4}{#3}\hyper@linkend
}%
\fi
\fi
}
% \end{macrocode}
%
% \begin{macrocode}
%
%<*check>
\checklatex
\checkcommand\def\addcontentsline#1#2#3{%
\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}%
}
\checkcommand\def\contentsline#1{\csname l@#1\endcsname}
%
%<*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\def\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\def\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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{AMS.\the\Hy@linkcounter}%
\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}
%
%<*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}%
}%
}%
}%
}%
%
%<*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@figures
\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
\protected@write\@indexfile{}{%
\string\indexentry{#1|#2}{\thepage}%
}%
\else
\protected@write\@indexfile{}{%
\string\indexentry{#1|#2hyperpage}{\thepage}%
}%
\fi
\else
\protected@write\@indexfile{}{%
\string\indexentry{%
#1|#2hyperindexformat{/#3}%
}{\thepage}%
}%
\fi
\fi
}%
\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
\Hy@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
\Hy@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\newcommand\theHslide{\arabic{slide}}%
}{%
\Hy@seminarslidesfalse
}
\@ifpackageloaded{slidesec}{%
\newcommand\theHslidesection {\arabic{slidesection}}%
\newcommand\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}
%
%<*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
}
%
%<*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
}
\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{%
\@ifundefined{pageautorefname}{%
\@ifundefined{pagename}{%
\Hy@Warning{No autoref name for `page'}%
}{%
\pagename\nobreakspace
}%
}{%
\pageautorefname\nobreakspace
}%
}
\DeclareRobustCommand*{\autoref}{%
\@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\\{%
\@ifundefined{#1autorefname}{%
\@ifundefined{#1name}{%
\HyRef@StripStar#1\\*\\\@nil{#1}%
\@ifundefined{\HyRef@name autorefname}{%
\@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
}{%
\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}
%
% \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>
\RequirePackage{pdftexcmds}[2009/04/10]
\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
\\%
|Hy@ReturnAfterFi{%
|Hy@ExchangeBackslash#2|@nil
}%
|fi
}%
}%
\def\Hy@ExchangeLeftParenthesis#1(#2\@nil{%
#1%
\ifx\\#2\\%
\else
\@backslashchar(%
\Hy@ReturnAfterFi{%
\Hy@ExchangeLeftParenthesis#2\@nil
}%
\fi
}%
\def\Hy@ExchangeRightParenthesis#1)#2\@nil{%
#1%
\ifx\\#2\\%
\else
\@backslashchar)%
\Hy@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
%
% \end{macrocode}
% \end{macro}
%
% \subsection{pdftex}
%
% \begin{macrocode}
%<*pdftex>
\providecommand*{\XR@ext}{pdf}
\Hy@setbreaklinks{true}
% \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 %
\setkeys{Hyp}{pdfversion=1.5}%
\fi
\fi
\ifHy@setpdfversion
\ifnum\Hy@pdfminorversion=\Hy@pdfversion\relax
\else
\Hy@pdfminorversion=\Hy@pdfversion\relax
\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
\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{%
/Properties<<%
/OCView \OBJ@OCG@view
/OCPrint \OBJ@OCG@print
>>%
}%
}%
\x
\AtBeginDocument{%
\def\Hy@colorlink#1{%
\begingroup
\ifHy@ocgcolorlinks
\def\Hy@ocgcolor{#1}%
\setbox0=\color@hbox
\else
\HyColor@UseColor#1%
\fi
}%
\def\Hy@endcolorlink{%
\ifHy@ocgcolorlinks
\color@endbox
\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{\pdflinkmargin#1}
\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}
\def\new@pdflink#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
\Hy@DestName\Hy@pstringDest\@pdfview
\Hy@RestoreLastskip
}
\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
\ifx\@pdfhighlight\@empty
\else
/H\@pdfhighlight
\fi
\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
\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}%
\@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}%
\@ifundefined{@#1bordercolor}{%
\let\CurrentBorderColor\relax
}{%
\edef\CurrentBorderColor{\csname @#1bordercolor\endcsname}%
}%
\find@pdflink{#1}{#2}#3%
\close@pdflink
}
\let\CurrentBorderColor\@linkbordercolor
\def\hyper@linkurl#1#2{%
\begingroup
\Hy@pstringdef\Hy@pstringURI{#2}%
\hyper@chars
\leavevmode
\pdfstartlink
attr{%
\Hy@setpdfborder
\ifx\@pdfhightlight\@empty
\else
/H\@pdfhighlight
\fi
\ifx\@urlbordercolor\relax
\else
/C[\@urlbordercolor]%
\fi
}%
user{%
/Subtype/Link%
\ifHy@pdfa /F 4\fi
/A<<%
/Type/Action%
/S/URI%
/URI(\Hy@pstringURI)%
>>%
}%
\relax
\Hy@colorlink\@urlcolor#1%
\close@pdflink
\endgroup
}
\def\hyper@linkfile#1#2#3{% anchor text, filename, linkname
\begingroup
\Hy@pstringdef\Hy@pstringF{#2}%
\Hy@pstringdef\Hy@pstringD{#3}%
\leavevmode
\pdfstartlink
attr{%
\Hy@setpdfborder
\ifx\@pdfhighlight\@empty
\else
/H\@pdfhighlight
\fi
\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[0 \@pdfstartview]%
\else
/D(\Hy@pstringD)%
\fi
>>%
}%
\relax
\Hy@colorlink\@filecolor#1%
\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
\ifx\@pdfhighlight\@empty
\else
/H\@pdfhighlight
\fi
\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<
>%
\fi
>>%
}%
\relax
\Hy@colorlink\@runcolor#2%
\close@pdflink
\endgroup
}
% \end{macrocode}
% \begin{macro}{\@pdfproducer}
% \begin{macrocode}
\ifx\@pdfproducer\relax
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname luatexversion\endcsname\relax
\def\@pdfproducer{pdfTeX}%
\ifx\eTeXversion\@undefined
\else
\ifx\eTeXversion\relax
\else
\ifnum\eTeXversion>0 %
\def\@pdfproducer{pdfeTeX}%
\fi
\fi
\fi
\ifx\pdftexversion\@undefined
\else
\ifnum\pdftexversion<100 %
\edef\@pdfproducer{%
\@pdfproducer
\the\pdftexversion.\pdftexrevision
}%
\else
\ifnum\pdftexversion<130 %
\edef\@pdfproducer{%
\@pdfproducer-%
\expandafter\@car\the\pdftexversion\@empty\@nil.%
\expandafter\@cdr\the\pdftexversion\@empty\@nil
\pdftexrevision
}%
\else
\ifnum\pdftexversion<140 %
\else
\def\@pdfproducer{pdfTeX}%
\fi
\edef\@pdfproducer{%
\@pdfproducer-%
\expandafter\@car\the\pdftexversion\@empty\@nil.%
\expandafter\@cdr\the\pdftexversion\@empty\@nil.%
\pdftexrevision
}%
\fi
\fi
\fi
\else
\begingroup
\count@=\luatexversion
\divide\count@ by 100 %
\edef\x{\the\count@}%
\count@=-\x\relax
\multiply\count@ by 100 %
\advance\count@ by \luatexversion
\edef\x{\endgroup
\def\noexpand\@pdfproducer{%
LuaTeX-\x.\the\count@.\luatexrevision
}%
}%
\x
\fi
\fi
% \end{macrocode}
% \end{macro}
% \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<>%
\fi
}%
\ifx\@pdfstartpage\@empty
\else
\ifx\@pdfstartview\@empty
\else
openaction goto page\@pdfstartpage{\@pdfstartview}%
\fi
\fi
\edef\Hy@temp{%
\ifHy@toolbar\else /HideToolbar true\fi
\ifHy@menubar\else /HideMenubar true\fi
\ifHy@windowui\else /HideWindowUI true\fi
\ifHy@fitwindow /FitWindow true\fi
\ifHy@centerwindow /CenterWindow true\fi
\ifHy@displaydoctitle /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\@empty
\else
/Lang(\@pdflang)%
\fi
}%
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\PDF@FinishDoc}
% \begin{macrocode}
\def\PDF@FinishDoc{%
\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{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}
\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|xetex>
\AtBeginDocument{%
\ifHy@setpagesize
\expandafter\@firstofone
\else
\expandafter\@gobble
\fi
{%
\@ifclassloaded{seminar}{%
%<*pdftex>
\setlength{\pdfhorigin}{1truein}%
\setlength{\pdfvorigin}{1truein}%
%
\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
}{%
\@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>
\def\Acrobatmenu#1#2{%
\Hy@Acrobatmenu{#1}{#2}{%
\pdfstartlink
attr{%
\Hy@setpdfborder
\ifx\@pdfhighlight\@empty
\else
/H\@pdfhighlight
\fi
\ifx\@menubordercolor\relax
\else
/C[\@menubordercolor]%
\fi
}%
user{%
/Subtype/Link%
\ifHy@pdfa /F 4\fi
/A<<%
/S/Named/N/#1%
>>%
}%
\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.
% \begin{macrocode}
\def\Hy@FixNotFirstPage{%
\gdef\Hy@FixNotFirstPage{%
\setbox\AtBeginShipoutBox=\hbox{%
\copy\AtBeginShipoutBox
}%
}%
}
\AtBeginShipout{\Hy@FixNotFirstPage}
% \end{macrocode}
%
% \begin{macrocode}
%
% \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:|
% \item[name:] |html:|
% \item[end:] |html:|
% \item[image:] |html:|
% \item[base\_name:] |html:|
% \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}
\def\PDF@FinishDoc{}
\def\PDF@SetupDoc{%
\ifx\@baseurl\@empty
\else
\special{html:}%
\fi
}
\def\hyper@anchor#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\let\protect=\string
\hyper@chars
\special{html:}%
\endgroup
\Hy@activeanchortrue
\Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
\special{html:}%
\Hy@activeanchorfalse
\Hy@RestoreLastskip
}
\def\hyper@anchorstart#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\hyper@chars
\special{html:}%
\endgroup
\Hy@activeanchortrue
}
\def\hyper@anchorend{%
\special{html:}%
\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:}%
\else
\begingroup
\hyper@chars
\special{html:}%
\endgroup
\fi
}
\def\hyper@linkend{%
\special{html:}%
\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
\setbox\@tempboxa=\color@hbox #1\color@endbox
\@linkdim\dp\@tempboxa
\lower\@linkdim\hbox{%
\hyper@chars
\special{html:}%
}%
\Hy@colorlink\@urlcolor#1%
\@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:}}%
\Hy@endcolorlink
\else
\begingroup
\hyper@chars
\special{html:}%
\Hy@colorlink\@urlcolor#1%
\special{html:}%
\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:}%
\endgroup
}
%
%<*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}
\def\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
}
\def\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}%
\setbox\@tempboxa=\color@hbox #3\color@endbox
\leavevmode
\ifHy@raiselinks
\@linkdim\dp\@tempboxa
\lower\@linkdim\hbox{%
\special{button: %
\number\wd\@tempboxa\space
\number\ht\@tempboxa\space
#2%
}%
\expandafter\Hy@colorlink\csname @#1color\endcsname#3%
\Hy@endcolorlink
}%
\@linkdim\ht\@tempboxa
\advance\@linkdim by -6.5\p@
\raise\@linkdim\hbox{}%
\else
\special{button: %
\number\wd\@tempboxa\space
\number\ht\@tempboxa\space
#2%
}%
\expandafter\Hy@colorlink\csname @#1color\endcsname#3%
\Hy@endcolorlink
\fi
}
\def\hyper@linkurl#1#2{%
\begingroup
\hyper@chars
\leavevmode
\setbox\@tempboxa=\color@hbox #1\color@endbox
\ifHy@raiselinks
\@linkdim\dp\@tempboxa
\lower\@linkdim\hbox{%
\special{button: %
\number\wd\@tempboxa\space
\number\ht\@tempboxa\space
launch: \wwwbrowser\space
#2%
}%
\Hy@colorlink\@urlcolor#1\Hy@endcolorlink
}%
\@linkdim\ht\@tempboxa
\advance\@linkdim by -6.5\p@
\raise\@linkdim\hbox{}%
\else
\special{button: %
\number\wd\@tempboxa\space
\number\ht\@tempboxa\space
launch: \wwwbrowser\space
#2%
}%
\Hy@colorlink\@urlcolor#1\Hy@endcolorlink
\fi
\endgroup
}
\def\hyper@linkfile#1#2#3{%
\begingroup
\hyper@chars
\leavevmode
\setbox\@tempboxa=\color@hbox #1\color@endbox
\ifHy@raiselinks
\@linkdim\dp\@tempboxa
\lower\@linkdim\hbox{%
\special{button: %
\number\wd\@tempboxa\space
\number\ht\@tempboxa\space
#3,%
file: #2%
}%
\Hy@colorlink\@filecolor#1\Hy@endcolorlink
}%
\@linkdim\ht\@tempboxa
\advance\@linkdim by -6.5\p@
\raise\@linkdim\hbox{}%
\else
\special{button: %
\number\wd\@tempboxa\space
\number\ht\@tempboxa\space
#3,%
file: #2%
}%
\Hy@colorlink\@filecolor#1\Hy@endcolorlink
\fi
\endgroup
}
\ifx\@pdfproducer\relax
\def\@pdfproducer{dviwindo + Distiller}%
\fi
\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{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@toolbar\else /HideToolbar true\fi
\ifHy@menubar\else /HideMenubar true\fi
\ifHy@windowui\else /HideWindowUI true\fi
\ifHy@fitwindow /FitWindow true\fi
\ifHy@centerwindow /CenterWindow true\fi
\ifHy@displaydoctitle /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\@empty
\else
/Lang(\@pdflang)%
\fi
>>%
}%
}%
}
%
%<*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}
\newsavebox{\pdfm@box}
\def\@pdfm@mark#1{\special{pdf:#1}}
\def\@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
>>%
>>%
}%
}%
}%
\AtBeginDocument{%
\def\Hy@colorlink#1{%
\begingroup
\ifHy@ocgcolorlinks
\def\Hy@ocgcolor{#1}%
\setbox0=\color@hbox
\else
\HyColor@UseColor#1%
\fi
}%
\def\Hy@endcolorlink{%
\ifHy@ocgcolorlinks
\color@endbox
\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}
% \begin{macrocode}
\def\Hy@BeginAnnot#1{%
\stepcounter{Hy@AnnotLevel}%
\ifnum\value{Hy@AnnotLevel}=\@ne
#1%
\fi
}
\def\Hy@EndAnnot{%
\ifnum\value{Hy@AnnotLevel}=\@ne
\Hy@endcolorlink
\@pdfm@mark{eann}%
\fi
\addtocounter{Hy@AnnotLevel}\m@ne
}
% \end{macrocode}
% \begin{macrocode}
\def\Hy@undefinedname{UNDEFINED}
\def\hyper@linkstart#1#2{%
\Hy@VerboseLinkStart{#1}{#2}%
\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
\expandafter\ifx\csname @#1bordercolor\endcsname\relax
\else
/C[\csname @#1bordercolor\endcsname]%
\fi
/A<<%
/S/GoTo%
/D(\Hy@testname)%
>>%
>>%
}%
\expandafter\Hy@colorlink\csname @#1color\endcsname
}%
}
\def\hyper@linkend{\Hy@EndAnnot}%
\def\hyper@link#1#2#3{%
\hyper@linkstart{#1}{#2}#3\hyper@linkend
}
\def\hyper@linkfile#1#2#3{%
\leavevmode
\Hy@BeginAnnot{%
\Hy@pstringdef\Hy@pstringF{#2}%
\Hy@pstringdef\Hy@pstringD{#3}%
\@pdfm@mark{%
bann<<%
/Type/Annot%
/Subtype/Link%
\ifHy@pdfa /F 4\fi
\Hy@setpdfborder
\ifx\@filebordercolor\relax
\else
/C[\@filebordercolor]%
\fi
/A<<%
/S/GoToR%
/F(\Hy@pstringF)%
/D\ifx\\#3\\[0 \@pdfstartview]\else(\Hy@pstringD)\fi
\Hy@SetNewWindow
>>%
>>%
}%
\Hy@colorlink\@filecolor
}%
#1%
\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
\ifx\@urlbordercolor\relax
\else
/C[\@urlbordercolor]%
\fi
/A<<%
/S/URI%
/URI(\Hy@pstringURI)%
>>%
>>%
}%
\Hy@colorlink\@urlcolor
}%
#1%
\Hy@EndAnnot
}
\def\Acrobatmenu#1#2{%
\Hy@Acrobatmenu{#1}{#2}{%
\Hy@BeginAnnot{%
\@pdfm@mark{%
bann<<%
/Type/Annot%
/Subtype/Link%
\ifHy@pdfa /F 4\fi
/A<<%
/S/Named%
/N/#1%
>>%
\Hy@setpdfborder
\ifx\@menubordercolor\relax
\relax
/C[\@menubordercolor]%
\fi
>>%
}%
\Hy@colorlink\@menucolor
}%
#2%
\Hy@EndAnnot
}%
}
\ifx\@pdfproducer\relax
\def\@pdfproducer{dvipdfm}%
% \end{macrocode}
% Detect Xe\TeX. However, but \textsf{xdvipdfmx} will overwrite it
% in the final PDF file.
% \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname XeTeXversion\endcsname\relax
\else
\edef\@pdfproducer{XeTeX \the\XeTeXversion\XeTeXrevision}%
\fi
\fi
\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{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@toolbar\else /HideToolbar true\fi
\ifHy@menubar\else /HideMenubar true\fi
\ifHy@windowui\else /HideWindowUI true\fi
\ifHy@fitwindow /FitWindow true\fi
\ifHy@centerwindow /CenterWindow true\fi
\ifHy@displaydoctitle /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<>%
\fi
/PageMode/\@pdfpagemode
\ifx\Hy@temp\@empty
\else
/ViewerPreferences<<\Hy@temp>>%
\fi
\Hy@UseNameKey{PageLayout}\@pdfpagelayout
\ifx\@pdflang\@empty
\else
/Lang(\@pdflang)%
\fi
>>%
}%
\ifx\@pdfpagescrop\@empty
\else
\@pdfm@mark{put @pages <>}%
\fi
}
%
% \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}%
}
%
% \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
\def\PDF@FinishDoc{}
\def\PDF@SetupDoc{%
\ifx\@baseurl\@empty
\else
\special{!direct }%
\fi
}
\def\@urltype{url}
\def\hyper@link#1#2#3{%
\Hy@VerboseLinkStart{#1}{#2}%
\leavevmode
\special{!direct }%
#3%
\special{!direct }%
}
\def\hyper@linkurl#1#2{%
\begingroup
\hyper@chars
\leavevmode
\MathBSuppress=1\relax
\special{!direct }%
#1%
\MathBSuppress=0\relax
\special{!direct }%
\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 }%
\else
\@Localurlfalse
\begingroup
\hyper@chars
\special{!aref \HyperDestNameFilter{#2}}%
\endgroup
\fi
}
\def\hyper@linkend{%
\if@Localurl
\special{!endaref}%
\else
\special{!direct }%
\fi
}
\def\hyper@anchorstart#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\hyper@chars
\special{!aname #1}%
\special{!direct }%
\endgroup
\Hy@activeanchortrue
}
\def\hyper@anchorend{%
\special{!direct }%
\Hy@activeanchorfalse
\Hy@RestoreLastskip
}
\def\hyper@anchor#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\let\protect=\string
\hyper@chars
\leavevmode
\special{!aname #1}%
\special{!direct }%
\endgroup
\Hy@activeanchortrue
\bgroup\anchor@spot\egroup
\special{!direct }%
\Hy@activeanchorfalse
\Hy@RestoreLastskip
}
\def\@Form[#1]{%
\typeout{Sorry, TeXpider does not yet support FORMs}%
}
\def\@endForm{}
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
\typeout{Sorry, TeXpider does not yet support FORM gauges}%
}
\def\@TextField[#1]#2{% parameters, label
\typeout{Sorry, TeXpider does not yet support FORM text fields}%
}
\def\@CheckBox[#1]#2{% parameters, label
\typeout{Sorry, TeXpider does not yet support FORM checkboxes}%
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
\typeout{Sorry, TeXpider does not yet support FORM choice menus}%
}
\def\@PushButton[#1]#2{% parameters, label
\typeout{Sorry, TeXpider does not yet support FORM pushbuttons}%
}
\def\@Reset[#1]#2{%
\typeout{Sorry, TeXpider does not yet support FORMs}%
}
\def\@Submit[#1]#2{%
\typeout{Sorry, TeXpider does not yet support FORMs}%
}
%
% \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}{%
\@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
}%
}%
\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
\def\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
}
\def\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
\@ifundefined{@#1bordercolor}{%
\let\CurrentBorderColor\relax
}{%
\edef\CurrentBorderColor{%
\csname @#1bordercolor\endcsname
}%
}%
\def\Hy@tempa{#1}%
\ifx\Hy@tempa\@urltype
\special{!%
aref ;%
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
\special{!%
aref <%
\ifnum\Hy@VTeXversion>753 \ifHy@newwindow n\fi\fi
f=#2>#3;%
a=<%
\ifHy@pdfa /F 4\fi
\Hy@setpdfborder
\ifx\@filebordercolor\relax
\else
/C [\@filebordercolor]%
\fi
>%
}%
\Hy@colorlink\@filecolor#1\Hy@endcolorlink
\special{!endaref}%
}
\def\hyper@linkurl#1#2{%
\begingroup
\Hy@pstringdef\Hy@pstringURI{#2}%
\hyper@chars
\leavevmode
\special{!%
aref ;%
a=<%
\ifHy@pdfa /F 4\fi
\Hy@setpdfborder
\ifx\@urlbordercolor\relax
\else
/C [\@urlbordercolor]%
\fi
>%
}%
\Hy@colorlink\@urlcolor#1\Hy@endcolorlink
\special{!endaref}%
\endgroup
}
\def\hyper@link#1#2#3{%
\Hy@VerboseLinkStart{#1}{#2}%
\@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@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 %
>%
\fi%
>;%
a=<%
\ifHy@pdfa /F 4\fi
\Hy@setpdfborder
\ifx\@runbordercolor\relax
\else
/C[\@runbordercolor]%
\fi
>%
}%
\Hy@colorlink\@runcolor#2\Hy@endcolorlink
\special{!endaref}%
}
\def\Acrobatmenu#1#2{%
\Hy@Acrobatmenu{#1}{#2}{%
\special{!%
aref ;%
a=<%
\ifHy@pdfa /F 4\fi
\Hy@setpdfborder
\ifx\@menubordercolor\relax
\else
/C[\@menubordercolor]%
\fi
>%
}%
\Hy@colorlink\@menucolor#2\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 }|:
%\begin{verbatim}
% ::= [,]
% ::= | |
% | |
% |
% ::= B[]
% ::= X[]
% ::= D
% ::= G[]
% ::= S[][]
% ::= W[]
% ::= R
% ::=
% ::= H | V
% ::= I | O
% ::=
%\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 || 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=<<>>}%
\fi
\special{!pdfinfo v=<<<%
\ifHy@toolbar\else /HideToolbar true\fi
\ifHy@menubar\else /HideMenubar true\fi
\ifHy@windowui\else /HideWindowUI true\fi
\ifHy@fitwindow /FitWindow true\fi
\ifHy@centerwindow /CenterWindow true\fi
\ifHy@displaydoctitle /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
\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{pdfcreationdate}%
\Hy@DisableOption{pdfmoddate}%
\Hy@DisableOption{pdfproducer}%
\Hy@DisableOption{pdfkeywords}%
\Hy@DisableOption{pdftrapped}%
\Hy@DisableOption{pdfinfo}%
}
%
% \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}
%\def\literalps@out#1{\special{ps:#1}}%
%\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
}
%
% \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\hyper@anchor#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\pdfmark[\anchor@spot]{%
pdfmark=/DEST,%
linktype=anchor,%
View=/\@pdfview \@pdfviewparams,%
DestAnchor={#1}%
}%
\endgroup
\Hy@RestoreLastskip
}
\@ifundefined{hyper@anchorstart}{}{\endinput}
\def\hyper@anchorstart#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\literalps@out{H.S}%
\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\hbox\bgroup
\fi
\expandafter\Hy@colorlink\csname @#1color\endcsname
\literalps@out{H.S}%
\xdef\hyper@currentanchor{#2}%
\gdef\hyper@currentlinktype{#1}%
}
\def\hyper@linkend{%
\literalps@out{\strip@pt@and@otherjunk\baselineskip\space H.L}%
\@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
\egroup
\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}%
<> >>%
}%
}%
\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}%
<>%
}%
}%
\fi
\fi
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\hyper@pagehidden}
% \begin{macrocode}
\def\hyper@pagehidden{%
\ifHy@useHidKey
\pdfmark{%
pdfmark=/PUT,%
Raw={%
\string{ThisPage\string}%
<>%
}%
}%
\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}%
\@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{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@toolbar\else /HideToolbar true\fi
\ifHy@menubar\else /HideMenubar true\fi
\ifHy@windowui\else /HideWindowUI true\fi
\ifHy@fitwindow /FitWindow true\fi
\ifHy@centerwindow /CenterWindow true\fi
\ifHy@displaydoctitle /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\@empty
\else
/Lang(\@pdflang)%
\fi
\ifx\@baseurl\@empty
\else
/URI<>%
\fi
>>%
}%
}%
}
%
%<*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
\setkeys{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{%
[\the\pdf@toks\space\pdf@type\space pdfmark%
}%
\else
\@ifundefined{@\pdf@linktype color}{%
\Hy@colorlink\@linkcolor
}{%
\expandafter\Hy@colorlink
\csname @\pdf@linktype color\endcsname
}%
\pdf@rect{#1}%
\literalps@out{%
[\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{%
\leavevmode
\ifHy@breaklinks
\Hy@setouterhbox\pdf@box{#1}%
\else
\sbox\pdf@box{#1}%
\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
\expandafter\Hy@breaklinksunhbox
\else
\expandafter\box
\fi
\pdf@box
% \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
\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}
% 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
}
%
%<*pdfmark>
\def\Acrobatmenu#1#2{%
\Hy@Acrobatmenu{#1}{#2}{%
\pdfmark[{#2}]{%
linktype=menu,%
pdfmark=/ANN,%
AcroHighlight=\@pdfhighlight,%
Border=\@pdfborder,%
BorderStyle=\@pdfborderstyle,%
Action={<< /Subtype /Named /N /#1 >>},%
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) >>},%
Subtype=/Link,%
PDFAFlags=4%
}%
\endgroup
}
\def\hyper@linkfile#1#2#3{%
\begingroup
\Hy@pstringdef\Hy@pstringF{#2}%
\Hy@pstringdef\Hy@pstringD{#3}%
\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\\[0 \@pdfstartview]\else(\Hy@pstringD)cvn\fi
>>%
}%
}%
\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<>%
\fi
>>%
}%
}%
\endgroup
}
%
% \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}
\def\Hy@raisedlink{}
\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{}
% 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}
%
% \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}
\def\Hy@raisedlink{}
\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}
%
% \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}
\AfterBeginDocument{%
\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}
\AfterBeginDocument{%
\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:}%
\fi
\keepPDF@SetupDoc
}
\def\hyper@anchor#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\let\protect=\string
\special{html:}%
\endgroup
\Hy@activeanchortrue
\Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
\special{html:}%
\Hy@activeanchorfalse
\Hy@RestoreLastskip
}
\def\hyper@anchorstart#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\hyper@chars
\special{html:}%
\endgroup
\Hy@activeanchortrue
}
\def\hyper@anchorend{%
\special{html:}%
\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:}%
\else
\begingroup
\hyper@chars
\special{%
html:%
}%
\endgroup
\fi
}
\def\hyper@linkend{%
\special{html:}%
\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
\setbox\@tempboxa=\color@hbox #1\color@endbox
\@linkdim\dp\@tempboxa
\lower\@linkdim\hbox{%
\hyper@chars
\special{html:}%
}%
\Hy@colorlink\@urlcolor#1%
\@linkdim\ht\@tempboxa
\advance\@linkdim by -6.5\p@
\raise\@linkdim\hbox{\special{html:}}%
\Hy@endcolorlink
\else
\begingroup
\hyper@chars
\special{html:}%
\Hy@colorlink\@urlcolor#1%
\special{html:}%
\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:}%
\endgroup
}
%
% \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}
\def\Hy@raisedlink{}
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\def\literalps@out#1{\special{ps:#1}}%
\def\headerps@out#1{\special{headertext=#1}}%
\input{pdfmark.def}%
\ifx\@pdfproducer\relax
\def\@pdfproducer{dvipsone + Distiller}%
\fi
\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{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@toolbar\else /HideToolbar true\fi
\ifHy@menubar\else /HideMenubar true\fi
\ifHy@windowui\else /HideWindowUI true\fi
\ifHy@fitwindow /FitWindow true\fi
\ifHy@centerwindow /CenterWindow true\fi
\ifHy@displaydoctitle /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\@empty
\else
/Lang(\@pdflang)%
\fi
\ifx\@baseurl\@empty
\else
/URI<>%
\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}
%
% \subsection{TeX4ht}
% \begin{macrocode}
%<*tex4ht>
\providecommand*{\XR@ext}{html}
\def\Hy@raisedlink{}
\@ifpackageloaded{tex4ht}{%
\typeout{hyperref tex4ht: tex4ht already loaded}%
}{%
\RequirePackage[htex4ht]{tex4ht}%
}
\hyperlinkfileprefix{}
\def\PDF@FinishDoc{}
\def\PDF@SetupDoc{%
\ifx\@baseurl\@empty
\else
\special{t4ht=}%
\fi
}
\def\hyper@anchor#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\let\protect=\string
\special{t4ht=}%
\endgroup
\Hy@activeanchortrue
\Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
\special{t4ht=}%
\Hy@activeanchorfalse
\Hy@RestoreLastskip
}
\def\hyper@anchorstart#1{%
\Hy@SaveLastskip
\Hy@VerboseAnchor{#1}%
\begingroup
\hyper@chars\special{t4ht=}%
\endgroup
\Hy@activeanchortrue
}
\def\hyper@anchorend{%
\special{t4ht=}%
\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=}%
\else
\begingroup
\hyper@chars
\special{t4ht=}%
\endgroup
\fi
}
\def\hyper@linkend{%
\special{t4ht=}%
\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
\setbox\@tempboxa=\color@hbox #1\color@endbox
\@linkdim\dp\@tempboxa
\lower\@linkdim\hbox{%
\begingroup
\hyper@chars
\special{%
t4ht=%
}%
\endgroup
}%
\Hy@colorlink\@urlcolor#1\Hy@endcolorlink
\@linkdim\ht\@tempboxa
\advance\@linkdim by -6.5\p@
\raise\@linkdim\hbox{\special{t4ht=}}%
\else
\begingroup
\hyper@chars
\special{t4ht=}%
\Hy@colorlink\@urlcolor#1\Hy@endcolorlink
\special{t4ht=}%
\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=}%
\endgroup
}
\let\autoref\ref
\ifx \rEfLiNK \UnDef
\def\rEfLiNK #1#2{#2}%
\fi
\def\backref#1{}
%
%<*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}
%
% \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%
{%
[%
/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
/NeedAppearances true%
\fi
>>%
/PUT pdfmark%
[%
{Catalog}%
<<%
/AcroForm{aform}%
>>%
/PUT pdfmark%
[%
/_objdef{corder}%
/type/array%
/OBJ pdfmark% dps
}}%
\setkeys{Form}{#1}%
}
\def\@endForm{}
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
\typeout{Sorry, pdfmark drivers do not support FORM gauges}%
}
\def\@TextField[#1]#2{% parameters, label
\def\Fld@name{#2}%
\def\Fld@default{}%
\let\Fld@value\@empty
\def\Fld@width{\DefaultWidthofText}%
\def\Fld@height{%
\ifFld@multiline
\DefaultHeightofTextMultiline
\else
\DefaultHeightofText
\fi
}%
\begingroup
\Field@toks={ }%
\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
\LayoutTextField{#2}{%
\Hy@escapeform\PDFForm@Text
\pdfmark[\MakeTextField{\Fld@width}{\Fld@height}]{%
pdfmark=/ANN,Raw={\PDFForm@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@
\Field@toks={ }%
\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 %
\@for\@curropt:=#1\do{%
\expandafter\Fld@checkequals\@curropt==\\%
\Hy@StepCount\Fld@listcount
\@currDisplay\space
\Hy@escapeform\PDFForm@Radio
\pdfmark[\MakeRadioField{\Fld@width}{\Fld@height}]{%
pdfmark=/ANN,%
Raw={%
\PDFForm@Radio /AP <> >>%
}%
} % deliberate space between radio buttons
}%
}
\newcount\Fld@listcount
\def\@@Listbox#1{%
\HyField@PDFChoices{#1}%
\Hy@escapeform\PDFForm@List
\pdfmark[\MakeChoiceField{\Fld@width}{\Fld@height}]{%
pdfmark=/ANN,Raw={\PDFForm@List}%
}%
}
\def\@PushButton[#1]#2{% parameters, label
\def\Fld@name{#2}%
\begingroup
\Field@toks={ }%
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofPushButton,#1%
}%
\ifHy@pdfa
\PackageError{hyperref}{%
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
\Hy@escapeform\PDFForm@Push
\pdfmark[\MakeButtonField{#2}]{%
pdfmark=/ANN,Raw={\PDFForm@Push}%
}%
}%
\fi
\endgroup
}
\def\@Submit[#1]#2{%
\Field@toks={ }%
\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
\pdfmark[\MakeButtonField{#2}]{%
pdfmark=/ANN,%
Raw={\PDFForm@Submit /AP << /N {Submit} /D {SubmitP} >>}%
}%
\endgroup
}
\def\@Reset[#1]#2{%
\Field@toks={ }%
\def\Fld@width{\DefaultWidthofReset}%
\def\Fld@height{\DefaultHeightofReset}%
\begingroup
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofReset,#1%
}%
\leavevmode
\ifHy@pdfa
\PackageError{hyperref}{%
PDF/A: Reset action is prohibited%
}\@ehc
\MakeButtonField{#2}%
\else
\HyField@FlagsPushButton
\ifFld@hidden\def\Fld@width{1sp}\fi
\Hy@escapeform\PDFForm@Reset
\pdfmark[\MakeButtonField{#2}]{%
pdfmark=/ANN,Raw={\PDFForm@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}%
\Field@toks={ }%
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofCheckBox,#1%
}%
\HyField@FlagsCheckBox
\ifFld@hidden\def\Fld@width{1sp}\fi
\LayoutCheckField{#2}{%
\Hy@escapeform\PDFForm@Check
\pdfmark[\MakeCheckField{\Fld@width}{\Fld@height}]{%
pdfmark=/ANN,Raw={\PDFForm@Check}%
}%
}%
\endgroup
}
%
% \end{macrocode}
%
% \subsection{HyperTeX}
% \begin{macrocode}
%<*hypertex>
\def\@Form[#1]{\typeout{Sorry, HyperTeX does not support FORMs}}
\def\@endForm{}
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
\typeout{Sorry, HyperTeX does not support FORM gauges}%
}
\def\@TextField[#1]#2{% parameters, label
\typeout{Sorry, HyperTeX does not support FORM text fields}%
}
\def\@CheckBox[#1]#2{% parameters, label
\typeout{Sorry, HyperTeX does not support FORM checkboxes}%
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
\typeout{Sorry, HyperTeX does not support FORM choice menus}%
}
\def\@PushButton[#1]#2{% parameters, label
\typeout{Sorry, HyperTeX does not support FORM pushbuttons}%
}
\def\@Reset[#1]#2{\typeout{Sorry, HyperTeX does not support FORMs}}
\def\@Submit[#1]#2{\typeout{Sorry, HyperTeX does not support FORMs}}
%
% \end{macrocode}
% \subsection{TeX4ht}
% \begin{macrocode}
%<*tex4ht>
\def\@Form[#1]{%
\setkeys{Form}{#1}%
\HCode{}}
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
\typeout{Sorry, TeX4ht does not support gauges}%
}
\def\@TextField[#1]#2{% parameters, label
\let\Hy@reserved@a\@empty
\def\Fld@name{#2}%
\def\Fld@default{}%
\bgroup
\Field@toks={ }%
\setkeys{Field}{#1}%
\HCode{}%
\ifFld@password
\@@PasswordField
\else
\@@TextField
\fi
\egroup
}
\def\@@PasswordField{%
\HCode{%
%
}%
}
\def\@@TextField{%
\ifFld@multiline
\HCode{}%
\else
\HCode{%
}%
\fi
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
\def\Fld@name{#2}%
\def\Fld@default{}%
\let\Hy@reserved@a\relax
\begingroup
\expandafter\Fld@findlength#3\\%
\Field@toks={ }%
\setkeys{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{}%
}
\def\@@Radio#1\\{%
\@for\@curropt:=#1\do{%
\expandafter\Fld@checkequals\@curropt==\\%
\HCode{%
}%
\@currDisplay
}%
}
\def\@PushButton[#1]#2{% parameters, label
\def\Fld@name{#2}%
\bgroup
\Field@toks={ }%
\setkeys{Field}{#1}%
\HCode{%
}%
\HCode{}%
\egroup
}
\def\@Submit[#1]#2{%
\HCode{}%
}
\def\@Reset[#1]#2{%
\HCode{}%
}
\def\@CheckBox[#1]#2{% parameters, label
\let\Hy@reserved@a\@empty
\def\Fld@name{#2}%
\def\Fld@default{0}%
\bgroup
\Field@toks={ }%
\setkeys{Field}{#1}%
\HCode{%
#2%
}%
\egroup
}
%
% \end{macrocode}
%
% \subsection{pdfTeX}
% \begin{macrocode}
%<*pdftex>
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
\typeout{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}}%
}%
\def\HyField@afields{}
\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
\def\HyField@AddToFields{%
\xdef\HyField@afields{%
\ifx\HyField@afields\@empty
\else
\HyField@afields
\space
\fi
\the\pdflastlink\space 0 R%
}%
}%
\fi
\def\@Form[#1]{%
\@ifundefined{textcolor}{\let\textcolor\@gobble}{}%
\setkeys{Form}{#1}%
\Hy@FormObjects
\ifnum\pdftexversion>13 %
\pdfrefobj\OBJ@pdfdocencoding
\pdfrefobj\OBJ@ZaDb
\pdfrefobj\OBJ@Helv
\fi
\AtEndDocument{%
\immediate\pdfobj{%
<<%
/Fields[\HyField@afields]%
/DR<<%
/Font<<%
/ZaDb \OBJ@ZaDb\space 0 R%
/Helv \OBJ@Helv\space 0 R%
>>%
>>%
/DA(/Helv 10 Tf 0 g)%
\ifHy@pdfa
\else
/NeedAppearances true%
\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}%
}
\def\@endForm{}
\def\@TextField[#1]#2{% parameters, label
\def\Fld@name{#2}%
\def\Fld@default{}%
\let\Fld@value\@empty
\def\Fld@width{\DefaultWidthofText}%
\def\Fld@height{%
\ifFld@multiline
\DefaultHeightofTextMultiline
\else
\DefaultHeightofText
\fi
}%
\begingroup
\Field@toks={ }%
\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}{%
\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@
\Field@toks={ }%
\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 %
\@for\@curropt:=#1\do{%
\expandafter\Fld@checkequals\@curropt==\\%
\Hy@StepCount\Fld@listcount
\@currDisplay\space
\leavevmode
\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
\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
\Field@toks={ }%
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofPushButton,#1%
}%
\PDFForm@Name
\ifHy@pdfa
\PackageError{hyperref}{%
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
\Hy@escapeform\PDFForm@Push
\pdfstartlink user {\PDFForm@Push}\relax
\MakeButtonField{#2}%
\pdfendlink
\HyField@AddToFields
}%
\fi
\endgroup
}
\def\@Submit[#1]#2{%
\Field@toks={ }%
\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
\Hy@escapeform\PDFForm@Submit
\pdfstartlink user {%
\PDFForm@Submit
/AP<>%
}%
\relax
\MakeButtonField{#2}%
\pdfendlink
\HyField@AddToFields
\endgroup
}
\def\@Reset[#1]#2{%
\Field@toks={ }%
\def\Fld@width{\DefaultWidthofReset}%
\def\Fld@height{\DefaultHeightofReset}%
\begingroup
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofReset,#1%
}%
\leavevmode
\ifHy@pdfa
\PackageError{hyperref}{%
PDF/A: Reset action is prohibited%
}\@ehc
\MakeButtonField{#2}%
\else
\HyField@FlagsPushButton
\ifFld@hidden\def\Fld@width{1sp}\fi
\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}%
\Field@toks={ }%
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofCheckBox,#1%
}%
\PDFForm@Name
\HyField@FlagsCheckBox
\ifFld@hidden\def\Fld@width{1sp}\fi
\LayoutCheckField{#2}{%
\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
}
%
% \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
\typeout{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}{}%
\setkeys{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
/NeedAppearances true%
\fi
>>%
}%
\@pdfm@mark{put @catalog <>}%
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\@endForm}
% \begin{macrocode}
\def\@endForm{}
% \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}{\@TextField}
% \begin{macrocode}
\def\@TextField[#1]#2{% parameters, label
\def\Fld@name{#2}%
\def\Fld@default{}%
\let\Fld@value\@empty
\def\Fld@width{\DefaultWidthofText}%
\def\Fld@height{%
\ifFld@multiline
\DefaultHeightofTextMultiline
\else
\DefaultHeightofText
\fi
}%
\begingroup
\Field@toks={ }%
\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}{%
\Hy@escapeform\PDFForm@Text
\@pdfm@mark{%
ann @text\HyField@TheAnnotCount\space
\dvipdfm@setdim << \PDFForm@Text >>%
}%
}%
\unhbox\pdfm@box
\@pdfm@mark{put @afields @text\HyField@TheAnnotCount}%
% 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@
\Field@toks={ }%
\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 %
\setbox\pdfm@box=\hbox{%
\MakeRadioField{\Fld@width}{\Fld@height}%
}%
\@for\@curropt:=#1\do{%
\expandafter\Fld@checkequals\@curropt==\\%
\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<>>>%
>>%
}%
\unhcopy\pdfm@box\space% deliberate space between radio buttons
\ifnum\Fld@listcount=1 %
\@pdfm@mark{%
put @afields @radio\HyField@TheAnnotCount
}%
\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
\@pdfm@mark{put @afields @list\HyField@TheAnnotCount}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@PushButton}
% \begin{macrocode}
\def\@PushButton[#1]#2{% parameters, label
\def\Fld@name{#2}%
\begingroup
\Field@toks={ }%
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofPushButton,#1%
}%
\PDFForm@Name
\ifHy@pdfa
\PackageError{hyperref}{%
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
\@pdfm@mark{put @afields @push\HyField@TheAnnotCount}%
\fi
\endgroup
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@Submit}
% \begin{macrocode}
\def\@Submit[#1]#2{%
\Field@toks={ }%
\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%
\@pdfm@mark{put @afields @submit\HyField@TheAnnotCount}%
\endgroup
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@Reset}
% \begin{macrocode}
\def\@Reset[#1]#2{%
\Field@toks={ }%
\def\Fld@width{\DefaultWidthofReset}%
\def\Fld@height{\DefaultHeightofReset}%
\begingroup
\expandafter\HyField@SetKeys\expandafter{%
\DefaultOptionsofReset,#1%
}%
\leavevmode
\ifHy@pdfa
\PackageError{hyperref}{%
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
\@pdfm@mark{put @afields @reset\HyField@TheAnnotCount}%
\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}%
\Field@toks={ }%
\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}{%
\Hy@escapeform\PDFForm@Check
\@pdfm@mark{%
ann @check\HyField@TheAnnotCount\space
\dvipdfm@setdim
<<\PDFForm@Check>>%
}%
\unhbox\pdfm@box
\@pdfm@mark{put @afields @check\HyField@TheAnnotCount}%
}%
\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
}
%
% \end{macrocode}
%
% \subsection{Common forms part}
% \begin{macrocode}
%<*pdfform>
% \end{macrocode}
%
% \begin{macro}{\Hy@escapestring}
% \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname pdfescapestring\endcsname\relax
\let\Hy@escapestring\@firstofone
\def\Hy@escapeform#1{%
\ifHy@escapeform
\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}%
\Hy@ReturnAfterFi{%
\Hy@@escapeform#3\@nil
}%
\fi
}%
\else
\def\Hy@escapeform#1{%
\ifHy@escapeform
\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{%
\begingroup
\ifnum\Hy@pdfversion<5 % implementation note 117, PDF spec 1.7
\ifHy@unicode
\Hy@unicodefalse
\fi
\fi
\HyPsd@XeTeXBigCharstrue
\pdfstringdef\Hy@gtemp\Fld@name
\endgroup
\let\Fld@name\Hy@gtemp
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\PDFForm@Check}
% \begin{macrocode}
\def\PDFForm@Check{%
/Subtype/Widget%
\Fld@annotflags
/T(\Fld@name)%
/FT/Btn%
\Fld@flags
/Q \Fld@align
/BS<>%
/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\else /V/Off\fi
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\PDFForm@Push}
% \begin{macrocode}
\ifHy@pdfa
\else
\def\PDFForm@Push{%
/Subtype/Widget%
\Fld@annotflags
/T(\Fld@name)%
/FT/Btn%
\Fld@flags
/H/P%
/BS<>%
\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<>%
}%
\fi
% \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<>%
\fi
% \end{macrocode}
% F display format
% \begin{macrocode}
\ifx\Fld@format@code\@empty
\else
/F<>%
\fi
% \end{macrocode}
% V validation
% \begin{macrocode}
\ifx\Fld@validate@code\@empty
\else
/V<>%
\fi
% \end{macrocode}
% C calculation
% \begin{macrocode}
\ifx\Fld@calculate@code\@empty
\else
/C<>%
\fi
% \end{macrocode}
% Fo receiving the input focus
% \begin{macrocode}
\ifx\Fld@onfocus@code\@empty
\else
/Fo<>%
\fi
% \end{macrocode}
% Bl loosing the input focus (blurred)
% \begin{macrocode}
\ifx\Fld@onblur@code\@empty
\else
/Bl<>%
\fi
% \end{macrocode}
% D pressing the mouse button (down)
% \begin{macrocode}
\ifx\Fld@onmousedown@code\@empty
\else
/D<>%
\fi
% \end{macrocode}
% U releasing the mouse button (up)
% \begin{macrocode}
\ifx\Fld@onmouseup@code\@empty
\else
/U<>%
\fi
% \end{macrocode}
% E cursor enters the annotation's active area.
% \begin{macrocode}
\ifx\Fld@onenter@code\@empty
\else
/E<>%
\fi
% \end{macrocode}
% X cursor exits the annotation's active area.
% \begin{macrocode}
\ifx\Fld@onexit@code\@empty
\else
/X<>%
\fi
}
\def\Fld@additionalactions{%
\if-\Fld@@additionalactions-%
\else
\ifHy@pdfa
\else
/AA<<\Fld@@additionalactions>>%
\fi
\fi
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\PDFForm@List}
% \begin{macrocode}
\def\PDFForm@List{%
/Subtype/Widget%
\Fld@annotflags
/T(\Fld@name)%
/FT/Ch%
\Fld@flags
/Q \Fld@align
/BS<>%
\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
/T(\Fld@name)%
/FT/Btn%
\Fld@flags
/H/P%
/BS<>%
/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(\Fld@radiosymbol)%
>>%
/DA(/ZaDb \strip@pt\Fld@charsize\space Tf%
\ifx\Fld@color\@empty\else\space\Fld@color\fi)%
\ifx\@currValue\Fld@default
/V/\Fld@default
\else
/V/Off%
\fi
\Fld@additionalactions
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\PDFForm@Text}
% \begin{macrocode}
\def\PDFForm@Text{%
/Subtype/Widget%
\Fld@annotflags
/T(\Fld@name)%
/FT/Tx%
\Fld@flags
/Q \Fld@align
/BS<>%
\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
/T(\Fld@name)%
/FT/Btn%
\Fld@flags
/H/P%
/BS<>%
\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
>>%
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\PDFForm@Reset}
% \begin{macrocode}
\ifHy@pdfa
\else
\def\PDFForm@Reset{%
/Subtype/Widget%
\Fld@annotflags
/T(\Fld@name)%
/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<>%
/A<>%
}%
\fi
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
%<*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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{section*.\the\Hy@linkcounter}%
\Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
}
%
% \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\partnumberline\Hy@numberline
\let\chapternumberline\Hy@numberline
\else
\let\numberline\@gobble
\let\partnumberline\@gobble
\let\chapternumberline\@gobble
\fi
\HyPsd@XeTeXBigCharstrue
\pdfstringdef\Hy@tempa{#2}%
\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}
% 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\the\catcode`##1=\active
\@makeother##1%
\fi
}%
\dospecials
\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{\relax}%
\fi
\fi
\fi
}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
%
% \end{macrocode}
% \begin{macrocode}
%<*!vtex>
\def\ReadBookmarks{%
\begingroup
\escapechar=`\\%
\let\escapechar\@gobble %
\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
}%
%
%<*pdfmark>
\pdfmark{%
pdfmark=/OUT,%
Count={##2\check@bm@number{##3}},%
Dest={##3},%
Title=\expandafter\strip@prefix\meaning\Hy@temp
}%
%
%<*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)%
>>%
>>%
}%
%
}%
{%
\def\WriteBookmarks{0}%
\InputIfFileExists{\jobname.out}{}{}%
}%
%{\escapechar\m@ne\InputIfFileExists{\jobname.out}{}{}}%
\ifx\WriteBookmarks\relax
\else
\if@filesw
\newwrite\@outlinefile
\Hy@OutlineRerunCheck
\immediate\openout\@outlinefile=\jobname.out\relax
\ifHy@typexml
\immediate\write\@outlinefile{\relax}%
\fi
\fi
\fi
\endgroup
}
%<*pdftex>
\def\Hy@OutlineName#1#2#3#4{%
\pdfoutline goto name{#2}count#3{#4}%
}
%
\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|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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{section*.\the\Hy@linkcounter}%
\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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{\Hy@chapapp*.\the\Hy@linkcounter}%
\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 |\refstepcounter{chapter}| is not
% executed, so there will be no destination for \cmd{addcontentsline}.
% So \cmd{\@chapter} is overloaded to avoid this:
% \begin{macrocode}
\@ifundefined{@chapter}{}{%
\let\Hy@org@chapter\@chapter
\def\@chapter{%
\def\Hy@next{%
\Hy@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{\Hy@chapapp*.\the\Hy@linkcounter}%
\Hy@raisedlink{%
\hyper@anchorstart{\@currentHref}\hyper@anchorend
}%
}%
\ifnum\c@secnumdepth>\m@ne
\@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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{part*.\the\Hy@linkcounter}%
\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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{section*.\the\Hy@linkcounter}%
\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>
% \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}
%
% \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@GlobalStepCount\Hy@linkcounter
\xdef\@currentHref{\Hy@chapapp*.\the\Hy@linkcounter}%
\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}
%
% \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}{\string"}% \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
% \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
\DeclareTextCommand{\textdaggerdbl}{PD1}{\202}% U+2021
% 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}{\230}
% 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
\DeclareTextCommand{\TH}{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
\DeclareTextCommand{\th}{PD1}{\376}% U+00FE
% U+00FF LATIN SMALL LETTER Y WITH DIAERESIS; ydieresis
\DeclareTextCompositeCommand{\"}{PD1}{y}{\377}% U+00FF
\DeclareTextCommand{\ij}{PD1}{\377}% U+00FF
% \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}
%
% \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{\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+0331 COMBINING MACRON BELOW; macronbelowcmb
\DeclareTextCommand{\b}{PU}[1]{#1\83\061}% U+0331
% 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+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}
% \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{\b}{PU}{\@empty}{\textmacronbelow}
\DeclareTextCompositeCommand{\d}{PU}{\@empty}{\textdotbelow}
\DeclareTextCompositeCommand{\t}{PU}{\@empty}{\texttie}
\DeclareTextCompositeCommand{\newtie}{PU}{\@empty}{\textnewtie}
\DeclareTextCompositeCommand{\textcircled}{PU}{\@empty}{\textbigcircle}
% \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{\b}{PU}{\ }{\textmacronbelow}
\DeclareTextCompositeCommand{\d}{PU}{\ }{\textdotbelow}
\DeclareTextCompositeCommand{\t}{PU}{\ }{\texttie}
\DeclareTextCompositeCommand{\newtie}{PU}{\ }{\textnewtie}
\DeclareTextCompositeCommand{\textcircled}{PU}{\ }{\textbigcircle}
% \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}{\string"}% \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
% U+0025 PERCENT SIGN; percent
\DeclareTextCommand{\textpercent}{PU}{\80\045}% U+0025
% U+0026 AMPERSAND; ampersand
\DeclareTextCommand{\textampersand}{PU}{\80\046}% U+0026
% 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 (?)
% \end{macrocode}
% |\80\053|: U+002B PLUS SIGN; plus\\
% |\80\054|: U+002C COMMA; comma\\
% |\80\055|: U+002D HYPHEN-MINUS; hyphen\\
% |\80\056|: U+002E FULL STOP; period\\
% |\80\057|: U+002F SOLIDUS; slash\\
% |\80\060|: U+0030 DIGIT ZERO; zero\\
% \dots\\
% |\80\071|: U+0039 DIGIT NINE; nine\\
% |\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\\
% |\80\100|: U+0040 COMMERCIAL AT; at\\
% |\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
% 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
% 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
% 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
% U+00A7 SECTION SIGN; section
\DeclareTextCommand{\textsection}{PU}{\80\247}% U+00A7
% 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
% U+00B7 MIDDLE DOT; middot, *periodcentered
\DeclareTextCommand{\textperiodcentered}{PU}{\80\267}% U+00B7
% 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
% 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
\DeclareTextCommand{\TH}{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
% 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
\DeclareTextCommand{\th}{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
\DeclareTextCommand{\dj}{PU}{\81\021}% U+0111
% 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
\DeclareTextCommand{\texthslash}{PU}{\81\047}% U+0127
% 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
% 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+0192 LATIN SMALL LETTER F WITH HOOK; florin
\DeclareTextCommand{\textflorin}{PU}{\81\222}% U+0192
% 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+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
% 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+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+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+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+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+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+0237 LATIN SMALL LETTER DOTLESS J
\DeclareTextCommand{\j}{PU}{\82\067}% U+0237
% \end{macrocode}
%
% \subsubsection{Spacing Modifier Letters: U+02B0 to U+02FF}
%
% \begin{macrocode}
% U+02C7 CARON; caron
\DeclareTextCommand{\textasciicaron}{PU}{\82\307}% U+02C7
% 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}{\texthungarumlaut}% U+02DD
% 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
% \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
\DeclareTextCommand{\textGamma}{PU}{\83\223}% U+0393
% U+0394 GREEK CAPITAL LETTER DELTA; Deltagreek, *Delta
\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
\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
\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
\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
\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
\DeclareTextCommand{\textUpsilon}{PU}{\83\245}% U+03A5
% U+03A6 GREEK CAPITAL LETTER PHI; Phi
\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
\DeclareTextCommand{\textPsi}{PU}{\83\250}% U+03A8
% U+03A9 GREEK CAPITAL LETTER OMEGA; Omegagreek, *Omega
\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
\DeclareTextCommand{\textalpha}{PU}{\83\261}% U+03B1
% U+03B2 GREEK SMALL LETTER BETA; beta
\DeclareTextCommand{\textbeta}{PU}{\83\262}% U+03B2
% U+03B3 GREEK SMALL LETTER GAMMA; gamma
\DeclareTextCommand{\textgamma}{PU}{\83\263}% U+03B3
% U+03B4 GREEK SMALL LETTER DELTA; delta
\DeclareTextCommand{\textdelta}{PU}{\83\264}% U+03B4
% U+03B5 GREEK SMALL LETTER EPSILON; epsilon
\DeclareTextCommand{\textepsilon}{PU}{\83\265}% U+03B5
% U+03B6 GREEK SMALL LETTER ZETA; zeta
\DeclareTextCommand{\textzeta}{PU}{\83\266}% U+03B6
% U+03B7 GREEK SMALL LETTER ETA; eta
\DeclareTextCommand{\texteta}{PU}{\83\267}% U+03B7
% U+03B8 GREEK SMALL LETTER THETA; theta
\DeclareTextCommand{\texttheta}{PU}{\83\270}% U+03B8
% U+03B9 GREEK SMALL LETTER IOTA; iota
\DeclareTextCommand{\textiota}{PU}{\83\271}% U+03B9
% U+03BA GREEK SMALL LETTER KAPPA; kappa
\DeclareTextCommand{\textkappa}{PU}{\83\272}% U+03BA
% U+03BB GREEK SMALL LETTER LAMDA; lambda
\DeclareTextCommand{\textlambda}{PU}{\83\273}% U+03BB
% U+03BC GREEK SMALL LETTER MU; mugreek, *mu
\DeclareTextCommand{\textmugreek}{PU}{\83\274}% U+03BC
% U+03BD GREEK SMALL LETTER NU; nu
\DeclareTextCommand{\textnu}{PU}{\83\275}% U+03BD
% U+03BE GREEK SMALL LETTER XI; xi
\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
\DeclareTextCommand{\textpi}{PU}{\83\300}% U+03C0
% U+03C1 GREEK SMALL LETTER RHO; rho
\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
\DeclareTextCommand{\textsigma}{PU}{\83\303}% U+03C3
% U+03C4 GREEK SMALL LETTER TAU; tau
\DeclareTextCommand{\texttau}{PU}{\83\304}% U+03C4
% U+03C5 GREEK SMALL LETTER UPSILON; upsilon
\DeclareTextCommand{\textupsilon}{PU}{\83\305}% U+03C5
% U+03C6 GREEK SMALL LETTER PHI; phi
\DeclareTextCommand{\textphi}{PU}{\83\306}% U+03C6
% U+03C7 GREEK SMALL LETTER CHI; chi
\DeclareTextCommand{\textchi}{PU}{\83\307}% U+03C7
% U+03C8 GREEK SMALL LETTER PSI; psi
\DeclareTextCommand{\textpsi}{PU}{\83\310}% U+03C8
% U+03C9 GREEK SMALL LETTER OMEGA; omega
\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
% 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
% \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+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
% 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
% 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{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{Latin Extended Additional: U+1E00 to U+1EFF}
%
% \begin{macrocode}
% 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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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+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
% 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
% U+2021 DOUBLE DAGGER; daggerdbl
\DeclareTextCommand{\textdaggerdbl}{PU}{\9040\041}% U+2021
% U+2022 BULLET; bullet
\DeclareTextCommand{\textbullet}{PU}{\9040\042}% U+2022
% U+2026 HORIZONTAL ELLIPSIS; ellipsis
\DeclareTextCommand{\textellipsis}{PU}{\9040\046}% U+2026
% 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+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
% \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+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+207C SUPERSCRIPT EQUALS SIGN; equalsuperior
\DeclareTextCommand{\textequalsuperior}{PU}{\9040\174}
% U+207D SUPERSCRIPT LEFT PARENTHESIS; parenleftsuperior
\DeclareTextCommand{\textparenleftsuperior}{PU}{\9040\175}
% U+207E SUPERSCRIPT RIGHT PARENTHESIS; parenrightsuperior
\DeclareTextCommand{\textparenrightsuperior}{PU}{\9040\176}
% U+207F SUPERSCRIPT LATIN SMALL LETTER N; nsuperior
\DeclareTextCommand{\textnsuperior}{PU}{\9040\177}
% 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+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
% \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
% 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+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+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
% U+212B ANGSTROM SIGN; angstrom
\DeclareTextCommand{\textangstrom}{PU}{\9041\053}% U+212B
% U+212E ESTIMATED SYMBOL; estimated
\DeclareTextCommand{\textestimated}{PU}{\9041\056}% U+212E
% U+2135 ALEF SYMBOL; aleph
\DeclareTextCommand{\textaleph}{PU}{\9041\065}% U+2135
% \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
% U+2193 DOWNWARDS ARROW; arrowdown
\DeclareTextCommand{\textdownarrow}{PU}{\9041\223}% U+2193
% \end{macrocode}
%
% \subsubsection{Mathematical Operators: U+2200 to U+22FF}
%
% \begin{macrocode}
% U+2212 MINUS SIGN; minus
\DeclareTextCommand{\textminus}{PU}{\9042\022}% U+2212
% U+221A SQUARE ROOT; radical
\DeclareTextCommand{\textsurd}{PU}{\9042\032}% U+221A
% \end{macrocode}
%
% \subsubsection{Miscellaneous Technical: U+2300 to U+23FF}
%
% \begin{macrocode}
% U+2329 LEFT-POINTING ANGLE BRACKET; angleleft
\DeclareTextCommand{\textlangle}{PU}{\9043\051}% U+2329
% U+232A RIGHT-POINTING ANGLE BRACKET; angleright
\DeclareTextCommand{\textrangle}{PU}{\9043\052}% U+232A
% \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{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
% 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
% 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
% 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 U+257F}
%
% \begin{macrocode}
% U+25E6 WHITE BULLET; *openbullet, whitebullet
\DeclareTextCommand{\textopenbullet}{PU}{\9045\346}% U+25E6
% U+25EF LARGE CIRCLE; largecircle
\DeclareTextCommand{\textbigcircle}{PU}{\9045\357}% U+25EF
% \end{macrocode}
%
% \subsubsection{Miscellaneous Symbols: U+2600 to U+26FF}
%
% \begin{macrocode}
% U+266A EIGHTH NOTE; musicalnote
\DeclareTextCommand{\textmusicalnote}{PU}{\9046\152}% U+266A
% U+26AD MARRIAGE SYMBOL
\DeclareTextCommand{\textmarried}{PU}{\9046\255}% U+26AD
% U+26AE DIVORCE SYMBOL
\DeclareTextCommand{\textdivorced}{PU}{\9046\256}% U+26AE
% \end{macrocode}
%
% \subsubsection{Miscellaneous Mathematical Symbols-A: U+27C0 to U+27EF}
%
% \begin{macrocode}
% U+27E6 MATHEMATICAL LEFT WHITE SQUARE BRACKET
\DeclareTextCommand{\textlbrackdbl}{PU}{\9047\346}% U+27E6
% U+27E7 MATHEMATICAL RIGHT WHITE SQUARE BRACKET
\DeclareTextCommand{\textrbrackdbl}{PU}{\9047\347}% U+27E7
% \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{Miscellaneous}
%
% \begin{macrocode}
\DeclareTextCommand{\SS}{PU}{SS}
% \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}
%
% \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}
\DeclareTextCommand{\acircumflex}{PU}{\80\342}
\DeclareTextCommand{\dj}{PU}{\81\021}
\DeclareTextCommand{\ecircumflex}{PU}{\80\352}
\DeclareTextCommand{\ocircumflex}{PU}{\80\364}
\DeclareTextCommand{\ohorn}{PU}{\81\241}
\DeclareTextCommand{\uhorn}{PU}{\81\260}
\DeclareTextCommand{\ABREVE}{PU}{\81\002}
\DeclareTextCommand{\ACIRCUMFLEX}{PU}{\80\302}
\DeclareTextCommand{\DJ}{PU}{\81\020}
\DeclareTextCommand{\ECIRCUMFLEX}{PU}{\80\312}
\DeclareTextCommand{\OCIRCUMFLEX}{PU}{\80\324}
\DeclareTextCommand{\OHORN}{PU}{\81\240}
\DeclareTextCommand{\UHORN}{PU}{\81\257}
% \end{macrocode}
% \begin{macrocode}
\DeclareTextCompositeCommand{\'}{PU}{a}{\80\341}
\DeclareTextCompositeCommand{\d}{PU}{a}{\9036\241}
\DeclareTextCompositeCommand{\`}{PU}{a}{\80\340}
\DeclareTextCompositeCommand{\h}{PU}{a}{\9036\243}
\DeclareTextCompositeCommand{\~}{PU}{a}{\80\343}
\DeclareTextCompositeCommand{\'}{PU}{\abreve}{\9036\257}
\DeclareTextCompositeCommand{\d}{PU}{\abreve}{\9036\267}
\DeclareTextCompositeCommand{\`}{PU}{\abreve}{\9036\261}
\DeclareTextCompositeCommand{\h}{PU}{\abreve}{\9036\263}
\DeclareTextCompositeCommand{\~}{PU}{\abreve}{\9036\265}
\DeclareTextCompositeCommand{\'}{PU}{\acircumflex}{\9036\245}
\DeclareTextCompositeCommand{\d}{PU}{\acircumflex}{\9036\255}
\DeclareTextCompositeCommand{\`}{PU}{\acircumflex}{\9036\247}
\DeclareTextCompositeCommand{\h}{PU}{\acircumflex}{\9036\251}
\DeclareTextCompositeCommand{\~}{PU}{\acircumflex}{\9036\253}
\DeclareTextCompositeCommand{\'}{PU}{e}{\80\351}
\DeclareTextCompositeCommand{\d}{PU}{e}{\9036\271}
\DeclareTextCompositeCommand{\`}{PU}{e}{\80\350}
\DeclareTextCompositeCommand{\h}{PU}{e}{\9036\273}
\DeclareTextCompositeCommand{\~}{PU}{e}{\9036\275}
\DeclareTextCompositeCommand{\'}{PU}{\ecircumflex}{\9036\277}
\DeclareTextCompositeCommand{\d}{PU}{\ecircumflex}{\9036\307}
\DeclareTextCompositeCommand{\`}{PU}{\ecircumflex}{\9036\301}
\DeclareTextCompositeCommand{\h}{PU}{\ecircumflex}{\9036\303}
\DeclareTextCompositeCommand{\~}{PU}{\ecircumflex}{\9036\305}
\DeclareTextCompositeCommand{\'}{PU}{i}{\80\355}
\DeclareTextCompositeCommand{\d}{PU}{i}{\9036\313}
\DeclareTextCompositeCommand{\`}{PU}{i}{\80\354}
\DeclareTextCompositeCommand{\h}{PU}{i}{\9036\311}
\DeclareTextCompositeCommand{\~}{PU}{i}{\81\051}
\DeclareTextCompositeCommand{\'}{PU}{o}{\80\363}
\DeclareTextCompositeCommand{\d}{PU}{o}{\9036\315}
\DeclareTextCompositeCommand{\`}{PU}{o}{\80\362}
\DeclareTextCompositeCommand{\h}{PU}{o}{\9036\317}
\DeclareTextCompositeCommand{\~}{PU}{o}{\80\365}
\DeclareTextCompositeCommand{\'}{PU}{\ocircumflex}{\9036\321}
\DeclareTextCompositeCommand{\d}{PU}{\ocircumflex}{\9036\331}
\DeclareTextCompositeCommand{\`}{PU}{\ocircumflex}{\9036\323}
\DeclareTextCompositeCommand{\h}{PU}{\ocircumflex}{\9036\325}
\DeclareTextCompositeCommand{\~}{PU}{\ocircumflex}{\9036\327}
\DeclareTextCompositeCommand{\'}{PU}{\ohorn}{\9036\333}
\DeclareTextCompositeCommand{\d}{PU}{\ohorn}{\9036\343}
\DeclareTextCompositeCommand{\`}{PU}{\ohorn}{\9036\335}
\DeclareTextCompositeCommand{\h}{PU}{\ohorn}{\9036\337}
\DeclareTextCompositeCommand{\~}{PU}{\ohorn}{\9036\341}
\DeclareTextCompositeCommand{\'}{PU}{u}{\80\372}
\DeclareTextCompositeCommand{\d}{PU}{u}{\9036\345}
\DeclareTextCompositeCommand{\`}{PU}{u}{\80\371}
\DeclareTextCompositeCommand{\h}{PU}{u}{\9036\347}
\DeclareTextCompositeCommand{\~}{PU}{u}{\81\151}
\DeclareTextCompositeCommand{\'}{PU}{\uhorn}{\9036\351}
\DeclareTextCompositeCommand{\d}{PU}{\uhorn}{\9036\361}
\DeclareTextCompositeCommand{\`}{PU}{\uhorn}{\9036\353}
\DeclareTextCompositeCommand{\h}{PU}{\uhorn}{\9036\355}
\DeclareTextCompositeCommand{\~}{PU}{\uhorn}{\9036\357}
\DeclareTextCompositeCommand{\'}{PU}{y}{\80\375}
\DeclareTextCompositeCommand{\d}{PU}{y}{\9036\365}
\DeclareTextCompositeCommand{\`}{PU}{y}{\9036\363}
\DeclareTextCompositeCommand{\h}{PU}{y}{\9036\367}
\DeclareTextCompositeCommand{\~}{PU}{y}{\9036\371}
\DeclareTextCompositeCommand{\'}{PU}{A}{\80\301}
\DeclareTextCompositeCommand{\d}{PU}{A}{\9036\240}
\DeclareTextCompositeCommand{\`}{PU}{A}{\80\300}
\DeclareTextCompositeCommand{\h}{PU}{A}{\9036\242}
\DeclareTextCompositeCommand{\~}{PU}{A}{\80\303}
\DeclareTextCompositeCommand{\'}{PU}{\ABREVE}{\9036\256}
\DeclareTextCompositeCommand{\d}{PU}{\ABREVE}{\9036\266}
\DeclareTextCompositeCommand{\`}{PU}{\ABREVE}{\9036\260}
\DeclareTextCompositeCommand{\h}{PU}{\ABREVE}{\9036\262}
\DeclareTextCompositeCommand{\~}{PU}{\ABREVE}{\9036\264}
\DeclareTextCompositeCommand{\'}{PU}{\ACIRCUMFLEX}{\9036\244}
\DeclareTextCompositeCommand{\d}{PU}{\ACIRCUMFLEX}{\9036\254}
\DeclareTextCompositeCommand{\`}{PU}{\ACIRCUMFLEX}{\9036\246}
\DeclareTextCompositeCommand{\h}{PU}{\ACIRCUMFLEX}{\9036\250}
\DeclareTextCompositeCommand{\~}{PU}{\ACIRCUMFLEX}{\9036\252}
\DeclareTextCompositeCommand{\'}{PU}{E}{\80\311}
\DeclareTextCompositeCommand{\d}{PU}{E}{\9036\270}
\DeclareTextCompositeCommand{\`}{PU}{E}{\80\310}
\DeclareTextCompositeCommand{\h}{PU}{E}{\9036\272}
\DeclareTextCompositeCommand{\~}{PU}{E}{\9036\274}
\DeclareTextCompositeCommand{\'}{PU}{\ECIRCUMFLEX}{\9036\276}
\DeclareTextCompositeCommand{\d}{PU}{\ECIRCUMFLEX}{\9036\306}
\DeclareTextCompositeCommand{\`}{PU}{\ECIRCUMFLEX}{\9036\300}
\DeclareTextCompositeCommand{\h}{PU}{\ECIRCUMFLEX}{\9036\302}
\DeclareTextCompositeCommand{\~}{PU}{\ECIRCUMFLEX}{\9036\304}
\DeclareTextCompositeCommand{\'}{PU}{I}{\80\315}
\DeclareTextCompositeCommand{\d}{PU}{I}{\9036\312}
\DeclareTextCompositeCommand{\`}{PU}{I}{\80\314}
\DeclareTextCompositeCommand{\h}{PU}{I}{\9036\310}
\DeclareTextCompositeCommand{\~}{PU}{I}{\81\050}
\DeclareTextCompositeCommand{\'}{PU}{O}{\80\323}
\DeclareTextCompositeCommand{\d}{PU}{O}{\9036\314}
\DeclareTextCompositeCommand{\`}{PU}{O}{\80\322}
\DeclareTextCompositeCommand{\h}{PU}{O}{\9036\316}
\DeclareTextCompositeCommand{\~}{PU}{O}{\80\325}
\DeclareTextCompositeCommand{\'}{PU}{\OCIRCUMFLEX}{\9036\320}
\DeclareTextCompositeCommand{\d}{PU}{\OCIRCUMFLEX}{\9036\330}
\DeclareTextCompositeCommand{\`}{PU}{\OCIRCUMFLEX}{\9036\322}
\DeclareTextCompositeCommand{\h}{PU}{\OCIRCUMFLEX}{\9036\324}
\DeclareTextCompositeCommand{\~}{PU}{\OCIRCUMFLEX}{\9036\326}
\DeclareTextCompositeCommand{\'}{PU}{\OHORN}{\9036\332}
\DeclareTextCompositeCommand{\d}{PU}{\OHORN}{\9036\342}
\DeclareTextCompositeCommand{\`}{PU}{\OHORN}{\9036\334}
\DeclareTextCompositeCommand{\h}{PU}{\OHORN}{\9036\336}
\DeclareTextCompositeCommand{\~}{PU}{\OHORN}{\9036\340}
\DeclareTextCompositeCommand{\'}{PU}{U}{\80\332}
\DeclareTextCompositeCommand{\d}{PU}{U}{\9036\344}
\DeclareTextCompositeCommand{\`}{PU}{U}{\80\331}
\DeclareTextCompositeCommand{\h}{PU}{U}{\9036\346}
\DeclareTextCompositeCommand{\~}{PU}{U}{\81\150}
\DeclareTextCompositeCommand{\'}{PU}{\UHORN}{\9036\350}
\DeclareTextCompositeCommand{\d}{PU}{\UHORN}{\9036\360}
\DeclareTextCompositeCommand{\`}{PU}{\UHORN}{\9036\352}
\DeclareTextCompositeCommand{\h}{PU}{\UHORN}{\9036\354}
\DeclareTextCompositeCommand{\~}{PU}{\UHORN}{\9036\356}
\DeclareTextCompositeCommand{\'}{PU}{Y}{\80\335}
\DeclareTextCompositeCommand{\d}{PU}{Y}{\9036\364}
\DeclareTextCompositeCommand{\`}{PU}{Y}{\9036\362}
\DeclareTextCompositeCommand{\h}{PU}{Y}{\9036\366}
\DeclareTextCompositeCommand{\~}{PU}{Y}{\9036\370}
% \end{macrocode}
% \begin{macrocode}
%
% \end{macrocode}
%
% \subsection{PU encoding, additions for Arabi}
%
% This file is provided and maintained by Youssef Jabri.
%
% \begin{macrocode}
%<*puarenc>
% \end{macrocode}
% \begin{macrocode}
\DeclareTextCommand{\hamza}{PU}{\86\041}% 0621;afii57409;ARABIC LETTER HAMZA
\DeclareTextCommand{\alefmadda}{PU}{\86\042}% 0622;afii57410;ARABIC LETTER ALEF WITH MADDA ABOVE
\DeclareTextCommand{\alefhamza}{PU}{\86\043}% 0623;afii57411;ARABIC LETTER ALEF WITH HAMZA ABOVE
\DeclareTextCommand{\wawhamza}{PU}{\86\044} % 0624;afii57412;ARABIC LETTER WAW WITH HAMZA ABOVE
\DeclareTextCommand{\aleflowerhamza}{PU}{\86\045}% 0625;afii57413;ARABIC LETTER ALEF WITH HAMZA BELOW
\DeclareTextCommand{\yahamza}{PU}{\86\046}% 0626;afii57414;ARABIC LETTER YEH WITH HAMZA ABOVE
\DeclareTextCommand{\alef}{PU}{\86\047}% 0627;afii57415;ARABIC LETTER ALEF
\DeclareTextCommand{\baa}{PU}{\86\050}% 0628;afii57416;ARABIC LETTER BEH
\DeclareTextCommand{\T}{PU}{\86\051}% 0629;afii57417;ARABIC LETTER TEH MARBUTA
\DeclareTextCommand{\taa}{PU}{\86\052}% 062A;afii57418;ARABIC LETTER TEH
\DeclareTextCommand{\thaa}{PU}{\86\053}% 062B;afii57419;ARABIC LETTER THEH
\DeclareTextCommand{\jeem}{PU}{\86\054}% 062C;afii57420;ARABIC LETTER JEEM
\DeclareTextCommand{\Haa}{PU}{\86\055}% 062D;afii57421;ARABIC LETTER HAH
\DeclareTextCommand{\kha}{PU}{\86\056}% 062E;afii57422;ARABIC LETTER KHAH
\DeclareTextCommand{\dal}{PU}{\86\057}% 062F;afii57423;ARABIC LETTER DAL
\DeclareTextCommand{\dhal}{PU}{\86\060}% 0630;afii57424;ARABIC LETTER THAL
\DeclareTextCommand{\ra}{PU}{\86\061}% 0631;afii57425;ARABIC LETTER REH
\DeclareTextCommand{\zay}{PU}{\86\062}% 0632;afii57426;ARABIC LETTER ZAIN
\DeclareTextCommand{\seen}{PU}{\86\063}% 0633;afii57427;ARABIC LETTER SEEN
\DeclareTextCommand{\sheen}{PU}{\86\064}% 0634;afii57428;ARABIC LETTER SHEEN
\DeclareTextCommand{\sad}{PU}{\86\065}% 0635;afii57429;ARABIC LETTER SAD
\DeclareTextCommand{\dad}{PU}{\86\066}% 0636;afii57430;ARABIC LETTER DAD
\DeclareTextCommand{\Ta}{PU}{\86\067}% 0637;afii57431;ARABIC LETTER TAH
\DeclareTextCommand{\za}{PU}{\86\070}% 0638;afii57432;ARABIC LETTER ZAH
\DeclareTextCommand{\ayn}{PU}{\86\071}% 0639;afii57433;ARABIC LETTER AIN
\DeclareTextCommand{\ghayn}{PU}{\86\072}% 063A;afii57434;ARABIC LETTER GHAIN
\DeclareTextCommand{\tatweel}{PU}{\86\100}% 0640;afii57440;ARABIC TATWEEL
\DeclareTextCommand{\fa}{PU}{\86\101}% 0641;afii57441;ARABIC LETTER FEH
\DeclareTextCommand{\qaf}{PU}{\86\102}% 0642;afii57442;ARABIC LETTER QAF
\DeclareTextCommand{\kaf}{PU}{\86\103}% 0643;afii57443;ARABIC LETTER KAF
\DeclareTextCommand{\lam}{PU}{\86\104}% 0644;afii57444;ARABIC LETTER LAM
\DeclareTextCommand{\meem}{PU}{\86\105}% 0645;afii57445;ARABIC LETTER MEEM
\DeclareTextCommand{\nun}{PU}{\86\106}% 0646;afii57446;ARABIC LETTER NOON
\DeclareTextCommand{\ha}{PU}{\86\107}% 0647;afii57470;ARABIC LETTER HEH
\DeclareTextCommand{\waw}{PU}{\86\110}% 0648;afii57448;ARABIC LETTER WAW
\DeclareTextCommand{\alefmaqsura}{PU}{\86\111}% 0649;afii57449;ARABIC LETTER ALEF MAKSURA
\DeclareTextCommand{\ya}{PU}{\86\112}% 064A;afii57450;ARABIC LETTER YEH
% \end{macrocode}
% \begin{macrocode}
\DeclareTextCommand{\nasb}{PU}{\86\113}% 064B;afii57451;ARABIC FATHATAN
\DeclareTextCommand{\raff}{PU}{\86\114}% 064C;afii57452;ARABIC DAMMATAN
\DeclareTextCommand{\jarr}{PU}{\86\115}% 064D;afii57453;ARABIC KASRATAN
\DeclareTextCommand{\fatha}{PU}{\86\116}% 064E;afii57454;ARABIC FATHA
\DeclareTextCommand{\damma}{PU}{\86\117}% 064F;afii57455;ARABIC DAMMA
\DeclareTextCommand{\kasra}{PU}{\86\120}% 0650;afii57456;ARABIC KASRA
\DeclareTextCommand{\shadda}{PU}{\86\121}% 0651;afii57457;ARABIC SHADDA
\DeclareTextCommand{\sukun}{PU}{\86\122}% 0652;afii57458;ARABIC SUKUN
% \end{macrocode}
% Farsi
% \begin{macrocode}
\DeclareTextCommand{\peh}{PU}{\86\176}% 067E;afii57506;ARABIC LETTER PEH
\DeclareTextCommand{\tcheh}{PU}{\86\206}% 0686;afii57507;ARABIC LETTER TCHEH
\DeclareTextCommand{\jeh}{PU}{\86\230}% 0698;afii57508;ARABIC LETTER JEH
\DeclareTextCommand{\farsikaf}{PU}{\86\251}% 06A9???;afii?????;FARSI LETTER KAF
\DeclareTextCommand{\gaf}{PU}{\86\257}% 06AF;afii57509;ARABIC LETTER GAF
\DeclareTextCommand{\farsiya}{PU}{\86\314}% 06CC;afii?????;FARSI LETTER YEH
% \end{macrocode}
% \begin{macrocode}
\DeclareTextCommand{\ZWNJ}{PU}{\9040\014}% 200C;ZWNJ%
\DeclareTextCommand{\noboundary}{PU}{\86\325}% 200D;ZWJ
% \end{macrocode}
% \begin{macrocode}
%
% \end{macrocode}
%
% \section{End of file hycheck.tex}
%
% \begin{macrocode}
%<*check>
\typeout{}
\begin{document}
\end{document}
%
% \end{macrocode}
%
% \Finale
%
\endinput