如何使用 biblatex-philosophy 重新格式化“eds”后缀?

如何使用 biblatex-philosophy 重新格式化“eds”后缀?

我正在尝试将参考书目样式与 相匹配biblatex-philosophy。我需要的多编辑作品格式如下: 目标

默认情况下,biblatex-philosophy输出philosophy-modern如下:

试图

代码如下:

\documentclass[11pt, parskip=false]{scrartcl}

% Bibliography preamble
\usepackage[giveninits=true,style=philosophy-modern, yearleft=true]{biblatex}
\addbibresource{testbib.bib}

\DeclareFieldFormat[online]{title}{#1}

\renewcommand{\postsep}{% Add comma to end of author section
\addcomma
\null\par\nobreak\vskip\postnamesep%
\hskip-\bibhang\ignorespaces}

\begin{document}
Sentence containing citation \parencite{example2018}.

\printbibliography
\end{document}

使用这个.bib文件:

@book{example2018,
Edition = {4},
Publisher = {Penguin},
Title = {All Aboard the Good Ship Merriweather},
date = {1964},
Editor = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}

如何才能将“(eds.)”中的括号和句号去掉,并按要求移至编辑部分的末尾?

深入了解biblatex之后,biblatex-philosophy我却一无所知,因为它看起来特别繁琐,超出了我的影响能力。

答案1

只要同一组作者不会同时担任一部作品的作者和另一部作品的编辑,下面的方法就可以很好地工作。如果要删除“eds”的点,则必须重新定义 中的 bibstring \DefineBibliographyStrings{english}。查看english.lbx所有其他可能需要重新定义的字符串(如果使用它们),有compilerredactorreviser许多其他角色。

\documentclass[11pt, parskip=false]{scrartcl}

% Bibliography preamble
\usepackage[giveninits=true,style=philosophy-modern, yearleft=true, uniquename=init]{biblatex}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{example2018,
Edition = {4},
Publisher = {Penguin},
Title = {All Aboard the Good Ship Merriweather},
date = {1964},
Editor = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\DeclareFieldFormat[online]{title}{#1}

\renewcommand{\postsep}{% Add comma to end of author section
\addcomma
\null\par\nobreak\vskip\postnamesep%
\hskip-\bibhang\ignorespaces}

\DefineBibliographyStrings{english}{%
  editor           = {ed},
  editors          = {eds},
}

\DeclareFieldFormat{editortype}{#1}
\DeclareDelimFormat{editortypedelim}{\addcomma\space}
\DeclareFieldFormat{translatortype}{#1}
\DeclareDelimFormat{translatortypedelim}{\addcomma\space}

\makeatletter
\renewbibmacro*{bbx:editor}[1]{%
  \ifboolexpr{%
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }%
  {\usebibmacro{bbx:dashcheck}%
     {}%
     {\printnames{editor}%
      \usebibmacro{bbx:savehash}%
      \setunit{\printdelim{editortypedelim}}%
      \usebibmacro{#1}%
      \clearname{editor}%
      \postsep}%
   \usebibmacro{date+extradate}}%
  {\global\undef\bbx@lasthash
   \usebibmacro{date+extradate}}}%

\renewbibmacro*{bbx:translator}[1]{%
  \ifboolexpr{%
    test \ifusetranslator
    and
    not test {\ifnameundef{translator}}
  }%
  {\usebibmacro{bbx:dashcheck}%
     {}%
     {\printnames{translator}%
      \usebibmacro{bbx:savehash}%
      \setunit{\printdelim{translatortypedelim}}%
      \usebibmacro{#1}%
      \clearname{translator}%
      \postsep}%
   \usebibmacro{date+extradate}}%
  {\global\undef\bbx@lasthash
   \usebibmacro{date+extradate}}}
\makeatother

\begin{document}
Sentence containing citation \parencite{example2018,sigfridsson,knuth:ct:a,knuth:ct:b}.

\printbibliography
\end{document}

在此处输入图片描述

多得多我们可以努力使上述内容对同一作者列表中的不同角色都是安全的。但这仍然没有考虑到排序。

\documentclass[australian, 11pt, parskip=false]{scrartcl}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[giveninits=true,style=philosophy-modern, yearleft=true, uniquename=init]{biblatex}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{example2018,
Edition = {4},
Publisher = {Penguin},
Title = {All Aboard the Good Ship Merriweather},
date = {1964},
Editor = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}
@book{example2019,
Publisher = {Penguin},
Title = {Another Ship},
date = {2017},
author = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}
@book{example2020,
Publisher = {Penguin},
Title = {Bnunb},
date = {1960},
author = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}
@book{example2021,
Publisher = {Penguin},
Title = {Znub},
date = {1961},
author = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}

@book{example2022,
Publisher = {Penguin},
Title = {Znub},
date = {2018},
author = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}


@book{example2023,
Publisher = {Penguin},
Title = {Znub},
date = {2023},
tramslator = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
editor = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}


@book{example2024,
Publisher = {Penguin},
Title = {Znub},
date = {2024},
translator = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
editor = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}

@book{example2025,
Publisher = {Penguin},
Title = {Znub},
date = {2025},
translator = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
editor = {Stewart, Bryce and Karl Popper and Samantha Elizabeth O'Grady},
Location = {London}}

@online{blogWithoutAuthor,
date = {2018},
title = {Historians in the News},
maintitle = {History Matters},
organization = {The University of Sydney},
url = {http://blogs.usyd.edu.au/historymatters/2018/02/historians_in_the_news_2018.html},
urldate = {2018-02-23}
}

@online{blogWithAuthor,
date = {2018},
title = {Historians in the News},
maintitle = {History Matters},
organization = {The University of Sydney},
url = {http://blogs.usyd.edu.au/historymatters/2018/02/historians_in_the_news_2018.html},
urldate = {2018-02-23},
author = {McDonnell, Mike}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\DeclareFieldFormat[online]{title}{#1}

\renewcommand{\postsep}{% Add comma to end of author section
\addcomma
\null\par\nobreak\vskip\postnamesep%
\hskip-\bibhang\ignorespaces}

\DefineBibliographyStrings{english}{%
  editor           = {ed},
  editors          = {eds},
}

\DeclareFieldFormat{editortype}{#1}
\DeclareDelimFormat{editortypedelim}{\addcomma\space}
\DeclareFieldFormat{translatortype}{#1}
\DeclareDelimFormat{translatortypedelim}{\addcomma\space}


\makeatletter
\newbibmacro*{editorstrg:gettempa}{%
  \iffieldundef{editortype}
    {\ifboolexpr{
       test {\ifnumgreater{\value{editor}}{1}}
       or
       test {\ifandothers{editor}}
     }
       {\def\abx@tempa{editors}}
       {\def\abx@tempa{editor}}}
    {\ifbibxstring{\thefield{editortype}}
       {\ifboolexpr{
          test {\ifnumgreater{\value{editor}}{1}}
          or
          test {\ifandothers{editor}}
        }
          {\edef\abx@tempa{\thefield{editortype}s}}
          {\edef\abx@tempa{\thefield{editortype}}}}
       {\edef\abx@tempa{\thefield{editortype}}}}}

\renewbibmacro*{editorstrg}{%
  \usebibmacro{editorstrg:gettempa}%
  \printtext[editortype]{%
    \ifbibxstring{\abx@tempa}
      {\bibstring{\abx@tempa}}
      {\abx@tempa}}}

\newbibmacro*{editor+othersstrg:gettempa}{%
  \iffieldundef{editortype}
    {\ifboolexpr{
       test {\ifnumgreater{\value{editor}}{1}}
       or
       test {\ifandothers{editor}}
     }
       {\def\abx@tempa{editors}}
       {\def\abx@tempa{editor}}}
    {\ifboolexpr{
       test {\ifnumgreater{\value{editor}}{1}}
       or
       test {\ifandothers{editor}}
     }
       {\edef\abx@tempa{\thefield{editortype}s}}
       {\edef\abx@tempa{\thefield{editortype}}}}%
  \let\abx@tempb=\empty
  \ifnamesequal{editor}{translator}
    {\appto\abx@tempa{tr}%
     \appto\abx@tempb{\clearname{translator}}}
    {}%
  \ifnamesequal{editor}{commentator}
    {\appto\abx@tempa{co}%
     \appto\abx@tempb{\clearname{commentator}}}
    {\ifnamesequal{editor}{annotator}
       {\appto\abx@tempa{an}%
        \appto\abx@tempb{\clearname{annotator}}}
       {}}%
  \ifnamesequal{editor}{introduction}
    {\appto\abx@tempa{in}%
     \appto\abx@tempb{\clearname{introduction}}}
    {\ifnamesequal{editor}{foreword}
       {\appto\abx@tempa{fo}%
        \appto\abx@tempb{\clearname{foreword}}}
       {\ifnamesequal{editor}{afterword}
          {\appto\abx@tempa{af}%
           \appto\abx@tempb{\clearname{afterword}}}
          {}}}}

\renewbibmacro*{editor+othersstrg}{%
  \usebibmacro{editor+othersstrg:gettempa}%
  \ifbibxstring{\abx@tempa}
    {\printtext[editortype]{\bibstring{\abx@tempa}}\abx@tempb}
    {\usebibmacro{editorstrg}}}

\newbibmacro*{translatorstrg:gettempa}{%
  \ifboolexpr{
    test {\ifnumgreater{\value{translator}}{1}}
    or
    test {\ifandothers{translator}}
  }
  {\def\abx@tempa{translators}}
  {\def\abx@tempa{translator}}}

\renewbibmacro*{translatorstrg}{%
  \usebibmacro{translatorstrg:gettempa}%
  \printtext[translatortype]{%
    \ifbibxstring{\abx@tempa}
      {\bibstring{\abx@tempa}}
      {\abx@tempa}}}

\newbibmacro*{translator+othersstrg:gettempa}{%
  \ifboolexpr{
    test {\ifnumgreater{\value{translator}}{1}}
    or
    test {\ifandothers{translator}}
  }
    {\def\abx@tempa{translators}}
    {\def\abx@tempa{translator}}%
  \ifnamesequal{translator}{commentator}
    {\appto\abx@tempa{co}%
     \clearname{commentator}}
    {\ifnamesequal{translator}{annotator}
       {\appto\abx@tempa{an}%
        \clearname{annotator}}
       {}}%
  \ifnamesequal{translator}{introduction}
    {\appto\abx@tempa{in}%
     \clearname{introduction}}
    {\ifnamesequal{translator}{foreword}
       {\appto\abx@tempa{fo}%
        \clearname{foreword}}
       {\ifnamesequal{translator}{afterword}
          {\appto\abx@tempa{af}%
           \clearname{afterword}}
          {}}}}

\renewbibmacro*{translator+othersstrg}{%
  \usebibmacro{translator+othersstrg:gettempa}%
  \printtext[translatortype]{\bibstring{\abx@tempa}}}

\renewbibmacro*{bbx:dashcheck}[2]{%
  \ifboolexpr{
    test {\iffieldequals{fullhash}{\bbx@lasthash}}
    and
    not test \iffirstonpage
    and
    (
       not bool {bbx@inset}
       or
       test {\iffieldequalstr{entrysetcount}{1}}
    )
    and test {\ifcsstrequal{bbx@thisnametype}{bbx@lastnametype}}
  }
    {#1}
    {#2}}

\renewbibmacro*{author}{%
  \global\def\bbx@thisnametype{author}%
  \ifboolexpr{
    test \ifuseauthor
    and
    not test {\ifnameundef{author}}
  }
  {\usebibmacro{bbx:dashcheck}
     {}%
     {\usebibmacro{bbx:savehash}%
      \printnames{author}%
      \iffieldundef{nameaddon}
        {}%
        {\setunit{\addspace}%
         \printfield{nameaddon}}%
      \iffieldundef{authortype}
        {}%
        {\usebibmacro{authorstrg}%
         \printtext{\addcomma\space}}
      \global\def\bbx@lastnametype{author}%
      \postsep}%
   \usebibmacro{date+extradate}}%
    {\global\undef\bbx@lasthash
     \global\undef\bbx@lastnametype
     \usebibmacro{date+extradate}}}

\renewbibmacro*{bbx:editor}[1]{%
  \begingroup
  \usebibmacro{#1:gettempa}%
  \global\edef\bbx@thisnametype{\abx@tempa}%
  \endgroup
  \ifboolexpr{%
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }%
  {\usebibmacro{bbx:dashcheck}%
     {}%
     {\printnames{editor}%
      \usebibmacro{bbx:savehash}%
      \setunit{\printdelim{editortypedelim}}%
      \usebibmacro{#1}%
      \global\edef\bbx@lastnametype{\abx@tempa}%
      \global\edef\bbx@cleanup{\abx@tempb}%
      \postsep}%
   \clearname{editor}%
   \bbx@cleanup
   \usebibmacro{date+extradate}}%
  {\global\undef\bbx@lasthash
   \global\undef\bbx@lastnametype
   \usebibmacro{date+extradate}}}%

\renewbibmacro*{bbx:translator}[1]{%
  \begingroup
  \usebibmacro{#1:gettempa}%
  \global\edef\bbx@thisnametype{\abx@tempa}%
  \endgroup
  \ifboolexpr{%
    test \ifusetranslator
    and
    not test {\ifnameundef{translator}}
  }%
  {\usebibmacro{bbx:dashcheck}%
     {}%
     {\printnames{translator}%
      \usebibmacro{bbx:savehash}%
      \setunit{\printdelim{translatortypedelim}}%
      \usebibmacro{#1}%
      \global\edef\bbx@lastnametype{\abx@tempa}%
      \global\edef\bbx@cleanup{\abx@tempb}%
      \postsep}%
   \clearname{translator}%
   \bbx@cleanup
   \usebibmacro{date+extradate}}%
  {\global\undef\bbx@lasthash
   \global\undef\bbx@lastnametype
   \usebibmacro{date+extradate}}}
\makeatother


\begin{document}
Sentence containing citation \parencite{example2018, sigfridsson, knuth:ct:a, knuth:ct:b, example2019, example2020, example2021, example2022, example2023, example2024, example2025}.

\parencite{blogWithoutAuthor, blogWithAuthor, westfahl:frontier, westfahl:space}

\printbibliography
\end{document}

在此处输入图片描述

相关内容