![Biblatex:当 VOLUME 字段中的字符串不以数字开头时,不要打印“Vol”](https://linux22.com/image/273506/Biblatex%EF%BC%9A%E5%BD%93%20VOLUME%20%E5%AD%97%E6%AE%B5%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%8D%E4%BB%A5%E6%95%B0%E5%AD%97%E5%BC%80%E5%A4%B4%E6%97%B6%EF%BC%8C%E4%B8%8D%E8%A6%81%E6%89%93%E5%8D%B0%E2%80%9CVol%E2%80%9D.png)
这是biblatex 的 PART 和 VOLUME 字段中的字符串那里提供的答案涵盖了我所要求的大部分内容,但它遗漏了以下规范“开始”:
“当字段volume
不是以数字开头时,按原样打印该字段(无字Vol.
)”。
建议的解决方案是在序言中添加以下内容:
\DeclareFieldFormat{volume}{\ifnumerals{#1}{\bibstring{volume}\addspace#1}{#1}}
Vol.
但是,如果字段volume
以数字开头,然后包含非数字字符,则不会打印单词。我希望它能做到这一点。下面是 MWE:
\documentclass{article}
\usepackage{filecontents}
\usepackage[style=authoryear]{biblatex}
\DeclareFieldFormat{volume}{\ifnumerals{#1}{\bibstring{volume}\addspace#1}{#1}}
\begin{filecontents}{\jobname.bib}
@BOOK{hogg1992,
AUTHOR = "Richard M. Hogg",
TITLE = "A grammar of Old English",
YEAR = "1992",
LOCATION = "Oxford",
PUBLISHER = "Blackwell",
VOLUME = "1: Phonology"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{hogg1992}
\printbibliography
\end{document}
答案1
volume
我宁愿使用标准方式来引用多卷著作中的各卷,而不是修改字段格式:在title
字段中放入“音系学”,在字段中放入“古英语语法” maintitle
。
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{hogg1992,
AUTHOR = "Richard M. Hogg",
MAINTITLE = "A grammar of Old English",
YEAR = "1992",
LOCATION = "Oxford",
PUBLISHER = "Blackwell",
VOLUME = "1",
TITLE = "Phonology"}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
答案2
\DeclareFieldFormat{volume}{\def\tmp##1##2{\ifinteger{##1}{\bibstring{volume}\addspace##1##2}{##1##2}}\expandafter\tmp#1}
应可产生所需结果。请注意使用\ifinteger
而不是\ifnumerals
,因为使用后者,“卷音位学”中的字母 V 将被解释为罗马数字而不是字符。
编辑:lockstep 的答案可能是更好的方法。