% \iffalse meta-comment % % File: bookmark-frozen.dtx % Version: 2020-11-06 v1.29 % Info: PDF bookmarks % % Copyright (C) % 2007-2011 Heiko Oberdiek % 2016-2020 Oberdiek Package Support Group % https://github.com/ho-tex/bookmark/issues % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3c of this license or (at your option) any later % version. This version of this license is in % https://www.latex-project.org/lppl/lppl-1-3c.txt % and the latest version of this license is in % https://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 Maintainers of this work are % Heiko Oberdiek and the Oberdiek Package Support Group % https://github.com/ho-tex/bookmark/issues % % This work consists of the main source file bookmark.dtx % and the derived files % bookmark.sty, bookmark.pdf, bookmark.ins, bookmark.drv, % bkm-dvipdfm.def, bkm-dvips.def, % bkm-pdftex.def, bkm-vtex.def, % bkm-dvipdfm-2019-12-03.def, bkm-dvips-2019-12-03.def, % bkm-pdftex-2019-12-03.def, bkm-vtex-2019-12-03.def, % bookmark-example.tex. % % Distribution: % CTAN:macros/latex/contrib/bookmark/bookmark.dtx % CTAN:macros/latex/contrib/bookmark/bookmark-frozen.dtx % CTAN:macros/latex/contrib/bookmark/bookmark.pdf % % Unpacking: % (a) If bookmark.ins is present: % tex bookmark.ins % (b) Without bookmark.ins: % tex bookmark.dtx % (c) If you insist on using LaTeX % latex \let\install=y\input{bookmark.dtx} % (quote the arguments according to the demands of your shell) % % Documentation: % (a) If bookmark.drv is present: % latex bookmark.drv % (b) Without bookmark.drv: % latex bookmark.dtx; ... % The class ltxdoc loads the configuration file ltxdoc.cfg % if available. Here you can specify further options, e.g. % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % % Programm calls to get the documentation (example): % pdflatex bookmark.dtx % makeindex -s gind.ist bookmark.idx % pdflatex bookmark.dtx % makeindex -s gind.ist bookmark.idx % pdflatex bookmark.dtx % % Installation: % TDS:tex/latex/bookmark/bookmark.sty % TDS:tex/latex/bookmark/bkm-dvipdfm.def % TDS:tex/latex/bookmark/bkm-dvips.def % TDS:tex/latex/bookmark/bkm-pdftex.def % TDS:tex/latex/bookmark/bkm-vtex.def % TDS:tex/latex/bookmark/bkm-dvipdfm-2019-12-03.def % TDS:tex/latex/bookmark/bkm-dvips-2019-12-03.def % TDS:tex/latex/bookmark/bkm-pdftex-2019-12-03.def % TDS:tex/latex/bookmark/bkm-vtex-2019-12-03.def% % TDS:doc/latex/bookmark/bookmark.pdf % TDS:doc/latex/bookmark/bookmark-example.tex % TDS:source/latex/bookmark/bookmark.dtx % TDS:source/latex/bookmark/bookmark-frozen.dtx % % \fi %<*pdftexfrozen> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{bkm-pdftex.def}% [2019/12/03 v1.28 bookmark driver for pdfTeX (HO)]% \def\BKM@DO@entry#1#2{% \begingroup \kvsetkeys{BKM@DO}{#1}% \def\BKM@DO@title{#2}% \ifx\BKM@DO@srcfile\@empty \else \BKM@UnescapeHex\BKM@DO@srcfile \fi \BKM@UnescapeHex\BKM@DO@title \expandafter\expandafter\expandafter\BKM@getx \csname BKM@\BKM@DO@id\endcsname\@empty\@empty \let\BKM@attr\@empty \ifx\BKM@DO@flags\@empty \else \edef\BKM@attr{\BKM@attr/F \BKM@DO@flags}% \fi \ifx\BKM@DO@color\@empty \else \edef\BKM@attr{\BKM@attr/C[\BKM@DO@color]}% \fi \ifx\BKM@attr\@empty \else \edef\BKM@attr{attr{\BKM@attr}}% \fi \let\BKM@action\@empty \ifx\BKM@DO@gotor\@empty \ifx\BKM@DO@dest\@empty \ifx\BKM@DO@named\@empty \ifx\BKM@DO@rawaction\@empty \ifx\BKM@DO@uri\@empty \ifx\BKM@DO@page\@empty \PackageError{bookmark}{% Missing action\BKM@SourceLocation }\@ehc \edef\BKM@action{goto page1{/Fit}}% \else \ifx\BKM@DO@view\@empty \def\BKM@DO@view{Fit}% \fi \edef\BKM@action{goto page\BKM@DO@page{/\BKM@DO@view}}% \fi \else \BKM@UnescapeHex\BKM@DO@uri \BKM@EscapeString\BKM@DO@uri \edef\BKM@action{user{<>}}% \fi \else \BKM@UnescapeHex\BKM@DO@rawaction \edef\BKM@action{% user{% <<% \BKM@DO@rawaction >>% }% }% \fi \else \BKM@EscapeName\BKM@DO@named \edef\BKM@action{% user{<>}% }% \fi \else \BKM@UnescapeHex\BKM@DO@dest \BKM@DefGotoNameAction\BKM@action\BKM@DO@dest \fi \else \ifx\BKM@DO@dest\@empty \ifx\BKM@DO@page\@empty \def\BKM@DO@page{0}% \else \BKM@CalcExpr\BKM@DO@page\BKM@DO@page-1% \fi \ifx\BKM@DO@view\@empty \def\BKM@DO@view{Fit}% \fi \edef\BKM@action{/D[\BKM@DO@page/\BKM@DO@view]}% \else \BKM@UnescapeHex\BKM@DO@dest \BKM@EscapeString\BKM@DO@dest \edef\BKM@action{/D(\BKM@DO@dest)}% \fi \BKM@UnescapeHex\BKM@DO@gotor \BKM@EscapeString\BKM@DO@gotor \edef\BKM@action{% user{% <<% /S/GoToR% /F(\BKM@DO@gotor)% \BKM@action >>% }% }% \fi \pdfoutline\BKM@attr\BKM@action count\ifBKM@DO@open\else-\fi\BKM@x@childs {\BKM@DO@title}% \endgroup } \def\BKM@DefGotoNameAction#1#2{% \BKM@EscapeString\BKM@DO@dest \edef#1{goto name{#2}}% } \def\BKM@SourceLocation{% \ifx\BKM@DO@srcfile\@empty \ifx\BKM@DO@srcline\@empty \else .\MessageBreak Source: line \BKM@DO@srcline \fi \else \ifx\BKM@DO@srcline\@empty .\MessageBreak Source: file `\BKM@DO@srcfile'% \else .\MessageBreak Source: file `\BKM@DO@srcfile', line \BKM@DO@srcline \fi \fi } \RequirePackage{auxhook} \AddLineBeginMainAux{% \string\providecommand\string\BKM@entry[2]{}% } \newcount\BKM@id \BKM@id=\z@ \@namedef{BKM@0}{000} \newif\ifBKM@sw \newcommand*{\bookmark}[2][]{% \if@filesw \begingroup \BKM@InitSourceLocation \def\bookmark@text{#2}% \BKM@setup{#1}% \ifx\BKM@srcfile\@empty \else \BKM@EscapeHex\BKM@srcfile \fi \edef\BKM@prev{\the\BKM@id}% \global\advance\BKM@id\@ne \BKM@swtrue \@whilesw\ifBKM@sw\fi{% \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@ \BKM@startatrootfalse \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% 0{\BKM@level}0% }% \BKM@swfalse \else \expandafter\expandafter\expandafter\BKM@getx \csname BKM@\BKM@prev\endcsname \ifnum\BKM@level>\BKM@x@level\relax \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% {\BKM@prev}{\BKM@level}0% }% \ifnum\BKM@prev>\z@ \BKM@CalcExpr\BKM@CalcResult\BKM@x@childs+1% \expandafter\xdef\csname BKM@\BKM@prev\endcsname{% {\BKM@x@parent}{\BKM@x@level}{\BKM@CalcResult}% }% \fi \BKM@swfalse \else \let\BKM@prev\BKM@x@parent \fi \fi }% \pdfstringdef\BKM@title{\bookmark@text}% \edef\BKM@FLAGS{\BKM@PrintStyle}% \csname BKM@HypDestOptHook\endcsname \BKM@EscapeHex\BKM@dest \BKM@EscapeHex\BKM@uri \BKM@EscapeHex\BKM@gotor \BKM@EscapeHex\BKM@rawaction \BKM@EscapeHex\BKM@title \immediate\write\@mainaux{% \string\BKM@entry{% id=\number\BKM@id \ifBKM@open \ifnum\BKM@level<\BKM@openlevel ,open% \fi \fi \BKM@auxentry{dest}% \BKM@auxentry{named}% \BKM@auxentry{uri}% \BKM@auxentry{gotor}% \BKM@auxentry{page}% \BKM@auxentry{view}% \BKM@auxentry{rawaction}% \BKM@auxentry{color}% \ifnum\BKM@FLAGS>\z@ ,flags=\BKM@FLAGS \fi \BKM@auxentry{srcline}% \BKM@auxentry{srcfile}% }{\BKM@title}% }% \endgroup \fi } \def\BKM@getx#1#2#3{% \def\BKM@x@parent{#1}% \def\BKM@x@level{#2}% \def\BKM@x@childs{#3}% } \def\BKM@auxentry#1{% \expandafter\ifx\csname BKM@#1\endcsname\@empty \else ,#1={\csname BKM@#1\endcsname}% \fi } \def\BKM@InitSourceLocation{% \edef\BKM@srcline{\the\inputlineno}% \BKM@LuaTeX@InitFile \ifx\BKM@srcfile\@empty \ltx@IfUndefined{currfilepath}{}{% \edef\BKM@srcfile{\currfilepath}% }% \fi } \ifluatex \ifnum\luatexversion>36 % \def\BKM@LuaTeX@InitFile{% \begingroup \ltx@LocToksA={}% \edef\x{\endgroup \def\noexpand\BKM@srcfile{% \the\expandafter\ltx@LocToksA \directlua{% if status and status.filename then % tex.settoks('ltx@LocToksA', status.filename)% end% }% }% }\x }% \else \let\BKM@LuaTeX@InitFile\relax \fi \else \let\BKM@LuaTeX@InitFile\relax \fi \SetupKeyvalOptions{family=BKM@DO,prefix=BKM@DO@} \DeclareStringOption[0]{id} \DeclareBoolOption{open} \DeclareStringOption{flags} \DeclareStringOption{color} \DeclareStringOption{dest} \DeclareStringOption{named} \DeclareStringOption{uri} \DeclareStringOption{gotor} \DeclareStringOption{page} \DeclareStringOption{view} \DeclareStringOption{rawaction} \DeclareStringOption{srcline} \DeclareStringOption{srcfile} \AtBeginDocument{% \let\BKM@entry\BKM@DO@entry } \ifBKM@atend \AfterLastShipout{% \BKM@EndHook }% \fi % %<*dvipsfrozen> \def\BKM@SourceLocation{% \ifx\BKM@DO@srcfile\@empty \ifx\BKM@DO@srcline\@empty \else .\MessageBreak Source: line \BKM@DO@srcline \fi \else \ifx\BKM@DO@srcline\@empty .\MessageBreak Source: file `\BKM@DO@srcfile'% \else .\MessageBreak Source: file `\BKM@DO@srcfile', line \BKM@DO@srcline \fi \fi } \NeedsTeXFormat{LaTeX2e} \ProvidesFile{bkm-dvips.def}% [2019/12/03 v1.28 bookmark driver for dvips (HO)]% \def\BKM@PSHeaderFile#1{% \special{header=#1}% } \def\BKM@filename{\jobname.out.ps} \BKM@PSHeaderFile\BKM@filename \RequirePackage{atveryend}[2009/12/07] \AfterLastShipout{\BKM@pdfmark@out} \def\BKM@pdfmark@out{% \if@filesw \newwrite\BKM@file \immediate\openout\BKM@file=\BKM@filename\relax \BKM@write{\@percentchar!}% \BKM@write{/pdfmark where{pop}}% \BKM@write{% {% /globaldict where{pop globaldict}{userdict}ifelse% /pdfmark/cleartomark load put% }% }% \BKM@write{ifelse}% \else \let\BKM@write\@gobble \let\BKM@DO@entry\@gobbletwo \fi } \def\BKM@write#{% \immediate\write\BKM@file } \def\BKM@DO@entry#1#2{% \begingroup \kvsetkeys{BKM@DO}{#1}% \ifx\BKM@DO@srcfile\@empty \else \BKM@UnescapeHex\BKM@DO@srcfile \fi \def\BKM@DO@title{#2}% \BKM@UnescapeHex\BKM@DO@title \expandafter\expandafter\expandafter\BKM@getx \csname BKM@\BKM@DO@id\endcsname\@empty\@empty \let\BKM@attr\@empty \ifx\BKM@DO@flags\@empty \else \edef\BKM@attr{\BKM@attr/F \BKM@DO@flags}% \fi \ifx\BKM@DO@color\@empty \else \edef\BKM@attr{\BKM@attr/C[\BKM@DO@color]}% \fi \let\BKM@action\@empty \ifx\BKM@DO@gotor\@empty \ifx\BKM@DO@dest\@empty \ifx\BKM@DO@named\@empty \ifx\BKM@DO@rawaction\@empty \ifx\BKM@DO@uri\@empty \ifx\BKM@DO@page\@empty \PackageError{bookmark}{% Missing action\BKM@SourceLocation }\@ehc \edef\BKM@action{% /Action/GoTo% /Page 1% /View[/Fit]% }% \else \ifx\BKM@DO@view\@empty \def\BKM@DO@view{Fit}% \fi \edef\BKM@action{% /Action/GoTo% /Page \BKM@DO@page /View[/\BKM@DO@view]% }% \fi \else \BKM@UnescapeHex\BKM@DO@uri \BKM@EscapeString\BKM@DO@uri \edef\BKM@action{% /Action<<% /Subtype/URI% /URI(\BKM@DO@uri)% >>% }% \fi \else \BKM@UnescapeHex\BKM@DO@rawaction \edef\BKM@action{% /Action<<% \BKM@DO@rawaction >>% }% \fi \else \BKM@EscapeName\BKM@DO@named \edef\BKM@action{% /Action<<% /Subtype/Named% /N/\BKM@DO@named >>% }% \fi \else \BKM@UnescapeHex\BKM@DO@dest \BKM@EscapeString\BKM@DO@dest \edef\BKM@action{% /Action/GoTo% /Dest(\BKM@DO@dest)cvn% }% \fi \else \ifx\BKM@DO@dest\@empty \ifx\BKM@DO@page\@empty \def\BKM@DO@page{1}% \fi \ifx\BKM@DO@view\@empty \def\BKM@DO@view{Fit}% \fi \edef\BKM@action{% /Page \BKM@DO@page /View[/\BKM@DO@view]% }% \else \BKM@UnescapeHex\BKM@DO@dest \BKM@EscapeString\BKM@DO@dest \edef\BKM@action{% /Dest(\BKM@DO@dest)cvn% }% \fi \BKM@UnescapeHex\BKM@DO@gotor \BKM@EscapeString\BKM@DO@gotor \edef\BKM@action{% /Action/GoToR% /File(\BKM@DO@gotor)% \BKM@action }% \fi \BKM@write{[}% \BKM@write{/Title(\BKM@DO@title)}% \ifnum\BKM@x@childs>\z@ \BKM@write{/Count \ifBKM@DO@open\else-\fi\BKM@x@childs}% \fi \ifx\BKM@attr\@empty \else \BKM@write{\BKM@attr}% \fi \BKM@write{\BKM@action}% \BKM@write{/OUT pdfmark}% \endgroup } \RequirePackage{auxhook} \AddLineBeginMainAux{% \string\providecommand\string\BKM@entry[2]{}% } \newcount\BKM@id \BKM@id=\z@ \@namedef{BKM@0}{000} \newif\ifBKM@sw \newcommand*{\bookmark}[2][]{% \if@filesw \begingroup \BKM@InitSourceLocation \def\bookmark@text{#2}% \BKM@setup{#1}% \ifx\BKM@srcfile\@empty \else \BKM@EscapeHex\BKM@srcfile \fi \edef\BKM@prev{\the\BKM@id}% \global\advance\BKM@id\@ne \BKM@swtrue \@whilesw\ifBKM@sw\fi{% \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@ \BKM@startatrootfalse \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% 0{\BKM@level}0% }% \BKM@swfalse \else \expandafter\expandafter\expandafter\BKM@getx \csname BKM@\BKM@prev\endcsname \ifnum\BKM@level>\BKM@x@level\relax \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% {\BKM@prev}{\BKM@level}0% }% \ifnum\BKM@prev>\z@ \BKM@CalcExpr\BKM@CalcResult\BKM@x@childs+1% \expandafter\xdef\csname BKM@\BKM@prev\endcsname{% {\BKM@x@parent}{\BKM@x@level}{\BKM@CalcResult}% }% \fi \BKM@swfalse \else \let\BKM@prev\BKM@x@parent \fi \fi }% \pdfstringdef\BKM@title{\bookmark@text}% \edef\BKM@FLAGS{\BKM@PrintStyle}% \csname BKM@HypDestOptHook\endcsname \BKM@EscapeHex\BKM@dest \BKM@EscapeHex\BKM@uri \BKM@EscapeHex\BKM@gotor \BKM@EscapeHex\BKM@rawaction \BKM@EscapeHex\BKM@title \immediate\write\@mainaux{% \string\BKM@entry{% id=\number\BKM@id \ifBKM@open \ifnum\BKM@level<\BKM@openlevel ,open% \fi \fi \BKM@auxentry{dest}% \BKM@auxentry{named}% \BKM@auxentry{uri}% \BKM@auxentry{gotor}% \BKM@auxentry{page}% \BKM@auxentry{view}% \BKM@auxentry{rawaction}% \BKM@auxentry{color}% \ifnum\BKM@FLAGS>\z@ ,flags=\BKM@FLAGS \fi \BKM@auxentry{srcline}% \BKM@auxentry{srcfile}% }{\BKM@title}% }% \endgroup \fi } \def\BKM@getx#1#2#3{% \def\BKM@x@parent{#1}% \def\BKM@x@level{#2}% \def\BKM@x@childs{#3}% } \def\BKM@auxentry#1{% \expandafter\ifx\csname BKM@#1\endcsname\@empty \else ,#1={\csname BKM@#1\endcsname}% \fi } \def\BKM@InitSourceLocation{% \edef\BKM@srcline{\the\inputlineno}% \BKM@LuaTeX@InitFile \ifx\BKM@srcfile\@empty \ltx@IfUndefined{currfilepath}{}{% \edef\BKM@srcfile{\currfilepath}% }% \fi } \ifluatex \ifnum\luatexversion>36 % \def\BKM@LuaTeX@InitFile{% \begingroup \ltx@LocToksA={}% \edef\x{\endgroup \def\noexpand\BKM@srcfile{% \the\expandafter\ltx@LocToksA \directlua{% if status and status.filename then % tex.settoks('ltx@LocToksA', status.filename)% end% }% }% }\x }% \else \let\BKM@LuaTeX@InitFile\relax \fi \else \let\BKM@LuaTeX@InitFile\relax \fi \SetupKeyvalOptions{family=BKM@DO,prefix=BKM@DO@} \DeclareStringOption[0]{id} \DeclareBoolOption{open} \DeclareStringOption{flags} \DeclareStringOption{color} \DeclareStringOption{dest} \DeclareStringOption{named} \DeclareStringOption{uri} \DeclareStringOption{gotor} \DeclareStringOption{page} \DeclareStringOption{view} \DeclareStringOption{rawaction} \DeclareStringOption{srcline} \DeclareStringOption{srcfile} \AtBeginDocument{% \let\BKM@entry\BKM@DO@entry } \ifBKM@atend \AfterLastShipout{% \BKM@EndHook }% \fi % %<*dvipdfmfrozen> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{bkm-dvipdfm.def}% [2019/12/03 v1.28 bookmark driver for dvipdfm (HO)]% \newcount\BKM@id \BKM@id=\z@ \@namedef{BKM@0}{000} \newif\ifBKM@sw \newcommand*{\bookmark}[2][]{% \if@filesw \begingroup \def\bookmark@text{#2}% \BKM@setup{#1}% \edef\BKM@prev{\the\BKM@id}% \global\advance\BKM@id\@ne \BKM@swtrue \@whilesw\ifBKM@sw\fi{% \def\BKM@abslevel{1}% \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@ \BKM@startatrootfalse \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% 0{\BKM@level}\BKM@abslevel }% \BKM@swfalse \else \expandafter\expandafter\expandafter\BKM@getx \csname BKM@\BKM@prev\endcsname \ifnum\BKM@level>\BKM@x@level\relax \BKM@CalcExpr\BKM@abslevel\BKM@x@abslevel+1% \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% {\BKM@prev}{\BKM@level}\BKM@abslevel }% \BKM@swfalse \else \let\BKM@prev\BKM@x@parent \fi \fi }% \csname HyPsd@XeTeXBigCharstrue\endcsname \pdfstringdef\BKM@title{\bookmark@text}% \edef\BKM@FLAGS{\BKM@PrintStyle}% \let\BKM@action\@empty \ifx\BKM@gotor\@empty \ifx\BKM@dest\@empty \ifx\BKM@named\@empty \ifx\BKM@rawaction\@empty \ifx\BKM@uri\@empty \ifx\BKM@page\@empty \PackageError{bookmark}{Missing action}\@ehc \edef\BKM@action{/Dest[@page1/Fit]}% \else \ifx\BKM@view\@empty \def\BKM@view{Fit}% \fi \edef\BKM@action{/Dest[@page\BKM@page/\BKM@view]}% \fi \else \BKM@EscapeString\BKM@uri \edef\BKM@action{% /A<<% /S/URI% /URI(\BKM@uri)% >>% }% \fi \else \edef\BKM@action{/A<<\BKM@rawaction>>}% \fi \else \BKM@EscapeName\BKM@named \edef\BKM@action{% /A<>% }% \fi \else \BKM@EscapeString\BKM@dest \edef\BKM@action{% /A<<% /S/GoTo% /D(\BKM@dest)% >>% }% \fi \else \ifx\BKM@dest\@empty \ifx\BKM@page\@empty \def\BKM@page{0}% \else \BKM@CalcExpr\BKM@page\BKM@page-1% \fi \ifx\BKM@view\@empty \def\BKM@view{Fit}% \fi \edef\BKM@action{/D[\BKM@page/\BKM@view]}% \else \BKM@EscapeString\BKM@dest \edef\BKM@action{/D(\BKM@dest)}% \fi \BKM@EscapeString\BKM@gotor \edef\BKM@action{% /A<<% /S/GoToR% /F(\BKM@gotor)% \BKM@action >>% }% \fi \special{pdf:% out \ifBKM@DvipdfmxOutlineOpen [% \ifBKM@open \ifnum\BKM@level<% \expandafter\ltx@firstofone\expandafter {\number\BKM@openlevel} % \else -% \fi \else -% \fi ] % \fi \BKM@abslevel <<% /Title(\BKM@title)% \ifx\BKM@color\@empty \else /C[\BKM@color]% \fi \ifnum\BKM@FLAGS>\z@ /F \BKM@FLAGS \fi \BKM@action >>% }% \endgroup \fi } \def\BKM@getx#1#2#3{% \def\BKM@x@parent{#1}% \def\BKM@x@level{#2}% \def\BKM@x@abslevel{#3}% } \ifBKM@atend \RequirePackage{atenddvi}% \AtEndDvi{\BKM@EndHook}% \fi % %<*vtexfrozen> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{bkm-vtex.def}% [2019/12/03 v1.28 bookmark driver for VTeX (HO)]% \ifvtexpdf \else \PackageWarningNoLine{bookmark}{% The VTeX driver only supports PDF mode% }% \fi \newcount\BKM@id \BKM@id=\z@ \@namedef{BKM@0}{00} \newif\ifBKM@sw \newcommand*{\bookmark}[2][]{% \if@filesw \begingroup \def\bookmark@text{#2}% \BKM@setup{#1}% \edef\BKM@prev{\the\BKM@id}% \global\advance\BKM@id\@ne \BKM@swtrue \@whilesw\ifBKM@sw\fi{% \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@ \BKM@startatrootfalse \def\BKM@parent{0}% \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% 0{\BKM@level}% }% \BKM@swfalse \else \expandafter\expandafter\expandafter\BKM@getx \csname BKM@\BKM@prev\endcsname \ifnum\BKM@level>\BKM@x@level\relax \let\BKM@parent\BKM@prev \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{% {\BKM@prev}{\BKM@level}% }% \BKM@swfalse \else \let\BKM@prev\BKM@x@parent \fi \fi }% \pdfstringdef\BKM@title{\bookmark@text}% \BKM@vtex@title \edef\BKM@FLAGS{\BKM@PrintStyle}% \let\BKM@action\@empty \ifx\BKM@gotor\@empty \ifx\BKM@dest\@empty \ifx\BKM@named\@empty \ifx\BKM@rawaction\@empty \ifx\BKM@uri\@empty \ifx\BKM@page\@empty \PackageError{bookmark}{Missing action}\@ehc \def\BKM@action{!1}% \else \edef\BKM@action{!\BKM@page}% \fi \else \BKM@EscapeString\BKM@uri \edef\BKM@action{% % }% \fi \else \edef\BKM@action{}% \fi \else \BKM@EscapeName\BKM@named \edef\BKM@action{% % }% \fi \else \BKM@EscapeString\BKM@dest \edef\BKM@action{\BKM@dest}% \fi \else \ifx\BKM@dest\@empty \ifx\BKM@page\@empty \def\BKM@page{1}% \fi \ifx\BKM@view\@empty \def\BKM@view{Fit}% \fi \edef\BKM@action{/D[\BKM@page/\BKM@view]}% \else \BKM@EscapeString\BKM@dest \edef\BKM@action{/D(\BKM@dest)}% \fi \BKM@EscapeString\BKM@gotor \edef\BKM@action{% >% }% \fi \ifx\BKM@color\@empty \let\BKM@RGBcolor\@empty \else \expandafter\BKM@toRGB\BKM@color\@nil \fi \special{% !outline \BKM@action;% p=\BKM@parent,% i=\number\BKM@id,% s=% \ifBKM@open \ifnum\BKM@level<\BKM@openlevel o% \else c% \fi \else c% \fi,% \ifx\BKM@RGBcolor\@empty \else c=\BKM@RGBcolor,% \fi \ifnum\BKM@FLAGS>\z@ f=\BKM@FLAGS,% \fi t=\BKM@title }% \endgroup \fi } \def\BKM@getx#1#2{% \def\BKM@x@parent{#1}% \def\BKM@x@level{#2}% } \def\BKM@toRGB#1 #2 #3\@nil{% \let\BKM@RGBcolor\@empty \BKM@toRGBComponent{#1}% \BKM@toRGBComponent{#2}% \BKM@toRGBComponent{#3}% } \def\BKM@toRGBComponent#1{% \dimen@=#1pt\relax \ifdim\dimen@>\z@ \ifdim\dimen@<\p@ \dimen@=255\dimen@ \advance\dimen@ by 32768sp\relax \divide\dimen@ by 65536\relax \dimen@ii=\dimen@ \divide\dimen@ii by 16\relax \edef\BKM@RGBcolor{% \BKM@RGBcolor \BKM@toHexDigit\dimen@ii }% \dimen@ii=16\dimen@ii \advance\dimen@-\dimen@ii \edef\BKM@RGBcolor{% \BKM@RGBcolor \BKM@toHexDigit\dimen@ }% \else \edef\BKM@RGBcolor{\BKM@RGBcolor FF}% \fi \else \edef\BKM@RGBcolor{\BKM@RGBcolor00}% \fi } \def\BKM@toHexDigit#1{% \ifcase\expandafter\@firstofone\expandafter{\number#1} % 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or A\or B\or C\or D\or E\or F% \fi } \begingroup \catcode`\|=0 % \catcode`\\=12 % |gdef|BKM@vtex@title{% |@onelevel@sanitize|BKM@title |edef|BKM@title{|expandafter|BKM@vtex@leftparen|BKM@title\(|@nil}% |edef|BKM@title{|expandafter|BKM@vtex@rightparen|BKM@title\)|@nil}% |edef|BKM@title{|expandafter|BKM@vtex@zero|BKM@title\0|@nil}% |edef|BKM@title{|expandafter|BKM@vtex@one|BKM@title\1|@nil}% |edef|BKM@title{|expandafter|BKM@vtex@two|BKM@title\2|@nil}% |edef|BKM@title{|expandafter|BKM@vtex@three|BKM@title\3|@nil}% }% |gdef|BKM@vtex@leftparen#1\(#2|@nil{% #1% |ifx||#2||% |else (% |ltx@ReturnAfterFi{% |BKM@vtex@leftparen#2|@nil }% |fi }% |gdef|BKM@vtex@rightparen#1\)#2|@nil{% #1% |ifx||#2||% |else )% |ltx@ReturnAfterFi{% |BKM@vtex@rightparen#2|@nil }% |fi }% |gdef|BKM@vtex@zero#1\0#2|@nil{% #1% |ifx||#2||% |else |noexpand|hv@pdf@char0% |ltx@ReturnAfterFi{% |BKM@vtex@zero#2|@nil }% |fi }% |gdef|BKM@vtex@one#1\1#2|@nil{% #1% |ifx||#2||% |else |noexpand|hv@pdf@char1% |ltx@ReturnAfterFi{% |BKM@vtex@one#2|@nil }% |fi }% |gdef|BKM@vtex@two#1\2#2|@nil{% #1% |ifx||#2||% |else |noexpand|hv@pdf@char2% |ltx@ReturnAfterFi{% |BKM@vtex@two#2|@nil }% |fi }% |gdef|BKM@vtex@three#1\3#2|@nil{% #1% |ifx||#2||% |else |noexpand|hv@pdf@char3% |ltx@ReturnAfterFi{% |BKM@vtex@three#2|@nil }% |fi }% |endgroup \ifBKM@atend \RequirePackage{atenddvi}% \AtEndDvi{\BKM@EndHook}% \fi %