Mit
\renewbibmacro*{url+urldate} definierst Du ein Bibmakro namens
url+urldate um. Normalerweise wird dieses Makro im Literaturverzeichnis von allen Typen verwendet. (Jeder Typ hat einen eigenen
bibliography driver, der bestimmt, wie die Ausgabe im Literaturverzeichnis aussieht. Ein
bibliography driver ruft meist eine Anzahl an Bibmakros auf, um die Ausgabe zu erledigen. Siehe z.B.
den aktuellen @online-driver, standard.bbx, Z. 469-500. Das
url+urldate-Makro wird standardmäßig universell verwendet.) Das bedeutet, dass Du dadurch die Ausgabe der URL und des Abrufdatums im Literaturverzeichnis anpasst.
Der gezeigte Code definiert das standardmäßig (
in biblatex.def, Z. 2924-2929) als
\newbibmacro*{url+urldate}{%
\usebibmacro{url}%
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}}}
definierte Makro etwas um.
Noch immer wird die URL ausgegeben (unabhängig vom Typ). Dann wird - nur für
@online (mit
\ifentrytype{online}{<true>}{<false>}) - nach einem Leerzeichen auch das
date, also das Publikationsdatum, ausgegeben. (Wie gesagt ist das
\printtext[date]{} nicht sinnvoll, da es nichts tut.
\printtext[<format>]{<text>} gibt den gegebenen Text
<text> im Format
<format> aus. In der hier genutzten Eingabe ist
<text> leer. Das ist ein Sonderfall, auf den
biblatex extra testet und in dem gar nichts passiert. Das
\iffieldundef{year} kann man sich ebenfalls sparen, da
\usebibmacro{date} clever genug ist, nichts zu tun, wenn das Datum nicht definiert ist.) Schließlich kommt für alle Typen wieder ein Leerzeichen und dann das Abrufdatum.
Mit
year und
date muss man ein bisschen aufpassen. Die beziehen sich auf das gleiche, nämlich das Publikationsdatum. Zunächst ist es so, dass in der Eingabe - in der
.bib-Datei - sowohl
year als auch
date valide Felder sind.
year ist dabei als mit BibTeX-Stilen abwärtskompatible Alternative für
date gedacht. Man kann nicht beide gleichzeitig haben! Im
biblatex-Code, wie Du in hier schreibst, gibt es kein Feld
date. Dort wird
date in einzelne Datumsbestandteile aufgeschlüsselt. Wie das genau passiert, muss man nicht wissen, wenn man einfach
\usebibmacro{date} oder
\printdate nutzt, um das Datum auszugeben. Was man aber wissen sollte, ist, dass es im Allgemeinen nicht sinnvoll ist, Code einzuführen, der
date und
year in Bibmakros zu unterscheiden versucht. Mit
\iffieldundef{year} testet man, ob ein Datum vorhanden ist (egal ob es in der Eingabe
date oder
year war).
\printfield{year} sollte man nicht nutzen, da es nicht für alle Eingaben korrekt funktioniert,
\printfield{date} funktioniert gar nicht, da es auf der LaTeX-Seite kein Feld
date gibt. Stattdessen nimmt man - wie oben erwähnt -
\printdate und Co. (hier in Form von [t]\usebibmacro{date}[/tt] das als
\printdate definiert ist).
Zu den fehlenden
%: Die Regeln von TeX sind hier nicht ganz trivial. Für eine korrekte Antwort möchte ich wie oben auf
https://tex.stackexchange.com/q/7453/35864 und die dort genannten weiterführenden Links verweisen. (Wenn Dir eine deutsche Version lieber ist, sieh Dir
https://texwelt.de/fragen/16/ an.)
In Text ist es normalerweise gewünscht, dass ein Zeilenende ein Leerzeichen ist. Schließlich liest man ein Zeilenende wie ein Leerzeichen und es wäre unpraktisch und kontraintuitiv, explizit Leerzeichen vor dem Zeilenende einfügen zu müssen, um sie im Text erscheinen zu lassen. In Makrodefinitionen ist es häufig nicht gewollt, dass alle Zeilenenden (die oftmals für eine bessere Übersicht im Code eingeführt wurden) ein Leerzeichen produzieren. Daher muss dort oft ein
% stehen. Das hat jetzt nichts unbedingt damit zu tun, ob man sich innerhalb geschweifter Klammern befindet oder nicht (obwohl man sich bei Makrodefinitionen eigentlich immer innerhalb von geschweiften Klammern befindet).
Nun ist es so, dass
biblatex dadurch wie es Zeichensetzung handhabt (idealerweise mit
\setunit und Co.), in einigen Situationen einen zusätzlichen Schutz vor ungewollten Leerzeichen eingebaut hat. Daher ist es sehr gut möglich, dass eine Vielzahl von (eigentlich) fehlenden
% kein Problem verursachen. Es ist aber dennoch eine gute Idee, sich mit den Regeln für
% vertraut zu machen und sie korrekt zu setzen. Denn alles kann auch
biblatex nicht.
Mit [tt]\renewbibmacro*{url+urldate}[/tt] definierst Du ein Bibmakro namens [tt]url+urldate[/tt] um. Normalerweise wird dieses Makro im Literaturverzeichnis von allen Typen verwendet. (Jeder Typ hat einen eigenen [i]bibliography driver[/i], der bestimmt, wie die Ausgabe im Literaturverzeichnis aussieht. Ein [i]bibliography driver[/i] ruft meist eine Anzahl an Bibmakros auf, um die Ausgabe zu erledigen. Siehe z.B. [url=https://github.com/plk/biblatex/blob/ca032db14c25fcad84a75ce5f43ba59c39ac69f2/tex/latex/biblatex/bbx/standard.bbx#L469-L500]den aktuellen [tt]@online[/tt]-[i]driver[/i], [tt]standard.bbx[/tt], Z. 469-500[/url]. Das [tt]url+urldate[/tt]-Makro wird standardmäßig universell verwendet.) Das bedeutet, dass Du dadurch die Ausgabe der URL und des Abrufdatums im Literaturverzeichnis anpasst.
Der gezeigte Code definiert das standardmäßig ([url=https://github.com/plk/biblatex/blob/ca032db14c25fcad84a75ce5f43ba59c39ac69f2/tex/latex/biblatex/biblatex.def#L2924-L2929]in [tt]biblatex.def[/tt], Z. 2924-2929[/url]) als
[code]
\newbibmacro*{url+urldate}{%
\usebibmacro{url}%
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}}}
[/code]
definierte Makro etwas um.
Noch immer wird die URL ausgegeben (unabhängig vom Typ). Dann wird - nur für [tt]@online[/tt] (mit [tt]\ifentrytype{online}{<true>}{<false>}[/tt]) - nach einem Leerzeichen auch das [tt]date[/tt], also das Publikationsdatum, ausgegeben. (Wie gesagt ist das [tt]\printtext[date]{}[/tt] nicht sinnvoll, da es nichts tut. [tt]\printtext[<format>]{<text>}[/tt] gibt den gegebenen Text [tt]<text>[/tt] im Format [tt]<format>[/tt] aus. In der hier genutzten Eingabe ist [tt]<text>[/tt] leer. Das ist ein Sonderfall, auf den [tt]biblatex[/tt] extra testet und in dem gar nichts passiert. Das [tt]\iffieldundef{year}[/tt] kann man sich ebenfalls sparen, da [tt]\usebibmacro{date}[/tt] clever genug ist, nichts zu tun, wenn das Datum nicht definiert ist.) Schließlich kommt für alle Typen wieder ein Leerzeichen und dann das Abrufdatum.
Mit [tt]year[/tt] und [tt]date[/tt] muss man ein bisschen aufpassen. Die beziehen sich auf das gleiche, nämlich das Publikationsdatum. Zunächst ist es so, dass in der Eingabe - in der [tt].bib[/tt]-Datei - sowohl [tt]year[/tt] als auch [tt]date[/tt] valide Felder sind. [tt]year[/tt] ist dabei als mit BibTeX-Stilen abwärtskompatible Alternative für [tt]date[/tt] gedacht. Man kann nicht beide gleichzeitig haben! Im [tt]biblatex[/tt]-Code, wie Du in hier schreibst, gibt es kein Feld [tt]date[/tt]. Dort wird [tt]date[/tt] in einzelne Datumsbestandteile aufgeschlüsselt. Wie das genau passiert, muss man nicht wissen, wenn man einfach [tt]\usebibmacro{date}[/tt] oder [tt]\printdate[/tt] nutzt, um das Datum auszugeben. Was man aber wissen sollte, ist, dass es im Allgemeinen nicht sinnvoll ist, Code einzuführen, der [tt]date[/tt] und [tt]year[/tt] in Bibmakros zu unterscheiden versucht. Mit [tt]\iffieldundef{year}[/tt] testet man, ob ein Datum vorhanden ist (egal ob es in der Eingabe [tt]date[/tt] oder [tt]year[/tt] war). [tt]\printfield{year}[/tt] sollte man nicht nutzen, da es nicht für alle Eingaben korrekt funktioniert, [tt]\printfield{date}[/tt] funktioniert gar nicht, da es auf der LaTeX-Seite kein Feld [tt]date[/tt] gibt. Stattdessen nimmt man - wie oben erwähnt - [tt]\printdate[/tt] und Co. (hier in Form von [t]\usebibmacro{date}[/tt] das als [tt]\printdate[/tt] definiert ist).
Zu den fehlenden [tt]%[/tt]: Die Regeln von TeX sind hier nicht ganz trivial. Für eine korrekte Antwort möchte ich wie oben auf https://tex.stackexchange.com/q/7453/35864 und die dort genannten weiterführenden Links verweisen. (Wenn Dir eine deutsche Version lieber ist, sieh Dir https://texwelt.de/fragen/16/ an.)
In Text ist es normalerweise gewünscht, dass ein Zeilenende ein Leerzeichen ist. Schließlich liest man ein Zeilenende wie ein Leerzeichen und es wäre unpraktisch und kontraintuitiv, explizit Leerzeichen vor dem Zeilenende einfügen zu müssen, um sie im Text erscheinen zu lassen. In Makrodefinitionen ist es häufig nicht gewollt, dass alle Zeilenenden (die oftmals für eine bessere Übersicht im Code eingeführt wurden) ein Leerzeichen produzieren. Daher muss dort oft ein [tt]%[/tt] stehen. Das hat jetzt nichts unbedingt damit zu tun, ob man sich innerhalb geschweifter Klammern befindet oder nicht (obwohl man sich bei Makrodefinitionen eigentlich immer innerhalb von geschweiften Klammern befindet).
Nun ist es so, dass [tt]biblatex[/tt] dadurch wie es Zeichensetzung handhabt (idealerweise mit [tt]\setunit[/tt] und Co.), in einigen Situationen einen zusätzlichen Schutz vor ungewollten Leerzeichen eingebaut hat. Daher ist es sehr gut möglich, dass eine Vielzahl von (eigentlich) fehlenden [tt]%[/tt] kein Problem verursachen. Es ist aber dennoch eine gute Idee, sich mit den Regeln für [tt]%[/tt] vertraut zu machen und sie korrekt zu setzen. Denn alles kann auch [tt]biblatex[/tt] nicht.