Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 23

Thema: Kapitel als Sprungmarken (Lesezeichen) in PDFs

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.08.2007
    Beiträge
    35

    Kapitel als Sprungmarken (Lesezeichen) in PDFs

    Hallo,

    kennt jemanden einen Befehl oder ein Package, mit dem man Verzeichnisse als Lesezeichen im Acrobat Reader anzeigen lassen kann, ohne dass diese im Inhaltsverzeichnis auftauen?

    Bisher verwendete ich z.B. "index=totoc" oder "listof=totoc" in meinem Dokument mit Koma-Script + Hyperref. Allerdings ist mein Inhaltsverzeichnis etwas zu lang, so dass da Tabellen-, Abbildungsverzeichnis etc. rausfliegen müssen. Dennoch möchte ich nicht darauf verzichten, sie in der linken Lesezeichen-Leiste anwählen zu können, weil ich sie doch hin- und wieder brauche....

    Hat jemand eine Idee?

    Danke,
    Ann

  2. #2
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    schaue mal in die Dokumentation von hyperref, wie bookmarks festgelegt werden.

    Hättest du ein Minimalbeispiel gebracht, hätte man es direkt einbauen können bzw. demonstrieren können.

    Gruß
    Marco

  3. #3
    Registrierter Benutzer
    Registriert seit
    26.08.2007
    Beiträge
    35
    Wer hätte gedacht, dass es so einfach mit dem Hyperref geht? ;-) Laut manual ist es, glaube ich, der Befehl "\pdfbookmark", oder?

    Allerdings bin ich mir nicht sicher, wie ich ihn einbinden muss.
    Code:
    \documentclass[listof=totoc]{scrreprt}
    \usepackage[ngerman]{babel}
    \usepackage{caption, hyperref}
    %
    \begin{document}
    
    \cleardoublepage \phantomsection \tableofcontents
    \cleardoublepage \phantomsection \listoftables
    
    \newpage
    \begin{table} \centering \caption[AB]{AB} \label{tab:ab}
    \begin{tabular}{ll} 	a & b\\ \end{tabular}
    \end{table}
    
    \end{document}

  4. #4
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    Code:
    \documentclass{scrreprt}
    \usepackage[ngerman]{babel}
    \usepackage{caption, hyperref}
    %
    \begin{document}
    
    \clearpage \pdfbookmark[0]{\contentsname}{toc} \tableofcontents
    \clearpage \pdfbookmark[0]{\listtablename}{lot}\listoftables
    \chapter{foo}
    \begin{table} \centering \caption[AB]{AB} \label{tab:ab}
    \begin{tabular}{ll} 	a & b\\ \end{tabular}
    \end{table}
    
    \end{document}
    listof=totoc muss natürlich raus, sonst hast du den Eintrag doppelt.

    Gruß
    Marco

  5. #5
    Registrierter Benutzer
    Registriert seit
    26.08.2007
    Beiträge
    35
    Danke, Marco!


    Die Platzhalter "\contentsname", "toc" usw. sind schon sehr speziell, so dass man ohne Raten nicht drauf kommen würde. Gibt es irgendwo eine Liste mit solchen Befehlen, dass ich nicht bei jedem Eintrag eine extra Frage hier Forum stellen müsste?

    Funktioniert das Ganze auch bei anderen "Kapiteln", die keine speziellen Befehle bräuchten? Zum Beispiel habe ich auch einen Abstract oder ein Symbol- und Abkürzungsverzeichnis (mit dem gloss-Paket erstellt), welche ich gerne einbinden würde.


    Danke nochmal,
    Ann

  6. #6
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    Zitat Zitat von deidre_ann Beitrag anzeigen
    Die Platzhalter "\contentsname", "toc" usw. sind schon sehr speziell, so dass man ohne Raten nicht drauf kommen würde.
    Da ist nichts speziell. Vielleicht kann man contentsname als speziell bezeichnen. Aber die Abkürzung ist frei wählbar.

    Vielleicht nochmal zu verdeutlichung:
    \pdfbookmark[EINGABEWERT 1]{EINGABEWERT 2}{EINGABEWERT 3}
    hat drei Eingabewerte.
    • EINGABEWERT 1
      • ist optional
      • ist ein Integer, der die Ebene festlegt: -1 steht für part, 0 für chapter, 1 für section usw.
    • EINGABEWERT 2
      • ist nicht optional
      • Ist der String, der im Bookmark erscheint - frei wählbar
    • EINGABEWERT 3
      • ist nicht optional
      • legt intern den Bezeichner der Sprungmarke fest - frei wählbar


    Zitat Zitat von deidre_ann Beitrag anzeigen
    Funktioniert das Ganze auch bei anderen "Kapiteln", die keine speziellen Befehle bräuchten? Zum Beispiel habe ich auch einen Abstract oder ein Symbol- und Abkürzungsverzeichnis (mit dem gloss-Paket erstellt), welche ich gerne einbinden würde.
    siehe obige Erklärung.

    Gruß
    Marco

  7. #7
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Zitat Zitat von mechanicus Beitrag anzeigen
    Da ist nichts speziell. Vielleicht kann man contentsname als speziell bezeichnen.
    \contentsname kannte ich, für \listtablename hätte ich allerdings nachschlagen müssen.

    Anbei eine Möglichkeit, die Definition von \tableofcontents allgemein zu erweitern (einzufügen in die Dokumentpräambel):

    Code:
    \usepackage{etoolbox}
    \pretocmd{\tableofcontents}%
        {\pdfbookmark[\ifundef{\chapter}{1}{0}]{\contentsname}{toc}}{}{}
    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  8. #8
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Zitat Zitat von lockstep Beitrag anzeigen
    Anbei eine Möglichkeit, die Definition von \tableofcontents allgemein zu erweitern (einzufügen in die Dokumentpräambel)
    Da poste ich eine Lösung, die ich seit Monaten selbst verwende, und komme fünf Minuten später darauf, dass sie fehlerhaft ist.

    Das folgende funktioniert für Klassen mit \chapter (und ist ergänzt um \clearpage):

    Code:
    \usepackage{etoolbox}
    \pretocmd{\tableofcontents}%
        {\clearpage\pdfbookmark[0]{\contentsname}{toc}}{}{}
    Für Klassen ohne \chapter (bei denen das Inhaltsverzeichnis nicht automatisch eine neue Seite beginnt), habe ich momentan keine Lösung.

    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  9. #9
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von lockstep Beitrag anzeigen
    Für Klassen ohne \chapter (bei denen das Inhaltsverzeichnis nicht automatisch eine neue Seite beginnt), habe ich momentan keine Lösung.
    Code:
    % \documentclass{scrreprt}
    \documentclass{scrartcl}
    \usepackage[ngerman]{babel}
    \usepackage{caption, hyperref}
    \usepackage{etoolbox}
    
    \ifdefined\chapter
        \pretocmd{\tableofcontents}%
            {\clearpage\pdfbookmark[0]{\contentsname}{toc}}{}{}
        \pretocmd{\listoftables}%
             {\clearpage\pdfbookmark[0]{\listtablename}{lot}}{}{}
    \else
          \pretocmd{\tableofcontents}%
            {\pdfbookmark[1]{\contentsname}{toc}}{}{}
        \pretocmd{\listoftables}%
             {\pdfbookmark[1]{\listtablename}{lot}}{}{}
    \fi
    
    \begin{document}
    \tableofcontents
    \listoftables
    \clearpage
    
    \ifdefined\chapter
      \chapter{foo}
    \else
      \section{foo}
    \fi
    \begin{table} \centering \caption[AB]{AB} \label{tab:ab}
    \begin{tabular}{ll} 	a & b\\ \end{tabular}
    \end{table}
    
    \end{document}
    Gruß
    Marco

  10. #10
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Dazu zwei weitere Fragen (bzw. ein Bugreport ):

    Was passiert, wenn \tableofcontents (z.B. mit der Klasse book und der Option openright) ein \cleardoublepage auslöst? Weist die (nach \clearpage) gesetzte pdf-Sprungmarke dann auf die richtige Seite, oder ist alles noch komplizierter?

    Zur Verwendung von \ifdefined: Soferne vorher mittels des LaTeX-Befehls \@ifundefined auf die Existenz von \chapter getestet wurde (und das tut wohl so manches Paket), hat \chapter die Bedeutung \relax, d.h. ein Test auf \ifdefined liefert true. Ist es aus diesem Grund nicht sicherer, mit \ifundef zu arbeiten (das bei einem Befehl mit der Bedeutung \relax ebenfalls true liefert)?

    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  11. #11
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von lockstep Beitrag anzeigen
    Dazu zwei weitere Fragen (bzw. ein Bugreport ):
    Habe kein Paket programmiert, somit kein Bug möglich

    Zitat Zitat von lockstep Beitrag anzeigen
    Was passiert, wenn \tableofcontents (z.B. mit der Klasse book und der Option openright) ein \cleardoublepage auslöst? Weist die (nach \clearpage) gesetzte pdf-Sprungmarke dann auf die richtige Seite, oder ist alles noch komplizierter?
    Was soll passieren. \pdfbookmark erzeugt ja keine Seite. Nehmen wir beispielsweise an, dass du openany bei der Klasse book nutzt, dann beginnt das zugehörige \tableofcontents mit \clearpage usw. Wenn du nun \clearpage\clearpage schreibst, kommt ja nun keine zusätzliche Seite zur Stande.
    Dito ist es bei openrigth. \clearpage\cleardoublepage. Da passiert nichts. Also brauchst du nichts abfangen.
    Das ist auch gut so, denn bei KOMA wird schließlich extra \lisftof{} durch tocbasic definiert, was wiederum zusätzliche Verzweigungen einbaut.


    Zitat Zitat von lockstep Beitrag anzeigen
    Zur Verwendung von \ifdefined: Sofern vorher mittels des LaTeX-Befehls \@ifundefined auf die Existenz von \chapter getestet wurde (und das tut wohl so manches Paket), hat \chapter die Bedeutung \relax, d.h. ein Test auf \ifdefined liefert true. Ist es aus diesem Grund nicht sicherer, mit \ifundef zu arbeiten (das bei einem Befehl mit der Bedeutung \relax ebenfalls true liefert)?
    Da hast du recht. Ich nehme sonst auch \@ifundefined.

    Hier ist es mal gezeigt.
    Code:
    \documentclass{article}
    \makeatletter
    \@ifundefined{chapter}{%
       \def\AusgabeI{\texttt{@ifundefined} sagt, wir haben kein \texttt{chapter}}%
       }{%
       \def\AusgabeI{\texttt{@ifundefined} sagt, wir haben ein \texttt{chapter}}%
    }
    \makeatother
    \begin{document}
    \AusgabeI
    
    \ifdefined\chapter
      wir haben ein \texttt{chapter}
    \else
      wir haben kein \texttt{chapter}
    \fi
    \end{document}

    Entsprechend sollte es oben geändert werden. Entweder mittels der etoolbox-Anweisung oder tex-Primitive. Wobei ich etoolbox nehmen würde.

    Gruß
    Marco

  12. #12
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Zitat Zitat von mechanicus Beitrag anzeigen
    Habe kein Paket programmiert, somit kein Bug möglich
    Was nicht ist, kann ja noch werden.

    Was soll passieren. \pdfbookmark erzeugt ja keine Seite. Nehmen wir beispielsweise an, dass du openany bei der Klasse book nutzt, dann beginnt das zugehörige \tableofcontents mit \clearpage usw. Wenn du nun \clearpage\clearpage schreibst, kommt ja nun keine zusätzliche Seite zur Stande.
    D'accord.

    Dito ist es bei openrigth. \clearpage\cleardoublepage. Da passiert nichts. Also brauchst du nichts abfangen.
    Sagen wir, ein Kapitel "Zusammenfassung" vor dem Inhaltsverzeichnis steht auf Seite 1, das Verzeichnis beginnt auf Seite 3. Die Sprungmarke verweist jedoch auf Seite 2:

    Code:
    \documentclass{scrbook}
    
    \usepackage[latin9]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    
    \usepackage{blindtext,etoolbox,hyperref}
    
    \ifundef{\chapter}{%
      \pretocmd{\tableofcontents}%
            {\pdfbookmark[1]{\contentsname}{toc}}{}{}}%
      {\pretocmd{\tableofcontents}%
          {\clearpage\pdfbookmark[0]{\contentsname}{toc}}{}{}}
    
    \begin{document}
    
    \addchap{Zusammenfassung}
    
    \blindtext
    
    \tableofcontents
    
    \chapter{Ein Kapitel}
    
    \blindtext
    
    \end{document}
    Da hast du recht. Ich nehme sonst auch \@ifundefined.
    Sag ich doch.

    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  13. #13
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von lockstep Beitrag anzeigen
    Sagen wir, ein Kapitel "Zusammenfassung" vor dem Inhaltsverzeichnis steht auf Seite 1, das Verzeichnis beginnt auf Seite 3. Die Sprungmarke verweist jedoch auf Seite 2:
    Ok,

    dann wäre das möglich. Ich bin mir aber sicher, dass Herbert gleich um die Ecke kommt und sagt: So geht es auch und hat nur 4 Zeilen

    Code:
    \documentclass{report}
    
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    \usepackage{ifthen}
    \usepackage{blindtext,etoolbox,hyperref}
    
    
    \makeatletter
    \newboolean{dokumentenklasse}
    \setboolean{dokumentenklasse}{false}
    %Bestimmung ob KOMA -
    \@ifclassloaded{scrbook}{\setboolean{dokumentenklasse}{true}}{}
    \@ifclassloaded{scrreprt}{\setboolean{dokumentenklasse}{true}}{}
     \@ifclassloaded{scrartcl}{\setboolean{dokumentenklasse}{true}}{}
    \ifthenelse{\boolean{dokumentenklasse}}{%
    %Hier der Fall KOMA wird verwendet
        \ifundef{\chapter}{%
            \renewcommand*{\tableofcontents}{%
                  \begingroup\let\if@dynlist\if@tocleft%
                         \pdfbookmark[1]{\contentsname}{toc}
                         \listoftoc{toc}
                   \endgroup}
            }{%
            \renewcommand*{\tableofcontents}{%
                  \begingroup\let\if@dynlist\if@tocleft%
                         \if@openright\cleardoublepage\else\clearpage\fi
                         \pdfbookmark[0]{\contentsname}{toc}
                         \listoftoc{toc}
                   \endgroup}
            }
     }{%
    %Hier der Fall Stamdardlasse wird verwendet
        \renewcommand\tableofcontents{%
            \if@twocolumn
               \@restonecoltrue\onecolumn
             \else
                \@restonecolfalse
            \fi
            \if@openright\cleardoublepage\else\clearpage\fi
            \pdfbookmark[0]{\contentsname}{toc}%
            \chapter*{\contentsname
               \@mkboth{%
                  \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
                  \@starttoc{toc}%
             \if@restonecol\twocolumn\fi
        }
    }
    \makeatother
    \begin{document}
    
    \chapter{Zusammenfassung}
    
    \blindtext
    
    \tableofcontents
    
    \chapter{Ein Kapitel}
    
    \blindtext
    
    \end{document}
    Ich bin nicht komplett auf tex-Primitive zurückgegangen. Habe die Vorteile von ifthen u.a auch genutzt.

    Die Standardklasse article ist hierbei nicht bedacht.

    Gruß
    Marco

  14. #14
    Registrierter Benutzer Avatar von lockstep
    Registriert seit
    31.08.2008
    Beiträge
    1.487
    Zitat Zitat von mechanicus Beitrag anzeigen
    Ich bin mir aber sicher, dass Herbert gleich um die Ecke kommt und sagt: So geht es auch und hat nur 4 Zeilen
    Ich habe auch den Verdacht, dass es kürzer geht, kann ihn aber nicht beweisen. Nur eine Sache: Ob man eine KOMA-Script-Klasse geladen hat, kann man mittels Test, ob \KOMAClassName definiert ist, herausfinden.

    Jedenfalls habe ich heute gelernt, dass es nicht reicht, einfach irgendeinen \pdfbookmark-Befehl vor das Verzeichnis meiner Wahl zu stellen.

    lockstep
    idxlayout - Konfigurierbares Index-Layout, kompatibel mit KOMA-Script und memoir

  15. #15
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von lockstep Beitrag anzeigen
    Ich habe auch den Verdacht, dass es kürzer geht, kann ihn aber nicht beweisen.
    Fang mal an

    Zitat Zitat von lockstep Beitrag anzeigen
    Nur eine Sache: Ob man eine KOMA-Script-Klasse geladen hat, kann man mittels Test, ob \KOMAClassName definiert ist, herausfinden.
    Das wusste ich noch gar nicht.
    Damit wird es aber schon kürzer

    Zitat Zitat von lockstep Beitrag anzeigen
    Jedenfalls habe ich heute gelernt, dass es nicht reicht, einfach irgendeinen \pdfbookmark-Befehl vor das Verzeichnis meiner Wahl zu stellen.
    Für den "Normaluser" kann man schon die Frage mit ja beantworten. Der weiß ja, was er eingestellt hat

    Unterm Strich muss ich aber sagen, das Beispiel funktioniert


    Gruß
    Marco

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •