%% %% --------------------------------------------------------------- %% 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{2020/03/20 v1.0u} \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}