Agregar una palabra clave al final de un elemento de bibliografía

Agregar una palabra clave al final de un elemento de bibliografía

Esta pregunta es en realidad una continuación de otra pregunta mía,Parchear \printbibliography para mostrar contenido tanto en el documento como en el registro. El código funciona de maravilla y puedo analizar el formato del texto de cada entrada. La parte complicada es cómo separar dónde termina una entrada y comienza la otra:

...

...\T1/cmr/m/n/10 2
...\T1/cmr/m/n/10 0
...\T1/cmr/m/n/10 1
...\T1/cmr/m/n/10 2
...\T1/cmr/m/n/10 .
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\penalty -51
..\glue 4.0 plus 2.0 minus 1.0
..\glue(\parskip) 0.0
..\glue(\baselineskip) 4.50183
..\hbox(7.49817+2.49939)x324.44702, glue set 0.4662, shifted 20.55298
...\hbox(7.49817+2.49939)x0.0
....\glue 0.0
....\glue -10.55298
....\glue -10.0
....\hbox(7.49817+2.49939)x10.55298
.....\glue 0.0 plus 1.0fil minus 1.0fil
.....\T1/cmr/m/n/10 [
.....\T1/cmr/m/n/10 2
.....\T1/cmr/m/n/10 ]
....\glue 10.0
...\penalty 0
...\T1/cmr/m/n/10 A
...\T1/cmr/m/n/10 u
...\T1/cmr/m/n/10 t

...

Como sé de antemano que mi estilo de bibliografía usa [1], [2]etc., puedo detectar fácilmente dónde comienza el nuevo elemento. Pero estaba pensando si podría agregar una palabra clave a cada elemento, para poder usarlo como marca de cierre.

En la sala de chat, Marco Daniel me sugirió brillantemente:

\renewbibmacro*{finentry}{\finentry <keyword here>}

Esto se agregará <keyword>a cada elemento de bibliografía. Hasta ahora, es un enfoque interesante. Pero hay algo que me gustaría evitar: la palabra clave también se imprimirá tanto en el documento como en .logel archivo.

Lamentablemente, \wlogno funciona aquí porque el contenido del cuadro se guarda para un uso posterior. La macro se llamará cuando las entradas se agreguen al .auxarchivo y no durante el seguimiento del cuadro.

Mi archivo de prueba:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[backend=biber,
            bibstyle=numeric-comp,
            sorting=none]{biblatex}

\addbibresource{biblatex-examples.bib} 

\usepackage{xpatch}

\makeatletter
\def\biblio@inlog#1{%
  \begingroup
  \let\biblio@inlog\@gobble
  \chardef\current@mode\interactionmode
  \showboxdepth=\maxdimen
  \showboxbreadth=\maxdimen
  \sbox\z@{\vbox{\printbibliography[#1]}}
  \batchmode
  \wlog{BEGIN BIBLIOGRAPHY}
  \showbox\z@
  \wlog{END BIBLIOGRAPHY}
  \interactionmode=\current@mode
  \endgroup}
\xapptocmd{\blx@printbibliography}{\biblio@inlog{#1}}{}{}
\makeatother

\begin{document}

\cite{companion} \cite{ctan} 

\printbibliography

\end{document}

¿Alguien tiene alguna sugerencia sobre si puedo agregar alguna palabra clave o marca que indique el final de un elemento de bibliografía en el .logresultado, pero no en el documento? Sospecho que esto no es posible o que el proceso de guardar el cuadro debe modificarse drásticamente.

Respuesta1

No hay mucho que hacer: \wlogprovienen \showboxde dos lugares diferentes durante el procesamiento y no puedes interrumpir la salida \showboxcon otros mensajes.

En lugar de agregar un marcador al final, puede buscar un marcador al comienzo de una entrada; en el registro se ve que aparece la etiqueta con el siguiente patrón

.....\T1/cmr/m/n/10 [

porque está compuesto en un nivel más profundo del boxeo. Entonces, una forma puede ser agregar algo invisible al cuadro, por ejemplo \textcompwordmark, lo que produciría una línea del formulario

.....\T1/cmr/m/n/10 ^^W

porque el \textcompwordmarkglifo invisible y de ancho cero vive en la ranura 0x17de la tabla de fuentes y 0x57es W.

Simplemente encuentre una manera de agregar algo \textcompwordmarka la composición tipográfica de la etiqueta. Esto no aumentará las dimensiones de la caja, como se muestra en el siguiente ejemplo.

\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\sbox0{[1]}
\showbox0
\sbox0{\textcompwordmark[1]}
\showbox0
\stop

con la parte correspondiente del .logexpediente

> \box0=
\hbox(7.49817+2.49939)x10.55298
.\T1/cmr/m/n/10 [
.\T1/cmr/m/n/10 1
.\T1/cmr/m/n/10 ]

! OK.
l.8 \showbox0

?
> \box0=
\hbox(7.49817+2.49939)x10.55298
.\T1/cmr/m/n/10 ^^W
.\T1/cmr/m/n/10 [
.\T1/cmr/m/n/10 1
.\T1/cmr/m/n/10 ]

! OK.
l.10 \showbox0

Dado que su documento utiliza el entorno de bibliografía estándar, el definido con \defbibenvironment{bibliography}, un simple parche lo cambiará para que las etiquetas de bibliografía estén precedidas por \textcompwordmark:

%%% After loading biblatex
\makeatletter
\patchcmd{\blx@env@bibliography}{\hss}{\hss\textcompwordmark}{}{}
\makeatother

Esto es lo que obtengo en el archivo de registro (truncado)

[...]
....\hbox(7.49817+2.49939)x10.55298
.....\glue 0.0 plus 1.0fil minus 1.0fil
.....\T1/cmr/m/n/10 ^^W
.....\T1/cmr/m/n/10 [
.....\T1/cmr/m/n/10 1
.....\T1/cmr/m/n/10 ]
[...]

Una búsqueda sencilla de expresiones regulares encontrará el inicio de los elementos de la bibliografía.

Gracias a Marco Daniel, esta parece una mejor manera de agregar el glifo invisible:

\DeclareFieldFormat{labelnumberwidth}{\textcompwordmark\mkbibbrackets{#1}}

información relacionada