Quellen-Nr. in Abbildungsunterschrift niedriger als im Text

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Quellen-Nr. in Abbildungsunterschrift niedriger als im Text

von u_fischer » Mo 9. Mär 2020, 09:38

Grundsätzlich sind Gleitumgebungen unabhängige Objekte. Du weißt nicht, wann der Leser sie sich anschaut und wo sie platziert werden. Das bedeutet, dass es nie wirklich möglich ist, fortlaufende Zähler "richtig" mit dem Haupttext zu synchronisieren. Es gibt oft einen Konflikt zwischen der visuellen Reihenfolge und der (wahrscheinlichen) Lesereihenfolge:

Wenn du die Gleitumgebung dort hast, wo sie referenziert wird, dann wird das wahrscheinlich so gelesen

wie in Abbildung 1 gezeigt -> gehe zu Abbildung 1, cite [1] -> zurück zum Text cite [2].

D.h. die Reihenfolge der cite-Nummer ist erstmal völlig in Ordnung.

Wenn aber so gelesen wird:

wie in Abbildung 1 gezeigt (schaue ich später erstmal weiterlesen) zurück zum Text cite [2].

Dann ist man vielleicht irritiert, wo cite [1] ist (falls man überhaupt darauf achtet).

M.E. gibt es dafür keine vernünftige, logische Lösung. Entweder verzichte auf citeorder, oder lebe mit den gelegentlichen Sprüngen.

@moewe: "Wenn jemand eine Idee hat, wie man biblatex mit verzögertem Schreiben nutzen kann, dann bin ich ganz Ohr."

Nun, ich würde nicht wirklich versuchen, alles zu verzögern. Es reicht doch ein \(z)label.

von Micha » Mo 9. Mär 2020, 08:38

Danke, MoeWe, für deine Machbarkeitsstudie. Fortgeschrittene dürfen das gerne mal ausprobieren. :wink:
Ich als Anfänger traue mich das noch nicht und werde deshalb die Reihenfolge in der finalen Version manuell überprüfen und ggf. anpassen müssen.

von MoeWe » Sa 7. Mär 2020, 10:10

Soweit es biblatex betrifft, kannst Du davon ausgehen, dass Dein Code linear (monoton?) von oben nach unten gelesen und ausgeführt wird. Das bedeutet, dass die Reihenfolge der Quellen im Code relevant ist und nicht die in der Ausgabe. Das ist sehr tief in biblatex verankert und auch bei BibTeX-basierten Lösungen und natbib so.

Es gibt eine sehr hacky Möglichkeit, die ich absolut nicht empfehlen kann. Sie basiert darauf, dass die Zitate durch ein externes Programm (Biber oder BibTeX) bereitgestellt werden. Daher schreibt biblatex die gewünschten Zitate in eine Hilfsdatei. Dies geschieht normalerweise sofort mit \immediate\write. Aber wir können versuchen, stattdessen \write zu nutzen, das den Schreibvorgang verzögert, bis die Umgebung des \write-Befehls tatsächlich auf einer Seite auftaucht (shipout). Das bedeutet aber, dass wir sehr genau aufpassen müssen, dass alle involvierten Makros noch die richtige Definition haben (da das \write potenziell an einer anderen Stelle ausgeführt wird, als der Rest des Codes). Das habe ich für einen Zähler nicht hinbekommen, daher habe ich ihn weggelassen. Das macht hier tatsächlich nichts aus, ist aber keine gute Idee. Du solltest daher den folgenden Code eher als Machbarkeitsstudie verstehen und nicht einfach so in Dein echtes Dokument übernehmen.

Machbarkeitsstudie: Nutzung auf eigene Gefahr
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{graphicx}
\usepackage{lipsum}

\usepackage[style=numeric, sorting=none, backend=biber]{biblatex}

\makeatletter
\protected\def\blx@auxwrite@nonimmediate#1#2#3{%
  \if@filesw
    \begingroup
    \blx@safe@actives
    \let\protect\string
    #2%
    \edef\blx@tempa{\write#1{#3}}%
    \blx@tempa
    \endgroup
  \fi}

% das ist KEINE gute Idee
\protected\def\blx@bibreq#1{%
  \begingroup
  \blx@xmlsanitizeafter{\def\blx@tempa}{#1}%
  \let\blx@tempb\@empty
  % Only output as \nocited if a key wasn't also directly \cite'd
  % Since citekey output is sequential as cites are read, the .bcf might contain
  % duplicate keys with differring nocite attributes if \nocite{X} and \cite{X} both occur
  % but biber deals with this and priorities \cites
  \ifboolexpr{test {\ifinlist{#1}\blx@nocites}
              and
              not test {\ifinlist{#1}\blx@directcites}}
    {\def\blx@tempb{ nocite="1"}}
    {}%
  % citeall is always order "0" - this makes no real difference as biber
  % ignores all other citekeys in the section if citeall is present
  \ifstrequal{*}{#1}
    {\blx@auxwrite@nonimmediate\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\blx@tempb}{0}}}
    {\blx@auxwrite@nonimmediate\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\blx@tempb}{1}}}%
  % statt "1" müssten wir hier eigentlich
  % \expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname
  % haben, aber der Zähler hat dann den falschen Wert, da seine
  % Berechnung nicht verzögert wird...
  \endgroup}
\makeatother

\addbibresource{biblatex-examples.bib}


\begin{document}
\lipsum[1-2]
\begin{figure}[b]
\centering
\includegraphics[width=0.5\textwidth]{example-image}
\caption[Dolor]{Dolor \autocite{sigfridsson}}
\end{figure}

\lipsum[3] \autocite{worman}
\end{document}
Da ich nicht glaube, dass es generell möglich ist, biblatex auf verzögertes Schreiben umzustellen, bleibt mir nur, Dir die zugegebenermaßen unattraktive manuelle Umsortierung Deines Quellcodes vorzuschlagen. Oder Du nimmst einen Zitierstil, bei dem die Zitierreihenfolge egal ist.

Wenn jemand eine Idee hat, wie man biblatex mit verzögertem Schreiben nutzen kann, dann bin ich ganz Ohr.

Die gleiche Idee geht übrigens auch bei natbib.
Machbarkeitsstudie: Eltern haften für ihre Kinder
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{graphicx}
\usepackage{lipsum}

\usepackage[numbers]{natbib}

\makeatletter
\renewcommand\nocite[1]{\@bsphack
  \@for\@citeb:=#1\do{%
    \@safe@activestrue
    \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
    \@safe@activesfalse
    \if@filesw
      \expandafter\write\expandafter\@auxout
        \expandafter{\expandafter\string\expandafter\citation\expandafter{\@citeb}}%
    \fi
    \if*\@citeb\else
    \@ifundefined{b@\@citeb\@extra@b@citeb}{%
       \NAT@citeundefined \PackageWarning{natbib}%
       {Citation `\@citeb' undefined}}{}\fi}%
  \@esphack}

\renewcommand\NAT@sort@cites[1]{%
  \let\NAT@cite@list\@empty
  \@for\@citeb:=#1\do{\expandafter\NAT@star@cite\@citeb\@@}%
  \if@filesw
    \expandafter\write\expandafter\@auxout
      \expandafter{\expandafter\string\expandafter\citation\expandafter{\NAT@cite@list}}%
  \fi
  \@ifnum{\NAT@sort>\z@}{%
    \expandafter\NAT@sort@cites@\expandafter{\NAT@cite@list}%
  }{}%
}%
\makeatother


\begin{document}
\lipsum[1-2]
\begin{figure}[b]
\centering
\includegraphics[width=0.5\textwidth]{example-image}
\caption[Dolor]{Dolor \cite{sigfridsson}}
\end{figure}

\lipsum[3] \cite{worman}

\bibliographystyle{unsrtnat}
\bibliography{biblatex-examples}
\end{document}

von Gast » Fr 6. Mär 2020, 17:46

Ich würde generell die Literaturverweise im Abbildungsverzeichnis weglassen, also beispielsweise
\caption[Bildunterschrift]{Bildunterschrift \cite{AuthorA.2007}}
verwenden. Jedenfalls sind Literaturverweise, Fußnoten etc. in Verzeichnissen wie dem Abbildungsverzeichnis eher unüblich.

BTW: Du solltest einmal einen Blick in die log-Datei werfen. Dort wird vor einer veralteten Option gewarnt und auch gleich erklärt, wie man es besser macht. Das ist insofern relevant, als der KOMA-Script-Autor angekündigt hat, dass er obsoletes aus KOMA-Script entfernen will.

von Micha^ » Fr 6. Mär 2020, 16:15

Ich habe mein bestes gegeben, um ein halbwegs vernünftiges Minimalbeispiel zu generieren. Hier ist die Quellenreihenfolge bei [1] und [2] korrekt, allerdings kommt [4] vor [3].
\documentclass[fontsize=12pt,DIV=12,BCOR=2cm,a4paper,bibtotoc]{scrreprt}
\usepackage[style=ieee]{biblatex}
\addbibresource{literatur_biblatex.bib}
\usepackage{graphicx}

\begin{document}
\chapter{Minimalbeispiel}
\section{korrekte Reihenfolge}
Absatz 1 \par
\begin{figure}[h!bt]
	\centering
	\includegraphics[width=\textwidth, height=10cm]{1.PNG}
	\caption{Bildunterschrift \cite{AuthorA.2007}}
\end{figure}
Absatz 2 \cite{AuthorB.2007} \par

\section{falsche Reihenfolge} 
%wenn Bild  zu groß, um auf gleicher Seite angezeigt zu werden:
Absatz 1 \par
\begin{figure}[h!bt]
	\centering
	\includegraphics[width=\textwidth, height=10cm]{1.PNG}
	\caption{Bildunterschrift \cite{AuthorA2.2007}}
\end{figure}
Absatz 2 \cite{AuthorB2.2007} \par

\printbibliography

\end{document}
Beispiel-.bib-Datei:
@article{AuthorA.2007,
 author = {AuthorA, A.},
 year = {2007},
 title = {Article Title}
}

@article{AuthorB.2007,
 author = {AuthorB, B.},
 year = {2007},
 title = {Article Title}
}

@article{AuthorA2.2007,
 author = {AuthorA2, A.},
 year = {2007},
 title = {Article Title}
}

@article{AuthorB2.2007,
 author = {AuthorB2, B.},
 year = {2007},
 title = {Article Title}
}

von Gast » Fr 6. Mär 2020, 13:28

Wie wäre es mit einem Minimalbeispiel?

Quellen-Nr. in Abbildungsunterschrift niedriger als im Text

von Micha » Fr 6. Mär 2020, 13:21

Hallo,

ich verwende Biblatex mit Citavi für meine Quellen.
Zu folgendem Problem konnte ich bisher keine Lösung finden:

Nach Abstatz 1 füge ich eine Abbildung ein. In der caption dieser Abbildung verweise ich auf Quelle A. Im nächsten Abschnitt zitiere ich Quelle B. So sieht der Code aus:

Abschnitt 1
Abbildung \cite{A}
Abschnitt 2 \cite{B}

Als float landet die Abbildung dann (korrekt) auf der nächsten Seite, nach Abschnitt 2. Dadurch ergibt sich jedoch im PDF eine falsche Reihenfolge der Quellennummern, nämlich:

Abschnitt 1
Abschnitt 2 [2]
Abbildung [1]

Natürliche könnte ich nun manuell Absatz 2 vor die Abbildung im Code schieben, aber gerade solche manuellen Eingriffe möchte ich ja mit Latex vermeiden.

Gibt es eine Möglichkeit, dass Latex automatisch erkennt, dass die Reihenfolge im PDF anders ist, als im Code? Bzw. eine Möglichkeit, dass die Zuordnung anhand der Reihenfolge im kompilierten File erfolgt?

Schon mal herzlichen Dank!
Micha

Nach oben