% Should clickable links be produced?
\newif\ifclickable
\clickabletrue
-\fi
% We maintain a collection of objects. Each object has:
% - type (namespace -- e.g., chapter)
\def\delayedwriteid#1#2{\write\ids{\string\iddef{#1}{#2}{\refcurrentfile}}}
% Used in auxiliary files
-\def\iddef#1#2#3{\ifcsname id:#1\endcsname\immediate\write16{*** Warning: Identifier #1 re-defined ***}\else
+\def\iddef#1#2#3{\ifcsname id:#1\endcsname\ucwwarn{Identifier #1 re-defined}\else
\expandafter\def\csname id:#1\endcsname{#2}%
\expandafter\def\csname ff:#1\endcsname{#3}%
\fi}
\immediate\openin\ids=\jobname.ids.aux
\ifeof\ids
\else
-\input ids.aux
+\input \jobname.ids.aux
\fi
\immediate\closein\ids
\immediate\openout\ids=\jobname.ids.aux
% to the identifier #2 of type #1 with a label translated by macro #3 (use \relax
% for no translation).
\def\reflink#1#2#3{\expandafter\ifx\csname id:#1#2\endcsname\relax
- {\bo ??}%
+ {\ifx\bo\undefined\bf\else\bo\fi ??}%
\immediate\write16{*** Warning: Reference #1 undefined ***}%
\else
\ifclickable
- \pdfstartlink\commonlinkargs goto name {#1}\relax
+ \pdfstartlink\commonlinkargs goto name {#1#2}\relax
\fi
#3{\csname id:#1#2\endcsname}%
\ifclickable
% Common style of all clickable links
\pdflinkmargin=1pt
-\def\commonlinkargs{height 8pt depth 2pt attr {/C [0 0 0.5] /Border [0 0 2]}}
+\def\commonlinkargs{height \the\dimexpr\ht\strutbox-0.5pt\relax depth \the\dimexpr\dp\strutbox-0.5pt\relax attr {/C [0 0 0.5] /Border [0 0 2]}}
% Typeset a link to identifier #2 of type #1
\def\ref#1#2{\reflink{#1}{#2}\relax}
% Define an identifier of type page pointing to the current page
\def\pageid#1{\delayedwriteid{page#1}{\the\count0}\ifclickable\pdfdest name {page#1} fit\relax\fi}
+\def\pageref{\ref{page}}
% Typeset a reference to the given page number (used in tables of contents and indices,
% where we know the page number from other sources).
% Typeset a clickable URL
% Currently, all weird characters must be properly escaped.
\def\url#1{%
+ \leavevmode
\ifclickable
\pdfstartlink\commonlinkargs user {/Subtype/Link /A << /Type/Action /S/URI /URI(#1) >>}\relax
\fi