diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx')
-rw-r--r-- | Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx | 269 |
1 files changed, 211 insertions, 58 deletions
diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx index e5e0cb13bec..f34aa1aff85 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.bbx @@ -10,15 +10,18 @@ %% 2016/11/14 v1.0c %% 2016/11/24 v1.0d %% 2016/12/07 v1.0e +%% 2016/12/31 v1.0f +%% 2017/02/26 v1.0g %% E-mail: hzzmail@163.com %% Released under the LaTeX Project Public License v1.3c or later %% --------------------------------------------------------------- %% -\ProvidesFile{gb7714-2015ay.bbx}[2016/12/07 v1.0e biblatex bibliography style] +\ProvidesFile{gb7714-2015ay.bbx}[2017/02/26 v1.0g biblatex bibliography style] %===================================================================== %加载标准样式 \RequireBibliographyStyle{authoryear} % Load the standard style to avoid copy-pasting unnecessary material +\RequirePackage{xstring}%为兼容texlive2015的biblatex3.0不加载xstring包的问题 %===================================================================== %增加一些功能函数 @@ -44,15 +47,16 @@ \expandafter\testCJKfirstchar\tempa&} %判断是否是标准 -\providetoggle{ifnoteeqstandard} -\def\testifnoteeqstd{% -\iffieldundef{note}{\togglefalse{ifnoteeqstandard}}%判断一下,是否是报纸和标准 - {\def\comparetmp{standard}\edef\comparetmpb{\thefield{note}}% - \ifx\comparetmp\comparetmpb% - \toggletrue{ifnoteeqstandard}% - \else% - \togglefalse{ifnoteeqstandard}% - \fi}} +%\providetoggle{ifnoteeqstandard} +%\def\testifnoteeqstd{% +%\iffieldundef{note}{\togglefalse{ifnoteeqstandard}}%判断一下,是否是报纸和标准 +% {\def\comparetmp{standard}\edef\comparetmpb{\thefield{note}}% +% \ifx\comparetmp\comparetmpb% +% \toggletrue{ifnoteeqstandard}% +% \else% +% \togglefalse{ifnoteeqstandard}% +% \fi}} +%\iffieldequalstr{note}{standard}{true}{false} %可以利用这一函数代替 %用于解析连续出版物,2个卷期的情况 \def\multivolumeparsetoparts#1/#2{\def\multivolumefirst{#1}\def\multivolumesecond{#2}} @@ -102,12 +106,11 @@ %===================================================================== %设置宏包选项 +\iftoggle{iftexlivesix}{% Alter settings that carry through from biblatex +%biblatex3.3版后(比如texlive2016中的3.4版)的使用方式 %增加标签对齐选项,right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 %因为在作者年制中,不需要使用,这里也增加,为了与顺序年制的兼容性考虑。 \DeclareBibliographyOption[string]{align}[right]{}% - -\iftoggle{iftexlivesix}{% Alter settings that carry through from biblatex -%biblatex3.3版后(比如texlive2016中的3.4版)的使用方式 \ExecuteBibliographyOptions{ useprefix = true, %名字的信息包括前缀 %firstinits = true, %名字有缩写,参考3.1.2.3 Internal @@ -119,6 +122,9 @@ minbibnames=3, }} {%biblatex3.3版前(比如texlive2015中的3.0版)的使用方式 +%增加标签对齐选项,right是默认的右对齐,left是左对齐,gb7714-2015是项对齐方式 +%因为在作者年制中,不需要使用,这里也增加,为了与顺序年制的兼容性考虑。 +\DeclareBibliographyOption{align}[right]{}% \ExecuteBibliographyOptions{ useprefix = true, %名字的信息包括前缀 firstinits = true, %名字有缩写,参考3.1.2.3 Internal @@ -171,16 +177,32 @@ backrefpages = {引用页:}, \step[fieldsource=title,match=\regexp{[a-zA-Z]},final] \step[fieldsource=author,match=\regexp{佚名}, replace={NOAUTHOR}] } - \map{ %增加文献标识符如[M],[J]等,下面首先生成这一信息 - %\perdatasource{examples.bib} + \map{ \pertype{article} + \step[fieldset=usera, fieldvalue={J}] + } + \map{ \pertype{periodical} \step[fieldset=usera, fieldvalue={J}] + \step[fieldsource=author] %有时会把version和edition混淆,这里处理后就没有这个问题,可以直接用version + \step[fieldset=editor, origfieldval] + } + \map{ + \pertype{newspaper}%增加一个新闻报纸的类型newspaper + \step[fieldset=usera, fieldvalue={N}]%因为没有专门的驱动,这句的目的是定义一个usera域,方便映射为article后判断 + \step[fieldset=note, fieldvalue=news] } \map{ \pertype{book} \pertype{inbook} \step[fieldset=usera, fieldvalue={M}] + \step[fieldsource=version] %有时会把version和edition混淆,这里处理后就没有这个问题,可以直接用version + \step[fieldset=edition, origfieldval] + } + \map{ + \pertype{standard}%兼容老的standard类型 + \step[fieldset=usera, fieldvalue={S}]%因为没有专门的驱动,这句的目的是定义一个usera域,方便映射为book和inbook后判断 + \step[fieldset=note, fieldvalue=standard] } \map{ \pertype{patent} @@ -188,7 +210,7 @@ backrefpages = {引用页:}, } \map{ \pertype{inproceedings} - \pertype{conference} + \pertype{conference}%兼容老的conference类型 \step[fieldset=usera, fieldvalue={C}] \step[fieldsource=institution] %有时会把version和edition混淆,这里处理后就没有这个问题,可以直接用version \step[fieldset=publisher, origfieldval] @@ -205,14 +227,21 @@ backrefpages = {引用页:}, } \map{ \pertype{report} + \pertype{techreport}%兼容老的techreport类型 \step[fieldset=usera, fieldvalue={R}] + \step[fieldsource=publisher] %有时会把publisher和institution混淆,这里处理后就没有这个问题,可以直接用version + \step[fieldset=institution, origfieldval] } \map{ \pertype{thesis} + \pertype{mastersthesis}%兼容老的mastersthesis和phdthesis类型 + \pertype{phdthesis} \step[fieldset=usera, fieldvalue={D}] } \map{ \pertype{online} + \pertype{electronic}%兼容老的electronic类型 + \pertype{www}%兼容老的www类型 \step[fieldset=usera, fieldvalue={EB}] } \map{ @@ -262,7 +291,105 @@ backrefpages = {引用页:}, \map{%将没有设置的userb设置成en,即认为不是中文的就是英文的。 \step[fieldset=userb,fieldvalue={en}] } + } } + +\iftoggle{iftexlivesix}{ + \DeclareStyleSourcemap{ + \maps[datatype=bibtex]{ + \map{%尝试未定义数据模型的newspaper类型映射为article,newspaper完全是针对gb7714的新类型,在biblatex中完全没有定义 + %但从实践看,并没有什么影响,映射过来就可以了。 + \step[typesource=newspaper, typetarget=article, final] + } + \map{%尝试未定义数据模型的standard类型映射为book,standard类型在blx-dm中有出现,但仅定义了类型,域和约束等都没有定义 + \step[fieldsource=booktitle,final]%当存在booktitle域是映射为inbook + \step[typesource=standard, typetarget=inbook, final] + } + \map{%尝试未定义数据模型的standard类型映射为book,standard类型在blx-dm中有出现,但仅定义了类型,域和约束等都没有定义 + \step[typesource=standard, typetarget=book, final]%当不存在booktitle域是映射为book + } + \map{%先于标准样式的driver层映射,将其先映射过来,并取消type设置 + \step[typesource=mastersthesis, typetarget=thesis, final] + %\step[fieldset=type, fieldvalue=mathesis] + } + \map{%先于标准样式的driver层映射,将其先映射过来,并取消type设置 + \step[typesource=phdthesis, typetarget=thesis, final] + %\step[fieldset=type, fieldvalue=phdthesis] + } + \map{%先于标准样式的driver层映射,将其先映射过来,并取消type设置 + \step[typesource=techreport, typetarget=report, final] + %\step[fieldset=type, fieldvalue=techreport] + } + \map[overwrite, foreach={title,booktitle,journaltitle,journal,publisher,address,location,institution,organization}]{ + \step[fieldsource=\regexp{$MAPLOOP}, match=\regexp{([^\\])\#}, replace=\regexp{$1\\\#}] + } + \map[overwrite, foreach={title,booktitle,journaltitle,journal,publisher,address,location,institution,organization}]{ + \step[fieldsource=\regexp{$MAPLOOP}, match=\regexp{([^\\])\%}, replace=\regexp{$1\\\%}] + } + \map[overwrite, foreach={title,booktitle,journaltitle,journal,publisher,% + address,location,institution,organization}]{ + \step[fieldsource=\regexp{$MAPLOOP}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + } + } +}{ + \DeclareStyleSourcemap{ + \maps[datatype=bibtex]{ + \map{%尝试未定义数据模型的newspaper类型映射为article,newspaper完全是针对gb7714的新类型,在biblatex中完全没有定义 + %但从实践看,并没有什么影响,映射过来就可以了。 + \step[typesource=newspaper, typetarget=article, final] + } + \map{%尝试未定义数据模型的standard类型映射为book,standard类型在blx-dm中有出现,但仅定义了类型,域和约束等都没有定义 + \step[fieldsource=booktitle,final]%当存在booktitle域是映射为inbook + \step[typesource=standard, typetarget=inbook, final] + } + \map{%尝试未定义数据模型的standard类型映射为book,standard类型在blx-dm中有出现,但仅定义了类型,域和约束等都没有定义 + \step[typesource=standard, typetarget=book, final]%当不存在booktitle域是映射为book + } + \map{%先于标准样式的driver层映射,将其先映射过来,并取消type设置 + \step[typesource=mastersthesis, typetarget=thesis, final] + %\step[fieldset=type, fieldvalue=mathesis] + } + \map{%先于标准样式的driver层映射,将其先映射过来,并取消type设置 + \step[typesource=phdthesis, typetarget=thesis, final] + %\step[fieldset=type, fieldvalue=phdthesis] + } + \map{%先于标准样式的driver层映射,将其先映射过来,并取消type设置 + \step[typesource=techreport, typetarget=report, final] + %\step[fieldset=type, fieldvalue=techreport] + } + \map[overwrite]{%title,booktitle,journaltitle,journal,publisher,address,location,institution,organization + \step[fieldsource={title}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={booktitle}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={journaltitle}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={journal}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={publisher}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={address}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={location}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={institution}, match=\regexp{([^\\])\x26}, replace=\regexp{$1\\\x26}] + } + \map[overwrite]{ + \step[fieldsource={booktitle}, match=\regexp{([^\\])\#}, replace=\regexp{$1\\\#}] + } + \map[overwrite]{ + \step[fieldsource={booktitle}, match=\regexp{([^\\])\%}, replace=\regexp{$1\\\%}] + } + } + } } %===================================================================== @@ -338,21 +465,24 @@ backrefpages = {引用页:}, %修改域的格式 %新增文献类型标识符的格式 %\DeclareFieldFormat{gbtypeflag}{\nobreak\mkbibbrackets{\nobreak#1}\nobreak} + \DeclareFieldFormat{gbtypeflag}{% -\iffieldundef{url}%当存在url时,增加一个OL标识符 -{\nobreak\printtext{[}\nobreak#1\printtext{]}\nobreak}% -{\nobreak\printtext{[}\nobreak#1\printtext{\texttt{/}OL]}\nobreak}% -} +\iftoggle{bbx:url}{\iffieldundef{url}%当存在url时,增加一个OL标识符 +{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}% +{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{\texttt{/}OL]}}% +}{\nobreak\printtext{[}\nobreak#1\nobreak\printtext{]}}} + \DeclareFieldFormat{gbtypeflagn}{%用于报纸newspaper -\iffieldundef{url}%当存在url时,增加一个OL标识符 +\iftoggle{bbx:url}{\iffieldundef{url}%当存在url时,增加一个OL标识符 {\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}% {\nobreak\printtext{[}\nobreak N\printtext{\texttt{/}OL]}\nobreak}% -} -\DeclareFieldFormat{gbtypeflags}{%用于报纸newspaper -\iffieldundef{url}%当存在url时,增加一个OL标识符 +}{\nobreak\printtext{[}\nobreak N\printtext{]}\nobreak}} + +\DeclareFieldFormat{gbtypeflags}{%用于标准standard +\iftoggle{bbx:url}{\iffieldundef{url}%当存在url时,增加一个OL标识符 {\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}% {\nobreak\printtext{[}\nobreak S\printtext{\texttt{/}OL]}\nobreak}% -} +}{\nobreak\printtext{[}\nobreak S\printtext{]}\nobreak}} %重设title的输出格式,不加emph,原格式来自biblatex.def文件 %\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}} @@ -512,16 +642,19 @@ backrefpages = {引用页:}, \iffieldundef{titleaddon}{}%判断一下titleaddon,否则直接加可能多一个空格 {\setunit{\subtitlepunct}\printfield{titleaddon}}% \iffieldundef{note}{\printfield[gbtypeflag]{usera}}%在标题后直接给出文献标识字母,判断一下,是否是报纸和标准 - {\def\comparetmp{news}\def\comparetmpa{standard}\edef\comparetmpb{\thefield{note}}% - \ifx\comparetmp\comparetmpb%判断是否为报纸 - \printfield[gbtypeflagn]{usera}% - \else% - \ifx\comparetmpa\comparetmpb%判断是否为标准 - \printfield[gbtypeflags]{usera}% - \else% - \printfield[gbtypeflag]{usera}% - \fi% - \fi% + {\iffieldequalstr{note}{standard}{\printfield[gbtypeflags]{usera}}%判断是否为标准 + {\iffieldequalstr{note}{news}{\printfield[gbtypeflagn]{usera}}%判断是否为报纸 + {\printfield[gbtypeflag]{usera}}}%其它 +% \def\comparetmp{news}\def\comparetmpa{standard}\edef\comparetmpb{\thefield{note}}% +% \ifx\comparetmp\comparetmpb%判断是否为报纸 +% \printfield[gbtypeflagn]{usera}% +% \else% +% \ifx\comparetmpa\comparetmpb%判断是否为标准 +% \printfield[gbtypeflags]{usera}% +% \else% +% \printfield[gbtypeflag]{usera}% +% \fi% +% \fi% }% \iffieldundef{booktitle}{\newunit}{}%当title是析出时,不要标点 %\newunit @@ -553,12 +686,27 @@ backrefpages = {引用页:}, \iffieldundef{month}{}{\bibrangedash\printtext{\thefield{month}}% \iffieldundef{day}{}{\bibrangedash\printfield{day}}}} }% -\newbibmacro*{modifydate}{%新增加一个带括号的日期 +\newbibmacro*{modifydate}{%新增加一个带括号的日期,用于表示表示电子资源的更新和修改日期,而公告日期安按日期格式 +\iffieldundef{date}{% +\iffieldundef{enddate}{% +\printtext{% +\iffieldundef{eventyear}{}{\mkbibparens{\printtext{\printfield{eventyear}}% +\iffieldundef{eventmonth}{}{\bibrangedash\thefield{eventmonth}}% +\iffieldundef{eventday}{}{\bibrangedash\printfield{eventday}}}}% +}% +}{% +\printtext{% +\iffieldundef{endyear}{}{\mkbibparens{\printtext{\printfield{endyear}}% +\iffieldundef{endmonth}{}{\bibrangedash\thefield{endmonth}}% +\iffieldundef{endday}{}{\bibrangedash\printfield{endday}}}}% +}% +}}{% \printtext{% \iffieldundef{year}{}{\mkbibparens{\printtext{\printfield{year}}% \iffieldundef{month}{}{\bibrangedash\thefield{month}}% \iffieldundef{day}{}{\bibrangedash\printfield{day}}}}% }}% +}% %\DeclareFieldFormat{pages}{\mkpageprefix[bookpagination]{#1}}%页码引用格式的修改 \DeclareFieldFormat{pages}{#1}%去掉前面引导页码的pp.等字符 @@ -681,17 +829,19 @@ backrefpages = {引用页:}, %事实上title对于每个文献来说是必须的,所以用它判断是最快的,而且一般标题和出版社的语言是一样的。 \renewbibmacro*{publisher+location+date}{% \iffieldundef{title}{}{\testCJKfirst{\thefield{title}}}% -\testifnoteeqstd% +%\testifnoteeqstd% \iflistundef{location}{%\adddot -\iftoggle{ifnoteeqstandard}{}{% +\iffieldequalstr{note}{standard}{}{%从gbt7714-2015标准低19页看到,标准存在出版项时输出,没有时完全省略。 +%\iftoggle{ifnoteeqstandard}{}{%%}替换为上一句,尽可能用biblatex提供的函数 \iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}\setunit*{\addcolon\addspace}}{\printtext{[S.l.\adddot]}\setunit*{\addcolon\addspace}}}}% \bibstring{noaddress} {\printlist{location}\setunit*{\addcolon\addspace}}% %\addcolon\addspace% \iflistundef{publisher}{% -\iftoggle{ifnoteeqstandard}{}{% +\iffieldequalstr{note}{standard}{}{%从gbt7714-2015标准低19页看到,标准存在出版项时输出,没有时完全省略。 +%\iftoggle{ifnoteeqstandard}{}{%%}替换为上一句,尽可能用biblatex提供的函数 \iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}\setunit{\adddot\addspace}\setunit*{\addcolon\addspace}} %\mkbibbrackets -%{\printtext{[s.n.\adddot]}\setunit{\adddot\addspace}\setunit*{\addcolon\addspace}}}}%\bibstring{nopublisher} +%{{%{\printtext{[s.n.\adddot]}\setunit{\adddot\addspace}\setunit*{\addcolon\addspace}}}}%\bibstring{nopublisher} {\printtext{\mkbibbrackets{s.n.}}\setunit{\adddot\addspace}\setunit*{\addcolon\addspace}}}} {\printlist{publisher}\setunit*{\addcolon\addspace}}% %\addcomma\addspace% @@ -742,25 +892,28 @@ backrefpages = {引用页:}, \iffieldundef{issue} {%\usebibmacro{date} \iffieldundef{note}{\usebibmacro{date}}%判断一下,是否是报纸和标准 - {\def\comparetmp{news}\edef\comparetmpb{\thefield{note}}% - \ifx\comparetmp\comparetmpb% - \usebibmacro{newsdate}% - \else% - \usebibmacro{date}% - \fi}% - } + {\iffieldequalstr{note}{news}{\usebibmacro{newsdate}}%判断是否为报纸 + {\usebibmacro{date}}% +% \def\comparetmp{news}\edef\comparetmpb{\thefield{note}}% +% \ifx\comparetmp\comparetmpb% +% \usebibmacro{newsdate}% +% \else% +% \usebibmacro{date}% +% \fi + }}% {\printfield{issue}% \setunit*{\addspace}% %\usebibmacro{date} \iffieldundef{note}{\usebibmacro{date}}%判断一下,是否是报纸和标准 - {\def\comparetmp{news}\edef\comparetmpb{\thefield{note}}% - \ifx\comparetmp\comparetmpb% - \usebibmacro{newsdate}% - \else% - \usebibmacro{date}% - \fi}% - }% - }% + {\iffieldequalstr{note}{news}{\usebibmacro{newsdate}}%判断是否为报纸 + {\usebibmacro{date}}% +% \def\comparetmp{news}\edef\comparetmpb{\thefield{note}}% +% \ifx\comparetmp\comparetmpb% +% \usebibmacro{newsdate}% +% \else% +% \usebibmacro{date}% +% \fi + }}}% %\newunit } @@ -1005,7 +1158,7 @@ backrefpages = {引用页:}, % \usebibmacro{byauthor}% % \newunit\newblock % \usebibmacro{in:}% - \printtext{\texttt{//}}% + \printtext{\texttt{//}\addnbthinspace}% \usebibmacro{bybookauthor}% \ifnameundef{bookauthor}{}{\newunit\newblock}%替换下一句 %\newunit\newblock @@ -1112,7 +1265,7 @@ backrefpages = {引用页:}, % \usebibmacro{byauthor}% % \newunit\newblock % \usebibmacro{in:}% - \printtext{\texttt{//}}% + \printtext{\texttt{//}\addnbthinspace}% \usebibmacro{bybookauthor}% \ifnameundef{bookauthor}{}{\newunit\newblock}%替换下一句 %\newunit\newblock @@ -1496,7 +1649,7 @@ backrefpages = {引用页:}, % \usebibmacro{byauthor}% % \newunit\newblock %\usebibmacro{in:}% - \printtext{\texttt{//}}%似乎顶格加百分号可以避免一些不必要的空格加入,特别是这种直接处理的语句前后 + \printtext{\texttt{//}\addnbthinspace}%似乎顶格加百分号可以避免一些不必要的空格加入,特别是这种直接处理的语句前后 \usebibmacro{bybookauthor}%用类似inbook的方式处理 \ifnameundef{bookauthor}{}{\newunit\newblock}%替换下一句 %\newunit\newblock |