我的书目中有一个条目,其中的数字看起来像number = {D-810}
。
Biblatex 将数字字段中的破折号替换为\bibrangedash
;对于正常数字范围,这是number = {2-3}
完全正确的,但D-810
不是一个范围,而是一种特殊的数字,应该用短划线显示。
我找到了一些关于如何重新定义所有出现的样式的技巧\bibrangedash
,例如Biblatex 中的自定义破折号,但我需要的是防止\bibrangedash
在单个条目中用 just 替换破折号。
我怎样才能实现这个目标?
我需要的样式是 MWE:
\begin{filecontents}{test.bib}
@TECHREPORT{c1,
author = {Author, A.},
title = {Some title},
institution = {Inst. 1},
year = {2000},
type = {Preprint},
number = {D-810},
address = {Some city},
pagetotal = {10},
langid = {english},
}
@TECHREPORT{c2,
author = {Author, B.},
title = {Another title},
institution = {Inst. 2},
year = {2000},
type = {Preprint},
number = {2-3},
address = {Some city},
pagetotal = {10},
langid = {english},
}
\end{filecontents}
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage[style=gost-numeric]{biblatex} % from package biblatex-gost
\addbibresource{test.bib}
\begin{document}
Citations:~\cite{c1,c2}.
\printbibliography
\end{document}
答案1
biblatex-gost
将该字段定义number
为“范围字段”。另一方面,标准样式将该字段定义为“整数”,并从版本 3.12 开始将其视为“文字”字段。标准样式不会出现此问题,它只会在中出现biblatex-gost
。
范围字段的决定性特征是所有类型的破折号都会\bibrangedash
自动标准化为。不幸的是,如果您想继续使用,没有简单的方法可以打破这种标准化(范围中有一个例外,例如x-000--y-999
只有--
被 替换\bibrangedash
,单个-
s 保持不变,但这对您没有帮助)-
。
一个简单但遗憾的是既不优雅也不特别便携的解决方法是
\newcommand*{\norangehyphen}{-}
进而
@TECHREPORT{c1,
author = {Author, A.},
title = {Some title},
institution = {Inst. 1},
year = {2000},
type = {Preprint},
number = {D\norangehyphen810},
address = {Some city},
}
\symbol{45}
或者,您可以按照 egreg 在评论中所建议的方式使用。
在阅读代码之前,biblatex-gost
我曾建议要求其作者停止将其number
视为范围字段,但经过更彻底的观察后,很明显相当多的代码实际上依赖于number
范围字段,所以这不是一个选择。
在其他情况下,用花括号屏蔽biblatex
就足以“保护”-
不被转换为\bibrangedash
number = {D{-}810},
然而,这不适用于 Biber 检测的范围。但如果您认为这是一个重要的功能,您可以考虑在 Biber 错误跟踪器上将其作为功能请求添加https://github.com/plk/biber/issues