Anzeige:
Ergebnis 1 bis 11 von 11

Thema: biblatex: Änderung des Typs techreport

  1. #1
    Registrierter Benutzer
    Registriert seit
    27.03.2009
    Beiträge
    91

    biblatex: Änderung des Typs techreport

    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 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:

    Code:
    \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.

  2. #2
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    hi,

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

    suche dann nach der zeile

    Code:
    FUNCTION {techreport}     { "report"        output:entry }
    und aendere dies in

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

    gruss
    Mein Ball ist umgefallen

  3. #3
    Registrierter Benutzer Avatar von domwass
    Registriert seit
    28.09.2010
    Beiträge
    90
    Folgendes sollte funktionieren:
    Code:
    \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.-

  4. #4
    Registrierter Benutzer Avatar von domwass
    Registriert seit
    28.09.2010
    Beiträge
    90
    Zitat Zitat von bobmalaria Beitrag anzeigen
    kopiere dir mal die biblatex.bst aus dem biblatex ordner in deinen hauptordner.

    suche dann nach der zeile

    Code:
    FUNCTION {techreport}     { "report"        output:entry }
    und aendere dies in

    Code:
    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.-

  5. #5
    Registrierter Benutzer
    Registriert seit
    27.03.2009
    Beiträge
    91
    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:

    Code:
    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

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.03.2009
    Beiträge
    91
    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

  7. #7
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    hi,

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

    Code:
    \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
    Mein Ball ist umgefallen

  8. #8
    Registrierter Benutzer
    Registriert seit
    27.03.2009
    Beiträge
    91
    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.

    Code:
    \ifnamesequal{type}{"techreport"}{}{\printfield{type}}
    Grüße,
    Kathrin

  9. #9
    Registrierter Benutzer Avatar von domwass
    Registriert seit
    28.09.2010
    Beiträge
    90
    Probier mal
    Code:
    \iffieldequalstr{type}{techreport}{}{\printfield{type}}
    Gruß, Dominik.-

  10. #10
    Registrierter Benutzer
    Registriert seit
    27.03.2009
    Beiträge
    91
    Fantastisch, so funktioniert es endlich! Vielen, vielen Dank!

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

    Code:
    \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{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}

  11. #11
    Registrierter Benutzer Avatar von domwass
    Registriert seit
    28.09.2010
    Beiträge
    90
    Zitat Zitat von Kathrin_B Beitrag anzeigen
    Code:
    …
    \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.-

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •