]> mj.ucw.cz Git - ucwmac.git/blob - ucw-link.tex
ucw-link: Turn off clickable links when not producing a PDF
[ucwmac.git] / ucw-link.tex
1 % The UCW Macro Collection: Destinations and links
2 % Written by Martin Mares <mj@ucw.cz> in 2018 and placed into public domain
3 % -------------------------------------------------------------------------
4
5 \ucwdefmodule{link}
6
7 % Should clickable links be produced?
8 \newif\ifclickable
9 \ifpdf
10         \clickabletrue
11 \else
12         \clickablefalse
13 \fi
14
15 % Common style of all clickable links
16 \pdflinkmargin=1pt
17 \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]}}
18
19 % Define a PDF destination for the current position at the page
20 \def\destpos#1{\ifclickable\pdfdest name {#1} xyz\relax\fi}
21
22 % Define a PDF destination for the current page
23 \def\destpage#1{\ifclickable\pdfdest name {#1} fit\relax\fi}
24
25 % Typeset a clickable link to the given destination
26 % \link{dest}{text}
27 \def\link#1#2{%
28         \ifclickable
29                 \pdfstartlink\commonlinkargs goto name {#1}\relax
30                 #2%
31                 \pdfendlink\relax
32         \else
33                 #2%
34         \fi
35 }
36
37 % Typeset a clickable link to the given page number
38 % (This does not use named destinations. We use it in tables of contents and indices,
39 % where absolute page numbers are known from other sources.)
40 % \linkpage{page}{text}
41 \def\linkpage#1#2{\ifclickable\pdfstartlink\commonlinkargs goto page #1 {/Fit}\relax #2\pdfendlink\else #2\fi}
42
43 % Typeset a clickable URL
44 % \url{http://example.com/}
45 \def\url{\begingroup\allowurlchars\urlaux}
46 \def\urlaux#1{\linkurlaux{#1}{\displayurl #1^^X}}
47
48 % Typeset a clickable link to the given URL
49 % \linkurl{http://example.com/}{text}
50 \def\linkurl{\begingroup\allowurlchars\linkurlaux}
51 \def\linkurlaux#1#2{\endgroup
52         \leavevmode
53         \ifclickable
54                 \pdfstartlink\commonlinkargs user {/Subtype/Link /A << /Type/Action /S/URI /URI(#1) >>}\relax
55         \fi
56         #2%
57         \ifclickable
58                 \pdfendlink
59         \fi
60 }
61
62 % Catcode each special character valid in URL to 'other'
63 \def\allowurlchars{\catcode`\#=12\catcode`\_=12\catcode`\%=12\catcode`\&=12\catcode`\$=12\catcode`\~=12\relax}
64
65 % Style switches and the beginning/end of an URL
66 \let\urlprefix\it
67 \let\urlsuffix\/
68
69 % Kern to place between "//" in an URL
70 \newdimen\urlinterslashkern
71 \urlinterslashkern=-0.1em
72
73 % Internal macro for typesetting of URLs
74 \def\displayurl#1:#2#3^^X{{\urlprefix #1:#2\ifx#2/\kern\urlinterslashkern\fi#3\urlsuffix}}