biblatex:relatedtype={bytranslator} 与 @article 和 @incollection 无法按预期协同工作

biblatex:relatedtype={bytranslator} 与 @article 和 @incollection 无法按预期协同工作

昨天我问过如何将某部作品的译文以“由...翻译为...”的形式纳入参考书目。我被告知要使用字段related={<key>}relatedtype={bytranslator}。起初,这对我来说效果很好。但后来我意识到它只对正确起作用@book,而对@article或不起作用@incollection。例如,以下@incollection及其翻译是@article

德里达,雅克(2001)。 “可怕的事件导致某些可能性不大”。在:事情太糟糕,可能吗?巴黎:L'Harmattan,第 79-112 页。

德里达,雅克 (2007)。“说出事件的某种不可能的可能性”。吉拉·沃克译。在:批判性探究33.2,第 441-461 页。

将两者结合起来relatedtype={bytranslator}产生以下不完整的条目:

德里达,雅克(2001)。 “可怕的事件导致某些可能性不大”。在:事情太糟糕,可能吗?巴黎:L'Harmattan,第 79–112 页。吉拉·沃克 (Gila Walker) 译为“说出事件的某种不可能的可能性” (2007 年)。

缺少有关该译文刊登的期刊和期刊号的信息。也就是说,该条目应为(我认为):

德里达,雅克(2001)。 “可怕的事件导致某些可能性不大”。在:事情太糟糕,可能吗?巴黎:L'Harmattan,第 79–112 页。吉拉·沃克 (Gila Walker) 译为“说出事件的某种不可能的可能性”。在:批判性探究 33.2(2007),第441-461页。

这是一个简单的例子:

\documentclass[12pt]{article}

\usepackage{filecontents}

\begin{filecontents}{biblio.bib}
@incollection{Derrida2001,
author = {Derrida, Jacques},
title = {Une certaine possibilit\'{e} impossible de dire l'\'{e}v\'{e}nement},
location = {Paris},
publisher = {L'Harmattan},
year = {2001},
pages = {79-112},
booktitle = {Dire l'\'{e}v\'{e}nement, est-ce possible?},
related = {Derrida2007},
relatedtype = {bytranslator},
}
@article{Derrida2007,
author = {Derrida, Jacques},
translator = {Walker, Gila},
title = {A certain impossible possibility of saying the event},
journaltitle = {Critical Inquiry},
volume = {33},
number = {2},
year = {2007},
pages = {441-461},
}

\end{filecontents}

\usepackage[style=authoryear,abbreviate=false]{biblatex}
\addbibresource{biblio.bib}

\begin{document}

Citing a text by \textcite{Derrida2001}.

\printbibliography

\end{document}

当我切换translatorrelatedrelatedtype字段时(错误地)将@incollection翻译为@article,也会出现类似的截断。而不是

德里达,雅克 (2007)。“说出事件的某种不可能的可能性”。在:批判性探究33.2,第 441-461 页。吉拉·沃克 (Gila Walker) 将其译为“可怕的事件中不可能出现的可能性”。在:事情太糟糕,可能吗?(巴黎:L'Harmattan,2001 年)。

我明白了

德里达,雅克 (2007)。“说出事件的某种不可能的可能性”。在:批判性探究33.2,第 441-461 页。吉拉·沃克 (Gila Walker) 译作“某种不可能的可能性”(巴黎:L'Harmattan,2001 年)。

@incollection也就是说,缺少出现该书的书名。

这是一个错误吗?如果是,有办法解决吗?

在此先感谢您的帮助!

答案1

默认related:bytranslator宏只适用于@books 和类似的条目类型(我认为)。为了使其适用于@in...类型,我们需要稍微修改一下宏。

对于每个需要更多输出的条目类型,我们都会检查该类型并打印所需的信息(该代码取自standard.bbx)。

\makeatletter
\newbibmacro*{related:bytranslator}[1]{%
  \entrydata{#1}{%
    \renewbibmacro*{name:hook}[1]{%
      \ifnumequal{\value{listcount}}{1}
        {\begingroup
         \mkrelatedstring%
         \lbx@initnamehook{#1}%
         \endgroup}
        {}}%
    \printnames[bytranslator]{translator}%
    \clearname{translator}%
    \setunit*{\addspace\bibstring[\mkrelatedstring]{astitle}\space}%
    \usebibmacro{title}%
    \ifentrytype{article}
      {\usebibmacro{in:}%
       \usebibmacro{journal+issuetitle}}
      {}
    \ifentrytype{inbook}
      {\usebibmacro{in:}%
       \usebibmacro{bybookauthor}%
       \newunit\newblock
       \usebibmacro{maintitle+booktitle}%
       \newunit\newblock
       \usebibmacro{byeditor+others}%
       \newunit\newblock
       \printfield{edition}}
      {}
    \ifentrytype{incollection}
      {\usebibmacro{in:}%
       \usebibmacro{maintitle+booktitle}%
       \newunit\newblock
       \usebibmacro{byeditor+others}%
       \newunit\newblock
       \printfield{edition}%
       \newunit
       \iffieldundef{maintitle}
         {\printfield{volume}%
          \printfield{part}}
         {}}
      {}
    \ifentrytype{inproceedings}
      {\usebibmacro{in:}%
       \usebibmacro{maintitle+booktitle}%
       \newunit\newblock
       \usebibmacro{event+venue+date}%
       \newunit\newblock
       \usebibmacro{byeditor+others}%
       \newunit\newblock
       \iffieldundef{maintitle}
         {\printfield{volume}%
          \printfield{part}}
         {}}
      {}
    \setunit{\addspace}%
    \printtext[parens]{%
      \printlist{location}%
      \iflistundef{publisher}
        {\setunit*{\addcomma\space}}
        {\setunit*{\addcolon\space}}%
      \printlist{publisher}%
      \setunit*{\addcomma\space}%
      \printdate}
      \newunit\newblock
      \printfield{note}%
      \newunit\newblock
      \printfield{chapter}%
      \setunit{\bibpagespunct}%
      \printfield{pages}}}
\makeatother

平均能量损失

\documentclass[12pt]{article}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@incollection{Derrida2001,
author = {Derrida, Jacques},
title = {Une certaine possibilit\'{e} impossible de dire l'\'{e}v\'{e}nement},
location = {Paris},
publisher = {L'Harmattan},
year = {2001},
pages = {79-112},
booktitle = {Dire l'\'{e}v\'{e}nement, est-ce possible?},
related = {Derrida2007},
relatedtype = {bytranslator},
}
@article{Derrida2007,
author = {Derrida, Jacques},
title = {A certain impossible possibility of saying the event},
journaltitle = {Critical Inquiry},
translator = {Walker, Gila},
volume = {33},
number = {2},
year = {2007},
pages = {441-461},
}

\end{filecontents}

\usepackage[style=authoryear,abbreviate=false]{biblatex}
\addbibresource{\jobname.bib}
\makeatletter
\newbibmacro*{related:bytranslator}[1]{%
  \entrydata{#1}{%
    \renewbibmacro*{name:hook}[1]{%
      \ifnumequal{\value{listcount}}{1}
        {\begingroup
         \mkrelatedstring%
         \lbx@initnamehook{#1}%
         \endgroup}
        {}}%
    \printnames[bytranslator]{translator}%
    \clearname{translator}%
    \setunit*{\addspace\bibstring[\mkrelatedstring]{astitle}\space}%
    \usebibmacro{title}%
    \ifentrytype{article}
      {\usebibmacro{in:}%
       \usebibmacro{journal+issuetitle}}
      {}
    \ifentrytype{inbook}
      {\usebibmacro{in:}%
       \usebibmacro{bybookauthor}%
       \newunit\newblock
       \usebibmacro{maintitle+booktitle}%
       \newunit\newblock
       \usebibmacro{byeditor+others}%
       \newunit\newblock
       \printfield{edition}}
      {}
    \ifentrytype{incollection}
      {\usebibmacro{in:}%
       \usebibmacro{maintitle+booktitle}%
       \newunit\newblock
       \usebibmacro{byeditor+others}%
       \newunit\newblock
       \printfield{edition}%
       \newunit
       \iffieldundef{maintitle}
         {\printfield{volume}%
          \printfield{part}}
         {}}
      {}
    \ifentrytype{inproceedings}
      {\usebibmacro{in:}%
       \usebibmacro{maintitle+booktitle}%
       \newunit\newblock
       \usebibmacro{event+venue+date}%
       \newunit\newblock
       \usebibmacro{byeditor+others}%
       \newunit\newblock
       \iffieldundef{maintitle}
         {\printfield{volume}%
          \printfield{part}}
         {}}
      {}
    \setunit{\addspace}%
    \printtext[parens]{%
      \printlist{location}%
      \iflistundef{publisher}
        {\setunit*{\addcomma\space}}
        {\setunit*{\addcolon\space}}%
      \printlist{publisher}%
      \setunit*{\addcomma\space}%
      \printdate}
      \newunit\newblock
      \printfield{note}%
      \newunit\newblock
      \printfield{chapter}%
      \setunit{\bibpagespunct}%
      \printfield{pages}}}
\makeatother
\begin{document}

Citing a text by \textcite{Derrida2001}.

\printbibliography

\end{document}

在此处输入图片描述

这可能不适用于所有情况,因此可能需要针对特殊情况进行一些修改。

相关内容