PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehr Biblatex Spaß: Formatierung



sensemann
13-03-2012, 21:53
Hi,

ich habe mir das Literaturverzeichnis inzwischen so zurechtgebogen, dass es ganz ordentlich aussieht (Hrsg. in Klammern etc.). Es gibt nur zwei Absonderheiten, bei denen ich nicht weiterkomme:

(1) Verzeichniseinträge, z.B. Inproceeding, Inbook, etc. sehen so aus:


Der Autor (Jahr): "Titel" In: Der Herausgeber (Hrsg.) Journal/Buchtitel., ....

Prima wäre, wenn ich hinter den Herausgeber noch einen DOppelpunkt setzen könnte, also


Der Autor (Jahr): "Titel" In: Der Herausgeber (Hrsg.): Journal/Buchtitel., ....

Ich kann aber beim Deklarieren der BibliographyDriver sooft ich will \setunit{\labelnamepunkt} (bei mir ein colon) oder \setunit{\addcolon} schreiben - es passiert nix.

(2) Das größere Problem: Solange ein Editor da ist, ist alles super. Falls nicht, wird der Titel der Publikation stattdessen hingeschrieben, á la:


Der Autor (Jahr): "Titel" In: "Titel" TiteldesJournalsetc., ....

Hilfe?
Und hier das Minimalbeispiel, nur mit dem nötigsten und am Beispiel der Inproceedings. Ich hoffe, ich kann die Lösung dann auf die anderen Typen übertragen.



\documentclass[final,ngerman]{scrbook}

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

\usepackage{filecontents}
\begin{filecontents}{literatur.bib}
@INPROCEEDINGS{Yu2007,
author = {Jin Yu and Boualem Benatallah and Regis Saint-Paul and Fabio Casati
and Florian Daniel and Maristella Matera},
title = {{A} {F}ramework for {R}apid {I}ntegration of {P}resentation {C}omponents},
booktitle = {{WWW} '07: Proceedings of the 16\textsuperscript{th} International
Conference on {W}orld {W}ide {W}eb},
year = {2007},
location = {Banff, Alberta, Canada},
isbn = {978-1-59593-654-7},
pages = {923--932},
doi = {http://doi.acm.org/10.1145/1242572.1242697},
keywords = {standard},
editor = {Mr. Test}
}
\end{filecontents}

\usepackage[style=authoryear-ibid,backend=biber,firstinits=true]{biblatex}
\bibliography{literatur}

\DeclareNameAlias{sortname}{last-first}
\DefineBibliographyStrings{ngerman}{
editor = {(Hrsg.)},
editors = {(Hrsg.)}
}

\DeclareBibliographyDriver{inproceedings}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\begingroup% NEU
\renewbibmacro*{date+extrayear}{}% NEU
\usebibmacro{editor+others} % NEU
\setunit{\labelnamepunct}\newblock% MACHT NÜSCHT
% \newunit\newblock
\endgroup % NEU
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{event+venue+date}%
\newunit\newblock
% \usebibmacro{byeditor+others} % ALT
% \newunit\newblock % ALT
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\printlist{organization}%
\newunit
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}


\begin{document}

\dots \cite{Yu2007} \dots

\printbibliography[title=Literaturverzeichnis]

\end{document}


Für euch sicher ein Kinderspiel :)

sensemann
15-03-2012, 14:12
Doch kein Kinderspiel?
Hier die Probleme mal veranschaulicht:

#1 inkl. Editor (wo ist der Doppelpunkt??):
http://pietschmann.cc/temp/editor1.PNG

#2 ohne Editor:
http://pietschmann.cc/temp/editor2.PNG

domwass
15-03-2012, 15:26
Ein kurzer Auszug aus deinem Beispiel:

\setunit{\labelnamepunct}\newblock% MACHT NÜSCHT
% \newunit\newblock
\endgroup % NEU
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
Wenn das bibmacro »maintitle+booktitle« nichts ausgibt, überschreibt das
darauf folgende \newunit dein \setunit{\labelnamepunct}. Abhilfe schafft
eventuell \setunit*{...} statt \newunit, also die Sternvariante, da dann die
Zeichensetzung nur erfolgt, wenn vorher etwas ausgegeben wurde (siehe
biblatex-Anleitung, die sich im Abschnitt »Using the Punctuation Tracker«
ausführlich mit dem Problem auseinandersetzt).

Gruß,
Dominik.-

sensemann
16-03-2012, 09:19
Bin nicht sicher, ob ich das verstanden hab. In dem Beispiel wird durch \usebibmacro{maintitle+booktitle} ja etwas ausgegeben. Hab mir den Abschnitt in der biblatex-Doku angeschaut, aber auch wenn ich selbst wenn ich den newunits/blocks rausnehme oder mit \setunit*{\adddot} (?) ersetze, ändert sich nix. Es gelingt mir überhaupt nicht, irgendwo später mal einen Doppelpunkt zu setzen... :confused:

Ein Doppelpunkt erscheint nie.



...
\usebibmacro{in:}%
\begingroup % NEU
\renewbibmacro*{date+extrayear}{} % NEU
\usebibmacro{editor+others} % NEU
\setunit*{\labelnamepunct}\newblock % MACHT NÜSCHT
\endgroup% NEU
\usebibmacro{maintitle+booktitle}%
\setunit*{\adddot} % \newunit\newblock
\usebibmacro{event+venue+date}%
\newunit\newblock


Hast du bzgl. des zweiten Problems eine Idee?

domwass
16-03-2012, 09:31
Wozu soll eigentlich \begingroup…\endgroup gut sein? Ich denke, damit setzt
du den puncutation tracker nur lokal, mit \endgroup ist dein Doppelpunkt dann
wieder weg (könnte ich mir vorstellen; sicher bin ich nicht). Nimm das mal
probehalber raus.

Gruß,
Dominik.-

[Edit]
Habe gerade gesehen, dass du date+extrayear umdefinierst und das nur lokal
haben willst. Das Umdefinieren von date+extrayear würde ich so nicht machen.
Ich würde stattdessen editor+others anpassen – oder, wenn editor+others nur
in diesem Fall anders sein soll als sonst, ein neues bibmacro dafür schreiben.

Wenn irgendetwas durch das bibmacro »editor+others« ausgegeben
wird, was nur bei Vorhandensein eines editor sinnvoll ist und sonst stört, kannst
du auch eine \ifnameundef{editor}-Abfrage einbauen, also

\ifnameundef{editor}
{}
{\usebibmacro{editor+others}%
\setunit*{\labelnamepunct}}

sensemann
16-03-2012, 13:23
Hi, ich nutze eigentlich nur ganz stoisch diesen Vorschlag (http://www.mrunix.de/forums/showpost.php?p=316771) von lockstep, deshalb auch die Gruppierung.

Nach viel probieren bin ich nun soweit, dass zumindest Problem (2) nicht mehr auftritt (DANKE!)
Das Minimalbeispiel sieht nach deinem Vorschlag nun wie folgt aus - den Doppelpunkt bekomme ich leider immer noch nicht hin :(




\documentclass[final,ngerman]{scrbook}

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

\usepackage{filecontents}
\begin{filecontents}{literatur.bib}
@INPROCEEDINGS{Yu2007,
author = {Jin Yu and Boualem Benatallah and Regis Saint-Paul and Fabio Casati
and Florian Daniel and Maristella Matera},
title = {{A} {F}ramework for {R}apid {I}ntegration of {P}resentation {C}omponents},
booktitle = {{WWW} '07: Proceedings of the 16\textsuperscript{th} International
Conference on {W}orld {W}ide {W}eb},
year = {2007},
location = {Banff, Alberta, Canada},
isbn = {978-1-59593-654-7},
pages = {923--932},
doi = {http://doi.acm.org/10.1145/1242572.1242697},
keywords = {standard},
editor = {Mr. Test}
}
\end{filecontents}

\usepackage[style=authoryear-ibid,backend=biber,firstinits=true]{biblatex}
\bibliography{literatur}

\renewcommand*{\nameyeardelim}{\addcomma\space}
\renewcommand{\labelnamepunct}{\addcolon\space}

%% sorting last name first
\DeclareNameAlias{sortname}{last-first}
% german
\DefineBibliographyStrings{ngerman}{
editor = {(Hrsg.)},
editors = {(Hrsg.)}
}

%% % % INPROCEEDINGS
\DeclareBibliographyDriver{inproceedings}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\ifnameundef{editor}
{}
{\usebibmacro{editor+others}%
\setunit*{\labelnamepunct}\newblock}
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{event+venue+date}%
\newunit\newblock
% \usebibmacro{byeditor+others} % ALT
% \newunit\newblock % ALT
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\printlist{organization}%
\newunit
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}

\makeatletter
\renewbibmacro*{bbx:editor}[1]{%
\ifboolexpr{
test \ifuseeditor
and
not test {\ifnameundef{editor}}
}%
{\printnames{editor}%
\setunit{\addspace} % WAS: \setunit{\addcomma\space}%
\usebibmacro{bbx:savehash}
\usebibmacro{#1}%
\clearname{editor}%
\setunit{\addspace}
}%
{
\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\addspace}
}%
%\usebibmacro{date+extrayear}
}
\makeatother

\begin{document}
\dots \cite{Yu2007}
\printbibliography[title=Literaturverzeichnis]

\end{document}

domwass
16-03-2012, 19:12
\DefineBibliographyStrings{ngerman}{
editor = {(Hrsg.)},
editors = {(Hrsg.)}
}

Daran liegts. Der Punkt sorgt dafür, dass biblatex meint, es steht schon ein
Satzzeichen da, und deshalb den Doppelpunkt weglässt. Nimm stattdessen

\DefineBibliographyStrings{ngerman}{
editor = {\mkbibparens{Hrsg\adddot}},
editors = {\mkbibparens{Hrsg\adddot}}
}

\mkbibparens{Hrsg.} geht übrigens auch. Es ist aber immer besser, die von
biblatex verwendeten Befehle für Zeichen zu verwenden, also \adddot für
einen Punkt, \addperiod für einen Satzendepunkt, \mkbibparens für runde
Klammern etc.

Gruß,
Dominik.-

sensemann
17-03-2012, 09:06
Super! Funktioniert alles wunderbar. Tausend Dank!:)