467 lines
15 KiB
TeX
467 lines
15 KiB
TeX
%%
|
||
%% ---------------------------------------------------------------
|
||
%% biblatex-gb7714-2015 --- A biblatex implementation of the
|
||
%% GBT7714-2015 citation style,numerical sequence
|
||
%% Maintained by huzhenzhen
|
||
%% E-mail: hzzmail@163.com
|
||
%% Released under the LaTeX Project Public License v1.3c or later
|
||
%% ---------------------------------------------------------------
|
||
%%
|
||
\def\versionofgbtstyle{2019/03/28 v1.0r}
|
||
\ProvidesFile{gb7714-2015mx.cbx}[\versionofgbtstyle biblatex citation style]
|
||
|
||
%
|
||
% 加载标准样式
|
||
%
|
||
\RequireCitationStyle{numeric-comp} %numeric
|
||
|
||
|
||
%
|
||
% 选项设置
|
||
%
|
||
\ExecuteBibliographyOptions{
|
||
%autocite = superscript ,
|
||
%autopunct = true ,
|
||
%sorting = none ,
|
||
maxcitenames=1,
|
||
mincitenames=1,
|
||
uniquename=init,%因为使用了名字缩写选项,所以需要设置uniquename=init而不是full避免冲突
|
||
uniquelist=minyear,
|
||
labeldateparts,
|
||
sortcites,
|
||
}
|
||
|
||
|
||
|
||
%
|
||
% 定义一个上标方括号wrapper
|
||
%
|
||
\newcommand*\mkbibsuperbracket[1]{%
|
||
\mkbibsuperscript{\mkbibbrackets{#1}}%
|
||
}
|
||
|
||
% 修改postnote的输出格式
|
||
\DeclareFieldFormat{postnote}{#1}
|
||
|
||
%
|
||
% 重定义cite命令
|
||
%
|
||
% 方法:\DeclareCiteCommand{\cite}[\mkbibparens]{precode}{loopcode}{sepcode}{postcode}
|
||
% v1.0p版后将cite的处理方式修改为类似pagescite,而不再使用biblatex的标准方式
|
||
\DeclareCiteCommand{\cite}[\mkbibsuperscript]%利用mkbibsuperbracket添加方括号
|
||
{[\usebibmacro{cite:init}%
|
||
\usebibmacro{prenote}}
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite:comp}}
|
||
{}
|
||
{\usebibmacro{cite:dump}]%
|
||
\printfield{postnote}}
|
||
% v1.0p 以前用的方式
|
||
%\DeclareCiteCommand{\cite}[\mkbibsuperbracket]%利用mkbibsuperbracket添加方括号
|
||
% {\usebibmacro{cite:init}%
|
||
% \usebibmacro{prenote}}
|
||
% {\usebibmacro{citeindex}%
|
||
% \usebibmacro{cite:comp}}
|
||
% {}
|
||
% {\usebibmacro{cite:dump}%
|
||
% \usebibmacro{postnote}}
|
||
|
||
%
|
||
% 定义upcite命令
|
||
% 20180604,v1.0l,hzz
|
||
% 20190409,v1.0r,hzz
|
||
% 方法:对supercite增加[]
|
||
\newrobustcmd*{\upcite}{%
|
||
\cite}
|
||
|
||
%
|
||
% 重定义parencite命令,以满足标签带页码的国标要求
|
||
%
|
||
\DeclareCiteCommand{\parencite}%[\mkbibbrackets]
|
||
{[\usebibmacro{cite:init}%]
|
||
\usebibmacro{prenote}}%
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite:comp}}
|
||
{}
|
||
{%[
|
||
\usebibmacro{cite:dump}]%
|
||
\mkbibsuperscript{\printfield{postnote}}}
|
||
|
||
%
|
||
% 新定义pagescite命令,以满足标签带页码的国标要求
|
||
%
|
||
% 原理方法:
|
||
% 1.新增页码输出宏
|
||
\newbibmacro*{postpages}{%
|
||
\iffieldundef{postnote}
|
||
{\printfield[postnote]{pages}}
|
||
{\printfield{postnote}}}
|
||
% 2.新增\pagescite引用命令
|
||
\DeclareCiteCommand{\pagescite}[\mkbibsuperscript]%\mkbibbrackets,仍然用上标
|
||
{[\usebibmacro{cite:init}%]直接添加方括号
|
||
\usebibmacro{prenote}%
|
||
}
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite:comp}}
|
||
{}
|
||
{\usebibmacro{cite:dump}]%
|
||
\usebibmacro{postpages}}
|
||
|
||
%
|
||
% 定义yearpagescite,为与ay样式兼容,等同于\pagescite
|
||
%
|
||
\DeclareCiteCommand{\yearpagescite}[\mkbibsuperscript]%\mkbibbrackets,仍然用上标
|
||
{[\usebibmacro{cite:init}%]直接添加方括号
|
||
\usebibmacro{prenote}%
|
||
}
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite:comp}}
|
||
{}
|
||
{\usebibmacro{cite:dump}]%
|
||
\usebibmacro{postpages}}
|
||
|
||
%
|
||
% 定义\yearcite命令,为与ay样式兼容,且提供不输出页码的标签格式,
|
||
%
|
||
% 原理方法:等同于\pagescite,但不要页码
|
||
\DeclareCiteCommand{\yearcite}[\mkbibsuperscript]%\mkbibbrackets,仍然用上标
|
||
{[\usebibmacro{cite:init}%]直接添加方括号
|
||
\usebibmacro{prenote}%
|
||
}
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite:comp}}
|
||
{}
|
||
{\usebibmacro{cite:dump}]}
|
||
|
||
%
|
||
% 定义\authornumcite命令,输出作者信息,然后在后面带上顺序编码
|
||
% 20180427,v1.0k,增加,hzz
|
||
% gb7714样式新定义的命令都把cite放到最后,比如前面的pagescite,yearcite,这里的\authornumcite
|
||
% 区别于biblatex定义的命令都把cite放到前面,比如citeauthor等。
|
||
%见numeric.CBX
|
||
\newbibmacro*{cite}{%
|
||
\printtext[bibhyperref]{%
|
||
\printfield{labelprefix}%
|
||
\printfield{labelnumber}%
|
||
\ifbool{bbx:subentry}
|
||
{\printfield{entrysetcount}}
|
||
{}}}
|
||
%见numeric.CBX,\DeclareCiteCommand{\cite},
|
||
\DeclareCiteCommand{\authornumcite}%[\mkbibsuperscript]
|
||
{\usebibmacro{prenote}}
|
||
{\iffieldequalstr{userf}{cn}{\renewcommand*{\andothersdelim}{\addthinspace}}%\addthinspace
|
||
{\renewcommand*{\andothersdelim}{\addspace}}%
|
||
\printnames{labelname}\mkbibsuperscript{\mkbibbrackets{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite}}}}
|
||
{\multicitedelim}
|
||
{\mkbibsuperscript{\printfield{postnote}}}
|
||
|
||
|
||
%
|
||
% 增加如下多个命令
|
||
% 20190409,v1.0r,hzz
|
||
% 方法:利用newcommand或newrobustcmd命令进行定义
|
||
% 注意\citet和\citep命令之所以不用newrobustcmd,是为避免加载natbib模块后产生冲突
|
||
\DeclareCiteCommand{\citet}%
|
||
{\usebibmacro{prenote}}
|
||
{\iffieldequalstr{userf}{cn}{\renewcommand*{\andothersdelim}{\addthinspace}}%\addthinspace
|
||
{\renewcommand*{\andothersdelim}{\addspace}}%
|
||
\printnames{labelname}\mkbibsuperscript{\mkbibbrackets{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite}}}}
|
||
{\multicitedelim}
|
||
{\mkbibsuperscript{\printfield{postnote}}}
|
||
|
||
|
||
\DeclareCiteCommand{\citep}[\mkbibsuperscript]%利用mkbibsuperbracket添加方括号
|
||
{[\usebibmacro{cite:init}%
|
||
\usebibmacro{prenote}}
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite:comp}}
|
||
{}
|
||
{\usebibmacro{cite:dump}]%
|
||
\printfield{postnote}}
|
||
|
||
\newrobustcmd*{\citetns}%
|
||
{\textcite}
|
||
|
||
\newrobustcmd*{\citepns}%
|
||
{\parencite}
|
||
|
||
\newrobustcmd*{\inlinecite}%
|
||
{\parencite}
|
||
|
||
|
||
%textcite标注命令中的标点设置
|
||
%\DeclareDelimFormat[textcite]{andothersdelim}{\addspace}%
|
||
|
||
%textcite标注命令中的标点设置,注意只针对textcite命令。
|
||
\DeclareDelimFormat[textcite]{nameyeardelim}{}%\addcomma\space
|
||
\DeclareDelimFormat[textcite]{andothersdelim}{\iffieldequalstr{userf}{chinese}{\addthinspace}{\addspace}}%
|
||
\AtEveryCitekey{%
|
||
\iffieldequalstr{userf}{chinese}{\renewcommand*{\andothersdelim}{\addthinspace}}%\addthinspace
|
||
{\renewcommand*{\andothersdelim}{\addspace}}%
|
||
}
|
||
|
||
%
|
||
%
|
||
%
|
||
\apptocmd{\refsection}{
|
||
|
||
%\edef\gb@refsecnum{\number\c@refsection}
|
||
\edef\gb@refsecnum{\number\c@refsection}%
|
||
\ifcsundef{gb@aystyle@section\gb@refsecnum}%
|
||
{}%
|
||
{
|
||
|
||
\renewcommand*{\iffinalcitedelim}{%
|
||
\ifnumequal{\value{textcitecount}}{\value{textcitetotal}-1}}
|
||
|
||
\newbibmacro*{cite:init}{%
|
||
\ifnumless{\value{multicitecount}}{2}
|
||
{\global\boolfalse{cbx:parens}%
|
||
\global\undef\cbx@lasthash
|
||
\global\undef\cbx@lastyear}
|
||
{\iffieldundef{prenote}
|
||
{}
|
||
{\global\undef\cbx@lasthash
|
||
\global\undef\cbx@lastyear}}}
|
||
|
||
\newbibmacro*{cite:reinit}{%
|
||
\global\undef\cbx@lasthash
|
||
\global\undef\cbx@lastyear}
|
||
|
||
\newbibmacro*{cite}{%
|
||
\iffieldundef{shorthand}
|
||
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
|
||
{\usebibmacro{cite:label}%
|
||
\setunit{\printdelim{nonameyeardelim}}%
|
||
\usebibmacro{cite:labeldate+extradate}%
|
||
\usebibmacro{cite:reinit}}
|
||
{\iffieldequals{namehash}{\cbx@lasthash}
|
||
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
|
||
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
|
||
{\setunit{\addcomma}%
|
||
\usebibmacro{cite:extradate}}
|
||
{\setunit{\compcitedelim}%
|
||
\usebibmacro{cite:labeldate+extradate}%
|
||
\savefield{labelyear}{\cbx@lastyear}}}
|
||
{\printnames{labelname}%
|
||
\setunit{\printdelim{nameyeardelim}}%
|
||
\usebibmacro{cite:labeldate+extradate}%
|
||
\savefield{namehash}{\cbx@lasthash}%
|
||
\savefield{labelyear}{\cbx@lastyear}}}}
|
||
{\usebibmacro{cite:shorthand}%
|
||
\usebibmacro{cite:reinit}}%
|
||
\setunit{\multicitedelim}}
|
||
|
||
\newbibmacro*{citeyear}{%
|
||
\iffieldundef{shorthand}
|
||
{\iffieldundef{labelyear}
|
||
{\usebibmacro{cite:label}%
|
||
\usebibmacro{cite:reinit}}
|
||
{\iffieldequals{namehash}{\cbx@lasthash}
|
||
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
|
||
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
|
||
{\setunit{\addcomma}%
|
||
\usebibmacro{cite:extradate}}
|
||
{\setunit{\compcitedelim}%
|
||
\usebibmacro{cite:labeldate+extradate}%
|
||
\savefield{labelyear}{\cbx@lastyear}}}
|
||
{\usebibmacro{cite:labeldate+extradate}%
|
||
\savefield{namehash}{\cbx@lasthash}%
|
||
\savefield{labelyear}{\cbx@lastyear}}}}
|
||
{\usebibmacro{cite:shorthand}%
|
||
\usebibmacro{cite:reinit}}%
|
||
\setunit{\multicitedelim}}
|
||
|
||
\newbibmacro*{textcite}{%
|
||
\iffieldequals{namehash}{\cbx@lasthash}
|
||
{\iffieldundef{shorthand}
|
||
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
|
||
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
|
||
{\setunit{\addcomma}%
|
||
\usebibmacro{cite:extradate}}
|
||
{\setunit{\compcitedelim}%
|
||
\usebibmacro{cite:labeldate+extradate}%
|
||
\savefield{labelyear}{\cbx@lastyear}}}
|
||
{\setunit{\compcitedelim}%
|
||
\usebibmacro{cite:shorthand}%
|
||
\global\undef\cbx@lastyear}}
|
||
{\ifnameundef{labelname}
|
||
{\iffieldundef{shorthand}
|
||
{\usebibmacro{cite:label}%
|
||
\setunit{%
|
||
\global\booltrue{cbx:parens}%
|
||
\printdelim{nonameyeardelim}\bibopenparen}%
|
||
\ifnumequal{\value{citecount}}{1}
|
||
{\usebibmacro{prenote}}
|
||
{}%
|
||
\usebibmacro{cite:labeldate+extradate}}
|
||
{\usebibmacro{cite:shorthand}}}
|
||
{\printnames{labelname}%
|
||
\setunit{%
|
||
\global\booltrue{cbx:parens}%
|
||
\printdelim{nameyeardelim}\bibopenparen}%
|
||
\ifnumequal{\value{citecount}}{1}
|
||
{\usebibmacro{prenote}}
|
||
{}%
|
||
\iffieldundef{shorthand}
|
||
{\iffieldundef{labelyear}
|
||
{\usebibmacro{cite:label}}
|
||
{\usebibmacro{cite:labeldate+extradate}}%
|
||
\savefield{labelyear}{\cbx@lastyear}}
|
||
{\usebibmacro{cite:shorthand}%
|
||
\global\undef\cbx@lastyear}}%
|
||
\stepcounter{textcitecount}%
|
||
\savefield{namehash}{\cbx@lasthash}}%
|
||
\setunit{%
|
||
\ifbool{cbx:parens}
|
||
{\bibcloseparen\global\boolfalse{cbx:parens}}
|
||
{}%
|
||
\textcitedelim}}
|
||
|
||
\newbibmacro*{cite:shorthand}{%
|
||
\printtext[bibhyperref]{\printfield{shorthand}}}
|
||
|
||
%
|
||
% 重定义cite:label,针对biblatex3.8以上版本set条目集的标注(引用)标签
|
||
%
|
||
% 原理方法:当条目是set时,v3.8以上版本,都没有有用的信息(区别于3.7以下版本set复制第一个成员的信息),
|
||
% 于是利用entrykey来给出标签,那么就要set的条目关键字是需要的字符串,注意字符串中间不能有空格
|
||
\renewbibmacro*{cite:label}{%
|
||
\iffieldundef{label}%
|
||
{\iffieldundef{labeltitle}{\printtext[bibhyperref]{\printfield{entrykey}}}%entrykey
|
||
{\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}}%
|
||
{\printtext[bibhyperref]{\printfield{label}}}}
|
||
|
||
\newbibmacro*{cite:labeldate+extradate}{%
|
||
\iffieldundef{labelyear}
|
||
{}
|
||
{\printtext[bibhyperref]{\printlabeldateextra}}}
|
||
|
||
\newbibmacro*{cite:extradate}{%
|
||
\iffieldundef{extradate}
|
||
{}
|
||
{\printtext[bibhyperref]{\printfield{extradate}}}}
|
||
|
||
|
||
|
||
%
|
||
% 重定义cite:label,针对biblatex3.8以上版本set条目集的标注(引用)标签
|
||
%
|
||
% 原理方法:当条目是set时,v3.8以上版本,都没有有用的信息(区别于3.7以下版本set复制第一个成员的信息),
|
||
% 于是利用entrykey来给出标签,那么就要set的条目关键字是需要的字符串,注意字符串中间不能有空格
|
||
\renewbibmacro*{cite:label}{%
|
||
\iffieldundef{label}%
|
||
{\iffieldundef{labeltitle}{\printtext[bibhyperref]{\printfield{entrykey}}}%entrykey
|
||
{\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}}%
|
||
{\printtext[bibhyperref]{\printfield{label}}}}
|
||
|
||
%
|
||
% 重定义cite命令
|
||
%
|
||
% 方法:\DeclareCiteCommand{\cite}[\mkbibparens]{precode}{loopcode}{sepcode}{postcode}
|
||
% v1.0p版后将cite的处理方式修改为类似pagescite,而不再使用biblatex的标准方式
|
||
\DeclareCiteCommand{\cite}
|
||
{\usebibmacro{cite:init}%
|
||
\renewbibmacro*{postnote}{%
|
||
\iffieldundef{postnote}%
|
||
{}%
|
||
{\thefield{postnote}}}%
|
||
(\usebibmacro{prenote}}%)
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite}}
|
||
{}
|
||
{%(
|
||
)\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote}
|
||
}
|
||
|
||
\DeclareCiteCommand{\parencite}[\mkbibparens]
|
||
{\usebibmacro{cite:init}%
|
||
\usebibmacro{prenote}}
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite}}
|
||
{}
|
||
{\usebibmacro{postnote}}
|
||
|
||
%
|
||
% 定义\authornumcite命令,输出作者信息,然后在后面带上顺序编码
|
||
% 20180427,v1.0k,增加,hzz
|
||
% 20190409,v1.0r,hzz
|
||
% 为与顺序编码制兼容,增加了命令,定义与citet相同
|
||
\newbibmacro*{citet}{%
|
||
\iffieldundef{shorthand}
|
||
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
|
||
{\usebibmacro{cite:label}%
|
||
\setunit{\printdelim{nonameyeardelim}}%
|
||
\usebibmacro{cite:labeldate+extradate}%
|
||
\usebibmacro{cite:reinit}}
|
||
{\iffieldequals{namehash}{\cbx@lasthash}
|
||
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
|
||
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
|
||
{\setunit{\addcomma}%
|
||
\usebibmacro{cite:extradate}}
|
||
{\setunit{\compcitedelim}%
|
||
\usebibmacro{cite:labeldate+extradate}%
|
||
\savefield{labelyear}{\cbx@lastyear}}}
|
||
{\printnames{labelname}%
|
||
%\setunit{\printdelim{nameyeardelim}}%
|
||
(\usebibmacro{cite:labeldate+extradate})%
|
||
\savefield{namehash}{\cbx@lasthash}%
|
||
\savefield{labelyear}{\cbx@lastyear}}}}
|
||
{\usebibmacro{cite:shorthand}%
|
||
\usebibmacro{cite:reinit}}%
|
||
\setunit{\multicitedelim}}
|
||
|
||
\DeclareCiteCommand{\authornumcite}%
|
||
{\usebibmacro{cite:init}%
|
||
\renewbibmacro*{postnote}{%
|
||
\iffieldundef{postnote}%
|
||
{}%
|
||
{\thefield{postnote}}}%
|
||
\usebibmacro{prenote}}%
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{citet}}
|
||
{}
|
||
{\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote}
|
||
}
|
||
|
||
%
|
||
% 增加如下多个命令
|
||
% 20190409,v1.0r,hzz
|
||
% 方法:利用newcommand或newrobustcmd命令进行定义
|
||
% 注意\citet和\citep命令之所以不用newrobustcmd,是为避免加载natbib模块后产生冲突
|
||
|
||
%同\authornumcite
|
||
\DeclareCiteCommand{\citet}%
|
||
{\usebibmacro{cite:init}%
|
||
\renewbibmacro*{postnote}{%
|
||
\iffieldundef{postnote}%
|
||
{}%
|
||
{\thefield{postnote}}}%
|
||
\usebibmacro{prenote}}%
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{citet}}
|
||
{}
|
||
{\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote}
|
||
}
|
||
|
||
%同cite
|
||
\DeclareCiteCommand{\citep}
|
||
{\usebibmacro{cite:init}%
|
||
\renewbibmacro*{postnote}{%
|
||
\iffieldundef{postnote}%
|
||
{}%
|
||
{\thefield{postnote}}}%
|
||
(\usebibmacro{prenote}}%)
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{cite}}
|
||
{}
|
||
{%(
|
||
)\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote}
|
||
}
|
||
|
||
|
||
}
|
||
}{}{}
|