我正在尝试将参考书目样式与 相匹配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
所有其他可能需要重新定义的字符串(如果使用它们),有compiler
、redactor
和reviser
许多其他角色。
\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}