biblatex: legislation verwenden

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


LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

biblatex: legislation verwenden

Beitrag von LarsR »

Hallo,

ich möchte in meiner Arbeit gerne auch Gesetze und Verordnungen zitieren. Da ich den Typ misc schon für Normen verwende und die Stildateien entsprechend angepasst habe, dachte ich daran, den Typ legislation zu verwenden. Laut Dokumentation gibt es diesen Typ ja, obwohl er derzeit nicht von den Stildateien unterstützt wird.

Da das mir vorschwebende Ergebnis beinahe dem entspricht, was ich mir für misc gebastelt habe, wollte ich in der .bbx den Teil \DeclareBibliographyDriver{misc}{...} kopieren, "misc" durch "legislation" ersetzen und entsprechend meinen Vorstellungen anpassen.

Leider führt das beim Kompilieren zu mehr als 100 Fehlern. Muss ich noch irgendwo anders etwas definieren oder wo liegt mein Fehler? Kann ich auch komplett eigene Typen (@gesetz) erschaffen?

Im Endeffekt bräuchte ich für die Gesetze nur den Kurztitel wie StVG (label/sortkey), den vollen Titel Straßenverkehrsgesetz (title) und einen Zusatz wie "vom 5. Mai 2003 (BGBl. I S. 310f), letzte Änderung vom 31. Juli 2009 (BGBl. I S. 2507f.)" (note). Da es nur einige wenige Gesetze sind, wollte ich den letzten Teil einfach per /printfield{note} einbinden.

Vielleicht kann mir ja jemand helfen, wo mein (Denk-)Fehler liegt. Vielen Dank!

Grüße Lars

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Hallo,

ich habe es soweit hin bekommen, habe aber folgendes Problem:
\DeclareBibliographyDriver{legislation}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{title}{\addsemicolon\space}%
  \printfield{note}%
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}
liefert mit
@legislation{ArbSchG,
label = {ArbSchG},
sortkey = {ArbSchG},
title = {Gesetz über die Durchführung von Maßnahmen des Arbeitsschutzes zur Verbesserung der Sicherheit und des Gesundheitsschutzes der Beschäftigten bei der Arbeit},
note = {vom 7. August 1996 (BGBl. I S. 1246)},
}
als Ergebnis
:Gesetz über die Durchführung von Maßnahmen des Arbeitsschutzes zur Verbesserung der Sicherheit und des Gesundheitsschutzes der Beschäftigten bei der Arbeit; vom 7. August 1996 (BGBl. I S. 1246).
Und ich habe keine Ahnung, woher der Doppelpunkt am Anfang kommt.

Leider weiß ich nicht, wie ich einen eigenen bbx-Stil hier als funktionsfähiges Minimalbeispiel mit einbinde. Vielleicht kann man ja so schon etwas erkennen. Ich habe in der Stildatei mittlerweile ziemlich gebastelt, aber eigentlich dürfte keine der Änderungen ja Auswirkungen auf das Problem haben, da ich die Einträge direkt und ohne ein Makro aufrufe.

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

LarsR hat geschrieben:ich habe es soweit hin bekommen, habe aber folgendes Problem:
\DeclareBibliographyDriver{legislation}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \printfield{title}{\addsemicolon\space}%
  \printfield{note}%
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}
Besser so (ungetestet!):
\DeclareBibliographyDriver{legislation}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{title}%
  \setunit{\addsemicolon\space}%
  \usebibmacro{note}%
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}
Wichtig ist vor allem, Zeichensetzung nicht einfach so ausgeben zu lassen,
sondern als Argument von \setunit, denn das achtet darauf, ob auch
wirklich etwas ausgegeben wurde, und setzt die Zeichensetzung nur dann.
Nähere Erläuterung dazu in meinem DTK-Artikel (siehe Signatur).
Leider weiß ich nicht, wie ich einen eigenen bbx-Stil hier als funktionsfähiges Minimalbeispiel mit einbinde.
Mit der filecontents-Umgebung. Siehe http://biblatex.dominik-wassenhoven.de/ ... ml?de&mini.

Gruß,
Dominik.-

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

domwass hat geschrieben: Wichtig ist vor allem, Zeichensetzung nicht einfach so ausgeben zu lassen,
sondern als Argument von \setunit, denn das achtet darauf, ob auch
wirklich etwas ausgegeben wurde, und setzt die Zeichensetzung nur dann.
Nähere Erläuterung dazu in meinem DTK-Artikel (siehe Signatur).
Ändert leider nichts, der Doppelpunkt bleibt. Ich hatte extra printfield verwendet, weil das m. E. den direktesten Zugriff auf die Einträge darstellt, ich hatte vermutet, dass der Doppelpunkt aus einem veränderten bibmacro kommt, ich find's aber beim besten Willen nicht. :(

Leider weiß ich nicht, wie ich einen eigenen bbx-Stil hier als funktionsfähiges Minimalbeispiel mit einbinde.
Mit der filecontents-Umgebung. Siehe http://biblatex.dominik-wassenhoven.de/ ... ml?de&mini
Muss ich dann die gesamte bbx eingeben? Das sind ja einige Zeilen Code.

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Ich habe gerade mal eine unveränderte authoryear.bbx genommen, in test.bbx umbenannt und dort nur den o.g. BibliographyDriver eingefügt, das bringt leider nicht, der Doppelpunkt bleibt erhalten.

Was ich auch nicht verstehe: Ich habe mal die standard.bbx und die biblatex.def sowie die Stildatei nach \addcolon durchsucht, das tritt aber eigentlich immer in Verbindung mit \space auf, ich habe aber gerade kein Leerzeichen zwischen dem führenden Doppelpunkt und dem Titel. Wenn ich customa anstatt legislation bzw. usera anstatt title verwende, bleibt das Problem auch bestehen. Ich bin echt überfragt.

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

Also folgendes Minimalbeispiel funktioniert jedenfalls:
\documentclass[ngerman]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@legislation{ArbSchG, 
label = {ArbSchG}, 
sortkey = {ArbSchG}, 
title = {Gesetz über die Durchführung von Maßnahmen des Arbeitsschutzes zur Verbesserung der Sicherheit und des Gesundheitsschutzes der Beschäftigten bei der Arbeit}, 
note = {vom 7. August 1996 (BGBl. I S. 1246)}, 
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

\usepackage[
  style=authoryear
]{biblatex}
\bibliography{\jobname}
\DeclareBibliographyDriver{legislation}{% 
  \usebibmacro{bibindex}% 
  \usebibmacro{begentry}% 
  \usebibmacro{title}% 
  \setunit{\addsemicolon\space}% 
  \printfield{note}% 
  \usebibmacro{pageref}% 
  \usebibmacro{finentry}}
	
\begin{document}
\cite{ArbSchG}

\printbibliography
\end{document}
Es muss also an anderen Einstellungen liegen. Kopiere am besten deine
Anpassungen in die .tex-Datei selbst und komprimiere so lange, bis der
Fehler nicht mehr auftritt. Dann machst du den letzten Schritt rückgängig
und hast die Fehlerquelle vermutlich gefunden.

Gruß,
Dominik.-

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Hallo

ich habe mittlerweile herausgefunden, dass der Doppelpunkt aus der cbx-Datei kommt, und zwar genau aus diesem Teil:
\newbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
       {\usebibmacro{cite:label}%
       \setunit{\addcolon\space}}
       {\textsc{\printnames{labelname}}%		%Kapitälchen
        \setunit{\nameyeardelim}}%
        \usebibmacro{cite:labelyear+extrayear}}
    {\usebibmacro{cite:shorthand}}}
Das hatte ich mal geändert, um bei DIN-Normen die Form DIN1000:2010-05-01 hinzubekommen, wobei DIN1000 label ist und 2010-05-01 date.

Wie kann ich das am besten anders lösen?

edit: So ganz habe ich noch nicht verstanden, wo das Problem liegt, vermutlich bei den aufgerufenen Macros? Ich habe es auch noch nicht geschafft, das in ein kompilierbares Minimalbeispiel zu packen ... Wenn ich addcolon durch addcomma o.ä, ersetze, wird aus dem Doppelpunkt jedenfalls ein Komma, daher gehe ich davon aus, dass es an diesem Teil liegt.

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Dann schiebe ich mal das Minimalbeispiel hinterher, hatte ein re bei renewbibmacro vergessen:
\documentclass[ngerman]{scrartcl} 
\listfiles 
\usepackage{filecontents} 
\begin{filecontents}{\jobname.bib} 
@legislation{ArbSchG, 
label = {ArbSchG}, 
sortkey = {ArbSchG}, 
title = {Gesetz über die Durchführung von Maßnahmen des Arbeitsschutzes zur Verbesserung der Sicherheit und des Gesundheitsschutzes der Beschäftigten bei der Arbeit}, 
note = {vom 7. August 1996 (BGBl. I S. 1246)}, 
} 
\end{filecontents} 
\usepackage[T1]{fontenc} 
\usepackage[latin1]{inputenc} 
\usepackage{babel,csquotes} 

\usepackage[ 
  style=authoryear 
]{biblatex} 
\bibliography{\jobname} 
\DeclareBibliographyDriver{legislation}{% 
  \usebibmacro{bibindex}% 
  \usebibmacro{begentry}% 
  \usebibmacro{title}% 
  \setunit{\addsemicolon\space}% 
  \printfield{note}% 
  \usebibmacro{pageref}% 
  \usebibmacro{finentry}} 
    
\renewbibmacro*{cite}{% 
  \iffieldundef{shorthand} 
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}} 
       {\usebibmacro{cite:label}% 
       \setunit{\addcolon\space}} 
       {\textsc{\printnames{labelname}}%      %Kapitälchen 
        \setunit{\nameyeardelim}}% 
        \usebibmacro{cite:labelyear+extrayear}} 
    {\usebibmacro{cite:shorthand}}}    
    
\renewbibmacro*{begentry}{%
\begingroup% 
\defcounter{maxnames}{1}% 
\textbf{[\usebibmacro{cite}]}\\% 
\endgroup% 
}%

\begin{document} 
\cite{ArbSchG} 

\printbibliography 
\end{document}

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Auch hier die Frage, ob vielleicht jemand eine Idee hat, wie ich das addcolon besser unterbringe.

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

Ich würde eher ein neues bibmacro definieren, dass für die Ausgabe des
Labels in der Bibliographie zuständig ist:
\documentclass[ngerman]{scrartcl} 
\listfiles 
\usepackage{filecontents} 
\begin{filecontents}{\jobname.bib} 
@legislation{ArbSchG, 
shorthand = {ArbSchG}, 
sortkey = {ArbSchG}, 
title = {Gesetz über die Durchführung von Maßnahmen des Arbeitsschutzes zur Verbesserung der Sicherheit und des Gesundheitsschutzes der Beschäftigten bei der Arbeit}, 
note = {vom 7. August 1996 (BGBl. I S. 1246)}, 
} 
@BOOK{book,
    author = {Buchautor, Hans-Wilhelm and Zweitautor, Zwentibold and Drittautorin, Dorothea},
title = {Irgendein Buch},
  address = {Buch am Wald},
  year = {2000}
}
\end{filecontents} 
\usepackage[T1]{fontenc} 
\usepackage[latin1]{inputenc} 
\usepackage{babel,csquotes} 

\usepackage[ 
  style=authoryear,
	maxnames=1
]{biblatex} 
\bibliography{\jobname} 
\DeclareBibliographyDriver{legislation}{% 
  \usebibmacro{bibindex}% 
  \usebibmacro{begentry}% 
  \usebibmacro{title}% 
  \setunit{\addsemicolon\space}% 
  \printfield{note}% 
  \usebibmacro{pageref}% 
  \usebibmacro{finentry}} 

\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
    
\newbibmacro*{cite:bib}{% 
  \iffieldundef{shorthand} 
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}} 
       {\usebibmacro{cite:label}}% folgende Zeile weggelassen
       {\printnames{labelname}%
        \setunit{\nameyeardelim}}% 
        \usebibmacro{cite:labelyear+extrayear}} 
    {\usebibmacro{cite:shorthand}}}
    
\renewbibmacro*{begentry}{% 
\begingroup% 
\defcounter{maxnames}{1}% 
\textbf{[\usebibmacro{cite:bib}]}\\% 
\endgroup% 
}% 

\begin{document} 
\cite{ArbSchG} 

\cite{book}

\printbibliography[maxnames=3]
\end{document}
Übrigens ist es inkonsistent, im Text mehrere Autoren anzugeben und im
Label in der Bibliographie nur einen, weil das Label ja gerade dazu da ist,
dass man von den Verweisen im Text schnell den Eintrag im
Literaturverzeichnis findet. Ich habe deshalb im Text und in den Labels
maxnames=1 verwendet, in der Bibliographie ansonsten aber
maxnames=3.

Autorennamen mit Kapitälchen bekommt man übrigens durch eine
Umdefinierung von \mkbibnamelast.

Gruß,
Dominik.-
______________________________________________________________

Edit: »label = {…}« durch »shorthand = {…}« ersetzt, da shorthand für
die Benutzerebene gedacht ist, label dagegen automatisch generiert wird.]
______________________________________________________________

Antworten