Anfügen eines Schlüsselworts an das Ende eines Bibliographieeintrags

Anfügen eines Schlüsselworts an das Ende eines Bibliographieeintrags

Diese Frage ist eigentlich eine Folgefrage zu einer anderen Frage von mir,Patchen von \printbibliography zum Anzeigen von Inhalten sowohl im Dokument als auch im Protokoll. Der Code funktioniert wunderbar und ich kann die Textformatierung für jeden Eintrag analysieren. Der schwierige Teil ist, wie man trennt, wo ein Eintrag endet und der andere beginnt:

...

...\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

...

Da ich im Voraus weiß, dass mein Bibliographiestil verwendet wird [1], [2]und so weiter, kann ich leicht erkennen, wo das neue Element beginnt. Aber ich habe darüber nachgedacht, ob ich jedem Element ein Schlüsselwort anhängen könnte, damit ich es als abschließende Auszeichnung verwenden kann.

Im Chatroom hat Marco Daniel mir den brillanten Vorschlag gemacht:

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

<keyword>Dies wird an jedes Bibliographieelement angehängt . Bis jetzt ist das ein interessanter Ansatz. Aber es gibt etwas, das ich vermeiden möchte: Das Schlüsselwort wird sowohl im Dokument als auch in .logder Datei gedruckt.

Funktioniert hier leider \wlognicht, da der Inhalt der Box für eine spätere Verwendung gespeichert wird. Das Makro wird aufgerufen, wenn die Einträge zur .auxDatei hinzugefügt werden und nicht während des Box-Trace.

Meine Testdatei:

\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}

Hat jemand einen Vorschlag, ob ich ein Schlüsselwort oder eine Markierung hinzufügen kann, die das Ende eines Bibliographieeintrags in der .logAusgabe, aber nicht im Dokument anzeigt? Ich vermute, dass dies nicht möglich ist oder der Box-Speicherprozess drastisch geändert werden muss.

Antwort1

Da gibt es nicht viel zu tun: \wlogund \showboxkommen bei der Verarbeitung von zwei unterschiedlichen Stellen und die Ausgabe von kann nicht \showboxdurch andere Meldungen unterbrochen werden.

Anstatt einen Marker für das Ende hinzuzufügen, können Sie nach einem Marker am Anfang eines Eintrags suchen. Im Protokoll sehen Sie, dass das Label nach folgendem Muster erscheint

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

weil es auf einer tieferen Ebene des Boxens gesetzt wird. Eine Möglichkeit könnte sein, dem Feld etwas Unsichtbares hinzuzufügen, zum Beispiel \textcompwordmark, was eine Zeile der Form erzeugen würde

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

weil sich das \textcompwordmarkunsichtbare Glyph mit der Breite Null im Slot 0x17der Schriftarttabelle befindet und 0x57ist W.

Finden Sie einfach eine Möglichkeit, \textcompwordmarkden Schriftsatz des Etiketts zu ändern. Wie das folgende Beispiel zeigt, werden dadurch die Abmessungen der Box nicht verändert.

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

mit dem entsprechenden Teil der .logDatei

> \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

Da Ihr Dokument die Standardumgebung für Bibliografien verwendet, die mit definiert wurde \defbibenvironment{bibliography}, lässt sie sich durch einen einfachen Patch so ändern, dass den Bibliografiebeschriftungen folgendes vorangestellt wird \textcompwordmark:

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

Hier ist, was ich in der Protokolldatei bekomme (abgeschnitten)

[...]
....\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 ]
[...]

Eine einfache Regex-Suche findet den Anfang von Bibliografieeinträgen.

Dank Marco Daniel scheint dies eine bessere Möglichkeit zum Hinzufügen des unsichtbaren Glyphs zu sein:

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

verwandte Informationen