Sie sind hier

Verlinkung des (Inhalts-)Verzeichnisses mit hyperref

Hallo und guten Morgen,

für meine Master Thesis benutze ich die KOMA-Script Klasse scrreprt. Das ganze wird auf einem Mac (Leopard) unter TeXLive 2007 mit pdftex gesetzt.

Ich setzte hyperref ein sodass im später produzierten PDF zum Beispiel klickbare Seitenzahlen entstehen. Meine Hyperref konfiguration sieht so aus:

Nun möchte ich gerne, dass im Inhaltsverzeichnis nicht nur die Seitenzahl als Link erkannt/markiert wird, sondern zusätzlich auch die entsprechende Überschrift, sodass es egal ist wo man im Inhaltsverzeichnis hin klickt. Ein klick auf Titel oder Seitenzahl soll jeweils zu dem jeweiligen Abschnitt im Dokument führen.

Ich bin mir sicher, dass dies irgendwie durch Modifikation der Befehle zur Erstellung des Inhaltsverzeichnisses hinbekommt. Mein Know How reicht da aber nicht aus. Kann mir einer von euch damit helfen?
Danke,

Tiggar

forum: 
Bild von Markus Kohm

Soweit ich weiß, unterstützt hyperref nur, dass entweder der Text des Verzeichniseintrags oder die Seitenzahl des Verzeichniseintrags ein Link ist. Sowohl als auch wird zumindest von hyperref 6.75r nicht angeboten. Man könnte das eventuell mit:

\def\contentsline#1#2#3#4{%
  \ifx\\#4\\%
    \csname l@#1\endcsname{#2}{#3}%
  \else
    \csname l@#1\endcsname{%
      \hyper@linkstart{link}{#4}{#2}%
    }{#3}\hyper@linkend
  \fi
}

erreichen. Kann aber auch sein, dass das schief geht. Da Du entgegen dem Rat in der Admin-Mail, die Du bei Freischaltung Deines Zugangs erhalten hast, auf ein Minimalbeispiel verzichtet hast, gehe ich davon aus, dass Du nicht wünschst, dass ich ausprobiere, ob meine Idee funktioniert.

BTW: In der Voreinstellung ist nicht die Seitenzahl, sondern der Text der Link. Du hast vermutlich die Option linktocpage für hyperref gesetzt.

Nachtrag: Obiger Code funktioniert leider nicht, weil dabei der Anfang des Links und dessen Ende in unterschiedlichen Gruppen stehen. Was tatsächlich funktioniert ist, aber nicht ganz dem gewünschten entspricht, wäre:

\def\contentsline#1#2#3#4{%
  \ifx\\#4\\%
    \csname l@#1\endcsname{#2}{#3}%
  \else
    \csname l@#1\endcsname{%
      \hyper@linkstart{link}{#4}#2\hyper@linkend%
    }{\hyper@linkstart{link}{#4}#3\hyper@linkend}%
  \fi
}

Hallo Markus,

als Nachtrag zu meinem initialen Posting möchte ich hiermit mein Minimalbeispiel nachliefern. Wie Du schon richtig erkannt hast habe ich die Option linktocpage=true gesetzt.

Leider konnte ich den von Dir gebrachten Vorschlag mangels Verständnis wo ich den Code einbringen muss, bisher nicht zum fliegen bringen. Wenn ich den Codeblock gleich nach \begin{document} einsetze bekomme ich folgenden Salat: http://pastie.textmate.org/private/zvopwow4cifsvijtsvtbta

Das Minimalbeispiel auch in Bunt zu finden unter: http://pastie.textmate.org/private/ux4l5xbga4s4cpanr1i9q

\documentclass[%
    ngerman,                % only for german documents
    pointlessnumbers,       % heading numbers without dot
    abstracton,             % enable abstract
    headsepline             % horizontal line seperates header
]{scrreprt}

\usepackage{ragged2e} % Besserer Flatternsatz (Linksbuendig, statt Blocksatz)
\usepackage[utf8]{inputenc} 

\usepackage{textcomp}    % Zusatzliche Symbole (Text Companion font extension)
\usepackage{nomencl}
\usepackage{verbatim}
\usepackage{lipsum}

\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{3}
\usepackage[german]{babel}
\usepackage[%
    bookmarks, 
    bookmarksnumbered=true, 
    bookmarksopen=true, 
    bookmarksopenlevel=1,
    hyperfootnotes=true,
    linktocpage=true,
    colorlinks=true, 
    urlcolor=blue, 
    filecolor=blue,
    linkbordercolor={0 1 1},    
    menubordercolor={0 1 1},    
    urlbordercolor={1 0 0}      
    hyperfootnotes=true,
    hyperindex=true,
    pdfpagelayout=OneColumn, 
    plainpages=false, 
    pdfpagelabels,
    pdfusetitle,
    pdfstartpage={1},
    pdfstartview={FitH} 
]{hyperref}         

\begin{document}
    \tableofcontents

    \chapter{One}
        \lipsum[1]  
        \section{One.One}
            \lipsum[2]
            \subsection{One.One.One}
                \lipsum[3]
    \chapter{Two} 
        \section{Two.One} 
            \lipsum[4]
        \section{Two.Two} 
            \lipsum[5]
        \section{Two.Three} 
            \lipsum[6]
    \chapter{Three}
        \section{Three.One} 
        \section{Three.Two} 
        \section{Three.Three} 
\end{document}
Bild von Markus Kohm

Die Pünktchen kann ich Dir nicht zu aktiven Links machen, aber eine Kombination von linktocpage=false und linktocpage=true ist drin:

\documentclass[%
    ngerman,                % only for german documents
    pointlessnumbers,       % heading numbers without dot
    abstracton,             % enable abstract
    headsepline             % horizontal line seperates header
]{scrreprt}

\usepackage{ragged2e} % Rauhsatz statt Flatternsatz
\usepackage[utf8]{inputenc}

\usepackage{textcomp} % Zusätzliche Symbole (Text Companion font extension)
\usepackage{lipsum}

\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{3}
\usepackage{babel}
\usepackage[%
    bookmarks, 
    bookmarksnumbered=true, 
    bookmarksopen=true, 
    bookmarksopenlevel=1,
    hyperfootnotes=true,
    colorlinks=true, 
    urlcolor=blue, 
    filecolor=blue,
    linkbordercolor={0 1 1},    
    menubordercolor={0 1 1},    
    urlbordercolor={1 0 0}      
    hyperfootnotes=true,
    hyperindex=true,
    pdfpagelayout=OneColumn, 
    plainpages=false, 
    pdfpagelabels,
    pdfusetitle,
    pdfstartpage={1},
    pdfstartview={FitH} 
]{hyperref}         

\makeatletter% siehe De-TeX-FAQ
\def\contentsline#1#2#3#4{%
  \ifx\\#4\\%
    \csname l@#1\endcsname{#2}{#3}%
  \else
    \csname l@#1\endcsname{%
      \hyper@linkstart{link}{#4}#2\hyper@linkend%
    }{\hyper@linkstart{link}{#4}#3\hyper@linkend}%
  \fi
}
\makeatother% siehe \makeatletter oben

\begin{document}
\tableofcontents

\chapter{One}
\lipsum[1]  
\section{One.One}
\lipsum[2]
\subsection{One.One.One}
\lipsum[3]
\chapter{Two} 
\section{Two.One} 
\lipsum[4]
\section{Two.Two} 
\lipsum[5]
\section{Two.Three} 
\lipsum[6]
\chapter{Three}
\section{Three.One} 
\section{Three.Two} 
\section{Three.Three} 
\end{document}

Übrigens: Wie ich das farbig gemacht habe, steht in der FAQ. Und dann sei noch darauf hingewiesen, dass man sich normalerweise entweder für die neue oder für alte Rechtschreibung entscheiden sollte. Global ngerman und dann als Paketoption german ist nicht sonderlich sinnvoll. Überhaupt muss man aufpassen, wenn man sowohl globale Sprachoptionen als auch Sprachoptionen beim Laden von babel angibt.

Hi Markus,

(1) fantastisch, das ist genau das was ich wollte. Es funktioniert prima bei mir. Bisher weiß ich noch nicht ob ich es schlimm finde, dass die Punkte nicht auch als Link definiert sind.
Bisher gefällt es mir aber ziemlich gut so wie es ist!

(2) Vor einer Weile (schon lange vor dem Posting hier) habe ich Heiko Oberdiek wegen eben jenem Feature angeschrieben. Neulich hat er mir dann geschrieben, dass es in einer der nächsten Versionen implementiert sein wird. Hier ein Auszug aus seiner Antwort an mich:
In der nächsten Version 6.77n habe ich nun die neue Option `linktoc'
implementiert, siehe README.
Beides kann dann mit `linktoc=all' ausgewählt werden.

(3) Bezüglich der Formattierung meines Codes in Farbe hatte ich mir die FAQ bereits vorher durchgelesen. Allerdings hatte ich es bisher so verstanden, dass die farbige Aufbereitung mit vertretbaren Aufwand bisher nur mit emacs möglich ist. Ich habe bereits für meinen favorisierten Editor Textmate nach einer ähnlichen Funktion gesucht. Leider vergebens. Wenn es auch mit Mac-Bordmitteln funktioniert und Du mir sagst wie, wäre ich Dir sehr dankbar! Und wie wäre es zum Beispiel mit sowas hier http://code.google.com/p/syntaxhighlighter/?

Nochmals vielen, vielen Dank. Einen schönen Sonntag,

Jan

Bild von Markus Kohm

Wenn Du HTML-Code erzeugen kannst, der auf <pre> und <font color="..."> basiert, kannst Du das in Deine Beiträge einfügen. Ob du das mit emacs, mit vi, einem perl-Modul, awk oder sonst einem Programm bastelst, ist völlig egal. Du kannst nur keine Farben per style definition erzeugen. weil die aus Sicherheitgründen für Normalsterbliche gesperrt sind.

Und bitte keine Fragen an mich, ob man irgendwelche technischen Änderungen oder Erweiterungen an den Seiten vornehmen kann. Wenn jemand ein Drupal-Modul unterstützt haben will, kann ich das ggf. an den Betreiber bzw. den Server-Admin weiterleiten. Was Drupal nicht bietet, gibt es auch nicht. Mir sind da ohnehin die Hände gebunden.

Comments for "Verlinkung des (Inhalts-)Verzeichnisses mit hyperref" abonnieren