
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 urldate
formato 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 urldate
no 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 biblatex
el 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 urldate
el campo de *.bib
los 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;