この質問は実は私の別の質問の続きなのですが、ドキュメントとログの両方にコンテンツを表示するための \printbibliography のパッチ適用コードは見事に動作し、すべてのエントリのテキスト フォーマットを分析できます。難しいのは、エントリの終了位置と別のエントリの開始位置を区別する方法です。
...
...\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
...
[1]
私の参考文献スタイルでは、などが使用されていることを事前に知っているので[2]
、新しい項目がどこから始まるかを簡単に見つけることができます。しかし、すべての項目にキーワードを追加して、それを終了マークアップとして使用できないかと考えていました。
チャットルームで、Marco Daniel が私に次のような素晴らしい提案をしてくれました。
\renewbibmacro*{finentry}{\finentry <keyword here>}
これは、すべての参考文献項目に追加されます<keyword>
。これまでのところ、これは興味深いアプローチです。ただし、避けたいことがあります。それは、キーワードがドキュメントと.log
ファイルの両方に印刷されることです。
残念ながら、ボックスの内容は後で使用するために保存されるため、ここでは機能しません。マクロは、ボックスのトレース中ではなく、\wlog
エントリがファイルに追加されたときに呼び出されます。.aux
私のテストファイル:
\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}
文書内ではなく出力内に参考文献項目の終わりを示すキーワードやマークを追加できるかどうかについて、アドバイスをいただける方はいらっしゃいますか.log
? これは不可能か、ボックス保存プロセスを大幅に変更する必要があるのではないかと思います。
答え1
やるべきことはあまりありません。処理中に\wlog
と が2 つの異なる場所から来ており、他のメッセージで\showbox
の出力を中断することはできません。\showbox
末尾にマーカーを追加する代わりに、エントリの先頭にマーカーを探すことができます。ログから、ラベルが次のパターンで表示されることがわかります。
.....\T1/cmr/m/n/10 [
これは、より深いレベルのボックス化でタイプセットされるからです。そのため、たとえば、ボックスに目に見えない何かを追加すると\textcompwordmark
、次のような行が生成されます。
.....\T1/cmr/m/n/10 ^^W
非表示で幅がゼロのグリフがフォント テーブルの\textcompwordmark
スロットに存在するためです。0x17
0x57
W
\textcompwordmark
ラベルの組版に追加する方法を見つけてください。次の例に示すように、これによってボックスの寸法が追加されることはありません。
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\sbox0{[1]}
\showbox0
\sbox0{\textcompwordmark[1]}
\showbox0
\stop
.log
ファイルの関連部分
> \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
ドキュメントでは、 で定義された標準の参考文献環境を使用しているため、\defbibenvironment{bibliography}
簡単なパッチで、参考文献ラベルの前に が付くように変更できます\textcompwordmark
。
%%% After loading biblatex
\makeatletter
\patchcmd{\blx@env@bibliography}{\hss}{\hss\textcompwordmark}{}{}
\makeatother
ログファイルで取得した内容は次のとおりです(省略)
[...]
....\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 ]
[...]
簡単な正規表現検索で参考文献項目の先頭を見つけることができます。
Marco Daniel のおかげで、これは目に見えないグリフを追加するより良い方法のようです:
\DeclareFieldFormat{labelnumberwidth}{\textcompwordmark\mkbibbrackets{#1}}