Remova automaticamente campos do arquivo .bib contendo entradas biblatex, como @Thesis

Remova automaticamente campos do arquivo .bib contendo entradas biblatex, como @Thesis

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.

@ThesisEsta é 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 biblatexseja 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, biberelimina 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 bibero 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.confespecifica 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.confseria (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.bibremovendo 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, biberelimina 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 bibero 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 bib2bibferramenta, 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.bibarquivo 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.

informação relacionada