Gepunktete Linien im TOC für chapter|Problem wg. Änderungen

Inhalt, Abbildungen, Tabellen, Quellcodes und andere Verzeichnisse


Seban
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 89
Registriert: Do 10. Jan 2013, 13:31

Gepunktete Linien im TOC für chapter|Problem wg. Änderungen

Beitrag von Seban »

Hallo zusammen,

Ich möchte im TOC eines Dokuments (scrreprt) auch für chapter gepunktete Linien zw. Kapitelname und -seite einfügen und habe dazu folgenden Befehl gefunden.
\usepackage[titles]{tocloft}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
Dies "überschreibt" allerdings die Klassen-Option toc=flat.

Das ist von daher von Bedeutung, da mir in folgendem Thread ua. 'Noch so einer' auf S. 2 freundlicherweise geholfen hatte, einen Anhang der Form
  • Anhang A
    A.1 'Chapter'
    A.1.1 'Section'
    A.1.1.1 'Subsection'
    A.1.1.2 'Subsection'
    A.2 'Chapter'
    A.2.1 'Section'
    ...
    A.3 'Chapter'
    ...
    A.4 'Chapter'
    ...

    Anhang B
    B.1 'Chapter'
    ...
    B.2 'Chapter'
    ...
statt
  • Anhang A
    A 'Chapter'
    A.1 'Section'
    A.1.1 'Subsection'
    A.1.2 'Subsection'
    B 'Chapter'
    B.1 'Section'
    ...

    Anhang B
    ...
zu erstellen.

http://www.golatex.de/ueberschriften-nu ... 11686.html

Durch diese Änderungen stimmt der Abstand zw. Kapitel-/Abschnittsnummern und den Kapitel-/Abschnittsnamen nicht mehr überein, wennd as TOC nicht flach ist.


Kann ich bei verwendung von tocloft verhindern, dass das TOC nicht mehr flat ist oder kann ich die Punkte irgendiwe anders einfügen, so dass es mit den Änderungen von 'Noch so einer' kompatibel ist?

Freue mich über jeden Denkanstoß.

Grüße,
Seban


Hier ein Minimal-Bsp.:
\documentclass[a4paper,11pt,openany,toc=flat]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß},
}
\usepackage{blindtext}
	
\usepackage[titles]{tocloft}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % for chapters
	
	

%% part zur Verwendung in appendix anpassen %%%%%%%%%%%%%%%%%%%%%%%%%
%% aus dem genannten Thread
\let\raggedpart\raggedleft
\renewcommand*{\partheadstartvskip}{\cleardoublepage
  \chapterheadstartvskip
}
\setkomafont{partnumber}{\fontsize{18pt}{21pt}\bfseries}
\setkomafont{part}{\normalfont\sffamily}
\makeatletter
\newcommand*{\appendixmore}{%
  \renewcaptionname{ngerman}{\partname}{\appendixname}%
  \setcounter{part}{0}%
  \renewcommand*{\thepart}{\Alph{part}}%
  \renewcommand*{\partformat}{\appendixname~\thepart}%
  \@addtoreset{chapter}{part}%  
  \renewcommand*{\thechapter}{\thepart-\arabic{chapter}}%
}
\makeatother
\renewcommand*{\addparttocentry}[2]{%
  \ifstr{#1}{}{%
    \addtocentrydefault{part}{}{#2}%
  }{%
    \addcontentsline{toc}{part}{\appendixname~#1 -- #2}%
  }%
}



%% Dokument %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

\tableofcontents
\chapter{Kapitel 1}
\section{Ein Abschnitt}
\blindtext


\appendix

\part{Name des ersten Anhangs}
\chapter{Kapitel 1 des Anhangs}\label{chp1}
\blindtext
\chapter{Kapitel 2 des Anhangs}
\blindtext
\section{Ein Abschnitt}
Siehe auch Kapitel~\ref{chp1}.


\part{Name des zweiten Anhangs}
\chapter{Kapitel 1 des Anhangs}\label{chp2}
\blindtext
\chapter{Kapitel 2 des Anhangs}
\blindtext
\section{Ein Abschnitt}
Siehe auch Kapitel~\ref{chp2}.


\end{document}

Noch so einer

Beitrag von Noch so einer »

Wirf tocloft raus und mach die Kapitelüberschriften beispielsweise mit
\makeatletter
\renewcommand*\l@chapter{\bprot@dottedtocline{0}{0em}{1em}}
\makeatother
Ich habe dabei einfach die Anweisung für \l@section aus scrreprt kopiert, die Ebene (1. Argument von \bprot@dottedtocline) angepasst und die Einzüge (2. und 3. Argument). Wobei die Einzüge bei toc=flat AFAIK ohnehin nur als Startwerte verwendet werden, also eigentlich keine Rolle spielen.

Seban
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 89
Registriert: Do 10. Jan 2013, 13:31

Beitrag von Seban »

Vielen Dank für deine Hilfe.
Noch so einer hat geschrieben:Ich habe dabei einfach die Anweisung für \l@section aus scrreprt kopiert, die Ebene (1. Argument von \bprot@dottedtocline) angepasst und die Einzüge (2. und 3. Argument).
So einfach finde ich das, um ehrlich zu sein, noch nicht :(

Mit deinem Ansatz erscheinen zwar die Punkte wie gewünscht, allerdings werden die Kapitel nun im TOC anders dargestellt als vorher (nicht mehr bold und keine vertikalen Abstände):
Vorher:
Bild
Nachher:
Bild

Ich vermute, das kann man mittels Koma-Skript-Befehlen ebenfalls anpassen. Jetzt habe ich in scrguide.pdf nachgeschaut und auf S.70 steht etwas zu Voreinstellungen der Schrift für die Elemente des Inhaltsverzeichnisses.
Wenn ich aber bspw.
\setkomafont{chapterentry}{\bfseries\usekomafont{disposition}}
in der Präambel einfüge, führt dies nicht zu fetten Einträgen im TOC.

Als nächstes würde ich nun nach einem Paket suchen, dass dies stattdessen erledigen kann (titletoc vermutlich), aber mein gefühl sagt mir, dass ein Lösungsweg über Einstellungen des Koma-Scripts "sauberer" ist.

Wie würdest du denn jetzt bspw. vorgehen, um eine Lösung für das Problem (nicht mehr fett & keine Abstände) zu finden?

Grüße & danke noch mal

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

Beitrag von u_fischer »

Versuch's damit (ungetestet, habe keine Zeit dafür):
\makeatletter
\renewcommand*\l@chapter[2]{%
  \ifnum \c@tocdepth >\m@ne
    \ifnum \lastpenalty<20010
      \addpenalty{-\@highpenalty}%
    \fi
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{1.5em}%
    \if@tocleft
      \ifx\toc@l@number\@empty\else
        \setlength\@tempdima{0\toc@l@number}%
      \fi
    \fi
    \begingroup
      \raggedchapterentry
      \parindent \z@ \advance\rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \interlinepenalty\@M
      \leavevmode
      \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
      \usekomafont{chapterentry}{#1\nobreak
        \usekomafont{chapterentrypagenumber}{%
          \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
        mu$}\hfill\nobreak
          \hb@xt@\@pnumwidth{\hss#2}}}\par
      \ifnum \scr@compatibility>\@nameuse{scr@v@2.96}\relax
      \endgroup
      \penalty20009
      \else
        \penalty\@highpenalty
      \endgroup
    \fi
  \fi
}
\makeatother
(Gibt wahrscheinlich fette Punkte. Wenn du das nicht willst, muss du wahrscheinlich bei \hbox{.} ein \normalfont vor dem Punkt einfügen.

Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 825
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Sehr einfach.

Beitrag von localghost »

Ist mit »tocstyle« aus KOMA-Script irgendwie viel einfacher. Die Klassenoption toc=flat muss auskommentiert (oder gelöscht) und statt dessen das Paket mit der entsprechenden Option tocflat geladen werden. Dazu den Stil allwithdot verwenden.
\documentclass[
%  toc=flat,
  ngerman
]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß}
}
\usepackage{babel}
\usepackage[tocflat]{tocstyle}
\usetocstyle{allwithdot}

\usepackage{blindtext}

\begin{document}
  \tableofcontents

  \blinddocument
\end{document}
Es gibt lediglich eine Warnung zum Alpha-Status des Pakets.


Thorsten
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: openSUSE 13.1 (Linux 3.11.6), TeX Live 2013, TeXworks 0.5 (r1349)
³ Lernt gerade TeX (und versucht, es zu verstehen).

Seban
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 89
Registriert: Do 10. Jan 2013, 13:31

Beitrag von Seban »

Danke an alle für die wie immer hervorragende Hilfe.

Ich habe mich für den Lösungsvorschlag von u_fischer entschieden, da dort bei chapter Punkte hinzugefügt werden, nicht aber bei parts.
localghosts Vorschlag funktioniert jedoch auch, fügt aber zu allen Struktur-Ebenen Punkte hinzu, nicht nur zu chaptern. Danke trotzdem =)

MfG,
Seban

Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 825
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Geht auch

Beitrag von localghost »

Seban hat geschrieben:[…] Ich habe mich für den Lösungsvorschlag von u_fischer entschieden, da dort bei chapter Punkte hinzugefügt werden, nicht aber bei parts.
localghosts Vorschlag funktioniert jedoch auch, fügt aber zu allen Struktur-Ebenen Punkte hinzu, nicht nur zu chaptern. Danke trotzdem […]
Das geht natürlich auch. Man definiert einen neuen Stil auf Basis von allwithdot und beeinflusst die entsprechenden Elemente dann wie gewünscht.
\documentclass[
%  toc=flat,
  ngerman
]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß}
}
\usepackage{babel}

\usepackage[tocflat]{tocstyle}
\newtocstyle[allwithdot]{partnodot}{
  \settocstylefeature[-1]{leaders}{\hfill}
  \settocstylefeature[-1]{pagenumberhook}{\normalfont\bfseries}
  \settocstylefeature[0]{pagenumberhook}{\normalfont\bfseries}
}
\usetocstyle{partnodot}

\usepackage{blindtext}

\begin{document}
  \tableofcontents

  \part{Blindtext}
  \blinddocument
\end{document}
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: openSUSE 13.1 (Linux 3.11.6), TeX Live 2013, TeXworks 0.5 (r1349)
³ Lernt gerade TeX (und versucht, es zu verstehen).

Seban
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 89
Registriert: Do 10. Jan 2013, 13:31

Beitrag von Seban »

Super, vielen Dank!

Antworten