Sie sind hier

Text oder sonstiges links und rechts neben Kapitelüberschriften?

Hallo,

ich möchte Kapitelüberschriften so formatieren, daß nur der Eintrag von \chapter{} zentriert gesetzt wird, und links und rechts davon je eine horizontale Linie bis zum Satzspiegelrand, auf halber x-Höhe, mit Abstand zum Text. Wie man die Zeile darüber, mit »Kapitel 1«, entfernt, habe ich schon rausgefunden, auch wie man die Kapitelüberschrift zentriert und direkt davor etwas in dieselbe Zeile setzt, aber nicht danach. Geht das überhaupt? In meinem Dokument sind die Kapitelüberschriften alle sehr kurz, am längsten ist »Special Credits«, deswegen sollte es da keine Komplikationen geben.

Bild von Markus Kohm

Zukünftig oder wenn Dir diese Antwort nicht genügt, machst Du bitte ein vollständiges Minimalbeispiel.

Unter der Voraussetzung, dass Deine Angaben korrekt sind, wobei ich da wegen des Entfernen von »Kapitel 1« so meine Zweifel habe, weil das bei den KOMA-Script-Klassen in der Voreinstellung gar nicht existiert, würde beispielsweise das funktionieren:

\documentclass{scrreprt}[2015/10/03]
 
% Das geht nur, solange es nur einzeilige Überschriften gibt:
\renewcommand*{\chapterlinesformat}[3]{%
  \midrulefill\nobreak\mbox{#2#3}\nobreak\midrulefill
}
\newcommand*{\midrulefill}{%
  \leavevmode\leaders\hbox{\hss\rule[.5ex]{1ex}{1pt}\hss}\hfill\kern0pt
}
 
\usepackage{mwe}
 
\begin{document}
\tableofcontents
\blinddocument
\end{document}

… das scheint erstmal zu funktionieren. Allerdings mußte ich dafür erstmal auf das aktuelle KOMA-Script aktualisieren, ich hatte noch 3.09 von 2011. Dabei dachte ich, ich hätte schon wenigstens TL2014 auf meinem Rechner, aber es ist TL2013. Mit KOMA-Script 3.19a hab ich jetzt eine neues Problem, dazu mache ich einen neuen Thread auf.

Minimalbeispiel konnte ich keines liefern, weil ich ja absolut keinen Plan hatte, wie ich das angehen sollte.

Und ja, das Entfernen von »Kapitel 1« ist Quatsch, das hatte ich mit den Teileüberschriften gemacht, ursprünglich hattee ich die Artikelklasse und Teile anstelle von Kapiteln benutzt.

Bild von Markus Kohm

Du hattest erwähnt, dass Du bereits etwas herausgefunden hast. Das hättest Du zeigen können. Du hättest auch zeigen können, wo genau Du das haben willst. So wusste ich nicht einmal, welche Klasse Du verwendest. Im Idealfall muss ich in einem Minimalbeispiel nur den Code für die gewünschte Änderung einfügen aber nicht erst noch einen Rahmen dafür aus den Fingern saugen. Weiteres zu dem Thema und warum ich auch dann ein Minimalbeispiel haben will, wenn der Fragesteller keine Ahnung hat, wie er sein Ziel erreichen kann, ist übrigens unter dem bereits im letzten Kommentar enthaltenen Link zu finden. Lies es!

Ich bin außerdem draufgekommen, daß ich besser Abschnitte anstelle von Kapiteln benutzen sollte, und hab das deswegen etwas angepaßt. Insgesamt sieht das nun so aus:

\documentclass[parskip=half]{scrreprt}[2015/10/03]
 
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
 
\usepackage[kerning,spacing,final,babel=true]{microtype}
 
\usepackage[urw-garamond]{mathdesign} %\linespread{1.08}?
 
\setkomafont{disposition}{\rmfamily}
 
\renewcommand*{\sectionformat}{}
 
\renewcommand*{\sectionlinesformat}[4]{%
    \ifstr{#1}{section}{%
        \Large\textls{\textsc{\midrulefill\nobreak\mbox{~#3#4~}\nobreak\midrulefill}}\kern0em%
    }{%
        \ifstr{#1}{subsection}{%
            \large\textls{\textsc{\nobreak#3#4\nobreak}}% ursprünglich mbox um #3#4
        }%
    }%
}
 
\newcommand*{\midrulefill}{%
    \leavevmode\cleaders\hbox{\hss\rule[.5ex]{0.1mm}{1pt}\hss}\hfill\kern0pt%
}
 
\renewcommand*{\thesubsection}{\arabic{subsection}}
 
 \usepackage{blindtext}
 
\begin{document}
 
\section{Abschnitt}
 
\blindtext
 
\subsection{Unterabschnitt}
 
\blindtext
 
\end{document}

Das ist wahrscheinlich noch nicht ganz perfekt, aber bei dem Dokument funktioniert es einwandfrei. Das sieht jetzt genau so aus, wie ich wollte. Danke nochmal.

PS: Und mal wieder an der falschen Stelle die Antwort reingeschrieben.

Bild von Markus Kohm

Font-Änderungen gehören nicht in \sectionlinesformat, sondern per \setkomafont oder \addtokomafont vorgenommen, damit sie auch korrekt verarbeitet werden. Man sollte dann natürlich Schriftumschalter verwenden, also \lsstyle und \scshape.

Oder auch \large usw.?

\documentclass[parskip=half]{scrreprt}[2015/10/03]
 
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
 
\usepackage[kerning,spacing,final,babel=true]{microtype}
 
\usepackage[urw-garamond]{mathdesign} %\linespread{1.08}
 
\setkomafont{disposition}{\rmfamily\scshape\lsstyle}
 
\renewcommand*{\sectionformat}{}
 
\renewcommand*{\sectionlinesformat}[4]{%
    \ifstr{#1}{section}{%
        \Large\midrulefill\nobreak\mbox{~#3#4~}\nobreak\midrulefill\kern0em%
    }{%
        \ifstr{#1}{subsection}{%
            \large\nobreak#3#4\nobreak% ursprünglich mbox um #3#4
        }%
    }%
}
 
\newcommand*{\midrulefill}{%
    \leavevmode\cleaders\hbox{\hss\rule[.5ex]{0.1mm}{1pt}\hss}\hfill\kern0pt%
}
 
\renewcommand*{\thesubsection}{\arabic{subsection}}
 
\usepackage{blindtext}
 
\begin{document}
 
\section{Abschnitt}
 
\blindtext
 
\subsection{Unterabschnitt}
 
\blindtext
 
\end{document}

PS: Zefix …

Bild von Markus Kohm

Das kommt dann in den Font für das Element section bzw. subsection.

Wobei im Beispiel ein Wechsel zu scrartcl sinnvoll wäre, weil die Kapitelebene nicht verwendet wird. Bei scrartcl sind die Schriftgrößen dann bereits so voreingestellt, wie im Beispiel gefordert – bei scrreprt übrigens auch.

Mit den Schriftgrößenanweisungen ändern sich die Größen der Überschriften, zumindest bei scrartcl.

Bild von Markus Kohm

    \ifcase \@tempa\relax% big\renewcommand*{\size@section}{\Large}%
      \renewcommand*{\size@subsection}{\large}%\KOMAExecuteOptions{%
…
  headings=big%
}

Oder als Minimalbeispiel:

\documentclass{scrartcl}
 
\begin{document}
\makeatletter\raggedright
Font setting of element \texttt{section}:
\ttfamily\detokenize\expandafter{\size@section}\normalfont\\
Font setting of element \texttt{subsection}:
\ttfamily\detokenize\expandafter{\size@subsection}\normalfont\\
\end{document}

Ergibt bei mir die Auskunft:

Font setting of element section: \Large
Font setting of element subsection: \large

Und

\documentclass{scrartcl}
 
\begin{document}
\section{Section}
\subsection{Subsection}
These are with the default.
 
\setkomafont{section}{\Large}
\setkomafont{subsection}{\large}
\section{Section}
\subsection{Subsection}
These are with
\begin{verbatim}
\setkomafont{section}{\Large}
\setkomafont{subsection}{\large}
\end{verbatim}
 
\end{document}

Zeigt auch gleich große Überschriften.

Aus mir unerfindlichen Gründen stand bei mir headings=small in der Präambel.

Bild von Markus Kohm

In

        \ifstr{#1}{subsection}{%
            \large\nobreak#3#4\nobreak% ursprünglich mbox um #3#4
        }%

fehlt der Sonst-Fall. Da muss noch etwas wie {#3#4} dahinter. Wobei man sich den Fall eigentlich auch komplett sparen kann, weil das ohnehin der Voreinstellung entspricht:

\documentclass[parskip=half]{scrartcl}[2015/10/03]
 
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
 
\usepackage[kerning,spacing,final,babel=true]{microtype}
 
\usepackage[urw-garamond]{mathdesign} %\linespread{1.08}
\usepackage{showframe}% Satzspiegel visualisieren
 
\setkomafont{disposition}{\rmfamily\scshape\lsstyle}
%\setkomafont{section}{\Large}% macht keinen Unterschied, weil Voreinstellung
%\setkomafont{subsection}{\large}% macht keinen Unterschied, weil Voreinstellung
 
\renewcommand*{\sectionformat}{}
 
\renewcommand*{\sectionlinesformat}[4]{%
    \ifstr{#1}{section}{%
        \midrulefill\nobreak\mbox{~#3#4~}\nobreak\midrulefill
    }{%
      #3#4%
    }%
}
 
\newcommand*{\midrulefill}{%
    \leavevmode\cleaders\hbox{\hss\rule[.5ex]{0.1mm}{1pt}\hss}\hfill\kern0pt%
}
 
\renewcommand*{\thesubsection}{\arabic{subsection}}
 
\usepackage{blindtext}
 
\begin{document}
 
\tableofcontents 
 
\section{Abschnitt}
 
\blindtext
 
\subsection{Unterabschnitt}
 
\blindtext
 
\blinddocument
 
\end{document}

Danke.

Wenn ich das so mache wie in deinem Beispiel (oder deinen Code kompiliere), dann geht die Linie rechts neben der Kapitelüberschrift nicht bis ganz an den Rand. Das passiert nicht, wenn ich die Klassenoption parskip=full- verwende (dann geht sie bis an den Rand).

Mit folgender Definition (und ohne parskip=full-) steht die Überschrift alleine und zentriert (hab nachgemessen):

\renewcommand*{\chapterlinesformat}[3]{%
  #2#3
}

Schreibt man #2#3 in eine \mbox, dann steht die Überschrift ganz links.

In meinem Beispiel weiter unten, mit Linien neben den Section-Überschriften, funktioniert es trotz der \mbox. Wenn ich das richtig verstanden habe, sollte sie einen Umbruch verhindern und nur den Text umschließen, nicht einen ganzen Absatz. Warum klappt das dann bei Kapiteln doch nicht? Sind die anders definiert als die Sections? \renewcommand*{\raggedsection}{\centering} wirkt sich ja auch auf Kapitelüberschriften aus.

Bild von Markus Kohm

In meinem Beispiel habe ich jetzt extra noch Paket showframe eingefügt, um zu visualisieren, dass die Linien trotz parskip=half bis an den Rand reichen. Das verwendet allerdings kein Klasse mit Kapitel. Deine Beispiele haben dagegen den bereits genannten \ifstr-Fehler, so dass ich jetzt nicht weiß, worauf Du Dich genau beziehst.

Dass sich an der Stelle \parfillskip auswirken kann, liegt bei Deinem Code jedenfalls an der \mbox. Diese bewirkt, dass das Absatzende im dritten Argument von \chapterlinesformat ignoriert wird. Damit kann sich die durchaus vorhandene lokale Änderung von \parfillskip nicht auswirken. Du musst also in dem Fall selbst nach der Box wieder ein Absatzende einfügen.

Außerdem hast Du in Deinem Codeschnipsel im Argument von \chapterlinesformat ein Leerzeichen durch Zeilenumbruch bzw. verlässt Dich darauf, dass sich das nicht auswirkt. Auf so etwas solltest Du aber besser achten.

Die \mbox solltest Du besser weglassen, wenn Du die Linien nicht setzt. Die stört dann mehr als sie nützt.

Und ja: Der Stil chapter ist anders definiert als der Stil section. Deshalb haben die Befehle \sectionlinesformat und \chapterlinesformat auch unterschiedliche Parameterzahl.

… ich meinte Dein erstes Beispiel. Da geht die rechte Linie nicht bis zum Rand. Von meinen Beispielen meinte ich dann wohl doch das von Dir korrigierte, den \ifstr-Fehler hatte ich schon wieder vergessen.

Dass sich an der Stelle \parfillskip auswirken kann, liegt bei Deinem Code jedenfalls an der \mbox. Diese bewirkt, dass das Absatzende im dritten Argument von \chapterlinesformat ignoriert wird. Damit kann sich die durchaus vorhandene lokale Änderung von \parfillskip nicht auswirken. Du musst also in dem Fall selbst nach der Box wieder ein Absatzende einfügen.

Verstehe ich das so richtig: Das dritte Argument setzt innerhalb der \mbox ein Absatzende (der Länge Null?), außerhalb wird aber wegen der Anwesenheit der \mbox ein weiteres, normales Absatzende gesetzt? Wenn ich nach der rechten Linie noch \kern-1em oder \hspace*{-\parskipfill} schreibe, ändert sich nichts.

Ich habe auch mal die \mbox samt der Linien usw. in \bgroup\setlength{\parskipfill}{0em}\egroup gesetzt, hat aber nichts gebracht.

Die \mbox habe ich ja von Dir übernommen, aus Deinem ersten Beispiel. Da sind übrigens auch zwei nichtauskommentierte Zeilenumbrüche. Die haben bei mir aber keine Wirkung. Die Sache mit den Leerzeichen durch Zeilenumbrüche usw. ist mir bewußt. Der Zeilenumbruch in meinem Codeschnipsel hat bei mir kein Leerzeichen zur Folge, auch dann nicht, wenn die beiden Argumente in einer \mbox sitzen. Vielleicht habe ich deswegen das Zeilenende nicht auskommentiert, normalerweise mache ich das immer.

Die Linien will ich schon, die \mbox und den Rest habe ich nur probeweise weggelassen, um zu sehen, was dann passiert, und dann, wenn man eines nach dem anderen wieder einfügt.

Hier nochmal ein Beispiel mit den verschiedenen Varianten, zum einzelnen Entkommentieren:

\documentclass[%
    DIV=11,%
    parskip=full,%
    paper=a5,%
    numbers=noenddot,%
    12pt,%
    headings=normal,%
    pagesize%
]{scrbook}
 
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
 
\usepackage[kerning,spacing,final,babel=true]{microtype}
 
\usepackage[urw-garamond]{mathdesign}\linespread{1.08}
 
% 1. Überschrift zentriert, in Textschrift, Kapitälchen, gesperrt, ohne Zahl davor:
 
\renewcommand*{\raggedsection}{\centering}
\setkomafont{disposition}{}
\addtokomafont{chapter}{\scshape\lsstyle}
\renewcommand*{\chapterformat}{}
 
% 2. Originalvorschlag:
%    rechte Linie geht nicht bis zum Rand,
%    Überschrift und nachfolgender Text rutschen hoch
 
%\renewcommand*{\chapterlinesformat}[3]{%
%    \midrulefill\nobreak\mbox{#2#3}\nobreak\midrulefill%
%}
 
% 3. Nur die zwei Argumente:
%    kein Unterschied zu 1.
 
%\renewcommand*{\chapterlinesformat}[3]{%
%    #2#3%
%}
 
% 4. Beide Argumente in mbox:
%    Überschrift linksbündig mit Absatzende dahinter,
%    Überschrift und nachfolgender Text rutschen hoch
 
%\renewcommand*{\chapterlinesformat}[3]{%
%    \mbox{#2#3}%
%}
 
% 5a. Hinten Platz wegnehmen: Ohne Wirkung
 
%\renewcommand*{\chapterlinesformat}[3]{%
%    \midrulefill\nobreak\mbox{#2#3}\nobreak\midrulefill\hspace{-\parfillskip}%
%}
 
% 5b.
 
%\renewcommand*{\chapterlinesformat}[3]{%
%    \midrulefill\nobreak\mbox{#2#3}\nobreak\midrulefill\kern-1em%
%}
 
\newcommand*{\midrulefill}{%
    \leavevmode\leaders\hbox{\hss\rule[.5ex]{1ex}{1pt}\hss}\hfill\kern0pt%
}
 
\usepackage{blindtext}
\usepackage{showframe}
 
\begin{document}
\chapter{Kapitel Dings}
\blindtext
\end{document}
Bild von Markus Kohm

Wie in der Anleitung zu lesen ist, enthält das dritte Argument ein Absatzende. Wenn Du nun dieses dritte Argument in eine \mbox packst, dann ist dieses Absatzende also in der \mbox. Absatzenden, Zeilenumbrüche etc. werden innerhalb einer \mbox aber nicht ausgeführt. Damit fehlt das Absatzende. Damit hat auch die lokale Änderung von \parfillskip keine Auswirkung mehr. Deshalb musst Du selbst dafür sorgen, dass nach der \mbox noch ein Absatzende ausgeführt wird. Man vergleiche:

\renewcommand*{\chapterlinesformat}[3]{%
  % Wenn Du sehen willst, was #3 ist:
  \typeout{Argument 3 ist: `\detokenize{#3}'}%
  \midrulefill\nobreak\mbox{#2#3}\nobreak\midrulefill
}

vs.

\renewcommand*{\chapterlinesformat}[3]{%
  % Wenn Du sehen willst, was #3 ist:
  \typeout{Argument 3 ist: `\detokenize{#3}'}%
  \midrulefill\nobreak\mbox{#2#3}\nobreak\midrulefill\par\nobreak
}

BTW: Nach Befehlen werden Leerzeichen und einzelne Zeilenumbrüche ignoriert. Also braucht man an der Stelle das Zeilenende nicht auszukommentieren. Müsste auch unter dem Link zu dem Thema erklärt sein.

Comments for "Text oder sonstiges links und rechts neben Kapitelüberschriften?" abonnieren