La pregunta

La pregunta

La pregunta

¿Cómo puedo garantizar que las entradas con referencias cruzadas se incluyan en un .bibarchivo generado por biberpara un documento en caso de que el documento no cite las entradas con referencias cruzadas en sí, sino solo las entradas que se refieren a ellas? Para ser claro, no quiero que las entradas con referencias cruzadas aparezcan por separado en la lista de referencias, pero las necesito en el .bibarchivo para que los datos completos estén disponibles para las entradas que cito.

Fondo

Considere el siguiente documento que utiliza una base de datos regular de entradas bibliográficas (incluidas aquí como orig.bib):

\documentclass{article}
\usepackage[backend=biber]{biblatex}
  \bibliography{orig}
\usepackage{filecontents}
\begin{filecontents}{orig.bib}
@bookinbook{author-bk1,
  crossref = {author-bigbk},
  title = {Originally a Separate Book},
  pages = {345--789}}

@suppbook{author-essays-intro,
  crossref = {author-essays},
  title = {Introduction},
  pages = {1--8}}

@incollection{author-essay,
  crossref = {editor-collection},
  title = {My Essay},
  pages = {8-34},
  author = {Author, Bit Busy}}

@book{author-bigbk,
  author = {Author, Prolific},
  title = {Collected Works},
  year = 1453,
  publisher = {Printers 'R Us},
  address = {Milky Way}}

@book{author-essays,
  title = {Essays},
  author = {Author, Busy},
  year = 1578,
  publisher = {We Print 4U},
  address = {Alpha Centauri}}

@book{editor-collection,
  editor = {Editor, Fair},
  booktitle = {Collection of People's Thoughts},
  year = 1679,
  publisher = {Great Collections in Print},
  address = {Earth}}
\end{filecontents}

\begin{document}

\autocites{author-bk1,author-essays-intro,author-essay}

\printbibliography

\end{document}

Como era de esperar, esto produce lo siguiente:

Lista de referencias completa

La promesa

Ahora supongamos que quiero generar un .bibarchivo que contenga sólo las entradas necesarias para este documento en particular. (Obviamente, esto no tendría sentido con este ejemplo, ya que orig.bibno contiene nada más, pero ese no suele ser el caso, por supuesto).

Volviendo al bibermanual de, encuentro esto:

3.1.1 La opción formato_salida

Biber es capaz de generar... archivos BibTeX .bib. La salida .bib es posible en el modo herramienta, cuando convierte un archivo de fuente de datos completo independientemente de cualquier documento en particular (consulte la sección 3.12). También es útil cuando desea, en lugar de un .bbl, un nuevo archivo .bib que contenga solo las entradas citadas de un documento para poder, por ejemplo, enviar un paquete mínimamente completo para su composición tipográfica a alguien. Para hacer esto, después de la primera ejecución de LaTeX, llame a Biber de esta manera:

biber --output_format=bibtex test.bcf 

Esto daría como resultado un nuevo archivo .bib llamado test_biber.bib que contiene todas las entradas citadas en test.tex, en orden de citación, formateadas de acuerdo con las distintas opciones de ouput_*.

Entonces intento esto:

biber --output_format=bibtex prawf3.bcf

El problema

Mi intento crea prawf3_biber.bib:

@BOOKINBOOK{author-bk1,
  CROSSREF = {author-bigbk},
  PAGES    = {345--789},
  TITLE    = {Originally a Separate Book},
}

@SUPPBOOK{author-essays-intro,
  CROSSREF = {author-essays},
  PAGES    = {1--8},
  TITLE    = {Introduction},
}

@INCOLLECTION{author-essay,
  AUTHOR   = {Author, Bit Busy},
  CROSSREF = {editor-collection},
  PAGES    = {8-34},
  TITLE    = {My Essay},
}

lo cual obviamente no es lo que esperaría, ya que el uso de este .bibarchivo claramente no producirá los resultados requeridos. Eso es:

\documentclass{article}
\usepackage[backend=biber]{biblatex}
  \bibliography{prawf3_biber}

\begin{document}

\autocites{author-bk1,author-essays-intro,author-essay}

\printbibliography

\end{document}

encontrará problemas cuando biberse ejecute:

INFO - Found 3 citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'prawf3_biber.bib' for section 0
INFO - Found BibTeX data source 'prawf3_biber.bib'
WARN - I didn't find a database entry for crossref 'author-bigbk' in entry 'author-bk1' - ignoring (section 0)
WARN - I didn't find a database entry for crossref 'author-essays' in entry 'author-essays-intro' - ignoring (section 0)
WARN - I didn't find a database entry for crossref 'editor-collection' in entry 'author-essay' - ignoring (section 0)

lo cual obviamente es de esperarse dado que las entradas con referencias cruzadas no están allí.

biberEl manual analiza el uso de datos de referencia cruzada cuando está en toolmodo, pero eso parece aplicarse solo al convertir una fuente de datos completa. Entonces, si quisiera aplicar eso a orig.bib, podría hacerlo y luego podría extraer las entradas (ahora completas) prawf3_biber.bibusando el comando anterior. [Al menos, supongo que podría; no lo he probado.]

La cuestión revisada

Pero, ¿cómo puedo asegurarme de que las entradas en el .bibarchivo generado se completen con datos de las entradas con referencias cruzadas?sinconvertir el .bibarchivo original ysin¿Citando las entradas con referencias cruzadas en el documento?

Respuesta1

Finalmente descubrí cómo hacer esto. En la documentación, parece que usar el --output_formatmodo en que lo hacía es distinto del toolmodo de invocación. Por lo tanto, la forma en que crossrefse tratan los datos allí no parece relevante para el caso que nos preocupa aquí. Sin embargo,

biber --help

es bastante más útil. En particular, afirma que--output_format=bibtex sólo tiene sentido en el toolmodo. Entonces, dado que esa opción está claramente destinada a usarse en este tipo de casos, como sugiere la documentación, debe tener sentido usar toolmode aquí también. Además, la ayuda del comando también es mucho más sencilla de entender para usos relativamente simples. Mientras que la documentación sobre toolel modo detalla mucho cómo configurar los tipos correctos de procesamiento para diferentes transformaciones de fuentes de datos, la ayuda del comando aclara mejor las opciones básicas.

En particular, resulta que hay una opción para hacer exactamente lo que se quiere aquí:

biber --output_format=bibtex --output_resolve prawf3.bcf

Lo que esto hace es no incluir las entradas con referencias cruzadas en el archivo .bib. Lo que hace en cambio escompletolas entradas que los utilizan con datos de las entradas cruzadas. La resultante prawf3_biber.bib:

@BOOKINBOOK{author-bk1,
  AUTHOR     = {Author, Prolific},
  BOOKAUTHOR = {Author, Prolific},
  BOOKTITLE  = {Collected Works},
  LOCATION   = {Milky Way},
  PAGES      = {345--789},
  PUBLISHER  = {Printers 'R Us},
  TITLE      = {Originally a Separate Book},
  YEAR       = {1453},
}

@SUPPBOOK{author-essays-intro,
  AUTHOR     = {Author, Busy},
  BOOKAUTHOR = {Author, Busy},
  BOOKTITLE  = {Essays},
  LOCATION   = {Alpha Centauri},
  PAGES      = {1--8},
  PUBLISHER  = {We Print 4U},
  TITLE      = {Introduction},
  YEAR       = {1578},
}

@INCOLLECTION{author-essay,
  AUTHOR    = {Author, Bit Busy},
  BOOKTITLE = {Collection of People's Thoughts},
  EDITOR    = {Editor, Fair},
  LOCATION  = {Earth},
  PAGES     = {8-34},
  PUBLISHER = {Great Collections in Print},
  TITLE     = {My Essay},
  YEAR      = {1679},
}

lo que en realidad es mejor para muchos propósitos que incluir las entradas con referencias cruzadas por separado.

Respuesta2

Si es posible, se prefiere la respuesta de cfr por razones obvias (especialmente la conveniencia).

Sin embargo, si es necesario evitar cómo Biber 'resuelve' las entradas con referencias cruzadas y mantener todas las entradas separadas (por ejemplo, tal vez porque usted cita varios artículos de una colección de ensayos y, por lo tanto, aún necesita que cada ensayo simplemente apunte al libro) en la bibliografía en lugar de que cada uno proporcione la referencia bibliográfica completa; entonces podría hacer algo como esto:

latex      basefile.tex 
biber -m 1 basefile.bcf     # `--mincrossref | -m 1` produces a .bbl with all the references
bbl2nocite basefile tmpfile # see below
latex      basefile.tex
biber --output_format=bibtex basefile.bcf # produces `basefile_biber.bib`

Para que esto funcione, necesita \inputlo que está extrayendo de .bblalguna manera. Hice esto con un bbl2nocitescript sin sentido, que básicamente consiste simplemente en concluir grepy sed:

#!/bin/bash
#
# Find and convert all lines in a .bbl file from
# \entry{<key>}{<entrytype>}{}
# to
# \nocite{<key>}
#
# usage: bbl2nocite inputfile outputfile
INFILE=$1
OUTFILE=$2

grep '\\entry' $INFILE.bbl | sed 's/\\entry/\\nocite/g' | sed 's/}{.*/}/' > $OUTFILE.tex

La otra modificación que debes hacer está en .tex: necesitas \inputlo que llamé tmpfile.texarriba. Usando el archivo de ejemplo de CFR, todo lo que necesita agregar es:

\input{tmpfile}

justo antes del \printbibliography; o podrías hacer en su lugar:

\InputIfFileExists{tmpfile.tex}{\input{tmpfile}}{\relax}

Y, finalmente, obtienes el nuevo archivo de bibliografía, que termina en _biber.bib, que debería contener, en este caso, seis entradas.

Una última cosa a tener en cuenta es que es posible que deba comentar la \Input...línea y ejecutar una secuencia de latex, bibery latexnuevamente para volver a la apariencia original de la bibliografía. En el archivo CFR anterior, por ejemplo, esta técnica hará que aparezcan los seis elementos en la bibliografía, lo que puede no ser deseado.

información relacionada