Preciso remover automaticamente certos campos - por exemplo abstract
, review
, group
, e file
- de arquivos .bib que contêm não apenas entradas bibtex, mas também entradas (mais recentes) do biblatex, como @Thesis
. Isto é o mesmo que perguntado e respondidonesta questão, mas para arquivos incluindo entradas do biblatex.
@Thesis
Esta é a aparência de um exemplo de entrada para a no arquivo .bib:
@Thesis{Author_18_TheThesis,
author = {Mr Author},
title = {The Thesis},
type = {Doctoral Dissertation},
institution = {Department of Documents, University of Stackexchange},
year = {2018},
abstract = {This is the abstract.},
file = {:author/Author_18_TheThesis.pdf:PDF},
review = {This is the review.},
groups = {publications},
}
ferramenta bib, que é a resposta aceita para a pergunta referida, ainda não parece suportar tais entradas e as ignora com um aviso:
@Thesis{Author_18_TheThesis,
_^
*** BibTool ERROR: (line 123 in ./yourbibliography.bib): Unknown entry type
*** BibTool WARNING: Skipping to next '@'
Como você removeria automaticamente esses campos dos arquivos .bib que contêm entradas do biblatex? (Eu preferiria soluções executadas em uma máquina Linux).
Responder1
A resposta de Andrew Swannusar o bibtool originalmente vinculado ao OP funciona, desde que o recurso biblatex
seja fornecido (ht para moewe).
Então, para um arquivo remove-fields.rsc
:
preserve.keys = On
preserve.key.case = On
resource{biblatex}
delete.field = { abstract }
delete.field = { review }
delete.field = { groups }
delete.field = { file }
O comando:
bibtool -r remove-fields ./references.bib -o new.bib
vai resultar em:
@Thesis{ Author_18_TheThesis,
Author = {Mr Author},
Title = {The Thesis},
Type = {Doctoral Dissertation},
Institution = {Department of Documents, University of Stackexchange},
Year = {2018},
ispreprintpublic={test}
}
Responder2
Perceber: por padrão,
biber
elimina silenciosamente campos desconhecidos do modelo de dados. Portanto, se acontecer de você usar campos fora do padrão, veja a atualização abaixo.
Você pode usar biber
o modo de ferramenta do com um mapa de origem apropriado.
No modo de ferramenta do biber ele opera na sua fonte de dados, então você deve executá-lo na linha de comando como, por exemplo:
biber --tool --configfile=biber-tool.conf <mybibfile>.bib
(Claro, <>
existem apenas para você substituir pelo nome de arquivo adequado).
biber-tool.conf
especifica o que você deseja que o biber faça com seu arquivo. No seu caso, você deseja excluir determinados campos de suas entradas, então um mapa de origem é a ferramenta adequada para isso. O conteúdo de biber-tool.conf
seria (com algumas outras opções relevantes para o controle da aparência da saída):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_fieldcase>lower</output_fieldcase>
<output_indent>2</output_indent>
<output_align>true</output_align>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map map_overwrite="1">
<map_step map_field_set="abstract" map_null="1"/>
<map_step map_field_set="review" map_null="1"/>
<map_step map_field_set="groups" map_null="1"/>
<map_step map_field_set="file" map_null="1"/>
</map>
</maps>
</sourcemap>
</config>
Com esta configuração, o comando acima biber gerará um novo arquivo <mybibfile>_bibertool.bib
removendo os campos especificados.
O resultado da sua entrada seria:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
title = {The Thesis},
type = {Doctoral Dissertation},
}
Atualizar: por padrão, biber
elimina silenciosamente campos desconhecidos do modelo de dados. Portanto, se você tiver algum desses em sua fonte de dados, ou se não tiver certeza e quiser ser avisado sobre algum campo ignorado, use a opção --validate-datamodel
:
biber --tool --validate-datamodel <mybibfile>.bib
Para sua entrada, isso lhe daria os seguintes avisos:
WARN - Datamodel: Entry 'Author_18_TheThesis' (references.bib): Field 'groups' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (references.bib): Field 'ispreprintpublic' invalid in data model - ignoring
Agora, se a eliminação desses campos não for desejada e você precisar mantê-los, será necessário estender biber
o modelo de dados de para incluí-los, o que pode ser feito em seu custom biber-tool.conf
, adicionando seu(s) campo(s) não padrão dentro do <fields>...</fields>
grupo. No seu caso (assumindo aqui que estes são campos do tipo "literal"):
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
<field fieldtype="field" datatype="literal">groups</field>
E, dentro do grupo <entryfields><entrytype>thesis</entrytype>...<\entryfields>
adicione:
<field>ispreprintpublic</field>
<field>groups</field>
O costume resultante biber-tool.conf
é então:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_fieldcase>lower</output_fieldcase>
<output_indent>2</output_indent>
<output_align>true</output_align>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map map_overwrite="1">
<map_step map_field_set="abstract" map_null="1"/>
<map_step map_field_set="review" map_null="1"/>
<map_step map_field_set="groups" map_null="1"/>
<map_step map_field_set="file" map_null="1"/>
</map>
</maps>
</sourcemap>
<datamodel>
<fields>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
<field fieldtype="field" datatype="literal">groups</field>
</fields>
<entryfields>
<entrytype>thesis</entrytype>
<field>ispreprintpublic</field>
<field>groups</field>
</entryfields>
</datamodel>
</config>
Com ele, para esta entrada:
@Thesis{Author_18_TheThesis,
author = {Mr Author},
title = {The Thesis},
type = {Doctoral Dissertation},
institution = {Department of Documents, University of Stackexchange},
year = {2018},
abstract = {This is the abstract.},
file = {:author/Author_18_TheThesis.pdf:PDF},
review = {This is the review.},
groups = {publications},
ispreprintpublic = {test},
}
A saída é:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
ispreprintpublic = {test},
title = {The Thesis},
type = {Doctoral Dissertation},
}
Isto não é especialmente simples. Mas, para citar umComenteda PLK sobre o assunto: "Os benefícios de ter um modelo de dados no modo ferramenta superam esse tipo de problema."
Responder3
Outra opção é a bib2bib
ferramenta, que fornece maneiras bastante flexíveis e confiáveis de filtrar/extrair/expandir entradas do bibtex. Este utilitário (pouco conhecido) faz parte dobibtex2htmlconjunto de ferramentas. (Nota: você deve procurar oPDFdocumentação, a documentação HTML não discute bib2bib
.)
Por exemplo, para remover determinados campos de um biblatex.bib
arquivo e salvar a saída em bibtex.bib
:
bib2bib --remove abstract --remove file --remove review -ob bibtex.bib biblatex.bib
Também é possível especificar opções de filtro e classificação, renomear campos ( --rename <old> <new>
) e assim por diante.
Responder4
Você pode fazer isso manualmente usando um editor de texto, como o Sublime. Ative a função Regex (opção+comando+R no Mac) e procure:
abstract = {.*},
e substituí-lo por nada.
Isso remove qualquer coisa entre abstract = {
e},
Você pode aplicar isso a outros campos.