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 .log
el archivo.
Lamentablemente, \wlog
no funciona aquí porque el contenido del cuadro se guarda para un uso posterior. La macro se llamará cuando las entradas se agreguen al .aux
archivo 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 .log
resultado, 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: \wlog
provienen \showbox
de dos lugares diferentes durante el procesamiento y no puedes interrumpir la salida \showbox
con 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 \textcompwordmark
glifo invisible y de ancho cero vive en la ranura 0x17
de la tabla de fuentes y 0x57
es W
.
Simplemente encuentre una manera de agregar algo \textcompwordmark
a 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 .log
expediente
> \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}}