diff options
author | Karl Berry <karl@freefriends.org> | 2021-01-19 22:57:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-01-19 22:57:40 +0000 |
commit | fdd73d8d37055fc18e84ba6e0f87b8d5bb359ed7 (patch) | |
tree | 366379d5f4070f1a04890611446916c558c1b9d8 /Master/texmf-dist/doc/latex/biblatex-gb7714-2015 | |
parent | 8aa097d72ffb04a842e9326f8580607b4e7bb54a (diff) |
biblatex-gb7714-2015 (19jan21)
git-svn-id: svn://tug.org/texlive/trunk@57468 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/biblatex-gb7714-2015')
17 files changed, 32 insertions, 5100 deletions
diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md index 086d623f8e0..0a013369fb7 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md @@ -1,4 +1,4 @@ -<b>Date of last change: 2020-07-21 to version v1.0v</b> +<b>Date of last change: 2021-01-19 to version v1.0w</b> # biblatex-gb7714-2015: a biblatex style package @@ -62,6 +62,18 @@ biblatex-gb7714-2015 宏包是中文参考文献著录/标注标准 `GB/T 7714-2 * [Study-LaTeX(LaTeX学习笔记)](https://github.com/Zousiyu/Study-LaTeX) * [ElegantBook](https://github.com/ElegantLaTeX/ElegantBook) * [《经济研究》杂志 LaTeX 论文模板)](https://github.com/EthanDeng/Chinese-ERJ) +* [WUTthesis(武汉理工大学研究生学位论文的 LaTeX 模板)](https://github.com/Jiayin-Gu/WUTthesis) +* [shtthesis (ShangHaiTech university THESIS)](https://github.com/lirundong/shtthesis) +* [LaTeX-SWUFE-Bachelor-Thesis (西南财经大学本科毕业论文 LaTeX 模板)](https://github.com/sukanka/LaTeX-SWUFE-Bachelor-Thesis) +* [NJU-thesis-esz(南京大学学位论文-微调整后适用于人文社科)](https://github.com/EdwardSaidZhou/NJU-thesis-esz) +* [NKThesis(南开大学硕士毕业论文(博士论文)Latex模板)](https://github.com/procuteboy/NKThesis) +* [NKUBachelorThesis(南开大学本科生毕业论文(毕业设计)LaTeX模板)](https://github.com/NKcqx/NKUBachelorThesis) +* [BIThesis(bachelor graduation thesis for Dept. of Undergraduate Academic Affairs of Beijing Institute of Technology.)](https://github.com/BITNP/BIThesis) +* [nputhesis(NPU 博士、硕士学位论文 \LaTeX 模板)](https://github.com/NPUSCG/nputhesis) +* [sustechthesis(Southern University of Science and Technology Thesis Template LaTeX Template)](https://github.com/Iydon/sustechthesis) +* [SHMTUThesis(上海海事大学 LaTeX 学位论文模板)](https://github.com/hellckt/SHMTUThesis) +* [LZUthesis(兰州大学本科毕业论文LaTeX模板)](https://github.com/szsdk/LZUthesis) +* [nuaa-thesis(南京航空航天大学本科、硕士和博士学位论文的样式模板)](https://github.com/nuaa803/nuaa-thesis) * [...] @@ -1170,6 +1182,7 @@ please see the file 'biblatex-gb7714-2015.pdf' for further information! * 2020/03/04 v1.0t,ctan * 2020/03/30 v1.0u * 2020/07/21 v1.0v,ctan +* 2021/01/19 v1.0w,ctan diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf Binary files differindex b1520870396..9d22accbe0e 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex index 2702ae168ee..767ffbbd1e2 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex @@ -93,7 +93,8 @@ sorting选项值(gb7714-2015支持以语言著者-出版年标题升序排列, 姓名格式调整(gbnamefmt选项,可以设置大写、小写、西语习惯用法、拼音习惯用法)、 出版项控制(gbpub选项,可设置出版项缺失时是否填补信息)、类型和载体标识控制(gbtype选项,可设置不输出)、 析出文献标识符控制(gbpunctin选项,可设置\texttt{//}不输出或其它表示形式)、 -标题超链接控制(gbtitlelink选项,可设置标题超链接)、 +标题超链接控制(gbtitlelink选项,可设置文献表中各条目标题超链接)、 +标准标签超链接控制(gblabelref选项,可设置标注中作者标签的超链接)、 作者项处理(gbnoauthor选项,可设置作者缺失时是否填补信息); 著录表格式选项和命令: @@ -643,6 +644,20 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \caption{文献标题超链接控制选项}\label{fig:eg:optgbtitlelink} \end{figure} + + \pdfbookmark[4]{gblabelref}{gblabelref} + \item[gblabelref]=\textbf{true},false. \hfill default is true + + 为作者年制设置标注中的作者标签的超链接增加的选项。 + \begin{itemize} + \item gblabelref=true,即默认给作者标签加上超链接。 + \item gblabelref=false,不给作者标签加上超链接。 + \end{itemize} + 测试文件见: + \href{run:egphoto/opt-gblabelref-true.tex}{opt-gblabelref-true.tex}。 + + + \pdfbookmark[4]{gblocal}{gblocal} \item[gblocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015 \item[gbcitelocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015 @@ -2347,7 +2362,7 @@ author/editor.title[usera].year或date,volume(number)-endyear, endvolume(endnumb \end{example} 其中连续出版物的出版者用institution表示。 -\qd{因为连续出版物可能用到两个日期,两个卷,两个期,所以录入数据时需要特别处理。不需要录入endyear等信息,只需要在到year或date域录入两个日期,由biber自动解析,两个日期之间用/分隔。而卷和期由于可能有合订模式,且合订卷期之间用/分隔(参考GB/T 7714-2015第8.8.3节),因此如果需要解析有起止范围的卷和期,录入到volume和number域的信息中起止值之间应用-分隔。} +\qd{因为连续出版物可能用到两个日期,两个卷,两个期,所以录入数据时需要特别处理。不需要录入endyear等信息,只需要在到year或date域录入两个日期,由biber自动解析,由于一个日期内部的年月日之间是用-进行分隔,因此两个日期之间用/分隔。而卷和期由于可能有合订模式,且合订卷期之间用/分隔(参考GB/T 7714-2015第8.8.3节),因此如果需要解析有起止范围的卷和期,录入到volume和number域的信息中起止值之间应用-分隔。} \subsubsection{连续出版物的析出文献/article} \begin{refentry}{}{}%[break at=0.5cm/0pt] diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib deleted file mode 100644 index a992cd3b132..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib +++ /dev/null @@ -1,114 +0,0 @@ - -@NEWSPAPER{CITATION_NEWSPAPER, - author = "吴刚", - title = "立陶宛进入欧元时代", - journaltitle = "人民日报", - date = "2015-1-2", - language = "chs", - note = "" -} - -@BOOK{SANGUOYANYI, - author = "罗贯中", - title = "三国演义", - edition = "1", - address = "山西太原", - year = "元末明初", - language = "chs" -} - -@ELECTRONIC{BUPT_Thesis_Format_2004, - title = "关于研究生学位论文格式的统一要求", - author = "北京邮电大学研究生院培养与学位办公室", - etype = "EB", - ehowpublished = "OL", - date = "2004", - url = "http://www.bupt.edu.cn/", - language = "chs" -} - -@ELECTRONIC{latex-bupt, - author = "王旭", - title = "latex-bupt: \LaTeX style for {BUPT} thesis", - year = "2007", - etype = "EB", - ehowpublished = "OL", - refdate = "2009-01-14", - url = "http://code.google.com/p/latex-bupt/", - language = "chs" -} - -@ELECTRONIC{buptthesis, - author = "张煜", - title = "北京邮电大学研究生学位论文 \LaTeX{} 文档类", - year = "2009", - dhowpublished = "online", - urldate = "2013-7-6", - source = "http://code.google.com/p/buptthesis/", - language = "chs" -} - -@BOOK{Miroslav2003--, - AUTHOR = {Miroslav, D. L. and Dejan, V. T.}, - TRANSLATOR = {朱义胜 and 董辉}, - LANGUAGE = {chinese}, - LOCATION = {北京}, - PUBLISHER = {电子工业出版社}, - DATE = {2003-01}, - TITLE = {信号处理滤波器设计方法}, -} - -@ARTICLE{于潇2011-15-23, - AUTHOR = {于潇 and 刘义 and 柴跃廷 and others}, - DATE = {2011}, - JOURNALTITLE = {清华大学学报}, - NUMBER = {11}, - PAGES = {15--23}, - TITLE = {互联网药品可信交易环境中主体资质审核备案模式}, - VOLUME = {52}, -} - -@INBOOK{姚中秋2008--, - AUTHOR = {姚, 中秋}, - BOOKAUTHOR = {罗, 卫东 and 姚, 中秋}, - LOCATION = {杭州}, - PUBLISHER = {浙江大学出版社}, - BOOKTITLE = {中国转型的理论分析}, - DATE = {2008}, - PAGES = {44}, - TITLE = {一种制度变迁模式}, -} - -@Newspaper{张田勤2000--, - Title = {犯罪DNA库与生命伦理学计划}, - Author = {张田勤}, - year = {{2000-11-12}}, - Journaltitle = {大众科技报}, - Note = {news}, - Number = {7} -} - -@Www{萧钰2001--, - Title = {出版业信息化迈入快车道}, - Author = {萧钰}, - Url = {http://www.creader.com/news/20011219/200112190019.html}, - Urldate = {2002-04-15}, - Date = {2001-12-19} -} -@Patent{刘加林1993--, - Title = {多功能一次性压舌板}, - Author = {刘加林}, - year = {{1993-04-14}}, - Number = {92214985.2}, - Location = {中国发明专利} -} - -@PhdThesis{张若凌2004--, - Title = {高超声速非平衡流动的计算和实验研究}, - Author = {张若凌}, - School = {中国空气动力研究与发展中心}, - Year = {2004}, - Location = {绵阳} -} - - diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py deleted file mode 100644 index ff6a76fbd70..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py +++ /dev/null @@ -1,2059 +0,0 @@ -#!/usr/bin/env python - -""" -A python script to modify bib data and -to display references with specific bibliography standard - -two key features: - -两大核心功能 -1. bib文件抽取,bib文件内容的自定义修改 -2. 格式化文献表输出,包括json,bib,text,html,bbl文件,其中bbl文件可以在tex源代码中直接使用,利用natbib宏包可以实现不同的标注样式。 - - -""" - -__author__ = "Hu zhenzhen" -__version__ = "1.0" -__license__ = "MIT" -__email__ = "hzzmail@163.com" - -import string -import re -import sys -import datetime -import copy -import json -import operator - - - -# -# 为数据map设置参数 -# 选项的逻辑与biblatex基本一致, -# 差别包括:overwrite选项可以放到step步中表示 -#[]=maps -#[[],[]]=map in maps -#[[[]],[]]=step in map in mpas -#[[[{optionkey: }]],[]]=step in map in mpas -#注意python正则表达方式与perl的略有不同,比如unicode表示 -#python用\xHH,\uHHHH,\UHHHHHHHH表示,而perl直接用\x{HHHH}表示。 -sourcemaps=[#maps - [#map1:将ELECTRONIC类型转换为online类型 - [{"typesource":"ELECTRONIC","typetarget":"online"}]#step1 - ], - [#map2:将source域转换为url域 - [{"fieldsource":"source","fieldtarget":"url"}]#step1 - ], - [#map3:将urldate域的信息“yyyy-m-d”转换为“yyyy-mm-dd”,注意正则表达式直接写不用在外面套"" - [{"fieldsource":"urldate","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3'}]#step1 - ], - [#map4:将urldate域的信息“yyyy-m-d”转换为“yyyy-mm-dd”,注意正则表达式直接写不用在外面套"" - [{"fieldsource":"date","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3',"overwrite":True}]#step1 - ], - [#map5:将refdate域转换为urldate域 - [{"fieldsource":"refdate","fieldtarget":"urldate"}]#step1 - ], - [#map6:对于newspaper类型,设置note为news - [{"pertype":"newspaper"}],#step1 - [{"fieldset":"note","fieldvalue":"news","overwrite":True}]#step2 - ], - [#map7:设置edition域等于version - [{"fieldsource":"version","final":True}],#step1 - [{"fieldset":"edition","origfieldval":True}]#step2 - ], - [#map8:设置entrykey域设置给keywords - [{"fieldsource":"entrykey"}],#step1 - [{"fieldset":"keywords","origfieldval":True}]#step2 - ], - [#map9:对于存在note域的情况,将其值添加到keywords - [{"fieldsource":"note","final":True}],#step1 - [{"fieldset":"keywords","origfieldval":True,"overwrite":True,"append":True}]#step2 - ], - [#map10:根据标题的字符编码范围确定标题的语言类型 - [{"fieldsource":"title","match":r'[\u2FF0-\u9FA5]',"final":True}],#step1 - [{"fieldset":"userd","fieldvalue":"chinese"}]#step2 - ], -] - -#重设新的任务处理 -sourcemaps=[ - [#map1:设置entrykey域设置给keywords - [{"fieldsource":"entrykey"}],#step1 - [{"fieldset":"keywords","origfieldval":True,"overwrite":True}]#step2 - ], -] - - -#重设新的任务 -sourcemaps=[ - [#map1:取消note域 - [{"fieldsource":"note","final":True}],#step1 - [{"fieldset":"note","null":True,"overwrite":True}]#step2 - ], - [#map2:取消abstract域 - [{"fieldsource":"abstract","final":True}],#step1 - [{"fieldset":"abstract","null":True,"overwrite":True}]#step2 - ], - [#map3:取消keywords域 - [{"fieldsource":"keywords","final":True}],#step1 - [{"fieldset":"keywords","null":True,"overwrite":True}]#step2 - ], - [#map4:取消keywords-plus域 - [{"fieldsource":"keywords-plus","final":True}],#step1 - [{"fieldset":"keywords-plus","null":True,"overwrite":True}]#step2 - ], - [#map5:取消affiliation域 - [{"fieldsource":"affiliation","final":True}],#step1 - [{"fieldset":"affiliation","null":True,"overwrite":True}]#step2 - ], - [#map6:取消funding-acknowledgement域 - [{"fieldsource":"funding-acknowledgement","final":True}],#step1 - [{"fieldset":"funding-acknowledgement","null":True,"overwrite":True}]#step2 - ], - [#map7:取消funding-text域 - [{"fieldsource":"funding-text","final":True}],#step1 - [{"fieldset":"funding-text","null":True,"overwrite":True}]#step2 - ], - ] - -#重设不处理 -sourcemaps=[] - - -##------------------------------------------ -## 参考文献表的制定格式设置,比如GB/T 7714-2015 -## - -#全局选项 -formatoptions={ -"style":'authoryear',#写bbl信息的设置选项,authoryear,'numeric' -"nameformat":'uppercase',#姓名处理选项:uppercase,lowercase,given-family,family-given,pinyin -"giveninits":'space',#使用名的缩写,space表示名见用空格分隔,dotspace用点加空格,dot用点,terse无分隔,false不使用缩写 -"maxbibnames":3,# -"minbibnames":3,# -"morenames":True,# -"maxbibitems":1,# -"minbibitems":1,# -"moreitems":False,# -"date":'year',#'日期处理选项':year,iso,等 -"urldate":'iso',#'日期处理选项':year,iso,等 -} - -#本地化字符串 -localstrings={ -'andothers':{'english':'et al.','chinese':'等'}, -'and':{'english':' and ','chinese':'和'}, -'edition':{'english':'th ed','chinese':'版'},#th ed. 中的点不要,为方便标点处理 -'in':{'english':'in: ','chinese':'见: '}, -'nolocation':{'english':'[S.l.]','chinese':'[出版地不详]'}, -'nopublisher':{'english':'[s.n.]','chinese':'[出版者不详]'}, -'bytranslator':{'english':'trans by','chinese':'译'}, -} - -#标点 -localpuncts={ -'multinamedelim':', ', -'finalnamedelim':', ', -'andothorsdelim':', ', -'finalitemdelim':', ', -'multiitemdelim':', ', -} - -#替换字符串 -replacestrings={ -'[出版地不详]: [出版者不详]':'[出版地不详 : 出版者不详]', -'[S.l.]: [s.n.]':'[S.l. : s.n.]', -'..':'.', -} - -#类型和载体字符串 -typestrings={ -'book':'[M]', -'inbook':'[M]', -'standard':'[S]', -'periodical':'[J]', -'article':'[J]', -'newspaper':'[N]', -'patent':'[P]', -'online':'[EB]', -'www':'[EB]', -'electronic':'[EB]', -'proceedings':'[C]', -'inproceedings':'[C]', -'conference':'[C]', -'collection':'[G]', -'incollection':'[G]', -'thesis':'[D]', -'mastersthsis':'[D]', -'phdthesis':'[D]', -'report':'[R]', -'techreport':'[R]', -'manual':'[A]', -'archive/manual':'[A]', -'database':'[DB]', -'dataset':'[DS]', -'software':'[CP]', -'map':'[CM]', -'unpublished':'[Z]', -'misc':'[Z]', -} - -#数据类型 -datatypeinfo={ -'namelist':['author','editor','translator','bookauthor'], -'literallist':['location','address','publisher','institution','organization','school','language','keywords'], -'literalfield':['title','journaltitle','journal','booktitle','subtitle','titleaddon','edition','version','url', - 'volume','number','endvolume','endnumber','type','note','labelnumber'], -'datefield':['date','year','urldate','enddate','origdate','eventdate'], -'rangefield':['pages'] -} - -#条目的著录格式 -bibliographystyle={ -"book":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['translator'],'options':{'nameformat':'uppercase'},'prepunct':". ",'posstring':r', \bibstring{bytranslator}'}, -{"fieldsource":['edition'],'numerformat':'arabic','prepunct':". ","posstringifnumber":r'\bibstring{edition}'}, -{"fieldsource":['location','address'],'prepunct':". ",'replstring':r"\bibstring{nolocation}"}, -{"fieldsource":['publisher'],'prepunct':": ",'replstring':r"\bibstring{nopublisher}",'prepunctifnolastfield':'. '}, -{"fieldsource":['date','year'],'prepunct':", "}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". ",'prestring':r'\url{','posstring':'}'}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"article":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['journaltitle','journal'],'prepunct':". "}, -{"fieldsource":['year','date'],'prepunct':", "}, -{"fieldsource":['volume'],'prepunct':", "}, -{"fieldsource":['number'],'prestring':"(",'posstring':")"}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". "}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"newspaper":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['journaltitle','journal'],'prepunct':". "}, -{"fieldsource":['date','year'],'prepunct':", ",'options':{'date':'iso'}}, -{"fieldsource":['number'],'prestring':"(",'posstring':")"}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". "}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"inbook":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['in'],'replstring':"//",'omitifnofield':['bookauthor','editor','booktitle']}, -{"fieldsource":['bookauthor','editor'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['booktitle'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':''}, -{"fieldsource":['edition'],'numerformat':'arabic','prepunct':". ","posstring":r'\bibstring{edition}'}, -{"fieldsource":['location','address'],'prepunct':". ",'replstring':r"\bibstring{nolocation}"}, -{"fieldsource":['publisher'],'prepunct':": ",'replstring':r"\bibstring{nopublisher}",'prepunctifnolastfield':'. '}, -{"fieldsource":['date','year'],'prepunct':", "}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". "}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"inproceedings":"inbook", -"incollection":"inbook", -"standard":"inbook", -"proceedings":"book", -"collection":"book", -"patent":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['number'],'prepunct':": "}, -{"fieldsource":['date','year'],'prepunct':", "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". "}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"online":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['organization','instiution'],'prepunct':". "}, -{"fieldsource":['date','year'],'prepunct':", ",'prepunctifnolastfield':'. ','omitifnofield':['enddate','eventdate']}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['date','enddate','eventdate'],'prepunct':". ",'options':{"date":"iso",'eventdate':'iso'},'prestring':"(","posstring":")"}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]",'prepunctifnolastfield':'. '}, -{"fieldsource":['url'],'prepunct':". ",'prepunctifnolastfield':''}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"www":"online", -"electronic":"online", -"report":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['translator'],'options':{'nameformat':'uppercase'},'prepunct':". "}, -{"fieldsource":['type'],'prepunct':". "}, -{"fieldsource":['number'],'prepunct':"",'prepunctifnolastfield':'. '}, -{"fieldsource":['version'],'prepunct':". "}, -{"fieldsource":['location','address'],'prepunct':". ",'replstring':r"\bibstring{nolocation}"}, -{"fieldsource":['institution','publisher'],'prepunct':": ",'replstring':r"\bibstring{nopublisher}",'prepunctifnolastfield':'. '}, -{"fieldsource":['date','year'],'prepunct':", ",'omitifnofield':['location','address','institution','publisher'],'omitiffield':['url']}, -{"fieldsource":['date','year'],'prepunct':". ",'prestring':'(','posstring':')','omitiffield':['location','address','institution','publisher']}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". "}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"techreport":"report", -"periodical":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['editor','author'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['year','date'],'prepunct':", "}, -{"fieldsource":['volume'],'prepunct':", "}, -{"fieldsource":['number'],'prestring':"(",'posstring':")-"}, -{"fieldsource":['endyear','enddate'],'prepunct':", "}, -{"fieldsource":['endvolume'],'prepunct':", "}, -{"fieldsource":['endnumber'],'prestring':"(",'posstring':")"}, -{"fieldsource":['location','address'],'prepunct':". ",'replstring':r"\bibstring{nolocation}"}, -{"fieldsource":['institution','publisher'],'prepunct':": ",'replstring':r"\bibstring{nopublisher}",'prepunctifnolastfield':'. '}, -{"fieldsource":['year','date'],'prepunct':", ",'posstring':'-'}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". "}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -#omitifnofield:必须所有的域都不存在才为true -#omitiffield:只要存在一个域就为true -"thesis":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['translator'],'options':{'nameformat':'uppercase'},'prepunct':". "}, -{"fieldsource":['location','address'],'prepunct':". "}, -{"fieldsource":['institution','publisher','school'],'prepunct':": ",'prepunctifnolastfield':'. '}, -{"fieldsource":['date','year'],'prepunct':", ",'omitifnofield':['location','address','institution','publisher'],'omitiffield':['url']}, -{"fieldsource":['date','year'],'prepunct':". ",'prestring':'(','posstring':')','omitiffield':['location','address','institution','publisher']}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". ",'prestring':r'\url{','posstring':'}'}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"manual":"thesis", -"unpublished":"thesis", -"database":"thesis", -"dataset":"thesis", -"software":"thesis", -"map":"thesis", -"archive":"thesis", -"misc":[ -#{"fieldsource":["labelnumber"],'prestring':"[","posstring":"]","pospunct":" "}, -{"fieldsource":['author','editor','translator'],'options':{'nameformat':'uppercase'}}, -{"fieldsource":['title'],'caseformat':'sentencecase','prepunct':". ",'prepunctifnolastfield':'','posstring':r"\typestring"}, -{"fieldsource":['howpublished'],'prepunct':". "}, -{"fieldsource":['location','address'],'prepunct':". "}, -{"fieldsource":['institution','publisher'],'prepunct':": ",'prepunctifnolastfield':'. '}, -{"fieldsource":['date','year'],'prepunct':", "}, -{"fieldsource":['pages'],'prepunct':": "}, -{"fieldsource":['urldate'],'prestring':"[","posstring":"]"}, -{"fieldsource":['url'],'prepunct':". "}, -{"fieldsource":['doi'],'prepunct':". "}, -{"fieldsource":['endpunct'],'replstring':"."} -], -"phdthesis":"thesis", -"mastersthesis":"thesis", -} - - -# -# -#打印格式化后的全部文献条目文本 -def printbibliography(): - - bibliographyentries=bibliographytext.split('\n') - - #md文件输出,直接用write写 - mdoutfile="newformatted"+inputbibfile.replace('.bib','.md') - fout = open(mdoutfile, 'w', encoding="utf8") - print("INFO: writing cited references to '" + mdoutfile + "'") - - biblabelnumber=0 - for prtbibentry in bibliographyentries: - if len(prtbibentry)>0: - biblabelnumber=biblabelnumber+1 - fout.write('['+str(biblabelnumber)+'] '+prtbibentry+'\n') - fout.close() - - #html文件输出,直接用write写 - mdoutfile="newformatted"+inputbibfile.replace('.bib','.html') - fout = open(mdoutfile, 'w', encoding="utf8") - print("INFO: writing cited references to '" + mdoutfile + "'") - fout.write('<html><head><title>references</title></head>') - fout.write('<body bgcolor="lightgray"><div align="top"><center>') - fout.write('<font color="blue">') - fout.write('<table border="0" cellPadding="10" cellSpacing="5" height="400" width="70%">') - fout.write('<tr><td height="1" width="566" align="center" colspan="1" bgcolor="teal"></td></tr>') - - biblabelnumber=0 - for prtbibentry in bibliographyentries: - if len(prtbibentry)>0: - biblabelnumber=biblabelnumber+1 - fout.write('<tr> <td width="480" height="15" colspan="6"><font color="blue">') - fout.write('<span style="font-family: 宋体; font-size: 14">') - fout.write('['+str(biblabelnumber)+'] '+prtbibentry) - fout.write('</span></font></td> </tr>') - - fout.write('<tr><td height="1" width="566" align="center" colspan="1" bgcolor="teal"></td></tr>') - fout.write('</table></div></body></html>') - fout.close() - - if auxfile: - bblfile=auxfile.replace('.aux','.bbl') - else: - bblfile=inputbibfile.replace('.bib','.bbl') - bbloutfile=bblfile - fout = open(bbloutfile, 'w', encoding="utf8") - print("INFO: writing cited references to '" + bbloutfile + "'") - - fout.write(r'\begin{thebibliography}{'+str(len(bibentries))+'}\n') - - biblabelnumber=0 - for prtbibentry in bibliographyentries: - if len(prtbibentry)>0: - biblabelnumber=biblabelnumber+1 - - entrysn=0 - for bibentry in bibentries: - entrysn=entrysn+1 - if entrysn==biblabelnumber: - entrykeystr=bibentry['entrykey'] - entryciteauthor=formatlabelauthor(bibentry) - entryciteyear=formatlabelyear(bibentry) - entrycitelabel=entryciteauthor[0]+'('+entryciteyear+')'+entryciteauthor[1] - #Baker et~al.(1995)Baker and Jackson - break - if formatoptions['style']=='authoryear': - fout.write(r'\bibitem['+entrycitelabel+']{'+entrykeystr+'}'+prtbibentry+'\n') - else: - fout.write(r'\bibitem['+str(biblabelnumber)+']{'+entrykeystr+'}'+prtbibentry+'\n') - - fout.write(r'\end{thebibliography}') - fout.close() - - - -# -#authoryear样式提供标注标签的作者信息 -# -def formatlabelauthor(bibentry): - - if 'author' in bibentry: - namelist=bibentry['author'] - elif 'editor' in bibentry: - namelist=bibentry['editor'] - elif 'translator' in bibentry: - namelist=bibentry['translator'] - else: - namelist='Anon' - - return [namelist,namelist] - -# -#authoryear样式提供标注标签的年份信息 -# -def formatlabelyear(bibentry): - - if 'year' in bibentry: - yearlist=bibentry['year'] - elif 'eventyear' in bibentry: - yearlist=bibentry['eventyear'] - elif 'origyear' in bibentry: - yearlist=bibentry['origyear'] - elif 'urlyear' in bibentry: - yearlist=bibentry['urlyear'] - else: - yearlist='N.D.' - - return yearlist - -# -# -#格式化全部文献条目文本 -def formatallbibliography(): - labelnumber=0 - global bibliographytext - bibliographytext='' - for bibentry in bibentries: - labelnumber=labelnumber+1 - bibentry['labelnumber']=labelnumber - bibentrytext='' - bibentrytext=formatbibentry(bibentry) - bibliographytext=bibliographytext+bibentrytext+'\n' - - print('\nreferecences') - print(bibliographytext) - -# -# -#格式化一个文献条目文本 -def formatbibentry(bibentry): - - print('--------------new entry---------') - print('\nbibentry:',bibentry) - #bibentrytext='entry:' - - # - # 由于volume和number域可能存在范围的特殊情况,首先做特殊处理 - # - if 'volume' in bibentry: - if '-' in bibentry['volume']: - multivolume=bibentry['volume'].split("-") - bibentry['volume']=multivolume[0] - bibentry['endvolume']=multivolume[1] - if 'number' in bibentry: - if '-' in bibentry['number']: - multinumber=bibentry['number'].split("-") - bibentry['number']=multinumber[0] - bibentry['endnumber']=multinumber[1] - - #四种日期域也做范围解析 - if 'date' in bibentry: - if '/' in bibentry['date']: - datestring=bibentry['date'].split('/') - bibentry['date']=datestring[0] - bibentry['enddate']=datestring[1] - - if 'urldate' in bibentry: - if '/' in bibentry['urldate']: - datestring=bibentry['urldate'].split('/') - bibentry['urldate']=datestring[0] - bibentry['endurldate']=datestring[1] - - if 'eventdate' in bibentry: - if '/' in bibentry['eventdate']: - datestring=bibentry['eventdate'].split('/') - bibentry['eventdate']=datestring[0] - bibentry['endeventdate']=datestring[1] - - if 'origdate' in bibentry: - if '/' in bibentry['origdate']: - datestring=bibentry['origdate'].split('/') - bibentry['origdate']=datestring[0] - bibentry['endorigdate']=datestring[1] - - # - #接着处理所有域到一个条目文本 - # - bibentrytext='' - - if bibentry['entrytype'] in bibliographystyle: - print('INFO: format style of entrytype',bibentry['entrytype'],'is defined.') - if isinstance(bibliographystyle[bibentry['entrytype']],str): - formattype=bibliographystyle[bibentry['entrytype']] - else: - formattype=bibentry['entrytype'] - - lastfield=True #前一域存在 - - for fieldinfo in bibliographystyle[formattype]: - - rtnfield=formatfield(bibentry,fieldinfo,lastfield) - fieldtext=rtnfield[0] - lastfield=rtnfield[1] - - bibentrytext=bibentrytext+fieldtext - - #对替换字符串做处理 - #包括对重复的标点做处理比如:..变为. - for k,v in replacestrings.items(): - print(k,v) - #m=re.search(k,bibentrytext) - #print(m) - #bibentrytext=re.sub(k,v,bibentrytext) - #利用正则反而不行,直接用字符串替换 - bibentrytext=bibentrytext.replace(k,v) - - print(bibentrytext) - return bibentrytext - - - -# -# -#格式化文献条目的域 -#不同类型的域不同处理 -#分5类:姓名列表,文本列表,文本域,日期域,范围域 -#其中姓名列表,文本列表,日期域,日期域,范围域,都需要进行特殊的解析 -#而volume,number如果需要特殊解析则在文件域的格式处理时增加新的处理逻辑。 -def formatfield(bibentry,fieldinfo,lastfield): - - print('fieldinfo:',fieldinfo) - #首先把域的内容先解析处理 - fieldcontents='' - - fieldsource=None - - #首先判断域是否忽略 - fieldomit=False - - if 'omitifnofield' in fieldinfo and 'omitiffield' in fieldinfo: - - fieldomita=True#假设忽略的条件满足 - for field in fieldinfo['omitifnofield']:#只要需要不存在的域有一个存在,那么条件就不满足 - if field in bibentry: - fieldomita=False - break - - fieldomitb=False#假设忽略的条件不满足 - for field in fieldinfo['omitiffield']:#只要需要存在的域中有一个存在,那么条件就满足 - if field not in bibentry: - fieldomitb=True - break - - fieldomit=fieldomita and fieldomitb - - elif 'omitifnofield' in fieldinfo: - - fieldomit=True#假设忽略的条件满足 - for field in fieldinfo['omitifnofield']:#只要需要不存在的域有一个存在,那么条件就不满足 - if field in bibentry: - fieldomit=False - break - - elif 'omitiffield' in fieldinfo: - - fieldomit=False#假设忽略的条件不满足 - for field in fieldinfo['omitiffield']:#只要需要存在的域中有一个存在,那么条件就满足 - if field not in bibentry: - fieldomit=True - break - - print(fieldomit) - - - #如果不忽略该域那么: - if not fieldomit: - - #当域为姓名列表域时: - if fieldinfo['fieldsource'][0] in datatypeinfo['namelist']: - #print('0',fieldinfo['fieldsource'][0]) - #print('author' in bibentry) - for field in fieldinfo['fieldsource']:# - #print(fieldinfo['fieldsource']) - #print('namelist:',field) - if field in bibentry:#当域存在域条目中时,确定要处理的域 - fieldsource=field - break - if fieldsource: - #传递条目给出的一些控制选项 - if 'options' in fieldinfo: - options=fieldinfo['options'] - else: - options={} - fieldcontents=namelistparser(bibentry,fieldsource,options) - - - #当域为文本列表域时: - elif fieldinfo['fieldsource'][0] in datatypeinfo['literallist']: - - for field in fieldinfo['fieldsource']:# - if field in bibentry:#当域存在域条目中时,确定要处理的域 - fieldsource=field - break - if fieldsource: - fieldcontents=literallistparser(bibentry,fieldsource) - - #当域为文本域时: - elif fieldinfo['fieldsource'][0] in datatypeinfo['literalfield']: - - for field in fieldinfo['fieldsource']:# - if field in bibentry:#当域存在域条目中时,确定要处理的域 - fieldsource=field - break - if fieldsource: - fieldcontents=literalfieldparser(bibentry,fieldsource) - - - #当域为日期域时: - elif fieldinfo['fieldsource'][0] in datatypeinfo['datefield']: - - for field in fieldinfo['fieldsource']:# - if field in bibentry:#当域存在域条目中时,确定要处理的域 - fieldsource=field - break - if fieldsource: - #传递条目给出的一些控制选项 - if 'options' in fieldinfo: - options=fieldinfo['options'] - else: - options={} - fieldcontents=datefieldparser(bibentry,fieldsource,options) - - - #当域为范围域时: - elif fieldinfo['fieldsource'][0] in datatypeinfo['rangefield']: - - for field in fieldinfo['fieldsource']:# - if field in bibentry:#当域存在域条目中时,确定要处理的域 - fieldsource=field - break - if fieldsource: - fieldcontents=rangefieldparser(bibentry,fieldsource) - - if not fieldsource: - if 'replstring' in fieldinfo and fieldinfo['replstring']: - print('replstring') - fieldsource=True - fieldcontents=fieldinfo['replstring'] - - - #接着做进一步的格式化,包括标点,格式,字体等 - fieldtext='' - - print(fieldsource) - if fieldsource: - if lastfield:#当前一个著录项存在,则正常输出 - if 'prepunct' in fieldinfo: - fieldtext=fieldtext+fieldinfo['prepunct'] - else:#当前一个著录项不存在,则首先输出'prepunctifnolastfield' - if 'prepunctifnolastfield' in fieldinfo: - fieldtext=fieldtext+fieldinfo['prepunctifnolastfield'] - elif 'prepunct' in fieldinfo: - fieldtext=fieldtext+fieldinfo['prepunct'] - - if 'prestring' in fieldinfo: - fieldtext=fieldtext+fieldinfo['prestring'] - - if 'fieldformat' in fieldinfo: - fieldtext=fieldtext+'{'+fieldinfo['fieldformat']+'{'+fieldcontents+'}}' - else: - fieldtext=fieldtext+str(fieldcontents) - - if 'posstring' in fieldinfo: - fieldtext=fieldtext+fieldinfo['posstring'] - - if 'posstringifnumber' in fieldinfo: - try: - numtemp=int(fieldcontents) - if isinstance(numtemp,int): - fieldtext=fieldtext+fieldinfo['posstringifnumber'] - except: - print('info:waring the field value can not convert to integer') - - if 'pospunct' in fieldinfo: - fieldtext=fieldtext+fieldinfo['pospunct'] - - #更新lastfiled - lastfield=True - else: - lastfield=False - - - #自定义标点的处理 - print('fieldtext:',fieldtext) - while r'\printdelim' in fieldtext: - - m = re.search(r'\\printdelim{([^\}]*)}',fieldtext)#注意贪婪算法的影响,所以要排除\}字符 - print('m.group(1):',m.group(1)) - fieldtext=re.sub(r'\\printdelim{[^\}]*}',localpuncts[m.group(1)],fieldtext,count=1) - print('fieldtext:',fieldtext) - - - #本地化字符串的处理 - print('fieldtext:',fieldtext) - while r'\bibstring' in fieldtext: - - language=languagejudgement(bibentry,fieldinfo,fieldsource) - m = re.search(r'\\bibstring{([^\}]*)}',fieldtext)#注意\字符的匹配,即便是在r''中也需要用\\表示 - fieldtext=re.sub(r'\\bibstring{[^\}]*}',localstrings[m.group(1)][language],fieldtext,count=1) - print('fieldtext:',fieldtext) - #下面这句不行因为,在字典取值是,不支持\1这样的正则表达式 - #fieldtext=re.sub(r'\\bibstring{(.*)}',localstrings[r'\1'][language],fieldtext,count=1) - - #标题的类型和载体标识符的处理 - if r'\typestring' in fieldtext:#当需要处理类型和载体时 - if bibentry['entrytype'] in typestrings:#当条目对应的类型存在时 - print(r'\typestring in',fieldtext) - typestring=typestrings[bibentry['entrytype']] - if 'url' in bibentry: - typestring=typestring.replace(']','/OL]') - elif 'medium' in bibentry: - rplctypestring=bibentry['medium']+']' - typestring=typestring.replace(']',rplctypestring) - else:#当条目对应的类型不存在时,当做其它类型处理 - typestring='[Z]' - - print(typestring) - fieldtext=fieldtext.replace(r'\typestring',typestring) - - return [fieldtext,lastfield] - - - - - -# -#根据作者域或者标题域确定条目的语言 -# -def languagejudgement(bibentry,fieldinfo,fieldsource): - - if fieldsource in datatypeinfo['namelist']:#当域是作者类时,利用作者域本身信息做判断 - - language=fieldlanguage(bibentry[fieldsource]) - - else:#其它情况,利用title域做判断 - if 'title' in bibentry: - language=fieldlanguage(bibentry['title']) - elif 'author' in bibentry: - language=fieldlanguage(bibentry['author']) - else: - language='english' - - return language - - -# -#根据域值所在的字符范围确定域的语言 -# -def fieldlanguage(fieldvalueinfo): - - if re.match(r'[\u2FF0-\u9FA5]', fieldvalueinfo): - language='chinese' - elif re.match(r'[\u3040-\u30FF\u31F0}-\u31FF]', fieldvalueinfo): - language='japanese' - elif re.match(r'[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AF]', fieldvalueinfo): - language='korean' - elif re.match(r'[\u0400-\u052F]', fieldvalueinfo): - language='russian' - elif re.match(r'[\u0100-\u017F]', fieldvalueinfo): - language='french' - else: - language='english' - - return language - - -# -# -#对存在{}做保护的字符串进行分割 -def safetysplit(strtosplt,seps): - - #首先查找{}保护的所有字符串 - s1=re.findall('\{.*?\}',strtosplt) - - #接着确定保护字符串中是否存在分割用字符串 - sepinbrace=False - for s1a in s1: - for sep in seps: - if sep in s1a: - sepinbrace=True - break - if sepinbrace: - break - #print(sepinbrace) - - #若保护字符串中存在分割字符串那么做特殊处理 - a=strtosplt - if sepinbrace: - - #保护字符串用特殊字符串代替,特殊字符串与分割字符串没有任何关联 - strsn=0 - for stra1 in s1: - strsn=strsn+1 - a=a.replace(stra1,'$'+str(strsn)+'$') - #print(a) - - #处理原字符串为只需要一个分隔字符串就能分隔 - if len(seps)>1: - for i in range(1,len(seps)): - a=a.replace(seps[i],seps[0]) - #print(a) - - #接着做分割 - names=a.split(seps[0]) - #print(names) - - #对分割后的字符串做还原,即把特殊字符串还原回保护字符串 - namesnew=[] - for name in names: - strsn=0 - for stra1 in s1: - strsn=strsn+1 - name=name.replace('$'+str(strsn)+'$',stra1) - #print(name) - namesnew.append(name.strip().lstrip()) - - else: - #处理原字符串为只需要一个分隔字符串就能分隔 - if len(seps)>1: - for i in range(1,len(seps)): - a=a.replace(seps[i],seps[0]) - #print(a) - - #直接分割 - names=a.split(seps[0]) - namesnew=[] - for name in names: - namesnew.append(name.strip().lstrip()) - - #print(namesnew) - return namesnew - -# -# -#姓名列表解析 -#增加条目给出的选项 -def namelistparser(bibentry,fieldsource,options): - fieldcontents=bibentry[fieldsource] - - #首先做针对{}保护的处理 - #{}有可能保护一部分,有可能保护全部 - #首先判断{}是否存在,若存在,那么可以确定需要做保护处理,否则用常规处理 - #当然这些事情可以在一个函数中处理 - - #首先姓名列表进行分解,包括用' and '和' AND '做分解 - #利用safetysplit函数实现安全的分解 - seps=[' and ',' AND '] - fieldcontents=fieldcontents.lstrip().strip() - fieldauthors=safetysplit(fieldcontents,seps) - - print('fieldauthors:',fieldauthors) - #接着从各个姓名得到更详细的分解信息 - fieldnames=[] - for name in fieldauthors: - if name.lower() == 'others': - nameinfo={'morename':True} - else: - if fieldlanguage(name)=='chinese':#当中文姓名中存在逗号先去除 - if ', ' in name: - name=name.replace(', ','') - else: - pass - nameinfo=singlenameparser(name) - fieldnames.append(nameinfo) - - #最后根据全局和局部选项进行格式化 - nameformattedstr='' - - #根据'maxbibnames'和'minbibnames'截短 - if 'maxbibnames' in options:#首先使用条目中的选项 - if len(fieldnames)>options['maxbibnames']: - fieldnamestrunc=fieldnames[:options['minbibnames']] - nameinfo={'morename':True} - fieldnamestrunc.append(nameinfo) - else: - fieldnamestrunc=fieldnames - elif 'maxbibnames' in formatoptions:#接着使用全局选项 - if len(fieldnames)>formatoptions['maxbibnames']: - fieldnamestrunc=fieldnames[:formatoptions['minbibnames']] - nameinfo={'morename':True} - fieldnamestrunc.append(nameinfo) - else: - fieldnamestrunc=fieldnames - else: - fieldnamestrunc=fieldnames - - #当条目选择中存在'nameformat' - if 'nameformat' in options: - option={'nameformat':options['nameformat']} - else: - option={} - - print('fieldnamestrunc:',fieldnamestrunc) - nameliststop=len(fieldnamestrunc) - nameliststart=1 - namelistcount=0 - for nameinfo in fieldnamestrunc: - namelistcount=namelistcount+1 - if 'morename' in nameinfo: - if formatoptions['morenames']:#只有设置morenames为true是才输出other的相关信息 - nameformattedstr=nameformattedstr+r'\printdelim{andothorsdelim}\bibstring{andothers}' - else: - if namelistcount==nameliststop and namelistcount>1:#当没有others时最后一个姓名前加的标点 - nameformattedstr=nameformattedstr+r'\printdelim{finalnamedelim}'+singlenameformat(nameinfo,option) - elif namelistcount==nameliststart: - nameformattedstr=singlenameformat(nameinfo,option) - else: - nameformattedstr=nameformattedstr+r'\printdelim{multinamedelim}'+singlenameformat(nameinfo,option) - - return nameformattedstr - - -# -# -#单个姓名格式化 -def singlenameformat(nameinfo,option): - - singlenamefmtstr='' - - - if 'nameformat' in option:#首先使用条目给出的选项 - nameformat=option['nameformat'] - elif 'nameformat' in formatoptions:#接着使用全局的选项 - nameformat=formatoptions['nameformat'] - else:#最后使用默认的选项 - nameformat='uppercase' - - - #根据单个姓名格式化选项来实现具体的格式 - if nameformat=='uppercase': - - if nameinfo['family'].startswith('{'): - singlenamefmtstr=nameinfo['family'] - else: - singlenamefmtstr=nameinfo['family'].upper() - - #根据选项确定使用名的缩写 - if formatoptions["giveninits"]=='space':#space表示名见用空格分隔, - if 'given' in nameinfo: - singlenamefmtstr=singlenamefmtstr+' '+nameinfo['giveni'].upper() - if 'middle' in nameinfo: - singlenamefmtstr=singlenamefmtstr+' '+nameinfo['middlei'].upper() - elif formatoptions["giveninits"]=='dotspace':#dotspace用点加空格, - if 'given' in nameinfo: - singlenamefmtstr=singlenamefmtstr+' '+nameinfo['giveni'].upper() - if 'middle' in nameinfo: - singlenamefmtstr=singlenamefmtstr+'. '+nameinfo['middlei'].upper()+'.' - elif formatoptions["giveninits"]=='dot':#dot用点, - if 'given' in nameinfo: - singlenamefmtstr=singlenamefmtstr+' '+nameinfo['giveni'].upper() - if 'middle' in nameinfo: - singlenamefmtstr=singlenamefmtstr+'.'+nameinfo['middlei'].upper()+'.' - elif formatoptions["giveninits"]=='terse':#terse无分隔, - if 'given' in nameinfo: - singlenamefmtstr=singlenamefmtstr+' '+nameinfo['giveni'].upper() - if 'middle' in nameinfo: - singlenamefmtstr=singlenamefmtstr+nameinfo['middlei'].upper() - elif formatoptions["giveninits"]=='false':#false不使用缩写 - if 'given' in nameinfo: - singlenamefmtstr=singlenamefmtstr+' '+nameinfo['given'].upper() - if 'middle' in nameinfo: - singlenamefmtstr=singlenamefmtstr+' '+nameinfo['middle'].upper() - - - elif nameformat=='lowercase': - pass - elif nameformat=='given-family': - pass - elif nameformat=='family-given': - pass - elif nameformat=='pinyin': - pass - else: - pass - - return singlenamefmtstr - - -# -# -#单个姓名解析 -def singlenameparser(name): - - singlename=name - - print('name:',name) - - #字典用于存储所有的姓名成分信息 - namepartsinfo={} - - nameparts=safetysplit(singlename,[',']) - - if len(nameparts)==3:#两个逗号的情况,表示存在family和suffix - - prefixfamily=safetysplit(nameparts[0].lstrip().strip(),[' ']) - if len(prefixfamily)>1: - namepartsinfo['prefix']=prefixfamily[0].lstrip().strip() - namepartsinfo['family']=prefixfamily[1].lstrip().strip() - else: - namepartsinfo['family']=prefixfamily[0].lstrip().strip() - - namepartsinfo['suffix']=nameparts[1].lstrip().strip() - - - givenmiddle=safetysplit(nameparts[2].lstrip().strip(),[' ']) - if len(givenmiddle)>1: - namepartsinfo['given']=givenmiddle[0].lstrip().strip() - namepartsinfo['middle']=givenmiddle[1].lstrip().strip() - else: - namepartsinfo['given']=givenmiddle[0].lstrip().strip() - - elif len(nameparts)==2: - - prefixfamily=safetysplit(nameparts[0].lstrip().strip(),[' ']) - if len(prefixfamily)>1: - namepartsinfo['prefix']=prefixfamily[0].lstrip().strip() - namepartsinfo['family']=prefixfamily[1].lstrip().strip() - else: - namepartsinfo['family']=prefixfamily[0].lstrip().strip() - - - givenmiddle=safetysplit(nameparts[1].lstrip().strip(),[' ']) - if len(givenmiddle)>1: - namepartsinfo['given']=givenmiddle[0].lstrip().strip() - namepartsinfo['middle']=givenmiddle[1].lstrip().strip() - else: - namepartsinfo['given']=givenmiddle[0].lstrip().strip() - - else: - givenmiddlefamily=safetysplit(nameparts[0].lstrip().strip(),[' ']) - if len(givenmiddlefamily)==3: - namepartsinfo['given']=givenmiddlefamily[0].lstrip().strip() - namepartsinfo['middle']=givenmiddlefamily[1].lstrip().strip() - namepartsinfo['family']=givenmiddlefamily[2].lstrip().strip() - elif len(givenmiddlefamily)==2: - namepartsinfo['given']=givenmiddlefamily[0].lstrip().strip() - namepartsinfo['family']=givenmiddlefamily[1].lstrip().strip() - elif len(givenmiddlefamily)==1: - namepartsinfo['family']=givenmiddlefamily[0].lstrip().strip() - - - print('nameparts:',namepartsinfo) - - if 'family' in namepartsinfo: - if namepartsinfo['family'].startswith('{'): - namepartsinfo['familyi']=namepartsinfo['family'] - else: - namepartsinfo['familyi']=namepartsinfo['family'][0].upper() - - if 'given' in namepartsinfo: - #print(namepartsinfo['given']) - if namepartsinfo['given'].startswith('{'): - namepartsinfo['giveni']=namepartsinfo['given'] - else: - namepartsinfo['giveni']=namepartsinfo['given'][0].upper() - - if 'middle' in namepartsinfo: - if namepartsinfo['middle'].startswith('{'): - namepartsinfo['middle']=namepartsinfo['middle'] - else: - namepartsinfo['middlei']=namepartsinfo['middle'][0].upper() - - return namepartsinfo - -# -# -#文本列表解析 -def literallistparser(bibentry,fieldsource): - fieldcontents=bibentry[fieldsource] - - - #首先从文本列表分解出各个项,包括用' and '和' AND '做分解 - #利用safetysplit函数实现安全的分解 - seps=[' and ',' AND '] - fieldcontents=fieldcontents.lstrip().strip() - fielditems=safetysplit(fieldcontents,seps) - - print('fielditems:',fielditems) - - #根据'maxbibitems'和'minbibitems'截短 - fielditemstrunc=[] - - if len(fielditems)>formatoptions['maxbibitems']: - fielditemstrunc=fielditems[:formatoptions['minbibitems']] - fielditemstrunc.append('others') - else: - fielditemstrunc=fielditems - - #重设一下others的大小写,因为可能输入的时大写的 - if fielditems[-1].lower() == 'others': - fielditems[-1]='others' - - #最后根据全局和局部选项进行格式化 - itemliststop=len(fielditemstrunc) - itemliststart=1 - itemlistcount=0 - itemformattedstr='' - for iteminfo in fielditemstrunc: - itemlistcount=itemlistcount+1 - if iteminfo == 'others': - if formatoptions['moreitems']:#只有设置moreitems为true是才输出other的相关信息 - itemformattedstr=itemformattedstr+r'\printdelim{andothorsdelim}\bibstring{andothers}' - else: - if itemlistcount==itemliststop and itemlistcount>1:#当没有others时最后一个项前加标点 - itemformattedstr=itemformattedstr+r'\printdelim{finalitemdelim}'+iteminfo - elif itemlistcount==itemliststart: - itemformattedstr=iteminfo - else: - itemformattedstr=itemformattedstr+r'\printdelim{multiitemdelim}'+iteminfo - - return itemformattedstr - -# -# -#文本域解析 -def literalfieldparser(bibentry,fieldsource): - fieldcontents=bibentry[fieldsource] - - return fieldcontents - -# -# -#日期域解析 -#条目设置的选项options: -def datefieldparser(bibentry,fieldsource,options): - fieldcontents=bibentry[fieldsource] - - #首先从日期域,解析日期类型: - dateparts={} - if fieldsource=='year': - datestring=bibentry[fieldsource] - datetype='' - else: - datetype=fieldsource.replace('date','') - datestring=bibentry[fieldsource] - - - #日期的年月日解析 - #日期一般很少用{}进行保护,当保护的时候通常是整个进行包括,所以通常{}会出现在域的起始和末尾 - #所以当出现{字符时通常不用再做解析 - if '{' in datestring: - datepartinfo=[datestring] - else: - datepartinfo=datestring.split('-') - - if len(datepartinfo)==3: - dateparts[datetype+'year']=datepartinfo[0].strip().lstrip() - dateparts[datetype+'month']=datepartinfo[1].strip().lstrip() - dateparts[datetype+'day']=datepartinfo[2].strip().lstrip() - elif len(datepartinfo)==2: - dateparts[datetype+'year']=datepartinfo[0].strip().lstrip() - dateparts[datetype+'month']=datepartinfo[1].strip().lstrip() - else: - dateparts[datetype+'year']=datepartinfo[0].strip().lstrip() - - print(dateparts) - - #判断解析的年月日是不是整数,若不是则表示日期不可解析 - datecanbeparse=True - for k,v in dateparts.items(): - try: - datepartisint=isinstance(int(v),int) - except: - print('INFO: WARNING'+fieldsource+'can not be parsed') - datecanbeparse=False - break - - - #然后根据全局选项进行格式化: - #如果解析的年月日不是整数,那么对于date域则忽略,对于year域则直接输出 - if datecanbeparse: - if datetype+'date' in options:#首先使用条目给出的选项 - fieldcontents=singledateformat(dateparts,datetype,options[datetype+'date']) - elif datetype+'date' in formatoptions:#接着使用全局给出的选项 - fieldcontents=singledateformat(dateparts,datetype,formatoptions[datetype+'date']) - else:#否则使用默认选项 - fieldcontents=singledateformat(dateparts,datetype,'default') - else: - if fieldsource=='year': - fieldcontents=bibentry[fieldsource] - else: - fieldcontents='' - - return fieldcontents - - -# -# -# 根据日期的设置选项格式化单个日期 -def singledateformat(dateparts,datetype,formatoption): - if formatoption=='year': - dateformatstr=dateparts[datetype+'year'] - elif formatoption=='iso': - dateformatstr=dateparts[datetype+'year'] - if len(dateparts[datetype+'month'])<2: - dateformatstr=dateformatstr+'-0'+dateparts[datetype+'month'] - else: - dateformatstr=dateformatstr+'-'+dateparts[datetype+'month'] - if len(dateparts[datetype+'day'])<2: - dateformatstr=dateformatstr+'-0'+dateparts[datetype+'day'] - else: - dateformatstr=dateformatstr+'-'+dateparts[datetype+'day'] - elif formatoption=='ymd': - dateformatstr=dateparts[datetype+'year'] - dateformatstr=dateformatstr+'-'+dateparts[datetype+'month'] - dateformatstr=dateformatstr+'-'+dateparts[datetype+'day'] - elif formatoption=='default': - dateformatstr=dateparts[datetype+'year'] - else: - pass - - return dateformatstr - - - - - -# -# -#范围域解析 -def rangefieldparser(bibentry,fieldsource): - fieldcontents=bibentry[fieldsource] - - return fieldcontents - - -# -# -#打开bib文件 -def readfilecontents(bibFile): - print("INFO: Reading references from '" + bibFile + "'") - try: - fIn = open(bibFile, 'r', encoding="utf8") - global bibfilecontents - bibfilecontents=fIn.readlines() - fIn.close() - - global usedIds - usedIds = set() - if auxfile: - fInAux = open(auxfile, 'r', encoding="utf8") - for line in fInAux: - if line.startswith("\\citation") or line.startswith("\\abx@aux@cite"): - ids = line.split("{")[1].rstrip("} \n").split(", ") - for id in ids: - if (id != ""): - usedIds.add(id) - fInAux.close() - print('references:',usedIds) - - except IOError: - print("ERROR: Input bib file '" + bibFile + - "' doesn't exist or is not readable") - sys.exit(-1) - -# -#打印bib文件内容 -def printfilecontents(): - for line in bibfilecontents: - print(line) - - - -# -#输出修改后的bib文件 -def writefilenewbib(bibFile): - - print(datetime.datetime.now().isoformat(timespec='seconds')) - - #json文件输出,用dump方法 - jsonoutfile="new"+bibFile.replace('.bib','.json') - print("INFO: writing all references to '" + jsonoutfile + "'") - fout = open(jsonoutfile, 'w', encoding="utf8") - json.dump(bibentries, fout) - fout.close() - - #json文件输出,直接用write写 - jsonoutfile="new"+bibFile.replace('.bib','cited.json') - fout = open(jsonoutfile, 'w', encoding="utf8") - print("INFO: writing cited references to '" + jsonoutfile + "'") - fout.write('[\n') - for bibentry in bibentries: - if bibentry["entrykey"] in usedIds or not usedIds: - fout.write(repr(bibentry)+',\n') - fout.write(']\n') - fout.close() - - #bib文件输出 - biboutfile="new"+bibFile - - try: - fout = open(biboutfile, 'w', encoding="utf8") - fout.write("%% \n") - fout.write("%% bib file modified by biblatex-map.py\n") - - fout.write("%% "+datetime.datetime.now().isoformat(timespec='seconds')+"\n") - fout.write("%% \n\n\n") - - for bibcomment in bibcomments: - for k,v in bibcomment.items(): - if k=="entrytype": - fout.write('@'+bibcomment["entrytype"]+'{') - else: - fout.write(str(v)) - fout.write('}\n\n') - - for bibstring in bibstrings: - for k,v in bibstring.items(): - if k=="entrytype": - fout.write('@'+bibstring["entrytype"]+'{') - else: - fout.write(str(v)) - fout.write('}\n\n') - - writebibentrycounter=0 - if auxfile: - print("INFO: writing cited references in aux to '" + biboutfile + "'") - - for bibentry in bibentries: - if bibentry["entrykey"] in usedIds: - writebibentrycounter=writebibentrycounter+1 - fout.write('@'+bibentry["entrytype"]+'{'+bibentry["entrykey"]+',\n') - for k,v in bibentry.items(): - if k=="entrytype" or k=="entrykey" or v=='""' or v==None or k=='entrysn': - pass - else: - fout.write('\t'+str(k)+' = {'+str(v)+'},\n') - fout.write('}\n\n') - else: - print("INFO: writing all references to '" + biboutfile + "'") - for bibentry in bibentries: - writebibentrycounter=writebibentrycounter+1 - fout.write('@'+bibentry["entrytype"]+'{'+bibentry["entrykey"]+',\n') - for k,v in bibentry.items(): - if k=="entrytype" or k=="entrykey" or v=='""' or k=='entrysn' or v==None: - pass - else: - fout.write('\t'+k+' = {'+v+'},\n') - fout.write('}\n\n') - - fout.close() - print("INFO: " + str(writebibentrycounter) + " references writed") - except IOError: - print("ERROR: Input bib file '" + bibFile + - "' doesn't exist or is not readable") - sys.exit(-1) - - - - -# -#将条目解析放到bibentries列表中 -#每个条目是一个dict字典 -def bibentryparsing(): - global bibentries - global bibcomments - global bibstrings - bibentries=[]#用于记录所有条目 - bibentry={}#用于记录当前条目 - - bibcomments=[]#用于记录所有@comment条目 - bibcomment={}#用于记录当前@comment条目 - - bibstrings=[]#用于记录所有@stirng条目 - bibstring={}#用于记录当前@stirng条目 - - entrysn=0 #用于标记条目序号 - bibentrycounter=0##用于标记条目总数 - commentsn=0 #用于标记@comment条目序号 - bibcommentcounter=0#用于标记@comment条目总数 - stringsn=0 #用于标记@stirng条目序号 - bibstringcounter=0#用于标记@stirng条目总数 - - entrystated=False #用于标记条目开始 - fieldvalended=True #用于标记域的值当前行是否已经结束 - fieldvalue="" #用于记录当前域的值 - counterbracket=0 #用于追踪{}符号 - counterquotes=0 #用于追踪“”符号 - enclosebracket=True #用于记录是用{}还是用“”做为域的值的包围符号 - enclosenone=False #用于记录域的值无包围符号的情况 - - for line in bibfilecontents:#遍历所有行 - #print(line) - - if line.startswith("@") and not "@comment" in line.lower() and not "@string" in line.lower():#判断条目开始行 - entrysn=entrysn+1 - entrystated=True #新条目开始 - print('entrysn=',entrysn) - entrynow=line.lstrip('@').split(sep='{', maxsplit=1) - #print(entrynow) - entrytype=entrynow[0] - bibentry['entrytype']=entrytype.lower()#条目类型小写,方便比较 - entrykey=entrynow[1].split(sep=',', maxsplit=1)[0] - bibentry['entrykey']=entrykey - bibentry['entrysn']=entrysn - elif entrystated: #只有新条目开始了才有意义 - - if fieldvalended: #当前行不是前面的未结束域的值 - if '=' in line and not line.lstrip().startswith("}"): - #排除以'}'开头的行后根据=号判断条目域信息行,不可能出现=号无法判断信息行的问题, - #因为是域值中存在=的特殊情况已经在未结束逻辑处理 - entryline=line.lstrip() - entrynow=entryline.split(sep='=', maxsplit=1) - #print(entrynow) - entryfield=entrynow[0].strip().lstrip().lower()#域名小写,方便比较 - entryfieldline=entrynow[1].lstrip() - - if entryfieldline.startswith("{"): - enclosebracket=True - elif entryfieldline.startswith('"'): - enclosebracket=False - else:#当没有符号包围是设置enclosenone以便特殊处理 - enclosenone=True - - fieldvalcontinued=True #临时标记,用于记录域值是否还未结束,先假设未结束 - for chari in entryfieldline.strip():#遍历域值中的每个字符 - fieldvalue=fieldvalue+chari - if chari =='{':#对{符号进行追踪 - counterbracket=counterbracket+1 - elif chari =='}':#对}符号进行追踪 - counterbracket=counterbracket-1 - if enclosebracket: - if counterbracket==0:#当}与域开始的{配对,那么说明域值已经结束 - bibentry[entryfield]=fieldvalue[1:-1]#利用strip可能会消多次,因此用list的方式处理 - fieldvalue="" - counterbracket=0 - counterquotes=0 - fieldvalended=True - fieldvalcontinued=False - break #直接跳出循环 - elif chari =='"': - counterquotes=counterquotes+1 - if not enclosebracket: - if operator.mod(counterquotes,2)==0: - bibentry[entryfield]=fieldvalue[1:-1] - fieldvalue="" - counterbracket=0 - counterquotes=0 - fieldvalended=True - fieldvalcontinued=False - break - elif chari ==',':#若域值没有包围符号那么遇到,号即为域值结束 - if enclosenone: - bibentry[entryfield]=fieldvalue[:-1] - fieldvalue="" - counterbracket=0 - counterquotes=0 - fieldvalended=True - fieldvalcontinued=False - enclosenone=False - - #测试:输出看是否正确 - #if entryfield=='abstract': - # print('val=',fieldvalue) - # print('counterbracket=',counterbracket) - - if fieldvalcontinued: - fieldvalended=False - - elif '}' in line:#条目结束行 - - #global bibentryglobal - #bibentryglobal=copy.deepcopy(bibentry) - #print('entry:',bibentryglobal) - #bibentries.append(bibentryglobal) - print('entry:',bibentry) - bibentries.append(bibentry) - bibentry={} - entrystated=False - - else: #当前行是前面的未结束域的值,因此直接往前面的域值添加即可 - fieldvalcontinued=True - - entryfieldline=line - - if enclosenone:#当域没有包围符号时,接续的行可能是用逗号结束的域,也可能没有逗号,而用}直接结束条目信息 - for chari in entryfieldline.strip(): - fieldvalue=fieldvalue+chari - if chari ==',': - bibentry[entryfield]=fieldvalue[:-1] - fieldvalue="" - counterbracket=0 - counterquotes=0 - fieldvalended=True - fieldvalcontinued=False - enclosenone=False - elif chari =='}': - bibentry[entryfield]=fieldvalue[:-1] - fieldvalue="" - counterbracket=0 - counterquotes=0 - fieldvalended=True - fieldvalcontinued=False - enclosenone=False - print('entry:',bibentry) - bibentries.append(bibentry) - bibentry={} - entrystated=False - - else: - for chari in entryfieldline.strip(): - fieldvalue=fieldvalue+chari - if chari =='{': - counterbracket=counterbracket+1 - elif chari =='}': - counterbracket=counterbracket-1 - if enclosebracket: - if counterbracket==0: - bibentry[entryfield]=fieldvalue[1:-1] - fieldvalue="" - counterbracket=0 - counterquotes=0 - fieldvalended=True - fieldvalcontinued=False - break - elif chari =='"': - counterquotes=counterquotes+1 - if not enclosebracket: - if mod(counterquotes,2)==0: - bibentry[entryfield]=fieldvalue[1:-1] - fieldvalue="" - counterbracket=0 - counterquotes=0 - fieldvalended=True - fieldvalcontinued=False - break - - - if fieldvalcontinued: - fieldvalended=False - elif line.startswith("@") and "@comment" in line.lower():#@comment的起始 - commentsn=commentsn+1 - entrynow=line.lstrip('@').split(sep='{', maxsplit=1) - entrytype=entrynow[0] - bibcomment['entrytype']=entrytype.lower()#条目类型小写,方便比较 - entrycontents=entrynow[1].strip()[:-1] - bibcomment['entrycontents']=entrycontents - print(bibcomment) - bibcomments.append(bibcomment) - bibcomment={} - - elif line.startswith("@") and "@string" in line.lower():#@string的起始 - stringsn=stringsn+1 - entrynow=line.lstrip('@').split(sep='{', maxsplit=1) - entrytype=entrynow[0] - bibstring['entrytype']=entrytype.lower()#条目类型小写,方便比较 - entrycontents=entrynow[1].strip()[:-1] - bibstring['entrycontents']=entrycontents - print(bibstring) - bibstrings.append(bibstring) - bibstring={} - - - bibentrycounter=len(bibentries) - bibcommentcounter=len(bibcomments) - bibstringcounter=len(bibstrings) - print('entrysn=',entrysn,' commentsn=',commentsn,' stringsn=',stringsn) - print('entryct=',bibentrycounter,' commentct=',bibcommentcounter,' stringct=',bibstringcounter) - - if not bibentrycounter==entrysn or not bibcommentcounter==commentsn or not bibstringcounter==stringsn: - try: - raise BibParsingError('bib file parsing went wrong!') - except BibParsingError as e: - raise BibParsingError(e.message) - print('entrytotal=',bibentrycounter) - - #输出解析后的bib文件信息 - #for bibentryi in bibentries: - #print(bibentryi) - - -# -#打印bibentries列表中的所有条目 -def printbibentries(): - for bibentryi in bibentries: - print(bibentryi) - - -# -#自定义异常类 -class BibParsingError(Exception): - def __init__(self,message): - Exception.__init__(self) - self.message=message - -# -# 执行数据映射操作 -# 还有很多选项没有实现,20190209 -# 实现的选项中也需要和未实现的选项进行数据传递 -def execsourcemap(): - for map in sourcemaps:#every map in maps,每个map逐步开始 - for bibentry in bibentries:#每个映射都需要遍历所有条目,对每个条目做map - - mapcontinue=1#大于0表示正常,继续当前条目的map - typesrcinfo={}#用于记录typesource相关处理结果 - fieldsrcinfo={}#用于记录fieldsource相关处理的结果 - constraintinfo={}#用于记录类型等限制信息记录 - constraintinfo['pertype']=[] - constraintinfo['pernottype']=[] - - #print("map info=",map) - for step in map:#every step in map - if mapcontinue>0:#对前面已经final完成的情况做限制 - for keyvals in step:#key-vals in step - for k,v in keyvals.items():#step 是有迹可循的,每个step总是存在一些东西,找到这些做其中的逻辑即可 - #print(k,v) - - if k=="typesource":#条目类型设置 - mapcontinue=maptypesource(keyvals,bibentry,typesrcinfo)#coef is dict - - elif k=="fieldsource":#域查找或设置 - mapcontinue=mapfieldsource(keyvals,bibentry,fieldsrcinfo,constraintinfo)# - #print("fieldsource step:",fieldsrcinfo) - - elif k=="fieldset":#域设置 - mapcontinue=mapfieldset(keyvals,bibentry,typesrcinfo,fieldsrcinfo,constraintinfo)# - - elif k=="pertype": #类型限制 - mapcontinue=mappertype(keyvals,constraintinfo) - - elif k=="pernottype":#类型限制 - mapcontinue=mappernottype(keyvals,constraintinfo) - - elif k=="notfield":#域限制 - mapcontinue=mapnotfield(keyvals,bibentry,fieldsrcinfo,constraintinfo)# - else: - pass - - -# -#域限制,若域确定不存在则终止map -def mapnotfield(keyvals,bibentry,fieldsrcinfo,constraintinfo): - - setcontinue=True - print(setcontinue) - if len(constraintinfo['pertype'])>0: - if bibentry['entrytype'] not in constraintinfo['pertype']:# - setcontinue=False - if len(constraintinfo['pernottype'])>0: - if bibentry['entrytype'] in constraintinfo['pernottype']:# - setcontinue=False - print(setcontinue) - - - print("constraints:notfield") - if setcontinue: - for k,v in keyvals.items(): - #print(k,v) - if k=='notfield': - notfield=v.lower() - elif k=='final': - fieldfinal=v - else: - pass - - if notfield not in bibentry:#当notfield不存在,则判断为true,若存在final则终止,否则继续 - if fieldfinal: - return 0 - else: - return 1 - else: - return 1 - - else: - return 0 - - - - # -#条目类型限制,将类型限制信息放入字典 -def mappertype(keyvals,constraintinfo): - - print("constraints:pertype") - for k,v in keyvals.items(): - #print(k,v) - if k=='pertype': - pertype=v.lower()#因为大小写区分,所以全部小写方便比较 - else: - pass - print('pertype=',pertype) - - constraintinfo['pertype'].append(pertype) - return 1 - -# -#条目类型限制,将类型限制信息放入字典 -def mappernottype(keyvals,constraintinfo): - - print("constraints:pernottype") - for k,v in keyvals.items(): - #print(k,v) - if k=='pernottype': - pernottype=v.lower()#因为大小写区分,所以全部小写方便比较 - else: - pass - print('pertype=',pertype) - - constraintinfo['pernottype'].append(pernottype) - return 1 - - -# -#条目类型转换 -def maptypesource(keyvals,bibentry,typesrcinfo): - retrunval=1 - for k,v in keyvals.items(): - #print(k,v) - if k=='typesource': - typesource=v.lower() - elif k=='typetarget': - typetarget=v.lower() - elif k=='final': - retrunval=0 - else: - pass - - typesrcinfo - if typetarget: - if bibentry['entrytype']==typesource: - bibentry['entrytype']=typetarget - typesrcinfo['typesource']=typesource - return 1 - else: - return retrunval #存在final时,且不匹配则终止map - else: - if bibentry['entrytype']==typesource: - typesrcinfo['typesource']=typesource - else: - typesrcinfo['typesource']=None - return retrunval -# -# -# 域信息设置 -def mapfieldset(keyvals,bibentry,typesrcinfo,fieldsrcinfo,constraintinfo): - overwrite=False - append=False - - setcontinue=True - print(setcontinue) - if len(constraintinfo['pertype'])>0: - if bibentry['entrytype'] not in constraintinfo['pertype']:# - setcontinue=False - if len(constraintinfo['pernottype'])>0: - if bibentry['entrytype'] in constraintinfo['pernottype']:# - setcontinue=False - print(setcontinue) - - if setcontinue: - - for k,v in keyvals.items(): - #print(k,v) - if k=='fieldset': - fieldset=v.lower() - elif k=='fieldvalue': - fieldvalue=v - elif k=='origfieldval': - fieldvalue=fieldsrcinfo[fieldsrcinfo['fieldsource']] - print(fieldvalue) - elif k=='origentrytype': - fieldvalue=typesrcinfo['typesource'] - print(fieldvalue) - elif k=='origfield': - fieldvalue=fieldsrcinfo['fieldsource'] - print(fieldvalue) - elif k=='null': - fieldvalue=None - print(fieldvalue) - elif k=='append': - append=v - elif k=='overwrite': - overwrite=v - else: - pass - - - print("fieldset=",fieldset) - if overwrite: - if append: - oldvalue=bibentry[fieldset] - newvalue=oldvalue+","+fieldvalue - bibentry[fieldset]=newvalue - else: - bibentry[fieldset]=fieldvalue - else: - if fieldset in bibentry: - pass - else: - bibentry[fieldset]=fieldvalue - return 1 - - else: - return 1 - -# -#域名转换或判断域是否存在或match -def mapfieldsource(keyvals,bibentry,fieldsrcinfo,constraintinfo): - mapfieldtype=0 #域名map的类型设置 - fieldmatch=''#匹配模式默认为空 - fieldmatchi=''#匹配模式默认为空 - - - setcontinue=True - print(setcontinue) - if len(constraintinfo['pertype'])>0: - if bibentry['entrytype'] not in constraintinfo['pertype']:# - setcontinue=False - if len(constraintinfo['pernottype'])>0: - if bibentry['entrytype'] in constraintinfo['pernottype']:# - setcontinue=False - print(setcontinue) - - - overwrite=False - for k,v in keyvals.items(): - #print(k,v) - if k=='fieldsource': - fieldsource=v.lower() - elif k=='fieldtarget': - fieldtarget=v.lower() - mapfieldtype=1 #域map类型1,直接做域名转换 - elif k=='replace': - fieldreplace=v - mapfieldtype=2 #域map类型2,直接做域信息转换 - elif k=='final': - fieldfinal=v #final要么选项不给出,要么选项给出为true - if fieldfinal:#当为true时则做终止判断 - mapfieldtype=3 #域map类型3,做final判断可以终止map - elif k=='overwrite':# - overwrite=v - elif k=='match':#不区分大小写的match - fieldmatch=v - elif k=='matchi':#区分大小写的match - fieldmatchi=v - elif k=='notmatch':#不区分大小写的notmatch,下面这两个选项的逻辑没有实现 - fieldnotmatch=v - elif k=='notmatchi':#区分大小写的notmatch - fieldnotmatch=v - else: - pass - - - if setcontinue: - - #返回字典的第一项是fieldsource信息 - fieldsrcinfo['fieldsource']=fieldsource - - if mapfieldtype==0:#第0中情况即,不做信息转换,也不终止map,仅返回一些信息 - - if fieldsource in bibentry: - if fieldmatch: - m = re.match(fieldmatch, bibentry[fieldsource]) - if m: - fieldsrcinfo[fieldsource]=[bibentry[fieldsource],fieldmatch] - else: - fieldsrcinfo[fieldsource]=[None] #正则不匹配,则返回为None - - elif fieldmatchi: - m = re.match(fieldmatchi, bibentry[fieldsource]) - if m: - fieldsrcinfo[fieldsource]=[bibentry[fieldsource],fieldmatchi] - else: - fieldsrcinfo[fieldsource]=[None] #正则不匹配,则返回为None - - else: - fieldsrcinfo[fieldsource]=bibentry[fieldsource]#将域的值记录下来,用于下一step - - else: - fieldsrcinfo[fieldsource]=[None] #域不存在则返回为None - return 1 - - - elif mapfieldtype==1:#第1中情况即,做域名转换 - print('fieldsource=',fieldsource,'fieldtarget=',fieldtarget) - if fieldsource in bibentry: - bibentry[fieldtarget]=bibentry[fieldsource] - del bibentry[fieldsource] - fieldsrcinfo[fieldsource]=bibentry[fieldtarget] - else: - fieldsrcinfo[fieldsource]=[None] - return 1 - - - elif mapfieldtype==2:#域map类型2,直接做域信息转换,真正操作需要overwrite选项支持 - print('fieldsource=',fieldsource) - print('fieldmatch=',fieldmatch) - print('fieldreplace=',fieldreplace) - if overwrite: - if fieldsource in bibentry: - if fieldmatch: - #strafrpl=re.sub(r'(\d\d\d\d)\-(\d)\-(\d)',r'\1-0\2-0\3','2015-1-3') - #strafrpl=re.sub(r'(\d\d\d\d)\-(\d)\-(\d)',r'\1-0\2-0\3',bibentry[fieldsource]) - strafrpl=re.sub(fieldmatch,fieldreplace,bibentry[fieldsource]) #执行替换 - print('strafterreplace=',strafrpl) - bibentry[fieldsource]=strafrpl - elif fieldmatchi: - strafrpl=re.sub(fieldmatchi, fieldreplace,bibentry[fieldsource]) - bibentry[fieldsource]=strafrpl - else: - fieldsrcinfo[fieldsource]=[None] - else: - fieldsrcinfo[fieldsource]=[None] - else: - fieldsrcinfo[fieldsource]=[None] - return 1 - - - elif mapfieldtype==3:#域map类型3,当没有匹配则终止map - if fieldsource in bibentry: - if fieldmatch: - m = re.match(fieldmatch, bibentry[fieldsource]) - if m: - fieldsrcinfo[fieldsource]=[bibentry[fieldsource],fieldmatch] - return 1 - else: - return 0 - - elif fieldmatchi: - if m: - fieldsrcinfo[fieldsource]=[bibentry[fieldsource],fieldmatchi] - return 1 - else: - return 0 - - else: - fieldsrcinfo[fieldsource]=bibentry[fieldsource]#将域的值记录下来,用于下一step - return 1 - - else: - return 0 - - else: - fieldsrcinfo[fieldsource]=[None] - return 1 - - - - - -#运行脚本测试 -if __name__=="__main__": - - #设置需要修改的bib文件 - #inputbibfile='example.bib' - #inputbibfile='biblatex-map-test.bib' - inputbibfile='eg-thesis.bib' - - #auxfile="opt-gbpub-true.aux" - #set the aux file - #this is not necessary - auxfile='' - #auxfile="opt-gbpub-true.aux" - - readfilecontents(inputbibfile) - - #printfilecontents() - - bibentryparsing() - - #printbibentries() - - execsourcemap() - - #printbibentries() - - writefilenewbib(inputbibfile) - - #print(bibentries[0]) - - #print(formatbibentry(bibentries[0])) - - formatallbibliography() - printbibliography() -
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex_check.py b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex_check.py deleted file mode 100644 index 7493f8878ce..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex_check.py +++ /dev/null @@ -1,590 +0,0 @@ -#!/usr/bin/env python - -""" -BibLaTeX check on missing fields and consistent name conventions, -especially developed for requirements in Computer Science. -""" - -__author__ = "Pez Cuckow" -__version__ = "0.1.4" -__credits__ = ["Pez Cuckow", "BibTex Check 0.2.0 by Fabian Beck"] -__license__ = "MIT" -__email__ = "email<at>pezcuckow.com" - -#################################################################### -# Properties (please change according to your needs) -#################################################################### - -# links -citeulikeUsername = "" # if no username is profided, no CiteULike links appear -citeulikeHref = "http://www.citeulike.org/user/" + \ - citeulikeUsername + "/article/" - -libraries = [("Scholar", "http://scholar.google.de/scholar?hl=en&q="), - ("Google", "https://www.google.com/search?q="), - ("DBLP", "http://dblp.org/search/index.php#query="), - ("IEEE", "http://ieeexplore.ieee.org/search/searchresult.jsp?queryText="), - ("ACM", "http://dl.acm.org/results.cfm?query="), - ] - - -# fields that are required for a specific type of entry -requiredFields = {"article": ["author", "title", "journaltitle/journal", "year/date"], - "book": ["author", "title", "year/date"], - "mvbook": "book", - "inbook": ["author", "title", "booktitle", "year/date"], - "bookinbook": "inbook", - "suppbook": "inbook", - "booklet": ["author/editor", "title", "year/date"], - "collection": ["editor", "title", "year/date"], - "mvcollection": "collection", - "incollection": ["author", "title", "booktitle", "year/date"], - "suppcollection": "incollection", - "manual": ["author/editor", "title", "year/date"], - "misc": ["author/editor", "title", "year/date"], - "online": ["author/editor", "title", "year/date", "url"], - "patent": ["author", "title", "number", "year/date"], - "periodical": ["editor", "title", "year/date"], - "suppperiodical": "article", - "proceedings": ["title", "year/date"], - "mvproceedings": "proceedings", - "inproceedings": ["author", "title", "booktitle", "year/date"], - "reference": "collection", - "mvreference": "collection", - "inreference": "incollection", - "report": ["author", "title", "type", "institution", "year/date"], - "thesis": ["author", "title", "type", "institution", "year/date"], - "unpublished": ["author", "title", "year/date"], - - # semi aliases (differing fields) - "mastersthesis": ["author", "title", "institution", "year/date"], - "techreport": ["author", "title", "institution", "year/date"], - - # other aliases - "conference": "inproceedings", - "electronic": "online", - "phdthesis": "mastersthesis", - "www": "online", - "school": "mastersthesis" - } - -#################################################################### -#import os -import string -import re -import sys -from optparse import OptionParser - -# Parse options -usage = sys.argv[ - 0] + " [-b|--bib=<input.bib>] [-a|--aux=<input.aux>] [-o|--output=<output.html>] [-v|--view] [-h|--help]" - -parser = OptionParser(usage) - -parser.add_option("-b", "--bib", dest="bibFile", - help="Bib File", metavar="input.bib", default="input.bib") - -parser.add_option("-a", "--aux", dest="auxFile", - help="Aux File", metavar="input.aux", default="references.aux") - -parser.add_option("-o", "--output", dest="htmlOutput", - help="HTML Output File", metavar="output.html") - -parser.add_option("-v", "--view", dest="view", action="store_true", - help="Open in Browser") - -parser.add_option("-N", "--no-console", dest="no_console", action="store_true", - help="Do not print problems to console") - -(options, args) = parser.parse_args() - -# Backporting Python 3 open(encoding="utf-8") to Python 2 -# based on http://stackoverflow.com/questions/10971033/backporting-python-3-openencoding-utf-8-to-python-2 - -if sys.version_info[0] > 2: - # py3k - pass -else: - # py2 - import codecs - import warnings - reload(sys) - sys.setdefaultencoding('utf8') - def open(file, mode='r', buffering=-1, encoding=None, - errors=None, newline=None, closefd=True, opener=None): - if newline is not None: - warnings.warn('newline is not supported in py2') - if not closefd: - warnings.warn('closefd is not supported in py2') - if opener is not None: - warnings.warn('opener is not supported in py2') - return codecs.open(filename=file, mode=mode, encoding=encoding, - errors=errors, buffering=buffering) - -### End Backport ### - -print("INFO: Reading references from '" + options.bibFile + "'") -try: - fIn = open(options.bibFile, 'r', encoding="utf8") -except IOError as e: - print("ERROR: Input bib file '" + options.bibFile + - "' doesn't exist or is not readable") - sys.exit(-1) - -if options.no_console: - print("INFO: Will surpress problems on console") - -if options.htmlOutput: - print("INFO: Will output HTML to '" + options.htmlOutput + "'" - + (" and auto open in the default web browser" if options.view else "")) -else:#output a default file if -o option is not provided - options.htmlOutput=options.bibFile.repalce('.bib','.html') - -# Filter by reference ID's that are used -usedIds = set() -if options.auxFile: - print("INFO: Filtering by references found in '" + options.auxFile + "'") - try: - fInAux = open(options.auxFile, 'r', encoding="utf8") - for line in fInAux: - if line.startswith("\\citation"): - ids = line.split("{")[1].rstrip("} \n").split(", ") - for id in ids: - if (id != ""): - usedIds.add(id) - fInAux.close() - except IOError as e: - print ("WARNING: Aux file '" + options.auxFile + - "' doesn't exist -> not restricting entries") - - -# Go through and check all references -completeEntry = "" -currentId = "" -ids = [] -currentType = "" -currentArticleId = "" -currentTitle = "" -fields = [] -problems = [] -subproblems = [] - -counterMissingFields = 0 -counterFlawedNames = 0 -counterWrongTypes = 0 -counterNonUniqueId = 0 -counterWrongFieldNames = 0 - -removePunctuationMap = dict((ord(char), None) for char in string.punctuation) - -for line in fIn: - line = line.strip("\n") - if line.startswith("@"): - if currentId in usedIds or not usedIds: - for fieldName, requiredFieldsType in requiredFields.items(): - if fieldName == currentType.lower(): - # alises use a string to point at another set of fields - currentRequiredFields = requiredFieldsType - while isinstance(currentRequiredFields, str): - currentRequiredFields = requiredFields[currentRequiredFields] # resolve alias - - for requiredFieldsString in currentRequiredFields: - # support for author/editor syntax - typeFields = requiredFieldsString.split('/') - - # at least one the required fields is not found - if set(typeFields).isdisjoint(fields): - subproblems.append( - "missing field '" + requiredFieldsString + "'") - counterMissingFields += 1 - else: - subproblems = [] - - if currentId in usedIds or (currentId and not usedIds): - cleanedTitle = currentTitle.translate(removePunctuationMap) - problem = "<div id='" + currentId + \ - "' class='problem severe" + str(len(subproblems)) + "'>" - problem += "<h2>" + currentId + " (" + currentType + ")</h2> " - problem += "<div class='links'>" - if citeulikeUsername: - problem += "<a href='" + citeulikeHref + \ - currentArticleId + "' target='_blank'>CiteULike</a> |" - - list = [] - for name, site in libraries: - list.append( - " <a href='" + site + cleanedTitle + "' target='_blank'>" + name + "</a>") - problem += " | ".join(list) - - problem += "</div>" - problem += "<div class='reference'>" + currentTitle - problem += "</div>" - problem += "<ul>" - for subproblem in subproblems: - problem += "<li>" + subproblem + "</li>" - if not options.no_console: - print("PROBLEM: " + currentId + " - " + subproblem) - problem += "</ul>" - problem += "<form class='problem_control'><label>checked</label><input type='checkbox' class='checked'/></form>" - problem += "<div class='bibtex_toggle'>Current BibLaTex Entry</div>" - problem += "<div class='bibtex'>" + completeEntry + "</div>" - problem += "</div>" - problems.append(problem) - fields = [] - subproblems = [] - currentId = line.split("{")[1].rstrip(",\n") - if currentId in ids: - subproblems.append("non-unique id: '" + currentId + "'") - counterNonUniqueId += 1 - else: - ids.append(currentId) - currentType = line.split("{")[0].strip("@ ") - completeEntry = line + "<br />" - else: - if line != "": - completeEntry += line + "<br />" - if currentId in usedIds or not usedIds: - if "=" in line: - # biblatex is not case sensitive - field = line.split("=")[0].strip().lower() - fields.append(field) - value = line.split("=")[1].strip("{} ,\n") - if field == "author": - currentAuthor = filter( - lambda x: not (x in "\\\"{}"), value.split(" and ")[0]) - if field == "citeulike-article-id": - currentArticleId = value - if field == "title": - currentTitle = re.sub(r'\}|\{', r'', value) - - ############################################################### - # Checks (please (de)activate/extend to your needs) - ############################################################### - - # check if type 'proceedings' might be 'inproceedings' - if currentType == "proceedings" and field == "pages": - subproblems.append( - "wrong type: maybe should be 'inproceedings' because entry has page numbers") - counterWrongTypes += 1 - - # check if abbreviations are used in journal titles - if currentType == "article" and (field == "journal" or field == "journaltitle"): - - if "." in line: - subproblems.append( - "flawed name: abbreviated journal title '" + value + "'") - counterFlawedNames += 1 - - # check booktitle format; expected format "ICBAB '13: Proceeding of the 13th International Conference on Bla and Blubb" - # if currentType == "inproceedings" and field == "booktitle": - # if ":" not in line or ("Proceedings" not in line and "Companion" not in line) or "." in line or " '" not in line or "workshop" in line or "conference" in line or "symposium" in line: - #subproblems.append("flawed name: inconsistent formatting of booktitle '"+value+"'") - #counterFlawedNames += 1 - - # check if title is capitalized (heuristic) - # if field == "title": - # for word in currentTitle.split(" "): - #word = word.strip(":") - # if len(word) > 7 and word[0].islower() and not "-" in word and not "_" in word and not "[" in word: - #subproblems.append("flawed name: non-capitalized title '"+currentTitle+"'") - #counterFlawedNames += 1 - # break - - ############################################################### - -fIn.close() - - -problemCount = counterMissingFields + counterFlawedNames + counterWrongFieldNames + counterWrongTypes + counterNonUniqueId - -# Write out our HTML file -if options.htmlOutput: - html = open(options.htmlOutput, 'w', encoding="utf8") - html.write("""<!doctype html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> -<title>BibLatex Check</title> -<style> -body { - font-family: Calibri, Arial, Sans; - padding: 10px; - width: 1030px; - margin: 10px auto; - border-top: 1px solid black; -} - -#title { - width: 720px; - border-bottom: 1px solid black; -} - -#title h1 { - margin: 10px 0px; -} - -#title h1 a { - color: black; - text-decoration: none; -} - -#control { - clear: both; -} - -#search { - float: left; -} - -#search input { - width: 300px; - font-size: 14pt; -} - -#mode { - text-align: right; -} - -#mode label:first-child { - font-weight: bold; -} - -#mode input { - margin-left: 20px; -} - -.info { - margin-top: 10px; - padding: 10px; - background: #FAFADD; - width: 250px; - float: right; - box-shadow: 1px 1px 1px 1px #ccc; - clear: both; -} - -.info h2 { - font-size: 12pt; - padding: 0px; - margin: 0px; -} - -.problem { - margin-top: 10px; - margin-bottom: 10px; - padding: 10px; - background: #FFBBAA; - counter-increment: problem; - width: 700px; - border: 1px solid #993333; - border-left: 5px solid #993333; - box-shadow: 1px 1px 1px 1px #ccc; - float: left; -} - -.active { - box-shadow: 5px 5px 3px 3px #ccc; - position: relative; - top: -2px; -} - -.severe0 { - background: #FAFAFA; - border: 1px solid black; - border-left: 5px solid black; -} - -.severe1 { - background: #FFEEDD; -} - -.severe2 { - background: #FFDDCC; -} - -.severe3 { - background: #FFCCBB; -} - -.problem_checked { - border: 1px solid #339933; - border-left: 5px solid #339933; -} - -.problem h2:before { - content: counter(problem) ". "; color: gray; -} - -.problem h2 { - font-size: 12pt; - padding: 0px; - margin: 0px; -} - -.problem .links { - float: right; - position:relative; - top: -22px; -} - -.problem .links a { - color: #3333CC; -} - -.problem .links a:visited { - color: #666666; -} - -.problem .reference { - clear: both; - font-size: 9pt; - margin-left: 20px; - font-style:italic; - font-weight:bold; -} - -.problem ul { - clear: both; -} - -.problem .problem_control { - float: right; - margin: 0px; - padding: 0px; -} - -.problem .bibtex_toggle{ - text-decoration: underline; - font-size: 9pt; - cursor: pointer; - padding-top: 5px; -} - -.problem .bibtex { - margin-top: 5px; - font-family: Monospace; - font-size: 8pt; - display: none; - border: 1px solid black; - background-color: #FFFFFF; - padding: 5px; -} -</style> -<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> -<script> - -function isInProblemMode() { - return $('#mode_problems:checked').val() == 'problems' -} - -function update() { - $('.problem').hide(); - $('.problem[id*='+$('#search input').val()+']').show(); - $('.problem .checked').each(function () { - if ($(this).attr('checked')) { - $(this).parents('.problem').addClass('problem_checked'); - } else { - $(this).parents('.problem').removeClass('problem_checked'); - } - }); - if (isInProblemMode()) { - $('.severe0').hide(); - $('.problem_checked').hide(); - } -} - -$(document).ready(function(){ - - $(".bibtex_toggle").click(function(event){ - event.preventDefault(); - $(this).next().slideToggle(); - }); - - $('#search input').live('input', function() { - update(); - }); - - $('#mode input').change(function() { - update(); - }); - - $("#uncheck_button").click(function(){ - $('.problem .checked').attr('checked',false); - localStorage.clear(); - update(); - }); - - $('.problem a').mousedown(function(event) { - $('.problem').removeClass('active'); - $(this).parents('.problem').addClass('active'); - }); - - $('.problem .checked').change(function(event) { - var problem = $(this).parents('.problem'); - problem.toggleClass('problem_checked'); - var checked = problem.hasClass('problem_checked'); - localStorage.setItem(problem.attr('id'),checked); - if (checked && isInProblemMode()) { - problem.slideUp(); - } - }); - - $('.problem .checked').each(function () { - $(this).attr('checked',localStorage.getItem($(this).parents('.problem').attr('id'))=='true'); - }); - update(); -}); - -</script> -</head> -<body> -<div id="title"> -<h1><a href='http://github.com/pezmc/BibLatex-Check'>BibLaTeX Check</a></h1> -<div id="control"> -<form id="search"><input placeholder="search entry ID ..."/></form> -<form id="mode"> -<label>show entries:</label> -<input type = "radio" - name = "mode" - id = "mode_problems" - value = "problems" - checked = "checked" /> - <label for = "mode_problems">problems</label> - <input type = "radio" - name = "mode" - id = "mode_all" - value = "all" /> - <label for = "mode_all">all</label> -<input type="button" value="uncheck all" id="uncheck_button"></button> -</form> -<br style="clear: both; " /> -</div> -</div> -""") - html.write("<div class='info'><h2>Info</h2><ul>") - html.write("<li>bib file: " + options.bibFile + "</li>") - html.write("<li>aux file: " + options.auxFile + "</li>") - html.write("<li># entries: " + str(len(problems)) + "</li>") - html.write("<li># problems: " + str(problemCount) + "</li><ul>") - html.write("<li># missing fields: " + str(counterMissingFields) + "</li>") - html.write("<li># flawed names: " + str(counterFlawedNames) + "</li>") - html.write("<li># wrong types: " + str(counterWrongTypes) + "</li>") - html.write("<li># non-unique id: " + str(counterNonUniqueId) + "</li>") - html.write("<li># wrong field: " + str(counterWrongFieldNames) + "</li>") - html.write("</ul></ul></div>") - - problems.sort() - for problem in problems: - html.write(problem) - html.write("</body></html>") - html.close() - - if options.view: - import webbrowser - webbrowser.open(html.name) - - print("SUCCESS: Report {} has been generated".format(options.htmlOutput)) - -if problemCount > 0: - print("WARNING: Found {} problems.".format(problemCount)) - sys.exit(-1) diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib index 56ce4a57948..3c01beddc85 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib @@ -502,7 +502,7 @@ author={乔纳斯} DATE = {1993}, number={7}, PAGES = {50-58}, - journaltitle={ Отечестsенная гелогия} + journaltitle={Отечестsенная гелогия} } %%Кочекоs А Я. Молибден-медно-эолотопорфиооое месторождение Рябиноосе[J/ОL]. ,1993(7):50-58 diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gb7714texteg.dat b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gb7714texteg.dat deleted file mode 100644 index 6fb3ef1a4ac..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gb7714texteg.dat +++ /dev/null @@ -1,214 +0,0 @@ -[14] ANDERSEN J B, RAPPAPORT T S, YOSHIDA S. Propagation measurements and models for wireless communications channels[J]. IEEE Commun. Mag., 1995, 33(1): 42–49. -[49] 陈高峰. 基于开放式框架的交叉开发环境设计与实现[J]. 煤炭技术, 2011, 30(6): 230–232. -[51] 陈金成, 杨海威, 钟廷修. 一种开放式体系结构经济型数控装置的研制[J]. 上海交通大学学报, 2001, 35(12): 1861–1864. -[52] 高光明. 信号情报接收机的发展现状及趋势[J]. 电讯技术, 1998, 38(2): 60–65. -[53] 高翔, 李辰. 复杂航电架构的开放式系统标准研究[J]. 航空电子技术, 2015, 46(2): 26–31. -[55] 李炳穆. 理想的图书管理员和信息专家的素养与形象[J]. 图书情报工作, 2000(2): 5–8. -[48] ZHAO L, HAIMOVICH A M. Performance of ultra-wideband communications in the presence of interference[J]. IEEE J. Sel. Areas Commun., 2002, 20(9): 1684–1691. -[8] 张敏莉, 易仕和, 赵玉新. 超声速短化喷管的设计和试验研究[J]. 空气动力学报, 2007, 25(4): 500–503. - -[47] WALLS S C, BARICHIVICH W J, BROWN M E. Drought, deluge and declines: the impact of precipition extremes on amphibians in a changing climate[J/OL]. Biology, 2013, 2(1): 399–418[2013–11–04]. http://www.mdpi.com. -[50] 陈建军. 从数字地球到智慧地球[J/OL]. 国图资源导刊, 2010, 7(10): 93 [2013–03–20]. http://d.g.wanfangdata.com.cn. doi: 10.3969/j.issn.1672-5603.2010.10.038. -[54] 江向东. 互联网环境下的信息处理与图书管理系统解决方案[J/OL]. 情报学报, 1999, 18(2): 4[2000–01–18]. http://www.chinainfo.gov.cn/periodical/qbxb/qbxb99/qbxb990203. -[7] 储大同. 恶性肿瘤个体化治疗靶向药物的临床表现[J/OL]. 中华肿瘤杂志, 2010, 32(10): 721–724[2014–06–25]. http://www.sohu.com. doi: 10.7666/d.y351065. -[9] 储大同. 恶性肿瘤个体化治疗靶向药物的临床表现[J/OL]. 中华肿瘤杂志, 2010, 32(9/10): 721–724 [2014–06–25]. http://www.sohu.com. doi: 10.7666/d.y351065. - -[10] 丁文祥. 数字革命与竞争国际化[N]. 中国青年报, 2000–11–20(15). -[11] 傅刚, 赵承, 李佳路. 大风沙过后的思考[N/OL]. 北京青年报, 2000–04–12(14) [2005–07–12]. http://www.bjyouth.com.cn/Bqb/20000412/GB/4216%5ED0412B1401.htm. -[12] 刘裕国, 杨柳, 张洋, 等. 雾霾来袭,如何突围[N/OL]. 人民日报, 2013–01–12 [2013–11–06]. http://paper.people.com.cn. -[13] 张田勤. 犯罪 DNA 库与生命伦理学计划[N]. 大众科技报, 2000–11–12(7). - - - - -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 2004, 50(6): 1312–1318. -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 2004, 50(6). -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 2004, 50: 1312–1318. -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 2004(6): 1312–1318. -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 50(6): 1312–1318. -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 2004, 50. -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 2004(6). -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 50(6). -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 2004: 1312–1318. -[2] CHIANI M, CONTI A, TRALLI V. Further results on convolutional code search for blockfading channels[J]. IEEE Trans. Inf. Theory, 50: 1312–1318. - -[1] 中国地质学会. 地质评论[J]. 1936, 1(1)–. 北京: [出版者不详], 1936–. -[2] 中国图书馆学会. 图书馆学通信[J]. 1957(1)–1990(4). 北京: 北京图书馆, 1957–1990. -[3] American Association for the Advancement of Science. Science[J]. 1883, 1(1)–. Washington, D.C.: [s.n.], 1883–. -[4] 中华医学会湖北分会. 临床内科杂志[J]. 1984, 1(1)–. 武汉: 中华医学会湖北分会, 1984–. -[8] 张敏莉, 易仕和, 赵玉新. 超声速短化喷管的设计和试验研究[J]. 空气动力学报, 2007, 25(4): 500–503. -[8] ZHANG M L, YI S H, ZHAO Y X. The design and experimental investigations of supersonic length shorted nozzle[J]. ACTA AERODYNAMICA SINICA, 2007, 25(4): 500–503. -[14] ANDERSEN J B, RAPPAPORT T S, YOSHIDA S. Propagation measurements and models for wireless communications channels[J]. IEEE Commun. Mag., 1995, 33(1): 42–49. -[15] ANDRISANO O, TRALLI V, VERDONE R. Millimeter waves for short-range multimedia communication systems[J]. Proc. IEEE, 1998, 86(7): 1383–1401. -[16] CAPLAN P. Cataloging internet resources[J]. The public Access Computer Systems Review, 1993, 4(2): 61–66. -[7] 储大同. 恶性肿瘤个体化治疗靶向药物的临床表现[J/OL]. 中华肿瘤杂志, 2010, 32(10): 721–724[2014–06–25]. http://www.sohu.com. doi: 10.7666/d.y351065. - - -[1] 韩吉人. 论职工教育的特点[G]//中国职工教育研究会. 职工教育研究论文集. 北京: 人民教育出版社, 1985: 90–99. -[2] FOURNEY M E. Advances in holographic photoelasticity[C]//Symposium on Applications of Holography in Mechanics, August 23-25, 1971, University of Southern California, Los Angeles, California. New York: ASME, 1971: 17–38. -[3] FOURNEY M E. Advances in holographic photoelasticity[C]//American Society of Mechanical Engineers.Applied Mechanics Division. Symposium on Applications of Holography in Mechanics, August 23-25, 1971. University of Southern California, Los Angeles, California. New York: ASME, 1971: 17–38. -[4] NEMEC B. Force control of redundant robots[C]//Processings of Symposium on Robot Control. [S.l.]: [s.n.], 1997: 209–214. -[5] 贾东琴, 柯平. 面向数字素养的高校图书馆数字服务体系研究[C]//中国图书馆学会. 中国图书馆学会年会论文集:2011 年卷. 北京: 国家图书馆出版社, 2011: 45–52. -[6] 裴丽生. 在中国科协技术期刊编辑工作经验交流会上的讲话[C]//中国科学技术协会学会工作部. 中国科协学术期刊编辑工作经验交流会资料选. 北京: 中国科学技术协会学会工作部, 1981: 2–10. -[7] 汪学军. 中国农业转基因生物研发进展与安全管理[C]//国家环境保护总局生物安全管理办公室. 中国国家生物安全框架实施国际合作项目研讨会论文集. 北京: 中国环境科学出版社, 2002: 22–25. -[8] 张忠智. 科技书刊的总编 (主编) 的角色要求[C]//中国科学技术期刊编辑学会学术委员会. 中国科学技术期刊编辑学会建会十周年学术研讨会论文汇编. 北京: 中国科学技术期刊编辑学会学术委员会, 1997: 33–34. -[9] CHOI J D, STARK W E. Performance analysis of ultra-wideband spread-spectrum communications in narrowband interference[C]//Proc. IEEE Military Commun. Conf. (MILCOM). Vol. 2. Anaheim, CA: [s.n.], 2002: 1075–1080. -[10] DARDARI D, PASOLINI G. Simple and accurate models for error probability evaluation of IEEE802.11 DS-SS physical interface in the presence of Bluetooth interference[C]//Proc. IEEE Global Telecommun. Conf. (GLOBECOM). Vol. 1. Taipei: [s.n.], 2002: 201–206. -[11] FIROOZBAKHSH B, PRATT T G, JAYANT N. Analysis of IEEE 802.11a interference on UWB systems[C]//Proc. of IEEE Conference on Ultrawideband Systems and Technologies (UWBST). Oulu, Finland: [s.n.], 2003: 473–477. -[12] FOERSTER J R. Interference modeling of pulse-based UWB waveforms on narrowband systems[C]//Proc. IEEE Veh. Technol. Conf. Vol. 4. Birmingham, AL: [s.n.], 2002: 1931–1935. -[13] FONTANA R J. An insight into UWB interference from a shot noise perspective[C]//Proc. of IEEE Conference on Ultrawideband Systems and Technologies (UWBST). Baltimore, MD: [s.n.], 2002: 309–313. -[14] GIORGETTI A. Coexistence of UWB and narrowband systems in Nakagami/Rice channels[C]//Proc. Int. Symp. on Wireless Personal Multimedia Commun. (WPMC). Aalborg, Denmark: [s.n.], 2005: 794–798. -[15] GIORGETTI A, CHIANI M, DARDARI D. Coexistence issues in cognitive radios based on ultra-wide bandwidth systems[C]//Proc. IEEE Int. Conf. on Cognitive Radio Oriented Wireless Net. and Comm. (CROWNCOM). Mykonos, Greece: [s.n.], 2006. -[16] LI Y, MOLISCH A F, ZHANG J. Practical approaches to channel estimation and interference suppression for OFDM based UWB communications[C]//Proc. of the IEEE 6th Circ. and Syst., Symp. on Emerging Technologies: Frontiers of Mobile and Wireless Communication. Vol. 1. [S.l.]: [s.n.], 2004: 21–24. -[17] NASRI A, SCHOBER R, LAMPE L. Performance Evaluation of BICM-OFDM Systems Impaired by UWB Interference[C]//Proc. IEEE Int. Conf. on Commun. Beijing, China: [s.n.], 2008: 3616–3621. -[18] PIAZZO L. UWB EM compatibility and coexistence issues[C]//Proc. 1st Int. Workshop on Networking with UWB. Rome, Italy: [s.n.], 2001. -[19] 陈志勇. 中国财税文化价值研究:“中国财税文化国际学术研讨会”论文集[C/OL]. 北京: 经济科学出版社, 2011 [2013–10–14]. http://apabi.lib.pku.edu.cn. -[20] 雷光春. 综合湿地管理: 综合湿地管理国际研讨会论文集[C]. 北京: 海洋出版社, 2012. -[21] ROSENTHALL E M. Proceedings of the Fifth Canadian Mathematical Congress, University of Montreal, 1961[C]. Toronto: University of Toronto Press, 1963. -[22] GANZHA V G, MAYR E W, VOROZHTSOV E V. Computer algebra in scientific computing:CASC 2000:proceedings of the Third Workshop on Computer Algebra in Scientific Computing, Samarkand, October 5-9, 2000[C]. Berlin: Springer, 2000. -[23] BABU B V, NAGAR A K, DEEP K, et al. Proceedings of the second international conference on soft computing for problem solving, December 28-30[C]. New Delhi: Springer, 2014. -[24] 中国力学学会. 第 3 届全国实验流体力学学术会议论文集[C]. 天津: [出版者不详], 1999. -[25] 中国社会科学院台湾史研究中心. 台湾光复六十五周年暨抗战史实学术研讨会论文集[C]. 北京: 九州出版社, 2012. - - -[8] LEHMAN P, KIME P, BORUVKA A, et al. The biblatex Package: Programmable Bibliographies and Citations[A]. version 2.8a. 2013. -[9] LEHMAN P, KIME P, BORUVKA A, et al. The Biblatex Package: Programmable Bibliographies and Citations[A]. 3.0. 2015. -[10] MITTELBACH F. An environment for multicolumn output[A]. 2015. -[11] OETIKER T, PARTL H, HYNA I, et al. The Not So Short Introduction to L ATEX 2ε[A]. 2011. -[12] ROBERTSON W, WILSON P, PRESS H. The ccaption package[A]. v3.2c. 2011. -[13] SOMMERFELDT A. Customizing captions of floating environments[A/OL]. 2011. http://sourceforge.net/projects/latex-caption/. -[14] UMEKI H. The geometry package[A]. v5.6. 2010. -[15] 胡振震. 符合 GB7714-2015 标准的 biblatex 参考文献样式文件[A]. 2016. -[16] 吴凌云. CTEX FAQ: 常见问题集[A]. version 0.4. 2007. -[17] 中国第一历史档案馆, 辽宁省档案馆. 中国明朝档案总汇[A]. 桂林: 广西师范大学出版社, 2001. -[18] 包太雷. LaTeX Notes: 雷太赫排版系统简介[Z]. 2013. -[1] CALKIN D, AGER A, THOMPSON M. A comparative risk assessment framework for wildland fire management: the 2010 cohesive strategy Science report:RMRS-GTR-262[R]. 2011: 8–9. -[2] EGGRERS A J. One-dimensional flows of an imperfect diatomic gas[R]. NACA report 959. -[3] HUMPHREY R L, WAGNER J L. The sonic throat method and real gas one-dimensional flow: an application to air and nitrogen[R]. AD 730029. 1971. -[4] U.S. Department of Transportation Federal Highway Administration. Guidelines for handling excavated acid-producing materials, PB 91-194001[R]. Springfield: U.S. Department of Commerce National Information Service, 1990. -[5] World Health Organization. Factors regulating the immune response: report of WHO Scientific Group[R]. Geneva: WHO, 1970. -[6] 汤万金, 杨跃翔, 刘文, 等. 人体安全重要技术标准研制最终报告:7178999X[R/OL]. 2013 [2014–06–24]. http://www.nstrs.org.cn. -[7] 中华人民共和国国务院新闻办公室. 国防白皮书: 中国武装力量的多样化运用[R/OL]. 2013 [2014–06–11]. http://www.mod.gov.cn. - -[1] Commonwealth libraries bureau of library development.Pennsylvania department of education office. Pennsylvania library laws[EB/OL]. [2013–03–24]. http://www.racc.edu. -[3] Omg Inc. Unified Modeling Language: Superstructure[EB/OL]. (2003). http://www.omg.org. -[4] Online Computer Library Center, Inc. History of OCLC[EB/OL]. [2000–01–08]. http://www.oclc.org/about/history/default.htm. -[2] HOPKINSON A. UNIMARC and metadata: Dublin Core[EB/OL]. [1999–12–08]. http://www.rfla.org/IV/rfla64/13801613.htm. -[5] 李强. 化解医患矛盾需釜底抽薪[EB/OL]. (2012–05–03) [2013–03–25]. http://wenku.baidu.com. -[6] 萧钰. 出版业信息化迈入快车道[EB/OL]. (2001–12–19) [2002–04–15]. http://www.creader.com/news/20011219/200112190019.html. -[7] WiMedia Alliance[EB/OL]. www.wimedia.org. -[8] Dublin Core metadata element set: version 1.1[EB/OL]. (2012–06–14) [2014–06–11]. http://dublincore.org. -[9] JabRef 中文手册[EB/OL]. http://blog.csdn.net/zd0303/article/details/7676807. -[10] PACS-L:the public-access computer systems forum[EB/OL]. (1989) [1995–05–17]. http://info.lib.uh.edu/pacsl.html. - -[33] 全国信息文献标准化技术委员会. 文献著录: 第 4 部分 非书资料:GB/T3792.4-2009[S]. 北京: 中国标准出版社, 2010: 3. -[34] 全国广播电视标准化技术委员会. 广播电视音像资料编目规范: 第 2 部分 广播资料:GY/T202.2-2007[S]. 北京: 国家广播电影电视局广播电视规划院, 2007: 1. -[35] 国家环境保护局科技标准司. 土壤环境质量标准:GB 15616-1995[S/OL]. 北京: 中国标准出版社, 1996: 2–3 [2013–10–14]. http://wenku.baidu.com. -[36] Information and documdocument-the Dublin core metadata element set:ISO 15836:2009[S/OL].[2013–03–24]. http://www.iso.org. -[40] 国家标准局信息分类编码研究所. 世界各国和地区名称代码 GB/T 2659-1986[S]//全国文献工作标准化技术委员会. 文献工作国家标准汇编: 3. 北京: 中国标准出版社, 1988: 59–92. -[41] 宋史卷三: 本纪第三[M/OL]//李承森. 宋史: 第 1 册. 北京: 中华书局, 2011: 11–12 [2013–05–09]. http://apabi.lib.pku.edu.cn. - -[1] CALMS R B. Infrared spectroscopic studies on solid oxygen[D]. Berkeley: Univ. of California, 1965. -[4] 张若凌. 高超声速非平衡流动的计算和实验研究[D]. 绵阳: 中国空气动力研究与发展中心, 2004. -[5] 张志祥. 间断动力系统的随机扰动及其在守恒律方程中的应用[D]. 北京: 北京大学数学学院, 1998. -[2] 马欢. 人类活动影响下海河流域典型区水循环变化分析[D/OL]. 北京: 清华大学, 2011: 27 [2013–10–14]. http://www.cnki.net. -[3] 吴云芳. 面向中文信息处理的现代汉语并列结构研究[D/OL]. 北京: 北京大学, 2003 [2013–10–14]. http://thesis.lib.pku.edu.cn. - -[2] 中国职工教育研究会. 职工教育研究论文集[G]. 北京: 人民教育出版社, 1985. -[1] 韩吉人. 论职工教育的特点[G]//中国职工教育研究会. 职工教育研究论文集. 北京: 人民教育出版社, 1985: 90–99. -[1] KOSEKI A, MOMOSE H, KAWAHITO M, et al. Compiler: US828402[P/OL]. 2002–05–25[2002–05–28]. http://FF&p=1&u=netahtml/PTO/search-bool.html&r=5&f=G&l=50&col=AND&d=PG01&sl=IBM.AS.&0S=AN/IBM&RS=AN/IBM. -[2] TACHIBANA R, SHIMIZU S, KOBAYSHI S, et al. Electronic watermarking method and system: US6915001[P/OL]. 2002–04–25 [2002–05–28]. http://patftuspto.gov/netacgi/nphParser?%20Seetl=PTO2&Sect2=HITOFF&=1&u=/netahhml/search-bool.html%20&r=1&f=G&1=50&col=AND&d=ptxt&sl=%60Electronic+watermarking+method+system'.TTL.&OS=TTL/. -[3] 河北绿洲生态环境科技有限公司. 一种荒漠化地区生态植被综合培育种植方法: 01129210.5[P/OL]. 2001–10–24 [2002–05–28]. http://211.152.9.47/sipoasp/zlijs/hyjs-yx-new.asp?recid=01129210.5&leixin.27 -[4] 姜锡洲. 一种温热外敷药制备方案: 中国: 88105607.3[P]. 1989–07–26. -[5] 刘加林. 多功能一次性压舌板: 92214985.2[P]. 1993–04–14. -[6] 西安电子科技大学. 光折变自适应光外差探测方法: 01128777.2[P/OL]. 2002–03–06 [2002–05–28]. http://211.152.9.47/sipoasp/zljs/hyjs-yx-new.asp?recid=01128777.2&leixin=0. -[7] 张凯军. 轨道火车及高速轨道火车紧急安全制动辅助装置: 201220158825.2[P]. 2012–04–05. - -[1] Commonwealth libraries bureau of library development.Pennsylvania department of education office. Pennsylvania library laws[EB/OL]. [2013–03–24]. http://www.racc.edu. -[2] HOPKINSON A. UNIMARC and metadata: Dublin Core[EB/OL]. [1999–12–08]. http://www.rfla.org/IV/rfla64/13801613.htm. -[3] Omg Inc. Unified Modeling Language: Superstructure[EB/OL]. (2003). http://www.omg.org. -[4] Online Computer Library Center, Inc. History of OCLC[EB/OL]. [2000–01–08]. http://www.oclc.org/about/history/default.htm. -[5] 李强. 化解医患矛盾需釜底抽薪[EB/OL]. (2012–05–03) [2013–03–25]. http://wenku.baidu.com. -[6] 萧钰. 出版业信息化迈入快车道[EB/OL]. (2001–12–19) [2002–04–15]. http://www.creader.com/news/20011219/200112190019.html. -[7] WiMedia Alliance[EB/OL]. www.wimedia.org. -[8] Dublin Core metadata element set: version 1.1[EB/OL]. (2012–06–14) [2014–06–11]. http://dublincore.org. -[9] JabRef 中文手册[EB/OL]. http://blog.csdn.net/zd0303/article/details/7676807. -[10] PACS-L:the public-access computer systems forum[EB/OL]. (1989) [1995–05–17]. http://info.lib.uh.edu/pacsl.html. - -[38] 白书农. 植物开花研究[M]//李承森. 植物科学进展. 北京: 高等教育出版社, 1998: 146–163. -[42] 楼梦麟, 杨燕. 汶川地震基岩地震动特征分析[M/OL]//同济大学土木工程防灾国家重点实验室. 汶川地震震害研究. 上海: 同济大学出版社, 2011: 11–12 [2013–05–09]. http://apabi.lib.pku.edu.cn. DOI: AFAC1212121. -[42] 楼梦麟, 杨燕. 汶川地震基岩地震动特征分析[M/OL]//同济大学土木工程防灾国家重点实验室. 汶川地震震害研究. 上海: 同济大学出版社: 11–12 [2013–05–09]. http://apabi.lib.pku.edu.cn. DOI: AFAC1212121. -[42] 楼梦麟, 杨燕. 汶川地震基岩地震动特征分析[M/OL]//同济大学土木工程防灾国家重点实验室. 汶川地震震害研究. 上海: 同济大学出版社, 2011[2013–05–09]. http://apabi.lib.pku.edu.cn. DOI: AFAC1212121. -[42] 楼梦麟, 杨燕. 汶川地震基岩地震动特征分析[M/OL]//同济大学土木工程防灾国家重点实验室. 汶川地震震害研究. 上海: 同济大学出版社[2013–05–09]. http://apabi.lib.pku.edu.cn. DOI: AFAC1212121. -[41] 宋史卷三: 本纪第三[M/OL]//李承森. 宋史colon第 1 册. 北京: 中华书局, 2011: 11–12 [2013–05–09]. http://apabi.lib.pku.edu.cn. -[41] 宋史卷三: 本纪第三[M]//李承森. 宋史colon第 1 册. 北京: 中华书局. -[41] 宋史卷三: 本纪第三[M]//宋史: 第 1 册. 北京: 中华书局. -[41] 宋史卷三: 本纪第三[M]//宋史. 北京: 中华书局. -[37] 卷 39 乞致任第一[M]//苏魏公文集: 下册. 北京: 中华书局, 1988: 590. -[41] 宋史卷三: 本纪第三[M]//宋史: 第 1 册. 北京: 中华书局, 1977: 49. -[43] BUSECK P R, NORD G L Jr., VEBLEN D R. Subsolidus phenomena in pyroxenes[M]//PREWITT C. Pyroxense. Washington, D.C.: Mineralogical Society of America, 1980: 117–211. -[42] 楼梦麟, 杨燕. 汶川地震基岩地震动特征分析[M]//同济大学土木工程防灾国家重点实验室. 汶川地震震害研究. 上海: 同济大学出版社, 2011: 11–12. -[33] POISEL R A. 通信电子战原理[M/OL]. 聂皞, 王振华, 陈少昌, 等, 译. 2 版. 北京: 电子工业出版社[2013–08–01]. http://www.baidu.com. DOI: AFAC1212121. -[33] POISEL R A. 通信电子战原理[M/OL]. 聂皞, 王振华, 陈少昌, 等, 译. 2 版. 北京: 电子工业出版社: 23–26 [2013–08–01]. http://www.baidu.com. DOI: AFAC1212121. -[33] POISEL R A. 通信电子战原理[M/OL]. 聂皞, 王振华, 陈少昌, 等, 译. 2 版. 北京: 电子工业出版社, 2013: 23–26 [2013–08–01]. http://www.baidu.com. DOI: AFAC1212121. -[33] 赵学功. 当代美国外交[M/OL]. [出版地不详]: 社会科学文献出版社, 2001 [2014–06–11]. http://www.baidu.com. -[3] 余敏. 出版集团研究[M/OL]. 北京: 中国书籍出版社, 2001. www.bla~bla.org. -[10] 余敏. 出版集团研究[M/OL]. 北京: 中国书籍出版社, 2001: 179–193 [2001–08–04]. http://www.baidu.com. -[11] 候文顺. 高分子物理: 高分子材料分析、选择与改性[M/OL]. 北京: 化学工业出版社, 2010: 119[2012–11–27]. http://apabi.lib.pku.edu.cn. -[15] KINCHY A. Seeds, Sciences, and struggle : the global politics of transgenic crops[M/OL]. Cambridge,Mass.: MIT Press, 2012: 50 [2013–07–14]. http://lib.myilibary.com. -[16] PRAETZELLIS A. Death by theory: a tale of mystery and archaeological theory[M/OL]. Rev.ed. [S.l.]: Rowman & Littlefield Publishing Group, Inc., 2011: 13 [2012–07–26]. http://lib.myilibrary.com. -[15] KINCHY A. Seeds, Sciences, and struggle : the global politics of transgenic crops[M]. Cambridge,Mass.: MIT Press, 2012: 50. -[22] 易仕和, 赵玉新, 何霖, 等. 超声速和高超声速喷管设计[M]. 北京: 国防工业出版社, 2013. -[24] MIROSLAV D L, DEJAN V T, BRIAN L E. 信号处理滤波器设计-基于 matlab 和 mathematica 的设计方法[M]. 朱义胜, 董辉, 译. 北京: 电子工业出版社, 2004. -[25] 蔡敏, 徐慧慧, 黄柄强. UML 基础和 Rose 建模教程[M]. 北京: 人民邮电出版社, 2006. -[33] POISEL R A. 通信电子战原理[M]. 聂皞, 王振华, 陈少昌, 等, 译. 2 版. 北京: 电子工业出版社, 2013: 23–26. -[27] SIMON M K, OMURA J K, SCHOLTZ R A, et al. Spread Spectrum Communications Handbook[M]. New York City: McGraw-Hill, Inc., 2001. -[23] Von PEEBLES P Z Jr, LIN S, DANIEL COSTELLO J. Probability, random variable, and random signal Principles[M]. 4th ed. New York: McGraw-Hill, 2001: 100. -[22] YI S H, ZHAO Y X, HE L, et al. Supersonic and hypersonic nozzle design[M]. BeiJing: National Defense Industry Press, 2013. -[41] LIN S, DANIEL COSTELLO J. Error Control Coding[M]. Second Edition. Englewood Cliffs: NJ:Prentice Hall, 2004. -[45] PROAKIS J G, MANOLAKIS D G. Digital signal processing: Principles,algorithms, and applications[M]. 第 4 版. 北京: 电子工业出版社, 2007. -[46] REED J H. An Introduction to Ultrawideband Communication Systems[M]. Upper Saddle River: NJ: Prentice Hall, 2005. -[47] ROOD H J. Logic and structured design for computer programmers[M]. 3rd ed. [S.l.]: Brooks/ColeThomson Learning, 2001. -[48] ROSS S M. 概率论基础教程[M]. 郑忠国, 詹从赞, 译. 第 8 版. 北京: 人民邮电出版社, 2010. -[49] SIMON M K, ALOUINI M S. Digital Communication over Fading Channels[M]. Hoboken: NJ: Wiley-IEEE Press, 2004. -[50] STUBER G L. Principles of Mobile Communication[M]. Second Edition. Norwell: MA: Kluwer Academic Publishers, 2001. -[51] YUFIN S A. Geoecology and computers: proceedings of the Third International Conference on Advances of Computer Methods in Geotechnical and Geoenvironmental Engineering, Moscow, Russia, February 1-4, 2000[M]. Rotterdam: A. A. Balkema, 2000. -[52] 埃伯哈德 蔡德勒, 等. 数学指南-实用数学手册[M]. 李文林等, 译. 北京: 科学出版社, 2012. -[53] 陈希孺. 概率论与数理统计[M]. 合肥: 中国科学技术大学出版社, 2009. -[54] 陈志杰, 赵书钦, 李树钧, 等. LaTeX 入门与提高[M]. 第二版. 北京: 高等教育出版社, 2010. -[1] 张伯伟. 全唐五代诗格会考[M]. 南京: 江苏古籍出版社, 2002: 288. -[2] 师伏堂日记: 第 4 册[M]. 北京: 北京图书馆出版社, 2009: 155. -[3] 胡承正, 周详, 缪灵. 理论物理概论: 上[M]. 武汉: 武汉大学出版社, 2010: 112. -[4] 美国妇产科医师学会. 新生儿脑病和脑性瘫痪发病机制与病理生理[M]. 段涛, 杨慧霞, 译. 北京: 人民卫生出版社, 2010: 38–39. -[5] 康熙字典: 已集上: 水部[M]. 同文书局影印本. 北京: 中华书局, 1962: 50. -[6] 汪昂. 增订本草备要: 四卷[M]. 刻本. 上海: 老二酉堂. -[7] 蒋有绪, 郭泉水, 马娟, 等. 中国森林群落分类及其群落学特征[M]. 北京: 科学出版社, 1998. -[8] 中国企业投资协会, 台湾并购与私募股权协会, 汇盈国际投资集团. 投资台湾: 大陆企业赴台投资指南[M]. 北京: 九州出版社, 2013. -[9] 罗斯基. 战前中国经济的增长[M]. 唐巧天, 毛立坤, 姜修宪, 译. 杭州: 浙江大学出版社, 2009. -[10] 库恩. 科学革命的结构: 第 4 版[M]. 金吾伦, 胡新和, 译. 2 版. 北京: 北京大学出版社, 2012. -[12] CRAWFPRD W, GORMAN M. Future libraries:dreams, maddness, & reality[M]. Chicago: American Library Association, 1995. -[13] International Federation of Library Association and Institutions. Names of persons: national usages for entry in catalogues[M]. 3rd ed. London: IFLA International Office for UBC, 1977. -[14] O’BRIEN J A. Introduction to information systems[M]. 7th ed. Burr Ridge, III.: Irwin, 1994. -[10] 库恩, 余敏, 阿飞, 等. 科学革命的结构: 第 4 版[M]. 金吾伦, 胡新和, 译. 北京: 北京大学出版社, 2012. -[10] 库恩. 科学革命的结构: 第 4 版[M]. 北京: 北京大学出版社, 2012. -[10] 库恩. 科学革命的结构: 第 4 版[M]. 金吾伦, 胡新和, 译. 2 版. 北京: 北京大学出版社, 2012. -[8] 余敏. 出版集团研究[M]. 3 版. 北京: 中国书籍出版社, 2001. DOI: AFAC1212121. -[1] 余敏. 出版集团研究[M]. 北京: 中国书籍出版社. DOI: AFAC1212121. -[1] 余敏. 出版集团研究[M]. 北京: 中国书籍出版社: 179–193. DOI: AFAC1212121. -[11] 出版集团研究[M]. 北京: 中国书籍出版社, 2001: 179–193. -[8] 余敏. 出版集团研究[M]. 北京: 中国书籍出版社, 2001: 179–193.DOI:AFAC1212121. -[7] 余敏. 出版集团研究[M]. 北京: 中国书籍出版社, 2001: 179–193. -[2] 余敏. 出版集团研究[M]. [出版地不详]: 中国书籍出版社, 2001: 179–193. -[4] 余敏. 出版集团研究[M]. 北京: [出版者不详], 2001. -[5] 余敏. 出版集团研究[M]. 北京: [出版者不详]. -[6] 余敏. 出版集团研究[M]. 北京: [出版者不详], 2001: 20–30. -[9] 余敏. 出版集团研究[M]. 2 版. 北京: 中国书籍出版社, 2001: 179–193. -[11] 出版集团研究[M]. 北京: 中国书籍出版社, 2001: 179–193. -[12] PARSONS. The Mobile Radio Propagation Channel[M]. 2nd ed. Hoboken: John Wiley, Sons,2000. -[13] Parsons. The Mobile Radio Propagation Channel[M]. 2nd ed. Hoboken: John Wiley, Sons, 2000. -[14] PARSONS J D. The Mobile Radio Propagation Channel[M]. 2nd ed. Hoboken: John Wiley,Sons, 2000. -[15] PARSONS J D. The Mobile Radio Propagation Channel[M]. 2nd ed. Hoboken: John Wiley,Sons. -[16] PARSONS J D. The Mobile Radio Propagation Channel[M]. 2nd ed. [S.l.]: John Wiley, Sons,2000. -[17] PARSONS J D. The Mobile Radio Propagation Channel[M]. 2nd ed. Hoboken: [s.n.], 2000. -[18] PARSONS J D. The Mobile Radio Propagation Channel[M]. 2nd ed. Hoboken: [s.n.]. -[19] PARSONS J D. The Mobile Radio Propagation Channel[M]. 2nd ed. Hoboken: [s.n.], 2000: 15–20.
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gb7714texttobib.pl b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gb7714texttobib.pl deleted file mode 100644 index 1b8dc7be363..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gb7714texttobib.pl +++ /dev/null @@ -1,1670 +0,0 @@ -##% -##% --------------------------------------------------------------- -##% gb7714texttobib--- A transformation tool for GB/T 7714-2015 style -##% bibliography text to bib source file -##% -##% Maintained by huzhenzhen -##% Homepage: <https://github.com/hushidong/biblatex-gb7714-2015> -##% history: -##% 2017/02/26 v1.0g -##% E-mail: -##% hzzmail@163.com -##% Released under the LaTeX Project Public License v1.3c or later -##% usage: -##% perl gb7714texttobib.pl in=textfilename out=bibfilename -##% options(need to do): -##% style=ay or default -##% key=ay or default -##% -##% --------------------------------------------------------------- -#%Target:: 将pdf文档中拷出的参考文献文本转换成bib文件,文本文件中的一条参考文献为一行 -#%Method:: 利用perl进行文本处理,处理和判断的两个重要方面是: -# 分析分割后的文本的位置和内容,使用的是正则表达式匹配,主要两种方式 -# 1.根据标点和本文特征一部分一部分的解析,比如book条目处理 -# 2.直接列出所有可能的正则表达式一个个匹配,比如article条目处理 -#%Date :: 2017-02-22 -#%Note :: 1.网址之类如果解析出错,应确认其前导词http://之前没有空格 -# 2.有些以.连接有从属关系的机构作者,可以把.后的空格去掉便于正确解析 -# 3.有些尽管解析到的域不是真实的域,但不影响著录格式(显示效果),相应条目的域 -# 可以在bib文件中完善,尽管从实用角度并不需要这么做。 -# -##% --------------------------------------------------------------- -##% todo: 1. pdf 的比较? -##% obsolete intro: -##% 1.源文件文档如果个别地方不符合规范,可以修改一下 -##% (a):inbook/standard类中,当出现//后面第二项是booktitle且其中存在:时,先把父标题的冒号改成colon,比如 -##% [M]//李承森. 宋史: 第 1 册. 北京: 中华书局. 应把宋史后的冒号改掉 -##% [S]//全国文献工作标准化技术委员会. 文献工作国家标准汇编: 3. 北京: 中国标准出版社, 1988: 59–92. -##% --------------------------------------------------------------- - - -foreach $file(@ARGV){ - print 'file:',$file,"\n"; - if($file=~m/in=/){ - ($infile)=($file=~m/in=(.*)/) - } - if($file=~m/out=/){ - ($outfile)=($file=~m/out=(.*)/) - } -} - -open (FHR,"<$infile"); -open (FHW,">$outfile"); -print FHW '% Encoding: UTF-8',"\n"; - -@references=<FHR>;#将所有的文献存为@references数组,各文献以<行>为单位进行区分 - -$ns=1; -$ne=@references; -$nline=0; -foreach $reference(@references){ - - $nline=$nline+1; - if($nline<$ns){next;} #先跳过几行进行,配合后面的last进行当行测试 - - while($reference=~m/–/){ - $reference=~s/–/-/;#直接利用正则表达式更正页码/日期/网址中的连字符 - } - print "$reference ";#打印各文献的内容 - - undef $entrytype; - undef $author; - undef $title; - undef $journal; - undef $translator; - undef $bookauthor; - undef $booktitle; - undef $version; - undef $address; - undef $publisher; - undef $institution; - undef $year; - undef $type; - undef $date; - undef $volume; - undef $number; - undef $pages; - undef $eventdate; - undef $urldate; - undef $url; - undef $doi; - undef $note; - undef $eventyvn; - undef $endeventyvn; - undef $eventdate; - undef $eventvol; - undef $eventnum; - undef $endeventdate; - undef $endeventvol; - undef $endeventnum; - - #--------------------------------------------------------------- - #条目类型:期刊和期刊中析出的文献/periodical、article - #--------------------------------------------------------------- - if(1){ - if($reference=~m/\[J\]/){ - if($reference=~m/:\s/ and $reference=~m/:\s\D/){#根据存在出版社前的冒号加空格区分 - print 'this entry is periodical',"\n"; - $entrytype='periodical'; - }else{ - print 'this entry is article',"\n"; - $entrytype='article'; - } - } - - if($entrytype eq 'periodical'){#字符串比较用eq而数字比较用==,如果用==那么两边都是1,则是真 - $regexformach='\[J\]\.'; - &bfidentifier; - - ($preadderess, $pospublisher)=($reference=~m/\[J\]\.(.*):\s(.*)/); - print 'preadderess =',$preadderess,"\n"; - print 'pospublisher=',$pospublisher,"\n"; - ($eventyear, $address)=($preadderess=~m/(.*)\.\s(.*)/); - print 'eventyear =',$eventyear,"\n"; - print 'address =',$address,"\n"; - ($eventyvn, $endeventyvn)=($eventyear=~m/(.*)\-(.*)/);#yvn表示year,volume,number - print 'eventyvn =',$eventyvn,"\n"; - print 'endeventyvn =',$endeventyvn,"\n"; - if($eventyvn=~m/.*,.*/){#存在逗号表明有卷信息 - ($eventdate, $eventvol, $eventnum)=($eventyvn=~m/\s*(.*),\s(.*)\((.*)\)/);#yvn表示year,volume,number - print 'eventdate =',$eventdate,"\n"; - print 'eventvol =',$eventvol,"\n"; - print 'eventnum =',$eventnum,"\n"; - if($endeventyvn){ - ($endeventdate, $endeventvol, $endeventnum)=($endeventyvn=~m/\s*(.*),\s(.*)\((.*)\)/);#yvn表示year,volume,number - print 'endeventdate =',$endeventdate,"\n"; - print 'endeventvol =',$endeventvol,"\n"; - print 'endeventnum =',$endeventnum,"\n"; - } - }else{ - ($eventdate, $eventnum)=($eventyvn=~m/\s*(.*)\((.*)\)/);#yvn表示year,volume,number - print 'eventdate =',$eventdate,"\n"; - print 'eventvol =',$eventvol,"\n"; - print 'eventnum =',$eventnum,"\n"; - if($endeventyvn){ - ($endeventdate, $endeventnum)=($endeventyvn=~m/\s*(.*)\((.*)\)/);#yvn表示year,volume,number - print 'endeventdate =',$endeventdate,"\n"; - print 'endeventvol =',$endeventvol,"\n"; - print 'endeventnum =',$endeventnum,"\n"; - } - } - if($endeventdate){ - $date=$eventdate.'-'.$endeventdate; - }else{ - $date=$eventdate - } - if($endeventvol){ - $volume=$eventvol.'-'.$endeventvol; - }else{ - $volume=$eventvol - } - if($endeventnum){ - $number=$eventnum.'-'.$endeventnum; - }else{ - $number=$eventnum - } - print 'date =',$date,"\n"; - print 'volume =',$volume,"\n"; - print 'number =',$number,"\n"; - ($publisher)=($pospublisher=~m/(.*),/); - print 'publisher =',$publisher,"\n"; - } - - if($entrytype eq 'article'){ - $regexformach='\[J\]\.'; - &bfidentifier; - - $flagmatched=0; - $regexbfjournal='\]\.\s(.*),\s(.*),\s(.*)\((.*)\):\s(.*)\.';#包括全部信息 - if($reference=~m/$regexbfjournal/){ - ($journal,$date,$volume,$number,$pages)=($reference=~m/$regexbfjournal/); - $flagmatched=1; - print '包括全部信息',"\n"; - } - $regexbfjournal='\]\.\s(.*),\s(.*),\s(.*)\((.*)\)\.';#没有页码 - if($reference=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$volume,$number)=($reference=~m/$regexbfjournal/); - $flagmatched=1; - print '没有页码',"\n"; - } - $regexbfjournal='\]\.\s(.*),\s(.*),\s(.*):\s(.*)\.';#没有期 - if($reference=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$volume,$pages)=($reference=~m/$regexbfjournal/); - $flagmatched=1; - print '没有期',"\n"; - } - $regexbfjournal='\]\.\s(.*),\s(.*)\((.*)\):\s(.*)\.';#没有卷/年 - if($reference=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$number,$pages)=($reference=~m/$regexbfjournal/); - $flagmatched=1; - if($date!~m/\d{4}/){ - $volume=$date; - $date=''; - } - print '没有卷/年',"\n"; - } - $regexbfjournal='\]\.\s(.*),\s(.*),\s(.*)\.';#没有页码,期 - if($reference=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$volume)=($reference=~m/$regexbfjournal/); - $flagmatched=1; - print '没有页码,期',"\n"; - } - $regexbfjournal='\]\.\s(.*),\s(.*)\((.*)\)\.';#没有页码,卷/年 - if($reference=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$number)=($reference=~m/$regexbfjournal/); - $flagmatched=1; - if($date!~m/\d{4}/){ - $volume=$date; - $date=''; - } - print '没有页码,卷/年',"\n"; - } - $regexbfjournal='\]\.\s(.*),\s(.*):\s(.*)\.';#没有卷/年,期 - if($reference=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$pages)=($reference=~m/$regexbfjournal/); - $flagmatched=1; - if($date!~m/\d{4}/){ - $volume=$date; - $date=''; - } - print '没有卷/年,期',"\n"; - } - - if($flagmatched==0){ - print 'the text after title was not matched, please add a regex for the current entry in the perl source code!',"\n"; - print '当前条目标题之后的内容没有匹配的正则表达式,请在perl代码中增加适合该条目正则表达式!',"\n"; - } - - print 'journal =',$journal,"\n"; - print 'date =',$date,"\n"; - print 'volume =',$volume,"\n"; - print 'number =',$number,"\n"; - print 'pages =',$pages,"\n"; - - } - - #判断期刊中析出的文献,带url - if($reference=~m/\[J\/OL\]/){ - print 'this entry is article with url',"\n"; - $entrytype='article'; - - $regexformach='\[J\/OL\]\.'; - &bfidentifier; - - ($postitle)=($reference=~m/\[J\/OL\]\.\s(.*)/); - if($postitle=~m/\[.*\]/){#存在urldate - ($preurldate,$urldate,$posurl)=($postitle=~m/(.*)\[(.*)\]\.\s(.*)/); - }else{#不存在urldate - ($preurldate,$posurl)=($postitle=~m/(.*)(http:.*)/); - } - unless($preurldate=~m/\.$/){$preurldate=$preurldate.'.';}#加个点统一上面两种方式 - - #处理url和doi - $regexposurl='(.*)doi:\s(.*)';#处理url和doi - if($posurl=~m/$regexposurl/i){ - ($url,$doi)=($posurl=~m/$regexposurl/i); - }else{ - $url=$posurl; - } - - #处理urldate前的内容,基本article不带url的情况相同 - $flagmatched=0; - $regexbfjournal='(.*),\s(.*),\s(.*)\((.*)\):\s(.*)\.';#包括全部信息 - if($preurldate=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$volume,$number,$pages)=($preurldate=~m/$regexbfjournal/); - $flagmatched=1; - } - $regexbfjournal='(.*),\s(.*),\s(.*)\((.*)\)\.';#没有页码 - if($preurldate=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$volume,$number)=($preurldate=~m/$regexbfjournal/); - $flagmatched=1; - } - $regexbfjournal='(.*),\s(.*),\s(.*):\s(.*)\.';#没有期 - if($preurldate=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$volume,$pages)=($preurldate=~m/$regexbfjournal/); - $flagmatched=1; - } - $regexbfjournal='(.*),\s(.*)\((.*)\):\s(.*)\.';#没有卷/年 - if($preurldate=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$number,$pages)=($preurldate=~m/$regexbfjournal/); - $flagmatched=1; - if($date!~m/\d{4}/){ - $volume=$date; - $date=''; - } - } - $regexbfjournal='(.*),\s(.*),\s(.*)\.';#没有页码,期 - if($preurldate=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$volume)=($preurldate=~m/$regexbfjournal/); - $flagmatched=1; - } - $regexbfjournal='(.*),\s(.*)\((.*)\)\.';#没有页码,卷/年 - if($preurldate=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$number)=($preurldate=~m/$regexbfjournal/); - $flagmatched=1; - if($date!~m/\d{4}/){ - $volume=$date; - $date=''; - } - } - $regexbfjournal='(.*),\s(.*):\s(.*)\.';#没有卷/年,期 - if($preurldate=~m/$regexbfjournal/ and $flagmatched==0){ - ($journal,$date,$pages)=($preurldate=~m/$regexbfjournal/); - $flagmatched=1; - if($date!~m/\d{4}/){ - $volume=$date; - $date=''; - } - } - - if($flagmatched==0){ - print 'the text after title was not matched, please add a regex for the current entry in the perl source code!',"\n"; - print '当前条目标题之后的内容没有匹配的正则表达式,请在perl代码中增加适合该条目正则表达式!',"\n"; - } - - print 'journal =',$journal,"\n"; - print 'date =',$date,"\n"; - print 'volume =',$volume,"\n"; - print 'number =',$number,"\n"; - print 'pages =',$pages,"\n"; - print 'urldate =',$urldate,"\n"; - print 'url =',$url,"\n"; - print 'doi =',$doi,"\n"; - - - } - } - - #--------------------------------------------------------------- - #条目类型:判断报纸中析出的文献/newspaper - #--------------------------------------------------------------- - if(1){ - if($reference=~m/\[N\]/){ - print 'this entry is newspaper',"\n"; - $entrytype='newspaper'; - $note='news'; - $regexnewsflag='\[N\]'; - $onlineflag=0; - } - if($reference=~m/\[N\/OL\]/){ - print 'this entry is newspaper with url',"\n"; - $entrytype='newspaper'; - $note='news'; - $regexnewsflag='\[N\/OL\]'; - $onlineflag=1; - } - if($entrytype eq 'newspaper'){ - if($onlineflag==1){ - $regexformach='\[N\/OL\]'; - &bfidentifier; - - print 'has url',"\n"; - $flagmatched=0; - $regexnewspostitle='\.\s(.*),\s(.*)\((.*)\)\s*\[(.*)\]\.\s(.*)'; - if($reference=~m/$regexnewsflag$regexnewspostitle/ and $flagmatched==0){ - $flagmatched=1; - ($journal,$date,$number,$urldate,$posurl)=($reference=~m/$regexnewsflag$regexnewspostitle/);} - $regexnewspostitle='\.\s(.*),\s(.*)\s*\[(.*)\]\.\s(.*)'; - if($reference=~m/$regexnewsflag$regexnewspostitle/ and $flagmatched==0){ - $flagmatched=1; - ($journal,$date,$urldate,$posurl)=($reference=~m/$regexnewsflag$regexnewspostitle/);} - if($flagmatched==0){ - print 'the text after title was not matched, please add a regex for the current entry in the perl source code!',"\n"; - print '当前条目标题之后的内容没有匹配的正则表达式,请在perl代码中增加适合该条目正则表达式!',"\n"; - } - }else{ - $regexformach='\[N\]'; - &bfidentifier; - - print 'no url',"\n"; - $regexnewspostitle='\.\s(.*),\s(.*)\((.*)\)'; - ($journal,$date,$number)=($reference=~m/$regexnewsflag$regexnewspostitle/); - } - #处理url和doi - $regexposurl='(.*)doi:\s(.*)';#处理url和doi - if($posurl=~m/$regexposurl/i){ - ($url,$doi)=($posurl=~m/$regexposurl/i); - }else{ - $url=$posurl; - } - - # print 'journal =',$journal,"\n"; - # print 'date =',$date,"\n"; - # print 'volume =',$volume,"\n"; - # print 'number =',$number,"\n"; - # print 'pages =',$pages,"\n"; - # print 'urldate =',$urldate,"\n"; - # print 'url =',$url,"\n"; - # print 'doi =',$doi,"\n"; - } - } - - - #--------------------------------------------------------------- - #条目类型:论文集中析出的文献/inproceedings - #--------------------------------------------------------------- - if(1){#\/\/ - if ($reference=~m/\[C\/OL\]\/\//){ - $entrytype='inproceedings'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[C\/OL\]\/\/'; - &bfidentifier; - - $regexformach='C\/OL\]\/\/'; - &bfaddressinbook; - - &afpublisherbookurl; - }elsif($reference=~m/\[C\]\/\//){ - $entrytype='inproceedings'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[C\]\/\/'; - &bfidentifier; - - $regexformach='C\]\/\/'; - &bfaddressinbook; - - &afpublisherbook; - } - - if ($entrytype eq 'inproceedings'){ - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - } - - } - - - #--------------------------------------------------------------- - #条目类型:论文集/proceedings - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[C\/OL\]\./){ - $entrytype='proceedings'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[C\/OL\]\.'; - &bfidentifier; - - $regexformach='C\/OL\]\.'; - &bfaddressbook; - - &afpublisherbookurl; - }elsif($reference=~m/\[C\]\./){ - $entrytype='proceedings'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[C\]\.'; - &bfidentifier; - - $regexformach='C\]\.'; - &bfaddressbook; - - &afpublisherbook; - } - - if ($entrytype eq 'proceedings'){ - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - print 'date=',"$date"; - } - } - - - - - #--------------------------------------------------------------- - #条目类型:未出版物/unpublished - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[Z\/OL\]\./){ - $entrytype='unpublished'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[Z\/OL\]\.'; - &bfidentifier; - - $regexformach='Z\/OL\]\.'; - &bfaddressbook; - - &afpublisherbookurlb; - }elsif($reference=~m/\[Z\]\./){ - $entrytype='unpublished'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[Z\]\.'; - &bfidentifier; - - $regexformach='Z\]\.'; - &bfaddressbook; - - &afpublisherbookb; - } - - if ($entrytype eq 'unpublished'){ - $date=$year; - print 'date=',"$date"; - } - } - - - #--------------------------------------------------------------- - #条目类型:手册、档案/manual - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[A\/OL\]\./){ - $entrytype='manual'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[A\/OL\]\.'; - &bfidentifier; - - $regexformach='A\/OL\]\.'; - &bfaddressbook; - - &afpublisherbookurlb; - }elsif($reference=~m/\[A\]\./){ - $entrytype='manual'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[A\]\.'; - &bfidentifier; - - $regexformach='A\]\.'; - &bfaddressbook; - - &afpublisherbookb; - } - - if ($entrytype eq 'manual'){ - $date=$year; - print 'date=',"$date"; - } - } - - - - #--------------------------------------------------------------- - #条目类型:报告/report - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[R\/OL\]\./){ - $entrytype='report'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[R\/OL\]\.'; - &bfidentifier; - - $regexformach='R\/OL\]\.'; - &bfaddressbook; - - &afpublisherbookurlb; - }elsif($reference=~m/\[R\]\./){ - $entrytype='report'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[R\]\.'; - &bfidentifier; - - $regexformach='R\]\.'; - &bfaddressbook; - - &afpublisherbookb; - } - - if ($entrytype eq 'report'){ - $date=$year; - print 'date=',"$date"; - } - - } - - #--------------------------------------------------------------- - #条目类型:标准/standard - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[S\/OL\]\./){ - $entrytype='standard'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[S\/OL\]\.'; - &bfidentifier; - - $regexformach='S\/OL\]\.'; - &bfaddressbook; - &afpublisherbookurl; - }elsif($reference=~m/\[S\]\./){ - $entrytype='standard'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[S\]\.'; - &bfidentifier; - - $regexformach='S\]\.'; - &bfaddressbook; - - &afpublisherbook; - }elsif ($reference=~m/\[S\/OL\]\/\//){ - $entrytype='standard'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[S\/OL\]\/\/'; - &bfidentifier; - - $regexformach='S\/OL\]\/\/'; - &bfaddressinbook; - - &afpublisherbookurl; - }elsif($reference=~m/\[S\]\/\//){ - $entrytype='standard'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[S\]\/\/'; - &bfidentifier; - - $regexformach='S\]\/\/'; - &bfaddressinbook; - - &afpublisherbook; - } - if ($entrytype eq 'standard'){ - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - $note='standard'; - print 'date=',"$date"; - print 'note=',"$note"; - } - - } - - #--------------------------------------------------------------- - #条目类型:学位论文/thesis - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[D\/OL\]\./){ - $entrytype='thesis'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[D\/OL\]\.'; - &bfidentifier; - - $regexformach='D\/OL\]\.'; - &bfaddressbook; - - &afpublisherbookurl; - }elsif($reference=~m/\[D\]\./){ - $entrytype='thesis'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[D\]\.'; - &bfidentifier; - - $regexformach='D\]\.'; - &bfaddressbook; - - &afpublisherbook; - } - - if ($entrytype eq 'thesis'){ - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - print 'date=',"$date"; - } - - } - - - #--------------------------------------------------------------- - #条目类型:汇编中析出的文献/incollection - #--------------------------------------------------------------- - if(1){#\/\/ - if ($reference=~m/\[G\/OL\]\/\//){ - $entrytype='incollection'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[G\/OL\]\/\/'; - &bfidentifier; - - $regexformach='G\/OL\]\/\/'; - &bfaddressinbook; - - &afpublisherbookurl; - }elsif($reference=~m/\[G\]\/\//){ - $entrytype='incollection'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[G\]\/\/'; - &bfidentifier; - - $regexformach='G\]\/\/'; - &bfaddressinbook; - - &afpublisherbook; - } - - if ($entrytype eq 'incollection'){ - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - } - - } - - - #--------------------------------------------------------------- - #条目类型:汇编/collection - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[G\/OL\]\./){ - $entrytype='collection'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[G\/OL\]\.'; - &bfidentifier; - - $regexformach='G\/OL\]\.'; - &bfaddressbook; - - &afpublisherbookurl; - }elsif($reference=~m/\[G\]\./){ - $entrytype='collection'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[G\]\.'; - &bfidentifier; - - $regexformach='G\]\.'; - &bfaddressbook; - - &afpublisherbook; - } - - if ($entrytype eq 'collection'){ - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - print 'date=',"$date"; - } - } - - - #--------------------------------------------------------------- - #条目类型:专利/patent - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[P\/OL\]\./){ - $entrytype='patent'; - print "this entry's type is: $entrytype with url\n"; - $regexformach='\[P\/OL\]\.'; - &bfidentifier; - }elsif($reference=~m/\[P\]\./){ - $entrytype='patent'; - print "this entry's type is: $entrytype \n"; - $regexformach='\[P\]\.'; - &bfidentifier; - } - - if($entrytype eq 'patent'){ - ($postitle)=($reference=~m/$regexformach\s*(.*)/); - print 'postitle=',$postitle,"\n"; - $titlenumber=$title; - if($titlenumber=~m/:\s*\d.*/){ - ($title,$number)=($titlenumber=~m/(.*):\s*(\d.*)/); - print 'title =',$title,"\n"; - print 'number =',$number,"\n"; - } - - if($postitle=~m/\[.*\]/ and $reference=~m/\[P\/OL\]\./){ - ($date,$urldate,$posurl)=($postitle=~/(.*)\s*\[(.*)\]\.\s*(.*)/); - print 'date=',$date,"\n"; - print 'urldate =',$urldate,"\n"; - print 'posurl =',$posurl,"\n"; - if($posurl=~m/DOI/i){#匹配存在doi的话 - ($url,$doi)=($posurl=~m/(.*)DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - $url=$posurl; - print 'url =',"$url \n"; - } - }else{ - $posurl=$postitle; - if($posurl=~m/DOI/i){#匹配存在doi的话 - ($date,$doi)=($posurl=~m/(.*)DOI:(.*)\./i); - print 'date=',"$date \n"; - print 'doi =',"$doi \n"; - }else{ - $date=$posurl; - print 'date =',"$date \n"; - } - } - } - } - - - #--------------------------------------------------------------- - #条目类型:电子资源/online - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[EB\/OL\]\./){#匹配[EB/OL]判断为online类型 - $entrytype='online'; - print "this entry's type is: $entrytype \n"; - - $regexformach='\[EB\/OL\]\.'; - &bfidentifier; - - ($postitle)=($reference=~m/$regexformach\s*(.*)/); - print 'postitle=',$postitle,"\n"; - - if($postitle=~m/\(.*\)/ and $postitle=~m/\[.*\]/){#存在更新日期和引用日期 - ($eventdate,$urldate,$posurl)=($postitle=~/\s*\((.*)\)\s*\[(.*)\]\.\s*(.*)/); - }elsif($postitle=~m/\(.*\)/ and $postitle!~m/\[.*\]/){#存在更新日期但无引用日期 - ($eventdate,$posurl)=($postitle=~/\s*\((.*)\)\.\s*(.*)/); - }elsif($postitle!~m/\(.*\)/ and $postitle=~m/\[.*\]/){#存在引用日期但无更新日期 - ($urldate,$posurl)=($postitle=~/\s*\[(.*)\]\.\s*(.*)/); - }else{ - ($posurl)=($postitle=~/\s*(.*)/); - } - print 'eventdate=',$eventdate,"\n"; - print 'urldate =',$urldate,"\n"; - print 'posurl =',$posurl,"\n"; - - if($posurl=~m/DOI/i){#匹配存在doi的话 - ($url,$doi)=($posurl=~m/(.*)DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - $url=$posurl; - print 'url =',"$url \n"; - } - } - } - - #--------------------------------------------------------------- - #条目类型:专著/book - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[M\]\./){#匹配[M]判断为book类型 - print "this entry's type is: book \n"; - $entrytype='book'; - - $regexformach='\[M\]\.'; - &bfidentifier; - - $regexformach='M\]\.'; - &bfaddressbook; - - &afpublisherbook; - - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - } - } - - #--------------------------------------------------------------- - #条目类型:专著但存在网址/book with url - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[M\/OL\]\./){ - print "this entry's type is: book with url\n"; - $entrytype='book'; - - $regexformach='\[M\/OL\]\.'; - &bfidentifier; - - $regexformach='M\/OL\]\.'; - &bfaddressbook; - - &afpublisherbookurl; - - - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - } - } - - - #--------------------------------------------------------------- - #条目类型:专著中析出文献/inbook - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[M\]\/\//){#匹配[M]//判断为inbook类型 - print "this entry's type is: inbook \n"; - $entrytype='inbook'; - - $regexformach='\[M\]\/\/'; - &bfidentifier; - - $regexformach='M\]\/\/'; - &bfaddressinbook; - - &afpublisherbook;#出版社及之后的信息inbook/book一样的 - - - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - } - } - - - #--------------------------------------------------------------- - #条目类型:专著中析出文献但存在网址/inbook with url - #--------------------------------------------------------------- - if(1){ - if ($reference=~m/\[M\/OL\]\/\//){#匹配[M]//判断为inbook类型 - print "this entry's type is: inbook \n"; - $entrytype='inbook'; - - - $regexformach='\[M\/OL\]\/\/'; - &bfidentifier; - - $regexformach='M\/OL\]\/\/'; - &bfaddressinbook; - - &afpublisherbookurl;#出版社及之后的信息inbook/book一样的 - - - if ($address=~m/\[S\.l\.\]/ or $address=~m/出版地不详/) {#当存在英文的[s.n.] - $address=""; - } - if ($publisher=~m/\[s\.n\.\]/ or $publisher=~m/出版者不详/) {#当存在英文的[s.n.] - $publisher=""; - } - $date=$year; - } - } - - - #--------------------------------------------------------------- - #输出到bib文件中 - #--------------------------------------------------------------- - if(1){ - if($date=~m/-\d{4}/){#存在enddate的情况下,将中间的连字符转化成斜杠 - print 'date=',$date,"\n"; - ($datetempa,$datetempb)=($date=~m/(.*)-(\d{4}.*)/); - $date=$datetempa.'/'.$datetempb; - print 'date=',$date,"\n"; - } - - if($url=~m/.*\.$/){ - $urlplusdot=$url; - ($url)=($urlplusdot=~m/(.*)\.$/);#去掉处于条目末尾的url地址后的点 - } - #最后输出 - print "\n"; - print '@',"$entrytype",'{',"ref-$nline-$sn",',',"\n"; - $author&& print 'author = {',$author,'},',"\n"; - $title&& print 'title = {',$title,'},',"\n"; - $journal&& print 'journal = {',$journal,'},',"\n"; - $translator&& print 'translator= {',$translator,'},',"\n"; - $bookauthor&& print 'bookauthor= {',$bookauthor,'},',"\n"; - $booktitle&& print 'booktitle = {',$booktitle,'},',"\n"; - $version&& print 'version = {',$version,'},',"\n"; - $address&& print 'address = {',$address,'},',"\n"; - $publisher&& print 'publisher = {',$publisher,'},',"\n"; - $type&& print 'type = {',$type,'},',"\n"; - $date&& print 'date = {',$date,'},',"\n"; - $volume&& print 'volume = {',$volume,'},',"\n"; - $number&& print 'number = {',$number,'},',"\n"; - $pages&& print 'pages = {',$pages,'},',"\n"; - $eventdate&& print 'eventdate = {',$eventdate,'},',"\n"; - $urldate&& print 'urldate = {',$urldate,'},',"\n"; - $url&& print 'url = {',$url,'},',"\n"; - $doi&& print 'doi = {',$doi,'},',"\n"; - $note&& print 'note = {',$note,'},',"\n"; - print '}',"\n"; - print 'authorlabel=',$authorlabel,"\n"; - - - print FHW '@',"$entrytype",'{',"ref-$nline-$sn-$authorlabel",',',"\n"; - $author&& print FHW 'author = {',$author,'},',"\n"; - $title&& print FHW 'title = {',$title,'},',"\n"; - $journal&& print FHW 'journal = {',$journal,'},',"\n"; - $translator&& print FHW 'translator= {',$translator,'},',"\n"; - $bookauthor&& print FHW 'bookauthor= {',$bookauthor,'},',"\n"; - $booktitle&& print FHW 'booktitle = {',$booktitle,'},',"\n"; - $version&& print FHW 'version = {',$version,'},',"\n"; - $address&& print FHW 'address = {',$address,'},',"\n"; - $publisher&& print FHW 'publisher = {',$publisher,'},',"\n"; - $type&& print FHW 'type = {',$type,'},',"\n"; - $date&& print FHW 'date = {',$date,'},',"\n"; - $volume&& print FHW 'volume = {',$volume,'},',"\n"; - $number&& print FHW 'number = {',$number,'},',"\n"; - $pages&& print FHW 'pages = {',$pages,'},',"\n"; - $eventdate&& print FHW 'eventdate = {',$eventdate,'},',"\n"; - $urldate&& print FHW 'urldate = {',$urldate,'},',"\n"; - $url&& print FHW 'url = {',$url,'},',"\n"; - $doi&& print FHW 'doi = {',$doi,'},',"\n"; - $note&& print FHW 'note = {',$note,'},',"\n"; - print FHW '}',"\n"; - } - - - print "\n"; - if($nline>=$ne){last;} #先跳过几行进行,配合后面的last进行当行测试 -} - - sub bfidentifier{#bf表示before,标识符前所有的类型都一样 - #$regexpformach=@_; - #print '@_=',@_,"\n"; - #print 'regexpformach=',"$regexpformach \n"; - #标识符之前很容易匹配三个内容,序号,作者和标题 - if($reference=~m/.*\D\.\s\D.*$regexformach/){#匹配存在作者后的点的话,同时点号周围不是数字,有时标题中可能出现1.1这样的信息 - ($sn , $author , $title)=($reference=~m/\[(\d+)\]\s*(.*)\.\s(.*)$regexformach/); - print 'sn =',"$sn \n"; - print 'author=',"$author \n";#作者多个姓名还需要处理,还要注意有前后缀的情况 - print 'title =',"$title \n"; - if($author=~m/等/){ - $author=~s/等/others/;#将等换成others - }else{ - $author=~s/,\s*$//;#将最后一个逗号去掉 - } - if($author=~m/et\sal/){ - $author=~s/et\sal/others/;#将et al.换成others - }else{ - $author=~s/,\s*$//;#将最后一个逗号去掉 - } - while($author=~m/,/){ - $author=~s/,/ and /;#将逗号换成and - } - print 'author=',"$author \n"; - }else{#不存在作者的话\[M\]\/\/ - ($sn , $title)=($reference=~m/\[(\d+)\]\s*(.*)$regexformach/);#标识符之前很容易匹配三个内容,序号,作者和标题 - print 'sn =',"$sn \n"; - print 'title =',"$title \n"; - } - - #进一步处理责任者的姓名,主要针对英文名需要有一些符号进行区分姓,名,前缀和后缀。 - @names=split('and',$author); - print 'names=',@names,"\n"; - $author=""; - $j=0; - foreach $name(@names){#一个姓名一个姓名处理 - - $j=$j+1; - #print $name,"\n"; - @nameparts=split(' ',$name); - #print 'nameparts=',@nameparts,"\n"; - - $org=0; - for($k=0;$k<@nameparts;$k++){ - if(@nameparts[$k]=~m/.{2,}/ and @nameparts[$k]!~m/\s*von\s*/i and @nameparts[$k]!~m/\s*jr\s*/i){ - #当分解的单作者的各个部分,存在两个以上为2个字符以上的情况,说明不是一般的姓名而是机构作者 - $org=$org+1; - print 'org=',"$org\n"; - } - } - - if(@nameparts>1){ - if(@nameparts[0]=~m/\s*von\s*/i){#确定姓的位置 - $family=1; - @nameparts[1]=@nameparts[1].','; - }else{ - $family=0; - @nameparts[0]=@nameparts[0].','; - } - if(@nameparts[-1]=~m/\s*jr\s*/i){#确定后缀的位置 - @nameparts[-1]=@nameparts[-1].'.,'; - $given=@nameparts-2; - $suffix=1; - }else{ - $suffix=0; - $given=@nameparts-1; - } - print 'family=',$family,"\n"; - print 'given=',$given,"\n"; - print 'suffix=',$suffix,"\n"; - print 'familyname=',@nameparts[$family],"\n"; - - $namefmt=""; - for($i=0;$i<=$family;$i++){ - $namefmt=$namefmt.@nameparts[$i].' '; - print $i,$family,$namefmt,"\n"; - } - if($suffix){ - $namefmt=$namefmt.@nameparts[-1].' '; - } - for($i=$family+1;$i<=$given;$i++){ - $namefmt=$namefmt.@nameparts[$i].' '; - print $i,$family,$namefmt,"\n"; - } - }else{ - $namefmt=$name; - } - if($org > 1){#当是机构作者时 - $namefmt='{'.$name.'}'; - } - print 'namefmt=',"$namefmt \n"; - - if($j==1){#把姓名用and连接起来 - $author=$namefmt; - }else{ - $author=$author.' and '.$namefmt; - } - - if($j==1){#根据第一个作者构建authorlabel - if($org > 1){#机构作者取各单词的首字母 - $authorlabel=''; - for($k=0;$k<@nameparts;$k++){ - ($strtmp)=($nameparts[$k]=~/^(.)/); - $authorlabel=$authorlabel.$strtmp; - } - }else{#姓名则仅取作者姓 - ($authorlabel)=$nameparts[$family]; - if($authorlabel=~m/,$/){$authorlabel=~s/,$//;}#去掉最后的逗号 - } - } - } - while($author=~m/\s{2,}/){ - $author=~s/\s{2,}/ /;#将多余的空格去掉 - } - while($author=~m/\.{2,}/){ - $author=~s/\.{2,}/\./;#将多余的点去掉 - } - print 'author=',"$author\n"; - } - - - sub bfaddressbook{#bf表示before,出版者前book和inbook不一样 - #对于book类型,必然存在出版地和出版者信息,以此为根据展开 - print 'sub:bfaddressbook ',"\n"; - if($reference!~m/$regexformach\s*[^:]+:\s\D{1,}.*/){#如果不存在出版地和出版者信息 - ($pospublisher)=($reference=~m/$regexformach\s*(.*)/); - print 'pospublisher=',"$pospublisher \n"; - }else{ - ($preaddress, $pospublisher)=($reference=~m/$regexformach\s*([^:]+):\s(\D{1,}.*)/);#标识符之后根据第一个冒号分为包括地址的信息和包括出版者的信息两部分 - print 'preaddress =',"$preaddress \n"; - print 'pospublisher=',"$pospublisher \n"; - - #处理出版地及其前面的信息 - if ($preaddress=~m/.*\[S\.l\.\].*/) {#当存在英文的[S.l.],英文的一般不存在译者,所以下面处理比较简单 - $preaddress=~s/\[S\.l\.\]/\[S-l-\]/; #先将[S.l.]换成[S-l-]然后换回来 - } - if ($preaddress=~m/.*\d.*\.\s*.*/){#匹配存在数字版本的话 - ($preversion, $version, $address)=($preaddress=~m/(.*)(\d)[^\.]*\.\s*(.*)/); - print 'preversion =',"$preversion \n"; - print 'version =',"$version \n"; - print 'address =',"$address \n"; - if($preversion=~m/.*\..*/){#如果存在译者等信息 - ($translator)=($preversion=~m/(.*)\..*/); - print 'translator =',"$translator \n";#作者多个姓名还需要处理,还有译这个标识 - } - }else {#不存在数字版本的话 - if($preaddress=~m/.*\.\s+.*/){#存在点加空格,表示存在其他作者信息,区别点在末尾但无空格 - ($preversion,$address)=($preaddress=~m/(.*)\.\s*(.*)/); - print 'preversion =',"$preversion \n"; - print 'address =',"$address \n"; - $translator=$preversion; - print 'translator =',"$translator \n"; - }else{ - $address=$preaddress; - print 'address =',"$address \n"; - } - } - - if($translator=~m/译/){#当译者真实存在 - $translator=~s/,\s*译//;#将译去掉 - if($translator=~m/等/){ - $translator=~s/等/others/;#将等换成others - }else{ - $translator=~s/,\s*$//;#将最后一个逗号去掉 - } - while($translator=~m/,/){ - $translator=~s/,/ and /;#将逗号换成and - } - print 'translator =',"$translator \n"; - }else {#当译者不存在,那么translator中信息可能是非数字的版本信息 - unless($version) {#除非version没有信息 - $version=$translator; - $translator=""; - }else{ - print "version is already exisit!\n"; - print 'version=',$version,"\n"; - print 'translator=',$translator,"\n"; - } - } - - if ($address=~m/.*\[S-l-\].*/) {#当存在英文的[S-l-][S.l.] - $address=~s/\[S-l-\]/\[S\.l\.\]/; #将[S-l-]换回[S.l.] - } - } - } - - - sub bfaddressinbook{#bf表示before,出版者前book和inbook不一样 - ($postitle)=($reference=~m/$regexformach\s*(.*)/); - print 'postitle=',$postitle,"\n"; - if($postitle=~m/^[^:\.]+:[^:\.]+\./){#当存在析出源第一项中出现:时 - $postitle=~s/:/colon/;#先将该冒号换成colon - print 'postitle=',$postitle,"\n"; - } - #对于inbook类型,必然存在出版地和出版者信息,以此为根据展开 - ($preaddress, $pospublisher)=($postitle=~m/\s*(.*):\s(\D.*)/); - #($preaddress, $pospublisher)=($postitle=~m/\s*([^:]+):\s(\D.*)/); - #标识符之后根据第一个冒号分为包括地址的信息和包括出版者的信息两部分 - print 'preaddress =',"$preaddress \n"; - print 'pospublisher=',"$pospublisher \n"; - - #处理出版地及其前面的信息 - if ($preaddress=~m/.*\[S\.l\.\].*/) {#当存在英文的[S.l.],英文的一般不存在译者,所以下面处理比较简单 - $preaddress=~s/\[S\.l\.\]/\[S-l-\]/; #先将[S.l.]换成[S-l-]然后换回来 - } - if ($preaddress=~m/.*\d.*\.\s+.*/ and ($preaddress=~m/.*th\sed.*/ or $preaddress=~m/.*版.*/)){#匹配存在数字版本的话 - ($preversion, $version, $address)=($preaddress=~m/(.*)(\d)[^\.]*\.\s+(.*)/); - print 'preversion =',"$preversion \n"; - print 'version =',"$version \n"; - print 'address =',"$address \n"; - if($preversion=~m/.*\.\s+.*/){#如果存在译者等信息 - ($translator)=($preversion=~m/(.*)\.\s+.*/); - print 'translator =',"$translator \n";#作者多个姓名还需要处理,还有译这个标识 - } - }else {#不存在数字版本的话 - if($preaddress=~m/.*\.\s+.*/){#存在点加空格,表示存在其他作者信息,区别点在末尾但无空格 - ($preversion,$address)=($preaddress=~m/(.*)\.\s+(.*)/); - print 'preversion =',"$preversion \n"; - print 'address =',"$address \n"; - if($preversion=~m/.*\.\s+.*/){#中间还存在点加空格 - ($bookauthor,$booktitle)=($preversion=~m/(.*)\.\s+(.*)/); - - if($bookauthor=~m/等/){ - $bookauthor=~s/等/others/;#将等换成others - }else{ - $bookauthor=~s/,\s*$//;#将最后一个逗号去掉 - } - if($bookauthor=~m/et\sal/){ - $bookauthor=~s/et\sal/others/;#将et al.换成others - }else{ - $bookauthor=~s/,\s*$//;#将最后一个逗号去掉 - } - while($bookauthor=~m/,/){ - $bookauthor=~s/,/ and /;#将逗号换成and - } - print 'bookauthor=',"$bookauthor \n"; - }else{ - $booktitle=$preversion; - } - }else{ - $address=$preaddress; - print 'address =',"$address \n"; - } - } - - if ($address=~m/.*\[S-l-\].*/) {#当存在英文的[S-l-][S.l.] - $address=~s/\[S-l-\]/\[S\.l\.\]/; #将[S-l-]换回[S.l.] - } - if ($booktitle=~m/.*colon.*/) {#当存在colon - $booktitle=~s/colon/:/; #将colon换回: - } - - #进一步处理责任者的姓名,主要针对英文名需要有一些符号进行区分姓,名,前缀和后缀。 - @names=split('and',$bookauthor); - print 'names=',@names,"\n"; - $bookauthor=""; - $j=0; - foreach $name(@names){ - $j=$j+1; - #print $name,"\n"; - @nameparts=split(' ',$name); - #print 'nameparts=',@nameparts,"\n"; - - $org=0; - for($k=0;$k<@nameparts;$k++){ - if(@nameparts[$k]=~m/.{2,}/ and @nameparts[$k]!~m/\s*von\s*/i and @nameparts[$k]!~m/\s*jr\s*/i){ - #当分解的单作者的各个部分,存在两个以上为2个字符以上的情况,说明不是一般的姓名而是机构作者 - $org=$org+1; - print 'org=',"$org\n"; - } - } - - if(@nameparts>1){ - if(@nameparts[0]=~m/\s*von\s*/i){#确定姓的位置 - $family=1; - @nameparts[1]=@nameparts[1].','; - }else{ - $family=0; - @nameparts[0]=@nameparts[0].','; - } - if(@nameparts[-1]=~m/\s*jr\s*/i){#确定后缀的位置 - @nameparts[-1]=@nameparts[-1].'.,'; - $given=@nameparts-2; - $suffix=1; - }else{ - $suffix=0; - $given=@nameparts-1; - } - #print 'family=',$family,"\n"; - #print 'given=',$given,"\n"; - #print 'suffix=',$suffix,"\n"; - - $namefmt=""; - for($i=0;$i<=$family;$i++){ - $namefmt=$namefmt.@nameparts[$i].' '; - #print $i,$family,$namefmt,"\n"; - } - if($suffix){ - $namefmt=$namefmt.@nameparts[-1].' '; - } - for($i=$family+1;$i<=$given;$i++){ - $namefmt=$namefmt.@nameparts[$i].' '; - } - }else{ - $namefmt=$name; - } - if($org > 1){#当是机构作者时 - $namefmt='{'.$name.'}'; - } - #print 'namefmt=',"$namefmt \n"; - - if($j==1){ - $bookauthor=$namefmt; - }else{ - $bookauthor=$bookauthor.' and '.$namefmt; - } - } - while($bookauthor=~m/\s{2,}/){ - $bookauthor=~s/\s{2,}/ /;#将多余的空格去掉 - } - while($bookauthor=~m/\.{2,}/){ - $bookauthor=~s/\.{2,}/\./;#将多余的点去掉 - } - print 'bookauthor=',"$bookauthor\n"; - } - - - sub afpublisherbook{#af表示after,出版者后book和inbook一样,但如果存在url则不同 - #处理出版者及其后面的信息 - if ($pospublisher=~m/.*\[s\.n\.\].*/) {#当存在英文的[s.n.] - $pospublisher=~s/\[s\.n\.\]/\[s-n-\]/; #先将[s.n.]换成[s-n-]然后换回来 - } - if ($pospublisher=~m/.*,\s*\d{4}\S+/){#匹配存在年份的话 - ($publisher, $year, $posyear)=($pospublisher=~m/(.*),\s*(\d{4})(.*)/); - print 'publisher=',"$publisher \n"; - print 'year =',"$year \n"; - print 'posyear =',"$posyear \n"; - if($posyear=~m/^:/){#匹配存在页码前面的冒号的话 - ($pages, $pospages)=($posyear=~m/^:([^\.]+)\.(.*)/); - print 'pages =',"$pages \n"; - print 'pospages=',"$pospages \n"; - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($doi)=($pospages=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - }else{#不存在页码的话 - if($posyear=~m/DOI/i){#匹配存在doi的话 - ($doi)=($posyear=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - } - }else{#不存在年份,匹配一下是否存在冒号和页码 - if($pospublisher=~m/.*[^DOI]:.*/i){#当存在不是doi后面的冒号时,说明有页码 - ($publisher, $pages, $pospages)=($pospublisher=~m/([^:]*):([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pages =',"$pages \n"; - print 'pospages =',"$pospages \n"; - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($doi)=($pospages=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - }else{#没有页码冒号以点作为出版者后的分隔点 - ($publisher, $pospages)=($pospublisher=~m/([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pospages =',"$pospages \n"; - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($doi)=($pospages=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - } - } - if ($publisher=~m/.*\[s-n-\].*/) {#当存在英文的[s-n-] - $publisher=~s/\[s-n-\]/\[s\.n\.\]/; #将[s-n-]换回[s.n.] - } - } - - - sub afpublisherbookurl{#af表示after,出版者后book和inbook一样,但如果存在url则不同 - #处理出版者及其后面的信息 - if ($pospublisher=~m/.*\[s\.n\.\].*/) {#当存在英文的[s.n.] - $pospublisher=~s/\[s\.n\.\]/\[s-n-\]/; #先将[s.n.]换成[s-n-]然后换回来 - } - if ($pospublisher=~m/.*,\s*\d{4}[^\d-]/){#匹配存在年份的话,4个数字后面跟着不能是数字和连字符- - ($publisher, $year, $posyear)=($pospublisher=~m/(.*),\s*(\d{4})(.*)/); - print 'publisher=',"$publisher \n"; - print 'year =',"$year \n"; - print 'posyear =',"$posyear \n"; - if($posyear=~m/^:/){#匹配存在页码前面的冒号的话 - ($pages, $pospages)=($posyear=~m/^:([^\.]+)\.(.*)/); - print 'pages =',"$pages \n"; - print 'pospages=',"$pospages \n"; - if($pages=~m/\[.*\]/){ - ($pagesa, $urldate)=($pages=~m/(.*)\[(.*)\]/); - $pages=$pagesa; - print 'urldate=',"$urldate \n"; - print 'pages=',"$pages \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - } - else{#不存在页码的话 - if($posyear=~m/\[.*\]/){ - ($urldate,$pospages)=($posyear=~m/.*\[(.*)\]\.(.*)/); - print 'urldate=',"$urldate \n"; - print 'pospages=',"$pospages \n"; - } - else{#不存在页码,又不存在引用日期的话,那么会有一个点和空格 - ($pospages)=($posyear=~m/.*\s(.*)/); - print 'pospages=',"$pospages \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - } - }else{#不存在年份,匹配一下是否存在冒号和页码 - if($pospublisher=~m/.*[^DOIhttp]:.*/i){#当存在不是doi或http后面的冒号时,说明有页码 - ($publisher, $pages, $pospages)=($pospublisher=~m/([^:]*):([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pages =',"$pages \n"; - print 'pospages =',"$pospages \n"; - if($pages=~m/\[.*\]/){ - ($pagesa, $urldate)=($pages=~m/(.*)\[(.*)\]/); - $pages=$pagesa; - print 'urldate=',"$urldate \n"; - print 'pages=',"$pages \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - }else{#没有页码冒号以点作为出版者后的分隔点 - ($publisher, $pospages)=($pospublisher=~m/([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pospages =',"$pospages \n"; - if($publisher=~m/\[.*\]/){ - ($publishera, $urldate)=($publisher=~m/(.*)\[(.*)\]/); - $publisher=$publishera; - print 'urldate=',"$urldate \n"; - print 'publisher=',"$publisher \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - } - } - if ($publisher=~m/.*\[s-n-\].*/) {#当存在英文的[s-n-] - $publisher=~s/\[s-n-\]/\[s\.n\.\]/; #将[s-n-]换回[s.n.] - } - } - - - sub afpublisherbookb{#af表示after,出版者后book和inbook一样,但如果存在url则不同 - #处理出版者及其后面的信息 - if ($pospublisher=~m/.*\[s\.n\.\].*/) {#当存在英文的[s.n.] - $pospublisher=~s/\[s\.n\.\]/\[s-n-\]/; #先将[s.n.]换成[s-n-]然后换回来 - } - if ($pospublisher=~m/.*[\.\s,]*\d{4}[\D\S]+/){#匹配存在年份的话,年份前面没有逗号+空格 - ($publisher, $year, $posyear)=($pospublisher=~m/(.*)[\.\s,]*(\d{4})([\D\S].*)/); - print 'publisher=',"$publisher \n"; - if($publisher=~m/[,\s]+$/){$publisher=~s/[,\s]+$//;}#去掉最后的逗号 - unless($address){#当没有出版地时,也没有必要存在 - $version=$publisher; - $publisher=''; - } - print 'year =',"$year \n"; - print 'posyear =',"$posyear \n"; - if($posyear=~m/^:/){#匹配存在页码前面的冒号的话 - ($pages, $pospages)=($posyear=~m/^:([^\.]+)\.(.*)/); - print 'pages =',"$pages \n"; - print 'pospages=',"$pospages \n"; - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($doi)=($pospages=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - }else{#不存在页码的话 - if($posyear=~m/DOI/i){#匹配存在doi的话 - ($doi)=($posyear=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - } - }else{#不存在年份,匹配一下是否存在冒号和页码 - if($pospublisher=~m/.*[^DOI]:.*/i){#当存在不是doi后面的冒号时,说明有页码 - ($publisher, $pages, $pospages)=($pospublisher=~m/([^:]*):([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pages =',"$pages \n"; - print 'pospages =',"$pospages \n"; - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($doi)=($pospages=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - }else{#没有页码冒号以点作为出版者后的分隔点 - ($publisher, $pospages)=($pospublisher=~m/([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pospages =',"$pospages \n"; - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($doi)=($pospages=~m/DOI:(.*)\./i); - print 'doi=',"$doi \n"; - } - } - if($publisher=~m/,$/){$publisher=~s/,$//;}#去掉最后的逗号 - unless($address){#当没有出版地时,也没有必要存在 - $type=$publisher; - $publisher=''; - } - } - if ($publisher=~m/.*\[s-n-\].*/) {#当存在英文的[s-n-] - $publisher=~s/\[s-n-\]/\[s\.n\.\]/; #将[s-n-]换回[s.n.] - } - } - - - - sub afpublisherbookurlb{#af表示after,出版者后book和inbook一样,但如果存在url则不同 - #处理出版者及其后面的信息 - if ($pospublisher=~m/.*\[s\.n\.\].*/) {#当存在英文的[s.n.] - $pospublisher=~s/\[s\.n\.\]/\[s-n-\]/; #先将[s.n.]换成[s-n-]然后换回来 - } - if ($pospublisher=~m/.*[\.\s,]*\d{4}[^\d-]/){#匹配存在年份的话,4个数字后面跟着不能是数字和连字符- - ($publisher, $year, $posyear)=($pospublisher=~m/(.*)[\.\s,]*(\d{4})([^\d-].*)/); - print 'publisher=',"$publisher \n"; - print 'year =',"$year \n"; - print 'posyear =',"$posyear \n"; - if($publisher=~m/,$/){$publisher=~s/,$//;}#去掉最后的逗号 - unless($address){#当没有出版地时,也没有必要存在 - $version=$publisher; - $publisher=''; - } - if($posyear=~m/^:/){#匹配存在页码前面的冒号的话 - ($pages, $pospages)=($posyear=~m/^:([^\.]+)\.(.*)/); - print 'pages =',"$pages \n"; - print 'pospages=',"$pospages \n"; - if($pages=~m/\[.*\]/){ - ($pagesa, $urldate)=($pages=~m/(.*)\[(.*)\]/); - $pages=$pagesa; - print 'urldate=',"$urldate \n"; - print 'pages=',"$pages \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - } - else{#不存在页码的话 - if($posyear=~m/\[.*\]/){ - ($urldate,$pospages)=($posyear=~m/.*\[(.*)\]\.(.*)/); - print 'urldate=',"$urldate \n"; - print 'pospages=',"$pospages \n"; - } - else{#不存在页码,又不存在引用日期的话,那么会有一个点和空格 - ($pospages)=($posyear=~m/.*\s(.*)/); - print 'pospages=',"$pospages \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - } - }else{#不存在年份,匹配一下是否存在冒号和页码 - if($pospublisher=~m/.*[^DOIhttp]:.*/i){#当存在不是doi或http后面的冒号时,说明有页码 - ($publisher, $pages, $pospages)=($pospublisher=~m/([^:]*):([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pages =',"$pages \n"; - print 'pospages =',"$pospages \n"; - if($pages=~m/\[.*\]/){ - ($pagesa, $urldate)=($pages=~m/(.*)\[(.*)\]/); - $pages=$pagesa; - print 'urldate=',"$urldate \n"; - print 'pages=',"$pages \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - }else{#没有页码冒号以点作为出版者后的分隔点 - ($publisher, $pospages)=($pospublisher=~m/([^\.]*)\.(.*)/); - print 'publisher=',"$publisher \n"; - print 'pospages =',"$pospages \n"; - if($publisher=~m/\[.*\]/){ - ($publishera, $urldate)=($publisher=~m/(.*)\[(.*)\]/); - $publisher=$publishera; - print 'urldate=',"$urldate \n"; - print 'publisher=',"$publisher \n"; - } - if($pospages=~m/DOI/i){#匹配存在doi的话 - ($url, $doi)=($pospages=~m/(.*)\.\s*DOI:(.*)\./i); - print 'url=',"$url \n"; - print 'doi=',"$doi \n"; - }else{ - ($url)=($pospages=~m/(.*)\./i); - print 'url=',"$url \n"; - } - } - if($publisher=~m/,$/){$publisher=~s/,$//;}#去掉最后的逗号 - unless($address){#当没有出版地时,也没有必要存在 - $type=$publisher; - $publisher=''; - } - } - if ($publisher=~m/.*\[s-n-\].*/) {#当存在英文的[s-n-] - $publisher=~s/\[s-n-\]/\[s\.n\.\]/; #将[s-n-]换回[s.n.] - } - } - - - -close (FHR); -close (FHW);
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015.tex deleted file mode 100644 index b495abd4d84..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015.tex +++ /dev/null @@ -1,15 +0,0 @@ -\documentclass{article} -\usepackage{pdfpages}%直接插入pdf文件页 -\graphicspath{{egfigure/}{example/}} - -\begin{document} - -\includepdf[pages=-]{egfigure/tgbcitation.pdf} - -\IfFileExists{egfigure/tngbcitationay.pdf} -{\includepdf[pages=-]{egfigure/tngbcitationay.pdf}} -{\includepdf[pages=-]{egfigure/tngbcitationaynew.pdf}} - -\includepdf[pages=-]{egfigure/tgbbiblio.pdf} - -\end{document} diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015eg.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015eg.tex deleted file mode 100644 index f64360b40f2..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015eg.tex +++ /dev/null @@ -1,114 +0,0 @@ -\documentclass{article} -\usepackage[colorlinks=true]{hyperref} -\usepackage{pdfpages}%直接插入pdf文件页 -\graphicspath{{egfigure/}{example/}} - -\begin{document} - -\phantomsection -%\addcontentsline{toc}{section}{cls-beamer} -\includepdf[pages=-,addtotoc={1,section,1,cls-beamer,eg:beamer}]{example/cls-beamer.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{cls-beameray} -\includepdf[pages=-,addtotoc={1,section,1,cls-beameray,eg:beameray}]{example/cls-beameray.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{codeopt-gbcodegbk} -\includepdf[pages=-,addtotoc={1,section,1,codeopt-gbcodegbk,eg:gbk}]{example/codeopt-gbcodegbk.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{eg-opt-gbstyle} -\includepdf[pages=-,addtotoc={1,section,1,eg-opt-gbstyle,eg:multistyle}]{example/eg-opt-gbstyle.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbalign-center} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbalign-center,eg:aligncenter}]{example/opt-gbalign-center.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbalign-gb} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbalign-gb,eg:aligngb}]{example/opt-gbalign-gb.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbalign-left} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbalign-left,eg:alignleft}]{example/opt-gbalign-left.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbbiblabel} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbbiblabel,eg:biblabel}]{example/opt-gbbiblabel.pdf} - - - - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbfieldstd} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbfieldstd,eg:fieldstd}]{example/opt-gbfieldstd.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbnamefmt} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbnamefmt,eg:namefmt}]{example/opt-gbnamefmt.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbnamefmt-default} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbnamefmt-default,eg:namefmta}]{example/opt-gbnamefmt-default.pdf} - - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbpub-true} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbpub-true,eg:pub}]{example/opt-gbpub-true.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbpunctin} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbpunctin,eg:in}]{example/opt-gbpunctin.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbtitlelink} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbtitlelink,eg:titlelink}]{example/opt-gbtitlelink.pdf} - - - -\phantomsection -%\addcontentsline{toc}{section}{opt-footbib} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbfootbib,eg:footbib}]{example/opt-gbfootbib.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbtype} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbtype,eg:entrytype}]{example/opt-gbtype.pdf} - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbctexset} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbctexset,eg:ctexset}]{example/opt-gbctexset.pdf} - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbnoauthor-false} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbnoauthor-false,eg:noauthor}]{example/opt-gbnoauthor-false.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gbnoauthor-true} -\includepdf[pages=-,addtotoc={1,section,1,opt-gbnoauthor-true,eg:noauthora}]{example/opt-gbnoauthor-true.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-gblocal} -\includepdf[pages=-,addtotoc={1,section,1,opt-gblocal,eg:local}]{example/opt-gblocal.pdf} - - - - - -\end{document} diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015fmt.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015fmt.tex deleted file mode 100644 index e3cd6eaa291..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015fmt.tex +++ /dev/null @@ -1,13 +0,0 @@ -\documentclass{article} -\usepackage[colorlinks=true]{hyperref} -\usepackage{pdfpages}%直接插入pdf文件页 -\graphicspath{{egfigure/}{example/}} - -\begin{document} - - -\phantomsection -%\addcontentsline{toc}{section}{testallformat} -\includepdf[pages=-,addtotoc={1,section,1,allfmt,eg:allfmt}]{example/testallformat.pdf} - -\end{document} diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015lan.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015lan.tex deleted file mode 100644 index 637fc0c2936..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015lan.tex +++ /dev/null @@ -1,45 +0,0 @@ -\documentclass{article} -\usepackage[colorlinks=true]{hyperref} -\usepackage{pdfpages}%直接插入pdf文件页 -\graphicspath{{egfigure/}{example/}} - -\begin{document} - -\phantomsection -%\addcontentsline{toc}{section}{opt-eg-authoryear} -\includepdf[pages=-,addtotoc={1,section,1,opt-eg-dblang,eg:doublelang}]{example/opt-eg-dblang.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-eg-authoryear} -\includepdf[pages=-,addtotoc={1,section,1,opt-eg-authoryear,eg:ay}]{example/opt-eg-authoryear.pdf} - -\phantomsection -%\addcontentsline{toc}{section}{opt-autolang-multilan} -\includepdf[pages=-,addtotoc={1,section,1,opt-autolang-multilan,eg:multilang}]{example/opt-autolang-multilan.pdf} - - -\phantomsection -%\addcontentsline{toc}{section}{opt-eg-multilan} -\includepdf[pages=-,addtotoc={1,section,1,opt-eg-multilan,eg:multilanga}]{example/opt-eg-multilan.pdf} - - -\phantomsection -\includepdf[pages=-,addtotoc={1,section,1,opt-gblanorder-chineseahead,eg:lanordercnah}]{example/opt-gblanorder-chineseahead.pdf} - -\phantomsection -\includepdf[pages=-,addtotoc={1,section,1,opt-gblanorder-englishahead,eg:lanorderenah}]{example/opt-gblanorder-englishahead.pdf} - -\phantomsection -\includepdf[pages=-,addtotoc={1,section,1,opt-gblanorder-udforder,eg:lanorderudf}]{example/opt-gblanorder-udforder.pdf} - -\phantomsection -\includepdf[pages=-,addtotoc={1,section,1,test-setlocal,eg:setlocalstring}] -{example/test-setlocal.pdf} - -\phantomsection -\includepdf[pages=-,addtotoc={1,section,1,test-setlocal-multilan,eg:setlocalstringmutillan}] -{example/test-setlocal-multilan.pdf} - - -\end{document} diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015ms.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015ms.tex deleted file mode 100644 index ffc76f6e268..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015ms.tex +++ /dev/null @@ -1,15 +0,0 @@ -\documentclass{article} -\usepackage{pdfpages}%直接插入pdf文件页 -\graphicspath{{egfigure/}{example/}} - -\begin{document} - -\includepdf[pages=-]{egfigure/tgbcitationms.pdf} - -\IfFileExists{egfigure/tngbcitationay.pdf} -{\includepdf[pages=-]{egfigure/tngbcitationay.pdf}} -{\includepdf[pages=-]{egfigure/tngbcitationaynew.pdf}} - -\includepdf[pages=-]{egfigure/tgbbiblioms.pdf} - -\end{document} diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015thesis.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015thesis.tex deleted file mode 100644 index 80ede4a301b..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015thesis.tex +++ /dev/null @@ -1,68 +0,0 @@ -\documentclass{article} -\usepackage[colorlinks]{hyperref} -\usepackage{pdfpages}%直接插入pdf文件页 -\graphicspath{{egfigure/}{example/}} - -\begin{document} - -\tableofcontents - -\newpage -%\addcontentsline{toc}{section}{BUPT} -\includepdf[pages=-,addtotoc={1,section,1,BUPT,eg:BUPT}]{egthesis/thesis-bupt-numeric.pdf} - - -%\addcontentsline{toc}{section}{CAU} -\includepdf[pages=-,addtotoc={1,section,1,CAU,eg:CAU}]{egthesis/thesis-cau-numeric.pdf} - - -%\addcontentsline{toc}{section}{ECNU} -\includepdf[pages=-,addtotoc={1,section,1,ECNU,eg:ECNU}]{egthesis/thesis-ecnu-numeric.pdf} - - -%\addcontentsline{toc}{section}{FDU} -\includepdf[pages=-,addtotoc={1,section,1,FDU,eg:FDU}]{egthesis/thesis-fdu-numeric.pdf} - - -%\addcontentsline{toc}{section}{NWAFU} -\includepdf[pages=-,addtotoc={1,section,1,NWAFU,eg:nwafu}]{egthesis/thesis-nwafu-ay.pdf} - -%\addcontentsline{toc}{section}{SEU} -\includepdf[pages=-,addtotoc={1,section,1,SEU,eg:seu}]{egthesis/thesis-seu-numeric.pdf} - -%\addcontentsline{toc}{section}{SJTU} -\includepdf[pages=-,addtotoc={1,section,1,SJTU,eg:SJTU}]{egthesis/thesis-sjtu-numeric.pdf} - - -%\addcontentsline{toc}{section}{THU} -\includepdf[pages=-,addtotoc={1,section,1,THU,eg:THU}]{egthesis/thesis-thu-numeric.pdf} - -%\addcontentsline{toc}{section}{THU} -\includepdf[pages=-,addtotoc={1,section,1,THU,eg:TongJi}]{egthesis/thesis-tongji.pdf} - -%\addcontentsline{toc}{section}{UCAS} -\includepdf[pages=-,addtotoc={1,section,1,UCAS-m,eg:UCASm}]{egthesis/thesis-ucas-m.pdf} - - -%\addcontentsline{toc}{section}{UIBE} -\includepdf[pages=-,addtotoc={1,section,1,UIBE,eg:UIBE}]{egthesis/thesis-uibe-numeric.pdf} - - -%\addcontentsline{toc}{section}{USTC} -\includepdf[pages=-,addtotoc={1,section,1,USTC-ay,eg:USTCay}]{egthesis/thesis-ustc-authoryear.pdf} - - -%\addcontentsline{toc}{section}{USTC} -\includepdf[pages=-,addtotoc={1,section,1,USTC-num,eg:USTCnum}]{egthesis/thesis-ustc-numeric.pdf} - - -%\addcontentsline{toc}{section}{XJTU} -\includepdf[pages=-,addtotoc={1,section,1,XJTU,eg:XJTU}]{egthesis/thesis-xjtu-numeric.pdf} - - -%\addcontentsline{toc}{section}{ZJU} -\includepdf[pages=-,addtotoc={1,section,1,ZJU,eg:ZJU}]{egthesis/thesis-zju-numeric.pdf} - - - -\end{document} diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/readme-BibLatex-Check.md b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/readme-BibLatex-Check.md deleted file mode 100644 index d441c647905..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/readme-BibLatex-Check.md +++ /dev/null @@ -1,27 +0,0 @@ -BibLatex-Check - -是Pezmc开发检查bib文件中参考文献条目和域是否符合biblatex设定的python脚本。 -输入为bib文件,输出为bib文件正确与否的信息,会包括域的欠缺信息等,为一个html文件,该用firefox打开会比较快。 - -仓库见:https://github.com/Pezmc/BibLatex-Check - -用法: - -`./biblatex_check.py <-b input.bib> [-a input.aux] [-o output.html]` - -注意:aux和html文件是可选的。 - -帮助命令: - -`./biblatex_check.py -h` - -选项: - -- -b (--bib=file.bib) Set the input Bib File -- -a (--aux=file.aux) Set the input Aux File -- -o (--output=file.html) Write results to the HTML Output File. -- -v (--view) Open in Browser. Use together with -o. -- -N (--no-console) Do not print problems to console. An exit code is always returned. - - - diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/readme-BibLatex-map.md b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/readme-BibLatex-map.md deleted file mode 100644 index 9209550fc7a..00000000000 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/readme-BibLatex-map.md +++ /dev/null @@ -1,152 +0,0 @@ -# biblatex-map.py - -是一个用于处理、修改和规范化bib文件的python脚本。 - -主要功能包括: -1. 基于biblatex的source map的逻辑修改bib文件中的参考文献信息 -2. 输入bib文件的解析,输出修改后的bib文件,以及json格式的参考文献文件 -3. 输出定制著录格式比如GB/T 7714-2015标准的参考文献表,输出文本或者thebibliography环境。简化格式定制方式 -4. 进一步可以实现一个宏包,实现一个简化功能的低配版biblatex - -处理的逻辑遵循biblatex的动态数据修改的规范,修改参数设置基本相同,只是把biblatex用tex命令表示的`\maps`、`\map`和`\step`转换为用json格式表示。 - -等价于用python重新实现了biber的动态数据修改功能。 - -------------------------------- - -本来想将这一内容放到Pezmc开发的biblatex_check脚本中,但想想还是纯粹点好了。 - -------------------------------- - -Maintainer: huzhenzhen <hzzmail@163.com> - -Homepage: <https://github.com/hushidong/biblatex-map> - -License:MIT license - - --------------------------------------- - -## 用法: - -直接在python命令行中运行 - -`./biblatex-map.py` - -需要修改的bib文件在`biblatex-map.py`修改: - -``` -if __name__=="__main__": - - #设置输入的bib文件 - inputbibfile='biblatex-map-test.bib' - - #set the aux file - #this is not necessary - #auxfile='tex-source-code.aux' -``` - -输出的bib/json文件自动生成,当设置了aux文件后,那么输出的bib文件中条目将限制为aux中引用的文献条目。 - -修改bib文件内容的配置用json格式表示,直接在`biblatex-map.py`修改sourcemaps参数: - -``` -#maps所有的修改用map构成一个maps -sourcemaps=[ - [#map1:将ELECTRONIC类型转换为online类型 - [{"typesource":"ELECTRONIC","typetarget":"online"}]#step1 - ], - [#map2:将source域转换为url域 - [{"fieldsource":"source","fieldtarget":"url"}]#step1 - ], - [#map3:将urldate域的信息“yyyy-m-d”转换为“yyyy-mm-dd”,注意正则表达式直接写不用在外面套"" - [{"fieldsource":"urldate","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3'}]#step1 - ], - [#map4:将urldate域的信息“yyyy-m-d”转换为“yyyy-mm-dd”,注意正则表达式直接写不用在外面套"" - [{"fieldsource":"date","match":r'(\d\d\d\d)\-(\d)\-(\d)',"replace":r'\1-0\2-0\3',"overwrite":True}]#step1 - ], - [#map5:将refdate域转换为urldate域 - [{"fieldsource":"refdate","fieldtarget":"urldate"}]#step1 - ], - [#map6:对于newspaper类型,设置note为news - [{"pertype":"newspaper"}],#step1 - [{"fieldset":"note","fieldvalue":"news","overwrite":True}]#step2 - ], - [#map7:设置edition域等于version - [{"fieldsource":"version","final":True}],#step1 - [{"fieldset":"edition","origfieldval":True}]#step2 - ], - [#map8:设置entrykey域设置给keywords - [{"fieldsource":"entrykey"}],#step1 - [{"fieldset":"keywords","origfieldval":True}]#step2 - ], - [#map9:对于存在note域的情况,将其值添加到keywords - [{"fieldsource":"note","final":True}],#step1 - [{"fieldset":"keywords","origfieldval":True,"overwrite":True,"append":True}]#step2 - ], - [#map10:根据标题的字符编码范围确定标题的语言类型 - [{"fieldsource":"title","match":r'[\u2FF0-\u9FA5]',"final":True}],#step1 - [{"fieldset":"userd","fieldvalue":"chinese"}]#step2 - ], -] -``` - -sourcemaps参数其实是json格式的。 -sourcemaps是一个列表,记录所有的修改,一个修改是一个map,也是一个列表。 -一个map列表中有任意数量的step(步骤),一个step内由一个key-val参数构成字典(dict)数据结构。 - -处理逻辑是这样: -``` - for map in maps #遍历maps中的所有map - for entry in entries #对所有的条目均执行该map - for step in map #遍历map中的所有step - code for the step to modify the bib entry -``` - -需要注意:python中正则和perl中的略有不同,比如python用\xHH,\uHHHH,\UHHHHHHHH表示unicode字符,而perl直接用\x{HHHH}表示。 - -## need to do: - -已实现的选项: -typesource=?entrytype? -typetarget=?entrytype? -fieldsource=?entryfield? -fieldtarget=?entryfield? -match=?regexp? -matchi=?regexp? -notmatch=?regexp? -notmatchi=?regexp? -replace=?regexp? - -notfield=?entryfield? -final=true, false default: false -origfieldval=true, false default: false -append=true, false default: false -pertype -pernottype - -fieldset=?entryfield? -fieldvalue=?string? -null=true, false default: false -origfield=true, false default: false -origentrytype=true, false default: false -origfieldval=true, false default: false - - - -未实现的选项 - -entryclone=?clonekey? -entrynew=?entrynewkey? -entrynewtype=?string? -entrytarget=?string? -entrynocite=true, false default: false -entrynull=true, false default: false - -1. match 大小写区分的match - - - - - - |