Biblatex: Declare novo driver com novos campos

Biblatex: Declare novo driver com novos campos

Por vários motivos, preciso declarar em um documento LaTeX com a ajuda do biblatex um novo driver com novos campos.

Por exemplo, a seguinte entrada BibTeX pode ser fornecida:

\begin{filecontents}{\jobname.bib}
    @aloa{chris,
        fu = {Hawaii},
        fubo = {Hawaiiboooo},
        year = {2015}}
\end{filecontents}

Então eu gostaria de definir no documento LaTeX algo como:

\DeclareBibliographyDriver{aloa}{%
    \newunit\newblock
    \printfield{fu}%
    \newunit\newblock
    \printfield{fubo}%
    \newunit\newblock
    \printfield{year}%
    \finentry}

E então eu gostaria de citar a entrada de forma que eu obtenha como resultado a lista de referências:

Havaí Havaibooooo 2015

Um exemplo mínimo seria como:

\documentclass{article}

\begin{filecontents}{\jobname.bib}
    @aloa{chris,
        fu = {Hawaii},
        fubo = {Hawaiiboooo},
        year = {2015}}
\end{filecontents}

\usepackage[backend=bibtex8]{biblatex}

\DeclareBibliographyDriver{aloa}{%
    \newunit\newblock
    \printfield{fu}%
    \newunit\newblock
    \printfield{fubo}%
    \newunit\newblock
    \printfield{year}%
    \finentry}

\bibliography{\jobname.bib}

\begin{document}
    \nocite{chris}
    \printbibliography
\end{document}

É possível fazer isso apenas no arquivo LaTeX (com bibtex e não biber)?

Responder1

É possível criar novos drivers e novos campos de entrada biblatexmesmo sem biber.

Quando o backend não é biber, usa um arquivo biblatexespecial para gerar o arquivo, portanto é necessário modificá-lo . Aqui está o procedimento:.bstbiblatex.bst.bblbiblatex.bst

1) localize biblatex.bste faça uma cópia dela e renomeie a cópia (ou seja, mybiblatex.bst) e coloque a cópia renomeada em algum lugar onde bibtexseja possível localizá-la (uma solução simples é colocar na mesma pasta/diretório do arquivo latex).

2) na cópia local localize ENTRYe adicione os campos que deseja adicionar:

ENTRY {
  entryset 
  ...
  fu
  fubo
}

this instrui bibtex que fue fubosão bibtexcampos.

3) localize na cópia local FUNCTION {output.fields.3}e crie uma nova função

FUNCTION {output.myfields} {
  "fu"    fu    output:write:field
  "fubo"  fubo  output:write:field
}

esta função instrui bibtexcomo tratar o novo campo. para cada linha, os dois primeiros argumentos são o nome do(s) novo(s) campo(s); para o terceiro argumento, você usa output:write:<type>, onde <type>é um de name, field, verbou , dependendo do tipo listde yeardados da entrada.

4) localize na cópia local a função FUNCTION {output:entry}. Adicione a esta função output.myfields, então deve ficar assim

FUNCTION {output:entry}{
  ...
  output.fields.3
  output.myfields
  output.compat.1
  ...
}

5) para cada novo driver <driver>adicione a linha

FUNCTION {<driver>} { type$ output:entry }

no exemplo, isso deveria ser

FUNCTION {aloa} {type$ output:entry}

6) adicione o seguinte à sua fonte de látex:

\makeatletter
\def\blx@auxinit@bibtex#1{%
  \blx@auxwrite\blx@auxout@bibtex
    {\def\do##1{,\blx@stripbib{##1}}}
    {\ifx\blx@auxout@bibtex\@mainaux
     \else
       \blx@msg@aux
     \fi
     \string\bibstyle{mybiblatex}\blx@nl
     \string\bibdata{%
       \blx@ctrlfile@bibtex\blxauxsuffix
       \ifx#1\@empty
       \else
         \dolistloop#1%
       \fi}\blx@nl
     \string\citation{biblatex-control}}}
\makeatother

isso é para dizer bibtexpara usar mybiblatex.bstem vez do padrão biblatex.bst.

Aqui está a saída no MWE

insira a descrição da imagem aqui

informação relacionada