如何在参考书目中以正确的顺序使用年份后的预定义小写字母(例如 1990f [1969])

如何在参考书目中以正确的顺序使用年份后的预定义小写字母(例如 1990f [1969])

我想在我的文本和参考书目中使用一位作者的文集的“官方”小写字母(例如 1990f [1969]),即使我没有引用同一年的所有其他标题(1990a、1990b 等)。

但是,如果我直接在 bibtex 条目中更改年份,参考书目中的顺序就会错误。有没有办法解决这个问题(即使在方括号中再添加一个年份来显示死后出版的书名的最初写作时间)?

顺便说一句,但不太重要,如果我使用标题的官方缩写(例如 1990),但收集的作品版本来自不同的年份(例如 1999),我该如何在 bibtex 条目中实现这一点(我的解决方案是将那一年放在“版本”下,这是不好的)。

如果有人找到解决方案那就太好了,找不到类似的问题。

在此处输入图片描述

这是一个最小的工作示例

\documentclass[12pt,a4paper]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\usepackage[natbib=true,backend=biber,
style=ext-authoryear-iecomp]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}

\begin{filecontents}{example.bib}
@InCollection{Fromm.1947a,
  author    = {Erich Fromm},
  booktitle = {Erich Fromm Gesamtausgabe},
  title     = {Psychoanalyse und Ethik},
  year      = {1947a},
  address   = {Stuttgart},
  edition   = {1999},
  editor    = {Rainer Funk},
  pages     = {1-158},
  volume    = {II},
}

@InCollection{Fromm.1955a,
  author    = {Erich Fromm},
  title     = {Wege aus einer kranken Gesellschaft},
  booktitle = {Erich Fromm Gesamtausgabe},
  year      = {1955a},
  editor    = {Rainer Funk},
  volume    = {IV},
  pages     = {1-254},
  address   = {Stuttgart},
  edition   = {1999},
}

@InCollection{Fromm.1990f,
  author    = {Erich Fromm},
  booktitle = {Erich Fromm Gesamtausgabe},
  title     = {Die dialektische Revision der Psychoanalyse},
  year      = {1990f [1969]},
  address   = {Stuttgart},
  edition   = {1999},
  editor    = {Rainer Funk},
  pages     = {19-72},
  volume    = {XII},
}

@InCollection{Fromm.1991d,
  author    = {Erich Fromm},
  booktitle = {Erich Fromm Gesamtausgabe},
  title     = {Die dialektische Revision der Psychoanalyse},
  year      = {1991d [1974]},
  address   = {Stuttgart},
  edition   = {1999},
  editor    = {Rainer Funk},
  pages     = {237-258},
  volume    = {XII},
}
\end{filecontents}

\addbibresource{example.bib}

\begin{document}

\cite{Fromm.1947a} \cite{Fromm.1955a} \cite{Fromm.1990f} \cite{Fromm.1991d}

\printbibliography

\end{document}

编辑附录:假设我有另一个可以正常工作并自动生成额外日期的 bibresource。有没有办法在我的 example.bib 中只包含预定义的额外日期,而在我的 citavi.bib 中不包含?

\begin{filecontents}{citavi.bib}
@article{Hacker-Wright.2009a,
 author = {Hacker-Wright, John},
 year = {2009},
 title = {What is Natural About Foots Ethical Naturalism?},
 pages = {308--321},
 volume = {22},
 number = {3},
 journal = {Ration (New Series)}
}
@article{Hacker-Wright.2009b,
 author = {Hacker-Wright, John},
 year = {2009},
 title = {Human Nature, Personhood, and Ethical Naturalism},
 pages = {413--427},
 volume = {84},
 number = {3},
 journal = {Philosophy}
}
@article{Lott.2012,
 author = {Lott, Micah},
 year = {2012},
 title = {Have Elephant Seals Refuted Aristotle? Nature, Function, and Moral Goodness},
 pages = {353--375},
 volume = {9},
 number = {3},
 journal = {Journal of Moral Philosophy},
}
@article{Lott.2012b,
 author = {Lott, Micah},
 year = {2012},
 title = {Moral Virtue as Knowledge of Human Form},
 pages = {407--431},
 volume = {38},
 number = {3},
 journal = {Social Theory and Practice},
}
\end{filecontents}
\addbibresource{example.bib} %(or: \addbibresource{\jobresource.bib})
\addbibresource{citavi.bib}
\begin{document}
\autocite{Fromm.1947a}
\autocite{Fromm.1955a}
\autocite{Fromm.1990f}
\autocite{Fromm.1991d}
\autocite{Hacker-Wright.2009a}
\autocite{Hacker-Wright.2009b}
\autocite{Lott.2012,Lott.2012b}
\printbibliography
\end{document}

编辑 2:如果实际上引用了更多同一年份的出版物,会发生什么情况?例如以下条目:

@InCollection{Fromm.1955b,
  author            = {Erich Fromm},
  booktitle         = {Erich Fromm Gesamtausgabe},
  title             = {Die Auswirkungen eines triebtheoretischen \frqq Radikalismus\flqq\ auf den Menschen. Eine Antwort auf Herbert Marcuse},
  year              = {1955},
  officialextradate = {2},
  editor            = {Rainer Funk}, 
  editiondate       = {1999},
  volume            = {VIII},
  address           = {Stuttgart},
  publisher         = {DVA},     
  pages             = {113-120},
  options           = {officialextradate,labeldateparts=false},
}
@InCollection{Fromm.1955c,
  author            = {Erich Fromm},
  booktitle         = {Erich Fromm Gesamtausgabe},
  title             = {Eine Erwiderung auf Herbert Marcuse},
  year              = {1955},
  officialextradate = {3},
  editor            = {Rainer Funk}, 
  editiondate       = {1999},
  volume            = {VII},
  address           = {Stuttgart},
  publisher         = {DVA},     
  pages             = {123-124},
  options           = {officialextradate,labeldateparts=false},
}

\autocite{Fromm.1955a,Fromm.1955b,Fromm.1955c}

答案1

我以前从未见过使用正式extradate字母的引用(我只见过extradate根据特定参考书目中引用的作品计算消歧字母的文献),但这里有一种方法可以实现这一点。

首先,你需要让你的输入更易于机器阅读。我决定拆分

  year      = {1990f [1969]},
  edition   = {1999},

进入组件

  year              = {1990},
  officialextradate = {6},
  origyear          = {1969},
  editiondate       = {1999},
  options           = {officialextradate,labeldateparts=false},

其中officialextradateeditiondate是我们需要用.dbx数据模型声明的新字段。

officialextradate,labeldateparts=false所有引用“官方”信件的条目都需要这两个选项extradate。这些选项告诉 Biber 忽略这些条目进行extradate计算,并告诉我们的代码改用officialextradate

如果officialextradate设置了选项,我们只需注入officialextradateextradate由于我们必须完全禁用labelyear计算,我们通过定义labeldatesource并稍微弄乱一些内部结构来恢复它,以恢复行为,就像我们没有设置 一样labeldateparts=false。如果可用,我们还会按信息排序officialextradate。然后只需确保在适当的情况下打印origdate和。其他一切都可以通过已经存在的设施来处理。editiondatebiblatex

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\usepackage{csquotes}

\begin{filecontents}{moredates.dbx}
\ProvidesFile{moredates.dbx}[2020/12/13 more dates for biblatex]

\DeclareDatamodelFields[type=field, datatype=integer]{
  officialextradate}

\DeclareDatamodelFields[type=field, datatype=date, skipout]{
  editiondate}

\DeclareDatamodelEntryfields{
  officialextradate,
  editionday,
  editionendday,
  editionendhour,
  editionendminute,
  editionendmonth,
  editionendseason,
  editionendsecond,
  editionendtimezone,
  editionendyear,
  editionhour,
  editionminute,
  editionmonth,
  editionseason,
  editionsecond,
  editiontimezone,
  editionyear,
}
\end{filecontents}

\usepackage[natbib=true,backend=biber, datamodel=moredates,
  style=ext-authoryear-iecomp]{biblatex}
\usepackage{hyperref}

\newtoggle{bbx:officialextradate}
\DeclareEntryOption[boolean]{officialextradate}[true]{%
  \settoggle{bbx:officialextradate}{#1}}

% get rid of the extradate calculated by Biber
% and inject officialextradate as extradate
\makeatletter
\AtDataInput{%
  \iftoggle{bbx:officialextradate}
    {\csxappto\blx@bbl@data{%
       \def\noexpand\abx@field@labeldatesource{}%
       \let\expandafter\noexpand\csname abx@field@extradate\endcsname
         \expandafter\noexpand\csname abx@field@officialextradate\endcsname}}
    {}%
}

\def\blx@imc@iflabeldateisdate{%
  \iffieldundef{labeldatesource}
    {\@secondoftwo}
    {\iffieldequalstr{labeldatesource}{}
       {\@firstoftwo}
       {\iffieldequalstr{labeldatesource}{year}}}}
\makeatother

\DeclareFieldFormat{origdate}{\mkbibbrackets{#1}}

\makeatletter
\renewbibmacro*{date+extradate}{%
  \iffieldundef{labelyear}
    {}
    {\printtext[\blx@delimcontext labeldate]{%
       \iflabeldateisdate
         {\printdateextra}
         {\printlabeldateextra}%
       \setunit*{\addspace}%
       \printorigdate}}}
\makeatother

\renewbibmacro*{date}{%
  \usebibmacro{bbx:ifmergeddate}
    {\printeditiondate}
    {\printdate}}

\renewbibmacro*{issue+date}{%
  \ifboolexpr{test {\usebibmacro{bbx:ifmergeddate}}
              and test {\iffieldundef{editionyear}}
              and test {\iffieldundef{issue}}}
    {}
    {\printtext[parens]{%
       \printfield{issue}%
       \setunit*{\addspace}%
       \usebibmacro{bbx:ifmergeddate}
         {\printeditiondate}
         {\printdate}}}%
  \newunit}

\DeclareLabeldate{%
  \field{date}
  \field{year}
  \field{eventdate}
  \field{urldate}
  \literal{nodate}
}

\DeclareSortingTemplate{nyt}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort{
    \field{sortname}
    \field{author}
    \field{editor}
    \field{translator}
    \field{sorttitle}
    \field{title}
  }
  \sort{
    \field{sortyear}
    \field{year}
  }
  \sort{
    \field{officialextradate}
    \literal{9999}
  }
  \sort{
    \field{sorttitle}
    \field{title}
  }
  \sort{
    \field{volume}
    \literal{0}
  }
}

\begin{filecontents}{\jobname.bib}
@InCollection{Fromm.1947a,
  author            = {Erich Fromm},
  booktitle         = {Erich Fromm Gesamtausgabe},
  title             = {Psychoanalyse und Ethik},
  year              = {1947},
  officialextradate = {1},
  address           = {Stuttgart},
  editiondate       = {1999},
  editor            = {Rainer Funk},
  pages             = {1-158},
  volume            = {II},
  options           = {officialextradate,labeldateparts=false},
}
@InCollection{Fromm.1955a,
  author            = {Erich Fromm},
  title             = {Wege aus einer kranken Gesellschaft},
  booktitle         = {Erich Fromm Gesamtausgabe},
  year              = {1955},
  officialextradate = {1},
  editor            = {Rainer Funk},
  volume            = {IV},
  pages             = {1-254},
  address           = {Stuttgart},
  editiondate       = {1999},
  options           = {officialextradate,labeldateparts=false},
}
@InCollection{Fromm.1990f,
  author            = {Erich Fromm},
  booktitle         = {Erich Fromm Gesamtausgabe},
  title             = {Die dialektische Revision der Psychoanalyse},
  year              = {1990},
  officialextradate = {6},
  origyear          = {1969},
  address           = {Stuttgart},
  editiondate       = {1999},
  editor            = {Rainer Funk},      
  pages             = {19-72},
  volume            = {XII},
  options           = {officialextradate,labeldateparts=false},
}
@InCollection{Fromm.1991d,
  author            = {Erich Fromm},
  booktitle         = {Erich Fromm Gesamtausgabe},
  title             = {Die dialektische Revision der Psychoanalyse},
  year              = {1991},
  officialextradate = {4},
  origyear          = {1974},
  address           = {Stuttgart},
  editiondate       = {1999},
  editor            = {Rainer Funk},
  pages             = {237-258},
  volume            = {XII},
  options           = {officialextradate,labeldateparts=false},
}
@article{Hacker-Wright.2009a,
  author  = {Hacker-Wright, John},
  year    = {2009},
  title   = {What is Natural About Foots Ethical Naturalism?},
  pages   = {308--321},
  volume  = {22},
  number  = {3},
  journal = {Ration (New Series)},
}
@article{Hacker-Wright.2009b,
  author  = {Hacker-Wright, John},
  year    = {2009},
  title   = {Human Nature, Personhood, and Ethical Naturalism},
  pages   = {413--427},
  volume  = {84},
  number  = {3},
  journal = {Philosophy},
}
@article{Lott.2012,
  author  = {Lott, Micah},
  year    = {2012},
  title   = {Have Elephant Seals Refuted Aristotle?
             Nature, Function, and Moral Goodness},
  pages   = {353--375},
  volume  = {9},
  number  = {3},
  journal = {Journal of Moral Philosophy},
}
@article{Lott.2012b,
  author  = {Lott, Micah},
  year    = {2012},
  title   = {Moral Virtue as Knowledge of Human Form},
  pages   = {407--431},
  volume  = {38},
  number  = {3},
  journal = {Social Theory and Practice},
}
@InCollection{Fromm.1955b,
  author            = {Erich Fromm},
  booktitle         = {Erich Fromm Gesamtausgabe},
  title             = {Die Auswirkungen eines triebtheoretischen
                       \frqq Radikalismus\flqq\ auf den Menschen.
                       Eine Antwort auf Herbert Marcuse},
  year              = {1955},
  officialextradate = {2},
  editor            = {Rainer Funk}, 
  editiondate       = {1999},
  volume            = {VIII},
  address           = {Stuttgart},
  publisher         = {DVA},     
  pages             = {113-120},
  options           = {officialextradate,labeldateparts=false},
}
@InCollection{Fromm.1955c,
  author            = {Erich Fromm},
  booktitle         = {Erich Fromm Gesamtausgabe},
  title             = {Eine Erwiderung auf Herbert Marcuse},
  year              = {1955},
  officialextradate = {3},
  editor            = {Rainer Funk}, 
  editiondate       = {1999},
  volume            = {VII},
  address           = {Stuttgart},
  publisher         = {DVA},     
  pages             = {123-124},
  options           = {officialextradate,labeldateparts=false},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\autocite{Fromm.1947a}
\autocite{Fromm.1955a}
\autocite{Fromm.1990f}
\autocite{Fromm.1991d}

\autocite{Hacker-Wright.2009a}
\autocite{Hacker-Wright.2009b}
\autocite{Lott.2012,Lott.2012b}

\autocite{Fromm.1955a,Fromm.1955b,Fromm.1955c}

\printbibliography
\end{document}

弗洛姆,埃里希(1947a)。 “精神分析与伦理”。收录于:埃里希·弗洛姆全集。人力资源由 Rainer Funk 创作。屋宇署二.斯图加特,1999,页 1-158。

相关内容