@misc definieren

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


Dave Miller
Forum-Century
Forum-Century
Beiträge: 102
Registriert: Fr 19. Jun 2015, 19:18

@misc definieren

Beitrag von Dave Miller »

Hallo,

ich möchte gerne @misc definieren. Undzwar will ich das o.J. weghaben (nur bei @misc)

Wie lässt sich das umsetzen?
DANKE!
\documentclass[ngerman]{article} 
\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc} 
\usepackage{babel} 
\usepackage{csquotes} 
\usepackage{xpatch} 
\usepackage{filecontents} 
\usepackage[style=authortitle]{biblatex} 
\begin{filecontents*}{\jobname.bib} 
@misc{DIN,   
shorttitle = {KURZTITEL}, 
title = {LANGTITEL}, 
author = {DINxxxx:xxxx} 
} 
@online{Internet, 
author = {Autor}, 
title = {Titel}, 
year = {2015}, 
url = {http://www.invalid.invalid}, 
urldate = {2015-08-10} 
} 
@book{jwp,   
shorttitle = {TESTBUCH}, 
title = {IchundDU}, 
year = {}, 
publisher = {Beuth Verlag}, 
author = {ICH} 
} 


\end{filecontents*} 
\renewcommand{\bibfootnotewrapper}[1]{ 
\bibsentence#1} 

\renewcommand*{\newunitpunct}{\addcomma\space} 
\renewcommand*{\labelnamepunct}{\addspace} 
\renewcommand*{\nametitledelim}{\addcolon\space} 
\renewcommand*{\finentrypunct}{\addspace} 
\setlength{\bibhang}{1,25cm} 
\DeclareNameAlias{sortname}{last-first} 
\DeclareFieldFormat*{citetitle}{#1} 

% Reihenfolge ändern und Standardtrenner 
\renewbibmacro*{publisher+location+date}{% 
  \printlist{publisher}% 
  \newunit 
  \printlist{location}% 
  \newunit 
  \usebibmacro{date}% 
  \newunit} 

% Kurztitel (shorttitle) hinzufügen 
\renewbibmacro*{title}{% 
  \ifboolexpr{ 
    test {\iffieldundef{title}} 
    and 
    test {\iffieldundef{subtitle}} 
  } 
    {} 
    {\printfield[brackets]{shorttitle}% 
     \setunit{\addspace}% 
     \ifentrytype{online} 
       {\printtext[brackets]{% 
          \printfield[titlecase]{title}% 
          \setunit{\subtitlepunct}% 
          \printfield[titlecase]{subtitle}}} 
       {\printtext[title]{% 
         \printfield[titlecase]{title}% 
         \setunit{\subtitlepunct}% 
         \printfield[titlecase]{subtitle}}}% 
     \newunit}% 
  \printfield{titleaddon}} 

\DeclareFieldFormat[online]{url}{\url{#1}} 
\DeclareFieldFormat{urldate}{Abrufdatum\addcolon\space#1} 

\xpatchbibdriver{online} 
  {\usebibmacro{date}} 
  {} 
  {}{} 

\newbibmacro*{url+urldate}{% 
  \usebibmacro{url}% 
  \ifentrytype{online} 
    {\setunit{\addspace}% 
     \printtext{Stand\addcolon\addspace}% 
     \usebibmacro{date}} 
    {} 
  \iffieldundef{urlyear} 
    {} 
    {\setunit*{\addspace}% 
     \usebibmacro{urldate}}} 

% Jahr hinzufügen 
\renewbibmacro*{cite}{% 
  \iffieldundef{shorthand} 
    {\ifnameundef{labelname} 
       {} 
       {\printnames{labelname} 
        \setunit{\nametitledelim}}% 
     \usebibmacro{cite:title}% 
     \newunit 
     \iffieldundef{year} 
       {\bibstring{nodate}} 
       {\printfield{year}}}% 
    {\usebibmacro{cite:shorthand}}} 
\DefineBibliographyStrings{german}{% 
  nodate = {{}o\adddot\addabthinspace J\adddot} 
} 

\addbibresource{\jobname.bib} 
\addbibresource{biblatex-examples.bib} 
\begin{document} 
Lorem\footcite[][]{DIN} 
Lorem\footcite[Vgl.][12]{jwp} 
Lorem\footcite[Vgl.][12]{Internet} 
\printbibliography 
\end{document}

Gast

Beitrag von Gast »

Oh je, da habe ich ja was angerichtet....
Dir ist klar, dass jemand, der die Vorgeschichte von dem ganzen Kram nicht kennt, wahrscheinlich sehr verwirrt sein wird, was Du mit "ich möchte gerne @misc definieren" meinst?
Ich gehe mal davon aus, das Du meine letzte Antwort nicht ganz genau gelesen hast und lieber @standard "definiert" haben möchtest. In den Standardstilen haben die das gleiche Aussehen (@standard nutzt den "Treiber" von @misc, aber nur, weil er selbst keinen eigenen hat), aber semantisch besser für Normen ist natürlich @standard.
Ich bin ein bisschen enttäuscht, dass Du in diesem Beispiel gar nicht alles eingebaut hast, was wir Dir bisher in diesem Forum zusammengezimmert haben.

In einem anderen Thread haben wir nämlich das hier
Anonymous hat geschrieben:Nur für @online bekommst Du das Verhalten, wenn wir statt \iffieldundef{year} in der Abfrage vor dem \bibstring{nodate} das etwas längere \ifboolexpr{test {\iffieldundef{year}} and test {\ifentrytype{online}}} verwenden
\renewbibmacro*{url+urldate}{%
  \usebibmacro{url}%
  \ifentrytype{online}
    {\setunit{\addspace}%
     \printtext{Stand\addcolon\addspace}%
     \ifboolexpr{test {\iffieldundef{year}} and test {\ifentrytype{online}}}
       {\bibstring{nodate}}
       {\usebibmacro{date}}}
    {}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \usebibmacro{urldate}}}

\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifnameundef{labelname}
       {}
       {\printnames{labelname}
        \setunit{\nametitledelim}}%
     \usebibmacro{cite:title}%
     \newunit
     \ifboolexpr{test {\iffieldundef{year}} and test {\ifentrytype{online}}}
       {\bibstring{nodate}}
       {\printfield{year}}}%
    {\usebibmacro{cite:shorthand}}}

\DefineBibliographyStrings{german}{%
  nodate = {{}o\adddot\addabthinspace A\adddot}
}
Es hätte uns allen wirklich Arbeit und Ärger erspart, wenn Du mit einer genauen Idee, was Du erreichen möchtest, hier aufgetaucht wärst, dann hättest Du eine präzise Frage zu Deiner exakten Problemstellung (am liebsten natürlich mit diesem ominösen Minimalbeispiel, nach dem alle immer Fragen) gestellt; diese halbgaren Vorstellungen und Nachbesserungen sorgen dafür, dass wir jetzt weiß der Geier wie viele verschiedene Themen offen haben mit unterschiedlichen Code-Beispielen, die alle unterschiedlich weit sind.
Mit ein bisschen Kreativität und dem Willen, zu verstehen, was da passiert, könntest Du die Aufgabe bestimmt auch selber lösen.

Damals haben wir dafür gesorgt dass nur @online das "o.J." bekommt, jetzt wollen wir es für alle außer @standard, da müssen wir die Logik nur ein bisschen anpassen.
Aus \ifboolexpr{test {\iffieldundef{year}} and test {\ifentrytype{online}}} wird dann \ifboolexpr{test {\iffieldundef{year}} and not test {\ifentrytype{standard}}}, denn wir wollen das "o.J" für alle ohne Jahr aber nicht, wenn es ein @standard ist.
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{xpatch}
\usepackage{filecontents}
\usepackage[style=authortitle]{biblatex}
\begin{filecontents*}{\jobname.bib}
@standard{DIN,  
shorttitle = {KURZTITEL},
title = {LANGTITEL},
author = {DINxxxx:xxxx}
}
@online{Internet,
author = {Autor},
title = {Titel},
url = {http://www.invalid.invalid},
urldate = {2015-08-10}
}
@book{jwp,  
shorttitle = {TESTBUCH},
title = {IchundDU},
year = {2015},
publisher = {Beuth Verlag},
author = {ICH}
}
\end{filecontents*}
\renewcommand{\bibfootnotewrapper}[1]{
\bibsentence#1}

\renewcommand*{\newunitpunct}{\addcomma\space}
\renewcommand*{\labelnamepunct}{\addspace}
\renewcommand*{\nametitledelim}{\addcolon\space}
\renewcommand*{\finentrypunct}{\addspace}
\setlength{\bibhang}{1,25cm}
\DeclareNameAlias{sortname}{last-first}
\DeclareFieldFormat*{citetitle}{#1}

% Reihenfolge ändern und Standardtrenner
\renewbibmacro*{publisher+location+date}{%
  \printlist{publisher}%
  \newunit
  \printlist{location}%
  \newunit
  \usebibmacro{date}%
  \newunit}

% Kurztitel (shorttitle) hinzufügen
\renewbibmacro*{title}{%
  \ifboolexpr{
    test {\iffieldundef{title}}
    and
    test {\iffieldundef{subtitle}}
  }
    {}
    {\printfield[brackets]{shorttitle}%
     \setunit{\addspace}%
     \ifentrytype{online}
       {\printtext[brackets]{%
          \printfield[titlecase]{title}%
          \setunit{\subtitlepunct}%
          \printfield[titlecase]{subtitle}}}
       {\printtext[title]{%
         \printfield[titlecase]{title}%
         \setunit{\subtitlepunct}%
         \printfield[titlecase]{subtitle}}}%
     \newunit}%
  \printfield{titleaddon}}

\DeclareFieldFormat[online]{url}{\url{#1}}
\DeclareFieldFormat{urldate}{Abrufdatum\addcolon\space#1}

\xpatchbibdriver{online}
  {\usebibmacro{date}}
  {}
  {}{}

\renewbibmacro*{url+urldate}{%
  \usebibmacro{url}%
  \ifentrytype{online}
    {\setunit{\addspace}%
     \printtext{Stand\addcolon\addspace}%
     \ifboolexpr{test {\iffieldundef{year}} and not test {\ifentrytype{standard}}}
       {\bibstring{nodate}}
       {\usebibmacro{date}}}
    {}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \usebibmacro{urldate}}}

\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifnameundef{labelname}
       {}
       {\printnames{labelname}
        \setunit{\nametitledelim}}%
     \usebibmacro{cite:title}%
     \newunit
     \ifboolexpr{test {\iffieldundef{year}} and not test {\ifentrytype{standard}}}
       {\bibstring{nodate}}
       {\printfield{year}}}%
    {\usebibmacro{cite:shorthand}}}

\DefineBibliographyStrings{german}{%
  nodate = {{}o\adddot\addabthinspace A\adddot}
}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem\footcite[][]{DIN}
Ipsum\footcite[Vgl.][12]{jwp}
Dolor\footcite[Vgl.][12]{Internet}
Dolor\footcite{geer,baez/online,baez/article,worman,sigfridsson}
\printbibliography
\end{document}

Antworten