Skip to content

Commit

Permalink
[*] Bulk updates
Browse files Browse the repository at this point in the history
  • Loading branch information
SXKDZ committed Dec 2, 2019
1 parent 4a3047e commit 8faaa60
Show file tree
Hide file tree
Showing 10 changed files with 3,933 additions and 8,062 deletions.
3,453 changes: 3,453 additions & 0 deletions gb7714-2015.bbx

Large diffs are not rendered by default.

279 changes: 279 additions & 0 deletions gb7714-2015.cbx
Original file line number Diff line number Diff line change
@@ -0,0 +1,279 @@
%%
%% ---------------------------------------------------------------
%% 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}
Loading

0 comments on commit 8faaa60

Please sign in to comment.