% \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=}% \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=}% \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\@endForm{\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}% } % % \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