biblatex:处理二次(“引用”)引文

biblatex:处理二次(“引用”)引文

这个问题和答案成为一个整体的一部分:
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

相关内容