Wie keinen Titel bei bestimmten Dokumententypen einfügen?

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


Zoid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Do 12. Mär 2020, 13:48

Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von Zoid »

Moin moin,

ich habe in meinem Literaturverzeichnis (mit biblatex) mehrere verschiedene Quellen. Unter anderem auch Bücher und Patente. Bei Büchern werden die Titel im Verzeichnis genannt, bei Patenten hingegen nicht. Gibt es eine Möglichkeit, die Titelnennung bei Patenten zu vermeiden? Wenn ich title=false verwende, würde sich das auf alle Einträge in der .bib-Datei beziehen, daher bringt mich das nicht weiter.

Vielen Dank und viele Grüße :wink:


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

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von Bartman »

Du könntest den Bibliografietreiber für den erwähnten Eintragstyp aus der Datei standard.bbx in Deine Präambel übernehmen und mindestens die Ausgabe des Titels (\usebibmacro{title}) entfernen.

Eine wesentlich kürzere Variante dürfte der Befehl \xpatchbibdriver des Pakets xpatch bieten.

Ich habe diese möglichen Lösungen absichtlich nur angedeutet, da ich mir bei beiden Varianten nicht sicher bin, was alles gelöscht werden kann oder sollte.


MoeWe
Forum-Guru
Forum-Guru
Beiträge: 309
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von MoeWe »

Mir ist auf die Schnelle gar kein Stil bekannt, bei dem man mit title=false, den Titel unterdrücken könnte. Lediglich einige der biblatex-chem-Stile kennen die Optionen articletitle und chaptertitle, mit denen man die Ausgabe des Titels für @article und @inbook/@incollection unterdrücken kann.

Eine recht einfache Methode, die Ausgabe beliebige Felder vollständig und nachhaltig zu unterdrücken, ist eine Biber Sourcemap. Die Anwendung einer Sourcemap kann einfach auf bestimmte Eintragstypen beschränkt werden, also kannst Du sie auch für diese Zwecke nutzen.

Code: Alles auswählen

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

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

\DeclareSourcemap{
  \maps{
    \map{
      \pertype{patent}
      \step[fieldset=title, null]
      \step[fieldset=subtitle, null]
      \step[fieldset=titleaddon, null]
    }
  }
}


\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson,almendro,laufenberg}

\printbibliography
\end{document}

Zoid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Do 12. Mär 2020, 13:48

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von Zoid »

Das hilft schon mal weiter. Ich habe jetzt folgenden Code:

Code: Alles auswählen

\usepackage[backend=biber,
	style=authoryear,
	maxcitenames=2,
	isbn=false,
	firstinits=true]{biblatex}	% Literaturverzeichnis mit Datei
				
\DeclareFieldFormat[article]{title}{{#1}}		% entfernt `` bei Titel von Artikel

\DeclareDelimFormat{finalnamedelim}{\addspace\&\space}	% tauscht ``und'' gegen ``&'' im Literaturverzeichnis
\DefineBibliographyStrings{ngerman}{andothers = {{et\,al\adddot}},}	% ersetzen von u.a. zu et al.

\DeclareSourcemap{	% entfernt Einträge bei Patenten
  \maps{
    \map{
      \pertype{patent}
      \step[fieldset=title, null]
      \step[fieldset=subtitle, null]
      \step[fieldset=titleaddon, null]
      \step[fieldset=year,origfieldval,final]
    }
  }
}
\addbibresource{subdata/literatur.bib}

Jetzt wird mir bei allen Pateten keine Jahreszahl mehr angezeigt sonder nur leere Klammern (). Bei allen anderen Quellen gibt es jedoch Jahreszahlen. Wie kann ich die Jahreszahl für Patente hinzufügen?

Wie kann ich Reihenfolge der einzelnen "Bausteine" verändern? Aktuell steht "location" hinter "number" bei den Patenten. Ich benötige es ab andersrum.


MoeWe
Forum-Guru
Forum-Guru
Beiträge: 309
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von MoeWe »

Leider ist der gezeigte Code kein echtes Minimalbeispiel, da einerseits relevante .bib-Einträge als Beispiele fehlen und andererseits nur der biblatex-Aufruf gezeigt ist und \documentclass sowie \begin{document}...\end{document} fehlen. Ich habe Deinen Code also nicht getestet.

Die Zeile

Code: Alles auswählen

\step[fieldset=year,origfieldval,final]

aus Deiner Sourcemap ist mir etwas suspekt. Ich kann mir vorstellen, dass sie zusammen mit den vorherigen Zeilen das year-Feld löscht. Allerdings weiß ich nicht, was origfieldval formal gesehen tun sollte, wenn es kein vorheriges fieldsource gibt. von Wofür ist die Zeile gedacht? In meinem Beispiel war sie nicht enthalten.

Wenn Du Felder in der Ausgabe umordnen möchtest, dann musst Du entweder die bibliography driver oder die genutzten bibmacros umdefinieren. In Deinem Fall sieht der driver so aus

Code: Alles auswählen

\DeclareBibliographyDriver{patent}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \printfield{type}%
  \setunit*{\addspace}%
  \printfield{number}%
  \iflistundef{location}
    {}
    {\setunit*{\addspace}%
     \printtext[parens]{%
       \printlist[][-\value{listtotal}]{location}}}%
  \newunit\newblock
  \usebibmacro{byholder}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{date}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

Du kannst das einfach so in Deine Präambel übernehmen und dann nach Herzenslust Zeilen umordnen oder ändern.


Zoid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Do 12. Mär 2020, 13:48

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von Zoid »

Da habe ich nicht aufgepasst. War ein Versuch, die Jahreszahl zu integrieren, der nicht mehr gelöscht wurde. Anbei nochmal der geänderte Code als Minimalbeispiel, wo leider immer noch die Jahreszahl fehlt.

Code: Alles auswählen

\documentclass[ngerman,12pt,a4paper,toc=listof,parskip=full,singlespacing=true]{scrreprt}

\usepackage[backend=biber,
	style=authoryear,
	maxcitenames=2,
	isbn=false,
	firstinits=true]{biblatex}	% Literaturverzeichnis mit Datei
				
\DeclareFieldFormat[article]{title}{{#1}}		% entfernt `` bei Titel von Artikel

\DeclareDelimFormat{finalnamedelim}{\addspace\&\space}	% tauscht ``und'' gegen ``&'' im Literaturverzeichnis
\DefineBibliographyStrings{ngerman}{andothers = {{et\,al\adddot}},}	% ersetzen von u.a. zu et al.

\DeclareSourcemap{	% entfernt Einträge bei Patenten
  \maps{
    \map{
      \pertype{patent}
      \step[fieldset=title, null]
      \step[fieldset=subtitle, null]
      \step[fieldset=titleaddon, null]
    }
  }
}
\addbibresource{literatur2.bib}


\begin{document}

\nocite{*}
\printbibliography

\end{document}

.bib Eintrag

Code: Alles auswählen

@patent{Herrmann.6262018,
 author = {Herrmann, Anna and R{\"o}diger, Stefan and Schedler, Uwe and Schierack, Peter and Haag, Rainer},
 year = {2020},
 title = {Assay, Verfahren zu seiner Herstellung sowie seine Verwendung},
 number = {DE102018115391 (A1)},
 abstract = {Die Erfindung betrifft einen Assay f{\"u}r die Analyse eines komplexen Analysats. Der Assay (1) umfasst zumindest eine Schicht (10), welche umfasst:• ein por{\"o}ses dreidimensionales Polymernetzwerk (11) mit einer vorbestimmten Maschenweite, und• zumindest eine Population von in dem dreidimensionalen Polymernetzwerk (11) eingebetteten und immobilisierten Partikeln (12), jeweils umfassend einen Tr{\"a}gerpartikel (13) und eine an dem Tr{\"a}gerpartikel (13) gebundene F{\"a}ngersonde (14), die eine Targetspezies (15, 17) des Analysats zu binden vermag.Die Immobilisierung der Partikel (12) mittels des Polymernetzwerks (11) erlaubt, die Spezifit{\"a}t des Assays zu erh{\"o}hen, und erleichtert die Anwendung. In bevorzugter Ausf{\"u}hrung sind mehrere solcher Schichten aufeinander gestapelt angeordnet, wodurch der Assay (1) eine Vielzahl von Targetspezies (15, 17) in einer einzigen Messung analysieren kann.},
 holder = {{BRANDENBURGISCHE TECHNISCHE UNIV COTTBUS SENFTENBERG} and {POLYAN GES ZUR HERSTELLUNG VON POLYMEREN FUER SPEZIELLE ANWENDUNGEN UND ANALYTIK MBH}},
 date = {1/2/2020},
 file = {http://worldwide.espacenet.com/publicationDetails/biblio?FT=D&CC=DE&NR=102018115391A1&KC=A1},
 location = {DE},
 version = {DE201810115391 20180626},
 subtitle = {DE201810115391},
 titleaddon = {G01N33/531;C12Q1/68;G01N21/64}
}

Zoid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Do 12. Mär 2020, 13:48

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von Zoid »

MoeWe hat geschrieben:
Mo 26. Okt 2020, 07:53

Wenn Du Felder in der Ausgabe umordnen möchtest, dann musst Du entweder die bibliography driver oder die genutzten bibmacros umdefinieren. In Deinem Fall sieht der driver so aus

Code: Alles auswählen

\DeclareBibliographyDriver{patent}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \printfield{type}%
  \setunit*{\addspace}%
  \printfield{number}%
  \iflistundef{location}
    {}
    {\setunit*{\addspace}%
     \printtext[parens]{%
       \printlist[][-\value{listtotal}]{location}}}%
  \newunit\newblock
  \usebibmacro{byholder}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{date}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

Du kannst das einfach so in Deine Präambel übernehmen und dann nach Herzenslust Zeilen umordnen oder ändern.

Da habe ich jetzt Probleme mich zurechtzufinden. Ich habe das ganze einfach mal direkt hiner den Eintrag \addbibresource{literatur2.bib} gepackt und es gibt mir keine Fehlermeldung aus, also gehe ich davon aus, dass es so falsch nicht sein kann. Tausche ich jetzt zu Testzwecken "title" und "author" passiert aber nichts. Trage ich "year" anstatt von "title" ein, dann bekomme ich einen Error, dass das macro "year" nicht deniniert ist. Allerdings wurde "author" oder "title " auch nicht irgendwo als mactro definiert.

Ich versuch nochmal weitere Erklärungen für Normalsterbliche ausfindig zu machen um vielleicht noch etwas in der Thematik zu verstehen und werde berichten, wenn ich Fortschritte verzeichnen kann.


MoeWe
Forum-Guru
Forum-Guru
Beiträge: 309
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von MoeWe »

Aha!

Wenn die Ausgabe im Literaturverzeichnis nicht so ist, wie man erwartet, obwohl man denkt, alles richtig gemacht zu haben, ist es immer einen Versuch wert, in der Logdatei von Biber (der .blg-Datei) nachzusehen. (Auf Windowssystemen wird die .blg-Datei womöglich als 'Leistungsüberwachungsdatei' klassifiziert, sie ist aber dennoch eine einfache Textdatei, die mit einem beliebigen Editor geöffnet werden kann.)

Bei dem gezeigten Beispiel finde ich in der .blg-Datei

Code: Alles auswählen

[0] Config.pm:312> INFO - This is Biber 2.15 (beta)
[0] Config.pm:315> INFO - Logfile is 'sdsfsfdsf.blg'
[104] biber-MSWIN64:330> INFO - === 
[122] Biber.pm:415> INFO - Reading 'sdsfsfdsf.bcf'
[218] Biber.pm:949> INFO - Using all citekeys in bib section 0
[235] Biber.pm:4334> INFO - Processing section 0
[249] Biber.pm:4523> INFO - Looking for bibtex format file 'sdsfsfdsf.bib' for section 0
[263] bibtex.pm:1682> INFO - LaTeX decoding ...
[280] bibtex.pm:1494> INFO - Found BibTeX data source 'sdsfsfdsf.bib'
[313] Utils.pm:395> WARN - Entry 'Herrmann.6262018' (sdsfsfdsf.bib): Invalid format '1/2/2020' of date field 'date' - ignoring
[330] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[330] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[330] Biber.pm:4162> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[330] Biber.pm:4168> INFO - No sort tailoring available for locale 'en-US'
[332] bbl.pm:651> INFO - Writing 'sdsfsfdsf.bbl' with encoding 'UTF-8'
[335] bbl.pm:754> INFO - Output to sdsfsfdsf.bbl
[339] Biber.pm:128> INFO - WARNINGS: 1

Die spannende Stelle ist

Code: Alles auswählen

[313] Utils.pm:395> WARN - Entry 'Herrmann.6262018' (sdsfsfdsf.bib): Invalid format '1/2/2020' of date field 'date' - ignoring

Die Zeile

Code: Alles auswählen

 date = {1/2/2020},

in Deinem Eintrag ist fehlerhaft. date-Felder müssen in ISO-8601/EDTF-kompatiblen Format befüllt werden. Korrekt wäre wohl (Achtung, Dein Eintrag nutzt das amerikanische Format m/d/yyyy)

Code: Alles auswählen

 date = {2020-01-02},

Problematisch ist hier ferner, dass ein Eintrag niemals sowohl ein date als auch year haben sollte: Korrekt wäre entweder oder, aber nicht beides. Hier 'gewinnt' date über year, dann wird aber date ignoriert, da es keine valide Eingabe ist, also ist alles weg.

Ich würde mich bei Patenten vorzugsweise auf die Datenbank der relevanten Institute verlassen und nicht auf Dritte. Basierend auf https://register.dpma.de/DPMAregister/p ... 0181153910 würde mein Eintrag wie im folgenden Beispiel aussehen

Code: Alles auswählen


\documentclass[ngerman,12pt,a4paper,toc=listof,parskip=full,singlespacing=true]{scrreprt}

\usepackage[backend=biber,
  style=authoryear,
  maxcitenames=2,
  isbn=false,
  giveninits=true]{biblatex}

\DeclareFieldFormat[article]{title}{#1}

\DeclareDelimFormat{finalnamedelim}{\addspace\&\space}
\DefineBibliographyStrings{ngerman}{andothers = {{et\,al\adddot}},}

\DeclareSourcemap{
  \maps{
    \map{
      \pertype{patent}
      \step[fieldset=title, null]
      \step[fieldset=subtitle, null]
      \step[fieldset=titleaddon, null]
    }
  }
}


\begin{filecontents}{\jobname.bib}
@patent{Herrmann.6262018,
  author   = {Herrmann, Anna and Rödiger, Stefan
              and Schedler, Uwe and Schierack, Peter
              and Haag, Rainer},
  title    = {Assay, Verfahren zu seiner Herstellung sowie seine Verwendung},
  date     = {2018-06-26},
  number   = {10 2018 115 391.0},
  location = {countryde},
  holder   = {{Brandenburgische Technische Universität Cottbus-Senftenberg}
              and {PolyAn Gesellschaft zur Herstellung von Polymeren
              für spezielle Anwendungen und Analytik mbH}},
}
\end{filecontents}
\addbibresource{\jobname.bib}


\begin{document}
\nocite{*}
\printbibliography
\end{document}

Zoid
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 69
Registriert: Do 12. Mär 2020, 13:48

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von Zoid »

Was man nicht alles bei dem Programm machen kann. Werd ich mal für die Zukunft im Hinterkopf beobachten. Danke dafür

Die Datumsänderung habe ich mal vorgenommen, weil beim d.m.y Format gemeckert wurde von Latex und das Intert mir gesagt hat, dass das amerikanische Format richtig ist. War aber auch ein englisches Forum.....

MoeWe hat geschrieben:
Mo 26. Okt 2020, 22:53

Die Zeile

Code: Alles auswählen

 date = {1/2/2020},

in Deinem Eintrag ist fehlerhaft. date-Felder müssen in ISO-8601/EDTF-kompatiblen Format befüllt werden. Korrekt wäre wohl (Achtung, Dein Eintrag nutzt das amerikanische Format m/d/yyyy)

Code: Alles auswählen

 date = {2020-01-02},

Meine Einträge beziehe ich immer von espacenet, da ich auch amerikanische und japanische Patente aus dem 19. Jhd. habe und dort der meiste Informationsgehalt geliefert wird.


MoeWe
Forum-Guru
Forum-Guru
Beiträge: 309
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Wie keinen Titel bei bestimmten Dokumententypen einfügen?

Beitrag von MoeWe »

Zoid hat geschrieben:
Mo 26. Okt 2020, 22:40
MoeWe hat geschrieben:
Mo 26. Okt 2020, 07:53

Wenn Du Felder in der Ausgabe umordnen möchtest, dann musst Du entweder die bibliography driver oder die genutzten bibmacros umdefinieren. In Deinem Fall sieht der driver so aus

Code: Alles auswählen

\DeclareBibliographyDriver{patent}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \printfield{type}%
  \setunit*{\addspace}%
  \printfield{number}%
  \iflistundef{location}
    {}
    {\setunit*{\addspace}%
     \printtext[parens]{%
       \printlist[][-\value{listtotal}]{location}}}%
  \newunit\newblock
  \usebibmacro{byholder}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{date}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

Du kannst das einfach so in Deine Präambel übernehmen und dann nach Herzenslust Zeilen umordnen oder ändern.

Da habe ich jetzt Probleme mich zurechtzufinden. Ich habe das ganze einfach mal direkt hiner den Eintrag \addbibresource{literatur2.bib} gepackt und es gibt mir keine Fehlermeldung aus, also gehe ich davon aus, dass es so falsch nicht sein kann. Tausche ich jetzt zu Testzwecken "title" und "author" passiert aber nichts. Trage ich "year" anstatt von "title" ein, dann bekomme ich einen Error, dass das macro "year" nicht deniniert ist. Allerdings wurde "author" oder "title " auch nicht irgendwo als mactro definiert.

Ich versuch nochmal weitere Erklärungen für Normalsterbliche ausfindig zu machen um vielleicht noch etwas in der Thematik zu verstehen und werde berichten, wenn ich Fortschritte verzeichnen kann.

Für einen Einstieg in biblatex-Progammierung empfehle ich (im deutschsprachigen Raum) die zwei Artikel von Dominik Waßenhoven in der TeXnischen Komödie 2/2008 https://archiv.dante.de/DTK/PDF/komoedie_2008_2.pdf und 4/2008 https://archiv.dante.de/DTK/PDF/komoedie_2008_4.pdf (englischsprachig kenne ich nichts dergleichen). Die sind zwar inzwischen deutlich mehr als 10 Jahre alt und in der Zeit hat sich einiges geändert (einige Dinge gehen heute einfacher, andere einfach nur anders), aber die Grundideen sind immernoch die gleichen.

Wenn Du in dem Driver unter Beachtung der Einrückung hier einfach nur Zeilen bzw. Zeilenblöcke umordnest, sollte eigentlich alles auf Anhieb funktionieren. Wenn Du stattdessen andere Anpassungen vornimmst, musst Du etwas mehr Hintergrundwissen haben, welche Makros von biblatex bzw. Deinem genutzten Stil definiert sind. So gibt es eben standardmäßig Makros mit den Namen author und title, aber eben keins mit dem Namen year (das Datum wird mit \printdate und Co. ausgegeben, hier passiert das entweder durch eine Modifikation des Bibmacros author oder im Bibmakro date). Dazu muss man sich den Code des genutzten Stils ansehen. Siehe z.B. auch https://tex.stackexchange.com/q/554623/35864


Antworten