Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Hyperlinks mit biblatex (authoryear)

  1. #1
    Registrierter Benutzer
    Registriert seit
    27.11.2007
    Beiträge
    375

    Hyperlinks mit biblatex (authoryear)

    Hallo,

    leider habe ich bisher für mein Problem 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:

    Code:
    \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.

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Code:
    \documentclass{article}
    \usepackage[style=authoryear,hyperref=auto]{biblatex}
    \bibliography{\jobname}
    \renewbibmacro*{cite}{%
      \iffieldundef{shorthand}
        {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{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.

  3. #3
    Registrierter Benutzer
    Registriert seit
    27.11.2007
    Beiträge
    375
    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:
    Code:
    \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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Keine Ahnung, aber wenn ich raten müsste: 2010a und 2010b. Suche doch einfach mal in der Doku nach "labelyear".

  5. #5
    Registrierter Benutzer
    Registriert seit
    27.11.2007
    Beiträge
    375
    Zitat Zitat von u_fischer Beitrag anzeigen
    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.

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.11.2007
    Beiträge
    375

    Lösung mit nur einem Link

    Code:
    \documentclass{article}
    \usepackage[style=authoryear,hyperref=auto]{biblatex}
    \bibliography{\jobname}
    \renewbibmacro*{cite}{%
      \iffieldundef{shorthand}
        {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{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.

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •