参考文献排序 参考文献排序后出现空格

日期: 栏目:常识 浏览:10

latex编译的时候, 提示有重复的参考文献. 我就想着那我们用vim来排序吧.

  1. 假设我们有如下的参考文献(bib):
@article {EellsJamesSampson1964Harmonic, AUTHOR = {Eells, Jr., James and Sampson, J. H.}, TITLE = {Harmonic mappings of {R}iemannian manifolds}, JOURNAL = {Amer. J. Math.}, FJOURNAL = {American Journal of Mathematics}, VOLUME = {86}, YEAR = {1964}, PAGES = {109--160}, ISSN = {0002-9327}, MRCLASS = {53.72 (57.50)}, MRNUMBER = {0164306},MRREVIEWER = {J. A. Wolf}, DOI = {10.2307/2373037}, URL = {},}@article {Helein1990Regularite, AUTHOR = {H\'{e}lein, Fr\'{e}d\'{e}ric}, TITLE = {R\'{e}gularit\'{e} des applications faiblement harmoniques entre une surface et une sph\`ere}, JOURNAL = {C. R. Acad. Sci. Paris S\'{e}r. I Math.}, FJOURNAL = {Comptes Rendus de l'Acad\'{e}mie des Sciences. S\'{e}rie I. Math\'{e}matique}, VOLUME = {311}, YEAR = {1990}, NUMBER = {9}, PAGES = {519--524}, ISSN = {0764-4442}, MRCLASS = {58E20 (35J45)}, MRNUMBER = {1078114},MRREVIEWER = {John C. Wood},}@article {GastelScheven2009Regularity, AUTHOR = {Gastel, Andreas and Scheven, Christoph}, TITLE = {Regularity of polyharmonic maps in the critical dimension}, JOURNAL = {Comm. Anal. Geom.}, FJOURNAL = {Communications in Analysis and Geometry}, VOLUME = {17}, YEAR = {2009}, NUMBER = {2}, PAGES = {185--226}, ISSN = {1019-8385}, MRCLASS = {58E20 (35J48 46E35 49N60)}, MRNUMBER = {2520907},MRREVIEWER = {Anna Zatorska-Goldstein}, DOI = {10.4310/CAG.2009.v17.n2.a2}, URL = {},}
  1. 由于vim只支持对一行排序, 故先将每个参考文献换成一行:
:g/^@/,/^}$/s/\r\|\n/の

其中の是搜狗拼音de打出来的, 你可以换成任何一个不常用的符号.

这里有个小小的bug, 我们需要先在每个参考文献中插入空行再替换:

:g/^}$/s//}\r
  1. 使用vim自带的排序:sort:
:%sort

或者按照参考文献的key排序

:%sort r /{[A-z0-9]\+,の/
  1. 将の换回换行符
:g/の/s//\r/g
  1. 移除空行
:g/^$/d

使用宏

那么是否每次都要执行上面几个操作步骤呢? 当然我们可以用到下面的宏来自动执行. 将下面的代码存入当前工作目录(:set acd)的.vimrc文本中:

let @b=":norm zR\" \. ":g/\\(@\\w\\+\\)\\s*{/s//\\1 {\" \. ":g/^}$/s//}\\r\" \. ":g/^@/,/^}$/s/\\r\\|\\n/の/g\" \. ":%sort r /{[0-9A-Za-z_]\\+,の/\" \. ":g/の/s//\\r/g\" \. ":g/^$/d\" \. ":norm zM\" \. ":w\"

然后执行:so %, 这时我们就定义好了这个宏b; 在bib文件中, 当你添加了新的参考文献, 那么可以执行@b来实现排序.

这里需要注意, \实际上代表的是回车键. 同时我们需要对\开头的命令转义, 即变成\\开头.

当然, 你也可以在.vimrc中添加自动执行命令:

au! BufWritePost *.bib :norm @b

最后, 我们还可以在你主要的.vimrc中添加如下函数来实现自动载入上面定义的.vimrc

" Custom vimrcfu! CustomConfig() let custom_vimrc = expand('%:p:h').'/.vimrc' if filereadable(custom_vimrc) exec 'so' custom_vimrc endifendfu" Auto Load .vimrc in the Working Root"set exrcau! BufNewFile,BufReadPost,BufEnter *.tex call CustomConfig()

有了上面这些操作, 是不是写作更加方便了呢?

您还可以搜索:参考文献排序怎么自动生成,参考文献排序规则,参考文献排序按首字母,参考文献排序原则 作者首字母一样chen cheng,参考文献排序后出现空格,参考文献排序是按照正文中出现的顺序排列吗,参考文献排序顺序,参考文献排序后不顶格怎么办,参考文献排序英文在前中文在后,怎么给参考文献排序④

本文地址:https://caijingdemo.com/changshi/88673.html

标签: