2010-07-14 9 views
10

Realizzo PDF con LaTeX. Ho alcune sezioni e sottosezioni. Voglio mettere un link verso la parte superiore del documento in modo che nel PDF qualcuno possa fare clic su di esso e andrà a quella sezione/sottosezione. So che è possibile avere questo con un sommario collegabile, ma non voglio fare un sommario, ho bisogno di più controllo.LaTeX - Aggiungi collegamenti cliccabili a una sezione/sottosezione con un documento PDF

+0

Un collegamento nella parte superiore del documento è molto preciso di cosa tratta un sommario. Come sarebbe diverso il tuo link da un ToC? – Philipp

+0

Philipp, voglio un layout più personalizzato invece di un elenco come il ToC predefinito. Ho fatto questo layout adesso, e penso che aggiungere link ad esso sarebbe più facile che far sembrare un ToC come voglio. – Rory

risposta

27

Includere \usepackage{hyperref} nel preambolo del documento. Assegna etichette appropriate alle tue sezioni e fai riferimento a queste etichette usando \ref{}. Questi riferimenti verranno quindi trasformati in collegamenti selezionabili durante la creazione di PDF con pdflatex.

+2

Nota che per usare hyperref, non puoi avere l'opzione 'draft' nel tuo' documentclass'! – Cerran

13

Il pacchetto hyperref ha un ampio supporto per questo genere di cose (come indicato in una risposta precedente).

Note e consigli: hyperref è un grosso pacchetto, e (per necessità) gioca con il coraggio di LaTeX. Carica il pacchetto hyperref per ultimo, e se il documento diventa improvvisamente strano, commenta il pacchetto, elimina i file .out e .aux dalla directory e riprova per vedere se il problema scompare. Se lo fa, allora ... pensa a qualcosa.

Il pacchetto hypertex può fare alcune delle stesse cose ed è un po 'più leggero. Ma il mio ricordo è che è un po 'fragile e potrebbe non essere più mantenuto molto.

È possibile eseguire alcune di queste operazioni con gli speciali PDF (consultare il manuale pdftex), ma si sta facendo un po 'più complicato e richiede di conoscere un bel po' di PDF.

6

Come indicato nelle altre risposte, è possibile utilizzare hyperref package. Tuttavia, le impostazioni predefinite sono piuttosto male (si aggiunge una casella che più considerano brutto attorno ad ogni link), ecco un tipico frammento di codice per personalizzare le impostazioni più utili:

\usepackage{hyperref} 
\hypersetup{ 
    colorlinks = true, % Colours links instead of ugly boxes 
    urlcolor  = blue, % Colour for external hyperlinks 
    linkcolor = blue, % Colour of internal links 
    citecolor = red  % Colour of citations 
} 

Inoltre, nel caso in cui si utilizza il pacchetto natlib (\usepackage{natbib}), hyperref produrrà due link:

enter image description here

Per risolvere questo problema, add:

\usepackage{etoolbox} 

\makeatletter 

\pretocmd{\[email protected]}{% 
    \let\[email protected]@\[email protected]@citex 
    \def\[email protected]{#2}% 
    \setcounter{[email protected]@cites}{0}% 
    \setcounter{[email protected]@cites}{0}% 
    \forcsvlist{\stepcounter{[email protected]@cites}\@gobble}{#3}}{}{} 
\newcounter{[email protected]@cites} 
\newcounter{[email protected]@cites} 
\def\[email protected]{} 

% include postnote and \citet closing bracket in hyperlink 
\def\[email protected]@citex#1{% 
    \stepcounter{[email protected]@cites}% 
    \[email protected]{\@citeb\@[email protected]@citeb}#1% 
    \ifnumequal{\value{[email protected]@cites}}{\value{[email protected]@cites}} 
    {\[email protected]\else\if*\[email protected]*\else% 
    \[email protected]\[email protected]\global\def\[email protected]{}\fi\fi}{}% 
    \[email protected]\else\if\relax\[email protected]\relax 
    \else\[email protected]@close\global\let\[email protected]\@empty\fi\fi% avoid compact citations 
    \[email protected]} 
\renewcommand\[email protected][2]{#1} 

% avoid extraneous postnotes, closing brackets 
\patchcmd{\[email protected]} 
    {\[email protected]\else\if*#2*\else\[email protected]#2\fi 
    \if\relax\[email protected]\relax\else\[email protected]@close\fi\fi}{}{}{} 
\patchcmd{\[email protected]} 
    {\if\relax\[email protected]\relax\[email protected]@citea\else\[email protected]@[email protected]\fi} 
    {\if\relax\[email protected]\relax\[email protected]@citea\else\[email protected]@[email protected]\fi}{}{} 

\makeatother 

Problemi correlati