goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Referenz gilbt Falsches aus

 

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener

Beiträge: 65
Anmeldedatum: 04.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2018, 09:05     Titel: Referenz gilbt Falsches aus
  Antworten mit Zitat      
Hallo,

ich habe Referenzen und verweise auf die, aber es kommen entweder ?? oder eine falscher Verweis.

Code • Öffne in Overleaf

\documentclass[ngerman]{scrbook}

\usepackage{fontspec}
\usepackage{babel}
\usepackage{graphicx,geometry}

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

\newcommand*\F{\textbf{Frage:\quad}}
\newcommand*\Sprecher[1]{{\textbf{#1:\quad}\refstepcounter{ANr}\marginpar{\theANr}}}
\newcommand*\Unterabsatz{\leavevmode\refstepcounter{ANrB}\marginpar{\theANrB}}
\makeatletter
\renewcommand*{\p@ANr}{Kap.~\thechapter~Rn.~}
\renewcommand*{\p@ANrB}{Kap.~\thechapter~Rn.~}
\makeatother

\usepackage{blindtext}


\begin{document}
\chapter{Kapitel}

\Sprecher{Gast}\blindtext

\F Ich möchte wissen.

\Sprecher{Gast}\blindtext \label{mittagsprecherA}.

\F Ich möchte wissen.

\Sprecher{Gast} \blindtext \label{mittagsprecherE}.

s. \ref{mittagsprecherA} bis \ref{mittagsprecherE} auf Seite~\pageref{mittagsprecherA}.

\end{document}
 



Am Ende sollte stehen "s. Kap. 1 Rn. 2 bis Kap. 1 Rn 3 auf Seite 1".

Grüße

Bebbi
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2018, 09:54     Titel:
  Antworten mit Zitat      
Du musst ein Paar Klammern in der Definition von \Sprecher entfernen, da sonst die Informationen über das aktuelle Label in einer Gruppe versteckt bleiben.
Code • Öffne in Overleaf
\newcommand*\Sprecher[1]{\textbf{#1:}\quad\refstepcounter{ANr}\marginpar{\theANr}}

sollte funktionieren.

Ich würde auch empfehlen, das \label so nah wie möglich an den zugehörigen \Sprecher-Aufruf zu schreiben (das ist aber nur wichtig, wenn im nachfolgenden Text andere \refstepcounter ausgeführt werden).

Code • Öffne in Overleaf
\documentclass[ngerman]{scrbook}
\usepackage{babel}

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

\newcommand*\F{\textbf{Frage:}\quad}
\newcommand*\Sprecher[1]{\textbf{#1:}\quad\refstepcounter{ANr}\marginpar{\theANr}}
\newcommand*\Unterabsatz{\leavevmode\refstepcounter{ANrB}\marginpar{\theANrB}}
\makeatletter
\renewcommand*{\p@ANr}{Kap.~\thechapter~Rn.~}
\renewcommand*{\p@ANrB}{Kap.~\thechapter~Rn.~}
\makeatother

\usepackage{blindtext}


\begin{document}
\chapter{Kapitel}

\Sprecher{Gast}\blindtext

\F Ich möchte wissen.

\Sprecher{Gast}\label{mittagsprecherA} \blindtext.

\F Ich möchte wissen.

\Sprecher{Gast}\label{mittagsprecherE} \blindtext.

s.~\ref{mittagsprecherA} bis \ref{mittagsprecherE} auf Seite~\pageref{mittagsprecherA}.

\end{document}

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener

Beiträge: 65
Anmeldedatum: 04.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2018, 01:30     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mir die Klammern selbst mehrere Mal angeschaut … nun sehe ich die auch.

Ich dachte ein zusätzliches Klammerpaar wäre egal, ich habe ja auch jetzt mehrere Klammerebenen im eigentlichen Dokument.


Grüße

Bebbi
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2018, 08:38     Titel:
  Antworten mit Zitat      
Klammern erzeugen, wenn sie nicht als Argumentbegrenzer genutzt werden, im Normalfall eine Gruppe. Innerhalb einer Gruppe sind die meisten Anweisungen und ihre Wirkungen standardmäßig lokal, nur wenn es explizit gefordert ist, sind zum Beispiel Definitionen global, sonst werden die ursprünglichen Definitionen am Ende der Gruppe wiederhergestellt. Darum gibt das folgende Beispiel auch die Ausgabe "foo//bar//foo"
Code • Öffne in Overleaf
\documentclass{article}

\def\foo{foo}

\begin{document}
\foo

{\def\foo{bar}
 \foo}

\foo
\end{document}


In vielen Fällen ist es nicht unbedingt schädlich, eine neue und eventuell überflüssige Gruppe zu starten {\textbf{Foo}} ist nicht viel anders als \textbf{Foo}. (Im Mathematikmodus gibt es aber sehr wohl einen Unterschied zwischen $a+b$ und $a{+}b$. Dort verwandeln Klammern ihren Inhalt in ein mathord.)

So weit so gut.

Wie Du sicher weißt, bezieht sich ein \label immer (in der Faustregel) auf den zuletzt (mit \refstepcounter) hochgezählten Counter. Wie \label und \refstepcounter genau funktionieren, steht auf Seite 262 von source2e in §52.1 Cross Referencing. \refstepcounter setzt den gegebenen Zähler mit \stepcounter hoch und definiert dann den internen Befehl \@currentlabel als die aktuelle Ausgabe des soeben gesetzten Zählers, diese Zuweisung ist lokal, das Hochsetzen des Zählers jedoch ist wie jede LaTeX-Zähleroperation global. \label greift auf den aktuellen Wert von \@currentlabel zu und schreibt diesen Wert als Ausgabe für das angegeben Label in die .aux-Datei.

Mit dieser Kenntnis können wir erklären, warum die zusätzlichen Gruppenklammern in \newcommand*\Sprecher[1]{{\textbf{#1:\quad}\refstepcounter{ANr}\marginpar{\theANr}}} schädlich sind.
Wenn LaTeX
Code • Öffne in Overleaf
\Sprecher{Gast}\label{mittagsprecherA}\blindtext
ausführt, passiert folgendes.
\Sprecher öffnet zunächst eine Gruppe, alle Operationen, die nicht explizit global sind, sind lokal zu dieser Gruppe. Dann wird #1:\quad in Fett gedruckt. Der Zähler ANr wird (global) um eins hoch gesetzt, der Wert von \@currentlabel wird lokal(!) auf den Ausgabewert von ANr gesetzt. Die Ausgabe von \theANr wird in den Rand geschrieben. Dann endet die Gruppe und alle lokalen Zuweisungen gehen verloren. Insbesondere wird \@currentlabel auf seinen vorherigen Wert zurückgesetzt. In Deinem Minimalbeispiel ist das die 1 von der Kapitelzählung. Dann erst wird \label{mittagsprecherA} ausgeführt. Der Befehl nimmt den aktuellen Wert von \@currentlabel (die "1") und schreibt ihn als Ausgabe für das Label mittagsprecherA in die .aux-Datei. Im nächsten LaTeX-Durchlauf wird das Label durch eine 1 ersetzt.

Bebbi
Forum-Fortgeschrittener
Forum-Fortgeschrittener

Beiträge: 65
Anmeldedatum: 04.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2018, 05:37     Titel:
  Antworten mit Zitat      
Danke. Klingt kompliziert, aber ich glaub, ich könnte folgen. Das erklärt, warum mittagsprecherA und mittagsprecherE immer den gleichen Wert hatten und es kein Problem in einer Befehlsdefinition klappte, da da keine Gruppe eröffnet wurde.

Grüße

Bebbi
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de


  Datenschutzerklärung | Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2018 goLaTeX.de