Por varias razones necesito declarar dentro de un documento LaTeX con ayuda de biblatex un nuevo controlador con nuevos campos.
Por ejemplo, se puede proporcionar la siguiente entrada BibTeX:
\begin{filecontents}{\jobname.bib}
@aloa{chris,
fu = {Hawaii},
fubo = {Hawaiiboooo},
year = {2015}}
\end{filecontents}
Entonces me gustaría definir en el documento LaTeX algo como:
\DeclareBibliographyDriver{aloa}{%
\newunit\newblock
\printfield{fu}%
\newunit\newblock
\printfield{fubo}%
\newunit\newblock
\printfield{year}%
\finentry}
Y luego me gustaría citar la entrada de tal manera que obtenga como resultado en la lista de referencias:
Hawaii Hawaiiboooo 2015
Un ejemplo mínimo sería 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}
¿Es posible hacer esto solo en el archivo LaTeX (con bibtex y no con biber)?
Respuesta1
Es posible crear nuevos controladores y nuevos campos de entrada biblatex
incluso sin biber
.
Cuando el backend no lo está biber
, biblatex
utiliza un .bst
archivo especial biblatex.bst
para generar el .bbl
archivo, por lo que hay que modificarlo biblatex.bst
. Aquí está el procedimiento:
1) ubique biblatex.bst
y haga una copia y cambie el nombre de la copia (es decir, mybiblatex.bst
) y coloque la copia renombrada en algún lugar donde bibtex
pueda ubicarla (una solución simple es colocarla en la misma carpeta/directorio del archivo de látex).
2) en la copia local localice ENTRY
y agregue los campos que desea agregar:
ENTRY {
entryset
...
fu
fubo
}
esto indica bibtex
que fu
y fubo
son bibtex
campos.
3) ubicar en la copia local FUNCTION {output.fields.3}
y crear una nueva función
FUNCTION {output.myfields} {
"fu" fu output:write:field
"fubo" fubo output:write:field
}
esta función indica bibtex
cómo tratar el nuevo campo. para cada línea, los dos primeros argumentos son el nombre de los nuevos campos; para el tercer argumento, puede utilizar output:write:<type>
, donde <type>
es uno de name
, field
, o verb
, según el tipo de datos de la entrada.list
year
4) ubicar en la copia local la función FUNCTION {output:entry}
. Agregue a esta función output.myfields
, por lo que debería verse así
FUNCTION {output:entry}{
...
output.fields.3
output.myfields
output.compat.1
...
}
5) para cada nuevo controlador <driver>
agregue la línea
FUNCTION {<driver>} { type$ output:entry }
en el ejemplo, esto debería ser
FUNCTION {aloa} {type$ output:entry}
6) agregue lo siguiente a su fuente 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
esto es para decirle bibtex
que se use mybiblatex.bst
en lugar del valor predeterminado biblatex.bst
.
Aquí está la salida en el MWE