TOCLOFT und Führungspunkte... Deaktivieren einzelner oder keiner Punkte

TOCLOFT und Führungspunkte... Deaktivieren einzelner oder keiner Punkte

Beim Stylen meiner Abschlussarbeit verlangt der Herausgeber mindestens zwei Punkte im Inhaltsverzeichnis – oder die Zeile muss umgebrochen werden (was, wenn man es manuell macht, andere Probleme verursacht). Gibt es Ideen, um eine elegantere Lösung zu finden als das tocloft \renewcommand\cftdotsep{..}-Ding (das in anderen Zeilen neue Probleme verursacht)?

MWE:

\documentclass[
paper=233mm:155mm,
fontsize=10.5,
cleardoubleempty,
headings=optiontohead,
bibliography=totoc,
idxtotoc,
pointlessnumbers]
{scrbook}


\usepackage{fontspec}
\setmainfont{Times New Roman}

\usepackage{polyglossia}  % Sprachumschaltung
\setdefaultlanguage{german}% Voreingestellte Dokumentsprache: Deutsch


%%% Seitenränder etc.
\usepackage[footnotesep=1.5\baselineskip]{geometry}
\geometry{includehead=true, textwidth=117mm, textheight=186mm, headsep=6mm, left=18mm, bottom=24mm}


%% Design der Überschriften %%%%%%%%%%
\setkomafont{sectioning}{\normalfont\large\scshape\centering}
\setkomafont{part}{\normalfont\Huge\scshape\centering}
\setkomafont{chapter}{\normalfont\LARGE\scshape\centering}
\setkomafont{section}{\normalfont\Large\centering}
\setkomafont{subsection}{\normalfont\large\centering}
\setkomafont{subsubsection}{\normalfont\normalsize\centering}
\setkomafont{minisec}{\normalfont\normalsize\itshape\centering}
\setkomafont{paragraph}{\normalfont\normalsize\itshape}
\setkomafont{subparagraph}{\normalfont\normalsize\itshape}


%% Inhaltsverzeichnis formatieren %%%%%%%%%%%%%%%%%%%
\usepackage{tocloft}

\tocloftpagestyle{empty} %keine Seitenzahl auf erster Seite des Inhaltsverzeichnisses

\renewcommand{\cftchappagefont}{} % Seitenzahlen auch bei Chapter nicht fett
\renewcommand{\cftpartpagefont}{} % Seitenzahlen auch bei Chapter nicht fett

\renewcommand{\cftchapleader}{\cftdotfill{\cftchapdotsep}} % Punkte nicht fett
\renewcommand{\cftchapdotsep}{\cftdotsep}

\renewcommand{\cfttoctitlefont}{\hfill\normalfont\LARGE\scshape} % Größe der Überschrift wie \chapter
\renewcommand{\cftaftertoctitle}{\hfill}

\renewcommand{\cftchapfont}{\normalfont}  %% Im Inhaltsverzeichnis Titel normal. alternativ fett. \bfseries
\setcounter{tocdepth}{4}
\setcounter{secnumdepth}{4}

\renewcommand\thesection{\thechapter.\arabic{section}}   %% Nummerierung Section Römisch

\renewcommand\thesubsection{\thesection.\arabic{subsection}} %% Nummerierung Subsection arabisch usw.

\renewcommand\thesubsubsection{\thesubsection.\arabic{subsubsection}}

\usepackage{blindtext}

\begin{document}

\tableofcontents

\chapter{A chapter with a title much too long as there aren't any dots any more}
\blindtext

\section{A section that is ok as there are at least two dots left}
\blindtext

\subsection{A subsection again not fitting as it is only ONE dot left}
\blindtext

\end{document}

Antwort1

Eine Möglichkeit besteht darin, den \@dottedtoclineinternen Befehl direkt so zu patchen, dass er Anführer erzeugt, die mindestens zwei Geviert lang sind (sagen wir):

\documentclass{scrbook}

\makeatletter

\renewcommand*\@dottedtocline[5]{%
  \ifnum #1>\c@tocdepth \else
    \vskip \z@ \@plus.2\p@
    {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \@tempdima #3\relax
     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     {#4}\nobreak
     \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
        mu$}\hskip 2em \@plus 1fill % <<< PATCH
     \nobreak
     \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
     \par}%
  \fi}

\makeatother

\begin{document}

\tableofcontents

\chapter{One}
Lorem ipsum.

\section{Some words to fill the line, words to fill the line,
    words to fill the line}
Dolor sit amet.

\section{Some words to fill the line, words to fill the line,
    words to fill the line, w}
Consectetur adipisci elit.

\section{Some words to fill the line, words to fill the line,
    words to fill the line, wo}
Numquam faucibus,.

\end{document}

BeideBuchund dasNotizbuchKlassen werden letztendlich aufgerufen, \@dottedtoclineum Inhaltsverzeichniseinträge mit Anführern zu erstellen, daher sollte der Patch funktionieren.

Ausgabe:

Ausgabe des Beispielcodes

Zusatz

Ich vergaß zu erwähnen, dass wie immer die \patchcmdEinrichtung derAbonnierenPaket kann anstelle von verwendet werden \renewcommand(wobei die vollständige Definition wiederholt werden muss):

\documentclass{scrbook}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\@dottedtocline}{\hfill}{\hskip 2em \@plus 1fill }{}{}
\makeatother

\begin{document}

\tableofcontents

\chapter{One}
Lorem ipsum.

\section{Some words to fill the line, words to fill the line,
    words to fill the line}
Dolor sit amet.

\section{Some words to fill the line, words to fill the line,
    words to fill the line, w}
Consectetur adipisci elit.

\section{Some words to fill the line, words to fill the line,
    words to fill the line, wo}
Numquam faucibus,.

\end{document}

Zweite Ergänzung

Ein Kommentar erfordert einen ähnlichen Patch, zugeschnitten auf dieAbonnierenPaket. Eine schnelle Überprüfung zeigt, dass dieses Paket nicht auf angewiesen ist, \@dottedtoclineum die Leader zu erzeugen, sondern seinen eigenen Befehl definiert, nämlich \cftdotfill, zu diesem Zweck. Daher ist dies der Befehl, der in diesem Fall gepatcht werden muss:

\documentclass{scrbook}
\usepackage{tocloft}

\makeatletter

\renewcommand{\cftdotfill}[1]{%
  \def\@tempa{#1}%
  \def\@tempb{\cftnodots}%
  \ifx\@tempa\@tempb
    \hfill % <<< this has not been changed
  \else
    \leaders\hbox{$\m@th\mkern #1 mu\hbox{\cftdot}\mkern #1 mu$}%
      \hskip 2em \@plus 1fill \relax % <<< PATCH
  \fi
}

\makeatother

\begin{document}

\tableofcontents

\chapter{One}
Lorem ipsum.

\section{Some words to fill the line, words to fill the line,
    words to fill the line}
Dolor sit amet.

\section{Some words to fill the line, words to fill the line,
    words to fill the line, w}
Consectetur adipisci elit.

\section{Some words to fill the line, words to fill the line,
    words to fill the line, wo}
Numquam faucibus,.

\end{document}

Antwort2

Knuth & Plass's 1981Papier„Absätze in Zeilen aufteilen“ erläutert das Box- und Klebemodell, das dem Zeilenumbruch-Algorithmus von TeX zugrunde liegt, und führt einige dadurch ermöglichte Pyrotechnik vor.

Mit einem dieser Tricks können wir uns ein ehrgeizigeres Ziel setzen: Wenn Füllzeichen und Seitennummerierung aus Platzmangel in einer eigenen Zeile stehen, füllen Sie die vorhergehenden Zeilen bis auf einen festen Abstand rechts mit Füllzeichen auf.

Beachten Sie, wie die rechte Kante der Führungslinien übereinstimmt, wenn wir eine zusätzliche Linie erzwingen.

Sie können steuern, wie weit die zusätzlichen Füllzeichen in den rechten Rand oberhalb der Seitenzahl der nächsten Zeile hineinragen, indem Sie anpassen \rmargin.

Bildbeschreibung hier eingeben

\documentclass[a5paper]{article}     

\usepackage{fontspec}

\setmainfont{Times New Roman}

\parindent=0pt % optional, mimick TOC environment

\newdimen\pagenumwidth \pagenumwidth=0.5cm  % reserved right margin space for page numbers
                                                                                  % leaders will reach flush with it 
\newdimen\rmargin \rmargin=0.5cm  % reserved right margin for leaders followed by linbreal
\newdimen\minspc \minspc=1.6em    % if this much hspace isn't available for leaders, break                                                

\def\fillwith{\hbox to 1ex {\hss.\hss}} 

\def\DotsAndPage#1{%
    \leaders\fillwith\hfil
    \hskip \rmargin 
    \penalty50  
    \hskip - \rmargin plus -1fil  % Thanks Gustavo
    \hbox{}      
    \unskip\leaders\fillwith\hskip \minspc plus 1fill
    \nobreak
    {\bfseries\normalsize \hbox to \pagenumwidth{\hfil#1}}%
    \break}

\begin{document}  

{
\hsize=2.4in
A chapter with a title any \DotsAndPage{1}%\par
A chapter with a title A chapter with a title A chapter with a title\DotsAndPage{13}%\par
A chapter with a title A chapter with a title A chapter with a title with a title so t\DotsAndPage{132}
A chapter with a title A chapter with a title A chapter with a title with a title so th\DotsAndPage{132}
\rmargin=0.25cm % leaders tail bite into right margin
A chapter with a title with a title so th\DotsAndPage{132}
\rmargin=-0.1cm  
A chapter with a title with a title so th\DotsAndPage{132}\par      
}


\end{document}

verwandte Informationen