280 lines
8.7 KiB
TeX
280 lines
8.7 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-2015.cbx}[\versionofgbtstyle biblatex citation style]
|
||
|
||
%
|
||
% 加载标准样式
|
||
%
|
||
\RequireCitationStyle{numeric-comp} %numeric
|
||
|
||
|
||
%
|
||
% 选项设置
|
||
%
|
||
\ExecuteBibliographyOptions{
|
||
autocite = superscript ,
|
||
autopunct = true ,
|
||
%sorting = none ,
|
||
maxcitenames=1,
|
||
mincitenames=1,
|
||
}
|
||
|
||
%textcite标注命令中的标点设置
|
||
%\DeclareDelimFormat[textcite]{andothersdelim}{\addspace}%
|
||
|
||
%
|
||
% 定义一个上标方括号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}
|
||
|
||
%
|
||
% 增加如下复数的命令,以符合biblatex的复数命令习惯
|
||
% 20190430,v1.0r,hzz
|
||
% citec和citecs命令是实现了[1]-[3]这样的压缩形式。
|
||
% authornumcites是常用命令authornumcite的复数形式
|
||
\DeclareFieldFormat{labelbracket}{\mkbibbrackets{#1}}
|
||
|
||
\newbibmacro*{citec:comp:comp}{%
|
||
\ifboolexpr{
|
||
( test {\iffieldundef{labelprefix}} and test {\ifundef\cbx@lastprefix} )
|
||
or
|
||
test {\iffieldequals{labelprefix}{\cbx@lastprefix}}
|
||
}
|
||
{\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}}
|
||
{\savefield{entrykey}{\cbx@lastkey}%
|
||
\savefield{labelnumber}{\cbx@lastnumber}%
|
||
\addtocounter{cbx@tempcnta}{1}}
|
||
{\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}-1}
|
||
{}
|
||
{\usebibmacro{citec:dump}%
|
||
\ifnumgreater{\value{cbx@tempcntb}}{-1}
|
||
{\multicitedelim}
|
||
{}%
|
||
\printtext[bibhyperref]{%
|
||
\printfield{labelprefix}%
|
||
\printtext[labelbracket]{\printfield{labelnumber}}}}}}
|
||
{\usebibmacro{cite:comp:end}}%
|
||
\setcounter{cbx@tempcntb}{\thefield{labelnumber}}%
|
||
\savefield{labelprefix}{\cbx@lastprefix}}
|
||
|
||
\newbibmacro*{citec:comp}{%
|
||
\addtocounter{cbx@tempcntb}{1}%
|
||
\iffieldundef{shorthand}
|
||
{\ifbool{bbx:subentry}
|
||
{\iffieldundef{entrysetcount}
|
||
{\usebibmacro{citec:comp:comp}}
|
||
{\usebibmacro{cite:comp:inset}}}
|
||
{\usebibmacro{citec:comp:comp}}}
|
||
{\usebibmacro{cite:comp:shand}}}
|
||
|
||
\newbibmacro*{citec:dump}{%
|
||
\ifnumgreater{\value{cbx@tempcnta}}{0}
|
||
{\ifnumgreater{\value{cbx@tempcnta}}{1}
|
||
{\bibrangedash}
|
||
{\multicitedelim}%
|
||
\bibhyperref[\cbx@lastkey]{%
|
||
\ifdef\cbx@lastprefix
|
||
{\printtext[labelprefix]{\cbx@lastprefix}}
|
||
{}%
|
||
\printtext[labelbracket]{\cbx@lastnumber}}}%labelnumber
|
||
{}%
|
||
\setcounter{cbx@tempcnta}{0}%
|
||
\global\undef\cbx@lastprefix}
|
||
|
||
%\DeclareCiteCommand{\citec}[\mkbibsuperscript]%[\mkbibbrackets]
|
||
% {\usebibmacro{cite:init}%
|
||
% \usebibmacro{prenote}}
|
||
% {\usebibmacro{citeindex}%
|
||
% \usebibmacro{citec:comp}}
|
||
% {}
|
||
% {\usebibmacro{citec:dump}%
|
||
% \usebibmacro{postnote}}
|
||
|
||
%上面这个用于非压缩情况,这里考虑了压缩的情况
|
||
\DeclareCiteCommand{\citec}[\mkbibsuperscript]%
|
||
{\ifnumless{\value{multicitecount}}{2}
|
||
{\usebibmacro{cite:init}%
|
||
\usebibmacro{prenote}}
|
||
{\iffieldundef{prenote}
|
||
{\iffieldundef{postnote}
|
||
{}
|
||
{\usebibmacro{citec:dump}%
|
||
\usebibmacro{cite:init}%
|
||
\setunit{\multicitedelim}}}
|
||
{\usebibmacro{citec:dump}%
|
||
\usebibmacro{cite:init}%
|
||
\setunit{\multicitedelim}%
|
||
\usebibmacro{prenote}}}}
|
||
{\usebibmacro{citeindex}%
|
||
\usebibmacro{citec:comp}}
|
||
{}
|
||
{\ifboolexpr{ test {\ifnumequal{\value{multicitecount}}{\value{multicitetotal}}}
|
||
or not test {\iffieldundef{postnote}}}
|
||
{\usebibmacro{citec:dump}%
|
||
\usebibmacro{postnote}}
|
||
{}}
|
||
|
||
\DeclareMultiCiteCommand{\citecs}[\mkbibsuperscript]{\citec}{}
|
||
|
||
\DeclareMultiCiteCommand{\authornumcites}[]{\authornumcite}{\multicitedelim}
|