texlive[50004] Master/texmf-dist: biblatex-gb7714-2015 (11feb19)
commits+karl at tug.org
commits+karl at tug.org
Mon Feb 11 23:05:25 CET 2019
Revision: 50004
http://tug.org/svn/texlive?view=revision&revision=50004
Author: karl
Date: 2019-02-11 23:05:25 +0100 (Mon, 11 Feb 2019)
Log Message:
-----------
biblatex-gb7714-2015 (11feb19)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md
trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib
trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx
trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx
trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx
trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx
trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx
Added Paths:
-----------
trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib
trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py
Modified: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md 2019-02-11 22:05:25 UTC (rev 50004)
@@ -1,4 +1,4 @@
-<b>Date of last change: 2019-02-07 to version v1.0q</b>
+<b>Date of last change: 2019-02-11 to version v1.0q</b>
# biblatex-gb7714-2015: a biblatex style package
@@ -631,7 +631,18 @@
> 在正文中引用:
```双语文献引用\cite{易仕和2013--}```
-
+
+
+* <b>我想修改文献条目的日期项诸如格式,请问该如何处理?</b>
+
+参考文献中日期格式主要有四种修改方式:
+1. 利用biblatex选项全局的修改日期格式
+2. 修改日期输出宏,使根据条目类型输出不同的日期格式
+3. 修改日期输出宏,使根据具体条目输出不同的日期格式
+4. 修改参考文献信息,使当前条目原样输出需要的格式
+
+具体示例见:[biblatex中如何修改参考文献中日期的著录格式](https://blog.csdn.net/xenonhu/article/details/86933525)
+
#### 4.3 Citation format/正文引用的标注格式
@@ -860,7 +871,7 @@
* 2018/11/04 v1.0n
* 2018/12/22 v1.0o
* 2019/01/19 v1.0p
-* 2019/02/07 v1.0q
+* 2019/02/11 v1.0q
---------------------------------------------------------
Modified: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex 2019-02-11 22:05:25 UTC (rev 50004)
@@ -394,7 +394,7 @@
\begin{table}[!htb]
\centering
\caption{著者年份制常用命令示例}\label{tab:cite:authoryear}
-\includegraphics[scale=0.9]{egciteaytab.pdf}
+\includegraphics[scale=0.8]{egciteaytab.pdf}
\end{table}
Added: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib 2019-02-11 22:05:25 UTC (rev 50004)
@@ -0,0 +1,53 @@
+
+ at NEWSPAPER{CITATION_NEWSPAPER,
+ author = "吴刚",
+ title = "立陶宛进入欧元时代",
+ journaltitle = "人民日报",
+ date = "2015-1-2",
+ language = "chs",
+ note = ""
+}
+
+ at BOOK{SANGUOYANYI,
+ author = "罗贯中",
+ title = "三国演义",
+ edition = "1",
+ address = "山西太原",
+ year = "元末明初",
+ language = "chs"
+}
+
+ at ELECTRONIC{BUPT_Thesis_Format_2004,
+ title = "关于研究生学位论文格式的统一要求",
+ author = "北京邮电大学研究生院培养与学位办公室",
+ etype = "EB",
+ ehowpublished = "OL",
+ date = "2004",
+ url = "http://www.bupt.edu.cn/",
+ language = "chs"
+}
+
+ at 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"
+}
+
+ at ELECTRONIC{buptthesis,
+ author = "张煜",
+ title = "北京邮电大学研究生学位论文 \LaTeX{} 文档类",
+ year = "2009",
+ dhowpublished = "online",
+ urldate = "2013-7-6",
+ source = "http://code.google.com/p/buptthesis/",
+ language = "chs"
+}
+
+
+
+
Property changes on: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map-test.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py
===================================================================
--- trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py 2019-02-11 22:05:25 UTC (rev 50004)
@@ -0,0 +1,370 @@
+#!/usr/bin/env python
+
+"""
+python script to modify bib data
+
+features:
+1. souce map of biblatex
+2. generalize date
+
+history:
+v1.0 2019/02/09
+
+biblatex source map opts:
+
+已实现的选项:
+typesource=⟨entrytype⟩
+typetarget=⟨entrytype⟩
+fieldsource=⟨entryfield⟩
+fieldtarget=⟨entryfield⟩
+match=⟨regexp⟩
+matchi=⟨regexp⟩
+notmatch=⟨regexp⟩
+notmatchi=⟨regexp⟩
+replace=⟨regexp⟩
+
+未实现的选项
+notfield=⟨entryfield⟩
+fieldset=⟨entryfield⟩
+fieldvalue=⟨string⟩
+entryclone=⟨clonekey⟩
+entrynew=⟨entrynewkey⟩
+entrynewtype=⟨string⟩
+entrytarget=⟨string⟩
+entrynocite=true, false default: false
+entrynull=true, false default: false
+append=true, false default: false
+final=true, false default: false
+null=true, false default: false
+origfield=true, false default: false
+origfieldval=true, false default: false
+origentrytype=true, false default: false
+"""
+
+__author__ = "Hu zhenzhen"
+__version__ = "1.0"
+__license__ = "MIT"
+__email__ = "hzzmail at 163.com"
+
+import string
+import re
+import sys
+import datetime
+import copy
+
+
+#
+# 为数据map设置参数
+#[]=maps
+#[[],[]]=map in maps
+#[[[]],[]]=step in map in mpas
+#[[[{optionkey: }]],[]]=step in map in mpas
+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'}]#step1
+ ],
+ [#map5:将refdate域转换为urldate域
+ [{"fieldsource":"refdate","fieldtarget":"urldate"}]#step1
+ ],
+
+]
+
+#
+#
+#打开bib文件
+def readfilecontents(bibFile):
+ print("INFO: Reading references from '" + bibFile + "'")
+ try:
+ fIn = open(bibFile, 'r', encoding="utf8")
+ global bibfilecontents
+ bibfilecontents=fIn.readlines()
+ fIn.close()
+ 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):
+ biboutfile="new"+bibFile
+ print("INFO: writing references from '" + biboutfile + "'")
+ try:
+ fout = open(biboutfile, 'w', encoding="utf8")
+ fout.write("%% \n")
+ fout.write("%% bib file modified by bibmap.py\n")
+ print(datetime.datetime.now().isoformat(timespec='seconds'))
+ fout.write("%% "+datetime.datetime.now().isoformat(timespec='seconds')+"\n")
+ fout.write("%% \n\n\n")
+ for bibentry in bibentries:
+ fout.write('@'+bibentry["entrytype"]+'{'+bibentry["entrykey"]+',\n')
+ for k,v in bibentry.items():
+ if k=="entrytype" or k=="entrykey" or v=='""':
+ pass
+ else:
+ fout.write('\t'+k+' = '+v+',\n')
+ fout.write('}\n\n')
+
+ fout.close()
+ except IOError:
+ print("ERROR: Input bib file '" + bibFile +
+ "' doesn't exist or is not readable")
+ sys.exit(-1)
+
+#
+#将条目解析放到bibentries列表中
+#每个条目是一个dict字典
+def bibentryparsing():
+ global bibentries
+ bibentries=[]
+ bibentry={}
+ entrysn=0
+ for line in bibfilecontents:
+ #print(line)
+ if line.startswith("@"):#条目开始行
+ entrysn=entrysn+1
+ entrynow=line.lstrip('@').split(sep='{', maxsplit=1)
+ #print(entrynow)
+ entrytype=entrynow[0]
+ bibentry['entrytype']=entrytype
+ entrykey=entrynow[1].split(sep=',', maxsplit=1)[0]
+ bibentry['entrykey']=entrykey
+ else:
+ if '=' in line:#条目域信息行
+ entryline=line.lstrip()
+ entrynow=entryline.split(sep='=', maxsplit=1)
+ #print(entrynow)
+ entryfield=entrynow[0].strip().lstrip()
+ #print(entrynow[1])
+ entryfieldline=entrynow[1].split(sep=',', maxsplit=1)
+ entryfieldvalue=entryfieldline[0].lstrip()
+ if entryfieldvalue=='':
+ pass
+ else:
+ bibentry[entryfield]=entryfieldvalue.strip()
+ elif '}' in line:#条目结束行
+ print('entrysn=',entrysn)
+ global bibentryglobal
+ bibentryglobal=copy.deepcopy(bibentry)
+ bibentries.append(bibentryglobal)
+ bibentry={}
+ else:
+ pass
+ bibentrycounter=len(bibentries)
+ print('entrytotal=',bibentrycounter)
+ for bibentryi in bibentries:
+ print(bibentryi)
+
+def printbibentries():
+ for bibentryi in bibentries:
+ print(bibentryi)
+
+
+
+#
+# 执行数据映射操作
+# 还有很多选项没有实现,20190209
+# 实现的选项中也需要和未实现的选项进行数据传递
+def execsourcemap():
+ for map in sourcemaps:#every map in maps,每个map逐步开始
+ for bibentry in bibentries:#每个映射都需要遍历所有条目,对每个条目做map
+
+ mapcontinue=1#大于0表示正常,继续当前条目的map
+ fieldsrcinfo={}#用于接收fieldsource相关处理的结果
+ print("map info=",map)
+ for step in map:#every step in map
+ if mapcontinue>0:
+ 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)#coef is dict
+ elif k=="fieldsource":#域查找或设置
+ mapcontinue=mapfieldsource(keyvals,bibentry,fieldsrcinfo)#coef is dict
+ pass
+ elif k=="fieldset":#域设置
+ pass
+ elif k=="pertype":#类型限制
+ pass
+ elif k=="pernottype":#类型限制
+ pass
+ elif k=="notfield":#域限制
+ pass
+ else:
+ pass
+
+#
+#条目类型转换
+def maptypesource(keyvals,bibentry):
+ retrunval=1
+ for k,v in keyvals.items():
+ #print(k,v)
+ if k=='typesource':
+ typesource=v
+ elif k=='typetarget':
+ typetarget=v
+ elif k=='final':
+ retrunval=0
+ else:
+ pass
+
+ if bibentry['entrytype']==typesource:
+ bibentry['entrytype']=typetarget
+ return 1
+ else:
+ return retrunval #存在final时,且不匹配则终止map
+
+#
+#域名转换或判断域是否存在或match
+def mapfieldsource(keyvals,bibentry,fieldsrcinfo):
+ mapfieldtype=0 #域名map的类型设置
+ fieldmatch=''#匹配模式默认为空
+ fieldmatchi=''#匹配模式默认为空
+
+ for k,v in keyvals.items():
+ #print(k,v)
+ if k=='fieldsource':
+ fieldsource=v
+ elif k=='fieldtarget':
+ fieldtarget=v
+ mapfieldtype=1 #域map类型1,直接做域名转换
+ elif k=='replace':
+ fieldreplace=v
+ mapfieldtype=2 #域map类型2,直接做域信息转换
+ elif k=='final':
+ if v=='false':
+ fieldfinal=v
+ else:
+ fieldfinal='true'
+ mapfieldtype=3 #域map类型3,做final判断可以终止map
+ elif k=='match':#不区分大小写的match
+ fieldmatch=v
+ elif k=='matchi':#区分大小写的match
+ fieldmatchi=v
+ elif k=='notmatch':#区分大小写的match
+ fieldnotmatch=v
+ else:
+ pass
+
+
+ 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,直接做域信息转换
+ print('fieldsource=',fieldsource)
+ print('fieldmatch=',fieldmatch)
+ print('fieldreplace=',fieldreplace)
+ 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]
+ 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
+
+
+
+
+
+
+
+#运行脚本测试
+if __name__=="__main__":
+ print('hello')
+ print(b'hello')
+ readfilecontents("biblatex-map-test.bib")
+
+ printfilecontents()
+
+ bibentryparsing()
+
+ printbibentries()
+
+ execsourcemap()
+
+ printbibentries()
+
+ writefilenewbib("biblatex-map-test.bib")
+
+
+
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-map.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/example.bib 2019-02-11 22:05:25 UTC (rev 50004)
@@ -579,7 +579,18 @@
pages = {44}
}
+ at inbook{姚中秋2008--,
+ author = {姚中秋},
+ title = {一种制度变迁模式},
+ bookauthor = {罗, 卫东 and 姚, 中秋},
+ booktitle = {中国转型的理论分析},
+ year = {2008},
+ publisher = {浙江大学出版社},
+ address = {杭州},
+ pages = {44}
+}
+
@ARTICLE{关立哲2014--,
author = {关立哲 and 韩纪富 and 张晨延},
title = {科技期刊编辑审读中要注重比较思维的科学运用},
@@ -2615,6 +2626,16 @@
Month = {1}
}
+ at Book{Miroslav2003--,
+ Title = {信号处理滤波器设计方法},
+ Address = {北京},
+ Author = {Miroslav, D. L. and Dejan, V. T.},
+ Publisher = {电子工业出版社},
+ Translator = {朱义胜 and 董辉},
+ Year = {2003},
+ Month = {1}
+}
+
@Article{Giorgetti2005-1037-1042,
Title = {The impact of OFDM interference on TH-PPM/BPAM transmission systems},
Author = {Giorgetti, A. and Dardari,D.},
@@ -3251,6 +3272,16 @@
Year = {2012}
}
+ at Article{于潇2011-15-23,
+ Title = {互联网药品可信交易环境中主体资质审核备案模式},
+ Author = {于, 潇 and 刘, 义 and 柴, 跃廷 and others},
+ Journal = {清华大学学报},
+ Number = {11},
+ Pages = {15-23},
+ Volume = {52},
+ Year = {2011}
+}
+
@Proceedings{中国社会科学院台湾史研究中心2012--,
Title = {台湾光复六十五周年暨抗战史实学术研讨会论文集},
Address = {北京},
Modified: trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx 2019-02-11 22:05:25 UTC (rev 50004)
@@ -11,7 +11,7 @@
%
% 版本和时间信息
%
-\def\versionofgbtstyle{2019/02/07 v1.0q}
+\def\versionofgbtstyle{2019/02/11 v1.0q}
\def\versionofbiblatex{\abx at version}
\ProvidesFile{gb7714-2015.bbx}[\versionofgbtstyle biblatex bibliography style]
\RequireBiber[3]%显式指定用biber后端
@@ -258,14 +258,18 @@
\DeclareCiteCommand{\footfullcite}[\mkbibfootnote]%
{\defcounter{maxnames}{\blx at maxbibnames}%局部定义maxnames和minnames计数器
\defcounter{minnames}{\blx at minbibnames}%使footfullcite内的作者输出与正文文献表中的一致。
- \usebibmacro{prenote}}%
+ \usebibmacro{prenote}%
+ \renewbibmacro*{postnote}{%
+ \iffieldundef{postnote}%
+ {}{\setunit{\addcolon\addspace}\printfield{postnote}}}%与ay样式不同,由于已修改postnote域格式,直接用printfield
+ }%
{\usebibmacro{citesavefn}%
\ifcsdef{labelsec\arabic{refsection}et\thefield{entrykey}}%
- {\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}\nopunct}%
+ {\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}}%\nopunct
{\usedriver{\DeclareNameAlias{sortname}{default}}{\thefield{entrytype}}}%
}%
{\multicitedelim}%
- {\addcolon\usebibmacro{postnote}}
+ {\usebibmacro{postnote}}
}
@@ -731,16 +735,17 @@
\DeclareSourcemap{
\maps[datatype=bibtex]{%
- \map{
- \pernottype{inbook}
+ \map{%当没有作者时将editor转成author
+ \pernottype{inbook}%因为in系列中editor可能用来表示bookauthor,所以排除
\pernottype{inproceedings}
\pernottype{incollection}
+ \pernottype{periodical}%因为peridical直接使用editor,所以排除
%注意notfield在低版本biblatex中没有
%\step[notfield=author,final]%当author不存在,将editor复制给author
\step[fieldsource=editor,fieldtarget=author]%并删除editor
}
- \map{
- \pernottype{inbook}
+ \map{%当没有作者时将translator转成author
+ \pernottype{inbook}
\pernottype{inproceedings}
\pernottype{incollection}
%\step[notfield=author,final]%当author不存在,将translator复制给author
@@ -757,9 +762,6 @@
\step[fieldsource=address,final]
\step[fieldset=location,origfieldval]
}
- \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
- \step[fieldsource={author}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
- }%\perdatasource{examples.bib}
\map{%处理在bib文件用mark标记文献类型标识符的情况
\step[fieldsource=mark,final]
\step[fieldset=usera, origfieldval]
@@ -926,18 +928,18 @@
\pertype{unpublished}
\step[fieldset=usera, fieldvalue={Z}]
}
- \map{%作者的中文判断
- \step[fieldsource=author, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=userf, fieldvalue={chinese}]
- }
- \map{%译者的中文判断
- \step[fieldsource=translator, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=usere, fieldvalue={chinese}]
- }
- \map{%编者的中文判断
- \step[fieldsource=editor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=userc, fieldvalue={chinese}]
- }
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={author}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={editor}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={translator}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={bookauthor}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
\map{%处理一些用year表示date的情况
%这样处理将会设置date域,并使得labeldatesource变为空,因为date的前缀为空(如果是urldate,那么labeldatesource就是url)。
%同时date域会被biblatex自动解析为year,month,day,并且覆盖原来的year信息
@@ -944,81 +946,164 @@
\step[fieldsource=year]
\step[fieldset=date, origfieldval]
}
+ \map{%将entrykey放入keywords中用于后期使用
+ \step[fieldsource=entrykey]
+ \step[fieldset=keywords, origfieldval]
+ }
\map{%文献题名的中文判断,将信息保存到userd中,避免因为标签生成原因导致title域被清除而产生问题
\step[fieldsource=title, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%
\step[fieldset=userd, fieldvalue={chinese}]
}
- \map{%将entrykey放入keywords中用于后期使用
- \step[fieldsource=entrykey]
- \step[fieldset=keywords, origfieldval]
+ \map{\step[fieldsource=title,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userd,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
}
- \map{%当文献给出language域时,设置文献要使用的本地化字符串的语言
- \step[fieldsource=language,match=english,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userd,fieldvalue={russian}]%俄语
}
- \map{
- \step[fieldsource=language,match=russian,final]
- \step[fieldset=langid,fieldvalue={russian}]
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userd,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userd,fieldvalue={korean}]%韩语
}
+ \map{%将没有设置userd,且存在title域的默认设置为英文
+ \step[fieldsource=title,final]
+ \step[fieldset=userd,fieldvalue={english}]
+ }
+ \map{%作者的中文判断
+ \step[fieldsource=author, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
+ \step[fieldset=userf, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=author,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userf,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=language,match=french,final]
- \step[fieldset=langid,fieldvalue={french}]
+ \step[fieldsource=author,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userf,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=language,match=chinese,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=author,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userf,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=author,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userf,fieldvalue={korean}]%韩语
}
+ \map{%将没有设置userf,且存在author域的默认设置为英文
+ \step[fieldsource=author,final]
+ \step[fieldset=userf,fieldvalue={english}]
+ }
+ \map{%译者的中文判断
+ \step[fieldsource=translator, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
+ \step[fieldset=usere, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=translator,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=usere,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=language,match=japnese,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=translator,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=usere,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=language,match=korean,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=translator,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=usere,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=translator,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=usere,fieldvalue={korean}]%韩语
}
- \map{%当没有language域信息给出时,根据title域来自动判断语言并设置本地化字符串语言
- %把语言信息设置language域内,而不再用userb域(20180525)
- %接着根据信息域字符的unicode码判断
- \step[fieldsource=title,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
- \step[fieldset=language,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
- \step[fieldset=langid,fieldvalue={french}]
+ \map{%将没有设置usere,且存在translator域的默认设置为英文
+ \step[fieldsource=translator,final]
+ \step[fieldset=usere,fieldvalue={english}]
}
+ \map{%编者的中文判断
+ \step[fieldsource=editor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%直接匹配cjk字符,unicode编码位置从2FF0到9FA5
+ \step[fieldset=userc, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=editor,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userc,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=title,match=\regexp{[\x{0400}-\x{052F}]},final]
- \step[fieldset=language,fieldvalue={russian}]%俄语
- \step[fieldset=langid,fieldvalue={russian}]
+ \step[fieldsource=editor,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userc,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=title,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
- \step[fieldset=language,fieldvalue={japanese}]%日语
- \step[fieldset=langid,fieldvalue={english}]%中日韩语目前都用english,
+ \step[fieldsource=editor,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userc,fieldvalue={japanese}]%日语
} %确定形式后可增加类似andotherscn这样的本地化字符串处理
\map{%
- \step[fieldsource=title,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
- \step[fieldset=language,fieldvalue={korean}]%韩语
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=editor,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userc,fieldvalue={korean}]%韩语
}
- \map{%因为无法进行cjk字符判断,所以用反的思路,判断没有英文字符,没有空格,没有逗号等字符情况下
- %认为是中文的,将文献language设置成chinese,用于排序
- %参考4.5.8 姓名首字母生成控制
- %\step[fieldsource=author,match=\regexp{[^a-zA-Z\s\.\,\'\{\}\\\/\-\x22\x26\:0-9\p{IsP}\p{PosixPunct}\x{2bf}\x{2018}\xE9\p{IsASCII}]},final]
- %对于带重音符号的字符似乎无法匹配。比如\'e
- %最后选择直接匹配cjk字符,unicode编码位置从2FF0到9FA5
- \step[fieldsource=author,match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=language,fieldvalue={chinese}]
+ \map{%将没有设置userc,且存在editor域的默认设置为英文
+ \step[fieldsource=editor,final]
+ \step[fieldset=userc,fieldvalue={english}]
}
- \map{\step[fieldsource=title,match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=language,fieldvalue={chinese}]
+ \map{%编者的中文判断
+ \step[fieldsource=bookauthor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%直接匹配cjk字符,unicode编码位置从2FF0到9FA5
+ \step[fieldset=userb, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=bookauthor,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userb,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userb,fieldvalue={russian}]%俄语
+ }
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userb,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userb,fieldvalue={korean}]%韩语
+ }
+ \map{%将没有设置userc,且存在editor域的默认设置为英文
+ \step[fieldsource=bookauthor,final]
+ \step[fieldset=userb,fieldvalue={english}]
+ }
+ \map{\step[fieldsource=userd,final]%userd存在则用根据标题的语言设定language
+ \step[fieldset=language,origfieldval]%本身language存在则不设定
+ }
+ \map{\step[fieldsource=userf,final]%userd不存在,而userf存在则根据author的语言设定language
+ \step[fieldset=language,origfieldval]
}%如果没有作者和标题,那么剩下的最可能有意义的只有网址了,而网址通常是英文的,因此不用再进一步对其它域进行判断了。
\map{%将没有设置的language设置成en,即认为不是中文的就是英文的。
\step[fieldset=language,fieldvalue={english}]
- \step[fieldset=langid,fieldvalue={english}]
}
- \map{%将一条文献的主体语言放入userd中,以便进行多语言处理
- %之所以这么说,是因为一条文献可能是混合语言的,比如作者用的是英文
+ \map{%一条文献的语言已经设定在language域中,由于出版项相关宏中使用userd判断,
+ %所以将一条文献的主体语言设定到userd中,本身前面userd已经设定,但没有处理无标题的情况,
+ %这里的处理等价于没有标题时,利用作者的语言设定userd,再没有作者,则默认用英文设定userd
\step[fieldsource=language]
\step[fieldset=userd,origfieldval]
}
+ \map{%当文献给出language域时,设置文献要使用的本地化字符串的语言
+ \step[fieldsource=language,match=english,final]
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{
+ \step[fieldsource=language,match=russian,final]
+ \step[fieldset=langid,fieldvalue={russian}]
+ }
+ \map{%
+ \step[fieldsource=language,match=french,final]
+ \step[fieldset=langid,fieldvalue={french}]
+ }
+ \map{%
+ \step[fieldsource=language,match=chinese,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{%
+ \step[fieldsource=language,match=japnese,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{%
+ \step[fieldsource=language,match=korean,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
}
}
@@ -1626,16 +1711,18 @@
\DeclareDelimFormat{strandothersdelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace%
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbbiblocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andotherscn}}{%
- \iffieldequalstr{userd}{korean}{\bibstring{andotherskr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andothersjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{andothers}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{andothers}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{andothers}}{}%
-}%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andotherscn}}{}%
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andotherskr}}{}%
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andothersjp}}{}%
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{andothers}}{}%
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{andothers}}{}%
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{andothers}}{}%
\or%
\bibstring{andotherscn}%
\or%
@@ -1653,16 +1740,19 @@
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace%
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbbiblocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andcn}}{%
-\iffieldequalstr{userd}{korean}{\bibstring{andkr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{and}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{and}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{and}}{}%
-}\space%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andcn}}{}%
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andkr}}{}%
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andjp}}{}%
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{and}}{}%
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{and}}{}%
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{and}}{}%
+\space%
\or%
\bibstring{andcn}\space%
\or%
Modified: trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx 2019-02-11 22:05:25 UTC (rev 50004)
@@ -7,7 +7,7 @@
%% Released under the LaTeX Project Public License v1.3c or later
%% ---------------------------------------------------------------
%%
-\def\versionofgbtstyle{2019/02/07 v1.0q}
+\def\versionofgbtstyle{2019/02/11 v1.0q}
\ProvidesFile{gb7714-2015.cbx}[\versionofgbtstyle biblatex citation style]
%
Modified: trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx 2019-02-11 22:05:25 UTC (rev 50004)
@@ -10,7 +10,7 @@
%
% 版本和时间信息
%
-\def\versionofgbtstyle{2019/02/07 v1.0q}
+\def\versionofgbtstyle{2019/02/11 v1.0q}
\def\versionofbiblatex{\abx at version}
\ProvidesFile{gb7714-2015ay.bbx}[\versionofgbtstyle biblatex bibliography style]
\RequireBiber[3]%显式指定用biber后端
@@ -255,7 +255,11 @@
\DeclareCiteCommand{\footfullcite}[\mkbibfootnote]%
{\defcounter{maxnames}{\blx at maxbibnames}%局部定义maxnames和minnames计数器
\defcounter{minnames}{\blx at minbibnames}%使footfullcite内的作者输出与正文文献表中的一致。
- \usebibmacro{prenote}}%
+ \usebibmacro{prenote}%
+ \renewbibmacro*{postnote}{%
+ \iffieldundef{postnote}%
+ {}{\setunit{\addcolon\addspace}\printtext{\thefield{postnote}}}}%由于ay样式中没有修改postnote域,此处因为格式需要不使用默认域格式
+ }%
{\usebibmacro{citesavefn}%
\ifcsdef{labelsec\arabic{refsection}et\thefield{entrykey}}%
{\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}\nopunct}%
@@ -262,7 +266,7 @@
{\usedriver{\DeclareNameAlias{sortname}{default}}{\thefield{entrytype}}}%
}%
{\multicitedelim}%
- {\addcolon\usebibmacro{postnote}}
+ {\usebibmacro{postnote}}
}
@@ -700,15 +704,17 @@
\DeclareSourcemap{
\maps[datatype=bibtex]{
- \map{
- \pernottype{inbook}
+ \map{%当没有作者时将editor转成author
+ \pernottype{inbook}%因为in系列中editor可能用来表示bookauthor,所以排除
\pernottype{inproceedings}
\pernottype{incollection}
+ \pernottype{periodical}%因为peridical直接使用editor,所以排除
+ %注意notfield在低版本biblatex中没有
%\step[notfield=author,final]%当author不存在,将editor复制给author
\step[fieldsource=editor,fieldtarget=author]%并删除editor
}
- \map{
- \pernottype{inbook}
+ \map{%当没有作者时将translator转成author
+ \pernottype{inbook}
\pernottype{inproceedings}
\pernottype{incollection}
%\step[notfield=author,final]%当author不存在,将translator复制给author
@@ -725,9 +731,6 @@
\step[fieldsource=address,final]
\step[fieldset=location,origfieldval]
}
- \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
- \step[fieldsource={author}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
- }%\perdatasource{examples.bib}
\map{%处理在bib文件用mark标记文献类型标识符的情况
\step[fieldsource=mark,final]
\step[fieldset=usera, origfieldval]
@@ -894,18 +897,18 @@
\pertype{unpublished}
\step[fieldset=usera, fieldvalue={Z}]
}
- \map{%作者的中文判断
- \step[fieldsource=author, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=userf, fieldvalue={chinese}]
- }
- \map{%译者的中文判断
- \step[fieldsource=translator, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=usere, fieldvalue={chinese}]
- }
- \map{%编者的中文判断
- \step[fieldsource=editor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=userc, fieldvalue={chinese}]
- }
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={author}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={editor}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={translator}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={bookauthor}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
\map{%处理一些用year表示date的情况
%这样处理将会设置date域,并使得labeldatesource变为空,因为date的前缀为空(如果是urldate,那么labeldatesource就是url)。
%同时date域会被biblatex自动解析为year,month,day,并且覆盖原来的year信息
@@ -912,82 +915,164 @@
\step[fieldsource=year]
\step[fieldset=date, origfieldval]
}
+ \map{%将entrykey放入keywords中用于后期使用
+ \step[fieldsource=entrykey]
+ \step[fieldset=keywords, origfieldval]
+ }
\map{%文献题名的中文判断,将信息保存到userd中,避免因为标签生成原因导致title域被清除而产生问题
\step[fieldsource=title, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%
\step[fieldset=userd, fieldvalue={chinese}]
}
- \map{%将entrykey放入keywords中用于后期使用
- \step[fieldsource=entrykey]
- \step[fieldset=keywords, origfieldval]
+ \map{\step[fieldsource=title,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userd,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
}
- \map{%当文献给出language域时,设置文献要使用的本地化字符串的语言
- \step[fieldsource=language,match=english,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userd,fieldvalue={russian}]%俄语
}
- \map{
- \step[fieldsource=language,match=russian,final]
- \step[fieldset=langid,fieldvalue={russian}]
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userd,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userd,fieldvalue={korean}]%韩语
}
+ \map{%将没有设置userd,且存在title域的默认设置为英文
+ \step[fieldsource=title,final]
+ \step[fieldset=userd,fieldvalue={english}]
+ }
+ \map{%作者的中文判断
+ \step[fieldsource=author, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
+ \step[fieldset=userf, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=author,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userf,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=language,match=french,final]
- \step[fieldset=langid,fieldvalue={french}]
+ \step[fieldsource=author,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userf,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=language,match=chinese,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=author,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userf,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=author,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userf,fieldvalue={korean}]%韩语
}
+ \map{%将没有设置userf,且存在author域的默认设置为英文
+ \step[fieldsource=author,final]
+ \step[fieldset=userf,fieldvalue={english}]
+ }
+ \map{%译者的中文判断
+ \step[fieldsource=translator, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
+ \step[fieldset=usere, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=translator,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=usere,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=language,match=japnese,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=translator,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=usere,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=language,match=korean,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=translator,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=usere,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=translator,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=usere,fieldvalue={korean}]%韩语
}
- \map{%当没有language域信息给出时,根据title域来自动判断语言并设置本地化字符串语言
- %把语言信息设置language域内,而不再用userb域(20180525)
- %接着根据信息域字符的unicode码判断
- \step[fieldsource=title,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
- \step[fieldset=language,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
- \step[fieldset=langid,fieldvalue={french}]
+ \map{%将没有设置usere,且存在translator域的默认设置为英文
+ \step[fieldsource=translator,final]
+ \step[fieldset=usere,fieldvalue={english}]
}
+ \map{%编者的中文判断
+ \step[fieldsource=editor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%直接匹配cjk字符,unicode编码位置从2FF0到9FA5
+ \step[fieldset=userc, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=editor,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userc,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=title,match=\regexp{[\x{0400}-\x{052F}]},final]
- \step[fieldset=language,fieldvalue={russian}]%俄语
- \step[fieldset=langid,fieldvalue={russian}]
+ \step[fieldsource=editor,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userc,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=title,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
- \step[fieldset=language,fieldvalue={japanese}]%日语
- \step[fieldset=langid,fieldvalue={english}]%中日韩语目前都用english,
+ \step[fieldsource=editor,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userc,fieldvalue={japanese}]%日语
} %确定形式后可增加类似andotherscn这样的本地化字符串处理
\map{%
- \step[fieldsource=title,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
- \step[fieldset=language,fieldvalue={korean}]%韩语
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=editor,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userc,fieldvalue={korean}]%韩语
}
- \map{%因为无法进行cjk字符判断,所以用反的思路,判断没有英文字符,没有空格,没有逗号等字符情况下
- %认为是中文的,将文献language设置成chinese,用于排序
- %参考4.5.8 姓名首字母生成控制
- %\step[fieldsource=author,match=\regexp{[^a-zA-Z\s\.\,\'\{\}\\\/\-\x22\x26\:0-9\p{IsP}\p{PosixPunct}\x{2bf}\x{2018}\xE9\p{IsASCII}]},final]
- %对于带重音符号的字符似乎无法匹配。比如\'e
- %最后选择直接匹配cjk字符,unicode编码位置从2FF0到9FA5
- \step[fieldsource=author,match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=language,fieldvalue={chinese}]
+ \map{%将没有设置userc,且存在editor域的默认设置为英文
+ \step[fieldsource=editor,final]
+ \step[fieldset=userc,fieldvalue={english}]
}
- \map{
- \step[fieldsource=title,match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=language,fieldvalue={chinese}]
+ \map{%编者的中文判断
+ \step[fieldsource=bookauthor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%直接匹配cjk字符,unicode编码位置从2FF0到9FA5
+ \step[fieldset=userb, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=bookauthor,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userb,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userb,fieldvalue={russian}]%俄语
+ }
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userb,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userb,fieldvalue={korean}]%韩语
+ }
+ \map{%将没有设置userc,且存在editor域的默认设置为英文
+ \step[fieldsource=bookauthor,final]
+ \step[fieldset=userb,fieldvalue={english}]
+ }
+ \map{\step[fieldsource=userd,final]%userd存在则用根据标题的语言设定language
+ \step[fieldset=language,origfieldval]%本身language存在则不设定
+ }
+ \map{\step[fieldsource=userf,final]%userd不存在,而userf存在则根据author的语言设定language
+ \step[fieldset=language,origfieldval]
}%如果没有作者和标题,那么剩下的最可能有意义的只有网址了,而网址通常是英文的,因此不用再进一步对其它域进行判断了。
\map{%将没有设置的language设置成en,即认为不是中文的就是英文的。
\step[fieldset=language,fieldvalue={english}]
- \step[fieldset=langid,fieldvalue={english}]
}
- \map{%将一条文献的主体语言放入userd中,以便进行多语言处理
- %之所以这么说,是因为一条文献可能是混合语言的,比如作者用的是英文
+ \map{%一条文献的语言已经设定在language域中,由于出版项相关宏中使用userd判断,
+ %所以将一条文献的主体语言设定到userd中,本身前面userd已经设定,但没有处理无标题的情况,
+ %这里的处理等价于没有标题时,利用作者的语言设定userd,再没有作者,则默认用英文设定userd
\step[fieldsource=language]
\step[fieldset=userd,origfieldval]
}
+ \map{%当文献给出language域时,设置文献要使用的本地化字符串的语言
+ \step[fieldsource=language,match=english,final]
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{
+ \step[fieldsource=language,match=russian,final]
+ \step[fieldset=langid,fieldvalue={russian}]
+ }
+ \map{%
+ \step[fieldsource=language,match=french,final]
+ \step[fieldset=langid,fieldvalue={french}]
+ }
+ \map{%
+ \step[fieldsource=language,match=chinese,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{%
+ \step[fieldsource=language,match=japnese,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{%
+ \step[fieldsource=language,match=korean,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
\map{%尝试未定义数据模型的standard类型映射为其他类型book或inbook,
%standard类型在blx-dm中有出现,但仅定义了类型,域和约束等都没有定义
%因为可能要映射两种类型,所以不能在驱动层处理,因为要做判断
@@ -1691,35 +1776,40 @@
% 而不用对每一个引用命令单独设置,比如cite,parancite,textcite都设置
\DeclareDelimFormat{strandothersdelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
- \addspace%%做一个判断是在处理author还是translator,用于两者是不同语言的情况
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \addspace%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbcitelocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andothersincitecn}}{%
-\iffieldequalstr{userd}{korean}{\bibstring{andotherskr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andothersjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{andothersincite}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{andothers}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{andothers}}{}%
-}%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andothersincitecn}}{}%中文已经通过english本地化字符串定义
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andotherskr}}{}%韩语未定义,所以与bib中一致
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andothersjp}}{}%日与同韩语
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{andothersincite}}{}%英语已定义
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{andothers}}{}%法语未定义,若要定义需要针对french本地化字符串定义
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{andothers}}{}%俄语未定义,若要定义需要针对russian本地化字符串定义
\or%
\bibstring{andothersincitecn}%
\or%
\bibstring{andothersincite}%
\fi}
+
\DeclareDelimFormat[bib,biblist]{strandothersdelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace%
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbbiblocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andotherscn}}{%
-\iffieldequalstr{userd}{korean}{\bibstring{andotherskr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andothersjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{andothers}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{andothers}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{andothers}}{}%
-}%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andotherscn}}{}%
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andotherskr}}{}%
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andothersjp}}{}%
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{andothers}}{}%
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{andothers}}{}%
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{andothers}}{}%
\or%
\bibstring{andotherscn}%
\or%
@@ -1726,6 +1816,7 @@
\bibstring{andothers}%
\fi}
+
%
% 修改最后一个作者前的字符串,比如 and
% v1.0o,20190103,hzz
@@ -1737,34 +1828,41 @@
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace%
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbcitelocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andincitecn}}{%
-\iffieldequalstr{userd}{korean}{\bibstring{andkr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{andincite}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{and}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{and}}{}%
- }\space%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andincitecn}}{}%
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andkr}}{}%
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andjp}}{}%
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{andincite}}{}%
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{and}}{}%
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{and}}{}%
+\space%
\or%
\bibstring{andincitecn}\space%
\or%
\bibstring{andincite}\space%
\fi}
+
\DeclareDelimFormat[bib,biblist]{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace%
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbbiblocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andcn}}{%
-\iffieldequalstr{userd}{korean}{\bibstring{andkr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{and}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{and}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{and}}{}%
-}\space%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andcn}}{}%
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andkr}}{}%
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andjp}}{}%
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{and}}{}%
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{and}}{}%
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{and}}{}%
+\space%
\or%
\bibstring{andcn}\space%
\or%
@@ -1772,6 +1870,7 @@
\fi}
+
%
% 重设title的输出
%
Modified: trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx 2019-02-11 22:05:25 UTC (rev 50004)
@@ -7,7 +7,7 @@
%% Released under the LaTeX Project Public License v1.3c or later
%% ---------------------------------------------------------------
%%
-\def\versionofgbtstyle{2019/02/07 v1.0q}
+\def\versionofgbtstyle{2019/02/11 v1.0q}
\ProvidesFile{gb7714-2015ay.cbx}[\versionofgbtstyle biblatex citation style]
%
@@ -69,7 +69,6 @@
}
-
%
% 重定义cite:label,针对biblatex3.8以上版本set条目集的标注(引用)标签
%
Modified: trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx 2019-02-11 22:05:25 UTC (rev 50004)
@@ -11,7 +11,7 @@
%
% 版本和时间信息
%
-\def\versionofgbtstyle{2019/02/07 v1.0q}
+\def\versionofgbtstyle{2019/02/11 v1.0q}
\def\versionofbiblatex{\abx at version}
\ProvidesFile{gb7714-2015ms.bbx}[\versionofgbtstyle biblatex bibliography style]
\RequireBiber[3]%显式指定用biber后端
@@ -145,7 +145,11 @@
\DeclareCiteCommand{\footfullcite}[\mkbibfootnote]%
{\defcounter{maxnames}{\blx at maxbibnames}%局部定义maxnames和minnames计数器
\defcounter{minnames}{\blx at minbibnames}%使footfullcite内的作者输出与正文文献表中的一致。
- \usebibmacro{prenote}}%
+ \usebibmacro{prenote}%
+ \renewbibmacro*{postnote}{%
+ \iffieldundef{postnote}%
+ {}{\setunit{\addcolon\addspace}\printfield{postnote}}}%与ay样式不同,由于已修改postnote域格式,直接用printfield
+ }%
{\usebibmacro{citesavefn}%
\ifcsdef{labelsec\arabic{refsection}et\thefield{entrykey}}%
{\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}\nopunct}%
@@ -152,7 +156,7 @@
{\usedriver{\DeclareNameAlias{sortname}{default}}{\thefield{entrytype}}}%
}%
{\multicitedelim}%
- {\addcolon\usebibmacro{postnote}}
+ {\usebibmacro{postnote}}
}
@@ -530,17 +534,19 @@
% newsdate 用于公告日期,公开日期或新闻日期,输出到日,但无包围符号,数据源为date
% modifydate 用于更新或修改日期,输出到日,且用()包围,数据源为date或enddate或eventdate
-\DeclareSourcemap{
+\DeclareSourcemap{%\perdatasource{examples.bib}
\maps[datatype=bibtex]{%
- \map{
- \pernottype{inbook}
+ \map{%当没有作者时将editor转成author
+ \pernottype{inbook}%因为in系列中editor可能用来表示bookauthor,所以排除
\pernottype{inproceedings}
\pernottype{incollection}
+ \pernottype{periodical}%因为peridical直接使用editor,所以排除
+ %注意notfield在低版本biblatex中没有
%\step[notfield=author,final]%当author不存在,将editor复制给author
\step[fieldsource=editor,fieldtarget=author]%并删除editor
}
- \map{
- \pernottype{inbook}
+ \map{%当没有作者时将translator转成author
+ \pernottype{inbook}
\pernottype{inproceedings}
\pernottype{incollection}
%\step[notfield=author,final]%当author不存在,将translator复制给author
@@ -557,9 +563,6 @@
\step[fieldsource=address,final]
\step[fieldset=location,origfieldval]
}
- \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
- \step[fieldsource={author}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
- }%\perdatasource{examples.bib}
\map{%处理在bib文件用mark标记文献类型标识符的情况
\step[fieldsource=mark,final]
\step[fieldset=usera, origfieldval]
@@ -726,18 +729,18 @@
\pertype{unpublished}
\step[fieldset=usera, fieldvalue={Z}]
}
- \map{%作者的中文判断
- \step[fieldsource=author, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=userf, fieldvalue={chinese}]
- }
- \map{%译者的中文判断
- \step[fieldsource=translator, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=usere, fieldvalue={chinese}]
- }
- \map{%编者的中文判断
- \step[fieldsource=editor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=userc, fieldvalue={chinese}]
- }
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={author}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={editor}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={translator}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
+ \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况
+ \step[fieldsource={bookauthor}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}]
+ }%
\map{%处理一些用year表示date的情况
%这样处理将会设置date域,并使得labeldatesource变为空,因为date的前缀为空(如果是urldate,那么labeldatesource就是url)。
%同时date域会被biblatex自动解析为year,month,day,并且覆盖原来的year信息
@@ -744,81 +747,164 @@
\step[fieldsource=year]
\step[fieldset=date, origfieldval]
}
+ \map{%将entrykey放入keywords中用于后期使用
+ \step[fieldsource=entrykey]
+ \step[fieldset=keywords, origfieldval]
+ }
\map{%文献题名的中文判断,将信息保存到userd中,避免因为标签生成原因导致title域被清除而产生问题
\step[fieldsource=title, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%
\step[fieldset=userd, fieldvalue={chinese}]
}
- \map{%将entrykey放入keywords中用于后期使用
- \step[fieldsource=entrykey]
- \step[fieldset=keywords, origfieldval]
+ \map{\step[fieldsource=title,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userd,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
}
- \map{%当文献给出language域时,设置文献要使用的本地化字符串的语言
- \step[fieldsource=language,match=english,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userd,fieldvalue={russian}]%俄语
}
- \map{
- \step[fieldsource=language,match=russian,final]
- \step[fieldset=langid,fieldvalue={russian}]
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userd,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=title,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userd,fieldvalue={korean}]%韩语
}
+ \map{%将没有设置userd,且存在title域的默认设置为英文
+ \step[fieldsource=title,final]
+ \step[fieldset=userd,fieldvalue={english}]
+ }
+ \map{%作者的中文判断
+ \step[fieldsource=author, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
+ \step[fieldset=userf, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=author,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userf,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=language,match=french,final]
- \step[fieldset=langid,fieldvalue={french}]
+ \step[fieldsource=author,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userf,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=language,match=chinese,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=author,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userf,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=author,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userf,fieldvalue={korean}]%韩语
}
+ \map{%将没有设置userf,且存在author域的默认设置为英文
+ \step[fieldsource=author,final]
+ \step[fieldset=userf,fieldvalue={english}]
+ }
+ \map{%译者的中文判断
+ \step[fieldsource=translator, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
+ \step[fieldset=usere, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=translator,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=usere,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=language,match=japnese,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=translator,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=usere,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=language,match=korean,final]
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=translator,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=usere,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=translator,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=usere,fieldvalue={korean}]%韩语
}
- \map{%当没有language域信息给出时,根据title域来自动判断语言并设置本地化字符串语言
- %把语言信息设置language域内,而不再用userb域(20180525)
- %接着根据信息域字符的unicode码判断
- \step[fieldsource=title,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
- \step[fieldset=language,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
- \step[fieldset=langid,fieldvalue={french}]
+ \map{%将没有设置usere,且存在translator域的默认设置为英文
+ \step[fieldsource=translator,final]
+ \step[fieldset=usere,fieldvalue={english}]
}
+ \map{%编者的中文判断
+ \step[fieldsource=editor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%直接匹配cjk字符,unicode编码位置从2FF0到9FA5
+ \step[fieldset=userc, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=editor,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userc,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
\map{%
- \step[fieldsource=title,match=\regexp{[\x{0400}-\x{052F}]},final]
- \step[fieldset=language,fieldvalue={russian}]%俄语
- \step[fieldset=langid,fieldvalue={russian}]
+ \step[fieldsource=editor,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userc,fieldvalue={russian}]%俄语
}
\map{%
- \step[fieldsource=title,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
- \step[fieldset=language,fieldvalue={japanese}]%日语
- \step[fieldset=langid,fieldvalue={english}]%中日韩语目前都用english,
+ \step[fieldsource=editor,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userc,fieldvalue={japanese}]%日语
} %确定形式后可增加类似andotherscn这样的本地化字符串处理
\map{%
- \step[fieldsource=title,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
- \step[fieldset=language,fieldvalue={korean}]%韩语
- \step[fieldset=langid,fieldvalue={english}]
+ \step[fieldsource=editor,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userc,fieldvalue={korean}]%韩语
}
- \map{%因为无法进行cjk字符判断,所以用反的思路,判断没有英文字符,没有空格,没有逗号等字符情况下
- %认为是中文的,将文献language设置成chinese,用于排序
- %参考4.5.8 姓名首字母生成控制
- %\step[fieldsource=author,match=\regexp{[^a-zA-Z\s\.\,\'\{\}\\\/\-\x22\x26\:0-9\p{IsP}\p{PosixPunct}\x{2bf}\x{2018}\xE9\p{IsASCII}]},final]
- %对于带重音符号的字符似乎无法匹配。比如\'e
- %最后选择直接匹配cjk字符,unicode编码位置从2FF0到9FA5
- \step[fieldsource=author,match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=language,fieldvalue={chinese}]
+ \map{%将没有设置userc,且存在editor域的默认设置为英文
+ \step[fieldsource=editor,final]
+ \step[fieldset=userc,fieldvalue={english}]
}
- \map{\step[fieldsource=title,match=\regexp{[\x{2FF0}-\x{9FA5}]},final]
- \step[fieldset=language,fieldvalue={chinese}]
+ \map{%编者的中文判断
+ \step[fieldsource=bookauthor, match=\regexp{[\x{2FF0}-\x{9FA5}]},final]%直接匹配cjk字符,unicode编码位置从2FF0到9FA5
+ \step[fieldset=userb, fieldvalue={chinese}]
+ }
+ \map{\step[fieldsource=bookauthor,match=\regexp{[\x{0100}-\x{017F}]},final]%\x80-\xFF
+ \step[fieldset=userb,fieldvalue={french}]%法语,0080开始到00ff的字符没法匹配有点奇怪
+ }
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{0400}-\x{052F}]},final]
+ \step[fieldset=userb,fieldvalue={russian}]%俄语
+ }
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{3040}-\x{30FF}\x{31F0}-\x{31FF}]},final]
+ \step[fieldset=userb,fieldvalue={japanese}]%日语
+ } %确定形式后可增加类似andotherscn这样的本地化字符串处理
+ \map{%
+ \step[fieldsource=bookauthor,match=\regexp{[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]},final]
+ \step[fieldset=userb,fieldvalue={korean}]%韩语
+ }
+ \map{%将没有设置userc,且存在editor域的默认设置为英文
+ \step[fieldsource=bookauthor,final]
+ \step[fieldset=userb,fieldvalue={english}]
+ }
+ \map{\step[fieldsource=userd,final]%userd存在则用根据标题的语言设定language
+ \step[fieldset=language,origfieldval]%本身language存在则不设定
+ }
+ \map{\step[fieldsource=userf,final]%userd不存在,而userf存在则根据author的语言设定language
+ \step[fieldset=language,origfieldval]
}%如果没有作者和标题,那么剩下的最可能有意义的只有网址了,而网址通常是英文的,因此不用再进一步对其它域进行判断了。
\map{%将没有设置的language设置成en,即认为不是中文的就是英文的。
\step[fieldset=language,fieldvalue={english}]
- \step[fieldset=langid,fieldvalue={english}]
}
- \map{%将一条文献的主体语言放入userd中,以便进行多语言处理
- %之所以这么说,是因为一条文献可能是混合语言的,比如作者用的是英文
+ \map{%一条文献的语言已经设定在language域中,由于出版项相关宏中使用userd判断,
+ %所以将一条文献的主体语言设定到userd中,本身前面userd已经设定,但没有处理无标题的情况,
+ %这里的处理等价于没有标题时,利用作者的语言设定userd,再没有作者,则默认用英文设定userd
\step[fieldsource=language]
\step[fieldset=userd,origfieldval]
}
+ \map{%当文献给出language域时,设置文献要使用的本地化字符串的语言
+ \step[fieldsource=language,match=english,final]
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{
+ \step[fieldsource=language,match=russian,final]
+ \step[fieldset=langid,fieldvalue={russian}]
+ }
+ \map{%
+ \step[fieldsource=language,match=french,final]
+ \step[fieldset=langid,fieldvalue={french}]
+ }
+ \map{%
+ \step[fieldsource=language,match=chinese,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{%
+ \step[fieldsource=language,match=japnese,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
+ \map{%
+ \step[fieldsource=language,match=korean,final]%中日韩语目前都用english,
+ \step[fieldset=langid,fieldvalue={english}]
+ }
}
}
@@ -1470,16 +1556,18 @@
\DeclareDelimFormat{strandothersdelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace%
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbbiblocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andotherscn}}{%
-\iffieldequalstr{userd}{korean}{\bibstring{andotherskr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andothersjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{andothers}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{andothers}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{andothers}}{}%
- }%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andotherscn}}{}%
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andotherskr}}{}%
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andothersjp}}{}%
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{andothers}}{}%
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{andothers}}{}%
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{andothers}}{}%
\or%
\bibstring{andotherscn}%
\or%
@@ -1496,24 +1584,27 @@
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace%
- \ifcurrentname{translator}{\testCJKfirst{usere}}{\testCJKfirst{userf}}%
- \ifcurrentname{editor}{\testCJKfirst{userc}}{\testCJKfirst{userf}}%
+ \edef\userfieldabcde{userd}%
+ \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}%
+ \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}%
+ \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}%
+ \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}%
\ifcase\value{gbbiblocalcase}%
- \iftoggle{ifCJKforgbt}{\bibstring{andcn}}{%
-\iffieldequalstr{userd}{korean}{\bibstring{andkr}}{}%
-\iffieldequalstr{userd}{japnese}{\bibstring{andjp}}{}%
-\iffieldequalstr{userd}{english}{\bibstring{and}}{}%
-\iffieldequalstr{userd}{french}{\bibstring{and}}{}%
-\iffieldequalstr{userd}{russian}{\bibstring{and}}{}%
- }\space%
+ \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andcn}}{}%
+ \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andkr}}{}%
+ \iffieldequalstr{\userfieldabcde}{japnese}{\bibstring{andjp}}{}%
+ \iffieldequalstr{\userfieldabcde}{english}{\bibstring{and}}{}%
+ \iffieldequalstr{\userfieldabcde}{french}{\bibstring{and}}{}%
+ \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{and}}{}%
+\space%
\or%
\bibstring{andcn}\space%
\or%
\bibstring{and}\space%
\fi}%
- %
- % url和url日期格式
- %
+%
+% url和url日期格式
+%
\renewbibmacro*{url+urldate}{%
%\usebibmacro{url}%%更换url的位置,放到下面
\iffieldundef{urlyear}%
Modified: trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx 2019-02-11 22:05:08 UTC (rev 50003)
+++ trunk/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx 2019-02-11 22:05:25 UTC (rev 50004)
@@ -7,7 +7,7 @@
%% Released under the LaTeX Project Public License v1.3c or later
%% ---------------------------------------------------------------
%%
-\def\versionofgbtstyle{2019/02/07 v1.0q}
+\def\versionofgbtstyle{2019/02/11 v1.0q}
\ProvidesFile{gb7714-2015.cbx}[\versionofgbtstyle biblatex citation style]
%
More information about the tex-live-commits
mailing list