PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : biblatex: Änderung des Typs techreport



Kathrin_B
14-07-2011, 21:31
Hallo zusammen,

ich benutze biblatex und habe mir dafür meine eigenen Anpassungen erstellt. Jetzt möchte ich gerne den Typ techreport verwenden, allerdings habe ich das Problem, dass biblatex im Literaturverzeichnis stets "Tech. rep." mit ausgibt. Ich habe hier (http://tex.stackexchange.com/questions/22629/biblatex-use-of-volumes-field-with-techreport) gefunden, dass der Typ techreport automatisch zu report mit type={techreport} umgewandelt wird. Wahrscheinlich funktioniert deshalb mein manuelles Umdefinieren von techreport nicht.

So weit, so schlecht. Ich finde nicht einmal die Stelle in biblatex, an der dieses type={techreport} gesetzt wird. Ich habe bereits alle meine Dateien zu biblatex im entsprechenden Ordner durchgesehen und leider nichts gefunden. Ich würde gerne irgendetwas in meinen Anpassungen reinschreiben, damit es geändert wird und einfach kein type reingeschrieben wird.

Hier noch mein Minimalbeispiel:


\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

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

\DeclareBibliographyDriver{report}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author}
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit\newblock
\printfield{type}%
\newunit\newblock
\usebibmacro{institution+location+date}
\usebibmacro{pageref}%
\usebibmacro{finentry}}

\DeclareBibliographyDriver{techreport}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author}
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit\newblock
\printfield{type}%
\newunit\newblock
\usebibmacro{institution+location+date}
\usebibmacro{pageref}%
\usebibmacro{finentry}}

\usepackage{filecontents}

\begin{filecontents}{bib.bib}
@REPORT{key1,
author = {Name, Vorname},
title = {Arbeitsbericht},
institution = {Universität},
year = {2004}
}
@TECHREPORT{key2,
author = {Name, Vorname},
title = {Arbeitsbericht},
institution = {Universität},
year = {2004}
}
\end{filecontents}

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

Vielen Dank!
Kathrin

P.S.: Die Umwandlung aller techreports in reports in meiner bib-Datei wäre nur eine Notlösung für mich (dann warscheinlich ganz am Ende meiner Arbeit), da nur mit dem Typ techreport die Autovervollständigung im TeXnicCenter funktioniert, was meinen Schreibkomfort bei knapp 150 techreports doch sehr erhöht.

bobmalaria
15-07-2011, 13:25
hi,

kopiere dir mal die biblatex.bst aus dem biblatex ordner in deinen hauptordner.

suche dann nach der zeile


FUNCTION {techreport} { "report" output:entry }


und aendere dies in


FUNCTION {techreport} {"" output:entry }
habe ich nicht getestet, koennte aber gehen.

gruss

domwass
15-07-2011, 13:37
Folgendes sollte funktionieren:

\DeclareBibliographyDriver{report}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author}
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
%\newunit\newblock
%\printfield{type}%
\newunit\newblock
\usebibmacro{institution+location+date}
\usebibmacro{pageref}%
\usebibmacro{finentry}}

Erklärung: type wird bei report nun einfach nicht mehr ausgegeben. Das heißt natürlich auch, dass »type = {resreport}« (Forschungsbericht) auch nicht funktionieren wird. Einen Typ @techreport gibt es nicht (wenn man ihn benutzt, wird lediglich auf @report verwiesen mit »type = {techreport}«), deshalb hat deine Definition von @techreport auch keine Auswirkungen gehabt.

Gruß,
Dominik.-

domwass
15-07-2011, 13:40
kopiere dir mal die biblatex.bst aus dem biblatex ordner in deinen hauptordner.

suche dann nach der zeile


FUNCTION {techreport} { "report" output:entry }


und aendere dies in


FUNCTION {techreport} {"" output:entry }
habe ich nicht getestet, koennte aber gehen.

Dieser Teil der bst-Datei sorgt dafür, dass statt @techreport @report verwendet wird. Wenn man ihn so ändert, wie du vorschlägst, wird lediglich nicht mehr auf @report verwiesen. Da es keinen BibliographyDriver für @techreport gibt (es sei denn, man erstellt einen), dürfte das zu einer leeren oder zumindest fehlerhaften Ausgabe führen. Ich habs allerdings nicht ausprobiert.

Gruß,
Dominik.-

Kathrin_B
15-07-2011, 13:47
Hallo bobmalaria,

ich habe deine Änderung ausprobiert, aber leider bringt es nicht den gewünschten Erfolg. Ich habe auch versucht, die Änderung in der Originaldatei vorzunehmen (natürlich mit vorheriger Sicherung), aber selbst da klappt es nicht.

Es gibt noch eine Funktion mit techreport in der Datei, auch die habe ich versucht zu ändern:


FUNCTION {output:compat.2} {
"type" type
duplicate$ empty$
{ type$ "patent" =
type$ "techreport" = or
type$ "phdthesis" = or
{ pop$ type$ }
{ type$ "mastersthesis" =
{ pop$ "mathesis" }
'skip$
if$
}
if$
}
'skip$
if$
output:write:field
"journaltitle" journaltitle
duplicate$ empty$
{ pop$ journal }
{ journal empty$
'skip$
{ "journal" "journaltitle" warning:duplicate }
if$
}
if$
output:write:field
"annotation" annotation
duplicate$ empty$
{ pop$ annote }
{ annote empty$
'skip$
{ "annote" "annotation" warning:duplicate }
if$
}
if$
output:write:multi
}

Dort habe ich die Zeile mit techreport rausgelöscht, hat leider auch nichts bewirkt.

Hat noch jemand eine andere Idee?

Danke!
Kathrin

Kathrin_B
15-07-2011, 14:37
Hallo Dominik,

dass es die Option gibt, type gar nicht erst ausgeben zu lassen, war mir klar. Aber das kommt für mich nicht infrage, weil ich eben auch Einträge habe, bei denen type nicht leer ist, z.B. bei Arbeitsberichten/Working Papers. Bei solchen Einträgen wird type auch nicht durch techreport überschrieben.

Die automatische Überführung von techreport zu report war mir auch schon bewusst. Ich möchte "nur" verhindern, dass automatisch bei leeren type-Feldern techreport hineingeschrieben wird. Aber wie ich genau das anstelle, weiß ich eben leider nicht.

Grüße,
Kathrin

bobmalaria
15-07-2011, 14:57
hi,

dann hilft eventuell eine fallunterscheidung in \DeclareBibliographyDriver. anstatt einfach nur \printfield{type}


\iffieldundef{type}{}{\printfield{type}}

wie gesagt ich bin gerade unterwegs und kann nicht testen, aber in der biblatex anleitung wird so eine konstruktion recht oft verwendet.

gruss

Kathrin_B
19-07-2011, 16:17
Hallo bobmalaria,

ich konnte mich leider erst heute wieder um das Problem kümmern. Leider funktioniert auch dein Vorschlag nicht. Ich vermute, dass biblatex in das Feld type wirklich techreport reinschreibt, sodass es nicht leer ist.

Du hast mich aber auf die Idee gebracht, es mit einer if-Abfrage zu versuchen, ob im Feld "techreport" drinsteht, aber entweder mache ich was falsch, oder auch das funktioniert nicht.

Kann mir jemand sagen, ob die if-Abfrage so korrekt ist? Ich habe im Web kein Beispiel für einen Vergleich einer Variable mit einem Text gefunden.


\ifnamesequal{type}{"techreport"}{}{\printfield{type}}

Grüße,
Kathrin

domwass
19-07-2011, 18:03
Probier mal

\iffieldequalstr{type}{techreport}{}{\printfield{t ype}}Gruß, Dominik.-

Kathrin_B
19-07-2011, 19:54
Fantastisch, so funktioniert es endlich! Vielen, vielen Dank!

Hier nochmal das komplette Beispiel für "Nachahmer":


\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

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

\usepackage{ifthen}

\DeclareBibliographyDriver{report}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author}
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit\newblock
\iffieldequalstr{type}{techreport}{}{\printfield{t ype}}
\newunit\newblock
\usebibmacro{institution+location+date}
\usebibmacro{pageref}%
\usebibmacro{finentry}}

\usepackage{filecontents}

\begin{filecontents}{bib.bib}
@REPORT{key1,
author = {Name, Vorname},
title = {Arbeitsbericht},
institution = {Universität},
year = {2004}
}
@TECHREPORT{key2,
author = {Name, Vorname},
title = {Arbeitsbericht},
institution = {Universität},
year = {2004}
}
\end{filecontents}

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

domwass
20-07-2011, 08:58

\usepackage{ifthen}



Nur zur Info: Das Paket »ifthen« ist hier gar nicht nötig. Das \iffieldequalstr (und ähnliche \if-Abfragen) werden von biblatex selbst bereitgestellt.

Gruß,
Dominik.-