Sie sind hier

\page Einstellungen ändern

Ich benutze die Klasse scrbook. Um den Anhang vom übrigen Text abzutrennen, habe ich einen \part{Anhang} eingefügt. Dies ist der einzige \part im Dokument, sodass er mit "Teil I." nummeriert wird. Ich habe verschiedene andere Möglichkeiten ausprobiert, um den Anhang abzutrennen, diese gefällt mir aber am Besten. Trotzdem habe ich auch dabei noch ein paar Probleme bzw. Fragen.

  1. Da der Anhang der einzige \part ist, sind die Beschriftung "Teil I." und die "I." im Inhaltsverzeichnis überflüssig und sogar unsinnig. Gibt es eine Möglichkeit diese Nummerierung zu entfernen?
  2. Die Seitennummerierung auf der \part-Seite sieht auch sehr merkwürdig aus. Kann ich diese irgendwie entfernen?

Zu 1.: Ich habe es schon mit

\part*{Anhang}
\addcontentsline{toc}{part}{\protect{Anhang}}

versucht. Das führt allerdings dazu, das die Links im Inhaltsverzeichnis nicht richtig gesetzt werden. Der Link auf den Anhang verweist dann auf die erste Seite des ersten Anhangkapitels statt auf die Seite auf der "Anhang" steht.

Zu 2.: Ich habe dazu zwar einen Foreneintrag hier gefunden, dort wird allerdings auf das Handbuch hingewiesen, wo ein Beispiel dazu stehen soll. Der Eintrag ist allerdings schon etwas älter und ich konnte das genannte Beispiel in der aktuellen "scrguide.pdf" Datei nicht finden.

"Wer lesen kann ist klar im Vorteil!" ist einer der Lieblingssprüche meiner Schwester und er stimmt.
Nach einer erneuten Lektüre des Handbuchs habe ich herausgefunden, das man mit \renewcommand*{\partformat}{} ja ganz einfach den "Teil I." vor dem Namen des \part entfernen kann. Dann kann man auch ruhig \part einsetzen und der Link im Inhaltsverzeichnis stimmt. Aber wie man die "I." vor dem \part "Anhang" im Inhaltsverzeichnis entfernt, habe ich noch nicht herausgefunden.

Ich habe es übrigens auch mit \addpart statt \part* versucht, was die zweite angegebene Zeile überflüssig macht, aber den Anhang bei den AcrobatReader Lesezeichen zum letzten Kapitel des Hauptteils hinzufügt und auch den Link im Inhaltsverzeichnis entsprechend setzt (obwohl die Seitenangabe dann zumindest richtig ist).

War ja eigentlich auch ganz einfach, man muss eben nur die Aussagen mehrerer Internetseiten (Foreneinträge) richtig kombinieren, schon ist die Seitenzahl auf der \part Seite mit \renewcommand*{\partformat}{\thispagestyle{empty}} leicht entfernt.

Jetzt versuche ich nur noch das \part Kommando aus scrbook entsprechend neu zu definieren, damit das inhaltsverzeichnis auch zum Kapitel passt (also die "I." aus Problem Nummer 1 wegfällt).

Ich habe es geschafft das entsprechende Kommando in der scrbook Datei neu zu definieren und sogar beide Probleme in einer Neudefinition zu lösen. Es hilft schon viel, wenn man die Probleme einfach mal in einem Forum genau aufschreibt. Dann gelangt man auch leichter selbst zu einer Lösung.

Hier der entsprechende Code, den ich in den Header eingefügt habe:

\makeatletter
\renewcommand*{\@part}{}
\def\@part[#1]#2{%
  \refstepcounter{part}%
  \@maybeautodot\thepart%
  \addcontentsline{toc}{part}{#1}%
  \begingroup
    \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
    \raggedpart
    \interlinepenalty \@M
    \normalfont\sectfont\nobreak
    \ifnum \c@secnumdepth >-2\relax
      \size@partnumber{\thispagestyle{empty}}%
      \partheadmidvskip
    \fi
    \size@part{#2}\strut%
    \partmark{#1}\par
  \endgroup
  \@endpart
}\makeatother

Nun bleibt nur noch die Frage, ob das vielleicht auch kürzer geht!?

Bild von Markus Kohm

Die Umdefinierung interner Anweisungen (hier \@part) ist immer gefährlich. In dieser Umdefinierung weitere interne Anweisungen (hier beispielsweise \@maybeautodot, \par@updaterelative, \size@partnumber und \@endpart) zu verwenden, ist brandgefährlich. Ein Verlag hat sich mit solchem Murks vor kurzem mehrere Klassen zerschossen und kann nun sehen, wie er das wieder gerade biegt.

Das Problem mit \addpart und Acrobat ist übrigens kein Problem von Acrobat, sondern eines mit einer fehlenden, dokumentierten Schnittstelle in hyperref. Diese Schnittstelle, die es Klassen- und Paketautoren ermöglichen sollte, auf die automatisch gesetzten Anker und Bookmarks Einfluss zu nehmen, habe ich schon vor Jahren nachgefragt. Ich bin auch nicht der einzige Paketautor, der sich diese schon länger wünscht. Aus unerfindlichen Gründen implementiert der hyperref-Autor aber lieber immer neue Dinge, als diese dringend benötigte Schnittstelle in Angriff zu nehmen.

Ich habe mir zunächst einmal die Definition von \@part aus der scrbook.cls Datei kopiert und dann

  \ifnum \c@secnumdepth >-2\relax
    \refstepcounter{part}%
    \@maybeautodot\thepart%
    \addcontentsline{toc}{part}{\protect\numberline{\thepart}#1}%
  \else
    \addcontentsline{toc}{part}{#1}%
  \fi

durch

\refstepcounter{part}%
\@maybeautodot\thepart%
\addcontentsline{toc}{part}{#1}%

ersetzt, um den TOC-Eintrag anzupassen, und etwas weiter unten

\ifnum \c@secnumdepth >-2\relax
  \size@partnumber{\partformat}%
  \partheadmidvskip
\fi

durch

\ifnum \c@secnumdepth >-2\relax
  \size@partnumber{\thispagestyle{empty}}%
  \partheadmidvskip
\fi

ersetzt, um die Seitenzahl zu entfernen.
Die von dir erwähnten internen Anweisungen habe ich alle so belassen wie sie waren. Ich habe es ja auch nur im Header meines Dokumentes neu definiert, sodass eigentlich nichts weiter Schlimmes passieren dürfte. Und soweit passiert ja auch genau das, was ich will. In der scrbook.cls Datei oder ähnlichen werde ich natürlich nicht rumpfuschen. Es war schon kompliziert genug eine eigene .bst Datei zu basteln auch wenn ich das im Endeffekt hingekriegt habe.

Gibt es denn eine Möglichkeit sicherer vorzugehen und trotzdem passende Links und Einträge ins Inhaltsverzeichnis zu erhalten, außer zu warten, bis das hyperref-Paket vielleicht irgendwann geändert wird und \addpart funktioniert?

Ich hatte schon vermutet, dass es an hyperref und nicht an Acrobat liegt. Ich wollte nur das Ergebnis beschreiben. Ich hatte schon einmal ein Problem mit von hyperref falsch gesetzten Links durch eine Unverträglichkeit mit einem anderen Paket, es kommt also nicht so überraschend. Allerdings konnte ich dieses Problem lösen und habe auch keine für mich brauchbare Alternative zu hyperref gefunden. Aber es gibt ja so viele Pakete, kennst du vielleicht ein Paket, das das gleiche kann wie hyperref und nicht solche Problem mit sich bringt?

Bild von Markus Kohm

Umso bedauerlicher ist, dass der Autor von hyperref die längst nachgefragte Schnittstelle nicht einbaut oder nicht dokumentiert. Natürlich könnte ich hyperref studieren und dann auf undokumentierte Interna von hyperref aufbauend eine Lösung bauen. Das Problem dabei ist aber dasselbe wie mit Deiner Bastellösung, die auf undokumentierten Interna von KOMA-Script basiert: Mit der nächsten Release kann das bereits zu unvorhersehbaren Problemen führen und die Arbeit dann von vorn beginnen.

Aus genau dem gleichen Grund solltest Du alle internen Anweisungen von KOMA-Script durch dokumentierte Wege ersetzen:

\@maybeautodot\thepart%

Warum hast Du das überhaupt drin? Du willst den Zähler doch gar nicht ausgegeben haben. Also würde ich die Zeile komplett weglassen. da sie in diesem Fall sogar zu unerwünschten Ergebnissen führen kann.

  \size@partnumber{\partformat}%

Hier ist in der KOMA-Script-Anleitung \usekomafont{part} an Stelle von \size@partnumber dokumentiert.
Und für das Setzen von Absatzabstand, Absatzeinzug und Absatzendzeilenfreiraum ist in der KOMA-Script-Anleitung ebenfalls ein Weg dokumentiert. Ansonsten kann man dort aber auch den Standard-LaTeX-Weg mit \setlength verwenden, statt irgendwelche Interna von KOMA-Script, die innerhalb von KOMA-Script hauptsächlich deshalb verwendet werden, weil sie immer gleiche Anweisungen abkürzen. Gerade solche Dinge "Abkürzungsmakros" sind immer recht provisorisch. Sollte es je einen dokumentierten Weg in dieser Richtung geben, verschwinden diese Abkürzungsmakros oftmals. Das ist nämlich der Hauptvorteil von ihnen: Man findet relevante Stellen, die geändert werden müssen, leichter. Die landläufige Meinung ist ja eher, dass Programmierer diese Dinger aus Faulheit implementieren. Das Gegenteil ist der Fall: Sie entstehen in weiser Voraussicht.

Eigentlich willst Du doch das Verhalten, das \part an den Tag legt, wenn secnumdepth die Nummerierung von \part untersagt. Also könntest Du auch etwas wie (nur skizziert):

\newcommand*{\Part}[2][\PartArg]{%
  \begingroup
    \def\PartArg{#2}% Wenn das optionales erste Argument leer war,
                    % ist es jetzt identisch mit dem zweiten.
    \c@secnumdepth=-2\relax% secnumdepth lokal setzen
    \part[{#1}]{#2}% \part mit geändertem secnumdepth aufrufen
  \endgroup
}

Falls hyperref damit keinen brauchbaren Bookmark produziert, muss man tatsächlich noch \cleardoublepage und \refstepcounter{part} vor dem Aufruf von \part einfügen.

Eine solche Lösung hat den großen Vorteil, dass sie außer der Repräsentation von secnumdepth als TeX-Zähler \c@secnumdepth keinerlei Interna verwendet. Dieses eine interne Wissen über LaTeX ist in so vielen Paketen und Klassen verwendet, dass es in LaTeX2e garantiert nicht mehr geändert werden wird, also problemlos genutzt werden kann. Alternativ könnte man auch \value{secnumdepth} verwenden.

Mit diesem Code:

\renewcommand*{\partformat}{\thispagestyle{empty}}% Seitenzahl entfernen
\newcommand*{\Part}[2][\PartArg]{%
  \begingroup
    \def\PartArg{#2}% Wenn das optionales erste Argument leer war,
                    % ist es jetzt identisch mit dem zweiten.                
    \c@secnumdepth=-2\relax% secnumdepth lokal setzen
    \part[{#1}]{#2}% \part mit geändertem secnumdepth aufrufen
  \endgroup
}

erreiche ich ja nun sicherer fast alles, was ich erreichen wollte.
Merkwürdigerweise spinnt jetzt der Navigationsbaum (Inhaltsverzeichnis) im TeXnicCenter, aber das ist ja vollkommen egal, wenn nur das Ergebnisdokument stimmt.

Nur ein Problem habe ich mit dieser Lösung noch, das ich eben mit den gefährlichen internen Anweisungen nicht mehr hatte. Im Inhaltsverzeichnis taucht wieder die unsinnige "I." als Nummerierung des \part auf. Ich habe es mit \c@tocdepth=-2\relax analog zu \c@secnumdepth=-2\relax und mit \setcounter{tocdepth}{-2} vor dem \part versucht, ohne Erfolg. Wobei Ersteres überhaupt nichts ändert und Zweiteres lediglich die Ebene "Anhang" aus den Acrobat Lesezeichen entfernt, aber nicht die "I." aus dem TOC.

Wie kann ich mit dieser sicheren Art auch noch diese Nummerierungsebene im TOC entfernen?

Bild von Markus Kohm

Da Du ein vollständiges Minimalbeispiel trotz ausdrücklicher Bitte in der Mail, die Du bei Freischaltung vom Admin bekommen hast, nicht für nötig gehalten hast, kann ich Dir nicht helfen. Mein Minimalbeispiel:

\documentclass{scrbook}
\makeatletter% siehe De-TeX-FAQ
\newcommand*{\Part}[2][\PartArg]{%
  \begingroup
    \def\PartArg{#2}% Wenn das optionales erste Argument leer war,
                    % ist es jetzt identisch mit dem zweiten.                
    \c@secnumdepth=-2\relax% secnumdepth lokal setzen
    \part[{#1}]{#2}% \part mit geändertem secnumdepth aufrufen
  \endgroup
}
\makeatother% siehe \makeatletter
\begin{document}
\tableofcontents
\Part{Test-Teil ohne Nummer}
\end{document}

funktioniert jedenfalls.

Das mit dem Minimalbeispiel war vielleicht (so dachte ich zumindest) bei meiner ursprünglichen Anfrage unnötig und ich hatte ja zwischenzeitlich auch eine funktionierende, wenn auch gefährliche, Lösung gefunden, aber nach deiner letzten Antwort hätte ich wohl tatsächlich besser ein Minimalbeispiel erstellt und in meine letzte Antwort gepackt. Dann wäre mir wohl auch selbst aufgefallen, dass ich einfach nur \makeatletter und \makeatother vergessen hatte. Nachdem ich diese Zeilen hinzugefügt hatte, kriegte ich aber leider die Seitenzahl auf der "Anhang"-Seite mit der alten Methode nicht mehr weg. Das hat wohl (zumindest deutet das Minimalbeispiel darauf hin) damit zu tun, dass ich den Seitenstil mit "scrpage2" umdefiniert habe. Ich habe es jetzt durch Einfügen von \clearscrheadfoot geschafft die Seitenzahl wieder zu entfernen.

Hier ist das Minimalbeispiel:

\documentclass{scrbook}

%% Einstellungen für Kopf- und Fußzeile ändern %%%%%%
\usepackage{scrpage2}

\clearscrheadfoot% Löscht vorige Einstellungen für Kopf und Fuß
\pagestyle{scrheadings}% Neuer Seitenstil
\ihead{\headmark}% Kolumnentitel oben, innen:
		   % Kapitel auf geraden Seiten
		   % Abschnitt auf ungeraden Seiten
\ohead[\pagemark]{\pagemark}% Seitenzahl oben, außen
\setheadsepline{0.4pt}% Linie unter Kopfzeile
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
\makeatletter
\newcommand*{\Part}[2][\PartArg]{%
  \begingroup
    \def\PartArg{#2}% Wenn das optionales erste Argument leer war,
                    % ist es jetzt identisch mit dem zweiten.            
    \c@secnumdepth=-2\relax% secnumdepth lokal setzen
    \clearscrheadfoot% Löscht vorige Einstellungen für Kopf und Fuß	
    \part[{#1}]{#2}% \part mit geändertem secnumdepth aufrufen
  \endgroup
}
\makeatother

\begin{document}
  \Part{Anhang}
  \chapter{Test}
  Hallo
  \newpage
  Seitenkopf wieder richtig!
\end{document}

Entschuldige, dass ich das nicht bereits früher eingefügt habe, kommt nicht wieder vor.

Ich hoffe, so habe ich nun nicht nur das erreicht, was ich wollte, sondern das auch noch auf einem sicheren Weg? Oder ist da noch irgendetwas dran auszusetzen (mal von persönlichen Geschmacksfragen beim Aussehen abgesehen)?

Der Teil hinter \Part{Anhang} dient nur dazu, sicherzustellen, dass der Seitenstil tatsächlich nur lokal geändert wird.

Vielen Dank für die ausführliche und prompte Hilfe!

P.S.: Super, dass man sich hier erst die Vorschau ansehen muss (bzw. dass es überhaupt eine gibt)! Die Leerzeichen im Minimalbeispiel werden durch Copy&Paste ja schon ziemlich aufgebläht, was man in der Vorschau viel besser sehen kann.

Bild von Markus Kohm

Ich hatte schlicht den Seitenstil für \part-Seiten nicht geändert, weil das für die Demonstration, dass die Teil-Nummer im Inhaltsverzeichnis nicht auftaucht, nicht notwendig war.

\documentclass{scrbook}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Einstellungen für Kopf- und Fußzeile ändern %%%%%%
%% Ich lasse das mal drin, um zu zeigen, dass es auch damit funktioniert.
%% Es geht aber genauso auch ohne scrpage2.
\usepackage{scrpage2}

\clearscrheadfoot% Löscht vorige Einstellungen für Kopf und Fuß
\pagestyle{scrheadings}% Neuer Seitenstil
\ihead{\headmark}% Kolumnentitel oben, innen:
                   % Kapitel auf geraden Seiten
                   % Abschnitt auf ungeraden Seiten
\ohead[\pagemark]{\pagemark}% Seitenzahl oben, außen
\setheadsepline{0.4pt}% Linie unter Kopfzeile
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Eigene Part-Seiten definieren %%%%%%%%%%%%%
%% Das ist so zwar nicht schön, stellt aber die aktuelle Version von hyperref
%% zufrieden.
\renewcommand*{\partpagestyle}{empty}% Part-Seite ohne 
                                     % Kolumnentitel und Seitenzahl
\makeatletter% siehe De-TeX-FAQ
\newcommand*{\Part}[2][\PartArg]{%
  \begingroup
    \def\PartArg{#2}% Wenn das optionales erste Argument leer war,
                    % ist es jetzt identisch mit dem zweiten.            
    \c@secnumdepth=-2\relax% secnumdepth lokal setzen
    \part[{#1}]{#2}% \part mit geändertem secnumdepth aufrufen
  \endgroup
}
\makeatother% siehe \makeatletter

\begin{document}
\tableofcontents
\Part{Anhang}
\chapter{Test}
Hallo
\newpage
Seitenkopf wieder richtig!
\end{document}

Danke nochmal, damit dürfte es ja dann jetzt komplett und sicher sein.

Ist denn deine Variante mit \renewcommand*{\partpagestyle}{empty} besser/stabiler/sicherer/eleganter (etc.) als die von mir angegebene Version mit \clearscrheadfoot?

Bild von Markus Kohm

%% Ich lasse das mal drin, um zu zeigen, dass es auch damit funktioniert.
%% Es geht aber genauso auch ohne scrpage2.

Deine Lösung mit \cearscrheadfoot funktioniert hingegen nur mit scrpage2 und auch nur, wenn der Seitenstil von \part entweder zu scrheadings oder scrplain führt. Wenn das Funktionieren aber schon von \partpagestyle abhängt, dann kann man partpagestyle auch gleich auf den Seitenstil setzen, den man eigentlich haben will. Oder?

Diesen Kommentar habe ich dann wohl nicht richtig verstanden.
Das die Lösung ohne scrpage2 erreicht werden kann war mir ja klar. Nur die alte Lösung über \renewcommand*{\partformat}{\thispagestyle{empty}} funktionierte damit eben nicht mehr. scrpage2 nutze ich ja auch nur, um den gewünschten Seitenstil zu erreichen, und somit war es Teil des Problems die Seitenzahl zu entfernen (und deshalb im Minimalbeispiel), und nicht Teil der Lösung.
Ich dachte, du wolltest mit dem Kommentar eher sagen, dass es so auch mit scrpage2 geht.

Es leuchtet mir aber natürlich ein, dass die Variante mit \partpagestyle allgemeingültiger und somit besser ist, weil ich dann unter Umständen bei anderen Dokumenten scrpage2 gar nicht einbinden muss und trotzdem noch den gleichen Stil für \part beibehalten kann. Deshalb habe ich ja auch nachgefragt, denn du kennst dich ja mit komascript hoffentlich besser aus, als ich es, selbst mit dem gründlichsten Studium der Dokumentation, je tun werde. (Die Dokumentation ist übrigens eine der besten Paket-Dokumentationen die mir untergekommen sind, auch wenn sie sich bei solchen Problemen nicht zum "eben mal Nachschlagen" eignet. Gratulation und Dank dafür)

Bild von Markus Kohm

Ich dachte, du wolltest mit dem Kommentar eher sagen, dass es so auch mit scrpage2 geht.

Ich wollte damit eigentlich sagen, dass es so sowohl mit als auch ohne scrpage2 geht.

Ich bin übrigens ziemlich sicher, dass es Leute gibt, die sich mit KOMA-Script besser auskennen als ich, zumindest wenn es um die Frage geht, was alles an Optionen, Befehle, Umgebungen etc. gibt und wie die zugehörige Syntax lautet. Ich brauche schon seit zehn Jahren keinen neuen Features in KOMA-Script mehr und könnte ohne KOMA-Script-Anleitung und Index die meisten Fragen zu KOMA-Script nur schwerlich beantworten. Das ist übrigens auch ein Grund, warum ich Minimalbeispiele brauche: Ich probiere gerne aus, wenn ich meine, einen Verdacht zu haben. Ich blättere kaum lieber als andere Leute in einer Anleitung. Und wenn ich die selbst geschrieben habe, ist das noch öder. Ich kann Dir auch verraten, was mir an der KOMA-Script-Anleitung fehlt: Syntaxinformationen im Index. Die wird es aber bis auf weiteres nicht geben, weil das mit der Art und Weise, wie der Index derzeit erzeugt wird, nicht gut funktioniert.

Bild von Markus Kohm

Inzwischen sollte \addpart wie gewünscht funktionieren, so dass die ganzen Umstände der anderen Lösung entfallen können.

Comments for "\page Einstellungen ändern" abonnieren