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 biblatex
mesmo sem biber
.
Quando o backend não é biber
, usa um arquivo biblatex
especial para gerar o arquivo, portanto é necessário modificá-lo . Aqui está o procedimento:.bst
biblatex.bst
.bbl
biblatex.bst
1) localize biblatex.bst
e 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 bibtex
seja possível localizá-la (uma solução simples é colocar na mesma pasta/diretório do arquivo latex).
2) na cópia local localize ENTRY
e adicione os campos que deseja adicionar:
ENTRY {
entryset
...
fu
fubo
}
this instrui bibtex
que fu
e fubo
são bibtex
campos.
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 bibtex
como 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
, verb
ou , dependendo do tipo list
de year
dados 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 bibtex
para usar mybiblatex.bst
em vez do padrão biblatex.bst
.
Aqui está a saída no MWE