Neuen "Internet" Typ für biblatex-apa definieren

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


Tassadar
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 6. Sep 2017, 00:25

Neuen "Internet" Typ für biblatex-apa definieren

Beitrag von Tassadar »

Hallo alle miteinander,

für den Großteil meiner Arbeiten nutze ich den biblatex-apa Style bzw. einen darauf basierenden eigenen Style mit kleinen Anpassungen. Ich bin inzwischen auch ganz gut in der Lage Anpassungen die ich brauche selbstständig zu machen, aber bei der jetzigen Frage brauche ich definitiv Hilfe.

Und zwar:
Ich hätte gerne die Möglichkeit, dass ich Internetseiten wie folgt zitieren kann.
Im Text erfolgt die Zitation nach (URL1) (URL2) usw.
Im (gesonderten) Literaturverzeichnis erfolgt die Zitation wie folgt:
URL1: link (besucht am urldate).
URL2: link (besucht am urldate).

Als ich das zuletzt machen musste, habe ich das ganze etwas umschifft und in der .bib Datei die Einträge als @online gesetzt, als Autor dann das URL1 usw. gesetzt und dann den APA Style so angepasst, dass die Dinge ausgegeben werden die ich brauche. Das ist natürlich aber nur eine Notlösung, da ich zum Beispiel manuell die Nummerierung machen musste und es auch sonst nur hingebastelt ist.

Was ich mir vorstelle:
Da es sich ja um sehr simple Formatierungen handelt und man nicht alle möglichen Szenarien mit autor, journal, etc. berücksichtigen muss, dachte ich es wäre das Einfachste, man definiert einen neunen Entrytype (homepage oder so) bei dem man in der .bib Datei url und urldate setzt. Dann definiert man einen neuen Citecommand und Bibliographydriver, die die interne Nummerierung übernehmen und es so ausgeben wie es sein soll.

Ich habe aber leide gar keine Ahnung wie man das macht. :)
Kann mir da jemand helfen oder hat einen anderen kreativen Ansatz wie man das umsetzen kann?

Vielen Dank schon mal im Voraus!

Gast

Beitrag von Gast »

Prinzipiell brauchst Du keinen neuen Typen, Du kannst einfach @online völlig umbauen. Wenn Du unbedingt einen neuen Typen möchtest, dann kannst Du Dir https://tex.stackexchange.com/q/175776/35864 ansehen. Gerade bei biblatex-apa ist aber in beiden Fällen etwas Gefriemel notwendig, um die Zitate dann richtig aussehen zu lassen.

Ich bin der Meinung, dass es gerade bei URLs viel zu wenig ist, nur dem Link anzugeben. Was wenn der nicht mehr abrufbar ist? Dann kann eine Leserin die Quelle praktisch nicht mehr finden. Wenn Du aber Titel und Autor sowie ein Datum angibst, dann besteht zumindest noch die Chance mit etwas Google-Fu an die Quelle heranzukommen. Außerdem ist es nicht nachvollziehbar, dass Autoren von anderen Quellen mit Namen genannt werden, die von Online-Quellen aber nicht. Damit verwehrst Du ihnen gewissermaßen die Anerkennung, die Du anderen zuteilwerden lässt.

Ferner verstehe ich nicht ganz, wie "(URL1)", "(URL2)" zu verstehen ist. Soll da wirklich "URL1" und "URL2" stehen oder sind das Platzhalter für etwas sprechendere Namen?

Vielleicht kannst Du uns ja ein Minimalbeispiel zeigen und dort schon direkt die gewünschte Ausgabe emulieren und am Beispiel konkret machen.

Tassadar
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 6. Sep 2017, 00:25

Beitrag von Tassadar »

Erstmal vielen Dank für deine Antwort!

Eins vorweg: Ich stimme dir vollkommen zu, dass es nicht schön und nicht sinnvoll usw. ist. Aber so ist die Vorgabe der Uni...

Hier mal das MWE:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}

\usepackage{filecontents}
\begin{filecontents}{literature.bib}
@online{NABU,
author = {{URL 4}},
title = {{Kirsche}},
url = {https://www.nabu.de/imperia/md/nabu/images/arten/pflanzen/nutzpflanzen/obst/steinobst/20141015-nabu-sauerkirsche-helge-may2.jpeg},
urldate = {2019-04-24}
}
@online{BUND,
author = {{URL 1}},
title = {{Weinbergschnecke}},
url = {http://www.bund-hessen.de/themen{\_}und{\_}projekte/natur{\_}und{\_}artenschutz/natur{\_}erleben/w/weinbergschnecke/},
urldate = {2019-04-25}
}
\end{filecontents}

\usepackage[
backend = biber, 		
style = apa		
]{biblatex}
\addbibresource{literature.bib}
\AtEveryBibitem{%
	\ifentrytype{online}{%
		\clearfield{labelyear}%
		\clearfield{title}%
	}{%
	}%
}
\DeclareFieldFormat{url}{\url{#1}}

\begin{document}

Hier würde man sich auf die erste Quelle beziehen (\citeauthor{BUND}), und weil man es manuell so gemacht hat, wird auch richtig (URL 1) angezeigt. Und hier bei der zweiten Quelle (\citeauthor{NABU}) sollte aber eigentlich (URL 2) stehen.

Im Literaturverzeichnis dann eben analog.

\printbibliography[type=online,title=Verzeichnis der Internetquellen]

\end{document}
Overleaf scheint die Ausgabe von dem "retrieved urldate from" nicht richtig hinzubekommen. Aber man sollte sehen worum es geht.
In dem MWE sieht man, wie ich das Problem umschifft habe aber man sieht auch, warum das ganz sicher keine gute Lösung ist.
Idealerweise sollte das Verzeichnis die folgende Form haben:
URL 1: url, genutzt am urldate

Ich fände es am schönsten einen neuen Typ zu haben, aber wenn es einfacher ist @online komplett umzudefinieren wäre ich auch damit glücklich.

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Deine Behandelung der Unterstriche im Datenfeld für URLs ist nicht nötig und verunstaltet die Ausgabe.

Der Stil apa braucht bei der älteren TeX-Distribution von Overleaf noch den Befehl \DeclareLanguageMapping.

Gast

Beitrag von Gast »

Prinzipiell ginge es in etwa so
\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=apa]{biblatex}

\ExecuteBibliographyOptions[online]{labelnumber}
\DeclareFieldFormat[online]{labelnumber}{URL~#1}

\makeatletter
\renewbibmacro*{cite}{%
  \ifentrytype{online}
    {\printfield{labelnumber}}
    {\iffieldequals{fullhash}{\cbx@lasthash}
% Multiple cites in one command
      {\setunit{\compcitedelim}%
       \usebibmacro{cite:plabelyear+extradate}}%
% Single cite
      {\ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
% No author/editor
        {\usebibmacro{cite:noname}%
          \setunit{\printdelim{nameyeardelim}}%
          \usebibmacro{cite:plabelyear+extradate}%
          \savefield{fullhash}{\cbx@lasthash}}
% Normal cite
        {\ifnameundef{shortauthor}
           {\printnames[labelname][-\value{listtotal}]{labelname}}%
           {\cbx@apa@ifnamesaved
             {\printnames{shortauthor}}
             {\printnames[labelname][-\value{listtotal}]{author}\addspace\printnames[sabrackets]{shortauthor}}}%
         \setunit{\printdelim{nameyeardelim}}%
         \usebibmacro{cite:plabelyear+extradate}%
         \savefield{fullhash}{\cbx@lasthash}}}}%
   \setunit{\multicitedelim}}

\newbibmacro*{textcite}{%
  \ifentrytype{online}
    {\ifbool{cbx:parens}
       {\bibcloseparen\global\boolfalse{cbx:parens}}
       {}%
     \setunit{\compcitedelim}%
     \printfield{labelnumber}%
     \ifboolexpr{test {\iflastcitekey}
                 and not test {\iffieldundef{postnote}}}
       {\ifbool{cbx:np}
          {}
          {\printunit{\global\booltrue{cbx:parens}\addspace\bibopenparen}}}
       {}}
    {\iffieldequals{fullhash}{\cbx@lasthash}
% Compact cite - more than one thing for same author
       {\setunit{\compcitedelim}%
        \usebibmacro{cite:plabelyear+extradate}}
% New cite
       {%
       \ifbool{cbx:parens}
         {\bibcloseparen\global\boolfalse{cbx:parens}}
         {}%
         \setunit{\compcitedelim}%
         \ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
  % No author/editor or patent
          {\iffieldundef{shorthand}%
    % Cite using title
            {\usebibmacro{cite:noname}%
             \setunit{\ifbool{cbx:np}%
                      {\printdelim{nameyeardelim}}%
                      {\global\booltrue{cbx:parens}\addspace\bibopenparen}}%
             \usebibmacro{cite:plabelyear+extradate}}
    % Cite using shorthand
            {\usebibmacro{cite:shorthand}}}
  % Normal cite with author/editor
  % Normal full cite
          {\ifnameundef{shortauthor}%
    % Normal full cite
            {\printnames[labelname][-\value{listtotal}]{labelname}}
    % Cite using short author
            {\cbx@apa@ifnamesaved
              {\printnames{shortauthor}}
              {\printnames[labelname][-\value{listtotal}]{author}}}%
  % Year
           \setunit{\ifbool{cbx:np}
                     {\printdelim{nameyeardelim}}
                     {\global\booltrue{cbx:parens}\addspace\bibopenparen}}%
  % Put the shortauthor inside the year brackets if necessary
           \ifnameundef{shortauthor}
            {}
            {\cbx@apa@ifnamesaved
              {}
              {\printnames{shortauthor}\setunit{\printdelim{nameyeardelim}}}}%
  % Actual year printing
           \usebibmacro{cite:plabelyear+extradate}%
  % Save name hash for checks later
           \savefield{fullhash}{\cbx@lasthash}}}}}
\makeatother

\DeclareFieldFormat{url}{\url{#1}}
\DeclareFieldFormat{std:urldate}{\mkbibparens{\bibstring{urlseen}\space#1}}
\newbibmacro*{std:url+urldate}{%
  \usebibmacro{url}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \printtext[std:urldate]{\printurldate}}}

\DeclareBibliographyDriver{online}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{labelnumber}
  \printunit{\addcolon\space}%
  \iftoggle{bbx:doi}
    {\printfield{doi}%
     \iffieldundef{doi}{}{\renewcommand*{\finentrypunct}{\relax}}}
    {}%
  \newunit\newblock
  \iftoggle{bbx:eprint}
    {\usebibmacro{eprint}%
     \iffieldundef{eprint}{}{\renewcommand*{\finentrypunct}{\relax}}}
    {}%
  \newunit\newblock
  \usebibmacro{std:url+urldate}%
  \iffieldundef{url}{}{\renewcommand*{\finentrypunct}{\relax}}
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{apa:pageref}%
  \usebibmacro{apa:finpunct}%
  \usebibmacro{finentry}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@online{NABU,
  title   = {Kirsche},
  url     = {https://www.nabu.de/imperia/md/nabu/images/arten/pflanzen/nutzpflanzen/obst/steinobst/20141015-nabu-sauerkirsche-helge-may2.jpeg},
  urldate = {2019-04-24},
}
@online{BUND,
  title   = {Weinbergschnecke},
  url     = {http://www.bund-hessen.de/themen_und_projekte/natur_und_artenschutz/natur_erleben/w/weinbergschnecke/},
  urldate = {2019-04-25},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
Hier würde man sich auf die erste Quelle beziehen \autocite{NABU}, und weil man es manuell so gemacht hat, wird auch richtig (URL 1) angezeigt. Und hier bei der zweiten Quelle \autocite{BUND} sollte aber eigentlich (URL 2) stehen.

\autocite{sigfridsson}

\textcite{BUND}

\textcite[14]{BUND}

\textcite{sigfridsson,BUND}

\printbibliography[nottype=online]
\newrefcontext[sorting=none]
\printbibliography[type=online,title=Verzeichnis der Internetquellen]
\end{document}
Wir lassen biblatex und Biber labelnumbers für den Typen @online definieren. Die können wir dann in den Zitaten nutzen. Dazu müssen wir aber die ohnehin nicht ganz simplen Zitatmakros umdefinieren (die Originaldefinitionen findest Du in apa.cbx, eigentlich kommt immer nur der \ifentrytype{online}-Teil und das \printfield{labelnumber} dazu, bei textcite auch noch etwas für die Klammern). Dann können wir den Driver komplett umkrempeln und ihn nur noch Link-Infos anzeigen lassen statt anderer bibliographischer Angaben.

Wenn alle Online-Quellen wirklich so behandelt werden sollen, dann sehe ich absolut keinen Vorteil, einen neuen Typen @homepage zu definieren. Aber Du kannst das natürlich machen. Du musst dazu nur wie in https://tex.stackexchange.com/q/175776/35864 vorgehen und den neuen Typen definieren und dann in dem Code hier jedes online durch homepage ersetzen.

Getestet ist der Code mit der aktuellen Version von biblatex (3.12) und Biber (2.12) sowie biblatex-apa (7.7). Was Overleaf mit seinem veralteten System davon macht, habe ich mir jetzt nicht angesehen.

Tassadar
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 6. Sep 2017, 00:25

Beitrag von Tassadar »

Du bist mein Held! Vielen, vielen Dank! Funktioniert perfekt! :D

Antworten