Odkazy (na webové stránky i v rámci dokumentu)
Odkazy na web jsou dnes všudypřítomné, musíme se vypořádat s tím, jak je vložit do dokumentu. Možná důležitější jsou ale odkazy v rámci dokumentu (např. v sekci 4.2, na obrázku 10, v v tabulce 42 nebo dosazením do rovnice (13)), kdybychom je ale psali ručně, pak při přidání dalšího obrázku na začátek bychom museli všechny obrázek XY přepsat, proto chceme použít LaTeXovský mechanismus, který se o to postará. Navíc (pokud uživatel čte PDF v prohlížeči) můžeme vytvářet odkazy i přímo na konkrétní místa v dokumentu.
Nadpisy, obrázky a tabulky i rovnice jsou popsány jinde na této wiki. Ale jak na ně odkazovat (a jak vytvářet další „cíle“, na které se lze odkazovat) se dozvíte právě zde.
K odkazům se hodí (i když ke všemu není nutně potřeba) balíček hyperref. Nezapomeňte \usepackage{hyperref} (resp. \RequirePackage) použít jako poslední \usepackage nebo \RequirePackage (hyperref netriviálně pracuje s ostatními balíčky, tedy tímto můžeme předejít chybám nebo zlepšit výstup). Balíček hyperref navíc umožňuje velkou konfiguraci toho, jak se odkazy chovají, více v kapitole níže.
Token not allowed in a PDF string (Unicode)
Pokud hyperref vypisuje warning Token not allowed in a PDF string (Unicode), tak je to tím, že v názvu kapitoly/sekce (např. v \section) je použit TeXovský kód (třeba matematiku). Prakticky to můžeme ignorovat, ale oprava je jednoduchá, místo daného kódu vložit \texorpdfstring{TeXovský kód}{text, který použít v neTeX věcech místo toho}. (Více v kapitole níže.)
Web
Na odkazy mimo dokument jsou dvě základní makra: \url{odkaz} a \href{odkaz}{text}. Makro \url vysází odkaz a vytvoří „proklik“ na daný odkaz, makro \href navíc umožňuje vysázet text různý od odkazu (odkaz se pak použije jen pro „proklik“).1)
Parametr odkaz je libovolná adresa URL (viz URL). Schéma v URL nemusí být jen „webová stránka“ (https://), ale třeba i „e-mail“ (mailto:). URL navíc může na konci obsahovat i kotvu (např. #page=13 odkazuje v PDF na stranu 13; bohužel funguje pouze, když si uživatel PDF zobrazí ve webovém prohlížeči).
Papírová verze
Pokud dokument kromě PDF plánujeme používat i vytištěný, hodí se k \href{odkaz}{text} (pokud nelze z textu odvodit odkaz) vysázet odkaz do poznámky pod čarou (aby měl čtenář papírové verze také k dispozici daný odkaz). Například pomocí \NewDocumentCommand\footnotehref{mm}{\href{#1}{#2}\footnote{\url{#1}}} (příkaz \footnotehref se pak používá stejně jako \href).
Oprava divných mezer v \url v italice
Makro \url v italice sází divné mezery. Pokud tomuto chceme zabránit, můžeme italiku vypnout buď obalením \url makrem \textnormal, nebo předefinováním \url pomocí \NewCommandCopy\oldurl\url\RenewDocumentCommand\url{m}{\textnormal{\oldurl{#1}}}.
E-maily
\NewDocumentCommand\mail{m}{\href{mailto:#1}{\textnormal{\nolinkurl{#1}}}} a následně \mail{chudak.ovecka@moznabude.cz}. (Makro \textnormal zde funguje stejně jako v předchozím odstavci.)
V rámci dokumentu (obrázky/tabulky/nadpisy/rovnice a jiné)
Základ odkazování se v rámci dokumentu jsou makra \label a \ref. Makro \label{nazevlabelu} vytvoří „cíl“ odkazu. Makro \ref{nazevlabelu} pak vypíše příslušné číslo (nebo kód, třeba u podsekce to bude např. 1.3). Často ho tedy chceme použít jako na obrázku~\ref{labelobrazku}. Pro příčetnost se doporučuje použít nazevlabelu ve tvaru sec:labelsekce nebo fig:labelobrazku (před dvojtečkou je, na jaký „typ objektu“ ukazuje daný label).
Makro \label musí být použito po něčem, co to dovoluje (např. \section nebo \caption).2) Pokud používáte \section*, pak je potřeba přidat před \label ještě makro \phantomsection (a nejsem si teď jistý, co bude ukazovat \ref, ale stejně chceme nejspíše použít nějakou z variant dále místo \ref).
Pokud tedy chceme \label používat po svém kódu (např. si definujeme svoje makra, která sází matematické věty (zrovna to prosím nedělejte, viz matematika)), pak je nejjednodušší, aby daný kód měl nějaký counter (pokud se chceme odkazovat na matematické věty, pak jsou nejspíše číslované), a ujistěme se, že používáme \refstepcounter (za tím totiž právě může následovat \label a ten pak odkazuje přesně na toto místo a číslo daného counteru) a ne \stepcounter. A to i kdybychom chtěli použít \pageref!
Alternativy \ref
Makro \ref lze nahradit:
Pokud místo čísla chceme vypsat stránku, kde se daná věc nachází, pak je pro nás makro \pageref.
Pokud místo čísla kapitoly chceme vypsat její název, pak je pro nás makro \nameref.
Rovnice se značí číslem v závorce (např.
dosazením (13) do (42)), s balíčkem
amsmath stačí použít
\eqref (např.
dosazením \eqref{eq:hodnotafi} do \eqref{eq:vzorec}). Viz
matematika.
Pokud chceme vysázet něco jiného (prokliknutelné na daný \label{label}), použijeme makro \hyperref[label]{sázenýtext}. K tomu se můžou hodit hvězdičkované verze předchozích maker (\ref*, \pageref*, \nameref*), které pouze vypíší to, co by vypsala původní makra, ale nepřidají proklik (abychom neměli dva prokliky přes sebe). Například pokud bychom chtěli, aby bylo prokliknutelné celé obrázek 13 (ne jen 13), pak použijeme \hyperref[fig:nakres]{obrázek~\ref*{fig:nakres}}.
Prý ještě existují makra \autoref (také z balíčku hyperref) a \cref+\Cref+\pagecref+\pageCref+\namecref+\nameCref (z balíčku cleveref), která umí automaticky přidávat věci jako třeba Figure, ale s nimi nemám zkušenosti a stejně si myslím, že v češtině (kvůli skloňování) moc fungovat nebudou.
Když \label nestačí
Místo \label + \*ref můžeme použít \hypertarget{label}{text, na který odkazujeme} + \hyperlink{label}{text, který po kliknutí přesune na místo \hypertargetu}.
Z jiného dokumentu
Kromě toho na místa v daném dokumentu můžeme pomocí kotvy v URL (viz URL) odkazovat i odjinud. Většinou ale má kotva tvar #nazevcounteru.hodnota (v TeXovském souboru můžeme použít \hyperref{URLdokumentu}{nazevcounteru}{hodnota}{text}, ale jednodušší je použít \href se správným odkazem). Pokud chceme, aby kotva měla rozumnější název, můžeme před místo, kde je vytvářena (např. \section nebo \caption) dát \NextLinkTarget{nazevdalsikotvybezhastagu}.
(Například v M&M máme \NextLinkTarget{vysledky}\chapter[Výsledky]{Výsledky 2. deadlinu 1. čísla a 1. deadlinu 2. čísla}, takže odkaz je https://mam.mff.cuni.cz/media/cislo/pdf/31/31-3.pdf#vysledky a ne ...#chapter*.42.)
Obsah
Obsah PDF
Nastavení hyperrefu
Hyperref má spoustu nastavítek. Používají se v \usepackage[nastavítko1=hodnota, nastavítko2=hodnota, nastavítkobezhodnoty, nastavítko4=hodnota]{hyperref}. Některé lze použít i v \hypersetup{nastavítko1=hodnota, nastavítkobezhodnoty, ...}. (Místo nastavítko=true lze psát jen nastavítko.)
Užitečná jsou například:
unicode=true a breaklinks=true: už je prý default.
hidelinks: přestane vykreslovat barevné rámečky kolem odkazů (potom ale nemusí být poznat, co je odkaz, doporučuji je udělat méně výrazné pomocí dalšího nastavítka)
allbordercolors=barva (např.
allbordercolors=green; vyžaduje balíček
xcolor): změní barvu rámečku okolo odkazů (existují i jednotlivé
necobordercolor=barva, viz
dokumentace hyperrefu)
pdfauthor={Autor} a pdftitle={Název}: nastaví příslušná metadata souboru
linktoc=hodnota nastaví, co na obsahu (\tableofcontents) bude prokliknutelné, kde hodnota je buď none (žádné prokliknutelné části), section (default; prokliknutelný název; totéž jako linktocpage=false), page (prokliknutelná stránka; totéž jako linktocpage=true) nebo all (prokliknutelné obojí)
colorlinks=true: barevé odkazy (fuj)
allcolors=barva (např.
allcolors=red): změní barvu odkazů (textu; existují i jednotlivé
necocolor=barva, viz
dokumentace hyperrefu)
bookmarksopen=true: pozotevírá obsah v metadatech PDF (viz
kapitola výše)
bookmarksopenlevel=1: pozotevírá obsah v metadatech PDF do úrovně 1 (viz
kapitola výše)
(Další přidám, až je někdy použiju/ozkouším.)
Další nastavení
\PassOptionsToPackage{hyphens}{url} před \usepackage{hyperref}/\RequirePackage{hyperref} zařídí zalamování URL i v pomlčkách (tedy spojovnících, ale tak tomu nikdo neříká).