Titel vor Autor im Inhaltsverzeichnis

Inhalt, Abbildungen, Tabellen, Quellcodes und andere Verzeichnisse


eberlinin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 23. Nov 2022, 15:12

Titel vor Autor im Inhaltsverzeichnis

Beitrag von eberlinin »

Ich arbeite an einem Buch mit mehreren Artikeln und ich scheine einen Fehler im Code zu haben, sodass im Inhaltsverzeichnis der Autor immer nach dem Titel seines Artikels erscheint.

Ich hätte gerne im Inhaltsverzeichnis die Reihenfolge: Autor-Titel.
Bei den Artikeln soll die Reihenfolge aber umgekehrt, also Titel-Autor sein.
Die Seitentitel sollen genauso funktionieren, wie sie es tun, also links: Autor, rechts: Titel.

Die Vorschläge in verschiedenen Foren habe ich schon alle durch, keiner hat funktioniert.

Kann mir bitte jemand helfen?
Herzliche Grüße,
Eva
\documentclass[paper=A4, headings=small]{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\renewcommand*{\raggedsection}{\centering}

\usepackage{scrlayer-scrpage}
\clearpairofpagestyles
\renewcommand{\chaptermarkformat}{}
\cohead{\small{\leftmark}}
\cehead{\small{\rightmark}}
\ofoot*{\pagemark}

\renewcommand{\sectionmark}[1]{}%prevent rewriting \markright 
\newcommand{\chapterauthor}[1]{\authortoc{#1}\printchapterauthor{#1}\markright{#1}}% setting \markright to author

\makeatletter
\newcommand{\printchapterauthor}[1]{%
	{\centering\vspace*{10pt}%
		\linespread{1.1}\large\scshape#1%
		\par\nobreak\vspace*{30pt}}%
}
\newcommand{\authortoc}[1]{%
	\addtocontents{toc}{\vskip-5pt}%
	\addtocontents{toc}{%
		\protect\contentsline{chapter}%
		{\mdseries\scshape\protect\normalsize#1}{}{}
	}
	\addtocontents{toc}{\vskip5pt}%
}
\makeatother
\begin{document}
	\renewcommand*\contentsname{Inhaltsverzeichnis}
	\frontmatter
	\tableofcontents 
	\mainmatter
	\addchap{Das eine Bildnis}
	\chapterauthor{Max Mustermann}
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\addchap{Das andere Musikstück}
	\chapterauthor{Eva Musterfrau}
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\addchap{Literaturverzeichnis}
\end{document}

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Titel vor Autor im Inhaltsverzeichnis

Beitrag von KOMA »

Da Du die \chapterauthor-Anweisung nach \addchap hast und diese Anweisungen genau die jeweilige Information in das Inhaltsverzeichnis schreiben, ist es kein Wunder, dass im Inhaltsvereichnis der Autor nach dem Kapitel steht. Einfach die Anweisungen vertauschen und die Ausgabe des Autors im Dokument als Präambel zum nachfolgenden Kapitel setzen:
\documentclass[paper=A4, headings=small]{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\renewcommand*{\raggedsection}{\centering}

\usepackage{scrlayer-scrpage}
\clearpairofpagestyles
\renewcommand{\chaptermarkformat}{}% Wenn du ohnehin immer \addchapt verwendest, ist das überflüssig.
\cohead{\small{\leftmark}}% Das ist schlecht → \setkomafont in der Anleitung, dann muss
\cehead{\small{\rightmark}}% \small hier auch nicht wiederholen. Außerdem hat \small kein Argument.
\ofoot*{\pagemark}

\renewcommand{\sectionmark}[1]{}%prevent rewriting \markright % Warum nicht einfach \automark[chapter]{chapter} oder \automark{chapter}? Man sollte ohnehin mit Option automark oder Anweisung \automark für klare Verhältnisse sorgen.
\newcommand{\chapterauthor}[1]{\authortoc{#1}\setchapterpreamble{\printchapterauthor{#1}\markright{#1}}}% setting \markright to author

\makeatletter
\newcommand{\printchapterauthor}[1]{%
	{\centering
		\linespread{1.1}\large\scshape#1%
		\par\nobreak\vspace*{30pt}}%
}
\newcommand{\authortoc}[1]{% Es würde sich anbieten, stattdessen mit \DeclareTOCStyleEntry einen passenden Eintragstyp zu definieren. Was hier gemacht  wird, ist stattdessen ziemlich von hinten durch die Brust ins Knie.
	\addtocontents{toc}{\vskip-5pt}%
	\addtocontents{toc}{%
		\protect\contentsline{chapter}%
		{\mdseries\scshape\protect\normalsize#1}{}{}
	}
	\addtocontents{toc}{\vskip5pt}%
}
\makeatother
\begin{document}
	\renewcommand*\contentsname{Inhaltsverzeichnis}% Das macht man besser mit \renewcontentsname in der Dokumentpräambel.
	\frontmatter
	\tableofcontents 
	\mainmatter
	\chapterauthor{Max Mustermann}
	\addchap{Das eine Bildnis}
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\addchap{Das andere Musikstück}
	\chapterauthor{Eva Musterfrau}
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\addchap{Literaturverzeichnis}
\end{document}
Was ich sonst noch so angemerkt habe, war nicht gefagt, wird aber in der KOMA-Script-Anleitung erklärt.

eberlinin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 23. Nov 2022, 15:12

Re: Titel vor Autor im Inhaltsverzeichnis

Beitrag von eberlinin »

Erstmals vielen Dank für die Lösung meines Problems!
Wenn ich
\newcommand{\chapterauthor}[1]{\authortoc{#1}\setchapterpreamble{\printchapterauthor{#1}\markright{#1}}}
einbinde und Author und Titel umdrehe, funktionieren sowohl Inhaltsverzeichnis als auch die Titelei bei den einzelnen Aufsätzen.

Leider ist sind nun die AuthorInnen aus den lebendigen Kolumnentitel verschwunden. Wie kann man die am besten wieder einbauen? Leider bin ich an einem Neuaufbau anhand der KOMA-Script Anleitung bisher gescheitert.... :?

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Titel vor Autor im Inhaltsverzeichnis

Beitrag von KOMA »

Ersetze im Beispiel \rightmark durch \rightbotmark und lies die Anweisung auch in der Anleitung nach, damit du verstehst, was der Unterschied ist und warum \rightmark an der Stelle nicht funktioniert.

eberlinin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 23. Nov 2022, 15:12

Re: Titel vor Autor im Inhaltsverzeichnis

Beitrag von eberlinin »

1. Leider funktioniert das Ersetzen von \rightmark mit \rightbotmark nicht. Ich verstehe leider auch nicht, warum das etwas helfen soll, denn ich habe ja nur zwei Marken, die immer gleich bleiben: links Author und rechts Titel und keine zweiteiligen Marken.

Was ich auch noch nicht ganz durchschaue ist, welcher Teil des Codes ist dafür zuständig ist, dass der Autor als Teil der Marke erkannt wird? In den Erklärungen finden sich nur die verschiedenen Ebenen \part, \chapter, \section etc. als Seitentitel.
2. Wenn ich mit \automark[chapterauthor]{chapter} die Kolumnentitel zu machen versuche, bekomme ich den Fehler "numbering depth of chapterauthor unknown".

Danke für die Hilfe!
\documentclass[paper=A4, headings=small]{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\renewcommand*{\raggedsection}{\centering}
\setkomafont{pagehead}{\small}
\usepackage{etoolbox}

\usepackage{scrlayer-scrpage}


%\renewcommand{\sectionmark}[1]{}%prevent rewriting \markright % Warum nicht einfach \automark[chapter]{chapter} oder \automark{chapter}? Man sollte ohnehin mit Option automark oder Anweisung \automark für klare Verhältnisse sorgen.
\newcommand{\chapterauthor}[1]{\authortoc{#1}\setchapterpreamble{\printchapterauthor{#1}\markright{#1}}}% setting \markright to author
\clearpairofpagestyles
\cohead{\leftmark}
\cehead{\rightbotmark}
\ofoot*{\pagemark}
\automark[chapterauthor]{chapter}%hier be

\makeatletter
\newcommand{\printchapterauthor}[1]{%
	{\centering
		\linespread{1.1}\large\scshape#1%
		\par\nobreak\vspace*{30pt}}%
}
\newcommand{\authortoc}[1]{% Es würde sich anbieten, stattdessen mit \DeclareTOCStyleEntry einen passenden Eintragstyp zu definieren. Was hier gemacht  wird, ist stattdessen ziemlich von hinten durch die Brust ins Knie.	
%	\addtocontents{toc}{\vskip-5pt}%
%	\addtocontents{toc}{%
%		\protect\contentsline{chapter}%
%		{\mdseries\scshape\protect\normalsize#1}{}{}
%	}
%	\addtocontents{toc}{\vskip5pt}%

%Statt mir ins Knie zu schießen (s.o.) probier ich mal das, was schon mal funktioniert hat:
\RedeclareSectionCommand[%
beforeskip=-1sp,%
afterskip=1.5\baselineskip plus .1\baselineskip minus .2\baselineskip,%
tocentrynumberformat=\@gobble,
tocnumwidth=0pt,
toclinefill=\TOCLineLeaderFill,
toconstarthigherlevel=\vspace{-.75\baselineskip}
]{chapter}

\DeclareTOCStyleEntry[
	level=\parttocdepth,
	beforeskip=10pt,
	indent=0pt,
	numwidth=0pt,
	linefill=\hfill,
	entryformat=\scshape,
	pagenumberbox=\@gobble
]{tocline}{chapterauthor}
}
\makeatother
\begin{document}
	\renewcommand*\contentsname{Inhaltsverzeichnis}% Das macht man besser mit \renewcontentsname in der Dokumentpräambel. %(hat leider bei mir nicht funktioniert)
	\frontmatter
	\tableofcontents 
	\mainmatter
	\chapterauthor{Max Mustermann}
	\addchap{Das eine Bildnis}
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\chapterauthor{Eva Musterfrau}
	\addchap{Das andere Musikstück}
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\blindtext
	\addchap{Literaturverzeichnis}
\end{document}

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Titel vor Autor im Inhaltsverzeichnis

Beitrag von KOMA »

Könnte sein, dass ich nicht ganz verstanden habe, was Du willst.
  1. Auf jeder Seite im Kopf in der Mitte: Autor: Kapiteltitel.
  2. Auf linken Seiten im Kopf in der Mitte: Autor. Auf rechten Seiten im Kopf in der Mitte: Kapiteltitel.
Ich bin bisher von 2. ausgegangen. Dann würde eine gute Lösung beispielsweise so aussehen:
\documentclass[paper=A4, headings=small]{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\renewcommand*{\raggedsection}{\centering}

\usepackage{scrlayer-scrpage}
\automark{chapter}% Automatisch erst einmal nur Kapitel in die Kopfzeile
                  % eintragen.
\renewcommand*{\chaptermark}[1]{% Allerdings nicht wie in der Voreinstellung
                                % in die linke Marke mit löschen der rechten,
  \markright{#1}% sondern in die rechte Marke.
}
\clearpairofpagestyles
\chead{\headmark}
\ofoot*{\pagemark}
\setkomafont{pagehead}{\small}% Kopf in \small

\setcounter{secnumdepth}{-\maxdimen}% Gliederungsbefehle ohne Nummern

% Neuen Verzeichniseintragstyp chapterauthor definieren.
\DeclareTOCStyleEntry[%
  level=\chaptertocdepth,% Gleiche Ebene wie Kapitel.
  beforeskip:=chapter,
  indent=0pt,% Kein Einzug.
  numwidth=0pt,% Da wir ohnehin nicht nummerieren, braucht es auch keine
               % Breite für die Nummer.
  linefill=\hfill,% Keine Pünktchen
  pagenumberbox=\gobble,% keine Seitenzahl
]{tocline}{chapterauthor}
\newcommand*{\gobble}[1]{}  
\DeclareTOCStyleEntry[beforeskip=0pt]{chapter}{chapter}% Kein Abstand mehr vor
                                % Kapiteleinträgen im Inhaltsverzeichnis  
  
\newcommand*{\chapterauthor}[1]{%
  \cleardoublepage% Damit die Seite für den Eintrag stimmt, falls das doch
                  % mein eine Seite mit ausgegeben werden soll.
  \addchapterauthortocentry{}{#1}%
  \markleft{#1}% Autor in die linke Marke.
  \setchapterpreamble{%
    \centering\usekomafont{chapterauthor}{#1\par}%
    \vspace{2\baselineskip}%
  }%
}
\newkomafont{chapterauthor}{\large\scshape}

\newcommand{\addchapterauthortocentry}[2]{%
  \addtocentrydefault{chapterauthor}{#1}{#2}%
}

\renewcaptionname{ngerman}{\contentsname}{Inhaltsverzeichnis}

\begin{document}
\frontmatter
\tableofcontents 
\mainmatter
\chapterauthor{Max Mustermann}
\chapter{Das eine Bildnis}
\blindtext[13]
\chapterauthor{Eva Musterfrau}
\chapter{Das andere Musikstück}
\blindtext[13]

% Ab hier soll der Abstand im Inhaltsverzeichnis nun wieder vor dem Kapitel
% stehen.
\addtocontents{toc}{%
  \protect\DeclareTOCStyleEntry[beforeskip:=chapterauthor]{chapter}{chapter}%
}
\addchap{Literaturverzeichnis}
\end{document}
Ich will auch nicht verschweigen, dass es recht trickreiche Alternativlösungen gibt, beispielsweise:
% Achtung: Diese Lösung verwendet Interna von KOMA-Script bei denen nicht garantiert ist,
% dass sie auch in Zukunft so funktionieren!
\documentclass[ngerman,headings=small,headings=optiontotocandhead]{scrbook}
\usepackage{babel}
\usepackage{blindtext}
\renewcommand*{\raggedsection}{\centering}

\usepackage[automark]{scrlayer-scrpage}
\renewcommand*{\chaptermark}[1]{%
  \markboth{\chapterauthor}{#1}%
}
\clearpairofpagestyles
\chead{\headmark}
\ofoot*{\pagemark}
\setkomafont{pagehead}{\small}% Kopf in \small

\setcounter{secnumdepth}{-\maxdimen}% Gliederungsbefehle ohne Nummern

\makeatletter
\newcommand*{\chapterauthor}{}% Darin merken wir uns den Kapitelautor.
\FamilyStringKey[.section]{KOMAarg}{author}{\chapterauthor}% Den wir ab sofort per Option zu \chapter etc. setzen können.
\AddtoDoHook{heading/preinit/chapter}{\renewcommand*{\chapterauthor}{}\@gobble}% Natürlich muss er auch bei jedem \chapter leer initialisiert werden.

\renewcommand*{\chapterlinesformat}[3]{%
  \@hangfrom{#2}{#3}% Das ist die normale Ausgabe.
  \ifx\chapterauthor\@empty\else% Wenn der Kapitelautor gesetzt wurde, geben
                                % wir den aus
    \vskip 10pt
    \usekomafont{chapterauthor}{\chapterauthor\par}%
  \fi
}

\NewCommandCopy\savedaddchaptertocentry\addchaptertocentry
\renewcommand*{\addchaptertocentry}[2]{%
  \ifx\chapterauthor\@empty% Wenn der Kapitelautor leer ist
    \savedaddchaptertocentry{#1}{#2}% schreiben wir einen normalen Eintrag
  \else
    \savedaddchaptertocentry{#1}{\chapterauthor\newline#2}% sonst einen mit
                                % Autor (hier könnte man auch einen eigenen
                                % Eintrag für den Autor erzeugen)
  \fi
}
  
\makeatother

\renewcaptionname{ngerman}{\contentsname}{Inhaltsverzeichnis}

\newkomafont{chapterauthor}{\large\scshape}

\begin{document}
\frontmatter
\tableofcontents 
\mainmatter
\chapter[author=Max Mustermann]{Das eine Bildnis}
\blindtext[13]
\chapterauthor{Eva Musterfrau}
\chapter[author=Eva Musterfrau]{Das andere Musikstück}
\blindtext[13]

\automark[chapter]{chapter}% Ab hier eine andere Markierung verwenden.
\addchap{Literaturverzeichnis}
\blindtext[13]
\end{document}
Falls du stattdessen 1. willst, sieht die Lösung natürlich etwas anders aus.

BTW: Dass \automark[chapterauthor]{chapter} nicht funktioniert, ist übrigens kein Wunder. \chapterauthor ist kein Gliederungsbefehl und deshalb chapterauthor keine scrlayer-scrpage bekannte Gliederungsebene. Das hatte ich deshalb auch nie angeregt, jedenfalls nicht, solange man nicht einen Gliederungbefehl \chapterauthor per \DeclareNewSectionCommand definiert.
Zuletzt geändert von KOMA am Mi 30. Nov 2022, 17:00, insgesamt 1-mal geändert.

eberlinin
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 23. Nov 2022, 15:12

Re: Titel vor Autor im Inhaltsverzeichnis

Beitrag von eberlinin »

Danke! Danke!! Danke!!! (Ich kann da gar nicht genügend Rufzeichen setzen!) Ich habe an diesen Problemen sehr lange herumgesucht und jetzt funktioniert es wunderbar! :D :D :D :D
Danke auch für die Erklärungen, aufgrund derer ich jetzt einiges viel besser verstehe!
Danke für die viele Arbeit mit meinem Code!
Herzliche Grüße,
Eva

Antworten