von Gast » Do 8. Aug 2019, 21:39
Statt sich auf manuell erstellte keywords zu verlassen, würde ich biblatex Online-Quellen lieber selbst erkennen lassen. Dazu müssen Online-Quellen nur den Typ @online nutzen (aber das sollten sie wohl eh). (Ich nutze im Folgenden die Variante, bei der biblatex anhand des Typs entscheidet, wie Dinge auszusehen haben, es ist dem Leser als Übungsaufgabe überlassen das mittels \ifkeyword und Co. für keyords anzupassen, wenn das unbedingt gewünscht ist.)
Ferner ist es wesentlich komfortabler, wenn man nicht gezwungen ist, zwei verschiedene Befehle zu nutzen. biblatex sollte bei der Nutzung eines einheitlichen Befehls automatisch entscheiden können, wie das Zitat auszusehen hat. Dabei ergibt sich aber das kleine Problem, dass Du unterschiedliche Klammerarten für die unterschiedlichen Typen möchtest. biblatexs \...cite-Makros arbeiten so, dass die äußere Klammerung unabhängig vom Zitatinhalt gesetzt wird, daher wäre einiges an Arbeit nötig, die Klammern auch automatisch anzupassen.
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear,
labelnumber,defernumbers]{biblatex}
\letbibmacro{cite:default}{cite}
\newbibmacro{cite:online}{%
\printtext[bibhyperref]{%
\printfield{labelprefix}%
\printfield{labelnumber}}}
\renewbibmacro{cite}{%
\ifbibmacroundef{cite:\thefield{entrytype}}
{\usebibmacro{cite:default}}
{\usebibmacro*{cite:\thefield{entrytype}}}}
\DeclareFieldFormat{labelnumberwidth}{\mkbibparens{#1}}
\DeclareFieldFormat{shorthandwidth}{\mkbibparens{#1}}
\defbibenvironment{online}
{\list
{\printtext[labelnumberwidth]{%
\printfield{labelprefix}%
\printfield{labelnumber}}}
{\setlength{\labelwidth}{\labelnumberwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{\hss##1}}
{\endlist}
{\item}
\bibliography{biblatex-examples.bib}
\begin{document}
Hier soll der Artikel~\autocite{sigfridsson}
und die Internetseite~\autocite{markey} zitiert werden.
Hier soll das Buch~\autocite{worman}
und die Internetseite~\autocite{baez/online} zitiert werden.
\printbibheading
\printbibliography[
heading=subbibliography,
title={Literatur},
nottype=online,
omitnumbers]
\newrefcontext[sorting=none]
\printbibliography[
heading=subbibliography,
title={Online},
type=online,
env=online]
\end{document}
Beachte, dass sorting=none, nicht mehr als Argument zu \printbibliography angegeben werden kann. Das muss jetzt mittels \newrefcontext erledigt werden. Viel mehr sollte sich dadurch aber nicht ändern
Statt sich auf manuell erstellte [tt]keyword[/tt]s zu verlassen, würde ich [tt]biblatex[/tt] Online-Quellen lieber selbst erkennen lassen. Dazu müssen Online-Quellen nur den Typ [tt]@online[/tt] nutzen (aber das sollten sie wohl eh). (Ich nutze im Folgenden die Variante, bei der [tt]biblatex[/tt] anhand des Typs entscheidet, wie Dinge auszusehen haben, es ist dem Leser als Übungsaufgabe überlassen das mittels [tt]\ifkeyword[/tt] und Co. für [tt]keyord[/tt]s anzupassen, wenn das unbedingt gewünscht ist.)
Ferner ist es wesentlich komfortabler, wenn man nicht gezwungen ist, zwei verschiedene Befehle zu nutzen. [tt]biblatex[/tt] sollte bei der Nutzung eines einheitlichen Befehls automatisch entscheiden können, wie das Zitat auszusehen hat. Dabei ergibt sich aber das kleine Problem, dass Du unterschiedliche Klammerarten für die unterschiedlichen Typen möchtest. [tt]biblatex[/tt]s [tt]\...cite[/tt]-Makros arbeiten so, dass die äußere Klammerung unabhängig vom Zitatinhalt gesetzt wird, daher wäre einiges an Arbeit nötig, die Klammern auch automatisch anzupassen.
[code]\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear,
labelnumber,defernumbers]{biblatex}
\letbibmacro{cite:default}{cite}
\newbibmacro{cite:online}{%
\printtext[bibhyperref]{%
\printfield{labelprefix}%
\printfield{labelnumber}}}
\renewbibmacro{cite}{%
\ifbibmacroundef{cite:\thefield{entrytype}}
{\usebibmacro{cite:default}}
{\usebibmacro*{cite:\thefield{entrytype}}}}
\DeclareFieldFormat{labelnumberwidth}{\mkbibparens{#1}}
\DeclareFieldFormat{shorthandwidth}{\mkbibparens{#1}}
\defbibenvironment{online}
{\list
{\printtext[labelnumberwidth]{%
\printfield{labelprefix}%
\printfield{labelnumber}}}
{\setlength{\labelwidth}{\labelnumberwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{\hss##1}}
{\endlist}
{\item}
\bibliography{biblatex-examples.bib}
\begin{document}
Hier soll der Artikel~\autocite{sigfridsson}
und die Internetseite~\autocite{markey} zitiert werden.
Hier soll das Buch~\autocite{worman}
und die Internetseite~\autocite{baez/online} zitiert werden.
\printbibheading
\printbibliography[
heading=subbibliography,
title={Literatur},
nottype=online,
omitnumbers]
\newrefcontext[sorting=none]
\printbibliography[
heading=subbibliography,
title={Online},
type=online,
env=online]
\end{document}[/code]
Beachte, dass [tt]sorting=none,[/tt] nicht mehr als Argument zu [tt]\printbibliography[/tt] angegeben werden kann. Das muss jetzt mittels [tt]\newrefcontext[/tt] erledigt werden. Viel mehr sollte sich dadurch aber nicht ändern