这个问题和答案成为一个整体的一部分:
biblatex-musuos
我怎样才能引用从另一本书中摘录的次要引文。
例子
Jon Doe 写了一本书,并在其中引用了 Fred Bloggs。现在我读了 Doe 的书,想引用他对 Bloggs 的引用。所以我的书目条目必须是这样的
Bloggs,Fred:一本好旧书,1850 年,第 35 页。引自 Doe,John:一本糟糕的新书,2011 年,第 67 页。
Doe 的书不应在参考书目中单独列出。
我知道有一个bibstring
quotedin
包含“引用”(biblatex
手册第 159 页)但我不知道是否有(预定义的)方法来使用它......
更新
似乎没有预定义的方法,所以我决定userc
像这样使用交叉引用。这适用于参考书目,但不适用于引用命令。目前我手动创建“文内引用”。
如果有这样的宏就太好了
\QIautocite[<prenote a>][<postnote a>]{<author a>}[<prenote b>][<postnote b>]{<author b>}
扩展到上面给出的例子。
这是我的新代码,它为参考书目和“文内引用”提供了正确的结果,但后者不会自动……
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOKLET{autora,
title = {A nice old book},
userc={autorb},
author = {Fred Bloggs},
year = {1850},
}
@BOOKLET{autorb,
title = {A bad new book},
author = {Jon Doe},
year = {2011},
}
\end{filecontents}
\documentclass[ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes,blindtext}
\usepackage[%
bibstyle=authortitle,
citestyle=verbose-ibid,
]{biblatex}
\addbibresource{\jobname.bib}
\NewBibliographyString{bibcitedas}
\DefineBibliographyStrings{german}{%
bibcitedas = {{zitiert als}{zit. als}},
}
% Put the 'quoted in text' behind the bibentry.
\renewbibmacro*{finentry}{%
\ifbibliography{%
\iffieldundef{userc}{}{%
\newunit\bibstring{quotedin}\addspace\fullcite{\thefield{userc}}
}
}{}%
\finentry%
}
\begin{document}
\blindtext
\begin{quotation}
\blindtext\footnote{\cite[36]{autora}. Zit. nach \cite[89]{autorb}}
\end{quotation}
\blindtext\footnote{\cite[36]{autora}. Zit. nach \cite[89]{autorb}}
\printbibliography
\end{document}
示例 2
除了我对 Audrey 的回答的评论(嗨@Audrey。这个很好用:-)但还有一件小事...):
如果我使用quotecite
这样的命令
\quotecite[1]{reese}[5]{weinberg}
\quotecite[1]{reese}[5]{weinberg}
\pagebreak
\quotecite[1]{reese}[5]{weinberg}
\quotecite[1]{reese}[5]{weinberg}
脚注应该看起来像
1 Reese [完整引用],第 1 页。Zit. nach Weinberg [完整引用],第 65 页
2 Ebd.
———— 分页符 ————
3 Rese [简短引用],第 1 页。Zit nach Weinberg [简短引用],第 65 页
4 Ebd.
一切工作正常,除了脚注 3
3 Rese [简短引用],第 1 页。Zit nach Weinberg [满的引述],第 65 页
眼下
更新 2
由于似乎无法做出反应,autocite
我创建了一个新的普通命令
\DeclareMultiCiteCommand{\quoteciteplain}[\cbx@qcwrapperplain]{\cbx@quotecite}{\cbx@qcdelim}
\newrobustcmd{\cbx@qcwrapperplain}[1]{%
\global\toggletrue{cbx@isquote}%
#1%
\global\togglefalse{cbx@isquote}%
\global\togglefalse{cbx@iflastibid}%
\global\togglefalse{cbx@ifquoteepost}%
\global\togglefalse{cbx@ifquoterpost}}
答案1
某些类别可以帮助促进引用数据的输出和参考书目中的“引用者”条目的抑制。
您提议的“引用”引用命令可以通过 来定义\DeclareMultiCiteCommand
,其中分隔符可以使用quotedin
。借助etoolbox
,您可以通过这个新的引用命令收集所有引用数据,而不必完全编辑文件bib
。
下面的代码演示了这些想法,但解释了引用者在其他地方扮演主要参考角色的情况。仅“引用者”的书目条目包括引用的数据。当引用者有多个引用者时,引用条目将按引用顺序打印。仅引用者的条目将被抑制。所有其他条目均按正常方式处理。
感谢 Tobi 发现错误。
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[style=verbose-ibid,ibidpage=true]{biblatex}
\bibliography{biblatex-examples}
% Just for demonstration. Above options are necessary, including
% default and verbose-ibid tracking options: opcittracker=false,
% loccittracker=false, idemtracker=false, citetracker=context,
% ibidtracker=constrict and pagetracker=true.
\ExecuteBibliographyOptions{citepages=omit}
\NewBibliographyString{quotedfrom}
\NewBibliographyString{quotedon}
\DefineBibliographyStrings{german}{%
quotedfrom = {zit\adddotspace aus},
quotedon = {zit\adddotspace auf}}
\DeclareBibliographyCategory{quoter}
\DeclareBibliographyCategory{quotee}
\DeclareBibliographyCategory{primary}
\defbibheading{quoter}[Quoters]{\section*{#1}}
\defbibheading{quotee}[Quotees]{\section*{#1}}
\defbibheading{citedasprimary}[Bibliography as desired]{\section*{#1}}
\defbibcheck{citedasprimary}{% Suppress quoter-only entries
\ifboolexpr{ test {\ifcategory{quoter}}
and not test {\ifcategory{quotee}}
and not test {\ifcategory{primary}} }
{\skipentry}
{}}
\makeatletter
\newtoggle{cbx@isquote}% Current citation quotecite?
\newtoggle{cbx@iflastquote}% Last citation quotecite?
\newtoggle{cbx@fullquote}% Print a full quotecite?
\newtoggle{cbx@iflastibid}% Last quotecite ibid?
\newtoggle{cbx@ifquoteepost}% Ibid quotecite outputs quotee postnote?
\newtoggle{cbx@ifquoterpost}% Ibid quotecite outputs quoter postnote?
\renewbibmacro*{finentry}{% Add quoted-in data to quotee-only entries
\ifbibliography
{\ifboolexpr{ test {\ifcategory{quotee}}
and not test {\ifcategory{primary}} }
{\newunit%
\bibstring{quotedin}%
\addspace%
\global\toggletrue{cbx@isquote}%
\fullcite{\csuse{cbx@quoter@\thefield{entrykey}}}%
\global\togglefalse{cbx@isquote}}
{}}
{}%
\finentry}
\AtEveryCitekey{%
\iftoggle{cbx@isquote}
{}
{\addtocategory{primary}{\thefield{entrykey}}%
\global\togglefalse{cbx@iflastquote}}}
\newbibmacro*{cite:quotee}{%
\savefieldcs{postnote}{cbx@post}%
\ifboolexpr{ test {\ifciteseen} and not test {\iftoggle{cbx@fullquote}} }
{\iffieldundef{shorthand}
{\ifboolexpr{ not test {\iffirstonpage}
and test {\ifsamepage{\value{instcount}}{\value{instcount}-2}}
and test {\iftoggle{cbx@iflastquote}}
and test {\iffieldequalcs{entrykey}{cbx@lastquoteekey}} }
{\printtext[bibhyperlink]{\bibstring[\mkibid]{ibidem}}%
\iffieldequalcs{postnote}{cbx@lastquoteepost}
{\clearfield{postnote}}
{\global\toggletrue{cbx@ifquoteepost}}%
\global\toggletrue{cbx@iflastibid}}
{\usebibmacro{cite:short}}}
{\usebibmacro{cite:shorthand}}}
{\usebibmacro{cite:full}}%
\csxdef{cbx@lastquoteepost}{\csuse{cbx@post}}}
\newbibmacro*{cite:quoter}{%
\savefieldcs{postnote}{cbx@post}%
\ifboolexpr{ not test {\iftoggle{cbx@fullquote}}
and test {\iftoggle{cbx@iflastibid}}
and test {\iffieldequalcs{entrykey}{cbx@lastquoterkey}} }
{\iffieldequalcs{postnote}{cbx@lastquoterpost}
{\clearfield{postnote}}
{\global\toggletrue{cbx@ifquoterpost}}}
{\iftoggle{cbx@iflastibid}
{\quotedelim}
{}%
\global\togglefalse{cbx@iflastibid}%
\ifboolexpr{ test {\ifciteseen} and not test {\iftoggle{cbx@fullquote}} }
{\iffieldundef{shorthand}
{\usebibmacro{cite:short}}
{\usebibmacro{cite:shorthand}}}
{\usebibmacro{cite:full}}}%
\csxdef{cbx@lastquoterpost}{\csuse{cbx@post}}%
\global\togglefalse{cbx@ifquoteepost}}
\DeclareCiteCommand{\cbx@quotecite}
{\usebibmacro{prenote}}
{\ifnumless{\value{multicitecount}}{2}% <loopcode>
{\usebibmacro{citeindex}% Current entry is a quotee
\addtocategory{quotee}{\thefield{entrykey}}%
\xdef\cbx@quoteekey{\thefield{entrykey}}%
\usebibmacro{cite:quotee}%
\csxdef{cbx@lastquoteekey}{\thefield{entrykey}}}
{\addtocategory{quoter}{\thefield{entrykey}}% Current entry is a quoter
\xifinlistcs{\thefield{entrykey}}{cbx@quoterlist@\cbx@quoteekey}
{}
{\csxappto{cbx@quoter@\cbx@quoteekey}{\thefield{entrykey},}%
\listcsxadd{cbx@quoterlist@\cbx@quoteekey}{\thefield{entrykey}}}%
\usebibmacro{cite:quoter}%
\csxdef{cbx@lastquoterkey}{\thefield{entrykey}}}}
{\multicitedelim}
{\iftoggle{cbx@iflastibid}
{\iftoggle{cbx@ifquoteepost}
{\let\postnotedelim=\quoteepostdelim}
{\iftoggle{cbx@ifquoterpost}
{\let\postnotedelim=\quoterpostdelim}
{}}}
{}%
\usebibmacro{cite:postnote}%
\global\toggletrue{cbx@iflastquote}}
\DeclareMultiCiteCommand{\quotecite}
[\cbx@qcwrapper\relax\mkbibfootnote]
{\cbx@quotecite}
{\cbx@qcdelim}
\DeclareMultiCiteCommand{\fullquotecite}
[\cbx@qcwrapper\cbx@mkfullquote\mkbibfootnote]
{\cbx@quotecite}
{\cbx@qcdelim}
\DeclareMultiCiteCommand{\parenquotecite}
[\cbx@qcwrapper\relax\mkbibparens]
{\cbx@quotecite}
{\cbx@qcdelim}
\DeclareMultiCiteCommand{\plainquotecite}
[\cbx@qcwrapper\relax\relax]
{\cbx@quotecite}
{\cbx@qcdelim}
% Use first argument to override trackers, second to format
% the citation (e.g. \mkbibfootnote). The third is reserved
% for multicite output.
\newrobustcmd{\cbx@qcwrapper}[3]{%
\global\toggletrue{cbx@isquote}%
\global\togglefalse{cbx@fullquote}%
#1#2{#3}%
\global\togglefalse{cbx@isquote}%
\global\togglefalse{cbx@iflastibid}%
\global\togglefalse{cbx@ifquoteepost}%
\global\togglefalse{cbx@ifquoterpost}}
\newrobustcmd{\cbx@mkfullquote}{%
\AtNextCite{\citetrackerfalse}%
\toggletrue{cbx@fullquote}}
\newrobustcmd{\cbx@qcdelim}{%
\iftoggle{cbx@iflastibid}
{}
{\quotedelim}}
\newcommand*{\quoteepostdelim}{%
\addcomma\space\bibstring{quotedfrom}\space}
\newcommand*{\quoterpostdelim}{%
\addcomma\space\bibstring{quotedon}\space}
\newcommand*{\quotedelim}{%
\adddot\space\bibsentence\bibstring{quotedin}\space}
\makeatother
\begin{document}
\null\vfill\noindent
First primary cite.\footcite{augustine}
Same cite.\footcite{augustine}
Quoted-in cite.\quotecite[10--15]{reese}[5]{weinberg}
Same quoted-in cite.\quotecite[10--15]{reese}[5]{weinberg}
Same quoted-in cite, but different quotee
postnote.\quotecite[10--15]{reese}[10]{weinberg}
Same quoted-in cite, but different quoter
postnote.\quotecite(See)()[10--15]{reese}[11]{weinberg}
Same quoted-in cite, but different
postnotes.\quotecite[26--28]{reese}[5--10]{weinberg}
\pagebreak
Same quoted-in cite, but on next
page\quotecite(See)()[10--15]{reese}[11]{weinberg}.
Different quoted-in cite, both quotee and quoter cited
elsewhere as primary.\quotecite(See)()[10]{massa}[540]{augustine}
Same quotee, different quotee postnote and different
quoter.\quotecite[11]{massa}[540]{companion}
Primary cite, same as quotee (NB: ibidem not applied
here)\footcite{massa}
New quoted-in cite.\quotecite(See)()[20]{shore}[11]{springer}
Same quotee, but different quoter.\quotecite[20]{shore}[100]{iliad}
Same, but full quoted-in cite.\fullquotecite[20]{shore}[100]{iliad}
\pagebreak
\printbibliography[category=quoter,heading=quoter]
\printbibliography[category=quotee,heading=quotee]
\printbibliography[check=citedasprimary,heading=citedasprimary]
\end{document}
以下是结果文档第一页的引文:
第二页的引用:
最终参考书目:
关于要求扩展和改进原始答案的一些说明:
- 同上缩写。这个扩展并不简单;我们需要检查两个之前的引文,但现有的引文跟踪器只查看最后一个。我们可以通过手动跟踪引用的引文来解决这个问题,使用
biblatex
和的一些测试etoolbox
。这种方法的一个缺点是,使用同上引用的引文在某种程度上独立于biblatex
跟踪选项。在这里,我试图模仿默认和verbose-ibid
选项设置。 - 内联引用。
verbose-ibid
主要用于脚注中的引用,但可以通过改变中使用的包装器来定义引用的内联版本\DeclareMultiCiteCommand
。 - “完整”引文。这些也可以通过包装器定义,只要我们有一个附加标志来指示应使用 打印引文
cite:full
。