%% %% --------------------------------------------------------------- %% erj.bbx --- A bibliography style of comprehensive academic journal of humanities and social sciences in china %% modified from gb7714-2015ay %% Maintained by huzhenzhen %% E-mail: hzzmail@163.com %% Released under the LaTeX Project Public License v1.3c or later %% history %% 2019/03/28 v1.0 %% 2022/02/22 v1.0a %% --------------------------------------------------------------- %% %%用法:类似于标准的样式在biblatex加载时设置样式 %%文献表正常处理,标注命令主要用cite和textcite \ProvidesFile{chinese-cajhssay.bbx}[2024/09/12 v1.0a a biblatex bibliography style for ERJ] %================================================== %加载gb样式 %================================================== \RequireBibliographyStyle{gb7714-2015ay} \RequirePackage{mfirstuc}%单词首字母大写的问题 \MFUnocap{in}% \MFUnocap{the}% \MFUnocap{of}% \MFUnocap{on}% \MFUnocap{and}% \MFUnocap{for}% % % 增加一个控制标点是英文还是中文的选项 % 20220222,v1.0a,hzz \DeclareBibliographyOption{gbpunctcn}[true]{%biblatex低版本 \ifstrequal{#1}{false}{\execerjpuncten}{}} %================================================== %考虑多音字增加multipinyin排序,是其可以根据key域添加拼音来排序 %================================================== \DeclareSortingTemplate{multipinyin}{ \sort{ \field{presort} } \sort{ \field{lansortorder}%language } \sort{ \field{sortkey} } \sort{%[direction=descending] \field{sortname} \field{author} \field{editor} \field{translator} } \sort{ \field{sortyear} \field{year} } \sort{ \field{sorttitle} \field{title} } \sort{ \field{volume} \literal{0} } } %================================================== %选项设置 %================================================== \ExecuteBibliographyOptions{ maxbibnames=99, gbtype=false, gbpub=false, gbnamefmt=reverseorder, % givenahead, gbpunctin=false, gbfieldtype=true, %mergedate=true, %sorting=none, doi=false, %url=false, } %================================================== %定义一些标点为中文全角标点 %================================================== \def\gbpunctdot{。}% \def\gbpunctmark{、}% \def\gbpunctcomma{,}% \def\gbpunctcommalanen{\addcomma\addspace}% \def\gbpunctcolon{:}% \def\gbpunctcolonlanen{\addcolon\addspace}% \def\gbpunctsemicolon{;}% \def\gbpunctttl{《}% \def\gbpunctttr{》} \def\gbpunctprl{(}% \def\gbpunctprr{)} \def\execerjpuncten{% \def\gbpunctdot{\adddot}% \def\gbpunctmark{\addcomma\addspace}% \def\gbpunctcomma{\addcomma\addspace}% \def\gbpunctcommalanen{\addcomma\addspace}% \def\gbpunctcolon{\addcolon\addspace}% \def\gbpunctcolonlanen{\addcolon\addspace}% \def\gbpunctsemicolon{\addsemicolon\addspace}% \def\gbpunctttl{《}% \def\gbpunctttr{》}% } %================================================== %为标注和文献表中标点格式,重设and本地化字符串 %================================================== \def\str@editorcn{编} \def\str@editorscn{编} \DefineBibliographyStrings{english}{ and = { and},%and后面的空格在finalnamedelim已经加过了,所以这里去掉20191009 andcn = {\gbpunctmark\unspace},%\gbpunctmark incn={\str@incn}, bytranslatorcn= {\str@bytranslator}, %将trans. by 改成 译 %andotherscn={等}, %mathesiscn={[硕士学位论文]}, %phdthesiscn={[博士学位论文]}, } %================================================== %设置一些标点格式为中文的标点 %================================================== \DeclareFieldFormat{titlecase}{\iffieldequalstr{userd}{chinese}{#1}{\capitalisewords{#1}}} \DeclareFieldFormat*{title}{\iffieldequalstr{userd}{chinese}{\gbpunctttl#1\gbpunctttr}{#1\isdot}} \DeclareFieldFormat[book,collection]{title}{\iffieldequalstr{userd}{chinese}{\gbpunctttl#1\gbpunctttr}{\textit{#1}\isdot}} \DeclareFieldFormat[article,inbook,inproceedings,incollection]{title}{\iffieldequalstr{userd}{chinese}{\gbpunctttl#1\gbpunctttr}{\mkbibquote{#1}\isdot}} \DeclareFieldFormat*{journaltitle}{\iffieldequalstr{userd}{chinese}{\gbpunctttl#1\gbpunctttr}{\textit{#1}}}% \DeclareFieldFormat{booktitle}{% \iffieldequalstr{userd}{chinese}{\gbpunctttl#1\gbpunctttr}{\textit{#1}}} \renewcommand*{\revsdnamepunct}{\iffieldequalstr{userd}{chinese}{\gbpunctcomma}{\gbpunctcommalanen}}%%来源biblatex.def \DeclareDelimFormat*{multinamedelim}{\iffieldequalstr{userd}{chinese}{\gbpunctmark}{\gbpunctcommalanen}}%\addcomma\addspace \DeclareDelimFormat{finalnamedelim}{% %\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}% %\addspace% \edef\userfieldabcde{userd}% \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}% \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}% \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}% \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}% \ifcase\value{gbcitelocalcase}% \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andincitecn}}{}% \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andkr}}{}% \iffieldequalstr{\userfieldabcde}{japanese}{\bibstring{andjp}}{}% \iffieldequalstr{\userfieldabcde}{english}{\space\bibstring{andincite}\space}{}% \iffieldequalstr{\userfieldabcde}{french}{\bibstring{and}}{}% \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{and}}{}% %\space% \or% \bibstring{andincitecn}\space% \or% \bibstring{andincite}\space% \fi} \DeclareDelimFormat[bib,biblist]{finalnamedelim}{% % \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}% % \addspace% \edef\userfieldabcde{userd}% \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}% \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}% \ifcurrentname{author}{\edef\userfieldabcde{userf}}{}% \ifcurrentname{bookauthor}{\edef\userfieldabcde{userb}}{}% \ifcase\value{gbbiblocalcase}% \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andcn}}{}% \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andkr}}{}% \iffieldequalstr{\userfieldabcde}{japanese}{\bibstring{andjp}}{}% \iffieldequalstr{\userfieldabcde}{english}{\bibstring{and}}{}% \iffieldequalstr{\userfieldabcde}{french}{\bibstring{and}}{}% \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{and}}{}% \space% \or% \bibstring{andcn}\space% \or% \bibstring{and}\space% \fi} \DeclareDelimFormat{nameyeardelim}{\iffieldequalstr{userd}{chinese}{\gbpunctcomma}{\gbpunctcommalanen}}%\addcomma\addspace \DeclareDelimFormat[bib,biblist]{nameyeardelim}{\iffieldequalstr{userd}{chinese}{\gbpunctcomma}{\gbpunctcommalanen}}%\addcomma\addspace \renewcommand*{\newunitpunct}{\iffieldequalstr{userd}{chinese}{\gbpunctcomma}{\gbpunctcommalanen}}%\addcomma\space %, \renewcommand*{\finentrypunct}{% \printdelim{finalpunct}} %调整标注的注释中的条目结尾标点 \DeclareDelimFormat{finalpunct}{\iffieldequalstr{userd}{chinese}{\gbpunctdot}{\adddot}} \DeclareDelimFormat[fullinnercite]{finalpunct}{} \DeclareDelimFormat{bibpagespunct}{% \iffieldequalstr{userd}{chinese}{\unspace\gbpunctcomma}{\unspace\gbpunctcommalanen}}% %出版项中:出版社地址后面的标点 \renewcommand{\publocpunct}{% \iffieldequalstr{userd}{chinese}{\gbpunctcolon}{\addcolon\addspace}} %调整出版社与年份之间的标点 \renewcommand{\pubdatadelim}{% \iffieldequalstr{userd}{chinese}{\iffieldundef{year}{}{\setunit*{\gbpunctcomma}}}{\setunit*{\addcomma\space}}}% \renewcommand{\locnopubdelim}{% \iffieldequalstr{userd}{chinese}{\iffieldundef{year}{}{\setunit*{\gbpunctcomma}}}{\setunit*{\addcomma\space}}}% %编者与编者类型之间的标点 \DeclareDelimFormat{editortypedelim}{\iffieldequalstr{userd}{chinese}{}{\addcomma\space}} \DeclareDelimFormat{authotitledelim} {% \iffieldequalstr{userd}{chinese}{\gbpunctcolon}{\addperiod\space}% } \DeclareListFormat{journallocation}{% \usebibmacro{list:delim}{#1}% \gbpunctprl#1\gbpunctprr} %================================================== %调整部分域的输出格式 %================================================== \DeclareFieldFormat{pages}{%%前面引导页码的pp.等字符 \ifpages{#1}{% \iffieldequalstr{userd}{chinese}{% \printtext{\bibstring{serialcn} #1\addthinspace 页}}% {\mkpageprefix[bookpagination]{#1}}}{#1}} \renewbibmacro*{institution+location+date}{\bibpubfont%当没有institution时不处理。 {\printlist{location}%%加了一个编组避免\usebibmacro{date}把month和day信息去掉 \iflistundef{institution} {\locnopubdelim} {\setunit*{\publocpunct}}% \printlist{institution}% \pubdatadelim% \usebibmacro{date}% %\newunit }} %重新调整输出编者的类型 % 责任者如果没有author用editor或translator替代 % 20210521 v1.0y hzz %专著如果责任者是editor那么不用输出类型信息 \renewbibmacro*{editor+others}{% \ifboolexpr{ test \ifuseeditor and not test {\ifnameundef{editor}} } {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames{editor}% \setunit{\printdelim{editortypedelim}}% \usebibmacro{editor+othersstrg}% \usebibmacro{bbx:savehash}}% \clearname{editor}% \setunit{\printdelim{nameyeardelim}}}% {\global\undef\bbx@lasthash \usebibmacro{labeltitle}% \setunit*{\printdelim{nonameyeardelim}}}% \usebibmacro{date+extradate}} \renewbibmacro*{editor}{% \ifboolexpr{ test \ifuseeditor and not test {\ifnameundef{editor}} } {\printnames{editor}% \setunit{\printdelim{editortypedelim}}% \usebibmacro{editor+othersstrg}% %\clearname{editor}% }% {}% } \renewbibmacro*{editor+othersstrg}{% \iffieldundef{editortype} {\ifboolexpr{ test {\ifnumgreater{\value{editor}}{1}} or test {\ifandothers{editor}} } {\def\abx@tempa{editors}} {\def\abx@tempa{editor}}} {\ifboolexpr{ test {\ifnumgreater{\value{editor}}{1}} or test {\ifandothers{editor}} } {\edef\abx@tempa{\thefield{editortype}s}} {\edef\abx@tempa{\thefield{editortype}}}}% \let\abx@tempb=\empty \ifnamesequal{editor}{translator} {\appto\abx@tempa{tr}% \appto\abx@tempb{\clearname{translator}}} {}% \ifnamesequal{editor}{commentator} {\appto\abx@tempa{co}% \appto\abx@tempb{\clearname{commentator}}} {\ifnamesequal{editor}{annotator} {\appto\abx@tempa{an}% \appto\abx@tempb{\clearname{annotator}}} {}}% \ifnamesequal{editor}{introduction} {\appto\abx@tempa{in}% \appto\abx@tempb{\clearname{introduction}}} {\ifnamesequal{editor}{foreword} {\appto\abx@tempa{fo}% \appto\abx@tempb{\clearname{foreword}}} {\ifnamesequal{editor}{afterword} {\appto\abx@tempa{af}% \appto\abx@tempb{\clearname{afterword}}} {}}}% \ifbibxstring{\abx@tempa} {\printtext[editortype]{% \iffieldequalstr{userd}{chinese}{\bibstring{\abx@tempa cn}}{\bibstring{\abx@tempa}}% }\abx@tempb} {\usebibmacro{editorstrg}}} \DeclareDelimFormat[footfullcite,bib,biblist]{andothersdelim}{} %去掉译前的标点 \renewbibmacro*{name:andothers}{\bibauthorfont% \ifboolexpr{test {\ifnumequal{\value{listcount}}{\value{liststop}}} and test \ifmorenames} {\ifnumgreater{\value{liststop}}{1}%注意这里试图去区分姓名总数大于1的情况,当姓名总数大于1时,最后一个姓名后面先加入一个\finalandcomma {}{}%\finalandcomma,目前国标没有这样的区分要求,如果有需要也是可以这么去做的。 \printdelim{andothersdelim}\printdelim{strandothersdelim}}% {}% } %增加年字 \renewbibmacro*{date}{% \usebibmacro{bbx:ifmergeddate}% {}% {\iffieldequalstr{userd}{chinese}{% \ifboolexpr{test {\ifentrytype{article}} or test {\ifentrytype{inproceedings}} or test {\ifentrytype{archive}} or test {\ifentrytype{online}} or test {\ifentrytype{unpublished}}} {\printtext{\blx@gbdatecn{}{}}}% {\printdate\iffieldundef{year}{}{\iffieldint{year}{年}{}}}% }{\ifentrytype{archive}{\printtext{\blx@gbdateen{}{}}}{\printdate}}% }% }% \newrobustcmd*{\blx@gbdatecn}[3][]{% \dateeraprintpre{#2#3year}% \iffieldundef{#2#3year}{}{\blx@imc@forcezerosy{\thefield{#2#3year}年}}\ifblank{#1}{}{\printfield{#1}}% \iffieldundef{#2#3month}{}{{\thefield{#2#3month}}月}% \iffieldundef{#2#3day}{}{{\thefield{#2#3day}}日}} \newrobustcmd*{\blx@gbdateen}[3][]{% \mkbibdateen{#2#3year}{#2#3month}{#2#3day}% } \newrobustcmd*{\mkbibdateen}[3]{% \iffieldundef{#2} {} {\mkbibmonth{\thefield{#2}}% \iffieldundef{#1}{}{\space}}% \iffieldundef{#3} {} {{\thefield{#3}}% \iffieldundef{#2}{}{\addcomma\space}}% \iffieldbibstring{#1} {\bibstring{\thefield{#1}}} {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}} \renewbibmacro*{newsdate}{%% \ifboolexpr{% test{\iffieldequalstr{userd}{chinese}}% }% {\printtext{\blx@gbdatecn{}{}}}% {\printtext{\blx@gbdate{}{}}}%% } % \renewbibmacro*{modifydate}{%新增加一个带括号的日期,用于表示电子资源的更新和修改日期,而公告日期则按日期格式 \ifboolexpr{% test{\iffieldequalstr{userd}{chinese}}% }% {% \printtext{\blx@gbdatecn{}{}}% }% {\ifboolexpr{% test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{eventday}}% }% {}%更新或修改日期通常有day信息 {\iffieldundef{year}{% \iffieldundef{endyear}{\iffieldundef{eventyear}{}{\printtext{\gbleftparen}\printeventdate\printtext{\gbrightparen}}}% {\printtext{\gbleftparen}\printenddate\printtext{\gbrightparen}}% }{\iffieldequalstr{year}{}{%因为year存在,但为空 }{\printtext{\gbleftparen}\blx@gbdate{}{}\printtext{\gbrightparen}}% }}% }}% \renewbibmacro*{url+urldate}{% \newunit\usebibmacro{url}\newunit% \printtext{\blx@gbdatecn{}{url}}% } % % 调整页码前的标点和去掉期刊文章等页码后面的标点 % \renewbibmacro*{note+pages}{%源来自standard.bbx \iffieldundef{postnote}{\iffieldundef{pages}{}{% \setunit{\bibpagespunct}% \printfield{pages}}}{}% } % % 调整页码的格式,即chapter+pages格式 % \renewbibmacro*{chapter+pages}{% \iffieldundef{postnote}{\iffieldundef{pages}{}{% \setunit{\bibpagespunct}% \printfield{pages}}}{}% } % % 修改number和volume的格式 % \newcounter{numberwithoutzero} \DeclareFieldFormat[article,periodical]{number}% {\iffieldequalstr{userd}{chinese}{% \iffieldint{number}{\setcounter{numberwithoutzero}{#1}\printtext{\bibstring{serialcn}\addthinspace\arabic{numberwithoutzero}\addthinspace 期}}% {\printtext{\bibstring{serialcn}\addthinspace#1\addthinspace 期}}% }% {\bibstring{number}~#1}}%\kern\z@ \DeclareFieldFormat[article,periodical,newspaper]{volume}% {\iffieldequalstr{userd}{chinese}{% \iffieldint{volume}% {\bibstring{serialcn}#1\bibstring{volumecn}}% {#1}% }% {\bibstring{volume}~#1}% } \DeclareFieldFormat[article,periodical,newspaper]{series} {\gbpunctprl#1\gbpunctprr}% % % 调整期刊名的格式 % % 原理方法:因为作者年制年份提到前面,因此涉及到期刊名与后面的卷期的关系。 % v1.0k,20180425,增加了字体控制命令,hzz \renewbibmacro*{journal+issuetitle}{\bibpubfont%源来自standard.bbx \usebibmacro{journal}% \iffieldequalstr{userd}{chinese}{}{\newunit}% \iffieldundef{series}% {}% {\printfield{series}}% \iflistundef{location}{}{\printlist[journallocation]{location}}% \usebibmacro{issue+date}% \usebibmacro{volume+number+eid}%把卷期放到年份后面 } % % 调整期刊卷和期的格式 % \renewbibmacro*{volume+number+eid}{%源来自standard.bbx \iffieldequalstr{userd}{chinese}% {\iffieldundef{volume}{}{\printfield{volume}}% \iffieldundef{number}{}{\printfield{number}}}%区别于顺序编码制 {\newunit\printfield{volume}% \newunit\printfield{number}% \setunit{\addcomma\space}% \printfield{eid}}% } % % 重设title的输出 % % 20180425,v1.0k,为标题增加字体控制命令,Hu Zhenzhen % 原理方法:将文献类型标识符输出出去,原输出来自biblatex.def文件 % 利用toggle做标识符是否输出的判断 \renewbibmacro*{title}{% \ifboolexpr{% test{\iffieldundef{title}}% and test{\iffieldundef{subtitle}}% }% {}% {\setunit{\iffieldequalstr{userd}{chinese}{\gbpunctcolon}{\gbpunctcolonlanen}}\printtext[title]{\bibtitlefont%增加字体控制命令%增加了标点: \printfield[titlecase]{title}% \ifboolexpr{test {\iffieldundef{subtitle}}}%这里增加了对子标题的判断,解决不判断多一个点的问题 {}{\setunit{\subtitlepunct}% \printfield[titlecase]{subtitle}}% \iffieldundef{titleaddon}{}%判断一下titleaddon,否则直接加可能多一个空格 {\setunit{\subtitlepunct}\printfield{titleaddon}}% \iftoggle{bbx:gbtype}{% \iffieldundef{entrysubtype}{\printfield[gbtypeflag]{usera}}%在标题后直接给出文献标识字母,判断一下,是否是报纸和标准 {\iffieldequalstr{entrysubtype}{standard}{\printfield[gbtypeflags]{usera}}%判断是否为标准 {\iffieldequalstr{entrysubtype}{news}{\printfield[gbtypeflagn]{usera}}% 判断是否为报纸 {\printfield[gbtypeflag]{usera}}}% 其它 }}{}% }% }} \renewbibmacro*{labeltitle}{% \iffieldundef{label} {\iffieldundef{shorttitle}%author,editor,translator不存在时title会变到labeltitle。 {\ifboolexpr{test{\iffieldequalstr{entrysubtype}{classic}}}% {\iffieldundef{origyear}{}{\printfield{origyear}}}{}\printfield{title}% \clearfield{title}} {\printfield[title]{shorttitle}}} {\printfield{label}}} \renewbibmacro*{maintitle+title}{% \iffieldsequal{maintitle}{title} {\clearfield{maintitle}% \clearfield{mainsubtitle}% \clearfield{maintitleaddon}} {\iffieldundef{maintitle} {} {\usebibmacro{maintitle}% \newunit\newblock \iffieldundef{volume} {} {\printfield{volume}% \printfield{part}% \setunit{\addcolon\space}}}}% \usebibmacro{title}% \ifboolexpr{test{\ifentrytype{book}} and (not test{\iffieldundef{volume}})}%判断一下book类有没有volume {\printfield{volume}}{}% \ifboolexpr{(test{\ifentrytype{archive}} or test{\ifentrytype{online}}) and (not test{\iffieldundef{number}})}%判断一下archive类有没有number {\printfield{number}}{}% \newunit} \setlength{\bibitemindent}{2\ccwd} % bibitemindent表示一条文献中第一行相对后面各行的缩进 \setlength{\bibhang}{0pt} % 作者年制中 bibhang 表示的各行起始位置到页 % 边的距离,顺序编码制中 % bibhang+labelnumberwidth 表示各行起始位置 % 到页边的距离 \renewbibmacro*{translator+others}{% \ifboolexpr{ test \ifusetranslator and not test {\ifnameundef{translator}} } {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\renewcommand{\aftertransdelim}{\adddot\addspace}\printnames{translator}% \usebibmacro{bbx:savehash}}% \clearname{translator}% \setunit{\printdelim{nameyeardelim}}}% {\global\undef\bbx@lasthash \usebibmacro{labeltitle}% \setunit*{\printdelim{nonameyeardelim}}}% \usebibmacro{date+extradate}} \renewbibmacro*{bybookauthor}{% \ifnameundef{bookauthor}% {\ifnameundef{editor}% {}% {\ifnamesequal{author}{editor}% {\iftoggle{bbx:gbnosameeditor}{\clearname{editor}}{\usebibmacro{editor}}% }{\usebibmacro{editor}}}% }% {\ifnamesequal{author}{bookauthor}% {\iftoggle{bbx:gbnosameeditor}{\clearname{bookauthor}}{\printnames{bookauthor}}% }{\printnames{bookauthor}}% }% } \newbibmacro*{maintitle+booktitle}{% \iffieldundef{maintitle} {} {\usebibmacro{maintitle}% \iffieldundef{volume} {} {\printfield{volume}% \printfield{part}}}% \usebibmacro{booktitle}% } \renewbibmacro*{booktitle}{% \ifboolexpr{ test {\iffieldundef{booktitle}} and test {\iffieldundef{booksubtitle}} } {} {\printtext[booktitle]{\bibtitlefont% \printfield[titlecase]{booktitle}% \iffieldundef{booksubtitle}{}% {\setunit{\subtitlepunct}% \printfield[titlecase]{booksubtitle}% \setunit{\subtitlepunct}% \printfield{booktitleaddon}} }% }} \renewbibmacro*{in:}{% \iftoggle{bbx:gbpunctin}{\setunit{\gbpunctcomma}}%\addthinspace {\iffieldequalstr{userd}{chinese}% {\setunit{\gbpunctcomma}\ifboolexpr{test {\ifnameundef{bookauthor}} and test{\ifnameundef{editor}}}% {}{\printtext{\bibstring{incn}}}}% {\printtext{\bibstring{in}}}% }}%\newunit\newblock\intitlepunct \newbibmacro*{inbook:volume+number}{% \iffieldundef{volume}{}{\printfield{volume}}% \iffieldundef{number}{}{\printfield{number}}% } % % 增加inbook:parent用于辅助crossref传统功能的实现 % 用在{crosscite}宏中 % 20210216,v1.0w,hzz \newbibmacro*{inbook:parent}{% \usebibmacro{bybookauthor}% \ifnameundef{bookauthor}{% \ifnameundef{editor}{}{\printdelim{authotitledelim}}% }{\printdelim{authotitledelim}}% \ifboolexpr{test{\iffieldequalstr{entrysubtype}{classic}}}{} {\iffieldundef{series}{}{\usebibmacro{series+number}\setunit{\addcolon\addspace}}}%为处理一些存在series的情况而增加 \usebibmacro{maintitle+booktitle}% \usebibmacro{inbook:volume+number}% \ifboolexpr{test{\iffieldequalstr{entrysubtype}{classic}}}% {\iffieldundef{series}{}{\newunit\usebibmacro{series+number}}}{}% \newunit\newblock% \ifboolexpr{test{\iffieldequalstr{entrysubtype}{classic}}}{}{\printfield{edition}}% \newunit \newunit\newblock \usebibmacro{publisher+location+date}% \ifboolexpr{test{\iffieldequalstr{entrysubtype}{classic}}}{\printfield{edition}}{}% } \DeclareFieldFormat{part}{#1}% physical part of a logical volume % % 专著中的析出文献的格式修改 % \DeclareBibliographyDriver{inbook}{%源来自standard.bbx \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% % \ifboolexpr{ % test {\ifnameundef{author}} % and % test {\ifnameundef{translator}} % }{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \iffieldequalstr{entrysubtype}{classic}% {\iffieldundef{part}{}{\printfield{part}}% }{}% \newunit% \iffieldequalstr{entrysubtype}{letter}% {\iffieldundef{eventyear}% {\iffieldundef{origyear}{}{\printtext{\blx@gbdatecn{}{orig}}}}% {\printtext{\blx@gbdatecn{}{event}}}% }{} \usebibmacro{in:}% \usebibmacro{crosscite}{inbook:parent}% \usebibmacro{chapter+pages}% \usebibmacro{doi+eprint+url}%移到上面来 \newunit\newblock \iftoggle{bbx:isbn} {\printfield{isbn}} {}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{annotation}\usebibmacro{finentry}} \DeclareBibliographyDriver{book}{%源来自standard.bbx文件 \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \ifboolexpr{not (test{\ifnameundef{author}} and test{\ifnameundef{editor}} and % test{\ifnameundef{translator}}) and test{\iffieldequalstr{entrysubtype}{classic}}}%author,editor,translator不存在时title会变到labeltitle。 {\iffieldundef{origyear}{}{\printfield{origyear}}}{}% \usebibmacro{maintitle+title}% \iftoggle{bbx:gbstrict}{}{% \newunit \printlist{language}% \newunit\newblock% \usebibmacro{byauthor}% \newunit\newblock}% \usebibmacro{byeditor+others}% \newunit% \ifboolexpr{test{\iffieldequalstr{entrysubtype}{classic}}}{}{\printfield{edition}}% \newunit\newblock%% \iftoggle{bbx:gbstrict}{}{% \iffieldundef{maintitle}% {\printfield{volume}% \printfield{part}}% {}% \newunit% \printfield{volumes}% \newunit\newblock% \usebibmacro{series+number}}% \newunit\newblock% \usebibmacro{publisher+location+date}% \ifboolexpr{test{\iffieldequalstr{entrysubtype}{classic}}}{\printfield{edition}}{}% \usebibmacro{chapter+pages}% \iffieldundef{url}{}{%当没有网址时也不输出 \usebibmacro{modifydate}}%带括号的修改或更新日期, \usebibmacro{doi+eprint+url}%从下面移动到上面来,因为gbt2015的url需直接放在页码后面。 \newunit\newblock% \printfield{pagetotal}% \newunit\newblock% \iftoggle{bbx:isbn} {\printfield{isbn}} {}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{annotation}% \usebibmacro{finentry}% }% \renewbibmacro*{doi+eprint+url}{% \iftoggle{bbx:eprint} {\iffieldundef{eprint}{}{\newunit\usebibmacro{eprint}}}%必须要做域判断否则容易产生多余的标点 {}% \iftoggle{bbx:url} {\iffieldundef{url}{}{\usebibmacro{url+urldate}}} {} \iftoggle{bbx:doi} {\printfield{doi}} {}} \DeclareBibliographyDriver{manual}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \iftoggle{bbx:gbstrict}{}{% \newunit% \printlist{language}% \newunit\newblock \usebibmacro{byauthor}}% \newunit\newblock \usebibmacro{byeditor+others}%增加的译者信息 \newunit\newblock \iftoggle{bbx:gbfieldtype}{% \printfield{type}% \setunit*{\addspace}}{}% \ifboolexpr{test{\ifentrytype{archive}}}% {}{\printfield{number}}% \newunit\newblock \printfield{version}% \newunit \printfield{note}% \newunit\newblock \usebibmacro{institution+location+date}% \ifboolexpr{test{\ifentrytype{archive}}}% {\newunit\printfield{number}}{}% \usebibmacro{chapter+pages}% \iffieldundef{url}{}{%当没有网址时也不输出修改或更新日期 \usebibmacro{modifydate}}%修改或更新日期为带括号的时间 \usebibmacro{doi+eprint+url}% \newunit \printfield{pagetotal}% \newunit\newblock \iftoggle{bbx:isbn} {\printfield{isrn}} {}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{annotation}\usebibmacro{finentry}} % % 期刊文章,连续出版物中的析出文献的格式 % \DeclareBibliographyDriver{article}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% \ifnameundef{author}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \iftoggle{bbx:gbstrict}{}{% \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}% % \iffieldequalstr{entrysubtype}{news}{}%当是新闻时不输出修改或更新日期 % {% % \iffieldundef{url}{}{%当没有网址时也不输出 % \iftoggle{bbx:url}{%当url选项为false时,也不输出 % \usebibmacro{modifydate}}{}}}%带括号的修改或更新日期, \usebibmacro{doi+eprint+url}%从后面移上来,调整url和页码之间的位置 \newunit\newblock \iftoggle{bbx:isbn} {\printfield{issn}} {}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{finentry}\usebibmacro{annotation}} %===================================================================== %设置再次引用的驱动格式 %===================================================================== \DeclareBibliographyAlias{citeseen:newspaper}{citeseen:article}% \DeclareBibliographyAlias{citeseen:inproceedings}{citeseen:inbook}%会议论文文献类型驱动 \DeclareBibliographyAlias{citeseen:conference}{citeseen:inbook}%会议论文文献类型驱动 \DeclareBibliographyAlias{citeseen:incollection}{citeseen:inbook}%文集中析出文献类型驱动 \DeclareBibliographyAlias{citeseen:collection}{citeseen:book}%%文集类型驱动 \DeclareBibliographyAlias{citeseen:proceedings}{citeseen:book}%会议论文集文献类型驱动 \DeclareBibliographyAlias{citeseen:thesis}{citeseen:manual}%学位论文驱动 \DeclareBibliographyAlias{citeseen:unpublished}{citeseen:manual}%其它类型驱动 \DeclareBibliographyAlias{citeseen:archive}{citeseen:manual} % % book条目类的驱动 % \DeclareBibliographyDriver{citeseen:book}{%源来自standard.bbx文件 \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{maintitle+title}% \usebibmacro{chapter+pages}% \usebibmacro{finentry}} % % 期刊文章,连续出版物中的析出文献的格式 % \DeclareBibliographyDriver{citeseen:article}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% \ifnameundef{author}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \newunit\newblock% \usebibmacro{journal+issuetitle}% \usebibmacro{note+pages}% \usebibmacro{finentry}} % % 连续出版物的驱动 % \DeclareBibliographyDriver{citeseen:periodical}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{editor}% \newunit\newblock %删除上面一行,添加这一行 \usebibmacro{title+issuetitle}% \usebibmacro{finentry}} % % 在线文献驱动 % \DeclareBibliographyDriver{citeseen:online}{%源来自standard.BBX \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \usebibmacro{finentry}} % % 报告类型驱动 % 当有网址无出版项时,用online输出 % \DeclareBibliographyDriver{citeseen:report}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \usebibmacro{chapter+pages}% \usebibmacro{finentry}} % % 论文、手册类型驱动 % 2016-11-11,增加了译者信息 % \DeclareBibliographyDriver{citeseen:manual}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \usebibmacro{chapter+pages}% \iffieldundef{url}{}{%当没有网址时也不输出修改或更新日期 \usebibmacro{modifydate}}%修改或更新日期为带括号的时间 \usebibmacro{doi+eprint+url}% \newunit \printfield{pagetotal}% \usebibmacro{finentry}} % % 增加inbook:parent用于辅助crossref传统功能的实现 % 用在{crosscite}宏中 % 20210216,v1.0w,hzz \newbibmacro*{citeseen:inbook:parent}{% \usebibmacro{bybookauthor}% \ifnameundef{bookauthor}{% \ifnameundef{editor}{}{\printdelim{authotitledelim}}% }{\printdelim{authotitledelim}}% \iffieldundef{series}{}{\usebibmacro{series+number}\setunit{\addcolon\addspace}}%为处理一些存在series的情况而增加 \usebibmacro{maintitle+booktitle}% \usebibmacro{inbook:volume+number}% } % % 专著中的析出文献的格式修改 % \DeclareBibliographyDriver{citeseen:inbook}{%源来自standard.bbx \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/translator+others}% \ifboolexpr{ test {\ifnameundef{author}} and test {\ifnameundef{translator}} }{}{\setunit{\labelnamepunct}\newblock}%这一段用于去除作者不存在时多出的标点 \usebibmacro{title}% \usebibmacro{in:}% \usebibmacro{crosscite}{citeseen:inbook:parent}% \usebibmacro{chapter+pages}% \usebibmacro{finentry}}