diff options
author | Karl Berry <karl@freefriends.org> | 2018-05-03 16:48:38 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-05-03 16:48:38 +0000 |
commit | b7a6f91b68a45d61623e2b875af7e975d02727af (patch) | |
tree | 46ee0a19108520cba641edb136cfbe221e45166c /Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx | |
parent | 7d8c827aba5e0a01b782b212162212c3d6866897 (diff) |
biblatex-gb7714-2015 (10apr18)
git-svn-id: svn://tug.org/texlive/trunk@47593 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.bbx | 1395 |
1 files changed, 979 insertions, 416 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 e1d62786091..346898f9f66 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 @@ -1,4 +1,4 @@ -%% +%% %% --------------------------------------------------------------- %% biblatex-gb7714-2015 --- A biblatex implementation of the %% GBT7714-2015 bibliography style,numerical sequence @@ -6,74 +6,87 @@ %% history: %% 2016/05/20 v1.0 2016/10/23 v1.0a 2016/11/11 v1.0b %% 2016/11/14 v1.0c 2016/11/24 v1.0d 2016/12/07 v1.0e -%% 2017/02/26 v1.0g 2017/04/11 v1.0h -%% 2017/11/21 v1.0i +%% 2017/02/26 v1.0g 2017/04/11 v1.0h 2017/11/21 v1.0i +%% 2018/01/20 v1.0j 2018/04/03 v1.0k %% E-mail: hzzmail@163.com %% Released under the LaTeX Project Public License v1.3c or later %% --------------------------------------------------------------- %% -\ProvidesFile{gb7714-2015.bbx}[2017/11/21 v1.0i biblatex bibliography style] +% +% 版本和时间信息 +% +\ProvidesFile{gb7714-2015.bbx}[2018/04/03 v1.0k biblatex bibliography style] +\def\versionofgbtstyle{2018/04/03 v1.0k} +\def\versionofbiblatex{\abx@version} %===================================================================== +% 加载标准样式 %===================================================================== -%加载标准样式 -%===================================================================== -\RequireBibliographyStyle{numeric-comp}%Load the standard style to avoid copy-pasting unnecessary material +\RequireBibliographyStyle{numeric-comp} \RequireBibliographyStyle{standard} -\RequirePackage{xstring}%为兼容texlive2015的biblatex3.0不加载xstring包的问题 +\RequirePackage{xstring}%解决texlive2015的biblatex3.0不加载xstring包的问题 %===================================================================== +% 功能函数 %===================================================================== -%新增功能函数 -%===================================================================== - %版本判断 - \providetoggle{iftlfive}%用于处理biblatex3.2之前的版本,即texlive2015以下版本中的biblatex - \providetoggle{iftlsix}%用于处理biblatex3.3开始改变的新的姓名机制后版本,包括 + % + % biblatex版本判断 + % 20180405,v1.0k,为兼容biblatexv3.11增加toggle:iftlnine,HU zhenzhen + % + % 原理方法:当版本继续更新时,增加一个新的toggle用以处理新的旧版,最新版和未判断出来的版本永远用iftlatest + \providetoggle{iftlfive}%用于处理biblatex3.2之前的版本 + \providetoggle{iftlsix}%用于处理biblatex3.3开始改变的新的姓名机制后版本 \providetoggle{iftlseven}%用于处理biblatex3.7的兼容性 - \providetoggle{iftleight}%用于处理>=biblatex3.8的兼容性 - \providetoggle{iftlnine}%用于处理>=biblatex3.10的兼容性 - \StrBefore{\abx@version}{.}[\numinteger] - \StrBehind{\abx@version}{.}[\numdigital] + \providetoggle{iftleight}%用于处理biblatex3.8到3.9的兼容性 + \providetoggle{iftlnine}%用于处理biblatex10的兼容性 + \providetoggle{iftlatest}%用于最新版biblatex,目前是biblatex3.11,20180402 + \StrBefore{\abx@version}{.}[\numinteger]%以点区分整数和小数 + \StrBehind{\abx@version}{.}[\numdigital]%小数部分可能带字母所以需将其去掉,见下一行代码 \IfInteger{\numdigital}{}{\StrGobbleRight{\numdigital}{1}[\numdigital]} - %2.x版本统一用iftlfive=true表示 - %3.0-3.2版本用iftlfive=true表示 - %3.3-3.6版本用iftlsix=true表示 - %3.7版本用iftlseven=true表示 - %>3.8版本用iftleight=true表示 + \togglefalse{iftlfive} + \togglefalse{iftlsix} + \togglefalse{iftlseven} + \togglefalse{iftleight} + \togglefalse{iftlnine} + \toggletrue{iftlatest} \ifnumcomp{\numinteger}{=}{3}{ - \ifnumcomp{\numdigital}{>}{2}{\toggletrue{iftlsix}\togglefalse{iftlfive}}{\togglefalse{iftlsix}\toggletrue{iftlfive}} - \ifnumcomp{\numdigital}{>}{6}{\toggletrue{iftlseven}\togglefalse{iftlsix}}{\togglefalse{iftlseven}} - \ifnumcomp{\numdigital}{>}{7}{\toggletrue{iftleight}\togglefalse{iftlseven}}{\togglefalse{iftleight}} - \ifnumcomp{\numdigital}{>}{9}{\toggletrue{iftlnine}\togglefalse{iftleight}}{\togglefalse{iftlnine}} + \ifnumcomp{\numdigital}{=}{10}{\toggletrue{iftlnine}\togglefalse{iftlatest}}{}%3.10版本 + \ifnumcomp{\numdigital}{<}{10}{\ifnumcomp{\numdigital}{>}{7}{\toggletrue{iftleight}\togglefalse{iftlatest}}{}}{}%>3.8版本用iftleight=true表示 + \ifnumcomp{\numdigital}{=}{7}{\toggletrue{iftlseven}\togglefalse{iftlatest}}{}%3.7版本用iftlseven=true表示 + \ifnumcomp{\numdigital}{<}{7}{\ifnumcomp{\numdigital}{>}{2}{\toggletrue{iftlsix}\togglefalse{iftlatest}}{}}{}%3.3-3.6版本用iftlsix=true表示 + \ifnumcomp{\numdigital}{<}{3}{\toggletrue{iftlfive}\togglefalse{iftlatest}}{}%3.0-3.2版本用iftlfive=true表示 }{\ifnumcomp{\numinteger}{>}{3}{ - \toggletrue{iftleight}\blx@warning@noline{% + \blx@warning@noline{% biblatex version is >= 4.x.\MessageBreak if errors raised,Please contact biblatex-gb7714-2015 pkg author.}% - }{\toggletrue{iftlfive}\blx@warning@noline{% + }{ \toggletrue{iftlfive}\togglefalse{iftlatest}%2.x版本统一用iftlfive=true表示 + \blx@warning@noline{% biblatex version is <= 2.x.\MessageBreak if errors raised,Please contact biblatex-gb7714-2015 pkg author.}% }} \newcommand\defversion[2]{\csdef{codeversion#1#2}}%定义不同版本的命令 \newcommand\switchversion[2]{\csuse{codeversion#1#2}}%使用不同版本的命令 - %定义判断中文字符的函数,用于判断作者等信息是否由中文字符构成 - %2E00-2E7F 追加标点 - %2E80-2EFF cjk部首补充 - %2FF0-2FFF 表意文字描述符 - %3000-303F cjk符号和标点 - %3300-33FF cjk兼容 - %3400-4DBF cjk统一表意符号扩展 - %4E00-9FBF cjk统一表意符号 - %中文范围4E00-9FA5 + % + % 判断CJK字符的函数,用于判断作者等信息是否由中文字符构成 + % + % 原理方法: + % 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&{%#1#2& \ifnumgreater{`#1}{"2E7F}{\toggletrue{ifCJKforgbt}}{\togglefalse{ifCJKforgbt}}% }% - - %利用edef展开或xstring抽取第一个字符判断 - %现在采用xstring方法,避免抽取的是编组符号 + % 利用edef展开或xstring抽取第一个字符判断 + % 现在采用xstring方法,避免抽取的是编组符号 \def\testCJKfirst#1{% %\edef\tempa{#1}% %\expandarg%\noexpandarg @@ -81,76 +94,130 @@ \StrChar{#1}{1}[\tempa]% \expandafter\testCJKfirstchar\tempa&} - %用于解析连续出版物,2个卷期的情况 - %范围起止间隔符号还是用-,而不是与date相同的/,因为有合期期刊的问题,需要用到/符号 + % + % 2个卷的解析函数,用于连续出版物 + % + % 原理方法: 范围起止间隔符号还是用-,而不是与date相同的/,因为有合期期刊的问题,需要用到/符号 \newcommand{\multivolparser}[1]{% \IfSubStr{#1}{-}% {\StrBefore{#1}{-}[\multivolfirst]\StrBehind{#1}{-}[\multivolsecond]}% {\def\multivolfirst{#1}\def\multivolsecond{}}% } + + % + % 2个期的解析函数,用于连续出版物 + % \newcommand{\multinumberparser}[1]{% \IfSubStr{#1}{-}% {\StrBefore{#1}{-}[\multinumberfirst]\StrBehind{#1}{-}[\multinumbersecond]}% {\def\multinumberfirst{#1}\def\multinumbersecond{}}% } + %===================================================================== +% 设置宏包选项 %===================================================================== -%设置宏包选项 -%===================================================================== -\defversion{3.0}{opt}{ - %biblatex3.3版前(比如texlive2015中的3.0版)的使用方式 - %增加标签对齐选项,right是默认的右对齐,left是左对齐,gb7714-2015无效,仍然为右对齐模式,因为舍弃了list类环境后出错。 - \DeclareBibliographyOption{align}[right]{%texlive2015中的3.0版中的DeclareBibliographyOption选项没有类型说明 - \ifstrequal{##1}{right}{}{} - \ifstrequal{##1}{left}{\setalignleft}{} - \ifstrequal{##1}{gb7714-2015}{}{} - } - - %增加一个出版项自动处理控制选项,当true时使用出版者不详等信息补充缺失的出版信息。 + % + % 增加一个控制是否输出文献类型和载体标识的选项 + % + % 原理方法: + % 对于biblatex3.4以上版本DeclareBibliographyOption命令中的[datatype]如果是boolean,那么是可以省略的 + % 所以用老版本的不用[datatype]的命令可以兼容所有biblatex版本 + \newtoggle{bbx:gbtype} + %\DeclareBibliographyOption[boolean]{gbtype}[true]{%biblatex高版本 + \DeclareBibliographyOption{gbtype}[true]{%biblatex低版本 + \settoggle{bbx:gbtype}{#1}} + \ExecuteBibliographyOptions{gbtype} + + + % + % 增加一个出版项自动处理控制选项,当true时使用出版者不详等信息补充缺失的出版信息。 + % \newtoggle{bbx:gbpub} \DeclareBibliographyOption{gbpub}[true]{% %\settoggle{bbx:gbpub}{#1} %或采用下面这一句 - \ifstrequal{##1}{false}{\togglefalse{bbx:gbpub}}{\toggletrue{bbx:gbpub}}} + \ifstrequal{#1}{false}{\togglefalse{bbx:gbpub}}{\toggletrue{bbx:gbpub}}} \ExecuteBibliographyOptions{gbpub} - %增加一个处理佚名或noauthor的控制选项 - %因为在顺序编码制中,不需要使用,这里也增加,为了与作者年制的兼容性考虑。 + + % + % 增加一个处理佚名或noauthor的控制选项 + % + % 原理方法:因为在顺序编码制中,不需要使用,这里也增加,为了与作者年制的兼容性考虑。 \DeclareBibliographyOption{gbnoauthor}[true]{}% + +% +% 针对biblatex<3.3版本的选项设置,比如texlive2015中的3.0版 +% +\defversion{3.0}{opt}{ + % + % 增加姓名大小写格式处理选项 + % + \DeclareBibliographyOption{gbnamefmt}[uppercase]{% + %\ifstrequal{##1}{gbuppercase}{}{}% + \ifstrequal{##1}{lowercase}{\execgblowercase}{}% + \ifstrequal{##1}{none}{\execnamedefault}{} + \ifstrequal{##1}{pinyin}{\execnamepinyin}{} + } + %\ExecuteBibliographyOptions{gbnamefmt} + + % + % 增加标签对齐选项 + % + % 原理方法:right是默认的右对齐,left是左对齐,gb7714-2015无效,仍然为右对齐模式, + % 因为在这种biblatex低版本中,舍弃了list类环境后,会出错。 + % 注意:texlive2015中的3.0版中的DeclareBibliographyOption选项没有类型说明 + \DeclareBibliographyOption{gbalign}[right]{% + \ifstrequal{##1}{right}{}{} + \ifstrequal{##1}{left}{\setalignleft}{} + \ifstrequal{##1}{gb7714-2015}{}{} + } + + % + % 选项设置 + % \ExecuteBibliographyOptions{ sorting=none, useprefix=true, %名字的信息包括前缀 - firstinits=true, %名字有缩写,参考3.1.2.3 Internal + firstinits=true, %名字有缩写,参考3.1.2.3 Internal %giveninits=true, date = year, %日期仅写到年 - maxnames = 3 , %设置名字最大数量 - minnames = 3 %设置缩减后的名字最小数量 + maxnames = 3,%设置名字最大数量 + minnames = 3 %设置缩减后的名字最小数量 %uniquename = init } } + +% +% 针对3.3<=biblatex<3.5版本的选项设置,比如texlive2016中的3.4版 +% \defversion{3.4}{opt}{ - % Alter settings that carry through from biblatex - %biblatex3.3版后(比如texlive2016中的3.4版)的使用方式 - %增加标签对齐选项,right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 - \DeclareBibliographyOption[string]{align}[right]{% + % + % 增加姓名大小写格式处理选项 + % + \DeclareBibliographyOption[string]{gbnamefmt}[uppercase]{% + %\ifstrequal{##1}{gbuppercase}{}{}% + \ifstrequal{##1}{lowercase}{\execgblowercase}{}% + \ifstrequal{##1}{none}{\execnamedefault}{} + \ifstrequal{##1}{pinyin}{\execnamepinyin}{} + } + %\ExecuteBibliographyOptions{gbnamefmt} + + % + % 增加标签对齐选项 + % + % right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 + \DeclareBibliographyOption[string]{gbalign}[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, %名字的信息包括前缀 @@ -163,25 +230,34 @@ } } + +% +% 针对3.7<=biblatex<=3.9版本的选项设置,比如texlive2017中的3.7版 +% \defversion{3.7}{opt}{ - %biblatex3.7版后(比如texlive2017中的3.7版)的使用方式 - %增加标签对齐选项,right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 - \DeclareBibliographyOption[string]{align}[right]{% + % + % 增加姓名大小写格式处理选项 + % + \DeclareBibliographyOption[string]{gbnamefmt}[uppercase]{% + %\ifstrequal{##1}{gbuppercase}{}{}% + \ifstrequal{##1}{lowercase}{\execgblowercase}{}% + \ifstrequal{##1}{none}{\execnamedefault}{} + \ifstrequal{##1}{pinyin}{\execnamepinyin}{} + } + %\ExecuteBibliographyOptions{gbnamefmt} + + % + % 增加标签对齐选项 + % + % right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 + \DeclareBibliographyOption[string]{gbalign}[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, %名字的信息包括前缀 @@ -196,25 +272,33 @@ } } +% +% 针对3.10<=biblatex版本的选项设置,比如texlive2018中的3.11版 +% \defversion{3.10}{opt}{ - %biblatex3.7版后(比如texlive2017中的3.7版)的使用方式 - %增加标签对齐选项,right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 - \DeclareBibliographyOption[string]{align}[right]{% + % + % 增加姓名大小写格式处理选项 + % + \DeclareBibliographyOption[string]{gbnamefmt}[uppercase]{% + %\ifstrequal{##1}{gbuppercase}{}{}% + \ifstrequal{##1}{lowercase}{\execgblowercase}{}% + \ifstrequal{##1}{none}{\execnamedefault}{} + \ifstrequal{##1}{pinyin}{\execnamepinyin}{} + } + %\ExecuteBibliographyOptions{gbnamefmt} + + % + % 增加标签对齐选项 + % + % right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 + \DeclareBibliographyOption[string]{gbalign}[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, %名字的信息包括前缀 @@ -229,56 +313,69 @@ } } -\iftoggle{iftlfive} - {\switchversion{3.0}{opt}}%%当采用texlive2015以下版本时,biblatex3.0 - {\iftoggle{iftlsix}% - {\switchversion{3.4}{opt}}%%当采用texlive2016版本时,biblatex3.4 - {\iftoggle{iftlnine}% - {\switchversion{3.10}{opt}}%%当采用biblatex3.10以上版本时 - {\switchversion{3.7}{opt}}%%当采用biblatex3.4以上版本时 - } - } + +% +% 根据biblatex版本信息,选择选项设置 +% +% 原理方法:如下这种选择机制能自动兼容新的版本,但对于老版本 +% 必须要把情况列全。 +\iftoggle{iftlfive}{\switchversion{3.0}{opt}}{}%biblatex<=3.2 +\iftoggle{iftlsix}{\switchversion{3.4}{opt}}{}%3.3<=biblatex<=3.6 +\iftoggle{iftlseven}{\switchversion{3.7}{opt}}{}%biblatex=3.7 +\iftoggle{iftleight}{\switchversion{3.7}{opt}}{}%3.8<=biblatex<=3.9 +\iftoggle{iftlnine}{\switchversion{3.10}{opt}}{}%biblatex=3.10 +\iftoggle{iftlatest}{\switchversion{3.10}{opt}}{}%biblatex最新3.11 %===================================================================== +% 设置本地化字符串 %===================================================================== -%设置本地化字符串 -%===================================================================== - %新建一个当地化字符串,用来记录“等”字符 + % + % 新建当地化字符串,用来记录“等”字符 + % \NewBibliographyString{andotherscn} \NewBibliographyString{noaddress} \NewBibliographyString{nopublisher} - %直接利用当地化格式english进行修改一些中文的格式,具体可以修改哪些,参考english.lbx文件 - %当然也可以增加比如上面定义的andotherscn - %注意:在lbx文件和bbx文件中定义本地字符串的不同语法,两个参数和一个参数的区别 + % + % 修改一些当地化字符串 + % + % 原理方法:直接利用当地化格式english修改出一些中文的格式,具体修改内容参考english.lbx文件 + % 当然也可以增加比如上面定义的andotherscn + % 注意:在lbx文件和bbx文件中定义本地字符串的不同语法,两个参数和一个参数的区别 \DefineBibliographyStrings{english}{ bibliography = {参考文献}, references = {参考文献}, %bytranslator= {\addcomma\ 译\adddot}, %将trans. by 改成 译 bytranslator= {\addcomma\ 译},%\addperiod and = {\addcomma},%将第2和3人名见的and符号改成 逗号,用\finalnamedelim命令也可以定义,参见3.9.1节 - %andothers = {et al.}, %将超过3个人名的省略,et al.改成为 等 - andotherscn = {等}, %将超过3个人名的省略,et al.改成为 等 + %andothers = {et al.}, %将超过3个人名的省略,et al.改成为 等 + andotherscn = {等}, %将超过3个人名的省略,et al.改成为 等 noaddress = {[S.l.]}, nopublisher = {[s.n.]}, - backrefpage = {引用页:}, - backrefpages = {引用页:}, + backrefpage = {引用页:}, + backrefpages = {引用页:}, } + %===================================================================== +% 动态数据修改,修改输入的源文件数据,用于中文判断等 %===================================================================== -%动态数据修改,修改输入的源文件数据,用于中文判断等 -%===================================================================== -%修改输入的源文件数据,用于中文判断等操作 -%首先把作者和译者信息准确的记录到userf,usere中,用于后面判断是否是cjk字符。 -%注意这里用userf,usere而不是namee,namef,是因为只有把name列表转成域,才能有效读取姓名中的字符, -%如果用namee,namef,name信息会自动解析,所以就不能为cjk判断提供需要的信息 -%注意\DeclareSourcemap命令只能出现一次 +% +% 修改输入的参考文献数据,源文件层的操作 +% +% 原理方法:增加文献标识符如[M],[J]等 +% 把作者和译者信息准确的记录到userf,usere中,用于后面判断是否是cjk字符。 +% 注意:这里用userf,usere而不是namee,namef,是因为只有把name列表转成域,才能有效读取姓名中的字符, +% 如果用namee,namef,name信息会自动解析,所以就不能为cjk判断提供需要的信息 +% 注意\DeclareSourcemap命令对于biblatex3.11以下版本只能出现一次,3.11版开始支持多个 \DeclareSourcemap{ -\maps[datatype=bibtex]{%增加文献标识符如[M],[J]等,下面首先生成这一信息 - \map{%使用下面biber动态修改bbl文件的方法是正确的 +\maps[datatype=bibtex]{% + \map[overwrite]{%用于处理zotero从cnki导出中文文献姓名中存在逗号的情况 + \step[fieldsource={author}, match=\regexp{([\x{2FF0}-\x{9FA5}])\,\s*}, replace=\regexp{$1}] + } + \map{% %\perdatasource{examples.bib} \pertype{article} \step[fieldset=usera, fieldvalue={J}] @@ -286,9 +383,9 @@ \map{ \pertype{periodical} \step[fieldset=usera, fieldvalue={J}] - \step[fieldsource=author] %有时会把author和editor混淆,这里处理后就没有这个问题 + \step[fieldsource=author] %有时会把author和editor混淆,处理后避免该问题 \step[fieldset=editor, origfieldval] - \step[fieldsource=publisher] %有时会把publisher和institution混淆,这里处理后就没有这个问题 + \step[fieldsource=publisher] %有时会把publisher和institution混淆,处理后避免该问题 \step[fieldset=institution, origfieldval] } \map{ @@ -300,7 +397,7 @@ \pertype{book} \pertype{inbook} \step[fieldset=usera, fieldvalue={M}] - \step[fieldsource=version] %有时会把version和edition混淆,这里处理后就没有这个问题,可以直接用version + \step[fieldsource=version] %有时会把version和edition混淆,处理后避免该问题,可以直接用version \step[fieldset=edition, origfieldval] } \map{ @@ -316,7 +413,7 @@ \pertype{inproceedings} \pertype{conference}%兼容老的conference类型 \step[fieldset=usera, fieldvalue={C}] - \step[fieldsource=institution] %有时会把publisher和institution混淆,这里处理后就没有这个问题 + \step[fieldsource=institution] %有时会把publisher和institution混淆,处理后避免该问题 \step[fieldset=publisher, origfieldval] \step[fieldsource=editor] % \step[fieldset=bookauthor, origfieldval] @@ -324,7 +421,7 @@ \map{ \pertype{proceedings} \step[fieldset=usera, fieldvalue={C}] - \step[fieldsource=institution] % + \step[fieldsource=institution] %有时会把publisher和institution混淆,这里处理后就没有这个问题 \step[fieldset=publisher, origfieldval] \step[fieldsource=editor] %有的时候可能只填写了编者,没有author,把它复制一下 \step[fieldset=author, origfieldval] @@ -333,7 +430,7 @@ \pertype{report} \pertype{techreport}%兼容老的techreport类型 \step[fieldset=usera, fieldvalue={R}] - \step[fieldsource=publisher] %有时会把publisher和institution混淆,这里处理后就没有这个问题 + \step[fieldsource=publisher] %有时会把publisher和institution混淆,处理后避免该问题 \step[fieldset=institution, origfieldval] } \map{ @@ -351,9 +448,9 @@ \map{ \pertype{manual} \step[fieldset=usera, fieldvalue={A}] - \step[fieldsource=edition] %有时会把version和edition混淆,这里处理后就没有这个问题,可以直接用version + \step[fieldsource=edition] %有时会把version和edition混淆,处理后避免该问题,可以直接用version \step[fieldset=version, origfieldval] - \step[fieldsource=organization]%因为用的report的驱动,所以需要institution域,也把organization转成它,这样增大兼容性 + \step[fieldsource=organization]%因为用的report的驱动,所以需要institution域,把organization转成它以增强兼容性 \step[fieldset=institution, origfieldval] } \map{ @@ -378,15 +475,15 @@ \step[fieldsource=year] \step[fieldset=date, origfieldval] } - \map{%title - \step[fieldsource={title}, match=\regexp{([^\\\{])}] + \map{%将title信息保存到userd中避免因为标签生成原因导致title域被清除 + \step[fieldsource=title, match=\regexp{([^\\\{])}]%} \step[fieldset=userd, fieldvalue={$1}] } \map{%将entrykey放入keywords中用于后期的使用 \step[fieldsource=entrykey] \step[fieldset=keywords, origfieldval] } - \map[overwrite]{%这里还必须有overwrite,怎么之前会觉得没有问题呢,可能是之前版本拷错了,还是之前是texlive2015变16后biber有了变化(2016-1207修改正确) + \map[overwrite]{%这里还必须有overwrite,注意不同版本存在差异,比如texlive2015变16后biber有变化(20161207修改正确) \step[fieldsource=note, final]%将note域信息复制给keywords,用于输出时容易区分标准和报纸 \step[fieldset=keywords, fieldvalue={,}, append] \step[fieldset=keywords, origfieldval, append] @@ -394,6 +491,11 @@ } } + +% +% 修改输入的参考文献数据,样式层的操作 +% +% 原理方法:因为biblatex3.0版的map不使用foreach选项,所以需要一个一个写,以处理特殊字符 \defversion{3.0}{map}{ \DeclareStyleSourcemap{ \maps[datatype=bibtex]{ @@ -454,6 +556,10 @@ } } +% +% 修改输入的参考文献数据,样式层的操作 +% +% 原理方法:biblatex3.4以上版本 \defversion{3.4}{map}{ \DeclareStyleSourcemap{ \maps[datatype=bibtex]{ @@ -495,31 +601,37 @@ } \iftoggle{iftlfive}% - {\switchversion{3.0}{map}}% - {\switchversion{3.4}{map}} + {\switchversion{3.0}{map}}%%当采用biblatex<=3.2版本时 + {\switchversion{3.4}{map}}%%当采用3.3<=biblatex版本时 \DeclareBibliographyAlias{newspaper}{article}%定义驱动别名,尝试以替代驱动层映射,实践表明是可行的。 %===================================================================== +% 参考文献表环境 %===================================================================== -%参考文献表环境 -%===================================================================== -%默认的参考文献列表格式,放这里作为参考 + +% +% 默认的参考文献列表格式,放这里作为参考 +% %\defbibenvironment{bibliography} -%修改序号标签格式为左对齐,注意各参考文献内容还是对齐的, -%这样就会使得序号标签与参考文献内容的间隔增大,这个问题是没有办法解决的 -%因为采用list做具有一定宽度的序号标签,\labelwidth只能设置一个,且是最宽的标签的宽度 -%但总的来说参考文献内容对齐是合理和漂亮的, -%而标签则只能对齐一个方向,要么左对齐要么右对齐,看个人选择了。 -%\DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}} %源来自numeric.BBX -%\DeclareFieldFormat{labelnumberwidth}{\ttfamily\mkbibbrackets{#1}\hfill} -%\iftoggle{alignleft}{\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}\hfill}}{}%这种方式无效是因为加载时就已经展开了。 -%修改序号标签格式为左对齐 +% +% 顺序编码制标签对齐方式处理 +% +% 原理方法:修改序号标签格式为左对齐,注意各参考文献内容还是对齐的, +% 这样就会使得序号标签与参考文献内容的间隔增大,这个问题是没有办法解决的 +% 因为采用list做具有一定宽度的序号标签,\labelwidth只能设置一个,且是最宽的标签的宽度 +% 但总的来说参考文献内容对齐是合理和漂亮的, +% 而标签则只能对齐一个方向,要么左对齐要么右对齐,看个人选择了。 +% \DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}} %源来自numeric.BBX +% \DeclareFieldFormat{labelnumberwidth}{\ttfamily\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} @@ -568,43 +680,54 @@ %===================================================================== +% 设置单元或块等的标点 %===================================================================== -%设置单元或块等的标点 -%===================================================================== -\renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY -\renewcommand*{\revsdnamepunct}{}%%来源biblatex.def +\renewrobustcmd*{\bibinithyphendelim}{\addhighpenspace}%用于处理姓名中名部分存在-的情况,比如ZHANG Yu-xin \renewcommand*{\subtitlepunct}{\addcolon\space} %修改标题和其它标题信息间的标点,来源biblatex.def, -%双语言或多语言的参考文献,可以参考3.11.5 Entry Sets,4.11.1 Entry Sets -%这里调整一下两种语言参考文献的间隔,源来自biblatex.def -%%双语之间用newline替换par(20170411 v1.0h),避免采用gb7714-2015的项对齐方式第二语言间分段导致没有缩进 +% +% 利用set实现的多语言文献不同语言间的分隔符 +% 20170411,双语之间用newline替换par,避免采用gb7714-2015的项对齐方式第二语言间分段导致没有缩进 +% +% 原理方法:set方法可以参考3.11.5 Entry Sets,4.11.1 Entry Sets +% 这里调整一下两种语言参考文献的间隔,源来自biblatex.def \renewcommand*{\entrysetpunct}{\adddot\newline\nobreak} \renewcommand*{\bibpagespunct}{\addcolon\addthinspace}%%页码引用格式的修改,修改为用冒号 %===================================================================== +% 修改域的格式,重定义域的输出宏 %===================================================================== -%修改域的格式,重定义域的输出宏 -%===================================================================== -%新增文献类型标识符的格式 +% +% 新增文献类型标识符的格式 +% \DeclareFieldFormat{gbtypeflag}{% \iftoggle{bbx:url}{\iffieldundef{url}%当存在url时,增加一个OL标识符 {\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}% {\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}% }{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}} +% +% 新增用于报纸的文献类型标识符的格式 +% \DeclareFieldFormat{gbtypeflagn}{%用于报纸newspaper \iftoggle{bbx:url}{\iffieldundef{url}%当存在url时,增加一个OL标识符 {\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}% {\nobreak\printtext{[}\nobreak N\printtext{\texttt{/}OL]}\nobreak}% }{\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}} +% +% 新增用于标准的文献类型标识符的格式 +% \DeclareFieldFormat{gbtypeflags}{%用于标准standard \iftoggle{bbx:url}{\iffieldundef{url}%当存在url时,增加一个OL标识符 {\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}% {\nobreak\printtext{[}\nobreak S\printtext{\texttt{/}OL]}\nobreak}% }{\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}} -%重设title的输出格式,不加emph,原格式来自biblatex.def文件 +% +% 重设title等参考文献信息的输出格式 +% +% 原理方法:修改来自biblatex.def文件的原格式 \DeclareFieldFormat{title}{#1\adddot\addthinspace}% \DeclareFieldFormat{journaltitle}{#1\isdot} \DeclareFieldFormat{issuetitle}{#1} @@ -615,12 +738,43 @@ {title}{#1\adddot\addthinspace}%\mkbibquote{#1\isdot} \DeclareFieldFormat%将期刊等文献的标题中原来带的引号去掉 [inbook,incollection,inproceedings] - {title}{#1\nopunct\unspace}% + {title}{#1\nopunct\unspace} \DeclareFieldFormat{url}{\url{#1}} %%url相关输出,url域修改如本行,源来自biblatex.def +% +% 标题的字母大小写格式修改 +% +% 注意:修改标题的字母大小写,不同用前面的title的格式而要用titlecase +% 因为titlecase is applied to the contents of the field directly,title is not \DeclareFieldFormat{titlecase}{\MakeCapital#1}%重设标题格式,将其修改为首字母大写 \DeclareFieldFormat{pages}{#1}%去掉前面引导页码的pp.等字符,\mkpageprefix[bookpagination]{#1} +\DefineBibliographyExtras{english}{\renewcommand*{\bibrangedash}{-}}%将页码间隔符替换会英文的短横线 + +% +% 文献标题后的标点问题 +% 20180405,v1.0k,为texlive2017以上版本中的beamer兼容性做的处理,Hu Zhenzhen +% +% 原理方法:如下代码处理texlive2017以上版本中,beamer中文献的标题后出现两个点的情况: +% texlive2017以上的beamer中对macro{title}做了patch,正常情况下不会出现两个点的情况,但由于 +% 之前为了处理texlive2015,2016下的title格式添加了adddot,导致出现两个点的情况,而且也影响 +% 析出文献的//符号的输出,因此再次对macro{title}做patch消除beamer中做apptocmd时添加的\newunitpunct +\ifboolexpr{% + test{\iftoggle{iftlfive}} + or + test{\iftoggle{iftlsix}} + }{}% + {%texlive 2017对应iftlseven以上版本 + \DeclareFieldFormat{title}{#1}% + \DeclareFieldFormat[article,patent,thesis,unpublished]{title}{#1} + \AtBeginDocument{% + \@ifclassloaded{beamer} + {\patchcmd{\abx@macro@title}{\newunitpunct}{}{}{}}{}} + } -%修改译者位置格式,bytranslator+others原格式来自biblatex.def文件 + +% +% 修改译者位置格式 +% +% 原理方法:修改来自biblatex.def文件的bytranslator+others宏的格式 \renewbibmacro*{bytranslator+others}{% \ifnameundef{translator} {} @@ -633,11 +787,15 @@ \newunit}% \usebibmacro{withothers}} -%下面一段没有作用,但从中可以看到当地化字符串格式的引用前的代码处理 -%比如生成cotranslator等用于调用cotranslator所代表的当地化字符串 +% +% 下面一段没有用,但从中可以看到当地化字符串格式的引用前的代码处理 +% 比如生成cotranslator等用于调用cotranslator所代表的当地化字符串 %\renewbibmacro*{bytranslator+othersstrg}{% -%判断作者或译者是否中文,若中文用字符等,否则用etcl。 +% +% 修改作者数量超过限定值,做省略时的处理格式 +% +% 原理方法:判断作者或译者是否中文,若中文用字符等,否则用etcl。 \renewbibmacro*{name:andothers}{% \ifboolexpr{% test {\ifnumequal{\value{listcount}}{\value{liststop}}} @@ -655,11 +813,16 @@ }% {}} -%重设title的输出,将文献类型标识符输出出去,原输出来自biblatex.def文件 + +% +% 重设title的输出 +% +% 原理方法:将文献类型标识符输出出去,原输出来自biblatex.def文件 +% 利用toggle做标识符是否输出的判断 \renewbibmacro*{title}{% \ifboolexpr{% test{\iffieldundef{title}}% - and% + and test{\iffieldundef{subtitle}}% }% {}% @@ -670,18 +833,24 @@ \printfield[titlecase]{subtitle}}% \iffieldundef{titleaddon}{}%判断一下titleaddon,否则直接加可能多一个空格 {\setunit{\subtitlepunct}\printfield{titleaddon}}% + \iftoggle{bbx:gbtype}{% \iffieldundef{note}{\printfield[gbtypeflag]{usera}}%在标题后直接给出文献标识字母,判断一下,是否是报纸和标准 {\iffieldequalstr{note}{standard}{\printfield[gbtypeflags]{usera}}%判断是否为标准 {\iffieldequalstr{note}{news}{\printfield[gbtypeflagn]{usera}}%判断是否为报纸 {\printfield[gbtypeflag]{usera}}}%其它 - }% + }}{}% %\iffieldundef{booktitle}{\newunit}{}%当title是析出时,不要标点 %\newunit - }% }% -} +}} +% +% 作者信息的输出格式,针对biblatex<3.3版本,gbt7714-2015的姓名全大写格式 +% \defversion{3.0}{name}{ + \renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY + %\renewrobustcmd*{\bibinithyphendelim}{\addnbspace}%biblatex.STY,名中间带-符号的情况下的首字母缩写中间的分隔符 + \renewcommand*{\revsdnamepunct}{}%%来源biblatex.def %biblatex3.3版前(比如texlive2015中的3.0版)的使用方式 \renewbibmacro*{name:last-first}[4]{% \ifuseprefix @@ -717,7 +886,13 @@ \usebibmacro{name:last-first}{##1}{##2}{##3}{##4}} } +% +% 作者信息的输出格式,针对biblatex>=3.3版本,gbt7714-2015的姓名全大写格式 +% \defversion{3.4}{name}{ + \renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY + %\renewrobustcmd*{\bibinithyphendelim}{\addnbspace}%biblatex.STY,名中间带-符号的情况下的首字母缩写中间的分隔符 + \renewcommand*{\revsdnamepunct}{}%%来源biblatex.def %biblatex3.3版后(比如texlive2016中的3.4版)的使用方式 \renewbibmacro*{name:given-family}[4]{%用family-given修改后的内容定义given-family \ifuseprefix @@ -728,12 +903,12 @@ {\mkbibnameprefix{\MakeCapital{##3}}\isdot} {\mkbibnameprefix{##3}\isdot}% \ifprefchar{}{\bibnamedelimc}}% - \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{\MakeUppercase{##1}}}\isdot + \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{\MakeUppercase{##1}}}\isdot% \ifdefvoid{##2}{}{\revsdnamepunct\bibnamedelimd\mkbibnamegiven{\MakeUppercase{##2}}\isdot}%\MakeCapital \ifdefvoid{##4}{}{\bibnamedelimd\mkbibnamesuffix{##4}\isdot}} {\usebibmacro{name:delim}{##1}% \usebibmacro{name:hook}{##1}% - \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{\MakeUppercase{##1}}}\isdot + \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{\MakeUppercase{##1}}}\isdot% % \ifboolexpe{% test {\ifdefvoid{##2}} @@ -749,10 +924,277 @@ \usebibmacro{name:given-family}{##1}{##2}{##3}{##4}} } +% +% 作者信息的输出格式,针对biblatex<3.3版本,姓名大小写格式不变 +% +\defversion{3.0}{nameb}{ + \renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY + %\renewrobustcmd*{\bibinithyphendelim}{\addnbspace}%biblatex.STY,名中间带-符号的情况下的首字母缩写中间的分隔符 + \renewcommand*{\revsdnamepunct}{}%%来源biblatex.def + %biblatex3.3版前(比如texlive2015中的3.0版)的使用方式 + \renewbibmacro*{name:last-first}[4]{% + \ifuseprefix + {\usebibmacro{name:delim}{##3##1}% + \usebibmacro{name:hook}{##3##1}% + \ifblank{##3}{}{% + \ifcapital + {\mkbibnameprefix{\MakeCapital{##3}}\isdot} + {\mkbibnameprefix{##3}\isdot}% + \ifpunctmark{'}{}{\bibnamedelimc}}% + %\mkbibnamelast{#1}\isdot + \ifblank{##2}{\MakeCapital##1}{\mkbibnamelast{{##1}}}\isdot%\MakeUppercase %\mkbibnamelast{\MakeUppercase{#1}} %\MakeSentenceCase + %注意上一句\MakeCapital后面如果再跟一个{}包含#1,则没有效果,可能是包在里面少了一层展开 + %因为机构名通常包括在{}内,所以要多展开一次才行,所以这里去掉#1外面的{} + %\mkbibnamelast{\MakeUppercase{#1}}\isdot + %\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%这句放到后面 + \ifblank{##2}{}{\revsdnamepunct\bibnamedelimd\mkbibnamefirst{{##2}}\isdot}% + \ifblank{##4}{}{\addcomma\addspace\bibnamedelimd\mkbibnameaffix{##4}\isdot}} + {\usebibmacro{name:delim}{##1}% + \usebibmacro{name:hook}{##1}% + %\mkbibnamelast{#1}\isdot %3.9.1 Generic Commands and Hooks,对姓重新处理,如下句: %\mkbibnamelast{\MakeUppercase{#1}} + \ifblank{##2}{\MakeCapital##1}{\mkbibnamelast{{##1}}}\isdot %大写,参考4.6.4 Miscellaneous Commands,\MakeUppercase %\MakeSentenceCase + %\mkbibnamelast{\MakeUppercase{#1}}\isdot + %\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%这句放到后面 + \ifblank{##2##3}{}{\revsdnamepunct}% + \ifblank{##2}{}{\bibnamedelimd\mkbibnamefirst{{##2}}\isdot}% + \ifblank{##3}{}{\bibnamedelimd\mkbibnameprefix{##3}\isdot}% + \addcomma\addspace% + \ifblank{##4}{}{\addcomma\addspace\bibnamedelimd\mkbibnameaffix{##4}\isdot}% + } + } + \renewbibmacro*{name:first-last}[4]{% + \usebibmacro{name:last-first}{##1}{##2}{##3}{##4}} +} + +% +% 作者信息的输出格式,针对biblatex>=3.3版本,姓名大小写格式不变 +% +\defversion{3.4}{nameb}{ + \renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY + %\renewrobustcmd*{\bibinithyphendelim}{\addnbspace}%biblatex.STY,名中间带-符号的情况下的首字母缩写中间的分隔符 + \renewcommand*{\revsdnamepunct}{}%%来源biblatex.def + %biblatex3.3版后(比如texlive2016中的3.4版)的使用方式 + \renewbibmacro*{name:given-family}[4]{%用family-given修改后的内容定义given-family + \ifuseprefix + {\usebibmacro{name:delim}{##3##1}% + \usebibmacro{name:hook}{##3##1}% + \ifdefvoid{##3}{}{% + \ifcapital + {\mkbibnameprefix{\MakeCapital{##3}}\isdot} + {\mkbibnameprefix{##3}\isdot}% + \ifprefchar{}{\bibnamedelimc}}% + \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{{##1}}}\isdot% + \ifdefvoid{##2}{}{\revsdnamepunct\bibnamedelimd\mkbibnamegiven{{##2}}\isdot}%\MakeCapital + \ifdefvoid{##4}{}{\bibnamedelimd\mkbibnamesuffix{##4}\isdot}} + {\usebibmacro{name:delim}{##1}% + \usebibmacro{name:hook}{##1}% + \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{{##1}}}\isdot% + % + \ifboolexpe{% + test {\ifdefvoid{##2}} + and + test {\ifdefvoid{##3}}} + {} + {\revsdnamepunct}% + \ifdefvoid{##2}{}{\bibnamedelimd\mkbibnamegiven{{##2}}\isdot}%\MakeCapital + \ifdefvoid{##3}{}{\bibnamedelimd\mkbibnameprefix{##3}\isdot} + \ifdefvoid{##4}{}{\bibnamedelimd\mkbibnamesuffix{##4}\isdot}} + } + \renewbibmacro*{name:family-given}[4]{% + \usebibmacro{name:given-family}{##1}{##2}{##3}{##4}} +} + +% +% 作者信息的输出格式,针对biblatex<3.3版本,姓名大小写格式采用标准样式 +% +\defversion{3.0}{namec}{ + \renewrobustcmd*{\bibinitperiod}{\adddot} + \renewrobustcmd*{\bibinithyphendelim}{\adddot\addnbspace}%biblatex.STY,名中间带-符号的情况下的首字母缩写中间的分隔符 + \renewcommand*{\revsdnamepunct}{\addcomma} + %biblatex3.3版前(比如texlive2015中的3.0版)的使用方式 + \renewbibmacro*{name:last-first}[4]{% + \ifuseprefix + {\usebibmacro{name:delim}{##3##1}% + \usebibmacro{name:hook}{##3##1}% + \ifblank{##3}{}{% + \ifcapital + {\mkbibnameprefix{\MakeCapital{##3}}\isdot} + {\mkbibnameprefix{##3}\isdot}% + \ifpunctmark{'}{}{\bibnamedelimc}}% + \mkbibnamelast{##1}\isdot + \ifblank{##4}{}{\bibnamedelimd\mkbibnameaffix{##4}\isdot}%这句放到后面 + \ifblank{##2}{}{\revsdnamepunct\bibnamedelimd\mkbibnamefirst{{##2}}\isdot}} + {\usebibmacro{name:delim}{##1}% + \usebibmacro{name:hook}{##1}% + \mkbibnamelast{##1}\isdot %3.9.1 Generic Commands and Hooks,对姓重新处理,如下句: %\mkbibnamelast{\MakeUppercase{#1}} + \ifblank{##4}{}{\bibnamedelimd\mkbibnameaffix{##4}\isdot}%这句放到后面 + \ifblank{##2##3}{}{\revsdnamepunct}% + \ifblank{##2}{}{\bibnamedelimd\mkbibnamefirst{{##2}}\isdot}% + \ifblank{##3}{}{\bibnamedelimd\mkbibnameprefix{##3}\isdot}% + } + } + \renewbibmacro*{name:first-last}[4]{% + \usebibmacro{name:last-first}{##1}{##2}{##3}{##4}} +} + +% +% 作者信息的输出格式,针对biblatex>=3.3版本,姓名大小写格式采用标准样式 +% +\defversion{3.4}{namec}{ + \renewrobustcmd*{\bibinitperiod}{\adddot} + \renewrobustcmd*{\bibinithyphendelim}{\adddot\addnbspace}%biblatex.STY,名中间带-符号的情况下的首字母缩写中间的分隔符 + \renewcommand*{\revsdnamepunct}{\addcomma} + \renewbibmacro*{name:given-family}[4]{% + \usebibmacro{name:delim}{##2##3##1}% + \usebibmacro{name:hook}{##2##3##1}% + \ifdefvoid{##2}{}{\mkbibnamegiven{##2}\isdot\bibnamedelimd}% + \ifdefvoid{##3}{}{% + \mkbibnameprefix{##3}\isdot + \ifprefchar + {} + {\ifuseprefix{\bibnamedelimc}{\bibnamedelimd}}}% + \mkbibnamefamily{##1}\isdot + \ifdefvoid{##4}{}{\bibnamedelimd\mkbibnamesuffix{##4}\isdot}} + \DeclareNameAlias{family-given}{default} + + \renewbibmacro*{name:family-given}[4]{% + \usebibmacro{name:given-family}{##1}{##2}{##3}{##4}} +} + +% +% 作者信息的输出格式,针对biblatex<3.3版本,姓名大小写格式采用拼音样式 +% +\defversion{3.0}{named}{ + \renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY + \renewcommand*{\revsdnamepunct}{}%%来源biblatex.def + \renewrobustcmd*{\bibnamedelima}{\mbox{-}} + + \DeclareNameFormat{first-last}{% + \usebibmacro{name:first-last}{##1}{##3}{##5}{##7}% + \usebibmacro{name:andothers}} + + %biblatex3.3版前(比如texlive2015中的3.0版)的使用方式 + \renewbibmacro*{name:last-first}[4]{% + \ifuseprefix + {\usebibmacro{name:delim}{##3##1}% + \usebibmacro{name:hook}{##3##1}% + \ifblank{##3}{}{% + \ifcapital + {\mkbibnameprefix{\MakeCapital{##3}}\isdot} + {\mkbibnameprefix{##3}\isdot}% + \ifpunctmark{'}{}{\bibnamedelimc}}% + %\mkbibnamelast{#1}\isdot + \ifblank{##2}{\MakeCapital##1}{\mkbibnamelast{\MakeUppercase{##1}}}\isdot%\MakeUppercase %\mkbibnamelast{\MakeUppercase{#1}} %\MakeSentenceCase + %注意上一句\MakeCapital后面如果再跟一个{}包含#1,则没有效果,可能是包在里面少了一层展开 + %因为机构名通常包括在{}内,所以要多展开一次才行,所以这里去掉#1外面的{} + %\mkbibnamelast{\MakeUppercase{#1}}\isdot + %\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%这句放到后面 + \ifblank{##2}{}{\revsdnamepunct\bibnamedelimd\MakeSentenceCase{\mkbibnamefirst{##2}}\isdot}% + \ifblank{##4}{}{\addcomma\addspace\bibnamedelimd\mkbibnameaffix{##4}\isdot}} + {\usebibmacro{name:delim}{##1}% + \usebibmacro{name:hook}{##1}% + %\mkbibnamelast{#1}\isdot %3.9.1 Generic Commands and Hooks,对姓重新处理,如下句: %\mkbibnamelast{\MakeUppercase{#1}} + \ifblank{##2}{\MakeCapital##1}{\mkbibnamelast{\MakeUppercase{##1}}}\isdot %大写,参考4.6.4 Miscellaneous Commands,\MakeUppercase %\MakeSentenceCase + %\mkbibnamelast{\MakeUppercase{#1}}\isdot + %\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%这句放到后面 + \ifblank{##2##3}{}{\revsdnamepunct}% + \ifblank{##2}{}{\bibnamedelimd\mkbibnamefirst{\MakeUppercase{##2}}\isdot}% + \ifblank{##3}{}{\bibnamedelimd\mkbibnameprefix{##3}\isdot}% + \addcomma\addspace% + \ifblank{##4}{}{\addcomma\addspace\bibnamedelimd\mkbibnameaffix{##4}\isdot}% + } + } + \renewbibmacro*{name:first-last}[4]{% + \usebibmacro{name:last-first}{##1}{##2}{##3}{##4}} +} + +% +% 作者信息的输出格式,针对biblatex>=3.3版本,姓名大小写格式采用拼音样式 +% +\defversion{3.4}{named}{ + \renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY + \renewcommand*{\revsdnamepunct}{}%%来源biblatex.def + \renewrobustcmd*{\bibnamedelima}{\mbox{-}} + + \DeclareNameFormat{given-family}{% + {\usebibmacro{name:given-family} + {\namepartfamily} + {\namepartgiven}%用全名而不是首字母缩写 + {\namepartprefix} + {\namepartsuffix}}% + \usebibmacro{name:andothers}} + + %biblatex3.3版后(比如texlive2016中的3.4版)的使用方式 + \renewbibmacro*{name:given-family}[4]{%用family-given修改后的内容定义given-family + \ifuseprefix + {\usebibmacro{name:delim}{##3##1}% + \usebibmacro{name:hook}{##3##1}% + \ifdefvoid{##3}{}{% + \ifcapital + {\mkbibnameprefix{\MakeCapital{##3}}\isdot} + {\mkbibnameprefix{##3}\isdot}% + \ifprefchar{}{\bibnamedelimc}}% + \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{\MakeUppercase{##1}}}\isdot% + \ifdefvoid{##2}{}{\revsdnamepunct\bibnamedelimd\MakeSentenceCase{\mkbibnamegiven{##2}}\isdot}%\MakeCapital + \ifdefvoid{##4}{}{\bibnamedelimd\mkbibnamesuffix{##4}\isdot}} + {\usebibmacro{name:delim}{##1}% + \usebibmacro{name:hook}{##1}% + \ifdefvoid{##2}{\mkbibnamefamily{\MakeCapital{##1}}}{\mkbibnamefamily{\MakeUppercase{##1}}}\isdot% + % + \ifboolexpe{% + test {\ifdefvoid{##2}} + and + test {\ifdefvoid{##3}}} + {} + {\revsdnamepunct}% + \ifdefvoid{##2}{}{\bibnamedelimd\mkbibnamegiven{\MakeCapital{##2}}\isdot}%\MakeCapital + \ifdefvoid{##3}{}{\bibnamedelimd\mkbibnameprefix{##3}\isdot} + \ifdefvoid{##4}{}{\bibnamedelimd\mkbibnamesuffix{##4}\isdot}} + } + \renewbibmacro*{name:family-given}[4]{% + \usebibmacro{name:given-family}{##1}{##2}{##3}{##4}} +} + +% +% 根据姓名格式控制选项做处理 +% +\iftoggle{iftlfive}%根据texlive/biblatex版本选择 + {%%当采用biblatex<=3.3版本时 + \switchversion{3.0}{name} + }{%%当采用3.3<=biblatex版本时 + \switchversion{3.4}{name} + } +% +\def\execnamedefault{ +\iftoggle{iftlfive}%根据texlive/biblatex版本选择 + {%%当采用biblatex<=3.3版本时 + \switchversion{3.0}{namec} + }{%%当采用3.3<=biblatex版本时 + \switchversion{3.4}{namec} + } +} +% +\def\execgblowercase{ +\iftoggle{iftlfive}%根据texlive/biblatex版本选择 + {%%当采用biblatex<=3.3版本时 + \switchversion{3.0}{nameb} + }{%%当采用3.3<=biblatex版本时 + \switchversion{3.4}{nameb} + } +} +% +\def\execnamepinyin{ \iftoggle{iftlfive}%根据texlive/biblatex版本选择 - {\switchversion{3.0}{name}}% - {\switchversion{3.4}{name}} + {%%当采用biblatex<=3.3版本时 + \switchversion{3.0}{named} + }{%%当采用3.3<=biblatex版本时 + \switchversion{3.4}{named} + }} + +% +% url和url日期信息的输出格式 +% \renewbibmacro*{url+urldate}{% %\usebibmacro{url}%%更换url的位置,放到下面 \iffieldundef{urlyear}% @@ -762,6 +1204,10 @@ \usebibmacro{url}} \renewbibmacro*{url}{\printfield{url}} + +% +% 日期信息的输出格式,针对biblatex<3.7版本 +% \defversion{3.4}{date}{ \renewbibmacro*{urldate}{% \addthinspace\printtext{[}\printfield{urlyear}% @@ -797,13 +1243,23 @@ }% } +% +% 日期信息的输出格式,针对3.9>=biblatex>=3.7版本 +% \defversion{3.7}{date}{ \DeclareFieldFormat{urldate}{##1} \renewbibmacro*{urldate}{% \addthinspace\printtext{[}\printurldate\printtext{]}}%能用高层命令+选项尽量用命令(比如这里的\printurldate),而不用\blx@edtfdate这种更底层的命令 - \newbibmacro*{newsdate}{%%新增加一个新闻日期 - \blx@edtfdate{}{}% + % + % 专利的公告日期、或报纸的日期的输出宏 + % 20160701,v1.0,新增加 + % 20180405,v1.0k,为biblatexv3.7-3.9版本,出现多出点bug做处理,Hu Zhenzhen + % + % 原理方法:加上printtext避免破坏异步标点机制 + % + \newbibmacro*{newsdate}{% + \printtext{\blx@edtfdate{}{}}% } \newbibmacro*{modifydate}{%新增加一个带括号的日期,用于表示电子资源的更新和修改日期,而公告日期则按日期格式 @@ -816,13 +1272,23 @@ }% } +% +% 日期信息的输出格式,针对biblatex>=3.10版本 +% \defversion{3.10}{date}{ \DeclareFieldFormat{urldate}{##1} \renewbibmacro*{urldate}{% \addthinspace\printtext{[}\printurldate\printtext{]}}%能用高层命令+选项尽量用命令(比如这里的\printurldate),而不用\blx@edtfdate这种更底层的命令 - \newbibmacro*{newsdate}{%%新增加一个新闻日期 - \blx@isodate{}{}% + % + % 专利的公告日期、或报纸的日期的输出宏 + % 20160701,v1.0,新增加 + % 20180405,为biblatexv3.10版本,出现多出点bug做处理,Hu Zhenzhen + % + % 原理方法:加上printtext避免破坏异步标点机制 + % + \newbibmacro*{newsdate}{%% + \printtext{\blx@isodate{}{}}%% } \newbibmacro*{modifydate}{%新增加一个带括号的日期,用于表示电子资源的更新和修改日期,而公告日期则按日期格式 @@ -835,6 +1301,9 @@ }% } +% +% biblatex>v3.8版利用related实现双语文献的处理 +% \defversion{3.8}{dblang}{ %为了实现v3.8以上版本的双语文献,采用related的方法代替set方法,因为set方法已经无法实现了, %因为set不再复制其第一个成员的信息。于是定义一个命令,用于动态的修改数据,即添加related域的信息 @@ -853,26 +1322,21 @@ } } -\iftoggle{iftlfive}%%根据texlive/biblatex版本选择 - {\switchversion{3.4}{date}}% - {\iftoggle{iftlsix}% - {\switchversion{3.4}{date}}% - {\iftoggle{iftlnine}% - {\switchversion{3.10}{date}}%biblatex3.10版 - {\switchversion{3.7}{date}}% - }% - } - -\iftoggle{iftlnine} - {\switchversion{3.8}{dblang}} - {\iftoggle{iftleight} - {\switchversion{3.8}{dblang}} - {} - } - -\renewcommand{\relateddelim}{\adddot\newline\nobreak}%\par - -\renewbibmacro*{related}{% +% +% 关联文献间的分隔符 +% +\renewcommand{\relateddelim}{\adddot\newline\nobreak}%\par,而作者年样式不需要修改,因为没有项对齐的标签问题 + +% +% 关联文献的输出格式,针对3.9>=biblatex>=3.7版本 +% +% 原理方法:因为related宏中带有##了,所以无法封装到defversion中了。所以直接做判断 +% 下面这一段主要针对v3.8-3.10,因为我提问后,biblatex作者为3.11版增加了一个钩子控制relatedblock前的分隔符。 +\ifboolexpr{ +test{\iftoggle{iftleight}} +or +test{\iftoggle{iftlnine}} +}{\renewbibmacro*{related}{%standard.bbx \ifboolexpr{ test {\iffieldundef{related}} or test {\ifrelatedloop} } {} {\usebibmacro{begrelated}% @@ -894,7 +1358,7 @@ \setcounter{bbx:relatedcount}{0}% \def\do{% \stepcounter{bbx:relatedcount}% - \ifnumgreater{\value{bbx:relatedcount}}{0} + \ifnumgreater{\value{bbx:relatedcount}}{0}%这里从1改为0 {\ifcsundef{relateddelim\strfield{relatedtype}} {\printtext{\relateddelim}} {\printtext{\csuse{relateddelim\strfield{relatedtype}}}}} @@ -930,9 +1394,27 @@ \usebibmacro{endrelatedloop}}}% {}% \usebibmacro{endrelated}}} +}{} + +% +% 关联文献块前的分隔符,针对biblatex>3.11 +% +% 原理方法:因为增加了begrelateddelim钩子,所以不需要重定义related输出宏 +\defversion{3.11}{related}{ +\renewcommand{\begrelateddelim}{\adddot\newline\nobreak} +} -%调整doi+eprint+url格式,源来自standard.bbx -%因为页码后面直接跟引用日期,没有标点所以去掉其中的标点。 +\iftoggle{iftlfive}{\switchversion{3.4}{date}}{}%biblatex<=3.2 +\iftoggle{iftlsix}{\switchversion{3.4}{date}}{}%3.3<=biblatex<=3.6 +\iftoggle{iftlseven}{\switchversion{3.7}{date}}{}%biblatex=3.7 +\iftoggle{iftleight}{\switchversion{3.7}{date}\switchversion{3.8}{dblang}}{}%3.8<=biblatex<=3.9 +\iftoggle{iftlnine}{\switchversion{3.10}{date}\switchversion{3.8}{dblang}}{}%biblatex=3.10 +\iftoggle{iftlatest}{\switchversion{3.10}{date}\switchversion{3.8}{dblang}\switchversion{3.11}{related}}{}%biblatex最新3.11 + +% +% 调整doi+eprint+url格式 +% +% 原理方法:源来自standard.bbx,因为页码后面直接跟引用日期,没有标点所以去掉其中的标点。 \renewbibmacro*{doi+eprint+url}{% % \iftoggle{bbx:doi}%把doi的位置放到url后面 % {\printfield{doi}} @@ -950,6 +1432,9 @@ {\printfield{doi}} {}} +% +% 调整页码的格式,即chapter+pages格式 +% \renewbibmacro*{chapter+pages}{% \printfield{chapter}% \iffieldundef{pages}{}{%这里增加一个判断,当没有页码时就不输出 @@ -958,10 +1443,12 @@ %\newunit %这里的标点去掉 } -%出版社和地址的处理 -%当没有出版社地址时,直接判断title的信息是否是中文,若为中文,则写出版地不详,否则用英文的字符表示。 -%事实上title对于每个文献来说是必须的,所以用它判断是最快的,而且一般标题和出版社的语言是一样的。 -%新增一个样式用于输出连续出版物的地址,单位,时间,%类似\newbibmacro*{publisher+location+date} +% +% 出版社和地址的处理 +% +% 原理方法:当没有出版社地址时,直接判断title的信息是否是中文,若为中文,则写出版地不详,否则用英文的字符表示。 +% 事实上title对于每个文献来说是必须的,所以用它判断是最快的,而且一般标题和出版社的语言是一样的。 +% 新增一个样式用于输出连续出版物的地址,单位,时间,%类似\newbibmacro*{publisher+location+date} \newbibmacro*{location+institution+date}{% \iftoggle{bbx:gbpub}% {\testCJKfirst{\thefield{userd}} @@ -991,7 +1478,8 @@ \usebibmacro{date}% \newunit}% } - +% +% \renewbibmacro*{publisher+location+date}{% \iftoggle{bbx:gbpub}% {\testCJKfirst{\thefield{userd}}% @@ -1022,8 +1510,10 @@ }% } -%对edition版本信息做出修改,源来自biblatex.DEF -\DeclareFieldFormat{edition}{% +% +% 对edition版本信息格式做出修改 +% +\DeclareFieldFormat{edition}{%源来自biblatex.DEF \testCJKfirst{\thefield{userd}}% \iftoggle{ifCJKforgbt}% {\ifinteger{#1}% @@ -1033,16 +1523,41 @@ {\mkbibordedition{#1}~\bibstring{edition}}% {#1\isdot}}} -%对version的版本信息做出修改,源来自biblatex.DEF -\DeclareFieldFormat{version}{% +% +% 对version的版本信息做出修改 +% +\DeclareFieldFormat{version}{%源来自biblatex.DEF \testCJKfirst{\thefield{userd}}% \ifinteger{#1}% {\iftoggle{ifCJKforgbt}{\printtext{#1版}}% {\mkbibordedition{#1}~\bibstring{version}}}% {#1\isdot}} -%调整期刊名的格式,源来自standard.bbx -\renewbibmacro*{journal+issuetitle}{% + + +% +% 修改析出文献的文集的标题与附加标题间的符号 +% +\renewbibmacro*{booktitle}{% + \ifboolexpr{ + test {\iffieldundef{booktitle}} + and + test {\iffieldundef{booksubtitle}} + } + {} + {\printtext[booktitle]{% + \printfield[titlecase]{booktitle}% + \setunit{\subtitlepunct}% + \printfield[titlecase]{booksubtitle}}% + \newunit%标点换成下一句 + \setunit{\subtitlepunct}}% + \printfield{booktitleaddon}} + + +% +% 调整期刊名的格式 +% +\renewbibmacro*{journal+issuetitle}{%源来自standard.bbx \usebibmacro{journal}% %\setunit*{\addspace}% \setunit*{\addcomma\addspace}%修改为增加一个逗号 @@ -1062,8 +1577,10 @@ %\newunit } -%调整期刊年份的格式,去掉括号 -\renewbibmacro*{issue+date}{% +% +% 调整期刊年份的格式 +% +\renewbibmacro*{issue+date}{%去掉括号 \printtext{%去掉了[parens] \iffieldundef{issue} {%\usebibmacro{date} @@ -1081,8 +1598,10 @@ %\newunit } -%调整期刊卷和期的格式,源来自standard.bbx -\renewbibmacro*{volume+number+eid}{% +% +% 调整期刊卷和期的格式 +% +\renewbibmacro*{volume+number+eid}{%源来自standard.bbx \printfield{volume}% %\setunit*{\adddot}%去掉点号 %\printfield{number}% @@ -1091,8 +1610,10 @@ \setunit{\addcomma\space}% \printfield{eid}}} -%调整页码前的标点和去掉期刊文章等页码后面的标点,源来自standard.bbx -\renewbibmacro*{note+pages}{% +% +% 调整页码前的标点和去掉期刊文章等页码后面的标点 +% +\renewbibmacro*{note+pages}{%源来自standard.bbx %\printfield{note}%不要note,note用来判断是否是报纸newspaper \iffieldundef{pages}{}{ \setunit{\bibpagespunct}% @@ -1100,24 +1621,11 @@ %\newunit } -%修改析出文献的文集的标题与附加标题间的符号 -\renewbibmacro*{booktitle}{% - \ifboolexpr{ - test {\iffieldundef{booktitle}} - and - test {\iffieldundef{booksubtitle}} - } - {} - {\printtext[booktitle]{% - \printfield[titlecase]{booktitle}% - \setunit{\subtitlepunct}% - \printfield[titlecase]{booksubtitle}}% - \newunit%标点换成下一句 - \setunit{\subtitlepunct}}% - \printfield{booktitleaddon}} -%编者的符号修改一下,源来自biblatex.DEF -\renewbibmacro*{editor}{% +% +% 编者的符号修改一下 +% +\renewbibmacro*{editor}{%源来自biblatex.DEF \ifboolexpr{ test \ifuseeditor and @@ -1131,8 +1639,10 @@ \clearname{editor}} {}} -%编者类型做一修改,源来自biblatex.DEF -\renewbibmacro*{editorstrg}{% +% +% 编者类型做一修改 +% +\renewbibmacro*{editorstrg}{%源来自biblatex.DEF \printtext[editortype]{% \iffieldundef{editortype} { @@ -1154,8 +1664,10 @@ {\bibstring{\thefield{editortype}}}} {\thefield{editortype}}}}} -%修改期刊的标题,源来自biblatex.DEF -\renewbibmacro*{periodical}{% +% +% 修改期刊的标题 +% +\renewbibmacro*{periodical}{%源来自biblatex.DEF \iffieldundef{title} {} {\printtext[title]{% @@ -1165,14 +1677,16 @@ {}{\setunit{\subtitlepunct} \printfield[titlecase]{subtitle}}% % - \iffieldundef{usera}{}{%在标题后直接给出文献标识字母 - \printfield[gbtypeflag]{usera}} + %\iffieldundef{usera}{}{}%在标题后直接给出文献标识字母 + \iftoggle{bbx:gbtype}{\printfield[gbtypeflag]{usera}}{}% }%把编组结束移到这里 }% } -%期刊的标题做修改,源来自standard.BBX -\renewbibmacro*{title+issuetitle}{% +% +% 期刊的标题做修改 +% +\renewbibmacro*{title+issuetitle}{%源来自standard.BBX \usebibmacro{periodical}% %\setunit*{\addspace}% \setunit*{\adddot\addspace}%标点修改为句点 @@ -1210,7 +1724,9 @@ \usebibmacro{issue}% \newunit} -%新增一个样式用于调整期刊年份的格式,只打印年份 +% +% 新增一个样式用于调整期刊年份的格式,只打印年份 +% \newbibmacro*{periodical+issue}{% \printtext{%去掉了[parens] \iffieldundef{issue} @@ -1224,8 +1740,10 @@ %\newunit } -%重设专利title的输出,将文献类型标识符输出出去,原输出来自biblatex.def文件 -\newbibmacro*{patenttitle}{% +% +% 重设专利title的输出,将文献类型标识符输出出去 +% +\newbibmacro*{patenttitle}{%原输出来自biblatex.def文件 \ifboolexpr{% test{\iffieldundef{title}}% and% @@ -1240,15 +1758,17 @@ \iffieldundef{titleaddon}{}%判断一下titleaddon,否则直接加可能多一个空格 {\setunit{\subtitlepunct}\printfield{titleaddon}}% \setunit{\subtitlepunct}\printfield{number}%写专利号 - \printfield[gbtypeflag]{usera}% + \iftoggle{bbx:gbtype}{\printfield[gbtypeflag]{usera}}{}% %\iffieldundef{booktitle}{\newunit}{}%当title是析出时,不要标点 %\newunit }% }% } -%修改了一个institution+location+date用于report等的,当没有institution时不处理。 -\renewbibmacro*{institution+location+date}{% +% +% 修改了一个institution+location+date用于report等类型 +% +\renewbibmacro*{institution+location+date}{%当没有institution时不处理。 \printlist{location}% \iflistundef{institution} {\setunit*{\addcomma\space}} @@ -1262,11 +1782,12 @@ %===================================================================== -%===================================================================== %设置驱动格式 %===================================================================== -%book条目类的驱动,源来自standard.bbx文件 - \DeclareBibliographyDriver{book}{% +% +% book条目类的驱动 +% + \DeclareBibliographyDriver{book}{%源来自standard.bbx文件 \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% @@ -1277,7 +1798,8 @@ {\setunit{\labelnamepunct}\newblock}}% {\setunit{\labelnamepunct}\newblock}%这个注释去除标题前空格 \usebibmacro{maintitle+title}% -\newunit +%\usebibmacro{patenttitle}% +\newunit% \printlist{language}% \newunit\newblock% \usebibmacro{byauthor}% @@ -1321,32 +1843,114 @@ {}% \usebibmacro{finentry}} -%期刊文章,连续出版物中的析出文献的格式 - \DeclareBibliographyDriver{article}{% + + +% +% 专著中的析出文献的格式修改 +% +\DeclareBibliographyDriver{inbook}{%源来自standard.bbx \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% - \setunit{\labelnamepunct}\newblock - \usebibmacro{title}% +\ifnameundef{author}{%这一段用于去除作者不存在时多出的标点 +\ifnameundef{editor}{% +\ifnameundef{translator}{\relax}% +{\setunit{\labelnamepunct}\newblock}}% +{\setunit{\labelnamepunct}\newblock}}% +{\setunit{\labelnamepunct}\newblock}% +%\setunit{\labelnamepunct}\newblock +\usebibmacro{title}% +%\nopunct +\printtext{\texttt{//}\addthinspace}%%\texttt{//}\addnbthinspace +\usebibmacro{bybookauthor}% +\ifnameundef{bookauthor}{\newblock}{\newunit\newblock}%替换下一句 +%\newunit\newblock +\usebibmacro{maintitle+booktitle}%}% + \newunit\newblock + \usebibmacro{byeditor+others}% + \newunit\newblock + \printfield{edition}% \newunit + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + %\printfield{note}% + %\newunit\newblock + \usebibmacro{publisher+location+date}% +%\newunit\newblock + \usebibmacro{chapter+pages}% + \usebibmacro{doi+eprint+url}%移到上面来 + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{isbn}} + {}% + \newunit\newblock + %\usebibmacro{doi+eprint+url}% +% \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} +% + + + +% +% 文集类型驱动 +% +% 直接利用book做collection + \DeclareBibliographyDriver{collection}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% +\usebibmacro{author/editor+others/translator+others} +\ifnameundef{author}{%这一段用于去除作者不存在时多出的标点 +\ifnameundef{editor}{% +\ifnameundef{translator}{\relax}% +{\setunit{\labelnamepunct}\newblock}}% +{\setunit{\labelnamepunct}\newblock}}% +{\setunit{\labelnamepunct}\newblock}% + \usebibmacro{maintitle+title} + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% \newunit\newblock - \usebibmacro{bytranslator+others}% + \usebibmacro{byeditor+others}% \newunit\newblock - \printfield{version}% + \printfield{edition}% + \newunit + \iffieldundef{maintitle} + {\printfield{volume}% + \printfield{part}} + {}% + \newunit + \printfield{volumes}% + \newunit\newblock + \usebibmacro{series+number}% + \newunit\newblock + %\printfield{note}% + %\newunit\newblock + \usebibmacro{publisher+location+date}% + %\newunit\newblock %这里标点去掉 + \usebibmacro{chapter+pages}% + \usebibmacro{doi+eprint+url}%从下面移动到上面来,因为gbt2015的url需直接放在页码后面。 \newunit\newblock - %\usebibmacro{in:}% 不使用in来表示期刊等连续出版物 - \usebibmacro{journal+issuetitle}% %\newunit -% \usebibmacro{byeditor+others}% -% \newunit - \usebibmacro{note+pages}% - \usebibmacro{doi+eprint+url}%从后面移上来,调整url和页码之间的位置 + \printfield{pagetotal}% \newunit\newblock \iftoggle{bbx:isbn} - {\printfield{issn}} + {\printfield{isbn}} {}% \newunit\newblock %\usebibmacro{doi+eprint+url}% @@ -1361,8 +1965,13 @@ {}% \usebibmacro{finentry}} -%专著中的析出文献的格式修改,源来自standard.bbx -\DeclareBibliographyDriver{inbook}{% +% +% 文集中析出文献类型驱动 +% + + +% 直接利用inbook做incollection +\DeclareBibliographyDriver{incollection}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% @@ -1374,12 +1983,11 @@ {\setunit{\labelnamepunct}\newblock}% %\setunit{\labelnamepunct}\newblock \usebibmacro{title}% -%\nopunct -\printtext{\texttt{//}\addthinspace}%%\texttt{//}\addnbthinspace +\printtext{\texttt{//}\addthinspace}%似乎顶格加百分号可以避免一些不必要的空格加入,特别是这种直接处理的语句前后 \usebibmacro{bybookauthor}% \ifnameundef{bookauthor}{\newblock}{\newunit\newblock}%替换下一句 -%\newunit\newblock -\usebibmacro{maintitle+booktitle}%}% + %\newunit\newblock + \usebibmacro{maintitle+booktitle}% \newunit\newblock \usebibmacro{byeditor+others}% \newunit\newblock @@ -1397,16 +2005,56 @@ %\printfield{note}% %\newunit\newblock \usebibmacro{publisher+location+date}% -%\newunit\newblock + \newunit\newblock \usebibmacro{chapter+pages}% - \usebibmacro{doi+eprint+url}%移到上面来 \newunit\newblock \iftoggle{bbx:isbn} {\printfield{isbn}} {}% \newunit\newblock + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{finentry}} + +% 期刊文章,连续出版物中的析出文献的格式 +% + \DeclareBibliographyDriver{article}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/translator+others}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title}% + \newunit% + \printlist{language}% + \newunit\newblock + \usebibmacro{byauthor}% + \newunit\newblock + \usebibmacro{bytranslator+others}% + \newunit\newblock + \printfield{version}% + \newunit\newblock + %\usebibmacro{in:}% 不使用in来表示期刊等连续出版物 + \usebibmacro{journal+issuetitle}% + %\newunit +% \usebibmacro{byeditor+others}% +% \newunit + \usebibmacro{note+pages}% + \usebibmacro{doi+eprint+url}%从后面移上来,调整url和页码之间的位置 + \newunit\newblock + \iftoggle{bbx:isbn} + {\printfield{issn}} + {}% + \newunit\newblock %\usebibmacro{doi+eprint+url}% -% \newunit\newblock + %\newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% @@ -1417,15 +2065,19 @@ {}% \usebibmacro{finentry}} -%修改连续出版物的驱动,源来自standard.BBX - \DeclareBibliographyDriver{periodical}{% + + +% +% 连续出版物的驱动 +% + \DeclareBibliographyDriver{periodical}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{editor}% %\setunit{\labelnamepunct}\newblock \newunit\newblock %删除上面一行,添加这一行 \usebibmacro{title+issuetitle}% - \newunit + \newunit% \usebibmacro{location+institution+date}%添加这一行用于输出地址,单位和时间 \newunit\newblock%添加这一行 \printlist{language}% @@ -1450,15 +2102,17 @@ {}% \usebibmacro{finentry}} -%处理专利文献,源来自standard.BBX - \DeclareBibliographyDriver{patent}{% +% +% 专利文献驱动 +% + \DeclareBibliographyDriver{patent}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author}% \setunit{\labelnamepunct}\newblock %\usebibmacro{title}% \usebibmacro{patenttitle}%给出专利专用的标题输出 - \newunit + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% @@ -1490,8 +2144,10 @@ {}% \usebibmacro{finentry}} -%处理在线文献,源来自standard.BBX -\DeclareBibliographyDriver{online}{% +% +% 在线文献驱动 +% +\DeclareBibliographyDriver{online}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% @@ -1503,7 +2159,7 @@ {\setunit{\labelnamepunct}\newblock}% %\setunit{\labelnamepunct}\newblock \usebibmacro{title}% - \newunit + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% @@ -1536,14 +2192,16 @@ {}% \usebibmacro{finentry}} -%学位论文修改,源来自standard.BBX - \DeclareBibliographyDriver{thesis}{% +% +% 学位论文修改 +% + \DeclareBibliographyDriver{thesis}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author}% \setunit{\labelnamepunct}\newblock \usebibmacro{title}% - \newunit + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% @@ -1575,14 +2233,17 @@ {}% \usebibmacro{finentry}} -%2016-11-11增加了译者信息 +% +% 报告类型驱动 +% 2016-11-11,增加了译者信息 +% \DeclareBibliographyDriver{report}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author}% \setunit{\labelnamepunct}\newblock \usebibmacro{title}% - \newunit + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% @@ -1620,7 +2281,11 @@ {}% \usebibmacro{finentry}} -%直接利用report做manual,2016-11-11增加了译者信息 +% +% 手册类型驱动 +% 2016-11-11,增加了译者信息 +% +% 直接利用report做manual %\DeclareBibliographyDriver{report}{% \DeclareBibliographyDriver{manual}{% \usebibmacro{bibindex}% @@ -1628,7 +2293,7 @@ \usebibmacro{author}% \setunit{\labelnamepunct}\newblock \usebibmacro{title}% - \newunit + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% @@ -1666,14 +2331,17 @@ {}% \usebibmacro{finentry}} -%直接利用report做unpublished +% +% 未出版物类型驱动 +% +% 直接利用report做unpublished \DeclareBibliographyDriver{unpublished}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author}% \setunit{\labelnamepunct}\newblock \usebibmacro{title}% - \newunit + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% @@ -1709,118 +2377,11 @@ {}% \usebibmacro{finentry}} -%直接利用book做collection - \DeclareBibliographyDriver{collection}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% -\usebibmacro{author/editor+others/translator+others} -\ifnameundef{author}{%这一段用于去除作者不存在时多出的标点 -\ifnameundef{editor}{% -\ifnameundef{translator}{\relax}% -{\setunit{\labelnamepunct}\newblock}}% -{\setunit{\labelnamepunct}\newblock}}% -{\setunit{\labelnamepunct}\newblock}% - \usebibmacro{maintitle+title} - \newunit - \printlist{language}% - \newunit\newblock - \usebibmacro{byauthor}% - \newunit\newblock - \usebibmacro{byeditor+others}% - \newunit\newblock - \printfield{edition}% - \newunit - \iffieldundef{maintitle} - {\printfield{volume}% - \printfield{part}} - {}% - \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{series+number}% - \newunit\newblock - %\printfield{note}% - %\newunit\newblock - \usebibmacro{publisher+location+date}% - %\newunit\newblock %这里标点去掉 - \usebibmacro{chapter+pages}% - \usebibmacro{doi+eprint+url}%从下面移动到上面来,因为gbt2015的url需直接放在页码后面。 - \newunit\newblock - %\newunit - \printfield{pagetotal}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - %\usebibmacro{doi+eprint+url}% - %\newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} - -%直接利用inbook做incollection -\DeclareBibliographyDriver{incollection}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/translator+others}% -\ifnameundef{author}{%这一段用于去除作者不存在时多出的标点 -\ifnameundef{editor}{% -\ifnameundef{translator}{\relax}% -{\setunit{\labelnamepunct}\newblock}}% -{\setunit{\labelnamepunct}\newblock}}% -{\setunit{\labelnamepunct}\newblock}% -%\setunit{\labelnamepunct}\newblock -\usebibmacro{title}% -\printtext{\texttt{//}\addthinspace}%似乎顶格加百分号可以避免一些不必要的空格加入,特别是这种直接处理的语句前后 -\usebibmacro{bybookauthor}% -\ifnameundef{bookauthor}{\newblock}{\newunit\newblock}%替换下一句 - %\newunit\newblock - \usebibmacro{maintitle+booktitle}% - \newunit\newblock - \usebibmacro{byeditor+others}% - \newunit\newblock - \printfield{edition}% - \newunit - \iffieldundef{maintitle} - {\printfield{volume}% - \printfield{part}} - {}% - \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{series+number}% - \newunit\newblock - %\printfield{note}% - %\newunit\newblock - \usebibmacro{publisher+location+date}% - \newunit\newblock - \usebibmacro{chapter+pages}% - \newunit\newblock - \iftoggle{bbx:isbn} - {\printfield{isbn}} - {}% - \newunit\newblock - \usebibmacro{doi+eprint+url}% - \newunit\newblock - \usebibmacro{addendum+pubstate}% - \setunit{\bibpagerefpunct}\newblock - \usebibmacro{pageref}% - \newunit\newblock - \iftoggle{bbx:related} - {\usebibmacro{related:init}% - \usebibmacro{related}} - {}% - \usebibmacro{finentry}} -%会议论文格式修改,源来自standard.BBX - \DeclareBibliographyDriver{inproceedings}{% +% +% 会议论文文献类型驱动 +% + \DeclareBibliographyDriver{inproceedings}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% @@ -1875,15 +2436,17 @@ {}% \usebibmacro{finentry}} -%会议论文集格式修改,源来自standard.BBX -\DeclareBibliographyDriver{proceedings}{% +% +% 会议论文集文献类型驱动 +% +\DeclareBibliographyDriver{proceedings}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% %\usebibmacro{editor+others}% \usebibmacro{author/translator+others}% \setunit{\labelnamepunct}\newblock \usebibmacro{maintitle+title}% - \newunit + \newunit% \printlist{language}% \newunit\newblock \usebibmacro{event+venue+date}% |