如何使用 biblatex 在每次编辑后获取 (Hrsg.)

如何使用 biblatex 在每次编辑后获取 (Hrsg.)

我需要使用面向德国 DIN1505 的引用样式(请参阅链接了解说明https://de.wikipedia.org/wiki/DIN_1505-2#Aufbau_eines_Zitates抱歉,只有德语版本)。

您可以在这里找到一种书内格式的示例:

施密特,克尔斯滕;海曼,伯恩哈德; Zhou, Ling: 配送质量:仅限期限选择。引自:Ziems, Dietrich (Hrsg.) ;诺伊曼,加比(Hrsg.);因德弗特,卡尔 (Hrsg.) ;申克,迈克尔 (Hrsg.) ;沃舍尔(Wäscher),格哈德(Gerhard)(Hrsg.);马格德堡大学 (Veranst.): 物流质量专业会议 (10. 马格德堡物流会议“来自技术和经济视角的物流”马格德堡 2004 年 11 月 18 日至 19 日)。马格德堡:LOGiSCH,2004,第 51-66 页

您可以注意到,每位编辑的名字后面都有一个缩写(Hrsg.)(Hrsg. = 德语中的 Herausgeber/Editor)。

我理解以下命令定义编辑器字符串:

\DefineBibliographyStrings{german}{
    byeditor = {(Hrsg\adddot)},    
    editor   = {(Hrsg\adddot)}
}

使用 biblatex 打印编辑器应该是:

\renewbibmacro*{editor+others}{
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames{editor}%
     \setunit{\space}%
     \usebibmacro{editor+othersstrg}%
     \clearname{editor}}
{}
}

我该如何修改宏,即每次编辑后打印“(Hrsg.)”?我真的很喜欢 biblatex,但有时它太复杂了,所以感谢您对特定格式主题的评论。

答案1

最简单的方法可能是直接在名称格式中插入编辑器字符串。为此,我们必须复制所有相关的名称格式代码,并对其进行修改,使其附加编辑器字符串。

\newrobustcmd*{\editorsep}{\addspace}
\newrobustcmd*{\editorwrap}{\mkbibparens}

\DeclareNameFormat{family-given-ed}{%
  \ifgiveninits
    {\usebibmacro{name:family-given}
      {\namepartfamily}
      {\namepartgiveni}
      {\namepartprefix}
      {\namepartsuffix}}
    {\usebibmacro{name:family-given}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}}%
  \editorsep%
  \editorwrap{%
     \iffieldundef{editortype}
       {\bibstring{editor}}
       {\ifbibxstring{\thefield{editortype}}
          {\bibstring{\thefield{editortype}}}
          {\thefield{editortype}}}}%
  \usebibmacro{name:andothers}}

以下是格式family-given-ed的详细副本,仅添加了从 开始的最后几行。biblatex.deffamily-given\editorsep

然后我们将此格式用于编辑

\DeclareNameAlias{editor}{family-given-ed}

最后,我们需要摆脱在

\renewbibmacro*{editor}{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames{editor}%
     \clearname{editor}}
    {}}

\renewbibmacro*{editor+others}{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames{editor}%
     \clearname{editor}}
    {}}

完毕!

数学家协会

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@collection{Katmis2016,
  editor       = {Katmis, Ferhat and Lauter, Valeria and Nogueira, Flavio S.},
  title        = {Alternative Modernities},
  date         = 2001,
  publisher    = {Duke University Press},
  location     = {Durham and London},
}
\end{filecontents*}

\usepackage[backend=biber, style=authoryear]{biblatex}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\newrobustcmd*{\editorsep}{\addspace}
\newrobustcmd*{\editorwrap}{\mkbibparens}

\DeclareNameFormat{family-given-ed}{%
  \ifgiveninits
    {\usebibmacro{name:family-given}
      {\namepartfamily}
      {\namepartgiveni}
      {\namepartprefix}
      {\namepartsuffix}}
    {\usebibmacro{name:family-given}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}}%
  \editorsep%
  \editorwrap{%
     \iffieldundef{editortype}
       {\bibstring{editor}}
       {\ifbibxstring{\thefield{editortype}}
          {\bibstring{\thefield{editortype}}}
          {\thefield{editortype}}}}%
  \usebibmacro{name:andothers}}

\DeclareNameAlias{editor}{family-given-ed}

\renewbibmacro*{editor}{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames{editor}%
     \clearname{editor}}
    {}}

\renewbibmacro*{editor+others}{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames{editor}%
     \clearname{editor}}
    {}}

\begin{document}
    Whatever \cite{Katmis2016,gaonkar}
\printbibliography
\end{document}

然后给出

Gaonkar,Dilip Parameshwar(编辑)。另类现代性。达勒姆和伦敦:杜克大学出版社。ISBN:0-822-32714-7。

Katmis, Ferhat (编辑)、Lauter, Valeria (编辑) 和 Nogueira, Flavio S. (编辑)。另类现代性。达勒姆和伦敦:杜克大学出版社。

相关内容