Biblatex: Declarar nuevo controlador con nuevos campos

Biblatex: Declarar nuevo controlador con nuevos campos

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 biblatexincluso sin biber.

Cuando el backend no lo está biber, biblatexutiliza un .bstarchivo especial biblatex.bstpara generar el .bblarchivo, por lo que hay que modificarlo biblatex.bst. Aquí está el procedimiento:

1) ubique biblatex.bsty haga una copia y cambie el nombre de la copia (es decir, mybiblatex.bst) y coloque la copia renombrada en algún lugar donde bibtexpueda ubicarla (una solución simple es colocarla en la misma carpeta/directorio del archivo de látex).

2) en la copia local localice ENTRYy agregue los campos que desea agregar:

ENTRY {
  entryset 
  ...
  fu
  fubo
}

esto indica bibtex que fuy fuboson bibtexcampos.

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 bibtexcó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.listyear

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 bibtexque se use mybiblatex.bsten lugar del valor predeterminado biblatex.bst.

Aquí está la salida en el MWE

ingrese la descripción de la imagen aquí

información relacionada