biblatex 中有几卷

biblatex 中有几卷

我想知道如何在提到多个编号卷时使用 biblatex 获取“volume”的复数版本?例如:

@BOOK{ref,
author =       "author",
title =        "title",
year =         "year",
publisher =    "publisher",
location =     "location",
volume =       "1-2-4"
}

使用关键“卷”并不是解决方案。

答案1

根据biblatex文档的第 2.2.2 节,该volume字段适用于
“[多卷书籍或期刊的卷数]”(请注意缺少复数形式!),而该volumes字段应用于“[多卷作品的总卷数]”。如果您想引用多卷作品中的部分卷数,但不是全部卷数,正确的方法似乎是使用多个参考书目条目(每卷一个,也可能整个作品一个)。

编辑:受 Willie Wong 的评论启发:您只能将多卷作品作为一个整体纳入参考书目中,并使用命令在文本中引用单卷\volcite;其语法是\volcite[prenote]{volume}[page]{key}。有关详细信息,请参阅文档的第 3.6.6 节。

EDIT2:我设法创建了一个有点 hack 的解决方案。对于每个实际上代表多卷作品的几卷的书目条目,您必须添加字段execute- 并且在此字段内添加一些量身定制的 TeX 代码。这是一个工作示例:

EDIT3:pluton:既然你提到了这一点……当然。我已经execute用一个简单的测试替换了这些内容\iffieldnum(有关详细信息,请参阅文档的第 4.6.2 节biblatex)。不再需要手动将字段添加到 bib 文件中。

\documentclass{article}

\usepackage{biblatex}

\DeclareFieldFormat{volume}{%
  \iffieldnum{volume}{%
    \bibstring{volume}~#1%
  }{%
    \bibstring{volumes}~#1%
  }%
}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@BOOK{ref1,
author = "author",
title = "title",
year = "year",
publisher = "publisher",
location = "location",
volume = "1-2-4",
}
@BOOK{ref2,
author = "author",
title = "title",
year = "year",
publisher = "publisher",
location = "location",
volume = "3",
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\printbibliography

\end{document}

答案2

我认为最好的解决方案是将总卷数放在字段中volumes并使用\volcite命令。但是,此命令仅适用于引用单个卷。您可以\volscite根据以下内容定义命令\volcite(参见附件示例)定义命令。但请注意,此定义大量使用内部命令,因此在 biblatex 的未来版本中可能会发生变化。因此,更好的解决方案是提交功能要求。以下是 MWE:

\documentclass[english]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{book,
  author = {Buchautor, Hans-Wilhelm},
  title = {Irgendein Buch},
  address = {Buch am Wald},
  year = {2000}
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

\usepackage{biblatex}
\bibliography{\jobname}

\makeatletter
\newrobustcmd*{\volscite}{\volscitecmd\cite}

\newrobustcmd*{\volscitecmd}[1]{%
  \begingroup
  \def\blx@tempa{\endgroup#1}%
  \@ifstar
    {\appto\blx@tempa{*}%
     \blx@volscitecmd@i}
    {\blx@volscitecmd@i}}

\def\blx@volscitecmd@i{%
  \@ifnextchar[%]
    {\blx@volscitecmd@ii}
    {\blx@volscitecmd@ii[]}}

\def\blx@volscitecmd@ii[#1]#2{%
  \appto\blx@tempa{[#1]}%
  \@ifnextchar[%]
    {\blx@volscitecmd@iii{#2}}
    {\blx@tempa[\blx@volscite@vol{#2}]}}

\def\blx@volscitecmd@iii#1[#2]{%
  \blx@tempa[\blx@volscite@vol{#1}\blx@volcite@page{#2}]}

\protected\def\blx@volscite@vol#1{%
  \bibstring{volumes}\ppspace#1}
\makeatother

\begin{document}
\volscite{1--2}{book}

\volscite[see also]{1--2}{book}

\volscite{1--2}[45]{book}

\volscite[cf.]{1--2}[120]{book}
\end{document}

相关内容