Bei Referenz automatisch generierte Randnummer angeben

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Bei Referenz automatisch generierte Randnummer angeben

Beitrag von Bebbi »

Hallo,

ich habe Randnummern wie in Rechtskommentaren. Nun möchte auf eine bestimmte Randnummer verweisen. Da ich nicht weiß, ob sich die noch ändern, möchte ich das gerne nicht manuell machen, sondern LaTeX den Verweis selber erstellen lassen.
\documentclass[ngerman]{scrbook}

\usepackage{babel}

\usepackage{graphicx,geometry}

\newcounter{ANr}
\newcommand\Absatznr{\arabic{ANr}}

\newcounter{ANrB}
\newcommand\AbsatznrB{\alph{ANrB}}

\setlength{\marginparwidth}{7mm}
\def\thema#1{\stepcounter{ANr}{\textbf{#1: }\marginpar{\Absatznr}\setcounter{ANrB}{1}}}
\def\Unterabsatz{{\textbf{}}\marginpar{{\Absatznr \AbsatznrB}}\stepcounter{ANrB}}
% ohne {\textbf{}} rutscht die Randnummer eine Zeile zu hoch.

\usepackage{blindtext}

\begin{document}

\chapter{§ 3}
\setcounter{ANr}{0}
\thema{Bachblütentherapie beim Mofafahren}\blindtext

\Unterabsatz \blindtext \label{bluetenallergie} \blindtext

\thema{Globoli beim Mofafahren} \blindtext 

\thema{Feststellung von Globoli im Blut} \blindtext 
(siehe Seite~ \pageref{bluetenallergie}).

\end{document}
Statt die Seitenzahl über \pageref auszugeben, sollte halt - in der vorletzten Zeile - automatisch auf "§ 3 Rn. 1a" verweisen werden. und wenn aufgrund der aktuellen Rechtssprechung ein Abs. eingefügt wird vor 1a, soll der Verweis dann halt auf "§ 3 Rn. 1b" lauten.

Grüße

Bebbi

Gast

Beitrag von Gast »

Zunächst einmal solltest Du in LaTeX-Dokumenten möglichst nicht \def, sondern \newcommand verwenden. Die Anweisung ist in jeder ausführlichen LaTeX-Einführung erklärt. Ebenso sollte in jeder ausführlichen LaTeX-Einführung das optionales Argumente von \newcounter und der Unterschied zwischen \stepcounter und \refstepcounter für die Label-Erzeugung erklärt sein.

Dann fällt auf, dass Deine Verwendung von \chapter als Überschrift etwas wie »1 §3« erzeugt. Das ist sicher nicht gewünscht. Ich habe deshalb im folgenden Beispiel \chapterformat und \chaptermarkformat umdefiniert, wie das in der KOMA-Script-Anleitung und im KOMA-Script-Buch erklärt wird.

Außerdem erscheint es mir unsinnig Befehle wie Absatznr zu definieren, statt einfach nach \newcounter ohnehin existierenden \the…-Befehle passend umzudefinieren bzw. zu verwenden. Auch diese sollten in jeder ausführlichen LaTeX-Einführung erklärt sein. Im KOMA-Script-Buch finde ich sie ebenfalls.

Was in wenigen LaTeX-Einführungen (aber sehr wohl im KOMA-Script-Buch) erklärt ist, ist die Anweisung \p@Zähler, mit der ein Präfix definiert wird, der bei der Erstellung des Labels (und nur dort) der Referenz vorangestellt wird. Das kann man sehr schön verwenden, um die Kapitelnummer mit in das Label zu packen.
\documentclass[ngerman]{scrbook}
\usepackage[utf8]{inputenc}% Overleaf braucht das nicht, ein aktuelles LaTeX dagegen nicht
\usepackage{babel}

\usepackage{graphicx,geometry}

\newcounter{ANr}[chapter]

\newcounter{ANrB}[ANr]
\renewcommand\theANrB{\theANr\alph{ANrB}}

\setlength{\marginparwidth}{7mm}
\newcommand*\thema[1]{\refstepcounter{ANr}{\textbf{#1: }\marginpar{\theANr}}}
\newcommand*\Unterabsatz{\leavevmode\refstepcounter{ANrB}\marginpar{{\theANrB}}}
\makeatletter
\renewcommand*{\p@ANr}{§~\thechapter~Rn.~}
\renewcommand*{\p@ANrB}{§~\thechapter~Rn.~}
\makeatother

\renewcommand*{\chapterformat}{§ \thechapter\enskip}
\renewcommand*{\chaptermarkformat}{§ \thechapter\enskip}

\usepackage{blindtext}

\begin{document}

\setcounter{chapter}{2}
\chapter{}
\setcounter{ANr}{0}
\thema{Bachblütentherapie beim Mofafahren}\blindtext

\Unterabsatz \blindtext \label{bluetenallergie} \blindtext

\thema{Globoli beim Mofafahren} \blindtext 

\thema{Feststellung von Globoli im Blut} \blindtext 
(siehe \ref{bluetenallergie}).

\end{document}
BTW: Dass \marginpar zwischen Absätzen nicht am Anfang des darauffolgenden Absatzes landet, ist ein bekanntes Problem. Hier hilft es, den Absatz zuerst zu beginnen, was ich im Beispiel mit \leavevmode erreiche. Wobei man bei \marginpar ohnehin nicht sicher ist, wo die Randmarke ausgegeben wird. Diese kann sich ggf. recht weit nach unten verschieben, um Kollisionen mit anderen Randmarken zu vermeiden. Will man die Randmarke in einer bestimmten Zeile erzwingen (und dabei ggf. auch Überlappungen in Kauf nehmen), wäre marginnote eine Möglichkeit.

Ich würde außerdem mal einen Blick auf scrjura empfehlen. Das Paket wurde extra für Gesetzestexte und Verträge (und das Kommentieren derselben) entwickelt. Es kommt auch mit dem Einschieben von Paragraphen zurecht und bietet vielfältige Querverweismöglichkeiten. Ob es hier wirklich eine Option ist, weiß ich natürlich nicht.

Gast

Beitrag von Gast »

Wenn man \refstepcounter nutzt, dann kann man auf den Zähler auch verweisen. Weitere Anpassungen in den Kommentaren.
\documentclass[ngerman]{scrbook}

\usepackage{babel}

\usepackage{graphicx,geometry}

\newcounter{ANr}
\counterwithin*{ANr}{chapter}% Zähler automatisch jedes Kapitel auf 0 setzen
\renewcommand\theANr{\arabic{ANr}}% Zählerausgabe: arabisch

\newcounter{ANrB}
\counterwithin*{ANrB}{ANr}% Zähler automatisch für jede neue ANr auf 0 setzen
\renewcommand\theANrB{\theANr\alph{ANrB}}% Zählerausgabe: Zähler ANr, dann alphabetisch

\setlength{\marginparwidth}{7mm}

% newcommand statt def (verhindert ungewolltes Überschreiben vorhandener Befehle)
\newcommand*{\thema}[1]{%
  \textbf{#1: }%
  \refstepcounter{ANr}%
  \marginpar{\theANr}}
% \refstepcounter erlaubt verweise mit \label und \ref

% \leavevmode statt leerem \textbf
\newcommand*{\Unterabsatz}{%
  \leavevmode
  \refstepcounter{ANrB}%
  \marginpar{\theANrB}}

\usepackage{blindtext}

\begin{document}
\chapter{§ 3}
\thema{Bachblütentherapie beim Mofafahren}\blindtext

\Unterabsatz \blindtext

\Unterabsatz \blindtext \label{bluetenallergie} \blindtext

\thema{Globuli beim Mofafahren} \blindtext

\thema{Feststellung von Globuli im Blut} \blindtext
(siehe \ref{bluetenallergie}).

\Unterabsatz \blindtext

\Unterabsatz \blindtext
\end{document}

Gast

Beitrag von Gast »

Anonymous hat geschrieben:
\newcounter{ANr}
\counterwithin*{ANr}{chapter}% Zähler automatisch jedes Kapitel auf 0 setzen
\renewcommand\theANr{\arabic{ANr}}% Zählerausgabe: arabisch

\newcounter{ANrB}
\counterwithin*{ANrB}{ANr}% Zähler automatisch für jede neue ANr auf 0 setzen
\renewcommand\theANrB{\theANr\alph{ANrB}}% Zählerausgabe: Zähler ANr, dann alphabetisch
Warum so umständlich? Wie in meinem Beitrag zuvor schon gezeigt, hat \newcounter selbst ein optionales Argument, um einen Zähler automatisch mit der Erhöhung eines anderen zurück zu setzen. Außerdem ist \arabic{…} die Voreinstellung für \the…, so dass man das nicht noch einmal explizit festlegen muss. In meinem Beispiel findest Du außerdem, wie man die gewünschte Ausgabe »§ 3 Rn. 1a« mit einem einzigen \ref erreicht und (eine von mehreren Möglichkeiten) wie man die vermutlich eher nicht gewünschte Ausgabe »1 §3« bei \chapter verhindern kann.

BTW: Wenn \counterwithin wie auf Overleaf zu einer Fehlermeldung führt, liegt das an einem veralteten LaTeX. Dann braucht man ggf. zusätzlich das bei Verwendung eines aktuellen LaTeX veraltete (aber in aktueller Version auch nicht weiter störende) Paket chngcntr.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Hallo,

danke für die Antworten.

Ich habe mich erst einmal ein paar Stunden damit befasst.

zu Antwort 1:

Das eine Kapitel-Nr. in der Überschrift steht ist a) dem Minimalbeispiel geschuldet und b) der Tatsache, dass ich dass Konzept in einem anderen Zusammenhang als einen Rechtskommentar verwende, ich aber euch nicht mit ellenlangen Ausführungen dazu nerven wollte, weil dass die inhaltliche Ebene ist und für mich weniger die technische Ebene. Aber vielleicht habe ich da zu vereinfacht. Also bei mir gibt es schon ganz normale Überschriften und dann werden bestimmte Absätze mit Randnummern versehen.

Weder \def noch \newcommand gibt es im Stichwortverzeichnis von Herbert Voß: Die wissenschaftliche Arbeit mit LaTeX Ich hab's angepasst. Für spätere Leserinnen habe ich unten ein paar Infos zusammen gefasst. Ich hatte mir mehrere Einleitungen ausgeliehen und diese schien mir am passensten für meine Anforderungen - aber es sieht so aus, als ob es noch ein Buch werden muss.

Eine Zähler kann man nicht direkt ausgeben, sondern nutzt dafür \theZähler und die Art der Darstellung regelt man durch Neudefinition von \theZähler? Oder wofür ist das gut? Bisher konnte ich den auch so ausgeben. Oder ging das nur über den Umweg eines neuen Befehls?

Verstehe ich das richtig, dass ich \refstepcounter dann brauche, wenn ich auf den Zähler verweisen will, aber ansonsten gleich ist?

marginnote führt bei mir dazu, dass die Rn. in den Text und sonstwo landen, auch wenn das hier das richtige wäre, da ich nur die habe im Seitenrand. Aber es geht ja auch wie bisher.

zu Antwort 2:
Wenn ich das richtig sehe, ist der zentrale Unterschied, dass was in Antwort 3 kommentiert wird. Die erste Lösung gefällt mir gerade besser, weil kompakter.


Grüße

Bebbi

Für spätere Leser*innen:

def vs. newcommand
mrunix.de/forums hat geschrieben:\def ist eine TeX-Noattion und definiert einen Befehl und überschreibt
einen bereits schon bestehenden.

\newcommand ist eine LaTeX-Notation und definiert den Befehl nur, wenn er noch nicht existiert.
Neben der Sicherheit gibt es noch einen Unterschied.
mrunix.de/forums/ hat geschrieben: Mit \newcommand definierte Befehle erlauben Absätze in ihrem Argument - \newcommand ist also eigentlich die LaTeX-Entsprechung zu \long\def. Als Ersatz für \def gibt es \newcommand*.
Auf texwelt.de gibt es eine Erklärung zu den Hintergründen.

Gast

Beitrag von Gast »

marginnote braucht zwei LaTeX-Läufe bis die Randnotizen an der richtigen Position stehen. Irgendwo im Text landen die manchmal im ersten Lauf. Allerdings habe ich gerade über den Link festgestellt, dass das Paket wohl derzeit nicht mehr weiterentwickelt wird. Also keine Ahnung, ob das wirklich eine gute Wahl wäre.

AFAIK zeigt das genannte Buch von Herbert, wie man eine wissenschaftliche Arbeit mit LaTeX schreibt, ist aber keine allgemeine, ausführliche Einführung in LaTeX. Du willst hier eindeutig LaTeX um neue Befehle erweitern. Dazu sollte man eine ausführliche Einführung lesen, in der auch grundlegende Konzepte wie \newcommand und \theZähler dokumentiert sind. Optimal wäre natürlich, wenn sogar die erweiterten Möglichkeiten von xparse erwähnt wären.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Ich hatte eine ganze Reihe an Anleitungen in der Hand und las rein. Bei manchen war von vornherein klar, dass die mir nicht ausreichen und aufgrund der fortschreitenden Entwicklung wollte ich state-of-the-art einsteigen und wusste, was erst einmal ansteht. Da passte das Buch ganz gut. Anderseits konnte ich ja vorher kaum erahnen, wohin mich der Weg führen wird. ;-)
Anonymous hat geschrieben:marginnote braucht zwei LaTeX-Läufe bis die Randnotizen an der richtigen Position stehen. Irgendwo im Text landen die manchmal im ersten Lauf. Allerdings habe ich gerade über den Link festgestellt, dass das Paket wohl derzeit nicht mehr weiterentwickelt wird. Also keine Ahnung, ob das wirklich eine gute Wahl wäre.
So war hatte ich schon angenommen und auch nochmal einen Durchlauf gestartet. Weil's für mich nicht wichtig ist, habe ich es nicht weiter verfolgt.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Hallo,

jetzt habe ich eine Referenz die funktioniert und eine die immer falsch oder als ?? angezeigt wird. Auch wenn man die *.aux-Datei gelöscht hat. Gibt es eine Richtung, mach der ich suchen sollte als Ursache für solches Verhalten?

Grüße

Bebbi

Gast

Beitrag von Gast »

In der log-Datei ist in einer Warnung der Name der Referenz angegeben, die nicht gefunden ist. In der aux-Datei sind per \newlabel die Namen der definierten Referenzen angegeben. Vergleiche die miteinander. Ein kleiner Tippfehler reicht aus, um Probleme zu verursachen. Außerdem sollte man für Label immer nur US-ASCII-Zeichen verwenden und schon mit Satzzeichen etc. vorsichtig sein.

Ansonsten: Wie immer ein Minimalbeispiel erstellen.

BTW: Das wäre eigentlich eine neue Frage. Bitte nicht eigentlich beantwortete Fragen ewig mit neu auftretenden Problemen unlesbar machen. Immer auch ein wenig an die Leute denken, die per Suchmaschine hier landen. Lieber kurze, einzelne Fragen und (ggf. verlinkte) neue Fragen als ewige Diskussionen.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 65
Registriert: Do 4. Jan 2018, 02:32

Beitrag von Bebbi »

Da hast du Recht, dass es Zeit für ein eigenes Thema ist.

In der Log-Datei stand so viel, da wusste ich nicht wonach ich suchen sollte und Labels fand ich gar nicht.

Antworten