Falsche Verlinkung im Inhaltsverzeichnis

Inhalt, Abbildungen, Tabellen, Quellcodes und andere Verzeichnisse


forgood2
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Do 28. Nov 2019, 23:46

Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von forgood2 »

Ich bin dabei meine Bachelorarbeit zu schreiben und habe Probleme bei der Verlinkung im Inhaltsverzeichnis. Als erstes wird in meinem Inhaltsverzeichnis Sperrvermerk usw. unnummeriert mit römischen Zahlen aufgelistet. Hier passt auch die Verlinkung im Inhaltsverzeichnis. Danach wechsel ich auf arabische Zahlen und beginne mit der Einleitung usw. Wenn ich auf Einleitung im Inhaltsverzeichnis klick, springt meine PDF aber auf die Seite davor aufs Abbilungsverzeichnis. Das zieht sich auf alle weiteren Chapters und Sections durch.

Hier mein Code:

%Dokumentklasse
\documentclass[a4paper,12pt,twoside]{scrreprt}
\usepackage[left= 2.75cm,right = 2.75cm, bottom = 2.5 cm, top= 2cm ]{geometry}
%\usepackage[onehalfspacing]{setspace}
% ============= Packages =============

% Dokumentinformationen
\usepackage[
	pdftitle={Titel der Abschlussarbeit},
	pdfsubject={},
	pdfauthor={Euer Name},
	pdfkeywords={},	
	%Links nicht einrahmen
	hidelinks,
	plainpages=false,pdfpagelabels
]{hyperref}


\usepackage{float}
\usepackage{array}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\usepackage[version=4]{mhchem}
\usepackage[demo]{graphicx}
\setcounter{tocdepth}{5}
\usepackage{lscape}
\setcounter{secnumdepth}{5}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[ngerman]{varioref}
\usepackage[T1]{fontenc}
\usepackage{graphicx, subfigure}
\graphicspath{{img/}}
\usepackage{lmodern}
\usepackage{color}
\usepackage{transparent}
\usepackage{acronym}


%%%%%%%%%%%%%%%%%%

\begin{document}

%Seiten ohne Kopf- und Fußzeile sowie Seitenzahl
\pagestyle{empty}

\include{Titel}
%part im Inhaltsverzeichnis nicht nummerieren
\makeatletter
\let\partbackup\l@part
\renewcommand\l@part[2]{\partbackup{#1}{}}
\pagenumbering{Roman}
\newpage
\pagestyle{scrheadings}
\automark[chapter]{chapter}
\clearscrheadfoot
\ohead{}
\chead{\headmark}
\ofoot{}
\cfoot{\pagemark}

\include{Chapter2}

\include{Chapter3}

 
\cleardoubleoddpage


%Inhaltsverzeichnis
\tableofcontents


%\newpage

\pagenumbering{arabic}

\include{04_einleitung}

\end{document}

Die Chapters ohne Nummerierung habe ich so eingebunden:
%% Chapter2%%

\phantomsection
\addcontentsline{toc}{chapter}{Chapter2}
\chapter*{Chapter2}

Ich weiß nicht wieso es die Verlinkung bei den Römischen Ziffern richtig setzt und bei arabische nicht.


gast.

Re: Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von gast. »

Leider hast du kein Minimalbeispiel (verlinkte Anleitung beachten!) angegeben. Ich kann das Problem nicht reproduzieren. Allerdings sei darauf hingewiesen, dass KOMA-Script für nicht nummerierte Kapitel mit Eintrag ins Inhaltsverzeichnis den Befehl \addchap kennt. Näheres ist der KOMA-Script-Anleitung zu entnehmen.

Es gibt auch einen entsprechenden Befehl für Teile: \addpart.

Und wenn man die Nummer nur im Inhaltsverzeichnis nicht ausgeben will, so sei empfohlen, entweder \addparttocentry umzudefinieren oder per \DeclareTOCStyleEntry das Format der Nummer zu abzuändern, dass sie einfach ignoriert wird.


gast.

Re: Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von gast. »

Achja: \pagenumbering solltest du auch noch einmal in der KOMA-Script-Anleitung nachlesen. Es gibt dort einen wichtigen Hinweis, den du in dem Codeschnipsel nicht beachtet hast.


gast.

Re: Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von gast. »

Ich sehe gerade, dass du den Hinweis bezüglich des besseren Verzichts auf die \part-Nummer im Inhaltsverzeichnis inkl. Code von @nicht so oft gesehener schon vor über einem Jahr bekommen hast … Kein Interesse an Verbesserungsvorschlägen?


forgood2
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Do 28. Nov 2019, 23:46

Re: Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von forgood2 »

gast. hat geschrieben:
Mi 4. Aug 2021, 21:28

Ich sehe gerade, dass du den Hinweis bezüglich des besseren Verzichts auf die \part-Nummer im Inhaltsverzeichnis inkl. Code von @nicht so oft gesehener schon vor über einem Jahr bekommen hast … Kein Interesse an Verbesserungsvorschlägen?

Doch schon habe ich damals auch so probiert aber hat mir nicht weitergeholfen, weswegen ich es so gelassen habe.
Falls du zu dem Theme \pagenumbering auf den Befehl \clearpage habe ich bereits versucht aber auch nicht geholfen.


Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Re: Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von u_fischer »

Sowohl deine Titelseite als auch die Seite nach \pagenumbering{arabic} haben die Seitenzahl "1", und das verwirrt die Links.

Du musst irgendwas machen, damit alle Seitenzahlen in deinem Document verschieden sind.

Z.B. \pagenumbering{roman} vor den Titelseiten. Oder \setcounter{page}{-10}.


gast.

Re: Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von gast. »

forgood2 hat geschrieben:
Mi 4. Aug 2021, 21:41

Falls du zu dem Theme \pagenumbering auf den Befehl \clearpage habe ich bereits versucht aber auch nicht geholfen.

Und es stört dich auch nicht, dass bereits die letzte Seite des Inhaltsverzeichnisses wieder die Nummer 1 ist, was in der KOMA-Script-Anleitung ausführlich erklärt wird? OK, deine Entscheidung. Und es stört dich auch nicht, dass damit möglicherweise zwei ungerade Seiten hintereinander kommen, was in der KOMA-Script-Anleitung ebenfalls erklärt ist und beim Drucken ein Problem sein könnte? OK, deine Entscheidung.

Und wenn du meinst, dass es auch nichts bringt, schlechteren Code durch besseren zu ersetzen? Dann lass auch das mit \l@part so. Aber dann mach wenigstens minimalere Beispiele oder setze einen Kommentar, damit wir uns sparen können, immer wieder auf dieselben Dinge hinzuweisen. Das kostet uns nämlich auch Zeit. Nein, wir können uns solche Hinweise nicht einfach sparen, weil dann nämlich irgend ein anderer Anfänger den schlechten Code garantiert abkupfert und der dann vielleicht in die Falle läuft, die sich bei dir entweder zufällig nicht auftut oder die du trotz Hinweis nicht erkennst.

Außerdem entsteht dann bei den Helfern nicht der Eindruck, dass du Hinweise einfach ignorierst. Sich bewusst gegen Ratschläge zu entscheiden, ist ja durchaus etwas anderes als schlichte Ignoranz.


Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Falsche Verlinkung im Inhaltsverzeichnis

Beitrag von KOMA »

Das Hauptproblem hier dürfte wieder einmal sein, dass falsch nummeriert wird. Wenn man nämlich im Vorderteil römische Seitenzahlen verwendet, dann sollte man damit nicht erst nach den Titelseiten beginnen. Titelseiten werden mitgezählt, auch wenn sie keine Nummer erhalten → Welche Seitenzahl hat das Inhaltsverzeichnis?

Wenn man also die Umschaltung auf römische Zählen korrekt vor dem Titel durchführt und dann nach den Verzeichnissen ordentlich per

\cleardoubleoddpage
\pagenumbering{arabic}

zurückschaltet, dann funktioniert die Nummerierung und auch die Verlinkung.

In der Tat stellt sich dann aber die Frage, ob – insbesondere bei einem ohnehin doppelseitigen Dokument – nicht scrbook die bessere Klasse wäre. Dann könnte man nämlich für die Unterscheidung von Vorderteil und Hauptteil \frontmatter und \mainmatter verwenden, die selbst für den notwendigen Seitenwechsel sorgen. Allerdings sieht \frontmatter kleine römische Seitenzahlen vor – einfach, weil diese üblich sind.

Große römische Seitenzahlen bekommt man mit

\usepackage{xpatch}
\xpatchcmd{\frontmatter}{roman}{Roman}{\typeout{große römische Seitenzahlen in Vorderteil aktiviert}}{\typeout{Aktivierung großer römischer Seitenzahlen im Vorderteil fehlgeschlagen. Bitte \string\pagenumbering{Roman}\space nach \string\frontmatter\space verwenden}}

Insgesamt könnte das also so aussehen:

\documentclass[12pt]{scrbook}% a4 und twoside sind Voreinstellung
\usepackage[left= 2.75cm,right = 2.75cm, bottom = 2.5 cm, top= 2cm]{geometry}% Ungünstige Randeinstellungen erzwungen

\usepackage{blindtext}% Für vollständige Minimalbeispiele höchst praktisch. In
                      % echten Dokumenten natürlich weglassen.

\usepackage{float}% Brauchst du nicht wirklich. Für alternatives Vorgehen → KOMA-Script-Anleitung
\usepackage{array}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}% Der Vollständigkeit
                                % halber sei auf Paket ragged2e und dessen
                                % Anweisung \Centering hingewiesen. In
                                % Tabellen ist das meist eine bessere Wahl als
                                % \centering\arraybackslash, zumal das
                                % \arraybackslash ohnehin nur bei der letzten
                                % Spalte einer Tabelle einen Sinn ergibt.
\usepackage[version=4]{mhchem}
\usepackage[demo]{graphicx}% Im echten Dokument nicht vergessen, die Option
                           % wieder zu entfernen! Alternative: Die Abbildungen
                           % aus Paket mwe verwenden. Dann braucht man für ein
                           % vollständiges Minimalbeispiel keine Option demo
                           % und vergisst die auch nicht.
\setcounter{tocdepth}{5}% Wer weiß auswendig, welcher Level das ist? Ich
                        % nicht. In der KOMA-Script-Anleitung wird daher die
                        % Verwendung von \subparagraphtocdepth, wie in der
                        % KOMA-Script-Anleitung in der Erklärung zum Zähler
                        % tocdepth erklärt. Allerdings rate ich davon ab, so
                        % tiefe Gliederungsebenen ins Inhaltsverzeichnis
                        % aufzunehmen.
\usepackage{lscape}% Wirklich nicht pdflscape?
\setcounter{secnumdepth}{5}% Wer weiß auswendig, welcher Level das ist? Ich
                        % nicht. In der KOMA-Script-Anleitung wird daher die
                        % Verwendung von \subparagraphtocdepth, wie in der
                        % KOMA-Script-Anleitung in der Erklärung zum Zähler
                        % tocdepth erklärt. Allerdings rate ich davon ab, so
                        % tiefe Gliederungsebenen noch zu nummerieren.
\usepackage[utf8]{inputenc}% Überflüssig seit LaTeX 2018/04/01
\usepackage[ngerman]{babel}% Wenn man die Sprachoption bereits bei
                           % \documentclass angibt, muss man sie nicht bei
                           % diversen Pakewten wiederholen und vergisst auch
                           % nicht, das zu tun.
\usepackage[T1]{fontenc}
%\usepackage{graphicx}% Das Paket wurde oben bereits geladen. Es wird dringend
                     % davon abgeraten, Palete mehrfach (gar mit
                     % unterschiedlichen Optionen) zu laden, weil das früher
                     % oder später zu einem "option clash" und schwer
                     % wartbaren Dokumenten führt.
\usepackage{subfigure}% Dieses Paket ist seit Jahrzehnten veraltet und sollte
                      % nicht mehr verwendet werden. Da der Autor des Pakets
                      % mit subfig einen offiziellen Nachfolger veröffentlicht
                      % hat, werden Probleme mit dem Paket nicht mehr
                      % behoben. Wenn man es schon verwendet, hängt es leider
                      % komplett von der verwendeten Version ab, in welcher
                      % Reihenfolge man es mit hyperref laden sollte. Siehe
                      % dazu Abschnitt 9.1.35 der hyperref-Anleitung. Bei der
                      % aktuellen Version ist nicht so ganz sicher, ob man sie
                      % besser vor oder nach hyperref lädt.
\graphicspath{{img/}}% Ist zwar ggf. korrekt aber in einem vollständigen
                     % Minimalbeispiel höchst unpraktisch.
\usepackage{lmodern}% Ich würde alle Font-Pakete zusammen halten, also das
                    % direkt nach (oder auch vor) fontenc laden.
\usepackage{color}% Wirklich nict xcolor?
\usepackage{transparent}% Brauchst du das?
\usepackage{acronym}

\usepackage{scrlayer-scrpage}% Da das Paket später offensichtlich verwendet
                             % wird, sollte man es auch laden.

\usepackage{nameref}% Siehe den nachfolgenen Hinweis zu varioref.
\usepackage[ngerman]{varioref}% Das ist eines der Pakete, die mit hyperref
                              % generell Probleme verursachen. Wenn man es
                              % schon mit hyperref kombiniert, sollte man
                              % unbedingt Abschnitt 9.1.40 der
                              % hyperref-Anleitung beachten!
\usepackage[
	pdftitle={Titel der Abschlussarbeit},
	pdfsubject={},
	pdfauthor={Euer Name},
	pdfkeywords={},	
	%Links nicht einrahmen
	hidelinks,
	plainpages=false,pdfpagelabels
]{hyperref}% hyperref sollte von wenigen, dokumentierten Ausnahmen abgesehen,
           % das letzte geladene Paket sein.
\hypersetup{% String sollte man wegen der Codierung besser damit als bei
            % \usepackage festlegen
  pdftitle={Titel der Abschlussarbeit},
  pdfsubject={}
  pdfauthor={Euer Name}
  pdfkeywords={}
}
\usepackage{bookmark}% Es wird empfohlen dieses Paket nach hyperref selbst zu
                     % laden. Anderenfalls ist die Klasse auf einen
                     % Notfallmechanismus angewiesen. Wer das Paket
                     % keinesfalls haben will, der kann das Laden per Option
                     % bei \documentclass unterbinden. Ich rate aber
                     % ausdrücklich zur Verwendung des Pakets.

\usepackage{xpatch}
\xpatchcmd{\frontmatter}
  {roman}
  {Roman}
  {\typeout{große römische Seitenzahlen in Vorderteil aktiviert}}
  {\typeout{Aktivierung großer römischer Seitenzahlen im Vorderteil
      fehlgeschlagen. Bitte \string\pagenumbering{Roman}\space nach
      \string\frontmatter\space verwenden.}}

% Einstellungen gehören nach Möglichkeit in die Dokumentpräambel
\automark[chapter]{chapter}
\clearscrheadfoot
\ohead{}
\chead{\headmark}
\ofoot{}
\cfoot*{\pagemark}

% part im Inhaltsverzeichnis nicht nummerierern. Die Umdefinierung ergibt
% überhaupt nur einen Sinn, wenn man im Dokumente auch \part verwendet. Ich
% halte aber auch dann wenig davon, im Inhaltsverzeichnis eine Nummerierung
% wegzulassen, die man im Text hat.
\renewcommand*{\addparttocentry}[2]{%
  \addtocentrydefault{part}{}{#2}%
}

%%%%%%%%%%%%%%%%%% 

\begin{document}

\frontmatter

% Ersatztitel, weil ich deine Titeldate nicht habe:
\title{Titel}
\author{Ich}
\maketitle
% Wenn man stattdessen den Titel frei gestaltet, sei die titlepage-Umgebung
% empfohlen. Damit kann man sich dann auch die Umschaltung des Seitenstils
% sparen, weil diese ein \thispagestyle{empty} enthält.

% Zwei Ersatzkapitel, weil ich deine Dateien Chapter2 und Chapter3 nicht habe.
\chapter{Beispielkapitel automatisch nicht nummeriert aber im
  Inhaltsverzeichnis}
\blindtext

\chapter{Noch ein Beispielkapitel automatisch nicht nummeriert aber im
  Inhaltsverzeichnis}
\blindtext

 
%Inhaltsverzeichnis
\tableofcontents

\mainmatter

\addchap{Einleitung}% Einleitungen sind häufig nicht nummeriert. Keine Ahnung,
                    % wie das bei dir ist. So werden nicht nummerierte Kapitel
                    % im Hauptteil trotzdem ins Inhaltsverzeichnis eingefügt
                    % und auch die Kolumnentitel angepasst.
\Blindtext[5]

\blinddocument% Ersatzkapitel, weil ich deine Datei Einleitung nicht habe.

% Und damit man die Wirkung der Umdefinierung von \addparttocentry auch sieht,
% hier noch ein Beispiel für \part. Wenn man dagegen gar keiin \part
% verwendet, dann sollte man die Umdefinierung oben natürlich weglassen.

\part{Irgend so ein Teil}

\blinddocument % Und weiterer Dummy-Inhalt

\end{document}

Ich kann und will dich natürlich nicht zwingen, das so zu machen. Aber wie du leicht überprüfen kannst, funktioniert so die Verlinkung automatisch korrekt. Man hat also mit eher weniger Aufwand (kein \phantomsection, kein \addcontentsline, kein \cleardoubleoddpage …) ein besseres Ergebnis. Die saubere Trennung von Form und Inhalt bekommt quasi gratis dazu.


Antworten