私の参考文献では、ビブラテックス親エントリに少なくとも2つの子エントリがある場合、子エントリには編集者の名前と親の作品のタイトルのみを印刷する必要がありましたが、現在は各子エントリ内に親エントリ全体が印刷されています。親エントリは編集者の名前の下に完全に印刷される必要があります。そのため、
Test Author. “Testing the second Title”. In: My Proceedings. Ed. by Senor Editor and Senora Editora. Any Publisher, 2013, pp. 10–20.
Test Author. “Testing the Title”. In: My Proceedings. Ed. by Senor Editor and Senora Editora. Any Publisher, 2013, pp. 1–10.
Senor Editor and Senora Editora, eds. My Proceedings. Any Publisher, 2013.
私が得たいものは次のとおりです:
Test Author: “Testing the second Title”. In: Senor Editor and Senora Editora, eds., *My Proceedings*, pp. 10–20.
[Test Author. “Testing the Title”. In: Senor Editor and Senora Editora, eds., *My Proceedings*, pp. 1–10.
Senor Editor and Senora Editora, eds. *My Proceedings*. Any Publisher, 2013.
同様の質問がすでに回答されていることを知っていますここですが、そこで提案されているコードを操作して編集者とタイトルを出力する方法がわかりません。私は、アルファベットのラベルをコレクション(または議事録や本)のタイトルに置き換えることができました。
\printfield{labeltitle}
の代わりに
\printfield{labelalpha}
しかし、
\printfield{labelname}
または
\printlist{labelname}
編集者の名前を取得するには機能しているようです。何が間違っているのか分かりますか? MWE を追加します:
\documentclass[]{scrartcl}
\usepackage[backend=biber,style=authortitle-icomp]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{my.bib}
@incollection{inproc1,
Author = {Test Author},
Crossref = {proc},
Pages = {1--10},
Title = {Testing the Title}}
@incollection{inproc2,
Author = {Test Author},
Crossref = {proc},
Pages = {10--20},
Title = {Testing the second Title}}
@collection{proc,
Editor = {Senor Editor and Senora Editora},
Publisher = {Any Publisher},
Title = {My Proceedings},
Year = {2013}}
@inproceedings{inproc3,
Author = {Nother Author},
Publisher = {Nother Publisher},
Title = {In Some Other Proceedings},
Maintitle = {Main Title of Other Proceedings},
Year = {2001},
}
\end{filecontents}
\DeclareBibliographyDriver{incollection}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\iffieldundef{crossref}
{\usebibmacro{crossref:full}}
{\usebibmacro{crossref:label}}
\newunit\newblock
\usebibmacro{chapter+pages}%
\iffieldundef{crossref}
{\usebibmacro{crossref:extrainfo}}
{}
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}
\newbibmacro{crossref:full}{%
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{event+venue+date}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\printlist{organization}%
\newunit
\usebibmacro{publisher+location+date}}
\newbibmacro{crossref:label}{%
\entrydata{\strfield{crossref}}
{\printtext{
{\printfield{labeltitle}\printfield{extratitle}}}}}
\addbibresource{my.bib}
\begin{document}
Test \cite{inproc1} and \cite{inproc2} and \cite{inproc3}
\printbibliography
\end{document}
そして、もう 1 つ (追加の質問には関係のない些細な点ですが)、子エントリでコレクションのタイトルを斜体で表示するにはどうすればよいですか?
ご協力ありがとうございます。これは TeX Stack Exchange への最初の投稿なので、説明が不十分だったり、規約に違反していたりした場合は、遠慮なく訂正してください。
答え1
必要な名前を印刷します\printnames{labelname}
。
labelname
フルネームを印刷したい場合は、 が必要です\DeclareNameAlias{labelname}{given-family}
。
の後に (ed./eds.) を取得するにはlabelname
、 を追加します\setunit*{\addspace}\printtext[parens]{editorstrg}
。
エントリ のメイン エディターの後に (ed./eds.) を取得するには、次のようにを使用してマクロproc
にパッチを適用する必要があります。bbx:editor
xpatch
\xpatchbibmacro{bbx:editor}
{\usebibmacro{#1}}
{\setunit{\addspace}\printtext[parens]{\usebibmacro{#1}}}
{}{}
タイトルのデフォルトの形式は斜体なので、斜体で表示するにはlabeltitle
、 を使用できます。\printfield[title]{labeltitle}
したがって、crossref:label
マクロは次のようになります。
\newbibmacro{crossref:label}{%
\entrydata{\strfield{crossref}}
{\DeclareNameAlias{labelname}{given-family}%
\printnames{labelname}%
\setunit*{\addspace}%
\printtext[parens]{\usebibmacro{editorstrg}}%
\setunit*{\addcomma\space}%
\printfield[title]{labeltitle}}}
注記:これはあなたの質問に非常に特有です。labelname がエディター (例: 翻訳者) を参照しない場合を処理するには、さらにカスタマイズが必要です。
完全な MWE と出力は次のとおりです。
\documentclass[]{scrartcl}
\usepackage{xpatch}
\usepackage[backend=biber,style=authortitle-icomp]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{my.bib}
@incollection{inproc1,
Author = {Test Author},
Crossref = {proc},
Pages = {1--10},
Title = {Testing the Title}}
@incollection{inproc2,
Author = {Test Author},
Crossref = {proc},
Pages = {10--20},
Title = {Testing the second Title}}
@collection{proc,
Editor = {Senor Editor and Senora Editora},
Publisher = {Any Publisher},
Title = {My Proceedings},
Year = {2013}}
@inproceedings{inproc3,
Author = {Nother Author},
Publisher = {Nother Publisher},
Title = {In Some Other Proceedings},
Maintitle = {Main Title of Other Proceedings},
Year = {2001},
}
\end{filecontents}
\xpatchbibmacro{bbx:editor}
{\usebibmacro{#1}}
{\setunit{\addspace}\printtext[parens]{\usebibmacro{#1}}}
{}{}
\DeclareBibliographyDriver{incollection}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\iffieldundef{crossref}
{\usebibmacro{crossref:full}}
{\usebibmacro{crossref:label}}
\newunit\newblock
\usebibmacro{chapter+pages}%
\iffieldundef{crossref}
{\usebibmacro{crossref:extrainfo}}
{}
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}
\newbibmacro{crossref:full}{%
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{event+venue+date}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\printlist{organization}%
\newunit
\usebibmacro{publisher+location+date}}
\newbibmacro{crossref:label}{%
\entrydata{\strfield{crossref}}
{\DeclareNameAlias{labelname}{given-family}%
\printnames{labelname}%
\setunit*{\addspace}%
\printtext[parens]{\usebibmacro{editorstrg}}%
\setunit*{\addcomma\space}%
\printfield[title]{labeltitle}}}
\newbibmacro{crossref:extrainfo}{%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}}
\addbibresource{my.bib}
\pagestyle{empty}
\begin{document}
Test \cite{inproc1} and \cite{inproc2} and \cite{inproc3}
\printbibliography
\end{document}
答え2
これは私が最も懐かしく思う BibTeX の機能です。
BibTeX を使用すると、これが簡単に機能します。簡単かつ確実で、堅牢です。
Biblatex では、エントリ タイプごとに追加のコードが必要であり、そのコードは、使用される参考文献と引用スタイルに合わせて調整する必要があります。これは難しく、エラーが発生しやすく、維持するのが大変で、したがって非常に脆弱です。
Biblatex は明らかに BibTeX よりもはるかに強力で洗練されています。ただし、前身と比べて、膨大な参考文献が数少ない実際の退化点の 1 つとなっているのは残念です。
確信はありませんが、次のようなものを望んでいるのではないかと思います。
以下は私が使用しているコードを改変したものです。このコード自体は、TeX SE のさまざまな質問に対するさまざまな回答と、Biblatex の標準コードの一部から改変したものです。これらはコード内のコメントに示されています。
\begin{filecontents}{\jobname.bib}
@incollection{inproc1,
Author = {Test Author},
Crossref = {proc},
Pages = {1--10},
Title = {Testing the Title}}
@incollection{inproc2,
Author = {Test Author},
Crossref = {proc},
Pages = {10--20},
Title = {Testing the second Title}}
@collection{proc,
Editor = {Senor Editor and Senora Editora},
Publisher = {Any Publisher},
Title = {My Proceedings},
Year = {2013}}
@inproceedings{inproc3,
Author = {Nother Author},
Publisher = {Nother Publisher},
Title = {In Some Other Proceedings},
Maintitle = {Main Title of Other Proceedings},
Year = {2001},
}
\end{filecontents}
\begin{filecontents}{biblatex.cfg}
\ProvidesFile{biblatex.cfg}
% solution adapted from moewe's answer at http://tex.stackexchange.com/a/267321/, standard.bbx based on answer by Denis at http://tex.stackexchange.com/a/118850/, manual
\newif\iffaxminell@biblatex@compcoll
\faxminell@biblatex@compcollfalse
\DeclareBibliographyOption[boolean]{comp-coll}[true]{%
\edef\tempa{#1}%
\edef\tempb{true}%
\edef\tempc{false}%
\ifx\tempa\tempb
\faxminell@biblatex@compcolltrue
\else
\ifx\tempa\tempc
\faxminell@biblatex@compcollfalse
\fi
\fi
}
\AtEndPreamble{%
\iffaxminell@biblatex@compcoll
\newbibmacro*{faxminell:incollection:coll}{% addaswyd o standard.bbx 2017-04-16
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
}%
\newbibmacro*{faxminell:incollection:crossref}{%
\ifentryinbib{\thefield{crossref}}{%
\cite{\thefield{crossref}}%
\newunit\newblock
\usebibmacro{chapter+pages}%
}{%
\iffieldundef{xref}{%
\usebibmacro{faxminell:incollection:coll}%
}{%
\usebibmacro{faxminell:incollection:xref}%
}%
}%
}%
\newbibmacro*{faxminell:incollection:xref}{%
\ifentryinbib{\thefield{xref}}{%
\cite{\thefield{xref}}%
\newunit\newblock
\usebibmacro{chapter+pages}%
}{%
\usebibmacro{faxminell:incollection:coll}%
}%
}%
\DeclareBibliographyDriver{incollection}{% adapted from standard.bbx based on answer by Denis at http://tex.stackexchange.com/a/118850/
\citereset%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\printdelim{nametitledelim}}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{bytranslator+others}%
\newunit\newblock
\usebibmacro{in:}%
\iffieldundef{crossref}{%
\iffieldundef{xref}{%
\usebibmacro{faxminell:incollection:coll}%
}{%
\usebibmacro{faxminell:incollection:xref}%
}%
}{%
\usebibmacro{faxminell:incollection:crossref}%
}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\newunit\newblock
\iftoggle{bbx:related}
{\usebibmacro{related:init}%
\usebibmacro{related}}
{}%
\usebibmacro{finentry}%
}%
\fi
}
% END redefine handling of @incollection etc.
\endinput
\end{filecontents}
\documentclass{article}
\usepackage[backend=biber,style=authortitle-icomp,comp-coll]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
Test \cite{inproc1} and \cite{inproc2} and \cite{inproc3}
\printbibliography
\end{document}
すでに がある場合はbiblatex.cfg
、既存のカスタマイズに コードを追加できます。 または、 を\makeatletter
との間に挟むなど、通常の方法でプリアンブルに コードを含めることもできます\makeatother
。
などのエントリ タイプにこれが必要な場合は@inproceedings
、同様の方法でそれらを変更できるはずです。(これが必要かどうかはわかりませんでしたので、@incollection
これまでのところ必要だとわかった唯一のケースを実行しました。)
答え3
バンドルのスタイルには、わずかに短い参考文献エントリを可能にする とbiblatex-ext
呼ばれるオプションがあります。citexref
style=authortitle-icomp,
を置き換えてオプションにstyle=ext-authortitle-icomp,
追加するだけです。citexref=true
\documentclass[]{scrartcl}
\usepackage[backend=biber,style=ext-authortitle-icomp, citexref=true]{biblatex}
\begin{filecontents}{\jobname.bib}
@incollection{inproc1,
author = {Test Author},
crossref = {proc},
pages = {1--10},
title = {Testing the Title},
}
@incollection{inproc2,
author = {Test Author},
crossref = {proc},
pages = {10--20},
title = {Testing the second Title},
}
@collection{proc,
editor = {Senor Editor and Senora Editora},
publisher = {Any Publisher},
title = {My Proceedings},
year = {2013},
}
@inproceedings{inproc3,
author = {Nother Author},
publisher = {Nother Publisher},
title = {In Some Other Proceedings},
maintitle = {Main Title of Other Proceedings},
year = {2001},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Test \autocite{inproc1} and \autocite{inproc2}
and \autocite{inproc3}
\printbibliography
\end{document}
これは通常の引用を反映するだけなので、短い引用に「eds.」は表示されません。bibmacro を少し変更することで「Eds.」を追加できますcite
。
\documentclass[]{scrartcl}
\usepackage[backend=biber,style=ext-authortitle-icomp, citexref=true]{biblatex}
\newbibmacro{cite:labelname}{%
\printnames{labelname}%
\iffieldequalstr{labelnamesource}{author}
{\setunit{\printdelim{authortypedelim}}%
\usebibmacro{authorstrg}}
{\iffieldequalstr{labelnamesource}{editor}
{\setunit{\printdelim{editortypedelim}}%
\usebibmacro{editor+othersstrg}}
{\iffieldequalstr{labelnamesource}{translator}
{\setunit{\printdelim{editortypedelim}}%
\usebibmacro{translator+othersstrg}}
{}}}}
\makeatletter
\renewbibmacro*{bbx:inxrefcite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\setunit{\compcitedelim}}
{\usebibmacro{cite:labelname}%
\setunit*{\printdelim{nametitledelim}}%
\savefield{namehash}{\cbx@lasthash}}%
\usebibmacro{cite:title}}}%
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\multicitedelim}}
\makeatother
\begin{filecontents}{\jobname.bib}
@incollection{inproc1,
author = {Test Author},
crossref = {proc},
pages = {1--10},
title = {Testing the Title},
}
@incollection{inproc2,
author = {Test Author},
crossref = {proc},
pages = {10--20},
title = {Testing the second Title},
}
@collection{proc,
editor = {Senor Editor and Senora Editora},
publisher = {Any Publisher},
title = {My Proceedings},
year = {2013},
}
@inproceedings{inproc3,
author = {Nother Author},
publisher = {Nother Publisher},
title = {In Some Other Proceedings},
maintitle = {Main Title of Other Proceedings},
year = {2001},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Test \autocite{inproc1} and \autocite{inproc2}
and \autocite{inproc3}
\printbibliography
\end{document}