Seite 1 von 1

Toc mit Uppercase (Sub-)Sections und Verlinkungen?

Verfasst: Fr 28. Aug 2015, 08:31
von kanra
Guten Morgen!

Ich arbeite gerade an einem Dokument, in dem ich das Inhaltsverzeichnis optisch mittlerweile wie gewünscht hinbekommen habe. Vor allem die Großbuchstaben bei den Sections und Subsections gefallen mir dort sehr gut und sollen auch eigentlich bleiben. Allerdings wird das Dokument sehr lang, von daher soll das Inhaltsverzeichnis im .pdf Verlinkungen zu den jeweiligen Sections etc. enthalten. Mit dem package hyperref ist das zwar kein Problem, leider verträgt sich das aber nicht mit meinen Uppercase Einstellungen (SECTION, SUBSECTION). Weiß da jemand vielleicht eine Alternative?

Vielen Dank schon mal! (-:
\documentclass[captions=nooneline, headings=normal, fontsize=12pt, a4paper, oneside]{scrartcl}

\usepackage[subfigure]{tocloft}
\usepackage{subfigure}
\usepackage{etoolbox}

\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
\setcounter{tocdepth}{4} 
\setcounter{secnumdepth}{4}

\makeatletter %% Uppercase options for (sub)sections 
\patchcmd{\l@section}{#1}{\MakeUppercase{#1}}{}{}
\patchcmd{\l@subsection}{#1}{\MakeUppercase{#1}}{}{}
\patchcmd{\l@subsubsection}{#1}{\itshape{#1}}{}{}
\makeatother

\usepackage[english]{babel}
\usepackage{blindtext}

%\usepackage[colorlinks=false]{hyperref}


\begin{document} %% ------------------------------------------------------------------------------------------------------
	\tableofcontents
	
	\newpage
		
	\section{Section}
	\subsection{Subsection}
	\blindtext
	
	\subsection{Subsection}
	\blindtext
	
	\section{Section}
	\subsection{Subsection}
	\subsubsection{Subsubsection}
	\paragraph{Paragraph}
	\blindtext
	
\end{document}

Verfasst: Fr 28. Aug 2015, 09:34
von sudo
Auf TeX.sx hatte schon mal jemand dein Problem: Uppercase Sections and Subsections on TOC

Verfasst: Fr 28. Aug 2015, 10:02
von kanra
Vielen Dank für die schnelle Antwort!

Ich habe den vorgeschlagenen Code einmal direkt übernommen und das sieht tatsächlich genauso aus wie ich es haben will. Wenn ich dann aber statt article als Dokumentenklasse scrartcl verwende, werden die Einträge wieder mit Kleinbuchstaben dargestellt. Leider kann ich das auch nicht einfach verändern, weil im restlichen Dokument vieles auf KOMA Script ausgerichtet ist. Gibt es für diese Dokumentenklasse evtl. auch eine Möglichkeit?
\documentclass[captions=nooneline, headings=normal, fontsize=12pt, a4paper, oneside]{scrartcl}

%%% Patching the kernel \@sect command
\usepackage{regexpatch}
\makeatletter
\xpatchcmd*{\@sect}{\fi#7}{\fi\@nameuse{format#1}{#7}}{}{}

%%% for sections and subsections we want uppercase
\protected\def\formatsection{\MakeUppercase}
\protected\def\formatsubsection{\MakeUppercase}

%%% the other titles are left unchanged
\let\formatsubsubsection\@firstofone
\let\formatparagraph\@firstofone
\let\formatsubparagraph\@firstofone

%%% the following is necessary only if hyperref is used
\AtBeginDocument{%
	\pdfstringdefDisableCommands{%
		\let\formatsection\@firstofone
		\let\formatsubsection\@firstofone
	}%
}
\makeatother

\usepackage{hyperref}

\setcounter{secnumdepth}{3}

\begin{document}
	
	\tableofcontents
	
	\section{This is a section}
	
	\subsection{This is a subsection}
	
	\subsubsection{This is a subsubsection}
	
\end{document}

Verfasst: Fr 28. Aug 2015, 10:03
von sudo
Ich kann dir da jetzt nicht so schnell helfen. Deshalb ist es ganz wichtig, dass du den Status aktuell hältst!

Verfasst: Fr 28. Aug 2015, 10:42
von Noch so einer
Das Problem ist, dass hyperref das Text-Argument selbst auch noch anfasst, um den Link zu starten und zu beenden. Theoretisch kann man das Problem dadurch lösen, dass man per Option nur die Seitenzahl aber nicht den Text für den Link verwendet. Aber man kann auch die Link-Anweisung lokal passend ändern:
\documentclass{scrartcl}
\usepackage{microtype}
\usepackage{tocstyle}
\usetocstyle{allwithdot}
\settocfeature[toc][1]{entryhook}{\MakeHyperLinkStartUppercase}
\settocfeature[toc][2]{entryhook}{\MakeHyperLinkStartUppercase}
\settocfeature[toc][3]{entryhook}{\itshape}
\usepackage{hyperref}
\makeatletter
\newcommand*\MakeHyperLinkStartUppercase{%
  \let\saved@hyper@linkstart\hyper@linkstart
  \def\hyper@linkstart##1##2##3{%
    \saved@hyper@linkstart{##1}{##2}{\textls[50]{\MakeUppercase{##3}}}}%
}
\makeatother
\usepackage{mwe}
\begin{document}
\tableofcontents
\Blinddocument
\end{document}
Ich habe dabei auch gleich noch der Tatsache Rechnung getragen, dass Versalsatz immer gesperrt werden muss (siehe Tschicholds Hauptregeln der Typografie). Allerdings ist der Ausgleich, den microtype dabei bietet davon abhängig, dass das Kerning der Großbuchstaben passend eingestellt ist. Das ist nicht bei allen Fonts und allen Lochbildnern der Fall. Daher ist auch das nur eine Notlösung.

Statt tocstyle kann sicher auch das Paket etoc verwendet werden. Damit kenne ich mich aber nicht aus.

Ohne hyperref könnte man übrigens einfach:
\documentclass{scrartcl}
\usepackage{microtype}
\usepackage{tocstyle}
\usetocstyle{allwithdot}
\settocfeature[toc][1]{entryhook}{\MakelsUppercase}
\settocfeature[toc][2]{entryhook}{\MakelsUppercase}
\settocfeature[toc][3]{entryhook}{\itshape}
%\usepackage{hyperref}
\newcommand*\MakelsUppercase[1]{\textls[50]{\MakeUppercase{#1}}}
\usepackage{mwe}
\begin{document}
\tableofcontents
\Blinddocument
\end{document}
verwenden.

Merke: Versalsatz ist grundsätzlich mit Vorsicht zu genießen. Man sollte schon über einige typographische Kenntnisse verfügen, um sich daran zu wagen.

Verfasst: Fr 28. Aug 2015, 10:46
von Besserwisser
Besserwisserei für alle, die an offiziellen Infos interessiert sind: subfigure ist übrigens offiziell veraltet. Der offizielle Nachfolger heißt subfig. Empfehlenswert ist IMHO subcaption.

Verfasst: Fr 28. Aug 2015, 10:59
von kanra
Das ist perfekt, vielen Dank!

Danke auch für die Links, da gucke ich gleich mal rein. (-: