
Al diseñar mi tesis, el editor requiere al menos dos puntos en el ToC, o la línea debe dividirse (lo que, si se hace manualmente, causa otros problemas). ¿Hay alguna idea que dos cree una solución más elegante que la tocloft
\renewcommand\cftdotsep{..}
cosa (que crea nuevos problemas en otras líneas)?
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}
Respuesta1
Una forma es parchear directamente el \@dottedtocline
comando interno para que produzca líderes que tengan al menos dos em de largo (digamos):
\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}
Amboslibroy ellibro de escrituraEn última instancia, las clases se invocan \@dottedtocline
para producir entradas de contenido con líderes, por lo que el parche debería funcionar.
Producción:
Suma
Olvidé mencionar que, como siempre, las \patchcmd
facilidades brindadas por elcaja de herramientasEl paquete se puede utilizar en lugar de \renewcommand
(que requiere repetir la definición completa):
\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}
Segunda adición
Un comentario requiere un parche similar diseñado para eltocloftpaquete. Una inspección rápida revela que este paquete no se basa en \@dottedtocline
producir líderes, sino que define su propio comando, es decir \cftdotfill
, para ese propósito. Por tanto, este es el comando que hay que parchear en este caso:
\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}
Respuesta2
Knuth y Plass 1981papel"Romper párrafos en líneas" explica el modelo de caja y pegamento subyacente al algoritmo de salto de línea de TeX y muestra algunas pirotecnia habilitadas por este.
Usando uno de esos trucos, podemos fijarnos un objetivo más ambicioso: cuando los líderes y el pagenum se colocan en su propia línea por falta de espacio, llenar las líneas anteriores con líderes dentro de un margen fijo desde la derecha.
Observe la forma en que el borde derecho de los líderes coincide cuando forzamos una línea adicional.
Puede controlar cuánto sobresalen las líneas guía adicionales en el margen derecho encima del número de página que aparece en la siguiente línea ajustando \rmargin
.
\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}