Anzeige:
Ergebnis 1 bis 11 von 11

Thema: Seite ausnahmsweise nach Überschrift umbrechen und trotzdem flushbottom erreichen

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468

    Seite ausnahmsweise nach Überschrift umbrechen und trotzdem flushbottom erreichen

    Hallo!

    Da ich ja unsere Agenden etwas überarbeite, kann ich ja mal ein "finetuning"-Problem angehen. Ich habe dort häufig Überschriften, denen kein Text folgt. Teilweise ganze Serien (Predigt - Lied nach der Predigt - Abkündigungen - Lied nach den Abkündigunge - Kollekte). Natürlich ist das ein gewisser Missbrauch der Überschriftenfunktion, aber ich habe ja auch andere Elemente der gleichen Ebene, die durchaus Text haben und evtl. sogar noch feiner unterteilt sind.
    Mit \pagebreak[3] kann ich erfolgreich den Seitenumbruch zwischen zwei solchen textlosen Überschriften erlauben. Allerdings ist die letzte Überschrift auf der Seite dann nicht ganz unten ausgerichtet. Da ich noch andere Elemente (Lieder) habe, die "gröber" aussehen als normaler Text und trotzdem schön unten ausgerichtet sind, fällt das dann doch auf. Im MB sieht es dagegen nicht schlimm aus, aber man sieht es schon, besonders wenn man "Buchansicht" einstellt:
    Code:
    \documentclass[paper=A5,openany,DIV=calc]{scrbook}
    \usepackage[ngerman]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{blindtext}
    \usepackage{hyperref}
    \begin{document}
    \chapter{Vorbereitung}
    \blindtext
    \chapter{Anfang}
    \blindtext
    \section{Überschrift eines Abschnittes mit Text}
    etwas Text
    \section{Überschrift eines Abschnittes mit fehlendem Text}
    \pagebreak[3]
    \section{Überschrift eines Abschnittes mit fehlendem Text}
    \pagebreak[3]
    \section{Überschrift eines Abschnittes mit fehlendem Text}
    \pagebreak[3]
    \section{Überschrift eines Abschnittes mit fehlendem Text}
    \pagebreak[3]
    \section{Überschrift eines Abschnittes mit mehr Text}
    \Blindtext
    \end{document}
    Kann man da was machen und woher kommt dieses Phänomen überhaupt?

  2. #2
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468
    Ich habs:
    \pagebreak[3] ersetzen durch die Konstruktion:

    \vspace*{-\baselineskip}\pagebreak[3]\vspace{\baselineskip}

    Dass der Abstand nach einer section-Überschrift \baselineskip beträgt, habe ich allerdings nach Augenmaß geraten.

  3. #3
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.326
    Warum definierst Du Dir für Pesudo-Überschriften nicht einfach Pseudo-Überschriften-Anweisungen, die keinen Abstand nach der Überschrift einfügen und einen Seitenumbruch erlauben (oder so gar präferieren)? Wenn ich das richtig verstehe, brauchst Du das doch ohnehin nur auf section-Ebene. Dann sollte es rasch definiert sein. Wobei ich für Hinweise wie "Predigt" ohnehin keine nummerierten Überschriften verwenden würde, sondern eher etwas wie \minisec …

  4. #4
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468
    Section- und Subsection-Ebene. Viel Arbeit wäre es nicht. Aber:
    Zur Zeit steht secnumdepth ohnehin auf -2. Und die Elemente hätte ich eigentlich lieber gleichberechtigt, so dass sie auch in den pdf-Bookmarks erscheinen und so dass man jederzeit einen kleinen erklärenden Text oder z.B. den Wortlaut des Vaterunsers (subsection) hinzufügen kann.

  5. #5
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.326
    Die Argumentation spricht doch sehr für die Definition eines \sectionbreak{…} und \subsectionbreak{…}. Dann musst Du, wenn Du Text einfügen willst, nur das "break" entfernen. Jetzt musst Du ja auch etwas entfernen, nämlich das Gesumsel mit \pagebreak …

  6. #6
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468
    Ich möchte aber wie gesagt gern die volle Funktionalität der Überschrift beibehalten. pdf-bookmark, Kopfzeile, potenziell auch Nummerierung, obwohl ich die zur Zeit im ganzen Dokument nicht nutze. Also einfach die richtige Schrift und Abstände definieren wäre für mich eine minderwertige Alternative. Wenn ich hingegen vom section-Befehl ausginge, würde ich im Prinzip auch nur das Gleiche machen, worauf ich schon gekommen bin, bloß global.

  7. #7
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.326
    Nö. Entscheidender Unterschied bei folgender Lösung ist, dass Du nicht mit negativen Abständen arbeiten musst, von denen Du nicht weißt, wie groß sie sind:
    Code:
    \documentclass[paper=A5,openany,DIV=calc]{scrbook}
    \usepackage[ngerman]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{blindtext}
    \usepackage{hyperref}
    
    \makeatletter
    \newcommand*{\sectionbreak}{%
      \global\let\@afterheading\@breakafterheading
      \section
    }
    \newcommand*{\subsectionbreak}{%
      \global\let\@afterheading\@breakafterheading
      \subsubsection
    }
    \newcommand*{\@savedafterheading}{}
    \let\@savedafterheading\@afterheading
    \newcommand*{\@breakafterheading}{%
      \global\let\@afterheading\@savedafterheading
      \vskip-\@tempskipa % nachträglich korrigiert
      \if@afterindent\else\noindent\fi% siehe HINWEIS
    }
    \makeatother
    
    \begin{document}
    \chapter{Vorbereitung}
    \blindtext
    \chapter{Anfang}
    \blindtext
    \section{Überschrift eines Abschnittes mit Text}
    etwas Text
    \sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
    \sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
    \sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
    \sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
    \section{Überschrift eines Abschnittes mit mehr Text}
    \Blindtext
    \end{document}
    Hinweis: Prinzipiell kann die markierte Zeile auch noch entfallen. Wenn kein Text folgt, nutzt die ohnehin nichts.
    Geändert von klops (22-06-2012 um 21:04 Uhr) Grund: versehentlich gelöschte Zeile wieder eingefügt

  8. #8
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468
    Das hätte ich nicht gewusst, wie man das macht.
    Es bringt aber in dieser Form auch nicht das, was ich möchte. Der "Abstand nach" wird auch am Seitenende eingefügt, was ich ja gerade vermeiden wollte. Schlimmer noch, jetzt wird auch noch der "Abstand vor" zwischen zwei Überschriften nicht ignoriert, wie es sonst automatisch der Fall ist.

  9. #9
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Code:
    \documentclass[paper=A5,openany,DIV=calc]{scrbook}
    \usepackage[ngerman]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{blindtext}
    \usepackage{hyperref}
    \makeatletter
    \let\save@afterheading\@afterheading
    \newcommand\restoreafterheading{\let\@afterheading\save@afterheading}
    \newcommand\disableafterheading{\let\@afterheading\relax}
    
    \newcommand\breaksection{\@startsection{section}{1}{\z@}%
      {-3.5ex \@plus -1ex \@minus -.2ex}%
      {1sp}% <---Positiv, aber klein
      {\ifnum \scr@compatibility>\@nameuse{scr@v@2.96}\relax
        \setlength{\parfillskip}{\z@ plus 1fil}\fi    
        \raggedsection\normalfont\sectfont\nobreak\size@section}%
    }
    \makeatother
    
    \begin{document}
    
    \chapter{Anfang}
    \blindtext
    \vspace{3cm}
    \section{Überschrift eines Abschnittes mit Text}
    etwas Text
    \disableafterheading
    \breaksection{Überschrift eines Abschnittes mit fehlendem Text}
    
    \breaksection{Überschrift eines Abschnittes mit fehlendem Text}
    
    \breaksection{Überschrift eines Abschnittes mit fehlendem Text}
    
    \breaksection{Überschrift eines Abschnittes mit fehlendem Text}
    
    \restoreafterheading
    \section{Überschrift eines Abschnittes mit mehr Text}
    \Blindtext
    \end{document}

  10. #10
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468
    Du bist mal wieder super!

  11. #11
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.326
    Zitat Zitat von rstuby Beitrag anzeigen
    Der "Abstand nach" wird auch am Seitenende eingefügt, was ich ja gerade vermeiden wollte.
    Sorry, da hatte ich beim nachträglichen Editieren eine Zeile zu viel gelöscht, also ich die überflüssige \everypar-Zeile noch entfernt habe. So geht es:
    Code:
    \newcommand*{\@breakafterheading}{%
      \global\let\@afterheading\@savedafterheading
      \vskip-\@tempskipa
      \if@afterindent\else\noindent\fi% siehe HINWEIS
    }
    Ich werde das oben noch korrigieren, damit die dortige Lösung vollständig ist.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •