用文字拼写出卷数和版本号 - Biblatex 用德语吗?

用文字拼写出卷数和版本号 - Biblatex 用德语吗?

是否可以让 Biblatex 输出单词“Second”(德语)而不是数字 2?

例如这是我的序言:

\usepackage[utf8]{inputenc}
\usepackage[
    sorting=none,     
  backend=biber,
    babel=other]{biblatex}
\usepackage{csquotes}
\usepackage[german,american]{babel}
\addbibresource{references.bib}

以下是我的参考书目条目:

@book{Cantor,
    author="Cantor, Moritz.",
    title="Vorlesungen über Geschichte der Mathematik.  (von 1200 - 1668).",
    language={German},
    volume={2},
    edition={2},
    address="Leipzig",
    publisher="Druck und Verlag von B.G. Teubner",
    date={1900},
    pagetotal="XII + 943 S.",
    hyphenation={ngerman},
    note="(in Germ.)",
}

但是,当我在其上运行 Babel+Biblatex 时,它输出:

Moritz. Cantor. Vorlesungen uber Geschichte der Mathematik. (von 1200 - 1668). 
German. 2. Aufl. Bd. 2. (in Germ.) Leipzig: Druck und Verlag von B.G. Teubner, 
1900. XII + 943 S.

我希望它输出“Zweite Auflage”和“Zweiter Band”而不是“2.Aufl”。和“Bd. 2”。

有人知道使用 biblatex 是否可以实现这个功能吗?

答案1

您可以使用该fmtcount包来实现此目的,并相应地重新定义字段格式。对于版本,您只需重新定义\mkbibordedition宏即可。最好在里面执行此操作\DefineBibliographyExtras,因为这是一个特定于语言的字符串:

\DefineBibliographyExtras{ngerman}{%
  \renewcommand*{\mkbibordedition}[1]{\Ordinalstringnum{#1}[f]}
}

为了实现此功能,您需要修复当前fmtcount版本的错误(软件包的作者知道这个错误)。请参阅下面的最小示例。

体积略有不同,因为原始定义(取自biblatex.def)是

\DeclareFieldFormat{volume}{\bibstring{volume}~#1}% volume of a book

我们需要一个辅助宏将整数转换为序数,例如\mkbibordvolume,然后我们可以在“volume”字段格式中使用它:

\newcommand*{\mkbibordvolume}[1]{\Ordinalstringnum{#1}[m]}

再次强调,这是特定于语言的,因此最好的方法是像 一样处理它\mkbibordedition。因此,总而言之,您将获得:

\newcommand*{\mkbibordvolume}{}
\usepackage{fmtcount}
\DefineBibliographyExtras{ngerman}{%
  \renewcommand*{\mkbibordedition}[1]{\Ordinalstringnum{#1}[f]}
  \renewcommand*{\mkbibordvolume}[1]{\Ordinalstringnum{#1}[m]}
}
\DeclareFieldFormat{volume}{\mkbibordvolume{#1}~\bibstring{volume}}

如果您希望用“Band”代替“Bd.”,用“Auflage”代替“Aufl.”,只需使用选项abbreviate=false(如下例所示)。如果您希望除这两个字符串外其他所有内容都缩写,请使用\DefineBibliographyStrings(有关详细信息,请参阅手册)。

我根据您的代码片段制作了一个完整的最小工作示例:

\documentclass[german,ngerman]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Cantor,
    author={Cantor, Moritz},
    title={Vorlesungen über Geschichte der Mathematik (von 1200--1668)},
    language={german},
    volume={2},
    edition={2},
    address={Leipzig},
    publisher={Teubner},
    date={1900},
    hyphenation={german}
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

\usepackage[
  sorting=none,     
  backend=biber,
  babel=other,
  abbreviate=false
]{biblatex}
\addbibresource{\jobname.bib}

\newcommand*{\mkbibordvolume}{}

\usepackage{fmtcount}
\DefineBibliographyExtras{ngerman}{%
  \renewcommand*{\mkbibordedition}[1]{\Ordinalstringnum{#1}[f]}
  \renewcommand*{\mkbibordvolume}[1]{\Ordinalstringnum{#1}[m]}
}

\DeclareFieldFormat{volume}{\mkbibordvolume{#1}~\bibstring{volume}}

% Bugfix für fmtcount:
\makeatletter
\DeclareRobustCommand{\@OrdinalstringMgerman}[2]{%
   \@ordinalstringMgerman{#1}{\@@num@str}%
   \protected@edef#2{\protect\MakeUppercase\@@num@str}%
}
\DeclareRobustCommand{\@OrdinalstringFgerman}[2]{%
   \@ordinalstringFgerman{#1}{\@@num@str}%
   \protected@edef#2{\protect\MakeUppercase\@@num@str}%
}
\DeclareRobustCommand{\@OrdinalstringNgerman}[2]{%
   \@ordinalstringNgerman{#1}{\@@num@str}%
   \protected@edef#2{\protect\MakeUppercase\@@num@str}%
}
\makeatother

\begin{document}
\cite{Cantor}

\printbibliography
\end{document}

相关内容