bibtex - Format des URL-Datums ändern

bibtex - Format des URL-Datums ändern

Ich habe das Problem, dass ich den Zitationsmanager Citavi verwende und dieser nur im Format exportieren kann urldate = {dd.mm.yyyy}. Bibtex benötigt jedoch das Format urldate = {yyyy-mm-dd}. Alle Daten meiner Bibliographie manuell zu ändern, ist in meinem Fall nicht wirklich realistisch, da ich viele Einträge habe und nach jedem Export dies erneut tun müsste.

Beispielsweise sieht mein Bibtex-Eintrag so aus:

@Misc{FAO.2011,
  Title                    = {{FAOSTAT: Food balance sheet}},
  Author                   = {FAO},
  Year                     = {2011},
  Address                  = {Rome},
  Url                      = {http://faostat3.fao.org/download/FB/FBS/E},
  Urldate                  = {15.1.2014}
}

Dann erhalte ich folgende Warnung, wenn ich es mit BibTex kompiliere

Package biblatex Warning: Biber reported the following issues
(biblatex) with 'FAO.2011':
(biblatex) - Datamodel: Entry 'FAO.2011' (literature.bib): Inval
id format '15.1.2014' of date field 'urldate' - ignoring.

Gibt es eine Möglichkeit, das Format von Bibtex so zu ändern, dass es das urldateIn-Format liest urldate = {dd.mm.yyyy}, oder kann ich es irgendwie in konvertieren urldate = {yyyy-mm-dd}?

Ich habe im Internet gesucht und keine Lösung für dieses Problem gefunden. Es scheint ein spezifisches Problem von Citavi zu sein. Schade, dass Citavi nicht anpassbar ist.

Meine Frage ähnelt dieser:Ignorieren Sie ein Bibliographiefeld [z. B. „urldate“], um Biblatex-/Biber-Warnungen zu vermeiden.. Allerdings wurde in diesem Thema keine Lösung für mein Problem bereitgestellt, da es in diesem Fall urldatenicht benötigt wurde und daher einfach ignoriert wurde. Aber ich muss geben urldate.

Antwort1

Dank Giacomos Feedback habe ich eine andere Lösung für dieses spezielle Problem gefunden:

Das Problem hängt eher mit Citavi zusammen und Citavi ist nicht so klar oder transparent wie LaTeX. Zur Information für andere, die auf ein ähnliches Problem stoßen könnten: Obwohl Citavi nach dem Datum in dem Format fragt, in dem urldate={dd.mm.yyyy}Sie es eingeben können, urldate = {yyyy-mm-dd}macht der Export keine Probleme. Seltsamerweise werden alle anderen Einträge entsprechend exportiert, wenn man nur einen Eintrag ändert. Mein Fehler, dass ich es nicht früher ausprobiert habe. Ich hätte es früher ausprobieren sollen.

Antwort2

Wenn Sie ein Paket verwenden, biblatexkönnen Sie verwenden

\DeclareSourcemap{
    \maps{
        \map[overwrite]{
            \step[fieldsource=urldate,
            match=\regexp{([0-9]{2})\.([0-9]{2})\.([0-9]{4})},
            replace={$3-$2-$1},
            final]
        }
    }
}

in Ihrer Präambel, um urldatedas Feld der Eingabedateien neu zu formatieren *.bib.

Antwort3

Um die Formatierung in BibTeX zu erzwingen, verwende ich doppelte Klammern, zB:

Urldate  = {{15/01/2014}}

Antwort4

Ich habe ein kleines Python-Skript geschrieben, das das Format von urldate ändert: Legen Sie Ihre .bib-Datei in dasselbe Verzeichnis wie dieses Skript, nennen Sie sie "quellen.bib" und führen Sie das Skript aus. Eine neu formatierte Datei mit dem Namen "changedFile.bib" wird angezeigt.

import re

file = open("quellen.bib","r");
fileChanged = open("changedFile.bib","w");
pattern = re.compile("([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})");

for line in file:
    if "urldate =" in line and pattern.search(line):
        #save end of line to add it later to the modified date
        endline = line[line.index('}')+1:len(line)];
        date = line[line.index('{')+1:line.index('}')];
        month = int(date[0:date.index('/')]);
        date = date[date.index('/')+1:len(date)];
        day = int(date[0:date.index('/')]);
        date = date[date.index('/')+1:len(date)];
        year = int(date);
        if month > 12:
            # check if month and day are reversed
            temp = day;
            day = month;
            month = temp;
        # check if every value is ledgit
        if(month > 0 and month < 13 and day >0 and day < 32 and year > 1000):
            if(month<10):
                #add 0 if month or day is less then 10
                month = "0"+str(month);
            if(day<10):
                day = "0"+str(day);    
            fileChanged.write(" urldate = {"+ str(year)+"-"+str(month)+"-"+str(day)+"}"+endline);
        else:
            print("something is wrong with this line: ");
            print("day: ",day,"montH: ",month, "year: ",year);
            print(line);
    else:
        fileChanged.write(line);
file.close;
fileChanged.close;

    

verwandte Informationen