我想知道如何在提到多个编号卷时使用 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}