PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Spaß mit biblatex und hyperref



sensemann
29-02-2012, 11:05
Hallo,

ich hadere noch immer mit biblatex. Im Minimalbeispiel unten seht ihr mein bisheriges Setup, mit dem ich ganz zufrieden war. Kurz gesagt bekomme ich damit folgende ausgabe hin:

\textcite{...} ergibt die Textform: Szyperski et al. (2002)
\parencite{...} ergibt die Klammerform: [Szyperski et al., 2002]

In Verbindung mit hyperref bestand allerdings das Problem, dass immer nur die Jahreszahlen verlinkt waren. Also habe ich mich des Internets bedient und eine Lösung gefunden: die beiden "DeclareCiteCommand"-Teile vor dem Dokumentenbeginn, die auch tun, was sie sollen.
ABER: Das Problem zeigt sich am Besten anhand von Bildern.

Vorher (ohne):http://pietschmann.cc/temp/vorher.PNG
Nachher (mit): http://pietschmann.cc/temp/nachher.PNG

Wird also ein Eintrag/Autor mehrfach referenziert, verschwindet er. Leider steig ich bei der biblatex-Manipulation nicht so durch, aber vielleicht kann mir jemand hier weiterhelfen?




\documentclass[final,ngerman]{scrbook}

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

\usepackage{filecontents}
\begin{filecontents}{literatur.bib}
@BOOK{Szyperski2002a,
title = {Component Software: Beyond Object-Oriented Programming},
year = {2002},
author = {Clemens Szyperski},
}
@BOOK{Szyperski2002b,
title = {Component Software: Beyond Object-Oriented Programming},
year = {2002},
author = {Clemens Szyperski},
}
\end{filecontents}

% link color
\usepackage[pdftex,natural,dvipsnames]{xcolor}
\xdefinecolor{dblue}{rgb}{0,.1,.5}

%% hyperref + link color
\usepackage[pdftex,bookmarks,colorlinks]{hyperref}
\hypersetup{citecolor=dblue,linkcolor=dblue}
%% biblatex
\usepackage[style=authoryear-comp]{biblatex}
\bibliography{literatur}

% comma separating author-year
\renewcommand*{\nameyeardelim}{\addcomma\space}
% using brackets for parencite [Doe et al., 2001]
\renewcommand*{\mkbibparens}[1]{{\ifcitation{\bibleftbracket#1\bibrightbracket}%
{\bibleftparen#1\bibrightparen}}}

% auskommentieren %
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}

\DeclareCiteCommand{\textcite}
{\boolfalse{cbx:parens}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{textcite}}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}
{\usebibmacro{textcite:postnote}}
% % % %

\begin{document}

a. parens: \parencite{Szyperski2002a}\\
b. text: \textcite{Szyperski2002b}\\
a. text: \textcite{Szyperski2002a}\\
b. parens: \parencite{Szyperski2002b}\\

\printbibliography[title=Literaturverzeichnis]

\end{document}


Bei der Gelegenheit möchte ich nochmal Werbung für meine andere biblatex-Frage machen (bzgl. Literaturverzeichnis). Marco hatte sich schon verdient gemacht und mir mächtig weitergeholfen, aber am Ende hakte noch. Wäre super, wenn mir da auch jemand auf die Sprünge helfen könnte! http://www.mrunix.de/forums/showthread.php?t=71773

sensemann
01-03-2012, 15:20
.. oder anders herum gefragt: Hat jemand eine Idee, wie die Referenzen (Abb.1) so erscheinen, dass nicht nur die Jahreszahlen, sondern auch die Autoren verlinkt sind?

nixversteh
01-03-2012, 16:30
.. oder anders herum gefragt: Hat jemand eine Idee, wie die Referenzen (Abb.1) so erscheinen, dass nicht nur die Jahreszahlen, sondern auch die Autoren verlinkt sind?

Hallo sensemann,

vielleicht kannst du aus diesem Code etwas für dich abzweigen

\documentclass[final]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[style=authoryear,maxcitenames=1,backref=true, backend=biber,hyperref=true]{biblatex}
\usepackage{filecontents}

%**********************************************
% Advanced features for clever quotations
%**********************************************
\usepackage[autostyle,
german=guillemets,
english=british,
french=guillemets
]{csquotes}

\renewbibmacro*{cite}{% Adapted from cite macro in authoryear.cbx
\printtext[bibhyperref]{% Enclose cite macro output in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}}

\DeclareCiteCommand{\textcite}% Adapted from \textcite command in authoryear.cbx
{\boolfalse{cbx:parens}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{% Enclose textcite macro output in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\usebibmacro{textcite}%
\iffieldundef{postnote}% Include closing parenthesis if no postnote
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}}
{}}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}
{\iffieldundef{postnote}
{}
{\usebibmacro{textcite:postnote}}}

\renewcommand{\baselinestretch}{1.25}
\addbibresource{biblatex-examples.bib}

% link color
\usepackage[pdftex,natural,dvipsnames]{xcolor}
\xdefinecolor{dblue}{rgb}{0,.1,.5}

%% hyperref + link color
\usepackage[pdftex,bookmarks,colorlinks]{hyperref}
\hypersetup{citecolor=dblue,linkcolor=dblue}
\begin{document}
\null\vfill\noindent
a. parens: \parencite{Szyperski2002a}\\
b. text: \textcite{Szyperski2002b}\\
a. text: \textcite{Szyperski2002a}\\
b. parens: \parencite{Szyperski2002b}\\

\printbibliography
\end{document}

Quelle: http://tex.stackexchange.com/questions/15951/hyperlink-name-with-biblatex-authoryear-biblatex-1-4b
Viel Erfolg

Gruß

Martin

sensemann
04-03-2012, 15:27
Tausend Dank, das sah auf Anhieb schon gut aus, bringt aber doch Probleme. Hier der Vorher-nachher-Vergleich: die Verlinkung klappt gut, aber mit aufeinanderfolgenden, gleichen Autoren hat er immer noch so seine Probleme... :(
Zusätzlich kommt noch ein Problem mit Aufzählungen dazu, siehe ganz unten.

http://pietschmann.cc/temp/biblatex2.png

Das Minimalbeispiel für den rechten Teil sieht so aus:



\documentclass[final,ngerman]{scrbook}

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

\usepackage{filecontents}
\begin{filecontents}{literatur.bib}
@BOOK{Szyperski2002a,
title = {Component Software: Beyond Object-Oriented Programming},
year = {2002},
author = {Clemens Szyperski},
}
@BOOK{Szyperski2002b,
title = {Component Software: Beyond Object-Oriented Programming},
year = {2002},
author = {Clemens Szyperski},
}
\end{filecontents}

% link color
\usepackage[pdftex,natural,dvipsnames]{xcolor}
\xdefinecolor{dblue}{rgb}{0,.1,.5}

%% hyperref + link color
\usepackage[pdftex,bookmarks,colorlinks]{hyperref}
\hypersetup{citecolor=dblue,linkcolor=dblue}
%% biblatex
\usepackage[style=authoryear-comp]{biblatex}
\bibliography{literatur}

% comma separating author-year
\renewcommand*{\nameyeardelim}{\addcomma\space}
% using brackets for parencite [Doe et al., 2001]
\renewcommand*{\mkbibparens}[1]{{\ifcitation{\bibleftbracket#1\bibrightbracket}%
{\bibleftparen#1\bibrightparen}}}

\renewbibmacro*{cite}{% Adapted from cite macro in authoryear.cbx
\printtext[bibhyperref]{% Enclose cite macro output in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}}

\DeclareCiteCommand{\textcite}% Adapted from \textcite command in authoryear.cbx
{\boolfalse{cbx:parens}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{% Enclose textcite macro output in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\usebibmacro{textcite}%
\iffieldundef{postnote}% Include closing parenthesis if no postnote
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}}
{}}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}
{\iffieldundef{postnote}
{}
{\usebibmacro{textcite:postnote}}}

\begin{document}

a. parencite: \parencite{Szyperski2002a}\\
a. textcite: \textcite{Szyperski2002a}\\
\medskip

b. textcite: \textcite{Szyperski2002b}\\
b. parencite: \parencite{Szyperski2002b}\\

\medskip
a. parencite: \parencite{Szyperski2002a}\\
b. parencite: \parencite{Szyperski2002b}\\
a. textcite: \textcite{Szyperski2002a}\\
b. textcite: \textcite{Szyperski2002b}\\

\medskip

a,b. parencite: \parencite{Szyperski2002a,Szyperski2002b}\\

\printbibliography[title=Literaturverzeichnis]

\end{document}

sensemann
04-03-2012, 17:08
Problem mehr oder weniger gelöst! Die Verkürzung kommt ja letztlich aufgrund des kompakten Modus' zustande, also nehm ich jetzt authoryear statt authoryear-comp, und beide Lösungen funktionieren.

Danke!