bibtex - Cambiar formato de urldate

bibtex - Cambiar formato de urldate

Tengo el problema de que uso el gestor de citas Citavi y sólo puede exportar en formato urldate = {dd.mm.yyyy}. Sin embargo Bibtex necesita el formato urldate = {yyyy-mm-dd}. En mi caso no es realmente realista cambiar todas las fechas de mi bibliografía manualmente, ya que tengo muchas entradas y después de cada exportación necesitaría rehacerlas.

Por ejemplo, mi entrada bibtex se ve así:

@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}
}

Luego recibo la siguiente advertencia cuando lo compilo con BibTex

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.

¿Hay alguna forma de cambiar el formato de Bibtex en el que lee el urldateformato urldate = {dd.mm.yyyy}o puedo convertirlo de alguna manera urldate = {yyyy-mm-dd}?

He buscado en internet y no he encontrado ninguna solución a este problema. Parece ser un problema específico de Citavi. Lástima que Citavi no sea personalizable.

Mi pregunta es similar a esta:Ignore un campo de bibliografía [por ejemplo, "urldate"] para eliminar las advertencias de biblatex/biber. Sin embargo, en este tema no se proporcionó ninguna solución para mi problema, porque en este caso urldateno era necesaria y, por lo tanto, simplemente se ignoró. Pero necesito dar urldate.

Respuesta1

Gracias a los comentarios de Giacomo, encontré otra solución para este problema específico:

El problema de alguna manera está más relacionado con Citavi y Citavi no es tan claro ni transparente como LaTeX. Para referencia futura de otras personas que puedan encontrar un problema similar: Aunque Citavi solicita proporcionar la fecha en el formato, urldate={dd.mm.yyyy}puede escribirla como urldate = {yyyy-mm-dd}. La exportación no supone ningún problema. Curiosamente, con sólo cambiar una entrada, todas las demás entradas se exportan en consecuencia. Es culpa mía no haberlo probado antes. Debería haberlo probado antes.

Respuesta2

Si está utilizando biblatexel paquete, puede utilizar

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

en su preámbulo para reformatear urldateel campo de *.biblos archivos de entrada.

Respuesta3

Para forzar el formato en BibTeX, uso llaves dobles, por ejemplo:

Urldate  = {{15/01/2014}}

Respuesta4

Escribí un pequeño script en Python que cambia el formato de urldate: coloque su archivo .bib en el mismo directorio que este script, asígnele el nombre "quellen.bib" y ejecute el script. Aparecerá un nuevo archivo formateado llamado "changedFile.bib".

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;

    

información relacionada