summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-07-04 22:06:51 +0000
committerKarl Berry <karl@freefriends.org>2017-07-04 22:06:51 +0000
commit72ab27e8dbc6f44e906e1d570e98e957566cb603 (patch)
tree10a81193ec4ab1160c50a4ded282b51b6729ee9c /Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
parent67228e148954896e0a854965c68ced6595691099 (diff)
biblatex-gb7714-2015 (4jul17)
git-svn-id: svn://tug.org/texlive/trunk@44750 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx')
-rw-r--r--Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx204
1 files changed, 143 insertions, 61 deletions
diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
index 36bc75e38ec..f9eaf107f0d 100644
--- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
+++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
@@ -12,22 +12,29 @@
%% 2016/12/07 v1.0e
%% 2016/12/31 v1.0f
%% 2017/02/26 v1.0g
+%% 2017/04/11 v1.0h
%% E-mail: hzzmail@163.com
%% Released under the LaTeX Project Public License v1.3c or later
%% ---------------------------------------------------------------
%%
-\ProvidesFile{gb7714-2015.bbx}[2017/02/26 v1.0g biblatex bibliography style]
+\ProvidesFile{gb7714-2015.bbx}[2017/04/11 v1.0h biblatex bibliography style]
+
+%=====================================================================
%=====================================================================
%加载标准样式
+%=====================================================================
\RequireBibliographyStyle{numeric-comp}%Load the standard style to avoid copy-pasting unnecessary material
\RequireBibliographyStyle{standard}
\RequirePackage{xstring}%为兼容texlive2015的biblatex3.0不加载xstring包的问题
+
+%=====================================================================
%=====================================================================
%增加一些功能函数
-\providetoggle{iftexlivesix}
+%=====================================================================
%版本判断,根据biblatex更新历史可知,版本3.3开始使用新的姓名机制
+\providetoggle{iftexlivesix}
%所以当版本大于3.2开始,就用设置\toggletrue{iftexlivesix}
\def\numparserta#1.#2\relax{#1}%注意relax的重要性
\def\numparsertb#1.#2\relax{#2}
@@ -35,18 +42,31 @@
\def\numdigital{\expandafter\numparsertb\abx@version\relax}
\ifnumcomp{\numdigital}{>}{2}{\toggletrue{iftexlivesix}}{\togglefalse{iftexlivesix}}
-\providetoggle{ifCJKforgbt}%定义判断中文字符的函数,用于判断作者等信息是否由中文字符构成
+%定义判断中文字符的函数,用于判断作者等信息是否由中文字符构成
+%2E00-2E7F 追加标点
+%2E80-2EFF cjk部首补充
+%2FF0-2FFF 表意文字描述符
+%3000-303F cjk符号和标点
+%3300-33FF cjk兼容
+%3400-4DBF cjk统一表意符号扩展
+%4E00-9FBF cjk统一表意符号
+%中文范围4E00-9FA5
+\providetoggle{ifCJKforgbt}
\def\testCJKfirstchar#1#2&{%
\ifnumgreater{`#1}{"2E7F}{\toggletrue{ifCJKforgbt}}{\togglefalse{ifCJKforgbt}}%
}%
+%利用edef展开或xstring抽取第一个字符判断
+%现在采用xstring方法,避免抽取的是编组符号
\def\testCJKfirst#1{%
%\edef\tempa{#1}%
\exploregroups%
\StrChar{#1}{1}[\tempa]%
\expandafter\testCJKfirstchar\tempa&}
-%\providetoggle{ifnoteeqstandard}%判断是否是标准
+
+%判断是否是标准
+%\providetoggle{ifnoteeqstandard}
%\def\testifnoteeqstd{%
%\iffieldundef{note}{\togglefalse{ifnoteeqstandard}}%判断一下,是否是标准
% {\def\comparetmp{standard}\edef\comparetmpb{\thefield{note}}%
@@ -83,7 +103,7 @@
\gbt@parse@rangeii#2\@empty%
\fi}
-%这里写的number的解析函数,与上面的是类似的。
+%这里写的number的解析函数,与上面的卷解析函数是类似的。
\def\multinumberparser#1{%
\edef\gbnumbertmp{#1}%
\expandafter\multinumberparsetoparts\gbnumbertmp-\@empty}
@@ -105,17 +125,30 @@
%=====================================================================
+%=====================================================================
%设置宏包选项
+%=====================================================================
+
+\iftoggle{iftexlivesix}{% Alter settings that carry through from biblatex
+%biblatex3.3版后(比如texlive2016中的3.4版)的使用方式
-% Alter settings that carry through from biblatex
-\iftoggle{iftexlivesix}
-{%biblatex3.3版后(比如texlive2016中的3.4版)的使用方式
%增加标签对齐选项,right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式
\DeclareBibliographyOption[string]{align}[right]{%
\ifstrequal{#1}{left}{\setalignleft}{}
\ifstrequal{#1}{gb7714-2015}{\setaligngbstyle}{}
}
+%增加一个出版项自动处理控制选项,当true时使用出版者不详等信息补充缺失的出版信息。
+\newtoggle{bbx:gbpub}
+\DeclareBibliographyOption[boolean]{gbpub}[true]{%
+%\settoggle{bbx:gbpub}{#1} %或采用下面这一句
+ \ifstrequal{#1}{false}{\togglefalse{bbx:gbpub}}{\toggletrue{bbx:gbpub}}}
+\ExecuteBibliographyOptions{gbpub}
+
+%增加一个处理佚名或noauthor的控制选项
+%因为在顺序编码制中,不需要使用,这里也增加,为了与作者年制的兼容性考虑。
+\DeclareBibliographyOption[boolean]{gbnoauthor}[true]{}%
+
\ExecuteBibliographyOptions{
sorting=none,
useprefix=true, %名字的信息包括前缀
@@ -135,6 +168,17 @@
\ifstrequal{#1}{gb7714-2015}{}{}
}
+%增加一个出版项自动处理控制选项,当true时使用出版者不详等信息补充缺失的出版信息。
+\newtoggle{bbx:gbpub}
+\DeclareBibliographyOption{gbpub}[true]{%
+%\settoggle{bbx:gbpub}{#1} %或采用下面这一句
+ \ifstrequal{#1}{false}{\togglefalse{bbx:gbpub}}{\toggletrue{bbx:gbpub}}}
+\ExecuteBibliographyOptions{gbpub}
+
+%增加一个处理佚名或noauthor的控制选项
+%因为在顺序编码制中,不需要使用,这里也增加,为了与作者年制的兼容性考虑。
+\DeclareBibliographyOption{gbnoauthor}[true]{}%
+
\ExecuteBibliographyOptions{
sorting=none,
useprefix=true, %名字的信息包括前缀
@@ -147,16 +191,20 @@
}
}
+
+%=====================================================================
%=====================================================================
%设置本地化字符串
+%=====================================================================
%新建一个当地化字符串,用来记录“等”字符
\NewBibliographyString{andotherscn}
\NewBibliographyString{noaddress}
\NewBibliographyString{nopublisher}
-%直接利用当地化格式english进行修改一些中文的格式,
-%具体可以修改哪些需要的参考english.lbx文件
+%直接利用当地化格式english进行修改一些中文的格式
+%具体可以修改哪些,参考english.lbx文件
%当然也可以增加比如上面定义的andotherscn
+%注意:在lbx文件和bbx文件中定义本地字符串的不同语法,两个参数和一个参数的区别
\DefineBibliographyStrings{english}{
bibliography = {参考文献},
references = {参考文献},
@@ -171,10 +219,13 @@ backrefpage = {引用页:},
backrefpages = {引用页:},
}
+
+%=====================================================================
%=====================================================================
%动态数据修改,修改输入的源文件数据,用于中文判断等
+%=====================================================================
%修改输入的源文件数据,用于中文判断等
-%首先把作者和译者信息准确的记录到userf,usere中,用于判断是否是cjk字符。
+%首先把作者和译者信息准确的记录到userf,usere中,用于后面判断是否是cjk字符。
%注意\DeclareSourcemap命令只能出现一次
\DeclareSourcemap{
\maps[datatype=bibtex]{%增加文献标识符如[M],[J]等,下面首先生成这一信息
@@ -183,10 +234,10 @@ backrefpages = {引用页:},
\pertype{article}
\step[fieldset=usera, fieldvalue={J}]
}
- \map{ %使用下面biber动态修改bbl文件的方法是正确的
+ \map{
\pertype{periodical}
\step[fieldset=usera, fieldvalue={J}]
- \step[fieldsource=author] %有时会把version和edition混淆,这里处理后就没有这个问题,可以直接用version
+ \step[fieldsource=author] %有时会把author和editor混淆,这里处理后就没有这个问题
\step[fieldset=editor, origfieldval]
}
\map{
@@ -214,7 +265,7 @@ backrefpages = {引用页:},
\pertype{inproceedings}
\pertype{conference}%兼容老的conference类型
\step[fieldset=usera, fieldvalue={C}]
- \step[fieldsource=institution] %有时会把version和edition混淆,这里处理后就没有这个问题,可以直接用version
+ \step[fieldsource=institution] %有时会把publisher和institution混淆,这里处理后就没有这个问题
\step[fieldset=publisher, origfieldval]
\step[fieldsource=editor] %
\step[fieldset=bookauthor, origfieldval]
@@ -231,7 +282,7 @@ backrefpages = {引用页:},
\pertype{report}
\pertype{techreport}%兼容老的techreport类型
\step[fieldset=usera, fieldvalue={R}]
- \step[fieldsource=publisher] %有时会把publisher和institution混淆,这里处理后就没有这个问题,可以直接用version
+ \step[fieldsource=publisher] %有时会把publisher和institution混淆,这里处理后就没有这个问题
\step[fieldset=institution, origfieldval]
}
\map{
@@ -388,9 +439,11 @@ backrefpages = {引用页:},
\DeclareBibliographyAlias{newspaper}{article}%定义驱动别名,尝试以替代驱动层映射,实践表明是可行的。
+
+%=====================================================================
%=====================================================================
%参考文献表环境
-
+%=====================================================================
%默认的参考文献列表格式,放这里作为参考
%\defbibenvironment{bibliography}
@@ -401,11 +454,11 @@ backrefpages = {引用页:},
%而标签则只能对齐一个方向,要么左对齐要么右对齐,看个人选择了。
%\DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}} %源来自numeric.BBX
%\DeclareFieldFormat{labelnumberwidth}{\ttfamily\mkbibbrackets{#1}\hfill}
-%\iftoggle{alignleft}{\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}\hfill}}{}
+%\iftoggle{alignleft}{\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}\hfill}}{}%这种方式无效是应为加载时就已经展开了。
%修改序号标签格式为左对齐
\def\setalignleft{\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{##1}\hfill}}
-%修改序号标签格式为以各条参文献为基础进行对齐的方式
+%修改序号标签格式为以各条参文献为基础进行对齐的方式
\def\setaligngbstyle{%
\def\blx@bibitem##1{%
\blx@ifdata{##1}
@@ -436,6 +489,8 @@ backrefpages = {引用页:},
\blx@endlangbib}%
\par\endgroup}%这里增加了一个\par
{}}
+\newlength{\lengthid}
+\newlength{\lengthlw}
\newcommand{\itemcmd}{%
\settowidth{\lengthid}{[\printfield{labelnumber}]}
\addtolength{\lengthid}{\biblabelsep}
@@ -445,8 +500,6 @@ backrefpages = {引用页:},
%\parshape 2 0em \textwidth \lengthid \lengthlw
\hangindent\lengthid
[\printfield{labelnumber}]\hspace{\biblabelsep}}
-\newlength{\lengthid}
-\newlength{\lengthlw}
\defbibenvironment{bibliography}
{\begingroup\setlength{\parindent}{0em}}
{\endgroup}
@@ -454,7 +507,9 @@ backrefpages = {引用页:},
%=====================================================================
+%=====================================================================
%设置单元或块等的标点
+%=====================================================================
%\renewrobustcmd*{\bibinitperiod}{\adddot} %来源biblatex2.STY
\renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉
%\newcommand*{\revsdnamepunct}{\addcomma} %来源biblatex.def
@@ -464,14 +519,16 @@ backrefpages = {引用页:},
%关于双语言或多语言的参考文献,可以参考3.11.5 Entry Sets,4.11.1 Entry Sets
%这里调整一下两种语言参考文献的间隔
%\renewcommand*{\entrysetpunct}{\addsemicolon\space}%源来自biblatex.def
-\renewcommand*{\entrysetpunct}{\adddot\par\nobreak}
+\renewcommand*{\entrysetpunct}{\adddot\newline\nobreak}%%双语之间用newline替换par(20170411 v1.0h),避免采用gb7714-2015的项对齐方式第二语言间分段导致没有缩进
%页码引用格式的修改
%\newcommand*{\bibpagespunct}{\addcomma\space}
\renewcommand*{\bibpagespunct}{\addcolon\space}%修改为用冒号
-%=====================================================================
-%修改域的格式
+%=====================================================================
+%=====================================================================
+%修改域的格式,重定义域的输出宏
+%=====================================================================
%新增文献类型标识符的格式
%\DeclareFieldFormat{gbtypeflag}{\nobreak\mkbibbrackets{\nobreak#1}\nobreak}
\DeclareFieldFormat{gbtypeflag}{%
@@ -714,28 +771,27 @@ backrefpages = {引用页:},
\addspace\printtext{[}\printfield{urlyear}%
\iffieldundef{urlmonth}{}{\bibrangedash\printfield{urlmonth}}%
\iffieldundef{urlday}{}{\bibrangedash\printfield{urlday}}\printtext{]}}
+
\newbibmacro*{newsdate}{%%新增加一个新闻日期
\iffieldundef{year}{}{\printfield{year}%
\iffieldundef{month}{}{\bibrangedash\printtext{\thefield{month}}%
\iffieldundef{day}{}{\bibrangedash\printfield{day}}}}%
}
-\newbibmacro*{modifydate}{%新增加一个带括号的日期,用于表示表示电子资源的更新和修改日期,而公告日期安按日期格式
-\iffieldundef{date}{%
-\iffieldundef{enddate}{%
-\printtext{%
-\iffieldundef{eventyear}{}{\mkbibparens{\printtext{\printfield{eventyear}}%
+
+\newbibmacro*{modifydate}{%新增加一个带括号的日期,用于表示电子资源的更新和修改日期,而公告日期则按日期格式
+\iffieldundef{year}{%
+\iffieldundef{endyear}{%
+\iffieldundef{eventyear}{}{\printtext{\mkbibparens{\printtext{\printfield{eventyear}}%
\iffieldundef{eventmonth}{}{\bibrangedash\thefield{eventmonth}}%
\iffieldundef{eventday}{}{\bibrangedash\printfield{eventday}}}}%
}%
}{%
-\printtext{%
-\iffieldundef{endyear}{}{\mkbibparens{\printtext{\printfield{endyear}}%
+\iffieldundef{endyear}{}{\printtext{\mkbibparens{\printtext{\printfield{endyear}}%
\iffieldundef{endmonth}{}{\bibrangedash\thefield{endmonth}}%
\iffieldundef{endday}{}{\bibrangedash\printfield{endday}}}}%
}%
}}{%
-\printtext{%
-\iffieldundef{year}{}{\mkbibparens{\printtext{\printfield{year}}%
+\iffieldundef{year}{}{\printtext{\mkbibparens{\printtext{\printfield{year}}%
\iffieldundef{month}{}{\bibrangedash\thefield{month}}%
\iffieldundef{day}{}{\bibrangedash\printfield{day}}}}%
}}%
@@ -768,30 +824,75 @@ backrefpages = {引用页:},
%\newunit %这里的标点去掉
}
-%出版社和地址的处理,当没有出版社地址时
-%直接判断title的信息是否是中文,若为中文,则写出版地不详,否则用英文的字符表示。
+%出版社和地址的处理
+%当没有出版社地址时,直接判断title的信息是否是中文,若为中文,则写出版地不详,否则用英文的字符表示。
%事实上title对于每个文献来说是必须的,所以用它判断是最快的,而且一般标题和出版社的语言是一样的。
+%新增一个样式用于输出连续出版物的地址,单位,时间,%类似\newbibmacro*{publisher+location+date}
+\newbibmacro*{location+institution+date}{%
+\iftoggle{bbx:gbpub}%
+{\testCJKfirst{\thefield{title}}
+\iflistundef{location}{\iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}}{\printtext{[S.l.\adddot]}}}%
+ {\printlist{location}}%
+% \iflistundef{institution}
+% {\setunit*{\addcomma\space}}
+% {\setunit*{\addcolon\space}}%
+% \printlist{institution}%
+% \setunit*{\addcomma\space}%
+\addcolon\addspace%
+\iflistundef{institution}{%
+\iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}}{\printtext{\mkbibbrackets{s.n.}}}}% \bibstring{nopublisher}%[s.n.\adddot]
+{\printlist{institution}}%
+\setunit{\addcomma\addspace}%
+ %\usebibmacro{date}%
+ \printfield{year}%
+ \bibrangedash%
+ \iffieldundef{endyear}{}{\printfield{endyear}}%
+ \newunit}%
+{ \printlist{location}%
+ \iflistundef{institution}%
+ {\setunit*{\addcomma\space}}
+ {\setunit*{\addcolon\space}}%
+ \printlist{institution}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{date}%
+ \newunit}%
+}
+
+
\renewbibmacro*{publisher+location+date}{%
-\testCJKfirst{\thefield{title}}%
+\iftoggle{bbx:gbpub}%
+{\testCJKfirst{\thefield{title}}%
%\testifnoteeqstd%
\iflistundef{location}{%\adddot
\iffieldequalstr{note}{standard}{}{%从gbt7714-2015标准低19页看到,标准存在出版项时输出,没有时完全省略。
%\iftoggle{ifnoteeqstandard}{}{%}替换为上一句,尽可能用biblatex提供的函数
-\iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}\addcolon\addspace}{\printtext{[S.l.\adddot]}\addcolon\addspace}}}% \bibstring{noaddress}
+\iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}\addcolon\addspace}{\printtext{[S.l.\adddot]}\addcolon\addspace}%
+}}% \bibstring{noaddress}
{\printlist{location}\addcolon\addspace}%
%\addcolon\addspace%
\iflistundef{publisher}{%
\iffieldequalstr{note}{standard}{}{%
%\iftoggle{ifnoteeqstandard}{}{%}替换为上一句,尽可能用biblatex提供的函数
\iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}%
-{\printtext{\mkbibbrackets{s.n.}}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}}}%
+{\printtext{\mkbibbrackets{s.n.}}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}%
+}}%
{\printlist{publisher}\setunit*{\addcomma\addspace}}%
%\addcomma\addspace%
\usebibmacro{date}%
- %\newunit %去掉这个标点
+%\newunit %去掉这个标点
+}%
+{\printlist{location}%
+ \iflistundef{publisher}
+ {\setunit*{\addcomma\space}}
+ {\setunit*{\addcolon\space}}%
+ \printlist{publisher}%
+ \setunit*{\addcomma\space}%
+ \usebibmacro{date}%
+ %\newunit
+ }%
}
-%对版本信息做出修改,源来自biblatex.DEF
+%对edition版本信息做出修改,源来自biblatex.DEF
\DeclareFieldFormat{edition}{%
\testCJKfirst{\thefield{title}}%
\iftoggle{ifCJKforgbt}%
@@ -1006,28 +1107,6 @@ backrefpages = {引用页:},
%\newunit
}
-%新增一个样式用于输出连续出版物的地址,单位,时间
-%类似与上面的\newbibmacro*{publisher+location+date}
-\newbibmacro*{location+institution+date}{%
-\testCJKfirst{\thefield{title}}
-\iflistundef{location}{\iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}}{\printtext{[S.l.\adddot]}}}%
- {\printlist{location}}%
-% \iflistundef{institution}
-% {\setunit*{\addcomma\space}}
-% {\setunit*{\addcolon\space}}%
-% \printlist{institution}%
-% \setunit*{\addcomma\space}%
-\addcolon\addspace%
-\iflistundef{institution}{%
-\iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}}{\printtext{\mkbibbrackets{s.n.}}}}% \bibstring{nopublisher}%[s.n.\adddot]
-{\printlist{institution}}%
-\setunit{\addcomma\addspace}%
- %\usebibmacro{date}%
- \printfield{year}%
- \bibrangedash%
- \iffieldundef{endyear}{}{\printfield{endyear}}%
- \newunit}
-
%重设专利title的输出,将文献类型标识符输出出去,原输出来自biblatex.def文件
\newbibmacro*{patenttitle}{%
\ifboolexpr{%
@@ -1064,8 +1143,11 @@ backrefpages = {引用页:},
%\newunit
}
+
+%=====================================================================
%=====================================================================
%设置驱动格式
+%=====================================================================
%book条目类的驱动,源来自standard.bbx文件
\DeclareBibliographyDriver{book}{%
\usebibmacro{bibindex}%