Seite 1 von 1

BibLaTex: Hrsg. falsch und firstfull

Verfasst: So 14. Jun 2009, 14:30
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:
\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
\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

Re: BibLaTex: Hrsg. falsch und firstfull

Verfasst: Mo 15. Jun 2009, 10:08
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:
\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.-

Re: BibLaTex: Hrsg. falsch und firstfull

Verfasst: Mo 15. Jun 2009, 21:42
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).

Re: BibLaTex: Hrsg. falsch und firstfull

Verfasst: Di 16. Jun 2009, 06:48
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.

Verfasst: Di 16. Jun 2009, 07:00
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]
\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

Verfasst: Di 16. Jun 2009, 21:14
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
\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