Nehme ich den Code von @Henri
https://texwelt.de/wissen/fragen/24876/kenn-nummern-als-layout/24905
als Grundlage und ergänze ich eine multicol-Umgebung, tut die Zählung der \parnumbers nicht mehr?

Was muss hier anders gemacht werden?

Wichtiger Hinweis: Eine multicol-Umgebung soll nur eine parnumber erhalten, und zwar zu oberst (falls es wichtig ist: multicol startet im Allgm. nicht mit Text, auch mit Bildern); keine weiteren parnummern in der multicol-Umgebung.

alt text

\documentclass[paper=a5]{scrreprt}
\usepackage{marginnote}
\usepackage{multicol}

% Paragraph numbers
\newcounter{parnumber}
\newmarks{\parnummark}
\newcommand\parnum[1][\theparnumber]{%
\leavevmode%
\refstepcounter{parnumber}%
\marks\parnummark{\theparnumber}%
\marginnote{\theparnumber\label{pn:#1}}% 
}

% Parnums in head
\newcommand\parnumrange{\ifnum\theparnumber>0% Nur wenn parnums vorhanden
\ifstr{\firstmarks\parnummark}{\botmarks\parnummark}% erste = letzte?
{\botmarks\parnummark}% ja ---> nur letzte
{\firstmarks\parnummark--\botmarks\parnummark}% nein --> erste bis letzte
\else\fi}

% Layout: Parnums in head
\usepackage[automark]{scrlayer-scrpage}[]
\ohead*{\marginnote{\parnumrange}% range of parnums
\ifstr{\headmark}{}{\rightbotmark}{\headmark}% titles in head
}

\usepackage{mwe} % Blindtext
\begin{document}
\begin{multicols}{2}[\minisec{parnum wird nicht gezählt}]
\parnum
\blindtext
\end{multicols}

%\setcounter{parnumber}{187}%
{\Huge Satz des Pythagoras. } \parnum[SdP]

\parnum
\blindtext
\end{document}

gefragt 06 Jun, 22:12

cis's gravatar image

cis
9.3k21204336
Akzeptiert: 62%

bearbeitet 08 Jun, 14:16

Ok, in Gleitunmgebungen. Original hatte ich das mit multicols getestet (ich dachte figure ist einfacher), falls das auch eine Gleitumgebung ist (das weiß ich gerade nicht)

(06 Jun, 23:14) cis
1

Das dürfte nicht ohne weiteres möglich sein, da Gleitumgebungen erst in der Ausgaberoutine verarbeitet werden und es sein kann, dass sie auf eine andere Seite geschoben werden. Siehe auch https://tex.stackexchange.com/questions/883/why-do-floats-change-the-mark

(06 Jun, 23:28) Henri
1

Die Kennnummern in Gleitumgebungen führen auch schon ohne die Marksachen zu Problemen: füge in Deinem Beispiel mal noch ein \parnumber\blindtext vor der Gleitumgebung ein. Dann erscheint die Gleitumgebung immer noch oben auf der Seite (sie darf ja gleiten) und im Rand kommt damit die Nummer 2 vor der 1.

(07 Jun, 02:53) esdd
1

Die multicols Umgebung ist keine Gleitumgebung. Aber Du wirst nicht umhin kommen ein Beispiel zu erstellen, dass Dein Problem zeigt, aber trotzdem noch übersichtlich und möglichst einfach ist ...

(07 Jun, 05:41) esdd

Kleinstmögliches Beispiel mit Erläuterungen ergänzt.

(07 Jun, 14:26) cis

multicol hat dasselbe Problem, dass die Ausgaberoutine auch ohne Seitenumbruch aufgerufen wird. Der \mark-Mechanismus ist damit inhärent inkompatibel.

(08 Jun, 02:00) Henri

Wichtiger Hinweis: Eine multicol-Umgebung soll nur eine parnumber erhalten, und zwar zu oberst (falls es wichtig ist: multicol startet im Allgm. nicht mit Text, auch mit Bildern); keine weiteren parnummern in der multicol-Umgebung.

Das müsste doch dann gehen?

(08 Jun, 03:23) cis
3

@Henri multicol ist nicht inhärent inkompatibel mit Marken - \leftmark und \rightmark funktionieren damit wie erwartet, weil der sty dafür explizit Code enthält (genauso wie der LaTeX-Kern).

(08 Jun, 06:43) Ulrike Fischer

@cis Nein, das geht mit Deinem Beispiel nicht, weil nach dem Aufruf der Seitenumbruchroutine die nächste gesetzte Marke zur ersten auf der Seite gesetzten wird. Deshalb kommt die 1 in Deinem Beispiel nicht in der Kopfzeile an. Du müsstest vermutlich mit \markboth für Deine Nummern arbeiten und die Marken für die Kapitel und Abschnitte anderes setzen und verwenden. Interessant ist das aber nur aus theoretischer Sicht (immerhin), einen praktischen Nutzen der Wiederholung der Nummern aus dem Rand nochmal im Kopf erschließt sich mir nicht.

(08 Jun, 12:59) esdd

Ok, und wie kann man das jetzt konkret lösen? Das sind doch sicher nur ein paar Feinschliffe.

(08 Jun, 13:32) cis
Ergebnis 5 von 10 Alle anzeigen

Disclaimer: Ich halte es nicht für sinnvoll, die Markierungen im Rand, die ja schon Auszeichnungen sind, nochmal in der Kopfzeile anzugeben. Hier ist trotzdem ein Versuch in der gewünschten Richtung.

\documentclass[paper=a5]{scrreprt}
\usepackage{marginnote}
\usepackage{multicol}

% Paragraph numbers
\newcounter{parnumber}
\newcommand\parnum[1][\theparnumber]{%
  \leavevmode%
  \refstepcounter{parnumber}%
  \markright{\theparnumber}%
  \marginnote{{\normalfont\normalsize\normalcolor\theparnumber\label{pn:#1}}}%
}

% Parnums in head
\newcommand\parnumrange{%
  \ifstr{\rightfirstmark}{\rightbotmark}% erste = letzte?
  {\rightbotmark}% ja ---> nur letzte
  {\rightfirstmark--\rightbotmark}% nein --> erste bis letzte
}

\renewcommand*\markboth[2]{\markleft{#1}} 
\usepackage[automark]{scrlayer-scrpage}
\clearpairofpagestyles
\ohead{\leftbotmark}
\ofoot*{\pagemark}

\DeclareNewLayer[
  background,
  oddpage,
  head,
  addhoffset=\textwidth+\marginparsep,
  contents=\parnumrange
]{parnum.odd}
\DeclareNewLayer[
  background,
  evenpage,
  head,
  addhoffset=-\textwidth-\marginparsep,
  contents=\hfill\parnumrange
]{parnum.even}
\AddLayersToPageStyle{scrheadings}{parnum.odd,parnum.even}

\usepackage{mwe} % Blindtext
\begin{document}
\tableofcontents
\chapter{Ein Kapitel}
\Blindtext[3]
\begin{multicols}{2}[\minisec{parnum wird nicht gezählt}]
\parnum\blindtext
\end{multicols}
{\Huge\parnum[SdP] Satz des Pythagoras.\par}
\Blindtext[2]
\parnum
\Blindtext[3]

\chapter{Weiteres Kapitel}
\Blindtext[6]
\parnum\blindtext
\end{document}

Es gibt mindestens die folgenden Einschränkungen: Da \rightmark für parnumber genutzt wird, kann es nicht mehr für andere Kolumnentitel verwendet werden. Auf Kapitelanfangsseiten muss auf die Anzeige der Randnummern in der Kopfzeile verzichtet werden, da diese dort nicht richtig sind, falls auf der Seite eine neue parnumber im Rand steht.

Permanenter link

beantwortet 08 Jun, 19:45

esdd's gravatar image

esdd
15.2k103954

Da da scheints das restliche Layout teilweise runiniert und wegen der Einschränkung auf den Kapitelanfangsseiten muss ich schauen, wie man die parnums vor die multicolumns setzt und dann um geeigneten Abstand nach unten verschiebt.

(08 Jun, 21:43) cis

@esdd Ah verdammt... Was könnte ich noch tun? Kann man die Ruinierung des restlichen Layouts nicht mit \newmarks retten?

(09 Jun, 15:50) cis

Also so bekomme ich es prinzipiell hin:

\begin{multicols}{2}[\parnum \vspace{\dimexpr-\multicolsep-1.0\baselineskip\relax}] \blindtext \end{multicols}

müsste man jetzt vermutlich nur noch besser und korrekter machen.

(09 Jun, 16:29) cis

Nein, ich habe keine Idee. Abgesehen davon, halte ich die Tatsache, dass die Randnummern im Rand stehen, schon für Auszeichnung genug ... Auf den Seiten mit nur einer Randmarke läuft man Gefahr deren Eintrag in der Kopfzeile für die Seitenzahl zu halten. Wenn Du auf einer Seite gar keine Randmarke hast, taucht immer noch die letzte in der Kopfzeile auf, etc.

(09 Jun, 16:33) esdd

Die "Gefahr" ist gering, da andere Schrift und in Klammern. Das andere ist an sich Absicht, weil sich die parnum erst ändert, wenn eine neue kommt.

(09 Jun, 16:49) cis

Wenn ich mal folgendes mache:

\begin{multicols}{2}[\parnum \vspace{\dimexpr-\multicolsep-1.0\baselineskip\relax}] ... \end{multicols}

scheint es zu funktionieren.

*Hier darf mir gerne jmd. sagen, ob die Einstellung \dimexpr-\multicolsep-1.0\baselineskip\relax korrekt ist; dann kann ich das ggf. noch verbessern.*

alt text

\documentclass[paper=a5]{scrreprt}

\usepackage{marginnote}
\usepackage{multicol}
\setlength\columnseprule{0.4pt}

% Paragraph numbers
\newcounter{parnumber}
\newmarks{\parnummark}
\newcommand\parnum[1][\theparnumber]{%
\leavevmode%
\refstepcounter{parnumber}%
\marks\parnummark{\theparnumber}%
\marginnote{\theparnumber\label{pn:#1}}% 
}

% Parnums in head
\newcommand\parnumrange{\ifnum\theparnumber>0% Nur wenn parnums vorhanden
\ifstr{\firstmarks\parnummark}{\botmarks\parnummark}% erste = letzte?
{\botmarks\parnummark}% ja ---> nur letzte
{\firstmarks\parnummark--\botmarks\parnummark}% nein --> erste bis letzte
\else\fi}

% Layout: Parnums in head
\usepackage[automark]{scrlayer-scrpage}[]
\ohead*{\marginnote{\parnumrange}% range of parnums
\ifstr{\headmark}{}{\rightbotmark}{\headmark}% titles in head
}

\usepackage{mwe} % Blindtext
\begin{document}
\parnum
\begin{multicols}{2}[Schlecht:]
%\parnum
\blindtext
\end{multicols}

Gut: 
\begin{multicols}{2}[\parnum \vspace{\dimexpr-\multicolsep-1.0\baselineskip\relax}]
\blindtext
\end{multicols}

\newenvironment{Multicols}[1][\theparnumber]
{\begin{multicols}{2}[\parnum \label{pn:#1}\vspace{\dimexpr-\multicolsep-1.0\baselineskip\relax}]}
{\end{multicols}}

Mit eigener Umgebung:
\begin{Multicols}[xxx]
~~~~~~ref-test
\end{Multicols}
Siehe \ref{pn:xxx} \\

%\setcounter{parnumber}{187}%
{\Huge Satz des Pythagoras. } \parnum[SdP]

\parnum
\blindtext
\end{document}
Permanenter link

beantwortet 09 Jun, 17:01

cis's gravatar image

cis
9.3k21204336

Diese Methode hier ist leider nicht sehr stabil. Ich frage mich, ob man das wirklich mit diesen marks machen sollte. Vielleicht ganz allgemein mit einem counter, und dann eine Vergleichsmethode über die Seitenzahl. Mmmhh....

(14 Jun, 18:46) cis
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×40

Frage gestellt: 06 Jun, 22:12

Frage wurde angeschaut: 795 Mal

Zuletzt aktualisiert: 14 Jun, 18:46