
私は、biblatex を使用して 2 つの異なる参考文献を作成しようとしています。最初の参考文献には、テキスト内の出現順に並べられ、特別な接頭辞が付けられた私の論文のみが含まれます。2 番目の参考文献には、一般的な参考文献が、別の順序 (名前、タイトル、年など) で並べられ、特別な接頭辞が付けられずに含まれます。
2 つの書誌が交差していない (つまり、共通のエントリがない) ことに注意してください。
私は次のMTWを使用します:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{ref.bib}
@ARTICLE{Pub1,
author = {A. R},
title = {My best paper},
year = {2013},
journal = C,
keywords = {publication}
}
@ARTICLE{Pub2,
author = {A. R},
title = {My second best paper},
year = {2013},
journal = C,
keywords = {publication}
}
@ARTICLE{Nopub1,
author = {A. R},
title = {Not my paper 1},
year = {2012},
journal = I,
keywords = {general}
}
@ARTICLE{Nopub2,
author = {A. R},
title = {Not my paper 2},
year = {2012},
journal = I,
keywords = {general}
}
\end{filecontents}
\usepackage[style=numeric, sorting=none, defernumbers=true, backend=biber]{biblatex}
\addbibresource{ref.bib}
\pagestyle{empty}
\begin{document}
This is my first publication : \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]
\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, prefixnumbers=, title=Not my papers]
\end{refcontext}
\end{document}
出力(pdflatex + biber + pdflatex + pdflatex の実行後):
両方の参考文献は正しく印刷され、順序も整っていますが、2 番目の参考文献を参照するテキスト引用が間違っています (すべて [0] です)。他の関連する投稿も確認してみましたが、誰もこの特定の問題について言及していませんでした。
ありがとう!
答え1
現時点では良い解決策があるとは思いません。しかし、背景を説明してみます。あなたの例では、2 つの参考文献が重複していないため、必要な出力は明らかです。しかし、そうである必要はありません。異なる refcontexts では、エントリを繰り返すことができます。それでは、フィルターを削除するとどうなるか見てみましょう。
\documentclass{article}
\usepackage[style=numeric, sorting=none, backend=biber]{biblatex}
\addbibresource{ref.bib}
\pagestyle{empty}
\begin{document}
This is my first publication : \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[title=Not my papers]
\newrefcontext[sorting=nty]
This is my first publication: \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[prefixnumbers=R,title=My papers]
\end{document}
ご覧のとおり、すべての bibentry には 2 つのラベルがあり、biblatex はどちらを使用するかを選択する必要があります。賢明なことに、最初の cites ブロックには最初の (デフォルトの) refcontext からのラベルを使用し、2 番目のブロックには 2 番目のブロックからのラベルを使用します。
これは、ゼロが返される理由を説明しています。最初のブロックでは、引用元にラベルがなく、biblatex には、フォールバックとして別の refcontext からのラベルが必要であることを推測する機会がありません。結局のところ、適切なラベルが複数存在する可能性があります。
biblatexがciteに使用するラベルは、の現在の値に依存します\blx@refcontext@sorting
。そのため、次のようにすることで、biblatexに別のrefcontextのラベルを使用するようにローカルに強制することができます。
{
\makeatletter\def\blx@refcontext@sorting{nty}
These are not my publications: \cite{Nopub1,Nopub2}
}
すると、次のようなものが得られます。
しかし、この解決策は、のような混合都市には機能しません\cite{Nopub1,pub1}
。そして、「論理的な」解決策は
\AtEveryCitekey{\ifkeyword{puplication}{}{\def\blx@refcontext@sorting{nty}}}
refcontext のコードが \AtEveryCitekey が機能する前に実行されるため、これも機能しません。そのため、おそらく機能リクエストを行う必要があるでしょう...
編集
これを試すこともできます。ただし、注意してください。これはハックであり、biblatex を混乱させる可能性があります。そのため、より多くのデータを使用して慎重にテストして確認してください。
\documentclass{article}
\usepackage[style=numeric, sorting=none, defernumbers, backend=biber]{biblatex}
\addbibresource{ref.bib}
\pagestyle{empty}
\makeatletter
\AtEveryCitekey{\ifkeyword{publication}{}{\def\blx@refcontext@sorting{nty}%
\csname blx@data@\the \c@refsection @\blx@refcontext@sorting @\abx@field@entrykey\endcsname}}
\makeatother
\begin{document}
This is my first publication : \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]
\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, prefixnumbers=, title=Not my papers]
\end{refcontext}
\end{document}
答え2
refcontext はこのようなことのために導入されました。refcontext 内の引用コマンドはコンテキストを共有するため、「これらは私の出版物ではありません:」という引用を同じ refcontext 内に配置します。
\assignrefcontextentries[sorting=nty]{Nopub1,Nopub2}
\begin{document}
This is my first publication: \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]
\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, title=Not my papers]
\end{refcontext}
\end{document}
これにはbiblatex 3.3が必要です
答え3
問題は、異なる を使用することから生じますrefcontext
。2refcontext
番目の の周囲の環境を削除するとprintbibliography
、目的の出力が得られます。