在 biblatex-dw 中自定义 incollection 布局

在 biblatex-dw 中自定义 incollection 布局

我正在使用该biblatex-dw软件包来编制我的参考书目,并且几乎已经根据我的需求(或者说大学的需要)完成了配置。

但是,我仍需要做一些小改动以遵守大学指导方针。具体来说,我需要更改字体布局@incollection

目前的样子: 当前状态

它看起来应该是这样的: 在此处输入图片描述

总结一下:

  • , in:应改为. In:
  • 字段的位置editor需要title交换
  • 而不是(Hgg.)(如果有多个编辑者)或(Hg.)(如果有单个编辑者)在编辑者名字后面,我希望它总是显示为hg. von <Editors name(s)>

我已经想出了如何使用来实现第一点 \renewbibmacro{in:}{. In:}。但是,我不确定这是否是在 biblatex 中执行此操作的“正确”方法。

这是MWE:

\documentclass[oneside]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{filecontents}

\usepackage[style=authortitle-dw,
            namefont=bold,
            firstnamefont=bold,
            firstfull=true,
            citeauthor=normalfont,
            editorstringfont=namefont,
            autocite=footnote,
            addyear=true]{biblatex}

% String modifications
\DefineBibliographyStrings{ngerman}{phdthesis = {phil. Diss.}}
\DefineBibliographyStrings{ngerman}{editors = {Hgg.}}
\DefineBibliographyStrings{german}{urlseen = {Datum des Zugriffs:}}

% Sort bibliography by last name
\DeclareNameAlias{sortname}{last-first}

\AtBeginBibliography{% change name delimiter from "," to "/" in bibliography
  \renewcommand*{\multinamedelim}{/}%
  \renewcommand*{\finalnamedelim}{/}%
}

\begin{filecontents}{literatur.bib}
@incollection{Metzler-Boheme,
    Title = {Bohème},
    Author = {Boerner, Maria-Christina},
    Booktitle = {Metzler Lexikon Literatur. Begriffe und Definitionen},
    Edition = {3., völlig neu bearb. Aufl.},
    Editor = {Burdorf, Dieter and Fasbender, Christoph and Moennighoff, Burkhard},
    Pages = {95},
    Publisher = {Metzler},
    Address = {Stuttgart},
    Year = {2007}}
\end{filecontents}
\addbibresource[]{literatur.bib}

\begin{document}
   \nocite{*}
   \printbibliography
\end{document}

在此先非常感谢您的帮助!

答案1

恐怕这本质上是一个相当无聊的问题:这只是一个黑客问题incollection驱动程序的问题,以及一个相关的宏。在这种情况下,恐怕破解这个词才是关键——我基本上采用了特别指定解决方案来处理本质上特别指定问题。

我唯一想指出的是:(1) 我不会说德语,所以我希望我输入的字符串是正确的;(2) 您的示例中的编辑姓名采用普通字体而非粗体,但您的评论并未引起人们的注意。如果您希望将其采用粗体,请删除两个\renewcommands(然后您也可以删除 `\makeatletter ... \makeatother\ “guard”);(3) 任何时候您摆弄这样的驱动程序,都可能会发现一些极端情况(没有编辑器,只有翻译器或其他东西)导致驱动程序崩溃,您必须改进驱动程序。

\documentclass[oneside]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{filecontents}

\usepackage[style=authortitle-dw,
            namefont=bold,
            firstnamefont=bold,
            firstfull=true,
            citeauthor=normalfont,
            editorstringfont=namefont,
            autocite=footnote,
            addyear=true]{biblatex}

% String modifications -- we add also a modification for "by editor"
\DefineBibliographyStrings{ngerman}{phdthesis = {phil. Diss.}}
\DefineBibliographyStrings{ngerman}{editors = {Hgg.}}
\DefineBibliographyStrings{german}{urlseen = {Datum des Zugriffs:}}
\DefineBibliographyStrings{german}{byeditor = {hg\adddot\ von}}

% The only modification to this is to substitute one piece of punctuation
% and use our new bibmacro
\DeclareBibliographyDriver{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \ifbool{cbx:idemfull}
    {}
    {\usebibmacro{author/translator+others}%
     \ifnameundef{labelname}
       {}
       {\setunit{\labelnamepunct}\newblock}}%
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \setunit{\addperiod\space}%
  \usebibmacro{in:}%
  \usebibmacro{authedxrefcheck}%
  \ifbool{cbx:authedxref}
    {\booltrue{xrefidem}}
    {\boolfalse{xrefidem}}%
  \ifbool{bbx:xref}
    {\iffieldundef{xref}
      {% Code, wenn kein xref vorhanden
       \usebibmacro{noxref:incollection}}
      {\printtext{\bbx@xref{\thefield{xref}}}% xref
       \usebibmacro{xrefvolume}%
       \usebibmacro{pages}}}%
    {\usebibmacro{noxref:incollection}}% bei xref=false
    \usebibmacro{finentry}}

 % Here we simply eliminate the original call to print editors, and
 % substitute one later -- but we hackily redefine the name font within
 % a group to prevent the names being bold
\makeatletter
\renewbibmacro{noxref:incollection}{%
  \usebibmacro{maintitle+booktitle}%
  \newunit
  {\renewcommand\bbx@namefont{}%
   \renewcommand\bbx@firstnamefont{}%
  \usebibmacro{byeditor+others}}%
  \ifbool{bbx:seriesbeforeedition}
    {\setunit{\addspace}%
     \usebibmacro{series+number}}
    {}%
  \newunit\newblock
  \usebibmacro{edition}%
  \usebibmacro{volumes+volume+part}%
  \ifbool{bbx:seriesstandard}
    {\setunit{\addspace}%
     \usebibmacro{series+number}}
    {}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \ifbool{bbx:seriesafteryear}
    {\setunit{\addspace}%
     \usebibmacro{series+number}}
    {}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \newunit\newblock
  \usebibmacro{pageref}}
\makeatother

% Sort bibliography by last name
\DeclareNameAlias{sortname}{last-first}

\AtBeginBibliography{% change name delimiter from "," to "/" in bibliography
  \renewcommand*{\multinamedelim}{/}%
  \renewcommand*{\finalnamedelim}{/}%
}

\begin{filecontents}{literatur.bib}
@incollection{Metzler-Boheme,
    Title = {Bohème},
    Author = {Boerner, Maria-Christina},
    Booktitle = {Metzler Lexikon Literatur. Begriffe und Definitionen},
    Edition = {3., völlig neu bearb. Aufl.},
    Editor = {Burdorf, Dieter and Fasbender, Christoph and Moennighoff, Burkhard},
    Pages = {95},
    Publisher = {Metzler},
    Address = {Stuttgart},
    Year = {2007}}
\end{filecontents}
\addbibresource[]{literatur.bib}

\begin{document}
   \nocite{*}
   \printbibliography
\end{document}

书目条目

相关内容