PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hyperlinks mit biblatex (authoryear)



tral
11-02-2010, 09:02
Hallo,

leider habe ich bisher für mein Problem (http://www.mrunix.de/forums/showthread.php?t=67213) mit der Linkdarstellung von Zitaten mit natbib keine Lösung gefunden. Deshalb dachte ich mir, ich wage mal einen Umstieg auf biblatex. Allerdings werden auch hier nur ein Teil des Zitates (genauer die Jahreszahl) verlinkt:



\documentclass{article}
\usepackage[style=authoryear,hyperref=auto]{biblatex}
\bibliography{\jobname}

\usepackage{hyperref}
\hypersetup{colorlinks=true}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{example,
author = {Mustermann, H.},
year = {2010},
title = {Test},
}
\end{filecontents}

\begin{document}

\cite{example}

\printbibliography

\end{document}


Weiß jemand, wie man erreicht, dass sich der Link über das gesamte Zitat erstreckt?


Noch eine Frage zum Umstieg zu biblatex: Wie sieht es mit der Unterstützung von biblatex in den geläufigen Distributionen aus. In TeX Live (was ich benutze), ist es ja enthalten...

Vielen Dank,

Christian.

u_fischer
11-02-2010, 10:04
\documentclass{article}
\usepackage[style=authoryear,hyperref=auto]{biblatex}
\bibliography{\jobname}
\renewbibmacro*{cite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{year}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printtext[bibhyperref]{\printnames{labelname}}%<-- geändert
\setunit{\nameyeardelim}}%
\usebibmacro{cite:year+labelyear}}
{\usebibmacro{cite:shorthand}}}
\usepackage{hyperref}
\hypersetup{colorlinks=true}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{example,
author = {Mustermann, H.},
year = {2010},
title = {Test},
}
\end{filecontents}

\begin{document}

\cite{example}

\printbibliography

\end{document}

Das ergibt dann zwei links, einen erzeugt von \printtext[bibhyperref]{\printnames{labelname} und der andere kommt von \usebibmacro{cite:year+labelyear}, das intern auch \printtext[bibhyperref] benutzt. Andere Lösungen sind natürlich möglich. Die Originaldefinitionen findest du in authoryear.cbx.

tral
11-02-2010, 10:22
Danke Ulrike!

Das ist schon mal eine Lösung. Die authoryear.cbx hatte ich auch schon offen und hatte versucht, da durchzusteigen...

Etwas unschön ist, dass zwei Links erzeugt werden. Wahrscheinlich muss ich aber einfach nur beide Teile (labelname und labelyear) in eine \printtext[bibhyperref] Anweisung packen...

Eine Verständnisfrage: In authoryear.cbx findet sich das Macro für die Jahresangabe:


\newbibmacro*{cite:year+labelyear}{%
\iffieldundef{year}
{}
{\printtext[bibhyperref]{%
\printfield{year}%
\printfield{labelyear}}}}


Warum werden dort zwei Felder (year und labelyear) ausgegeben? Was ist der Unterschied?

Viele Grüße,

Christian.

u_fischer
11-02-2010, 10:53
Keine Ahnung, aber wenn ich raten müsste: 2010a und 2010b. Suche doch einfach mal in der Doku nach "labelyear".

tral
11-02-2010, 11:01
Keine Ahnung, aber wenn ich raten müsste: 2010a und 2010b. Suche doch einfach mal in der Doku nach "labelyear".

Stimmt. Doku, Abschnitt 4.2.4... labelyear ist eine Art Zähler, der die Nummer der Publikation eine Authors im selben Jahr enthält.

Danke,

Christian.

tral
11-02-2010, 15:36
\documentclass{article}
\usepackage[style=authoryear,hyperref=auto]{biblatex}
\bibliography{\jobname}
\renewbibmacro*{cite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldund ef{year}}
{\usebibmacro{cite:label}%
\setunit{\addspace}
\usebibmacro{cite:year+labelyear}}
{\printtext[bibhyperref]{%
\printnames{labelname}%
\setunit{\nameyeardelim}%
\printfield{year}%
\printfield{labelyear}%
}%
}%
}
{\usebibmacro{cite:shorthand}}}

\usepackage{hyperref}
\hypersetup{colorlinks=true}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{example,
author = {Mustermann, H.},
year = {2010},
title = {Test},
}
\end{filecontents}

\begin{document}

\cite{example}

\printbibliography

\end{document}


Danke nochmal an Ulrike!

Christian.