PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit eigens definierter Klasse / Inhaltsverzeichnis



Semsemnamm
03-08-2011, 16:58
Hey ho,

eine Freundin von mir hat ein Problem: Sie schreibt gerade ihre Bachelorarbeit und muß dafür eine von der FH vorgegebene eigene Klasse namens HSMW-Thesis benutzen. Die Klassendatei kann auf dem Hochschulserver heruntergeladen werden, hat aber einige Fehler, an denen wir gerade verzweifeln. Ein bißchen hab ich schon herumexperimentiert, aber ein Problem besteht immer noch:

Die Seitenzahl hinter dem Eintrag "Inhaltsverzeichnis" im Inhaltsverzeichnis stimmt nicht. Allerdings nur dann, wenn das Inhaltsverzeichnis länger als eine Seite ist. Dann ist die Seitenzahl genau so viel zu groß, wie es mehr Seiten als eine sind (also bei zwei Seiten Inhaltsverzeichnis ist der Wert um 1 verschoben, bei drei Seiten um 2 usw.) - es wird also immer die letzte beschriebene Seite des Inhaltsverzeichnisses als Seitenzahl angegeben.

Der Fehler muß irgendwo in der Klasse selbst liegen, aber das ist für mich dann auch zu hoch, ich kann mit LaTeX arbeiten, aber mehr auch nicht.

Hat vielleicht einer 'ne Idee? Die nötigen Dateien hänge ich als zip an. Den Quellcode hier zu posten wäre ziemlicher Unsinn...

Festus
03-08-2011, 18:35
Hi,

das Problem kannte ich. Ich hab mal die Bibliographie mit 'nem manuellen Anker versehen, und das Inhaltsverzeichnis verwies dann auf die letzte Seite der Bibliographie.

Das Problem ist einfach: wenn du etwas wie



\bibliography{...}
\addcontentsline{toc}{chapter}{\protect\numberline {}References}

schreibst wird der addcontentsline-Befehl vor dem autogenerierten Text hergeschoben. Der Verweis geht immer auf die Seite, auf der der Autotext endet, was natürlich erst auffällt wenn Anfang und Ende nicht auf derselben Seite liegen.

Wenn ihr das Inhaltverzeichnis manuell einfügt (hab grad nich so viel Zeit mir deine Dateien genau anzusehen) könntet ihr versuchen ob


\clearpage
\addcontentsline{toc}{chapter}{\protect\numberline {}Inhaltsverzeichnis}
\tableofcontents

den in der Dokumentklasse definierten Befehl überschreibt. Wenn das nicht geht wird vermutlich nur ein Eingriff in die Datei der Dokumentklasse helfen. Der Anker muss VOR den Befehl, der das Inhaltsverzeichnis erzeugt. Und davor MUSS ein Befehl (wie z.B. \clearpage), der dafür sorgt, dass der Anker nicht auf eine Seite kommt und das Inhaltsverzeichnis dann erst auf der nächsten angfängt.

Semsemnamm
04-08-2011, 13:37
Wenn der \addcontentsline-Befehl vor dem \tableofcontents-Befehl kommt, stimmt zwar die Seitenzahl, dafür führt dann der Link auf die falsche Seite. Das war ja das ursprüngliche Problem, das ich durch Vertauschen der beiden Befehle behoben habe, dafür aber das neue Problem geschaffen habe. Der von dir beschriebene \addcontentsline-Befehl ändert daran leider auch überhaupt nichts - er hat dieselbe Wirkung wie der bereits vorhandene. Steht er vor dem \tableofcontents, stimmt die Seitenzahl, aber der Link nicht, steht er dahinter, stimmt der Link, aber die Seitenzahl nicht.

Ich denke, das Problem in der Klassendatei liegt in dem Teil hier:


% Inhaltsverzeichnis
\ifthesis
\setcounter{tocdepth}{1}
\let\tableofcontentsold\tableofcontents
\renewcommand{\tableofcontents}{%
\cleardoublepage
\pagestyle{scrheadings}
\let\contentsnameold\contentsname
\renewcommand{\contentsname}{\myromanprefix\conten tsnameold}
\addtocounter{page}{-2}
\tableofcontentsold
\addcontentsline{toc}{chapter}{\contentsnameold}
\cleardoublepage
}
\fi

Wie gesagt, die Befehle \addcontentsline und \tableofcontentsold standen vorher andersrum, da paßte der Link nicht. Den \addtocounter mußte ich nach dem Vertauschen einfügen, da dann das Inhaltsverzeichnis irgendwie immer auf Seite III losging. Das Irre ist, daß der Aufbau beim Tabellen-, Abbildungs- und Abkürzungsverzeichnis genau der gleiche war, da auch dasselbe Problem bestand, daß eben der Link zur falschen Seite führte. Komischerweise hat hier das Vertauschen der \addcontentsline- und \listoffigures- bzw. \listoftables-Befehle funktioniert - sprich: hier stimmen sowohl der Link als auch die Seitenzahl. Nur beim Inhaltsverzeichnis will's irgendwie nicht klappen.

Festus
04-08-2011, 17:37
Das ist aber genau das, was ich meine: So wird der Anker vor dem Autotext hergeschoben und rückt damit nach hinten, wenn das Verzeichnis zu lang wird. Und bei den anderen Verzeichnissen klappt es nicht nur, weil die nur eine Seite lang sind?

Warum der hyperlink dann auf die falsche Seite geht weiß ich auch nicht, aber wäre das nicht das hinnehmbarere Problem?

Was du vlt. versuchen könntest, da du die Überschrift des TOC sowieso umdefinierst: Was passiert wenn du den Anker direkt in die Definition der Überschrift packst, was du dann vermutlich noch mal in eine protect-Umgebung packen musst.

Das mit dem Inhaltsverzeichnis auf Seite III könnte an dem cleardoublepage liegen, wenn deine Titelseite zu lang ist oder die schon mit clearpage endet. Dann wäre LaTeX auf Seite I und das cleardoublepage würde einen Sprung auf seite III bewirken.

Semsemnamm
04-08-2011, 22:01
Was du vlt. versuchen könntest, da du die Überschrift des TOC sowieso umdefinierst: Was passiert wenn du den Anker direkt in die Definition der Überschrift packst, was du dann vermutlich noch mal in eine protect-Umgebung packen musst.

Geil, das hat funktioniert! Vielen Dank! Problem gelöst! Hab das vorsichtshalber auch gleich bei den anderen Verzeichnissen so gemacht, denn du wirst wahrscheinlich Recht haben - die anderen Verzeichnisse sind nur eine Seite lang.

Ein weiteres Problem gibt's aber noch, das hatte ich im Eingangsposting vergessen: Bei den Fußnoten gibt's auch noch ein Problem mit den Hyperlinks. Die Fußnoten werden zwar korrekt auf der Seite angezeigt, wo sie hingehören, der zugehörige Link springt aber immer auf die Titelseite. Der einzige Teil in der Klassendatei, den ich zu Fußnoten gefunden hab, ist folgender:


% Fussnoten, Tabellen und Abbildungen
\counterwithout{footnote}{chapter}
\ifthenelse{\isundefined{\@minussymbol}}{}{
\renewcommand\thefigure{\thechapter-\arabic{figure}}
\renewcommand\thetable{\thechapter-\arabic{table}}
}
\deffootnote{1em}{1em}{\textsuperscript{\thefootno temark}\ }
\renewcommand*{\captionformat}{:~~}
\setkomafont{caption}{\small}
\setkomafont{captionlabel}{\small}

Wenn ich in mein Testdokument eine Fußnote einbaue, kommt auch eine zusätzliche Warnung hinzu:

"(see the transcript file for additional information)pdfTeX warning (dest): name {Hfootnote.1} has been referenced but does not exist, replaced by a fixed one"

Hast du da vielleicht noch eine Idee?

Festus
05-08-2011, 15:52
Na die Fehlermeldung ist erst mal klar---da das zugehörige Ziel zu deiner Fußnote für LaTeX nicht existiert wird auf ein festes Ziel verwiesen, in dem Fall die Titelseite. Warum das so ist kann ich mir grad nicht erklären, soweit ich das sehe liegts nicht an dem Code, den du gepostet hast.

Ich würde vorschlagen vlt. mal die Doku zu hyperref anzusehen, ob da irgendwas über Probleme mit Fußnoten steht. Soweit ich mich entsinne waren die meiner Diplomarbeit nicht verlinkt---ich habs aber nicht explizit deaktiviert, das scheint also kein standardfeature zu sein. Vielleicht musst du hyperref da einfach ein Paar mehr Einstellungen mitgeben.

Semsemnamm
05-08-2011, 19:18
Doch, das ist ein Standardfeature von hyperref, ich hab das schon immer benutzt, und bei meiner Diplomarbeit damals hat's auch einwandfrei funktioniert, ich mußte damals aber noch nicht diese komische Klasse benutzen. Ich hab auch nur zwei Optionen übergeben:

\usepackage[plainpages=false,pdfpagelabels]{hyperref}

Die sind auch im vorliegenden Fall vorhanden. Wenn ich bei dem jetzigen Problem eine andere Klasse verwende und ansonsten alles genauso lasse funktioniert es auch. Es funktioniert nur mit dieser HSMW-Thesis-Klasse nicht, weswegen ich das Problem irgendwo in dieser Klassendatei vermute.

Naja, ich hab ihr jetzt mal vorgeschlagen, einfach hyperfootnotes=false als Option mit zu übergeben, das unterdrückt die Fußnoten-Verlinkung einfach, aber eigentlich ist die meiner Meinung nach sowieso überflüssig. Ist zwar nicht die Optimallösung, aber sozusagen ein Workaround...

CKlatexacc
24-08-2011, 09:03
Hallo

Ich habe das selbe Problem wie von Semsemnamm beschrieben, dass die Seitenzahl im Inhaltsverzeichnis nicht mit der tatsächlichen Seitanzahl übereinstimmt wenn ein Kapitel über mehrere Seiten geht. Sprich im Inhaltsverzeichnis steht dann die Seitenzahl der Letzen Seite.

Laut Semsemnamm:
Zitat:
Geil, das hat funktioniert! Vielen Dank! Problem gelöst! Hab das vorsichtshalber auch gleich bei den anderen Verzeichnissen so gemacht, denn du wirst wahrscheinlich Recht haben - die anderen Verzeichnisse sind nur eine Seite lang.

seit ihr ja auf eine Lösunge gekommen.

Lösungsvorschlag:

Zitat von Festus
Was du vlt. versuchen könntest, da du die Überschrift des TOC sowieso umdefinierst: Was passiert wenn du den Anker direkt in die Definition der Überschrift packst, was du dann vermutlich noch mal in eine protect-Umgebung packen musst.

Das Problem ist ich habe gerade erst angefangen mit Latex zu arbeiten und verstehe nicht wirklich wie ich den Lösungsvorschlag umsetzen kann.

@Semsemnamm
könntest du vlt. den abgeänderten code hier mal posten ?

Vielen Dank im vorraus.

MFG

Schweinebacke
24-08-2011, 12:12
BTW: Wenn das Inhaltsverzeichnis mit Hilfe von tocbasic gesetzt wird, was bei KOMA-Script normalerweise automatisch der Fall ist, dann kann man tocbasic anweisen, das Inhaltsverzeichnis ins Inhaltsverzeichnis aufzunehmen. Näheres ist den Kapitel über tocbasic in der KOMA-Script-Anleitung, scrguide.pdf, zu entnehmen.

Semsemnamm
17-10-2011, 22:08
könntest du vlt. den abgeänderten code hier mal posten?

Sorry, war lange nicht mehr da und hab jetzt erst gesehen, daß hier noch mehr gekommen ist. Ich hoffe, es ist noch nicht zu spät, auch wenn's schon zwei Monate her ist...

Was ich einfach gemacht habe: In dem Code in Beitrag Nr. 3 hab ich den Befehl


\renewcommand{\contentsname}{\myromanprefix\conten tsnameold}

abgeändert in:


\renewcommand{\contentsname}{\myromanprefix\conten tsnameold\protect\addcontentsline{toc}{chapter}

Der folgende Befehl fliegt dafür raus, da er ja nun schon in dem abgeänderten steckt:


\addcontentsline{toc}{chapter}{\contentsnameold}

Das hat dann das Problem gelöst.

Nochmal sorry für die späte Antwort, ich hoffe, du kannst trotzdem noch was damit anfangen.

Schweinebacke
18-10-2011, 06:54
Da Du KOMA-Script-Befehle in Deinem Code-Schnippsel hast, ist davon auszugehen, dass eine KOMA-Script-Klasse als Basis verwendet wird. Warum verwendest Du dann nicht einfach wie vorgeschlagen den dokumentieren KOMA-Script-Weg:
\setuptoc{toc}{totoc}% sinnlosen Inhaltsverzeichnis-Eintrag im Inhaltsverzeichnis erzwingen
Siehe KOMA-Script-Anleitung, ab Seite 318, Erklärung zu \setuptoc und den Eigenschaften, die man darüber setzen kann.