biblatex
我从 TL2018开始使用Mendeleybiber
进行博士论文撰写。由于各种原因,我不得不使用它Mendeley
进行引文管理,现在无法切换到其他工具。Mendeley 能够生成bib
- 但它与仅有的经典natbib/bibtex
组合(尽管它正确地转义了特殊字符)。
我理解,对于biblatex/biber
组合,month
字段不是字符串,而必须是整数。因此,正如预期和讨论的那样,这里,我收到警告
[784] Utils.pm:193> WARN - month field 'Apr' in entry 'coolauthor2012' is not an integer - this will probably not sort properly.
从一个无关的问题中获取灵感这里month -> integer
,我在序言中使用了以下手动转换。
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=month, match={jan}, replace=${1}]
\step[fieldsource=month, match={feb}, replace=${2}]
\step[fieldsource=month, match={mar}, replace=${3}]
\step[fieldsource=month, match={apr}, replace=${4}]
\step[fieldsource=month, match={may}, replace=${5}]
\step[fieldsource=month, match={jun}, replace=${6}]
\step[fieldsource=month, match={jul}, replace=${7}]
\step[fieldsource=month, match={aug}, replace=${8}]
\step[fieldsource=month, match={sep}, replace=${9}]
\step[fieldsource=month, match={oct}, replace=${10}]
\step[fieldsource=month, match={nov}, replace=${11}]
\step[fieldsource=month, match={dec}, replace=${12}]
}
}
}
我现在有两个困扰我的问题。
- 这会起作用吗?我没有看到上述任何警告,但我想知道引用是否正确排序,并且月份替换确实得到考虑和正确处理。
- 有没有更好的方法来处理这个问题?显然,手动将每个月映射到整数是低效的。
这将帮助所有想要使用mendeley
现有mendeley
图书馆的人,尤其是那些想要向大多落后于natbib/bibtex
时代的出版商提交手稿的人。
答案1
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=month, match=\regexp{\A(j|J)an(uary)?\Z}, replace=1]
\step[fieldsource=month, match=\regexp{\A(f|F)eb(ruary)?\Z}, replace=2]
\step[fieldsource=month, match=\regexp{\A(m|M)ar(ch)?\Z}, replace=3]
\step[fieldsource=month, match=\regexp{\A(a|A)pr(il)?\Z}, replace=4]
\step[fieldsource=month, match=\regexp{\A(m|M)ay\Z}, replace=5]
\step[fieldsource=month, match=\regexp{\A(j|J)un(e)?\Z}, replace=6]
\step[fieldsource=month, match=\regexp{\A(j|J)ul(y)?\Z}, replace=7]
\step[fieldsource=month, match=\regexp{\A(a|A)ug(ust)?\Z}, replace=8]
\step[fieldsource=month, match=\regexp{\A(s|S)ep(tember)?\Z}, replace=9]
\step[fieldsource=month, match=\regexp{\A(o|O)ct(ober)?\Z}, replace=10]
\step[fieldsource=month, match=\regexp{\A(n|N)ov(ember)?\Z}, replace=11]
\step[fieldsource=month, match=\regexp{\A(d|D)ec(ember)?\Z}, replace=12]
}
}
}
这将用正确的月份数字替换三个字母的名称缩写或完整的月份名称。由于 Biber 的 RegExp 区分大小写,因此它将匹配小写的月份缩写和首字母大写的版本(即jan
和Jan
)。(biber
2.12 及更高版本支持matchi
不区分大小写的匹配;请参阅这个问题。
这只是为了抑制 Biber 在遇到以下情况时发出的警告
month = {mar},
即使没有此代码,月份也会被正确识别。
请注意,对于大多数 BibTeX 样式来说,month = {mar},
这也不是最佳(正确)的输入形式。无括号month = mar,
通常更好,因为它随后会通过 BibTeX 字符串转换为所需的输出。BibTeX 提示和常见问题
Q13:我应该使用文字还是数字来表示月份、版本等字段?为什么?
您应该始终使用三个字母的月份宏(未分隔)作为月份名称(
jan
,,,,,,,,,,,,,)feb
,因为这允许每个文件按照该书目样式的要求格式化月份名称。mar
apr
may
jun
jul
aug
sep
oct
nov
dec
.bst
BTX文档第 10 页
month
作品出版的月份,或未出版作品的创作月份。应使用标准的三字母缩写,如 LaTeX 手册附录 B.1.3 中所述