Seite 1 von 2
Biblatex neuen Entrytype Norm definieren
Verfasst: Mi 26. Aug 2015, 15:09
von joa*k
Hallo zusammen,
ich habe mir in Jabref einen neuen Entrytype "norm" erstellt.
Sieht dann beispislweise so aus
@Norm{ISO225143,
Title = {Statistische Verfahren im Prozessmanagement - Fähigkeit und Leistung - Teil 3: Maschinenfähigkeitsuntersuchungen für Messwerte von diskreten Teilen},
Number = {ISO 22514-3},
Type = {Norm},
Year = {2008},
Author = {ISO 22514-3},
Owner = {q295535},
Timestamp = {2015.08.26}
}
Ich möchte das in meinem Literaturverzeichnis dann folgendes steht:
[ISO 22514-3]
Norm ISO 22514-3 2008.
Statistische Verfahren im Prozessmanagement - Fähigkeit und Leistung - Teil 3: Maschinenfähigkeitsuntersuchungen für Messwerte von diskreten Teilen
Also quasi
Type Number Year.
Title
Dies bekomme ich aber irgendwie nicht aif die Reihe.
%Einstellungen fürs Literaturverzeichnis
\usepackage[citestyle=authoryear-comp,bibstyle=authortitle,sorting=nyt,dashed=false,url=false,isbn=false,maxcitenames=1,firstinits= true,backend=bibtex]{biblatex}
\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
% Namensortierung: esrt Nachname, dann Vorname
\DeclareNameAlias{sortname}{last-first}
% Zitat im Text mit eckiger Klammer
\DeclareCiteCommand{\mycite}[\mkbibbrackets]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
% Anführungszeichen weg für bestimmte Typen
%\DeclareFieldFormat
% [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
% {title}{#1\isdot}
%Anführungszeichen weg für alle
\DeclareFieldFormat*{title}{#1\isdot}
\newcounter{mymaxcitenames}
\AtBeginDocument{%
\setcounter{mymaxcitenames}{\value{maxnames}}%
}
\renewbibmacro*{begentry}{%
\printtext[brackets]{%
\begingroup
\defcounter{maxnames}{\value{mymaxcitenames}}%
\printnames{labelname}%
\setunit{\nameyeardelim}%
\usebibmacro{cite:labelyear+extrayear}%
\endgroup
}%
\newline
}
\renewbibmacro*{name:andothers}{%
\ifboolexpr{
test {\ifnumequal{\value{listcount}}{\value{liststop}}}
and
test \ifmorenames
}
{\ifnumgreater{\value{liststop}}{1}
{\finalandcomma}
{}%
\andothersdelim\bibstring[\textsc]{andothers}}
{}}
\renewcommand*{\finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring[\textsc]{and}\space}
\renewcommand*{\labelnamepunct}{\addcolon\space}
\addbibresource{Literatur.bib}
%Überschrift in Literaturverzeichnis ändern
\defbibheading{head}{\section*{Literaturverzeichnis}}
%Abstand zwischen den Einträgen vergrößern
\setlength{\bibitemsep}{12pt}
So erstelle ich mein Literaturverzeichnis und ich dachte ich könnte das so modifizieren:
\begin{filecontents}{norm.dbx}
\DeclareDatamodelEntrytypes{norm}
%\DeclareDatamodelFields[type=field, datatype=literal]{institution}
\DeclareDatamodelEntryfields[norm]{type,number,title}
\end{filecontents}
\DeclareBibliographyDriver{standard}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{type}\setunit{\addspace}\newblock\printfield{number}%
\newunit\newblock
\usebibmacro{title}%
\setunit{\addspace}
\printfield{year}%
\usebibmacro{finentry}
´Funktioniert aber leider nicht.
Kann mir jemand einen Tipp geben woran es hackt?[/i]
Verfasst: Mi 26. Aug 2015, 15:40
von Gast
Nun, zunächst definierst Du den Treiber für @standard, schreibst dann aber überall @Norm und norm. Standardmäßig kennt biblatex nur @standard, Du könntest ihm Norm beibringen das lohnt sich aber, da @standard schon existiert, nur bedingt. (Du musst natürlich JabRef überreden, mitzumachen, wenn das wirklich nicht geht, können wir auch nach einer Lösung für @norm suchen - am einfachsten wäre ein Alias.)
Ansonsten habe ich Dein Beispiel leider noch nicht getestet, da es kein Minimalbeispiel ist, sondern aus mehreren Schnipseln besteht, die ich erst zusammenbauen müsste, das dauert aber.
Eine bessere Problembeschreibung als "funktioniert nicht" wäre auch hilfreich gewesen.
Von der Idee her, sollte der restliche Code aber grob das machen, was Du möchtest.
Verfasst: Mi 26. Aug 2015, 15:51
von Gast
Ah, ein bisschen was habe ich noch.
Wenn Du die tollen neuen Data-Model-Features nutzen möchtest (die .dbx-Datei), dann solltest Du Biber nutzen und nicht BibTeX.
Bis zu einem gewissen Grade kann auch die .bst-Datei hacken und das ganze mit BibTeX zum laufen kriegen, aber das ist wenig komfortabel und Biber bietet noch andere Vorteile.
Deinem Treiber fehlt außerdem die schließende Klammer } am Ende.
Du musst natürlich noch die Zitierbefehle anpassen, damit Du im Zitat auch das richtige siehst. Mit shorthand kannst Du das ganze etwas abkürzen.
Verfasst: Do 27. Aug 2015, 14:32
von sudo
Schau auch mal bei
biblatex, biber und DIN-Norm vorbei. Wie der Titel schon sagt, braucht man aber das vom Gast angesprochene biber dafür.
Verfasst: Fr 28. Aug 2015, 08:19
von joa*k
Hallo zusammen und Danke erst mal für die Antworten.
Ich möchte das wenn es irgendwie möglich ist gerne in biblatex ohne biber lösen.
Weiter gekommen bin ich allerdings trotz recherche imme rnoch nicht.
Hier nochmal ein lauffähiges Minimalbeispiel
\begin{filecontents}{myLit.bib}
@Norm{DIN9001,
Title = {Qualitätsmanagementsysteme – Anforderungen},
Number = {DIN EN ISO 9001},
Type = {Norm},
Year = {2014},
Author = {Norm DIN EN ISO 9001},
}
@Book{Klein1993,
Title = {Statistische Tolerierung: Qualität der konstruktiven Gestaltung},
Author = {B. Klein and F. Mannewitz},
Publisher = {Carl Hanser Verlag, München/Wien},
Year = {1993},
}
\end{filecontents}
\documentclass{article}
\usepackage[ngerman]{babel}
% wegen deutschen Umlauten
\usepackage[ansinew]{inputenc}
\usepackage[citestyle=authoryear-comp,bibstyle=authortitle,sorting=nyt,dashed=false,url=false,isbn=false,maxcitenames=1,firstinits= true,backend=bibtex]{biblatex}
\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
% Namensortierung: esrt Nachname, dann Vorname
\DeclareNameAlias{sortname}{last-first}
% Zitat im Text mit eckiger Klammer
\DeclareCiteCommand{\mycite}[\mkbibbrackets]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
% Anführungszeichen weg für bestimmte Typen
%\DeclareFieldFormat
% [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
% {title}{#1\isdot}
%Anführungszeichen weg für alle
\DeclareFieldFormat*{title}{#1\isdot}
\newcounter{mymaxcitenames}
\AtBeginDocument{%
\setcounter{mymaxcitenames}{\value{maxnames}}%
}
\renewbibmacro*{begentry}{%
\printtext[brackets]{%
\begingroup
\defcounter{maxnames}{\value{mymaxcitenames}}%
\printnames{labelname}%
\setunit{\nameyeardelim}%
\usebibmacro{cite:labelyear+extrayear}%
\endgroup
}%
\newline
}
\renewbibmacro*{name:andothers}{%
\ifboolexpr{
test {\ifnumequal{\value{listcount}}{\value{liststop}}}
and
test \ifmorenames
}
{\ifnumgreater{\value{liststop}}{1}
{\finalandcomma}
{}%
\andothersdelim\bibstring[\textsc]{andothers}}
{}}
\renewcommand*{\finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring[\textsc]{and}\space}
\renewcommand*{\labelnamepunct}{\addcolon\space}
%%%%%%%%%%%%%%%%%%%NORM
\DeclareBibliographyDriver{norm}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{type}\setunit{\addspace}\newblock\printfield{number}%
\newunit\newblock
\usebibmacro{title}%
\setunit{\addspace}
\printfield{year}%
\usebibmacro{finentry}}
%%%%%%%%%%%%%%%%%%%%
\addbibresource{myLit.bib}
%Überschrift in Literaturverzeichnis ändern
\defbibheading{head}{\section*{Literaturverzeichnis}}
\setlength{\bibitemsep}{12pt}
\begin{document}
Ein bisschen Text \mycite{DIN9001}.\\
Ein bisschen Text \mycite{Klein1993}.
\printbibliography
\end{document}
hier bei bekomme ich folgende Warnung angezeigt:
BibTeX> Warning--entry type for "DIN9001" isn't style-file defined
Mein Problem ist jetzt das meines Erachtens meine Neudefinition gar nichts ändert. Ich habe wirklich versucht etwas brauchbares im Internet zu finden, komme aber einfach nicht weiter.
Wäre super wenn mir jemand helfen kann.
Danke im Voraus![/code]
Verfasst: Fr 28. Aug 2015, 08:58
von sudo
joa*k hat geschrieben:Ich möchte das wenn es irgendwie möglich ist gerne in biblatex ohne biber lösen.
Warum?
Verfasst: Fr 28. Aug 2015, 09:08
von joa*k
Warum nicht?

Verfasst: Fr 28. Aug 2015, 09:12
von Gast
Der Fehler kommt, da Du den Typ @norm verwendest und nicht wie oben vorgeschlagen den Typ @standard. (Denn biblatex kennt @norm nicht; @standard ist zwar normalerweise nur ein Alias zu @misc, wenn Du aber einen Treiber definierst kommen wir da weiter.)
Du musst also überall standard statt norm schreiben.
Ich finde es etwas unsinnig, den Autor der Norm als Author = {Norm DIN EN ISO 9001}, anzugeben, mach das lieber weg, Du verwendest den Autor ja auch gar nicht.
Wenn Du dann noch das shorthand-Feld einfach mit deinem gewünschten Zitierformat befüllst, z.B. shorthand = {DIN EN ISO 9001},, bist Du schon fast fertig (ja mit Biber ginge das auch automatisch und man kann sicher auch den Cite-Befehl anpassen, dass er das auch ohne shorthand hinbekommt, aber warum - besonders letzteres macht alles nur weniger portabel; der Tipp wurde oben übrigens auch schon erwähnt.)
Verfasst: Fr 28. Aug 2015, 09:57
von joa*k
So weit, so gut!

Danke schon mal für die Hilfe.
Es sieht jetzt so aus:
\begin{filecontents}{myLit.bib}
@standard{DIN9001,
Title = {Qualitätsmanagementsysteme – Anforderungen},
Number = {DIN EN ISO 9001},
Type = {Norm},
Year = {2014},
Shorthand = {DIN EN ISO 9001}
}
@Book{Klein1993,
Title = {Statistische Tolerierung: Qualität der konstruktiven Gestaltung},
Author = {B. Klein and F. Mannewitz},
Publisher = {Carl Hanser Verlag, München/Wien},
Year = {1993}
}
\end{filecontents}
\documentclass{article}
\usepackage[ngerman]{babel}
% wegen deutschen Umlauten
\usepackage[ansinew]{inputenc}
\usepackage[citestyle=authoryear-comp,bibstyle=authortitle,sorting=nyt,dashed=false,url=false,isbn=false,maxcitenames=1,firstinits= true,backend=bibtex]{biblatex}
\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
% Namensortierung: esrt Nachname, dann Vorname
\DeclareNameAlias{sortname}{last-first}
% Zitat im Text mit eckiger Klammer
\DeclareCiteCommand{\mycite}[\mkbibbrackets]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
% Anführungszeichen weg für bestimmte Typen
%\DeclareFieldFormat
% [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
% {title}{#1\isdot}
%Anführungszeichen weg für alle
\DeclareFieldFormat*{title}{#1\isdot}
\newcounter{mymaxcitenames}
\AtBeginDocument{%
\setcounter{mymaxcitenames}{\value{maxnames}}%
}
\renewbibmacro*{begentry}{%
\printtext[brackets]{%
\begingroup
\defcounter{maxnames}{\value{mymaxcitenames}}%
\printnames{labelname}%
\setunit{\nameyeardelim}%
\usebibmacro{cite:labelyear+extrayear}%
\endgroup
}%
\newline
}
\renewbibmacro*{name:andothers}{%
\ifboolexpr{
test {\ifnumequal{\value{listcount}}{\value{liststop}}}
and
test \ifmorenames
}
{\ifnumgreater{\value{liststop}}{1}
{\finalandcomma}
{}%
\andothersdelim\bibstring[\textsc]{andothers}}
{}}
\renewcommand*{\finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring[\textsc]{and}\space}
\renewcommand*{\labelnamepunct}{\addcolon\space}
%%%%%%%%%%%%%%%%%%%NORM
%\DeclareBibliographyAlias{norm}{standard}
\DeclareBibliographyDriver{standard}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{type}\setunit{\addspace}\newblock\printfield{number}%
\setunit{\addspace}
\printfield{year}%
\newunit\newblock
\usebibmacro{title}%
\usebibmacro{finentry}}
\DeclareFieldFormat[standard]{title}{\mkbibemph{#1}}
%%%%%%%%%%%%%%%%%%%%
\addbibresource{myLit.bib}
%Überschrift in Literaturverzeichnis ändern
\defbibheading{head}{\section*{Literaturverzeichnis}}
\setlength{\bibitemsep}{12pt}
\begin{document}
Ein bisschen Text \mycite{DIN9001}.\\
Ein bisschen Text \mycite{Klein1993}.
\printbibliography
\end{document}
Und klappt. Das Einzige was mir jetzt noch fehlt ist wie ich den \renewbibmacro so modifiziere das er bei \ifentrytype{standard} mit shorthand anzeigt im Literaturverzeichnis bei allen anederen Einträgen aber so bleibt wie er definiert ist. Da stehe ich mal wieder auf dem Schlauch.
Verfasst: Fr 28. Aug 2015, 10:05
von Gast
Ja das liegt an diesem begentry macro, probier mal diese Definition, die ich eins zu eins aus authoryear.cbx geklaut habe
\renewbibmacro*{begentry}{%
\printtext[brackets]{%
\begingroup
\defcounter{maxnames}{\value{mymaxcitenames}}%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}%
\endgroup
}%
\newline
}