1652 字

DOI 年代的参考文献

现在的研究人员其实大部分时间都浪费在了研究完全不沾边的事,例如论文排版,而论文排版中的大部分时间其实是花费在了按照期刊要求改格式。我个人有个判断审稿人水平的小诀窍,如果他一直纠结格式不对,那么要么是水平太低看不出论文的缺陷,要么就是故意放水。实际上,现在大多数期刊都有专门的编辑最后去帮助排版校稿,完全没必要在这上面浪费时间,市面上任意一款文献管理工具都能生成那个长长的文献清单。

等等,文献清单?为什么我们还要文献清单?一个直观的答案是要用文献清单去追溯原始文献。嗯,让我回想一下我是怎么追溯的:复制到搜索框,点击搜索… 且不说这样准确率有时候低,更重要的是我其实根本不关心清单里的内容,既然不关心,为什么不直接把文章中引用参考文献的地方设定一个超链接到其网络全文或文摘数据库?反正如果要查还要搜,直接溯源不就完了。要知道,每一次谷歌搜索会产生约 1kJ 的能量消耗,而如果用出版商的搜索引擎,能耗只会更高,我估计全世界科研人员每年浪费在搜索文献清单上的资源是足够让二氧化碳减排任务减轻一些的。

实现这个功能需要 DOI ,也就是数字对象识别符,DOI码由前缀和后缀两部分组成,之间用 “/” 分开,并且前缀以 “.” 再分为两部分。前缀当中的 “10” 为DOI目前唯一的特定代码(显然这个格式可以被正则表达式匹配)。其实很多论文校稿也是用 DOI 来确认引用文献是否正确,然后放入数据库,便于引文分析。有了 DOI ,其实我们并不需要文献清单,只要在论文写作时引用 DOI 就可以了,后期只要把 DOI 转为超链接就OK了。

不过这么做期刊可能不太高兴,因为很多期刊最大的特色就是你要投他的稿,就要接受他的霸王条款:引用格式。如果都用 DOI ,虽然其校稿负担会大大减轻,但论文手稿的迁移度会大大提高,期刊留不住投稿的人,那又臭又长的作者指南谁还当回事,尊严何在?

其实期刊本来就不应该有什么尊严。从历史渊源上,期刊只算是学术交流的一个时代产物,最早的学术交流是见面或书信,因为点对点,所以很多信息沟通不畅,这样学术共同体例如学会就会定期发行面向同行的手册,这也就是期刊的起源。从源头上说,期刊的终极目的就是方便学术交流,任何与之无关的门槛或障碍都理应清除,目前的期刊运作都太中心化了,各自制定各自的标准,不利于学术交流。

《脚注趣史》里曾提到最开始别人在进行引用时都是要附带批注来表明自己不是胡说八道的,有理有据,是对逻辑推理的有效补充。发展到现在其实学术论文整篇大都是对前人研究与观点的批注,然后写上自己研究实验的结果与讨论,知识也是这样一点一点累计出来的。从这个视角看,文献清单曾经在历史上帮助学术人员整理学科知识,但或许不久的将来就会退出历史舞台。新的形式是什么样的眼下没出来谁都不知道,但拭目以待吧,肯定是一种让研究人员交流更高效的模式。

预印本服务器的出现其实很好的解决了交流问题,但当预印本上的论文想要发表,除了同行评议外还得遭受格式修改的难题,关于同行评议的吐槽以后再说,单看格式问题还是少不了文献清单的老路子。我理解很多期刊除了网络版还有印刷版发行,但目前科研人员绝大多数都是看网络版,特别是有超链接的 PDF 版,我本人就参与过美国化学会 iPDF 的测试工作,后来听说这个功能推出后非常受欢迎,只是国内因为众所周知的原因速度总是很慢,后来美国化学会干脆在国内架设了镜像服务器。

但说归说,如果我现在写论文在引用的地方只写 DOI ,那么最痛苦的事可能就是无法跟实际投稿过程整合,只能各玩各的。想来想去,这个功能其实非常容易实现,跟大象装冰箱一样有三步:

  • 读取文本为字符串
  • 正则表达式提取出 DOI 并去重
  • 用 crossref 的 API 把 DOI 按预想格式输出并打印

既然都写出步骤了,就用 R 来实现吧:

library('stringr')
library('readr')
library('rcrossref')

doiref <- function(path, style = 'apa'){
  mystring <- readr::read_file(path)
  doi <- unlist(stringr::str_extract_all(mystring, "\\b10\\.(\\d+\\.*)+[\\/](([^\\s\\.])+\\.*)+\\b"))
  doi <- unique(doi)
  ref <- vector()
  for (i in 1:length(doi)){
        temp <- try(rcrossref::cr_cn(dois = doi[i], format = "text", style = style), T)
        ref <- c(ref,temp)
  }
  return(ref)
}

测试了一下,基本符合预期,这样只用关心样式名称就可以输出任意格式的文献清单了。不过我还是觉得这个功能只是作为一种对当前投稿体制的妥协且很不环境友好,互联网时代如果关心的是目的地,何必要人为给它加个壳,横竖也不会有人去读内容,只会被复制粘贴。