BibLaTex: Hrsg. falsch und firstfull

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.
Marko
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: So 14. Jun 2009, 14:11
Wohnort: Mainz

BibLaTex: Hrsg. falsch und firstfull

Beitrag von Marko »

Hallo,

ich benutze MikTeX 2.7 und BibLaTex 0.8d und habe ein Problem, wenn ich den Herausgeber anpassen möchte.

Ich verwende den Style "alphabetic" und bekomme ohne weitere Anpassung folgende Ausgabe bei einem fullcite:

Manuela Musterfrau. "Irgendein Buch\. In: Hg. von Manfred Mustermann. 2008

Wenn ich jetzt mittels
\DefineBibliographyStrings{german}{%
bytypeeditor = {hrsg.}
}
den Herausgeber anpassen möchte, bekomme ich

Manuela Musterfrau. "Irgendein Buch\. In: R von Manfred Mustermann. 2008

Von dem "Hrsg." ist also nur noch "R" geblieben. Das Problem habe ich erst seit der Umstellung auf die neueste BibLaTex-Version (zumindest ist es mir erst danach aufgefallen).

Hier mein Code:

Code: Alles auswählen

\documentclass{scrreprt}

\usepackage{filecontents}
\begin{filecontents}{literatur.bib}
@incollection{B1,
  author = {Manuela Musterfrau},
  title = {Irgendein Buch},
  editor = {Manfred Mustermann},
  year = {2008}
}
\end{filecontents} 

\usepackage[ngerman]{babel}
\usepackage[babel]{csquotes}

\usepackage[style=alphabetic]{biblatex}
\bibliography{literatur}

%Herausgeber anpassen
\DefineBibliographyStrings{german}{%
bytypeeditor = {hrsg.}
}

\begin{document}

Hier kommt die Referenz: 

\fullcite{B1}

\printbibliography

\end{document}

Außerdem hätte ich gerne die "firstfull"-Funktionalität von "authortitle-dw" in meinem Style.

Ich habe dazu die cbx-Datei angepasst und verschiedene Sachen ausprobiert, z.B. mit

Code: Alles auswählen

\DeclareBibliographyOption{firstfull}[true]{%
  \csuse{bool#1}{cbx:firstfull}}

\newbibmacro*{cite}{%
  \global\boolfalse{cbx:herename}%
  \global\boolfalse{cbx:loccit}%
  \global\let\cbx@tempa\empty
  \ifbool{cbx:firstfull}
    {\ifciteseen
      {\usebibmacro{cite:normal}}
      {\usebibmacro{cite:firstfull}}}
    {\usebibmacro{cite:normal}}}
und den darauf folgenden Zeilen. Geändert hat das an der Ausgabe nichts, ich hatte das Gefühl, dass BibLaTeX in die Zeilen von "\newbibmacro*{cite}" gar nicht reingeht. "firstfull=true" war gesetzt, ich habe es auch ohne den Parameter versucht und die Variable komplett rausgenommen.

Gibt es hier vielleicht schon eine einfache Lösung? Gesucht habe ich danach auch schon, aber ohne Erfolg.

Vielen Dank schonmal für die Hilfe und noch einen schönen Sonntag,
Marko

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Re: BibLaTex: Hrsg. falsch und firstfull

Beitrag von domwass »

Marko hat geschrieben:Ich verwende den Style "alphabetic" und bekomme ohne weitere Anpassung folgende Ausgabe bei einem fullcite:

Manuela Musterfrau. "Irgendein Buch\. In: Hg. von Manfred Mustermann. 2008
Da fehlt ein Buchtitel, deshalb kommt der Herausgeber direkt nach dem 'in'. Mit folgendem Minimalbeispiel geht's:

Code: Alles auswählen

\documentclass{scrreprt} 

\usepackage{filecontents} 
\begin{filecontents}{literatur.bib} 
@incollection{B1, 
  author = {Manuela Musterfrau}, 
  title = {Ein Beitrag},
  booktitle = {Irgendein Buch}, 
  editor = {Manfred Mustermann}, 
  year = {2008} 
} 
\end{filecontents} 

\usepackage[ngerman]{babel} 
\usepackage[babel]{csquotes} 

\usepackage[style=alphabetic]{biblatex} 
\bibliography{literatur} 

\begin{document} 

\fullcite{B1} 
\printbibliography 

\end{document}
Wenn ich jetzt mittels
\DefineBibliographyStrings{german}{%
bytypeeditor = {hrsg.}
}
den Herausgeber anpassen möchte, bekomme ich

Manuela Musterfrau. "Irgendein Buch\. In: R von Manfred Mustermann. 2008

Von dem "Hrsg." ist also nur noch "R" geblieben. Das Problem habe ich erst seit der Umstellung auf die neueste BibLaTex-Version (zumindest ist es mir erst danach aufgefallen).
Erstell am besten einen Bug-Report auf der Sourceforge-Seite von biblatex.
Außerdem hätte ich gerne die "firstfull"-Funktionalität von "authortitle-dw" in meinem Style.
Dazu ein paar Bemerkungen:
  1. Hast du auch einen neuen bool-Schalter 'cbx:firstfull' angelegt?
  2. cbx:herename solltest du herausnehmen (wenn du es nicht anderweitig benötigst).
  3. Du musst natürlich \renewbibmacro verwenden, da das bibmacro 'cite' schon definiert ist - bzw.: Falls du keine Fehlermeldung bekommen hast, spricht viel dafür, dass das bibmacro bei alphabetic anders heißt und dein neues bibmacro damit gar nicht verwendet wird. Sieh in alphabetic.cbx nach, wie die Zitierung dort aufgebaut ist.
Erstell am besten ein vollständiges Minimalbeispiel mit allen deinen Änderungen, dann kann man besser nachvollziehen, woran es liegen könnte.

Gruß,
Dominik.-

lockstep

Re: BibLaTex: Hrsg. falsch und firstfull

Beitrag von lockstep »

Marko hat geschrieben: Wenn ich jetzt mittels
\DefineBibliographyStrings{german}{%
bytypeeditor = {hrsg.}
}
den Herausgeber anpassen möchte, bekomme ich

Manuela Musterfrau. "Irgendein Buch\. In: R von Manfred Mustermann. 2008

Von dem "Hrsg." ist also nur noch "R" geblieben. Das Problem habe ich erst seit der Umstellung auf die neueste BibLaTex-Version (zumindest ist es mir erst danach aufgefallen).
Ungetesteter Lösungsvorschlag: Da du das babel-Paket mit der Option ngerman einbindest, solltest du bei \DefineBibliographyStrings ebenfalls mit ngerman statt mit german arbeiten (biblatex 0.8d scheint diesbezüglich heikler geworden zu sein).

Marko
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: So 14. Jun 2009, 14:11
Wohnort: Mainz

Re: BibLaTex: Hrsg. falsch und firstfull

Beitrag von Marko »

lockstep hat geschrieben: Ungetesteter Lösungsvorschlag: Da du das babel-Paket mit der Option ngerman einbindest, solltest du bei \DefineBibliographyStrings ebenfalls mit ngerman statt mit german arbeiten (biblatex 0.8d scheint diesbezüglich heikler geworden zu sein).
Danke, das war es!

Komisch ist aber trotzdem, dass ich bisher den Herausgeber von "german" angepasst habe und die Ausgabe bei "ngerman" mit verändert (und auch noch falsch) wurde. Ich werde dafür wie Dominik vorgeschlagen hat einen Bug-Report auf der Sourceforge-Seite von biblatex einstellen.

Marko
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: So 14. Jun 2009, 14:11
Wohnort: Mainz

Beitrag von Marko »

domwass hat geschrieben:Falls du keine Fehlermeldung bekommen hast, spricht viel dafür, dass das bibmacro bei alphabetic anders heißt und dein neues bibmacro damit gar nicht verwendet wird. Sieh in alphabetic.cbx nach, wie die Zitierung dort aufgebaut ist.
Danke für den Tipp, das hat mir weitergeholfen! Bei "alphabetic" ist \cite mit \DeclareCiteCommand definiert und nicht als Bibmacro.

Edit: Heute morgen hatte ich noch Probleme mit Zeilenumbruch und zusätzlichen ";". Diese konnte ich beheben, da hatte ich Fehler bei der Klammersetzung.


Was jetzt noch unschön ist, ist eine zusätzliche schließende Klammer "]" am Ende von \fullcite.

Das Ergbenis des ersten Cite ist:

Manuela Musterfrau. "Ein Beitrag". In: Irgendein Buch. Hrsg. von Manfred Mustermann. 2. Aufl. 2008]

Beim zweiten stimmt alles:
[Mus08]

Code: Alles auswählen

\documentclass{scrreprt}

\usepackage{filecontents}
\begin{filecontents}{literatur.bib}
@incollection{B1,
  author = {Manuela Musterfrau},
  title = {Ein Beitrag},
  booktitle = {Irgendein Buch},
  editor = {Manfred Mustermann},
  edition = {2},
  year = {2008}
}
\end{filecontents}

\usepackage[ngerman]{babel}
\usepackage[babel]{csquotes} 

\usepackage[style=alphabetic]{biblatex}
\bibliography{literatur}

\DefineBibliographyStrings{ngerman}{%
bytypeeditor = {hrsg.}
} 

\ExecuteBibliographyOptions{
  citetracker=true}

\DeclareCiteCommand{\cite}
   {\usebibmacro{prenote}\ifciteseen{\bibleftbracket}{}}%precode
   {\ifciteseen
   		{\usebibmacro{citeindex}%
		    \printtext[bibhyperref]{%
		      \printfield{labelalpha}%
		      \printfield{extraalpha}}}
   		{\usedriver
     		{\DeclareNameAlias{sortname}{default}}
     		{\thefield{entrytype}}}}%loopcode
   {\multicitedelim}%sepcode
   {\usebibmacro{postnote}\ifciteseen{\bibrightbracket}{}}%postcode

\begin{document}
Erster Verweis auf B1\\
\cite{B1}

Zweiter Verweis auf B1\\
\cite{B1}
\end{document}
Meine Vermutung ist, dass das "\ifciteseen" nach dem "prenote" auf true gesetzt wird und bei dem "postnote" dann die rechte Klammer ausgibt.

Stimmt meine Vermutung oder liegt der Fehler woanders? Gibt es eine Lösung für das Problem?

Viele Grüße,
Marko

Marko
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: So 14. Jun 2009, 14:11
Wohnort: Mainz

Beitrag von Marko »

Hallo zusammen,

mein Problem konnte ich beheben. Bei meinem letzten Minimalbeispiel muss lediglich der DeclareCiteCommand{\cite}-Block durch den neuen Block unten ersetzt werden, außerdem kommt ein \newbool dazu. Im Precode-Teil prüfe ich, ob citeseen true oder false ist und speichere mir das Ergebnis in "cbx:citeseen" ab.

Das Ergebnis ist jetzt also das gewünschte :D

Wenn jemand eine bessere Lösung oder Fehler findet oder irgendwelche Gefahren bzw. Schönheitsfehler sieht, einfach melden!

Viele Grüße und nochmals danke,
Marko

Code: Alles auswählen

\newbool{cbx:citeseen}

\DeclareCiteCommand{\cite}
   {\ifciteseen{\booltrue{cbx:citeseen}}{\boolfalse{cbx:citeseen}}
   		\usebibmacro{prenote}\ifbool{cbx:citeseen}{\bibleftbracket}{}}%precode
   {\ifbool{cbx:citeseen}
   		{\usebibmacro{citeindex}%
		    \printtext[bibhyperref]{%
		      \printfield{labelalpha}%
		      \printfield{extraalpha}}}
   		{\usedriver
     		{\DeclareNameAlias{sortname}{default}}
     		{\thefield{entrytype}}}}%loopcode
   {\multicitedelim}%sepcode
   {\usebibmacro{postnote}\ifbool{cbx:citeseen}{\bibrightbracket}{}}%postcode

Antworten