BibLaTeX:版本作为年份前的上标,但年份在作者之后

BibLaTeX:版本作为年份前的上标,但年份在作者之后

有一个类似的问题(biblatex-verbose:版本作为年份前面的上标) 已经有了答案,但解决方案对我没有帮助。我需要参考书目中一个相当奇怪的顺序:

@Book 为:姓氏,名字(版本年份):标题. 地点: 出版商。

@InBook 作为:姓氏,名字(版本年份):“标题。”在:、名字 [编辑] 姓氏 [编辑](Hrsg.)地点:出版商、页数。

我真的希望能解决这个问题。如果需要更多信息,请随时询问!

编辑:我的序言如下

\documentclass[a4paper,12pt,numbers=endperiod]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T2A,T1]{fontenc}
\usepackage[russian,ngerman]{babel}
\usepackage{tipa}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{caption}
\usepackage[footskip=1cm]{geometry}
\usepackage[footnote,printonlyused]{acronym}
\usepackage{filecontents}
\usepackage{lipsum}
\usepackage{csquotes}
\usepackage{CJKutf8}

\usepackage[backend=biber,style=authoryear,sorting=nyt]{biblatex}
\addbibresource{graphematik.bib}
\DefineBibliographyStrings{ngerman}{references={Bibliographie}}

\renewbibmacro*{byeditor+others}{%
  \ifnameundef{editor}
    {}
    {\printnames[byeditor]{editor}%
     \setunit{\addspace}%
     \usebibmacro{byeditor+othersstrg}%
     \clearname{editor}%
     \newunit}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}}
\usepackage{xpatch}
\xpatchbibmacro{byeditor+othersstrg}{\printtext}{\printtext[parens]}{}{}

\renewcommand*{\multinamedelim}{/}
\renewcommand*{\finalnamedelim}{/}

\setkomafont{disposition}{\mdseries\rmfamily}
\onehalfspacing
\captionsetup[table]{skip=5pt,font=footnotesize}
\deffootnote[1.0em]{1.0em}{1.0em}
{\textsuperscript{\thefootnotemark}\,\enskip}
\renewcommand{\labelnamepunct}{\addcolon\space}
\renewcommand*{\postnotedelim}{\addcolon\space}
\DeclareFieldFormat{postnote}{#1}
\DeclareFieldFormat{multipostnote}{#1}
\DeclareFieldFormat{edition}{\ifinteger{#1}{\textsuperscript{#1}}{#1\isdot\setunit{\addcomma\space}}}
\renewcommand{\baselinestretch}{1.5}

这一切给了我:(问题高炉

@书籍:Altmann,Hans / Ute Ziegenhain(2010):语音学、音系学和字形学考试。工作技术 – 休假 – 解决方案3. 哥廷根:Vandenhoeck & Ruprecht。--> 3 应该位于 2010 之前(在括号内)(它已是上标)

@InBook:Bochmann,Klaus(1989):“罗马尼亚语:语言规范和标准语言”。在:罗马语言学词典。第三乐队。单独的罗马语言和复兴时期的语言范围,以对应罗马尼亚语、达尔马提亚语/伊斯特罗姆语、弗拉明戈语、拉脱维亚语、联邦罗马尼亚语。迈克尔·梅策尔丁 / 冈特·霍尔图斯 / 克里斯蒂安·施密特 (時間限制。冯)。图宾根:尼迈耶**,**年代。239–251. --> 应该只说 (Hrsg.),最后一个逗号应该是冒号,并且“S.”必须去掉

@文章:Borgwaldt,Susanne R./Frauke**,**M. Hellwig/Annette**,**MB de Groot (2004):“五种语言中的词首熵。字母到声音,以及声音到字母”。在:书面语言和读写能力 7**,**年代。165–184。--> 就像之前一样,最后一个逗号必须是冒号,并且“S.”必须保留。此外,我刚刚注意到,除第一个作者外,所有作者的姓氏和名字之间的逗号都丢失了,这当然是不可取的。

我真的希望这会有所帮助并且不会造成太多混乱!

答案1

样式authoryear使用不同的宏来打印年份,所以我们必须修改其他宏

\DeclareFieldFormat{superedition}{\textsuperscript{#1}}

\renewbibmacro*{date+extradate}{%
  \iffieldundef{labelyear}
    {}
    {\printtext[parens]{%
       \iffieldnum{edition}
         {\printfield[superedition]{edition}%
          \global\clearfield{edition}}
         {}%
       \iflabeldateisdate
         {\printdateextra}
         {\printlabeldateextra}}}}

应该足够了。如果版本是数字,则会在上面标中打印版本。代码适用于标准mergedate=compact设置,对于其他mergedate设置,需要进行调整。


页面问题可以通过以下方式解决

\renewcommand*{\bibpagespunct}{\addcolon\space}
\DeclareFieldFormat{pages}{#1}

类似于你对 所做的postnote


可以使用以下方法更改“Hrsg.”字符串

\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\renewbibmacro*{byeditor+others}{%
  \ifnameundef{editor}
    {}
    {\printnames[byeditor]{editor}%
     \setunit{\addspace}%
     \usebibmacro{byeditor+othersstrg}%
     \clearname{editor}%
     \newunit}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}}
\renewbibmacro*{byeditor+othersstrg}{\usebibmacro{editor+othersstrg}}
\renewbibmacro*{bytranslator+othersstrg}{\usebibmacro{translator+othersstrg}}
\renewbibmacro*{bytypestrg}[2]{%
  \iffieldundef{#1type}
    {\bibstring{#2}}
    {\ifbibxstring{\thefield{#1type}}
       {\bibstring{\thefield{#1type}}}
       {\printtext{\thefield{#1type}}}}}

那么你就不需要代码了xpatch


在 MWE 中我也使用了\DeclareNameAlias{sortname}{family-given}上述评论。

\documentclass[a4paper,12pt,numbers=endperiod]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,style=authoryear,sorting=nyt]{biblatex}

\addbibresource{biblatex-examples.bib}

\DefineBibliographyStrings{ngerman}{references={Bibliographie}}

\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\renewbibmacro*{byeditor+others}{%
  \ifnameundef{editor}
    {}
    {\printnames[byeditor]{editor}%
     \setunit{\addspace}%
     \usebibmacro{byeditor+othersstrg}%
     \clearname{editor}%
     \newunit}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}}
\renewbibmacro*{byeditor+othersstrg}{\usebibmacro{editor+othersstrg}}
\renewbibmacro*{bytranslator+othersstrg}{\usebibmacro{translator+othersstrg}}
\renewbibmacro*{bytypestrg}[2]{%
  \iffieldundef{#1type}
    {\bibstring{#2}}
    {\ifbibxstring{\thefield{#1type}}
       {\bibstring{\thefield{#1type}}}
       {\printtext{\thefield{#1type}}}}}

\DeclareDelimFormat{multinamedelim}{/}
\DeclareDelimAlias{finalnamedelim}{multinamedelim}

\DeclareDelimFormat[bib,biblist]{nametitledelim}{\addcolon\space}

\renewcommand*{\postnotedelim}{\addcolon\space}
\DeclareFieldFormat{postnote}{#1}
\DeclareFieldFormat{multipostnote}{#1}

\DeclareFieldFormat{superedition}{\textsuperscript{#1}}

\renewbibmacro*{date+extradate}{%
  \iffieldundef{labelyear}
    {}
    {\printtext[parens]{%
       \iffieldnum{edition}
         {\printfield[superedition]{edition}%
          \global\clearfield{edition}}
         {}%
       \iflabeldateisdate
         {\printdateextra}
         {\printlabeldateextra}}}}

\renewcommand*{\bibpagespunct}{\addcolon\space}
\DeclareFieldFormat{pages}{#1}

\DeclareNameAlias{sortname}{family-given}


\begin{document}
\nocite{sigfridsson,companion,cotton,iliad,malinowski,
        gaonkar:in,westfahl:space,pines,brandt,hyman,kant:kpv}
\printbibliography
\end{document}

相关内容