Anpassung von ebd./ibidem in biblatex

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


bistro
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 25. Mai 2018, 12:45

Anpassung von ebd./ibidem in biblatex

Beitrag von bistro »

Liebe golatex-Community,

ich habe eine Frage zur Anpassung von ebd./ibidem beim Gebrauch von biblatex und der Option citestyle=authoryear-ibid.

Ich würde gerne ändern, dass „ebd.“ ab dem dritten wiederholten Verweis auf ein Werk kommt. Bei den default-Einstellungen wird ebd. schon bei der zweiten Nennung verwendet. Das biblatex-Paket bietet dafür keine Option an. Hat jemand eine Idee, wie diese Einstellung angepasst werden kann?

Im Minimalbeispiel wird folgende Ausgabe erzeugt:
Autor schreibt ‘Zitat’ (Nachname, 1999, S. 264), und ‘Zitat’ (ebd., S. 23) und ‘Zitat’ (ebd., S. 431).

Ich hätte gerne:
Autor schreibt ‘Zitat’ (Nachname, 1999, S. 264), und ‘Zitat’ (Nachname, 1999, S. 23) und ‘Zitat’ (ebd., S. 431).

\documentclass[a4paper, fontsize=11pt]{scrartcl}

\usepackage[ngerman]{babel}           
\usepackage[utf8]{inputenc}       
\usepackage[T1]{fontenc}           
          
\usepackage{blindtext} 

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Autor1999, 
   author = {Vorname Nachname}, 
   year = {1999}, 
   title = {Buchtitel}, 
   address = {Ort}, 
   publisher = {{Verlag}} 
} 
\end{filecontents} 

\usepackage[bibstyle=authoryear, citestyle=authoryear-ibid, natbib=true, ibidtracker=context]{biblatex} 

\addbibresource{\jobname.bib} 


\begin{document} 

Autor schreibt `Zitat' \citep[264]{Autor1999}, und  `Zitat' \citep[23]{Autor1999} und `Zitat' \citep[431]{Autor1999}.

\printbibliography   

\end{document}


Vielen Dank!

Gast

Beitrag von Gast »

Crosspost bei TeX.SX: https://tex.stackexchange.com/q/498391/35864

Es gibt noch ein paar Details zu der gewünschten Ausgabe zu klären, bevor ich eine Implementation vorschlagen kann. Es wird keine Lösung sein, bei der einfach nur ein kleiner Parameter geändert wird, da der Standard-ibid-Tracker sich nur an die letzte Quelle erinnert und daher nicht erst beim zweiten Folgezitat anschlagen kann. Prinzipiell kann man den Standardtracker aber nachbauen, indem man sich an die letzten n Zitate erinnert und dann überprüft, ob die gleich sind. So komplex sollte das nicht werden. Lediglich mit Seitenumbrüchen muss man dann unter Umständen aufpassen, da man je nach gewünschter Ausgabe (siehe auch meine Frage bei TeX.SX) mehr Seitenzahlen nachverfolgen muss.

bistro
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 25. Mai 2018, 12:45

Beitrag von bistro »

Bitte entschuldigt das Crossposting (ich bin schon etwas länger bemüht, eine Lösung zu finden). Mit Blick auf ein anderes Problem (https://tex.stackexchange.com/questions ... m-biblatex) erscheint mir eine Lösung möglich, bei der ich den Code für das ibidem-Makro kopiere und um eine weitere ifthenelse-Anweisung ergänze, oder? ... Die Bedingung \ifciteibid müsste nur dann auf true gesetzt werden, wenn der entsprechende Wert ein drittes Mal vorkommt.

... ich kenne mich allerdings in der Architektur des biblatex-Pakets nicht aus und verstehe auch die Syntax der renewbibmacro-Anweisungen größtenteils nicht (off topic: ich bin für Hinweise dankbar, wo das dokumentiert ist).

Ist das eine Hilfestellung?

Gast

Beitrag von Gast »

Gegen Crossposts an sich habe ich nichts einzuwenden, aber es sollte zum guten Ton gehören, auf beiden Seiten selbst darauf aufmerksam zu machen und Links zu setzen. Zum einen, damit Arbeit von Helfern nicht unnötig gedoppelt wird, und zum anderen, damit zukünftige Besucher mit ähnlichen Problemen von beiden Fragen profitieren können, insbesondere, wenn das Thema auf einer der beiden Seiten einschläft.

Ja, so in etwa wird das gehen. Das Problem ist dabei nicht so sehr die Änderung des cite-Makros, das Problem ist der zusätzliche Test, den wir ergänzen müssen. Den gibt es nämlich noch nicht. Wir müssten einen ibid-Tracker mit einem besseren Gedächtnis (die zwei vorherigen Werke) implementieren und dann den pagetracker richtig einsetzen (es ist etwas komplex, den Tracker einfach auf jeder Seite zurückzusetzen, denn LaTeX weiß nicht immer genau Bescheid, auf welcher Seite wir gerade sind: https://texfaq.org/FAQ-wrongpn, daher arbeitet biblatex an der Stelle etwas anders, was das gewünschte Ergebnis etwas schwieriger macht). Das ist alles also nicht ganz so simpel, dass man nur an einem Parameter schrauben müsste.

Dokumentiert ist biblatex in der biblatex-Dokumentation. Da wird an einigen Stellen aber schon etwas Wissen über BibTeX und normales LaTeX vorausgesetzt. Außerdem ist die Dokumentation schon jetzt sehr lang, dass oft keine langen Abhandlungen zu einzelnen Themen zu finden sind. Die Dokumentation ist auch mehr eine Referenz als eine Bauanleitung für einen eigenen Stil oder ein Tutorial. Am besten lernt man biblatex zur Zeit wohl, indem man sich guten Code ansieht, ihn nachvollzieht und versteht und dann selbst was baut und damit herumspielt.

Die generelle Funktionsweise von \newbibmacro ist ähnlich zu \newcommand.

bistro
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Fr 25. Mai 2018, 12:45

Beitrag von bistro »

Bitte entschuldigt das Crossposting, ohne darauf aufmerksam zu machen!

Orientiert an den bisherigen Lösungen für ähnliche Probleme, kann ich mir folgende Lösung in Pseudocode für einen ibid-tracker vorstellen (Ich verstehe die TeX-macro-Syntax und leider nicht, mir sind die @-Verwendung und \if<variable>-Anweisungen usw. syntaktisch ein Rätsel, ich verstehe den scope von Funktionen nicht & weiß auch nicht genau, wie man Funktionen überhaupt definiert usw. daher nur Pseudocode; ich weiß auch nicht genau, wie die Macros beim Rendern eingebunden werden usw., vielleicht funktioniert das auch gar nicht, bitte entschuldigt):
Variables:
cbx@lasthash: hash value of the last citation (null in the first run?)
cbx@ibidcounter: counts the number of citations in a series
fullhash: hash value of the current citation

\makeatletter
\newcounter{cbx@ibidcounter} %counts the number of citations in a series 
\providecommand*{\mkibid}[1]{#1}

\newbibmacro*{cite:ibid}{%
  \printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}}

\renewbibmacro*{cite}{%
	
	if (cbx@lasthash empty) { %for the first run after reset (new chapter, page break etc.)
		cbx@lasthash = fullhash % set last citation hash = current citation hash
		\setcounter{cbx@ibidcounter}{-1} % initialize counter
	}

	if (cbx@lasthash equals fullhash) {
		\addtocounter{cbx@ibidcounter}{1} % increase counter (maybe a limit is necessary to avoid overflow?)
	} else {
		\setcounter{cbx@ibidcounter}{0} % reset counter
	}
	
	if (\ifnumgreater \value{cbx@ibidcounter} {1}) { % if cbx@ibidcounter is greater than a certain value (greater than 1 means: the third citation) 
		\usebibmacro{cite:ibid} % use ibid
	} else {
		cbx@lasthash = fullhash % set last citation hash = current citation hash
	
		<code of cite-macro>
	
	}

}
\makeatother

Um den counter reset bei page breaks usw. zu machen, müsste
\setcounter{cbx@ibidcounter}{0}
an den jeweiligen Stellen ergänzt werden; das Reset ist mir aber nicht so wichtig, es wäre auch ok, wenn das erste Zitat auf einer neuen Seite mit "ibid." beginnt

Report404
Forum-Newbie
Forum-Newbie
Beiträge: 1
Registriert: Fr 5. Jul 2019, 13:45

Beitrag von Report404 »

Mahlzeit,
ich bin Latex-Frischling und neu im Forum und mich interessiert die Frage von OP auch sehr.
Ich habe leider nur einen etwas hässlichen Workaround, mit dem ich das og Problem momentan "per Hand" löse. Ich zitiere in Fußnoten mit dem Biblatexstile authortitle-dw.
% Bibliografie
	\usepackage[style=authortitle-dw, 
				firstfull=false,
				autocite=footnote]{biblatex}

blabla erste fußnote \footfullcite{quelle} 
blabla zweite fußnote\footnote{\citeauthor{quelle}: \citetitle{quelle}} 
blabla dritte fußnote \footcite[Vgl. ][S.123]{quelle}
Leider bekomme ich den Code nicht in Overleaf online ans Laufen, auf dem Rechner funktioniert er aber, wenn man biber vorher durchlaufen lässt. Ist natürlich alles andere als optimal, funktioniert aber zumindest in Verbindung mit authortitle-dw sehr zuverlässig.
Eventuell hilft einem auch der Befehl \citereset. Der setzt den Zähler wieder zurück.
\documentclass[a4paper, fontsize=11pt]{scrartcl}

\usepackage[ngerman]{babel}           
\usepackage[utf8]{inputenc}       
\usepackage[T1]{fontenc}           
          
\usepackage{blindtext} 

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Autor1999, 
   author = {Vorname Nachname}, 
   year = {1999}, 
   title = {Buchtitel}, 
   address = {Ort}, 
   publisher = {{Verlag}} 
} 
\end{filecontents} 

\usepackage[bibstyle=authoryear, citestyle=authoryear-ibid, natbib=true, ibidtracker=context]{biblatex} 

\addbibresource{\jobname.bib} 


\begin{document} 

Autor schreibt `Zitat' \citep[264]{Autor1999}, \\
und  `Zitat' \citereset \citep[23]{Autor1999} \\ %Hier wird der Zähler zurückgesetzt!!!
und `Zitat' \citep[431]{Autor1999}.

\printbibliography   

\end{document}
Ich lese weiterhin gespannt mit.

Liebe Grüße

Antworten