diff options
Diffstat (limited to 'Master')
14 files changed, 1387 insertions, 476 deletions
diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md index d23d872e727..a0bb4f301c2 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/README.md @@ -1,4 +1,4 @@ -<b>Date of last change: 2019-03-29 to version v1.0rm</b> +<b>Date of last change: 2019-08-28 to version v1.0s</b> # biblatex-gb7714-2015: a biblatex style package @@ -26,12 +26,11 @@ The biblatex-gb7714-2015 package provides an implementation of the bibliography ## Need to do: - * 王临慧, 2010a. 王临慧, 等, 2010b.需要等biblatex2.13更新后完成 * special characters in all fields? * entry without author: the delimiter between title and year? * TEST FOR texlive 2015,2016,2017 - * [1],(1),1.,box{1},superscript,compress,noncompress - + + ## Usage * for numerical sequence style: gb7714-2015 @@ -916,6 +915,7 @@ biber -l zh__stroke jobname * 2019/02/11 v1.0q * 2019/03/28 v1.0r * 2019/03/29 v1.0rm,rename erj to chinese-erj,ctan +* 2019/08/28 v1.0s --------------------------------------------------------- diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex index 2486c238feb..fbf92f0feac 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex @@ -1,13 +1,22 @@ \usepackage{expl3,etoolbox,ifthen,xstring} -\usepackage{xltxtra,mflogo,texnames} +\usepackage{xltxtra,mflogo,texnames,fontawesome} +%\usepackage{amstext} \usepackage[zihao=-4]{ctex} \ctexset{today=old} \let\kaiti=\kaishu \usepackage{xeCJKfntef} -\setmainfont{CMU Serif} -\setCJKmainfont{SourceHanSerifSC-Regular.otf} - -\usepackage{xcolor} +%\setmainfont{CMU Serif} +\usepackage{fontspec} +%\usepackage{tgpagella} +\setmainfont[Ligatures=TeX]{TeX Gyre Pagella} +\setsansfont[Ligatures=TeX]{TeX Gyre Pagella} +\setmonofont[Ligatures=TeX]{TeX Gyre Pagella} +%\usepackage{unicode-math} +%\setmathfont[math-style=ISO,bold-style=ISO]{TeX Gyre Pagella Math} +\setCJKmainfont +[BoldFont=SourceHanSansSC-Regular.otf, ItalicFont=simkai.ttf]{SourceHanSerifSC-Regular.otf} + +\usepackage[dvipsnames]{xcolor} \colorlet{examplefill}{yellow!80!black} \definecolor{graphicbackground}{rgb}{0.96,0.96,0.8} \definecolor{codebackground}{rgb}{0.9,0.9,1} @@ -19,6 +28,7 @@ \definecolor{gbgrey}{RGB}{200,200,200} \colorlet{gblabelcolor}{violet} \colorlet{gbemphcolor}{blue!60!black} +%\colorlet{gbemphcolor}{violet} %定义版面,showframe, \usepackage[paperwidth=210mm,paperheight=290mm,left=35mm,right=20mm,top=25mm, bottom=20mm,showcrop]{geometry}%,showframe @@ -97,11 +107,15 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref} \titlespacing*{\subsection}{0pt}{0.5\baselineskip}{0.5\baselineskip} \titlespacing*{\subsubsection}{0pt}{0.5\baselineskip}{0pt} \titlespacing{\paragraph}{2em}{0.5\baselineskip}{1em} +%这里利用titleformat*简单做设置,也可以利用titleformat做详细设置 +\titleformat*{\section}{\zihao{-3}\bfseries\heiti} +\titleformat*{\subsection}{\zihao{4}\bfseries\songti} +\titleformat*{\subsubsection}{\zihao{-4}\bfseries\kaiti} %参考文献 \usepackage[backend=biber,style=gb7714-2015,gbalign=center,gbfootbib=true%,gbtype=true% ]{biblatex}%,backref=true% -\addbibresource[location=local]{example/example.bib} +\addbibresource[location=local]{example.bib} \setlength{\bibitemsep}{1pt} %\defbibheading{bibliography}[\bibname]{% %%\phantomsection%解决链接指引出错的问题,相当于加入了一个引导点 @@ -130,6 +144,7 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref} \newcommand{\egcodename}{例}%egcodename,新环境标题的图序 \newfloatlist{egcode}{loc}{\listegcodename}{\egcodename}%loc,写入条目的文件的扩展名 \newfixedcaption{\codecaption}{egcode}%egcode,环境名 +\newfixedcaption{\fixtabcaption}{table}%egcode,环境名 %目录命令 \setlength{\cftbeforetoctitleskip}{\baselineskip} @@ -155,6 +170,9 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref} \renewcommand{\cftsecfont}{\zihao{5}\heiti} %条目样式 \renewcommand{\cftsubsecfont}{\zihao{-5}\songti} %条目样式\fangsong \renewcommand{\cftsubsubsecfont}{\zihao{-5}\kaiti} %条目样式 +\renewcommand{\cftsecpagefont}{\bfseries\zihao{5}} %页码的样式 +\renewcommand{\cftsubsecpagefont}{\bfseries\zihao{-5}} %页码的样式 +\renewcommand{\cftsubsubsecpagefont}{\bfseries\zihao{-5}} %页码的样式 %−−−−−−−−−−设置egcode条目样式−−−−−−−−−−−−−−−−−−−−−− %\renewcommand{\cftegcodeleader}{\leaders\hbox to 1em{\hss.\hss}\hfill} \setlength{\cftbeforeegcodeskip}{0.1ex} %条目前的间距 @@ -165,7 +183,7 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref} \renewcommand{\cftegcodeaftersnum}{ } \renewcommand{\cftegcodeaftersnumb}{~} %\cftsetindents{egcode}{0em}{3em} -%\renewcommand{\cftegcodepagefont}{\bfseries} +\renewcommand{\cftegcodepagefont}{\bfseries\zihao{-5}} %−−−−−−−−−−设置figure条目样式−−−−−−−−−−−−−−−−−−−−−− %\newcommand{\cftfigfill}{\renewcommand{\cftdot}{$\diamond$}\cftdotfill{\cftdotsep}} \setlength{\cftbeforefigskip}{0.1ex} %条目前的间距 @@ -179,6 +197,7 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref} %\renewcommand{\cftfigleader}{\bfseries\cftfigfill} %连接符粘连团 %\renewcommand{\cftfigpagefont}{\color{red}\zihao{-5}$\diamond$\itshape} %页码的样式 %\renewcommand{\cftfigafterpnum}{\color{red}$\diamond$} %页码后内容 +\renewcommand{\cftfigpagefont}{\bfseries\zihao{-5}} %页码的样式 %−−−−−−−−−−设置table条目样式−−−−−−−−−−−−−−−−−−−−−− %\newcommand{\cfttabfill}{\renewcommand{\cftdot}{$\infty$}\cftdotfill{\cftdotsep}} \setlength{\cftbeforetabskip}{0.1ex} %条目前的间距 @@ -192,6 +211,7 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref} %\renewcommand{\cfttableader}{\bfseries\cfttabfill} %连接符粘连团 %\renewcommand{\cfttabpagefont}{\color{red}\zihao{-5}$\infty$\itshape} %页码的样式 %\renewcommand{\cfttabafterpnum}{\color{red}$\infty$} %页码后内容 +\renewcommand{\cfttabpagefont}{\bfseries\zihao{-5}} %页码的样式 \usepackage{pdfpages}%直接插入pdf文件页 \graphicspath{{egfigure/}{example/}} @@ -201,7 +221,7 @@ pdfstartview=FitH,allcolors=gbemphcolor]{hyperref} \usepackage{tikz,pgf} \usetikzlibrary{calc} -\newenvironment{example}[3][代码]% +\newenvironment{example}[3][{\large\faFileCodeO}]% {\list{}{\begingroup\codecaption{#2}\label{#3}\endgroup \setlength{\topsep}{0pt} \setlength{\partopsep}{0pt} @@ -232,13 +252,13 @@ rulecolor=\color{gblabelcolor}, fontadjust=true, language=[LaTeX]TeX, backgroundcolor=\color{gbyellow!3},%\color{yellow}, %背景颜色 -numbers=left, +%numbers=left, numberstyle=\tiny\color{gblabelcolor}, basicstyle=\footnotesize\ttfamily, % print whole listing small keywordstyle=\bfseries\color{gbemphcolor},%\underbar, % underlined bold black keywords identifierstyle=, % nothing happens -commentstyle=\color{green!40!gray}, % white comments +commentstyle=\color{OliveGreen}, % white comments stringstyle=\ttfamily\color{purple!50}, % typewriter type for strings showstringspaces=false}% no special string spaces } @@ -289,13 +309,14 @@ theorem style=plain,fonttitle=\bfseries\heiti,coltitle=gbforestgreen \newcommand{\titleandauthor}{ \begin{center} \def\@makefnmark{\hbox{\@textsuperscript{\small\@thefnmark}}} -{\renewcommand{\thefootnote}{\fnsymbol{footnote}} -\setlength{\baselineskip}{30pt}\heiti{\zihao{-2}{\biaotiudf}}\par} +{\setlength{\baselineskip}{40pt}\renewcommand{\thefootnote}{\fnsymbol{footnote}} +\heiti{\zihao{-2}{\biaotiudf}}\par}% %注意这里\par要放在花括号内才有效 -\vspace*{0.3cm} +\setlength{\baselineskip}{0.1cm} +\rule{0pt}{0.5cm}\par {\renewcommand{\thefootnote}{\arabic{footnote}} \kaishu{\zihao{4}{\zuozheudf}}\par} -\vspace*{0.2cm} +\rule{0pt}{0.3cm}\par {\songti{\zihao{-4}{\riqiudf}}\par} \end{center} } @@ -310,7 +331,7 @@ theorem style=plain,fonttitle=\bfseries\heiti,coltitle=gbforestgreen align=left,leftmargin=0em,itemsep=0.5em,labelwidth=0.1em,itemindent=2.6em,listparindent=2em}%label=$\triangleright$,itemindent=1em \setlist[itemize]{topsep=2pt,partopsep=0pt,parsep=0pt,% leftmargin=3em,itemindent=0em} -\setlist[description]{font=\bfseries\textcolor{gbemphcolor},align=right,topsep=5pt,partopsep=0pt,parsep=0pt,% +\setlist[description]{font=\bfseries\textcolor{gblabelcolor},align=right,topsep=5pt,partopsep=0pt,parsep=0pt,% itemsep=0pt,leftmargin=0em,itemindent=0em}%注意,font或format中的最后一个命令自动提取标签为其参数 \usepackage{longtable} @@ -340,26 +361,26 @@ itemsep=0pt,leftmargin=0em,itemindent=0em}%注意,font或format中的最后一 \newcommand{\HandRight}{$\bigstar$} \newcommand{\zhongdian}[1]{\textcolor{gbemphcolor}{\HandRight\small\heiti#1}} \newcommand{\pz}[1]{%定义pz为旁注命令 -\marginpar[\flushright\small\youyuan\color{gbemphcolor}\footnotesize #1]{\youyuan\color{gbemphcolor}\small #1}} +\marginpar[\flushright\small\youyuan\color{gbemphcolor}\footnotesize #1]{\kaiti\color{gbemphcolor}\small #1}} \newcommand{\PZ}[1]{%定义pz为旁注命令 -\marginpar[\flushright\small\youyuan\color{gbemphcolor}\footnotesize #1]{\small\youyuan\color{gbemphcolor}\small #1}} +\marginpar[\flushright\small\youyuan\color{gbemphcolor}\footnotesize #1]{\kaiti\color{gbemphcolor}\small #1}} \newcommand{\qd}[1]{%定义qd为强调命令 \begin{quote} - \small\youyuan\color{gbemphcolor}#1%blue!50!black\fangsong + \fangsong\color{gbemphcolor}#1%blue!50!black\fangsong \end{quote}} \newcommand{\QD}[1]{%定义qd为强调命令 \begin{quote} - \small\youyuan\color{gbemphcolor}#1 + \fangsong\color{gbemphcolor}#1 \end{quote}} \long\def\bc#1{%定义补充信息 -{\small\youyuan\color{gbemphcolor}#1}} %orange,brown,purple,teal,gbblue,olive,cyan +{\kaiti\color{gbemphcolor}#1}} %orange,brown,purple,teal,gbblue,olive,cyan \long\def\BC#1{%定义补充信息 -{\small\youyuan\color{gbemphcolor}#1}} +{\youyuan\color{gbemphcolor}#1}} \newcommand{\zd}[1]{%定义补充信息 -{\small\youyuan\color{gbemphcolor}#1}} %orange,brown,purple,teal,gbblue,olive,cyan +{\kaiti\color{gbemphcolor}#1}} %orange,brown,purple,teal,gbblue,olive,cyan \newcommand{\ZD}[1]{%定义补充信息 -{\small\youyuan\color{gbemphcolor}#1}} +{\kaiti\color{gbemphcolor}#1}} \newenvironment*{marglist} @@ -383,5 +404,24 @@ itemsep=0pt,leftmargin=0em,itemindent=0em}%注意,font或format中的最后一 %\usepackage{filecontents} - +%% 问答环境参考文献 +%\NewDocumentEnvironment { reference } { } +% { +% \skip_vertical:n { 2 ex } +% \small +% \noindent \textsf{ 参考文献 } \marginpar { \raggedleft \faBook } +% \enumerate [ topsep = 0pt ] +% % \ignorespaces +% } +% { \endenumerate } +% +%\NewDocumentEnvironment { note } { } +% { +% \skip_vertical:n { 2 ex } +% \small +% \noindent \textsf{ 注意 } \marginpar { \raggedleft \faWarning } +% \par +% % \ignorespaces +% } +% { } diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf Binary files differindex f4b4d54a3c2..6da5621607d 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex index 70af97529d6..72ec1e17c68 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015.tex @@ -2,6 +2,10 @@ \input{biblatex-gb7714-2015-preamble} %宏包和一些格式设置 \begin{document} +\hyphenpenalty=100 %断词阈值,值越大越不容易出现断词 +\tolerance=9000 %丑度,10000为最大无溢出盒子,参考the texbook 第6章 + + %------------------------------------------------------------ % 标题和目录 %------------------------------------------------------------ @@ -20,7 +24,7 @@ Style Files (gb7714-2015*.*) have version number: \versionofgbtstyle.} \titleandauthor \begin{quotation} -biblatex-gb7714-2015 宏包是为满足《GB/T 7714-2015~~信息与文献~~参考文献著录规则》要求而开发的biblatex样式包。宏包提供的样式文件分两种编制方式: 一、顺序编码制(gb7714-2015);二、著者-出版年制(gb7714-2015ay),能够精确地实现符合国标著录和标注格式要求的参考文献。该样式包具备易用、兼容、灵活等显著特点,且提供了详细的使用说明,为国内\LaTeX{}用户提供了一个可靠的参考文献生成工具。 +biblatex-gb7714-2015 宏包是为满足《GB/T 7714-2015~~信息与文献~~参考文献著录规则》要求而开发的 biblatex 样式包。宏包提供两种编制样式: 一、顺序编码制(gb7714-2015);二、著者-出版年制(gb7714-2015ay),能够精确地实现国标提出的著录和标注格式,且具备易用、兼容、灵活等特点,能为国内\LaTeX{}用户提供一个可靠的参考文献生成工具。 %old: %biblatex-gb7714-2015 样式宏包提供了符合《GB/T 7714-2015 信息与文献 参考文献 %著录规则》要求的 biblatex 参考文献样式。分为两种编制方式: 一、顺序编码制;二、著 @@ -45,61 +49,84 @@ biblatex-gb7714-2015 宏包是为满足《GB/T 7714-2015~~信息与文献~~参 \pagestyle{fancy} \section{概述} -《GB/T 7714-2015~~信息与文献~~参考文献著录规则》是国内科技文档参考文献著录的一般标准,国内大多数期刊、大学、出版社对于期刊论文、学位论文、出版物参考文献的要求通常都基于该标准。对于\LaTeX{}用户来说,参考文献生成是典型的自动化应用,通常有两种方法,一是基于bibtex的传统方法,二基于biblatex的新方法。生成符合GB/T 7714标准要求的参考文献,这两条路子都已经实践多年。 -基于biblatex的方法,早期有李志奇(icetea)的gbtstyle实现,以及Casper Ti. Vector的caspervector样式,然而由于biblatex升级、样式维护和完善等问题,未能达到精确符合国标要求、具备高可用性、兼容性、可维护性的理想状态。biblatex-gb7714-2015 样式包的设计初衷正式基于当时这样的状态,为解决应用中的很多实际问题,设计和实现考虑如下原则: +《GB/T 7714-2015~~信息与文献~~参考文献著录规则》是国内科技文档参考文献著录的一般标准,国内多数大学、出版社、期刊编辑部对于学位论文、出版物、期刊论文的参考文献要求通常都基于该标准。对于\LaTeX{}用户来说,参考文献生成是典型的自动化应用,通常有两种方法,一是基于bibtex的传统方法,二是基于biblatex的新方法。生成符合GB/T 7714 标准要求的参考文献,这两条路子都已经实践多年。 +基于biblatex的方法,早期有李志奇(icetea)的gbtstyle实现以及Casper Ti. Vector的caspervector样式,然而由于biblatex宏包升级、样式包维护和完善方面的问题,未能达到精确符合国标要求、且具备高可用性、兼容性和可维护性的理想状态。开发biblatex-gb7714-2015 样式包的初衷首先是基于当时这样的状态,其次也为解决很多实际应用中的问题,因此考虑如下原则: \subsection{设计原则} \begin{enumerate} \item 兼容性 -由于biblatex的持续升级,一些接口和功能的变化,会使得样式无法使用或者输出结果产生异变。因此biblatex-gb7714-2015宏包设计之初,就一直秉承兼容性原则,力图兼容各版本的biblatex,希望与biblatex v2.8 (in texlive2014) 以上所有版本适配(注意 ctex 2.9.4 的用户需升级 biblatex)。出于兼容一些老的bib文件的考虑,增加对传统参考文献条目类型比如www/electronic/conference/mastersthsis/phdthsis/techreport/standard等的支持。根据国标要求,考虑增加newspaper(报纸析出的文献)、database(数据库)、dataset(数据集)、 software(软件)、map(舆图)、archive(档案)等类型。也为兼容适用于不同样式的bib数据源,增加对一些自定义域的支持,比如gbt7714宏包的bst样式中mark和medium域。此外,也试图去完善样式在不同文档类包括beamer类等中的使用问题。 +由于biblatex的持续升级,一些接口和功能的变化,会使得样式无法使用或者输出结果产生异变。因此biblatex-gb7714-2015宏包设计之初,就一直秉承兼容性原则,力图兼容各版本的biblatex,希望与biblatex v2.8 (in texlive2014) 以上所有版本适配(注意 ctex 2.9.4 的用户需升级 biblatex)。 + +出于兼容一些旧的bib文件的考虑,增加对传统参考文献条目类型比如www/electronic/conference/mastersthsis/phdthsis/techreport/standard等的支持。根据国标要求,考虑增加newspaper(报纸析出的文献)、database(数据库)、dataset(数据集)、 software(软件)、map(舆图)、archive(档案)等类型。也为兼容适用于不同样式的bib数据源,增加对一些自定义域的支持,比如gbt7714宏包的bst样式中mark和medium域。此外,也试图去完善样式在不同文档类包括beamer类中的使用问题。 \item 易用性 -参考文献是\LaTeX{}自动化应用之一,尽可能让其自动完成,减少用户的人工干预,包括数据的准备、格式的调整等等。因此宏包试图减少用户对于bib文件的调整,只需要最简单的输入文献本身的信息,或者从各类学术网站或利用zotero等工具下载参考文献数据即可,而不需要为了符合国标格式而去手动增添参考文献类型和载体标识等一些数据域,不必为了文献语言分集、文献排序等去增加语言、排序关键字等数据域,所有的工作都由宏包自动完成。为了符合国标要求以及中文参考文献标注习惯,提供了丰富的标注(引用)命令,用户只需熟悉几个命令的特性即能够完成两种编制样式下多样的标注格式,包括: -顺序编码制的 \verb|\cite|(上标可设置页码)、 \verb|\parencite|(非上标)、 \verb|\pagescite|(上标加自动页码)、 \verb|\textcite|(提供作者为主语)、 \verb|\authornumcite|(提供作者加上标编码)、 \verb|\footfullcite|(脚注方式); -著者-年份制的\verb|\cite|(作者加年份用括号包围可设置页码)、 \verb|\pagescite|(作者加年份用括号包围自动页码)、 +参考文献是\LaTeX{}自动化应用之一,尽可能让其自动完成,减少用户的人工干预,包括数据的准备、格式的调整等等。因此宏包试图减少用户对于bib文件的调整,只需要简单地输入文献本身的信息,或者从各类学术网站或利用zotero等工具下载参考文献数据即可,而不需要为了符合国标格式而去手动增添参考文献类型和载体标识等一些数据域,也不必为了文献语言分集、文献排序等去增加语言、排序关键字等数据域,这些所有工作都由宏包自动完成。 + +为了符合国标要求以及中文参考文献标注习惯,提供丰富的标注(引用)命令,用户只需熟悉几个命令的特性即能够完成两种编制样式下多样的标注格式,包括:顺序编码制的 \verb|\cite|(上标可设置页码)、 \verb|\parencite|(非上标可设置页码)、 \verb|\pagescite|(上标加自动页码)、 \verb|\textcite|(提供作者为主语加非上标编号)、 \verb|\authornumcite|(提供作者为主语加上标编号)、 \verb|\footfullcite|(脚注方式);著者-年份制的\verb|\cite|(作者加年份用括号包围可设置页码)、 \verb|\pagescite|(作者加年份用括号包围自动页码)、 \verb|\yearcite|(提供年份用括号包围)、 \verb|\yearpagescite|(提供年份用括号包围自动页码)、 -\verb|\textcite|(提供主语作者加括号包围年份)、 \verb|\footfullcite|(脚注方式)。习惯natbib的用户也可以启用biblatex提供的nanbib选项,来使用 \verb|\citet| 和 \verb|\citep| 命令。另外,增加并完善对多语言混合文献表、多语言对照文献表的支持,不同语言文献按文献本身语言录入,自动识别语言通过autolang选项自动完成不同语言的切换,利用条目集和关联条目概念为多语言对照文献表提供两种实现方式。 +\verb|\textcite|(提供主语作者加括号包围年份)、 \verb|\footfullcite|(脚注方式)。 + +习惯natbib的用户也可以直接使用 \verb|\citet| 和 \verb|\citep| 命令, +也提供一些习惯使用的命令,比如\verb|\citetns|、\verb|\citepns|、 +\verb|\upcite|、\verb|\inlinecite|等让用户可以无缝衔接从bibtex转到biblatex。 + +另外,增加并完善对多语言混合文献表、多语言对照文献表的支持。不同语言文献可按文献自身语言录入,宏包自动识别语言并通过autolang选项自动完成语言切换,针对多语言对照文献表提供了基于条目集和关联条目概念的两种实现方式。 \item 灵活性 在考虑实现严格符合GB/T 7714-2015标准的格式外,也希望能够针对用户的特殊格式需求,提供方便灵活的定制方式,比如通过设置选项来达到格式的变化。为此,增加了多个方面的设置选项,使用户可以根据自己的需求灵活地调整。主要包括: + +著录表排序选项: +sorting选项值(gb7714-2015支持以语言著者-出版年标题升序排列,gbnytd支持以语言著者-出版年标题降序排列,gbynta支持以语言年份作者标题升序排列,gbyntd支持以语言年份作者标题降序排列)、gblanorder 选项(可以设置不同的文种(语言)文献的排列顺序)、sortlocale 选项(可以设置本地语言的排序调整方案,比如zh\_\_pinyin支持汉字字符以拼音排序,zh\_\_stroke以笔画排序,auto/zh以unicode编码排序,zh\_\_gb2312han 以gb2312编码排序)。使用拼音排序时遇到多音字也可以利用key域解决。 + + + 著录项格式选项: 姓名格式调整(gbnamefmt选项,可以设置大写、小写、西语习惯用法、拼音习惯用法)、 出版项控制(gbpub选项,可设置出版项缺失时是否填补信息)、类型和载体标识控制(gbtype选项,可设置不输出)、 -析出文献标识符控制(gbpunctin选项,可设置\texttt{//}不输出)、 -标题超链接控制(gbtitlelink选项,可设置标题超链接) +析出文献标识符控制(gbpunctin选项,可设置\texttt{//}不输出或其它表示形式)、 +标题超链接控制(gbtitlelink选项,可设置标题超链接)、 作者项处理(gbnoauthor选项,可设置作者缺失时是否填补信息); + 著录表格式选项和命令: 标签对齐控制(gbalign选项,可设置左、右、居中、项对齐方式)、 标签格式控制(gbbiblabel选项,可设置标签数字不同的包围符号)、 条目格式控制(gbstyle选项,利用gb7714-2015ms样式可实现中英文献分设不同格式)、 -\verb|\bibauthorfont|命令可设置作者项字体、 -\verb|\bibtitlefont|命令可设置标题项字体、 -\verb|\bibpubfont|命令可设置出版项字体; +编制样式设置命令(利用\verb|\setaystylesection|和gb7714-2015mx样式实现不同文献节不同的编制方式)、 +格式命令\verb|\bibauthorfont|可设置作者项字体、 +格式命令\verb|\bibtitlefont|可设置标题项字体、 +格式命令\verb|\bibpubfont|可设置出版项字体、 +格式尺寸\verb|\bibitemindent|和\verb|\bibhang|可设置文献表的缩进、 +文献标题控制(gbctexset选项,可设置标题内容由\verb|\bibname|或\verb|\refname|宏调整); + 编码设置选项: GBK编码兼容(gbcodegbk选项,可设置GBK编码文档编译)等等。 -配合biblatex提供的选项、\verb|bibfont|命令、\verb|\bibitemsep|间距等可以实现丰富的格式, -包括标注和文献表采用不同样式、url/DOI/ISBN输出控制、标注和文献表中作者数量控制、文献表拼音或笔画排序等等。 + +配合biblatex提供的选项、\verb|\bibfont|命令、\verb|\bibitemsep|间距等可以实现丰富的格式,包括标注和文献表采用不同样式、url/doi/isbn输出控制、标注和文献表中作者数量控制、文献表拼音或笔画排序等等。 \item 可维护性 -宏包的长期使用价值体现在宏包的维护和更新上面,追求宏包具有高的可读性、可理解性、可维护性,可为宏包长期发挥作用提供帮助。由于biblatex已经是一个相当成熟完善的宏包,即便是在样式方面考虑也相当全面,这可能与西方出版界对于参考文献的多样的细化的要求有关。而国内只有一个通用标准就是GB/T 7714标准,因此除了该标准一些特殊的需求需要具体实现外,样式包实现完全可以借用biblatex提供的标准样式,如此我们既不需要重新造轮子,又可使gb7714-2015样式与biblatex宏包样式保持一致的结构、风格、习惯,增加了可读性和可维护性。通过保持biblatex原有样式基础加上有限修改的方式,并且对代码加上详细的注释,可以使得样式包维护者,只要通过学习biblatex,即可轻松理解gb7714-2015样式做了哪些修改,为什么这么修改,实现了什么样的效果。另外,为方便用户,样式包提供了全面、详实的说明,包括 +宏包的长期使用价值体现在宏包的维护和更新上面,追求宏包具有高的可读性、可理解性、可维护性,可为宏包长期发挥作用提供帮助。由于biblatex已经是一个相当成熟完善的宏包,即便是在样式方面考虑也相当全面,这可能与西方出版界对于参考文献的多样且细致的要求有关。而国内只有一个通用标准就是GB/T 7714标准,且除了一些特殊需求要具体实现外,标准中大多数格式要求的实现完全可以借用biblatex提供的标准样式,因此既不需要重新造轮子,也可以使gb7714-2015样式与biblatex宏包的标准样式保持一致的结构、风格和习惯,这样可以大大增加代码可读性和可维护性。通过在biblatex原有样式基础上增加有限修改的方式,并且对代码加上详细注释,可以使得样式包维护者,只需通过学习biblatex,即可轻松理解gb7714-2015样式做的工作,比如做了哪些修改,为什么这么修改,实现了什么样的效果。 + + +另外,为方便用户,样式包提供了全面、详实的说明,包括 GB/T 7714标准的理解和解释(\ref{sec:gbt:std}节)、 条目类型和域的理解和录入方法(\ref{sec:bib:bibtex}节)、 +参考文献引用和文献表打印及其格式控制方法(\ref{sec:cbx:usage},\ref{sec:usage:bbx}节)、 \href{https://github.com/hushidong/biblatex-gb7714-2015/wiki}{biblatex和样式包基本使用方法}、 \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% -{biblatex高级使用方法和样式包设计实现方法},可为用户使用入门和维护者深入理解提供帮助。 +{biblatex高级使用方法和样式包设计实现方法}等,可为用户快速入门和维护者深入理解提供有效帮助。 \end{enumerate} %具体来讲,完成了4个方面的工作: %\begin{enumerate} -% \item 完成了GB/T 7714-2015标准的完整实现,包括两种编制方式下的各类型参考文献著录格式和标注格式等基本内容,还包括: 双语文献格式,带页码的标注格式,作者年制下仅有年的标注格式和文献按语言集中并自动排序,起止卷期自动解析,增加gbnoauthor选项控制作者年制责任者缺省的处理,增加gbpub选项控制出版信息缺省时的处理,增加gbalign选项控制顺序编码制文献表的标签对齐方式,提供右对齐、左对齐和项对齐三种方式。 +% \item 完成了GB/T 7714-2015标准的完整实现,包括两种编制方式下的各类型参考文献著录格式和标注格式等基本内容,还包括: 双语文献格式,带页码的标注格式,著者年份制下仅有年的标注格式和文献按语言集中并自动排序,起止卷期自动解析,增加gbnoauthor选项控制著者年份制责任者缺省的处理,增加gbpub选项控制出版信息缺省时的处理,增加gbalign选项控制顺序编码制文献表的标签对齐方式,提供右对齐、左对齐和项对齐三种方式。 % \item 实现了用户文献数据录入优化,用户在录入参考文献数据时,只需要录入文献的实际信息即可,不需要录入文献标识符和载体标识符,无需录入language或者其它域信息来区分中英文参考文献,实现中英文自动判断并处理。支持一些特殊或老的条目类型,比如standard,newspaper,www,mastersthesis,phdthesis等。 % \item 实现了对biblatex不同版本的兼容,能够应用于biblatex3.2以前的老版本,也能用于3.3版姓名处理方式改变后的版本。即可以与texlive2014/2015/2016/2017配合使用,无需升级biblatex情况下直接使用biblatex-gb7714-2015宏包(即本样式)。 % \bc{当然 ctex2.9.4 的用户可能要升级一下biblatex,因为ctex多年没有更新,其中的biblatex版本过低}。 @@ -127,34 +154,35 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \draw[color=cyan,thick] (script.north) -- ($(script.north)+(0mm,3mm)$) ; \draw[color=cyan,thick] ($(style.north)+(0mm,3mm)$) -- ($(script.north)+(0mm,3mm)$); -\node[below of=style,fill=gbgrey!20,yshift=0.5cm,xshift=2mm,text width=2cm] (numbbx) {\tiny \textcolor{black}{gb7715-2015.bbx}}; -\node[below of=numbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (numcbx) {\tiny \textcolor{black}{gb7715-2015.cbx}}; -\node[below of=numcbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (aybbx) {\tiny \textcolor{black}{gb7715-2015ay.bbx}}; -\node[below of=aybbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (aycbx) {\tiny \textcolor{black}{gb7715-2015ay.cbx}}; -\node[below of=aycbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (gbkdef) {\tiny \textcolor{black}{gb7715-2015-gbk.def}}; - -\node[below of=gbkdef,fill=gbgrey!20,yshift=8mm,text width=2cm] (msbbx) {\tiny \textcolor{black}{gb7715-2015ms.bbx}}; -\node[below of=msbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (mscbx) {\tiny \textcolor{black}{gb7715-2015ms.cbx}}; - -\draw[color=blue,semithick] (numbbx.west) -- ($(numbbx.west)+(-3mm,0mm)$) ; -\draw[color=blue,semithick] (numcbx.west) -- ($(numcbx.west)+(-3mm,0mm)$) ; -\draw[color=blue,semithick] (aybbx.west) -- ($(aybbx.west)+(-3mm,0mm)$) ; -\draw[color=blue,semithick] (aycbx.west) -- ($(aycbx.west)+(-3mm,0mm)$) ; +\node[below of=style,fill=gbgrey!20,yshift=0.5cm,xshift=2mm,text width=2cm] (numcbbx) {\tiny \textcolor{black}{gb7715-2015.c/bbx}}; +\node[below of=numcbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (aycbbx) {\tiny \textcolor{black}{gb7715-2015ay.c/bbx}}; +\node[below of=aycbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (mscbbx) {\tiny \textcolor{black}{gb7715-2015ms.c/bbx}}; +\node[below of=mscbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (mxcbbx) {\tiny \textcolor{black}{gb7715-2015mx.c/bbx}}; +\node[below of=mxcbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (gbkdef) {\tiny \textcolor{black}{gb7715-2015-gbk.def}}; +\node[below of=gbkdef,fill=gbgrey!20,yshift=8mm,text width=2cm] (erjcbbx) {\tiny \textcolor{black}{chinese-erj.c/bbx}}; +%\node[below of=msbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (mscbx) {\tiny \textcolor{black}{gb7715-2015ms.cbx}}; + +\draw[color=blue,semithick] (numcbbx.west) -- ($(numcbbx.west)+(-3mm,0mm)$) ; +\draw[color=blue,semithick] (aycbbx.west) -- ($(aycbbx.west)+(-3mm,0mm)$) ; +\draw[color=blue,semithick] (mscbbx.west) -- ($(mscbbx.west)+(-3mm,0mm)$) ; +\draw[color=blue,semithick] (mxcbbx.west) -- ($(mxcbbx.west)+(-3mm,0mm)$) ; \draw[color=blue,semithick] (gbkdef.west) -- ($(gbkdef.west)+(-3mm,0mm)$) ; -\draw[color=blue,semithick] (msbbx.west) -- ($(msbbx.west)+(-3mm,0mm)$) ; -\draw[color=blue,semithick] (mscbx.west) -- ($(mscbx.west)+(-3mm,0mm)$) ; +\draw[color=blue,semithick] (erjcbbx.west) -- ($(erjcbbx.west)+(-3mm,0mm)$) ; +%\draw[color=blue,semithick] (mscbx.west) -- ($(mscbx.west)+(-3mm,0mm)$) ; -\draw[color=blue,semithick] ($(mscbx.west)+(-3mm,0mm)$) -- ($(aycbx.west)+(-3mm,28.1mm)$) ; +\draw[color=blue,semithick] ($(erjcbbx.west)+(-3mm,0mm)$) -- ($(style.center)+(-12mm,-2.5mm)$) ; \node[below of=manual,fill=gbsteelblue!15,yshift=0.5cm,xshift=2mm,text width=2.8cm] (mtex) {\tiny \textcolor{black}{biblatex-gb7714-2015.tex}}; \node[below of=mtex,fill=gbsteelblue!15,yshift=8mm,text width=2.8cm] (mpdf) {\tiny \textcolor{black}{biblatex-gb7714-2015.pdf}}; -\node[below of=mpdf,fill=gbsteelblue!15,yshift=8mm,text width=2.8cm] (egtex) {\tiny \textcolor{black}{example/eg*.tex}}; -\node[below of=egtex,fill=gbsteelblue!15,yshift=8mm,text width=2.8cm] (egbib) {\tiny \textcolor{black}{example/*.bib}}; +\node[below of=mpdf,fill=gbsteelblue!15,yshift=8mm,text width=2.8cm] (egtex) {\tiny \textcolor{black}{example}}; +\node[below of=egtex,fill=gbsteelblue!15,yshift=8mm,text width=2.8cm] (egbib) {\tiny \textcolor{black}{egfigure}}; +\node[below of=egbib,fill=gbsteelblue!15,yshift=8mm,text width=2.8cm] (egthesis) {\tiny \textcolor{black}{egthesis}}; \draw[color=red,semithick] (mtex.west) -- ($(mtex.west)+(-3mm,0mm)$) ; \draw[color=red,semithick] (mpdf.west) -- ($(mpdf.west)+(-3mm,0mm)$) ; \draw[color=red,semithick] (egtex.west) -- ($(egtex.west)+(-3mm,0mm)$) ; \draw[color=red,semithick] (egbib.west) -- ($(egbib.west)+(-3mm,0mm)$) ; -\draw[color=red,semithick] ($(egbib.west)+(-3mm,0mm)$) -- ($(egbib.west)+(-3mm,28.1mm)$) ; +\draw[color=red,semithick] (egthesis.west) -- ($(egthesis.west)+(-3mm,0mm)$) ; +\draw[color=red,semithick] ($(egthesis.west)+(-3mm,0mm)$) -- ($(manual.center)+(-16mm,-2.5mm)$) ; \node[below of=script,fill=gbblue!10,yshift=0.5cm,xshift=2mm,text width=2cm] (cpall) {\tiny \textcolor{black}{makeall.bat/sh}}; \node[below of=cpall,fill=gbblue!10,yshift=8mm,text width=2cm] (cpfil) {\tiny \textcolor{black}{makefile.bat/sh}}; @@ -170,14 +198,21 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \caption{宏包文件结构}\label{fig:pkg:structure} \end{figure} -其中,\zd{gb7714-2015.bbx/cbx}、\zd{gb7714-2015ay.bbx/cbx}分别为顺序编码制和作者年制样式文件,\zd{gb7715-2015-gbk.def}为GBK编码文档编译所需的支撑文件,\zd{gb7714-2015ms.bbx/cbx}是顺序编码制样式,但支持中英文语言分设不同标准的著录格式,该样式仅支持较新的biblatex版本。 -\zd{biblatex-gb7714-2015.tex},\zd{eg*.tex}为说明文档和测试用例。\zd{*.bat}、\zd{*.sh}分别为windows和linux下说明文档的编译脚本。\zd{*.pl}为gb7714格式著录文献表到bib文件的perl转换脚本,\zd{*.dat}为转换测试文献表。 + + +其中,\zd{gb7714-2015.bbx/cbx}、\zd{gb7714-2015ay.bbx/cbx}分别为顺序编码制和著者年份制样式文件。 +\zd{gb7714-2015ms.bbx/cbx}是混合样式,支持区分中英文语言分设不同标准的著录格式。 +\zd{gb7714-2015mx.bbx/cbx}是混合样式,支持在不同的参考文献分节中使用不同的编制样式,比如有的节使用顺序编码制,有的节使用著者年份制。 +\zd{gb7715-2015-gbk.def}为GBK编码文档编译所需的支撑文件。 +\zd{chinese-erj.bbx/cbx} 是经济学研究期刊的文献样式。后三者仅支持较新的biblatex版本。 +\zd{biblatex-gb7714-2015.tex} 为宏包说明文档,\zd{example}目录下为各种选项的测试用例, +\zd{egfigure}目录下为说明文档中的图例文档,\zd{egthesis}为国内一些大学学位论文文献样式的测试用例,包括完全按照国标的BUPT、CAU、ECNU、FDU、SJTU、THU、USTC、XJTU、ZJU,与国标略有差异的UCAS,以及与国标有较大差异的NWAFU、SEU等。\zd{*.bat}、\zd{*.sh}分别为windows和linux下说明文档的编译脚本。\zd{*.pl}为gb7714格式著录文献表到bib文件的perl转换脚本,\zd{*.dat}为转换测试文献表。 \subsection{最小示例} -基于biblatex宏包的参考文献生成方法非常简单,例\ref{code:doc:structrue}是一个最小工作示例。示例代码中给出了详细注释,介绍了使用biblatex 的tex源文档基本结构,其中gb7714-2015 样式随biblatex宏包加载,参考文献数据文件example.bib(需另外准备)利用 \verb|\addbibresource|加载,文献表利用 \verb|\printbibliography| 命令输出(可在正文任意位置)。所有基于 biblatex 生成参考文献的文档无论大小万变不离其宗。 -关于参考文献数据库文件(*.bib)的准备和说明详见\ref{sec:bib:bibtex}节)。 -需要更全面了解biblatex,及参考文献生成的更高级内容可以参考: +基于biblatex宏包的参考文献生成方法非常简单,例 \ref{code:doc:structrue} 是一个最小工作示例。示例代码中给出了详细注释,介绍了使用biblatex 的tex源文档基本结构,其中gb7714-2015 样式随biblatex宏包加载, +参考文献数据文件example.bib(bib文件需另外准备,详见\ref{sec:bib:bibtex}节)利用 \verb|\addbibresource|加载,文献表利用 \verb|\printbibliography| 命令输出(可在正文任意位置)。所有基于 biblatex 生成参考文献的文档无论大小万变不离其宗。 +若需更全面了解biblatex及参考文献生成高级功能另可参考: \href{https://github.com/plk/biblatex}{biblatex宏包手册} \footnote{地址:\url{https://github.com/plk/biblatex}}、 \href{https://github.com/hushidong/biblatex-zh-cn}{中文版} @@ -187,30 +222,23 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \footnote{地址:% \url{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}}。 -\begin{example}{biblatex参考文献生成最小工作示例}{code:doc:structrue} +\begin{example}{biblatex参考文献生成的最小工作示例}{code:doc:structrue} \begin{texlist} -\documentclass{article}%文档类 -%导言区开始: -%加载ctex宏包,中文支持 -\usepackage{ctex} -%加载geometry宏包,定义版面 +\documentclass{article}%文档类 %导言区开始: +\usepackage{ctex}%加载ctex宏包,中文支持 + %加载geometry宏包,定义版面 \usepackage[left=20mm,right=20mm,top=25mm, bottom=15mm]{geometry} -%加载hyperref宏包,使用超链接 + %加载hyperref宏包,使用超链接 \usepackage[colorlinks=true,pdfstartview=FitH,linkcolor=blue,anchorcolor=violet,citecolor=magenta]{hyperref} -%加载biblatex宏包,使用参考文献,其中后端backend使用biber -%标注(引用)样式citestyle,著录样式bibstyle都采用gb7714-2015样式 -%两者相同是可以合并为一个选项style + %参考文献工具,加载biblatex宏包,,其后端backend使用biber,%标注(引用)样式citestyle,著录样式bibstyle都采用gb7714-2015样式,两者相同时可以合并为一个选项style \usepackage[backend=biber,style=gb7714-2015]{biblatex} -%biblatex宏包的参考文献数据源加载方式 + %biblatex宏包的参考文献数据源加载方式 \addbibresource[location=local]{example.bib} - -%正文区开始: -\begin{document} -%正文内容,引用参考文献 +\begin{document}%正文区开始: + %正文内容,引用参考文献 详见文献\cite{Peebles2001-100-100}\parencite{Babu2014--} -参考文献\cite[见][49页]{于潇2012-1518-1523}\parencite[见][49页]{Babu2014--} - -%打印参考文献表 +另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014--} + %打印参考文献表 \printbibliography[heading=bibliography,title=参考文献] \end{document} \end{texlist} @@ -220,18 +248,22 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subsection{编译方式} -不同于基于bibtex传统方法的四步编译,基于biblatex生成参考文献的文档编译一般只需三步,第一遍xelatex,第二遍biber,第三遍xelatex,但如需反向超链接,除设置backref 选项外,还需第四遍 xelatex 编译。例\ref{eg:compile:cmd} 给出编译命令,其中--synctex=-1 选项也可以是-synctex=1。而且这四步命令可以用一条命令latexmk -xelatex jobname.tex 代替。前述的最小工作示例的编译结果如图\ref{fig:eg:ref}所示。关于文档采用非utf-8编码和使用pdflatex命令编译的 -细节另见第\ref{sec:pkg:hints}节。 +与基于bibtex传统方法的四步编译不同,基于biblatex生成参考文献一般只需三步编译,第一遍xelatex,第二遍biber,第三遍xelatex。如若需要后向超链接,则除设置backref 选项外,还需第四遍 xelatex 编译。例\ref{eg:compile:cmd} 给出编译命令,其中\verb|--synctex=-1| 选项也可以是-synctex=1。另外四步命令可以用一条 latexmk 命令代替。 +关于非utf-8编码文档和使用pdflatex命令编译的细节另见第\ref{sec:pkg:hints}节。 -\begin{example}{使用biblatex宏包的文档编译命令}{eg:compile:cmd} +\begin{example}{文档编译命令}{eg:compile:cmd} \begin{texlist} +%四步编译命令 xelatex --synctex=-1 jobname.tex biber jobname xelatex --synctex=-1 jobname.tex xelatex --synctex=-1 jobname.tex +%或采用latexmk,则仅需一条命令 +latexmk -xelatex jobname.tex \end{texlist} \end{example} +前述的最小工作示例的编译结果如图\ref{fig:eg:ref}所示。 \begin{refsection} \begin{figure}[!htb] @@ -241,20 +273,22 @@ width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \deflength{\textparwd}{\linewidth-1cm} \parbox{\textparwd}{%\raggedright +\hyphenpenalty=50 %断词阈值,值越大越不容易出现断词 +\tolerance=9500 %丑度,10000为最大无溢出盒子,参考the texbook 第6章 详见文献\cite{Peebles2001-100-100}\parencite{Babu2014--} -参考文献\cite[见][49页]{于潇2012-1518-1523}\parencite[见][49页]{Babu2014--} +另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014--} \renewcommand{\bibfont}{\zihao{-5}} \printbibliography[heading=subbibliography,title=参考文献] } \end{tcolorbox} -\caption{最小工作示例的结果}\label{fig:eg:ref} +\caption{最小工作示例编译生成的PDF文档}\label{fig:eg:ref} \end{figure} \end{refsection} \section{使用说明} -\subsection{样式及选项加载方式} +\subsection{样式及选项加载} 例\ref{code:doc:structrue}中给出了宏包和样式的基本加载方式,选项的加载也类似。比如: @@ -273,10 +307,8 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \begin{texlist} %简单方式: \usepackage[backend=biber,style=gb7714-2015ay]{biblatex} -%设置gbpub=false取消缺省出版项自动填补信息,设置gbnoauthor=true以使用佚名或NOAUTHOR填补缺失的author信息: -\usepackage[backend=biber,style=gb7714-2015ay,gbpub=false,gbnoauthor=true]{biblatex} -%当文档为GBK编码且用pdflatex/latex编译时,应设置选项gbcodegbk=true: -\usepackage[backend=biber,style=gb7714-2015ay,gbcodegbk=true]{biblatex} +%设置gbnoauthor=true以使用佚名或NOAUTHOR填补缺失的author信息: +\usepackage[backend=biber,style=gb7714-2015ay,gbnoauthor=true]{biblatex} \end{texlist} \end{example} @@ -284,7 +316,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \begin{texlist} %默认方式,所有文献使用一种著录格式,即GB/T 7714-2015样式 \usepackage[backend=biber,style=gb7714-2015ms]{biblatex} -%设置gbstyle=false,则中文文献使用GB/T 7714-2015著录格式,而其它语言文献使用biblatex提供的标准样式 +%设置gbstyle=false,则中文文献使用GB/T 7714-2015著录格式,而其它语言文献使用biblatex标准样式 \usepackage[backend=biber,style=gb7714-2015ms,gbstyle=false]{biblatex} \end{texlist} \end{example} @@ -293,7 +325,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \begin{texlist} %默认方式使用顺序编码制样式 \usepackage[backend=biber,style=gb7714-2015mx]{biblatex} -%如果需要在某一参考文件分节使用作者年制样式,比如第2个refsection使用时,则在导言区设置: +%如需在某一参考文件分节使用著者年份制样式,比如第2个refsection中使用时,则在导言区设置: \setaystylesection{2} \end{texlist} \end{example} @@ -304,7 +336,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \end{texlist} \end{example} -其中,v1.0m版本增加的gb7714-2015ms样式文件,主要是为了在一个文献表中针对不同语言使用不同多种样式,比如中文文献使用GB/T 7714-2015规定的著录格式,而其它语言文献使用biblatex提供的标准样式。v1.0r版本增加了gb7714-2015mx样式,主要是为了在一个文档中针对不同参考文献分节使用不同的参考文献样式,比如某些节使用作者年制,某些节使用顺序编码制。尽管这些方式不很常用,但偶尔也有需求,所以都做了实现。应ddswhu要求,v1.0r版本增加了erj样式用于生成经济类期刊文献表。另外在egthesis文件夹内,针对国内一些大学的学位论文文献要求,基于gb样式做了一些定制和测试。 +其中,v1.0m版本增加的gb7714-2015ms样式文件,主要是为了在一个文献表中针对不同语言使用不同多种样式,比如中文文献使用GB/T 7714-2015规定的著录格式,而其它语言文献使用biblatex提供的标准样式。v1.0r版本增加了gb7714-2015mx样式,主要是为了在一个文档中针对不同参考文献分节使用不同的参考文献样式,比如某些节使用著者年份制,某些节使用顺序编码制。尽管这些方式不常用,但偶尔也有需求,所以都做了实现。另外应ddswhu要求,v1.0r版本增加了chinese-erj样式用于生成经济研究期刊的文献。且在egthesis文件夹内,针对国内一些大学的学位论文文献要求,基于国标样式做了一些定制和测试。 \subsubsection{新增选项}\label{sec:added:opt} 样式包新增了一些选项,用于标签对齐方式、出版项缺省处理、责任者(作者)缺省处理等功能的控制,其使用方式与biblatex宏包选项完全相同: @@ -318,7 +350,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \item gbalign=center,是list环境中的等宽标签,数字在[]内居中; \item gbalign=gb7714-2015,是项对齐方式,即段落环境中标签使用原始宽度,标签与条目内容等间距。 \end{itemize} - 该选项对作者年制无效。顺序编码制序号标签对齐方式测试, + 该选项对著者年份制无效。顺序编码制序号标签对齐方式测试, 数字在标签内居中见: \href{run:./example/opt-gbalign-center.tex}{opt-gbalign-center.tex}, 标签左对齐见: @@ -334,7 +366,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \item gbpub=true,自动利用:[出版地不详]、[出版者不详]、[S.l.]、[s.n.]等填补缺省信息; \item gbpub=false 则取消自动处理,使用标准样式的方式取消相应项的输出。 \end{itemize} - 顺序编码制测试(作者年制类似)见: + 顺序编码制测试(著者年份制类似)见: \href{run:./example/opt-gbpub-true.tex}{opt-gbpub-true.tex}, \href{run:./example/opt-gbpub-false.tex}{opt-gbpub-false.tex}。 @@ -353,10 +385,10 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \item[gbnoauthor]=true,\textbf{false}. \hfill default is false - 为作者年制增加的选项,用于控制责任者缺失时的处理。 + 为著者年份制增加的选项,用于控制责任者缺失时的处理。 \begin{itemize} \item gbnoauthor=false,当作者信息缺失时默认不做处理,使用标准样式的处理方式; - \item gbnoauthor=true,则根据GB/T 7714-2015 的要求进行处理,中文文献使用佚名来代替author,英文文献用 Anon 来代替author。 + \item gbnoauthor=true,则根据GB/T 7714-2015 的要求进行处理,中文文献使用“佚名”来代替author,英文文献用“Anon”来代替author。 \end{itemize} 测试结果见: \href{run:./example/opt-gbnoauthor-true.tex}{opt-gbnoauthor-true.tex}, @@ -372,7 +404,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \item gbnamefmt=givenahead,姓名的格式与biblatex标准样式的given-family格式一致,即名在前姓在后,类似于ieee的样式; \item gbnamefmt=familyahead时,姓名的格式与biblatex 标准样式的family-given格式一致,即姓在前名在后,类似于APA 的样式; \item gbnamefmt=pinyin 时,姓名的格式采用一种常见的中文拼音方式,比如对于 Zhao, Yu Xin 或 Yu Xin Zhao 这个姓名拼音格式化为ZHAO Yu-xin。 - \item gbnamefmt=reverseorder 时,姓名的格式与biblatex 标准样式的family-given/given-family格式一致,常用于经济学类的文献。 + \item gbnamefmt=reverseorder 时,姓名的格式与biblatex 标准样式的family-given/ given-family格式一致,常用于经济学类的文献。 \end{itemize} \bc{注意:还可以利用 nameformat 域为某一具体条目设置该条目的姓名格式,比如:要在一个文献表中实现英文文献是givenahead 格式,而拼音的文献是pinyin风格,那么可以设置拼音文献的 nameformat 域为pinyin,而gbnamefmt设置为givenahead。条目中nameformat 域的局部设置优先于gbnamefmt的全局设置。}\par \emph{注意:使用pinyin选项时,bib文件中文献的作者应给出完整的名而不是缩写,否则出来的效果未必令人满意}。 @@ -396,14 +428,14 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \item gbfieldtype=true,输出type域,例如学位论文的phdthesis或博士学位论文。输出该域时做中英文区分。 \item gbfieldtype=false,不输出type域。 - 要设置博士或硕士学位论文的输出,可以设置本地化字符串: \\ + 要设置博士或硕士学位论文的输出,有两种途径: 一是设置本地化字符串: \\ \lstinline!\DefineBibliographyStrings{english}{mathesis={str you want ma thesis}}!, \\ \lstinline!\DefineBibliographyStrings{english}{mathesiscn={硕士学位论文}}!, \\ \lstinline!\DefineBibliographyStrings{english}{phdthesis={str you want for phd thesis}}!, \\ \lstinline!\DefineBibliographyStrings{english}{phdthesiscn={博士学位论文}}!, \\ - 之所以用加cn的本地化字符串是为了某些样式需要区分中英文分别设置。 + 之所以用加cn的本地化字符串是为了适应某些样式对中英文文献的区别设置。 - 另一种设置方式是在bib文件直接设置type域为需要输出的字符,比如type={[博士学位论文]}。 + 二是设置type域,比如在bib文件直接设置需要输出的字符,比如type=\{[博士学位论文]\}。 \end{itemize} @@ -416,7 +448,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \item gbpunctin=false,则输出默认的本地字符串, 在英语中是\texttt{in:},若要完全去掉该符号则可以在导言区增加命令 \lstinline!\DefineBibliographyStrings{english}{in={}}!,\lstinline!\DefineBibliographyStrings{english}{incn={}}!。 - 之所以用加cn的本地化字符串是为了某些样式需要区分中英文分别设置。 + 之所以用加cn的本地化字符串是为了适应某些样式对中英文文献的区别设置。 \end{itemize} \item[gbctexset]=\textbf{true},false. \hfill default is true @@ -431,8 +463,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \lstinline[breaklines=true]!\DefineBibliographyStrings{english}{references={title you want}}!。 \end{itemize} - 当然除此之外,利用 printbibliography 命令的 title 选项进行设置依然是有效方式之一。比如: - + 当然除此之外,利用 printbibliography 命令的 title 选项进行设置依然是最有效方式,比如: \lstinline[breaklines=true]!\printbibliography[title=title you want]!。 @@ -503,8 +534,8 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename 为实现国标样式的脚注文献表格式而增加的选项。 \begin{itemize} - \item gbstyle=true,即默认做处理使脚注文献表满足国标要求。 - \item gbstyle=false,不做任何附加处理。 + \item gbfootbib=true,即默认做处理使脚注文献表满足国标要求。 + \item gbfootbib=false,不做任何附加处理。 \end{itemize} 该选项的实现主要是两个方面: @@ -513,10 +544,10 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \verb|\@makefnmark|重定义实现正文脚注标签带圈上标, 利用对\verb|\@makefntext|做patch局部化重设\verb|\@makefnmark|使得脚注中的标签不上标,利用对latex核心代码和hyperref宏包代码的重定义实现悬挂缩进的格式。 - 二是实现国标要求的相同的文献不输出,而是简化输出,比如同\textcircled{4} 等,主要利用citetracker 选项实现对文献引用的追踪,然后利用ifciteseen 判断和对footfullcite 命令做修改实现。 + 二是实现国标要求的相同文献不输出内容,而是用标签代替,比如同\textcircled{4} ,主要利用citetracker 选项实现对文献引用的追踪,然后利用ifciteseen 判断和对footfullcite 命令做修改实现。 测试文档见:\href{run:./example/opt-gbfootbib.tex}{opt-gbfootbib.tex}。 - 同时为了方便脚注的对齐格式控制增加了两个尺寸:\verb|\footbibmargin|和\verb|\footbiblabelsep|,分别表示脚注文本的左侧缩进距离和悬挂的脚注标记标签与脚注文本的间隔距离,默认分别是1em和0.5em。如果要修改悬挂对齐为其它对齐方式,那么需要重定义\verb|\@makefntext|宏,目前悬挂对齐的实现方式见bbx文件。比如下例中就重定义了两个尺寸为2em和1em: + 同时为了方便脚注的对齐格式控制增加了两个尺寸:\verb|\footbibmargin|和\verb|\footbiblabelsep|,分别表示脚注文本的左侧缩进距离和悬挂的脚注标记标签与脚注文本的间隔距离,默认分别是1em和0.5em。如果要修改悬挂对齐为其它对齐方式,那么需要重定义\verb|\@makefntext|宏,目前悬挂对齐的实现方式见bbx文件。比如示例中重定义这两个尺寸为2em 和1em: {\small \vspace{1ex} @@ -548,30 +579,52 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \end{example} 但要注意由于hyperref本身的原因,这种方式产生的脚注文献表可能没有超链接功能。 + 对于表格环境中的引用无法产生脚注文献表的问题,可以将其置于小页环境中实现或者采用前述图标标题中的类似处理方式。 注意:latex核心代码参考latex.ltx,而hyperref代码参考hyperref.STY。 + \item[gbfnperpage]=true,\textbf{false}. \hfill default is false + + 为脚注计数器根据页码更新而增加的选项。 + \begin{itemize} + \item gbfnperpage=true,每页更新脚注编号,即根据page计数器重设footnote计数器。 + \item gbfnperpage=false,不根据页码重设脚注计数器。 + \end{itemize} + + 注意,若要让脚注计数器与其它计数器比如chapter等关联,那么采用latex的常规方法就能解决,比如使用latex内核常用的\verb|\@addtoreset|命令。 + + \item[mergedate]=true,false,none. - 为作者年制是否在文献表中作者后面输出日期信息而增加了选项值none。 + 为著者年份制是否在文献表中作者后面输出日期信息而增加了选项值none。 \begin{itemize} - \item mergedate=true,作者年制文献表仅在作者后输出日期 - \item mergedate=false,作者年制文献表在作者后和出版项中输出日期 - \item mergedate=none,作者年制文献表仅在出版项中输出日期。该选项用于满足中科院大学的作者年制格式要求。 + \item mergedate=true,著者年份制文献表仅在作者后输出日期 + \item mergedate=false,著者年份制文献表在作者后和出版项中输出日期 + \item mergedate=none,著者年份制文献表仅在出版项中输出日期。该选项用于满足中科院大学的著者年份制格式要求。 \item no mergedate,即不给出该选项,这是gb7714-2015ay默认的情况,仅在作者后输出日期且已经根据国标格式化。 \end{itemize} \item[gblanorder]=\textbf{chineseahead},englishahead,userdefinedstr like:cn;en;ru;fr;jp;kr . \hfill default is chineseahead - 为作者年制文献不同语言分集排序而增加的选项。 + 为著者年份制文献不同文种分集排序而增加的选项。 \begin{itemize} - \item gblanorder=chineseahead,即默认做中文文献在前的排序,各语言顺序为: cn;jp;kr;en;fr;ru。 - \item gblanorder=englishahead,做英文在前的排序,各语言顺序为: en;fr;ru;cn;jp;kr。 - \item gblanorder=自定义字符串,比如cn;en;ru;fr;jp;kr。这是一个用分号分隔的语言缩写名构成的字符串,缩写的前后顺序表示文献表中语言分集的顺序。 + \item gblanorder=chineseahead,即默认做中文文献在前英文文献在后的排序,各语言顺序为: cn;jp;kr;en;fr;ru。 + \item gblanorder=englishahead,做英文在前中文文献在后的排序,各语言顺序为: en;fr;ru;cn;jp;kr。 + \item gblanorder=自定义字符串,比如cn;en;ru;fr;jp;kr。这是一个用分号分隔的语言缩写名构成的字符串,缩写名的前后顺序代表文献表中文种分集的顺序。 \end{itemize} 测试文档见:\href{run:./example/opt-gblanorder.tex}{opt-gblanorder.tex}。 + \item[gbannote]=true,\textbf{false}. \hfill default is false + + 为控制是否在文献条目后面输出由annotation或annote域提供的注释信息而增加的选项。 + \begin{itemize} + \item gbannote=false,即默认不输出。 + \item gbannote=true,输出注释信息。 + \end{itemize} + + 测试文档见:\href{run:./example/opt-gbannote.tex}{opt-gbannote.tex}。 + \end{description} @@ -589,7 +642,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \item[uniquelist]=true, false, minyear \hfill default: minyear - 该选项用于作者年制样式,用于正文中引用(标注)标签的作者列表控制(目的是消除歧义)。当uniquelist=true时,自动利用扩展作者姓名列表长度的方式消除labelname 列表的歧义; 当=false 时则禁用扩展,标签仅使用一个作者,消除歧义通过跟在年份后面的字母实现; 默认使用minyear,即当被截短的作者姓名列表存在歧义时,只有当年份相同,才会扩展列表长度以消除歧义。 + 该选项用于著者-出版年制样式,用于正文中引用(标注)标签的作者列表控制(目的是消除歧义)。当uniquelist=true时,自动利用扩展作者姓名列表长度的方式消除labelname 列表的歧义; 当=false 时则禁用扩展,标签仅使用一个作者,消除歧义通过跟在年份后面的字母实现; 默认使用minyear,即当被截短的作者姓名列表存在歧义时,只有当年份相同,才会扩展列表长度以消除歧义。 注意当使用uniquelist=false后标签只有一个作者,但文中可能有同姓作者的文献,这时根据uniquename选项的设置,biblatex会使用姓名的其它部分比如名来消除歧义,但如果想强制要求仅用姓作为文中的标注标签,那么可以设置uniquename=false,但此时标注是可能存在歧义的。 @@ -637,7 +690,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename 该选项在文档分段处(例如一章或一节)自动执行citereset 命令。 - \item[labeldate]=year, short, long, terse, comp, ymd, edtf. \hfill default: year + \item[labeldate]=year, short, long, terse, comp, ymd, iso. \hfill default: year 类似于 date 选项,但控制的是由DeclareLabeldate 选择的日期域的格式。 @@ -686,7 +739,7 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename 详细说明见biblatex手册。 - \item[其它]=下面还有很多选项,有些是宏包载入时选项,与样式无关,一般可以使用,但笔者没有做测试,各位朋友可以测试使用。选项的作用可以参考biblatex 使用手册,以及笔者和Wenbo 翻译的中文版。 + \item[其它]=下面还有很多选项,有些是宏包载入时选项,与样式无关,一般可以使用,但笔者没有做测试,各位用户可以测试使用。选项的作用可以参考biblatex 使用手册,以及文博与笔者翻译的中文版。 \begin{itemize} \item related=true, false. default: true \item defernumbers=true, false default: false @@ -710,30 +763,66 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \end{description} -\subsection{文献引用及其标注格式}\label{sec:cbx:usage} +\subsection{文献引用及标注格式}\label{sec:cbx:usage} -要生成参考文献,第一步就是在正文中引用参考文献。引用参考文献在正文中所形成标注的格式称为参考文献标注样式,也称引用样式或引用标签样式,分为两类: 顺序编码制和著者年份(作者年)制。引用文献的基本命令\verb|\cite|,但为了一篇文档中实现不同的标签效果,通常还需要使用其它命令, -比如\verb|\parencite|, \verb|\textcite|, \verb|\pagescite|,\verb|\footfullcite|等。习惯natbib的用户也可以在加载natbib选项后, -可使用\verb|\citet|, \verb|\citep|命令。 +要生成参考文献,第一步就是在正文中引用参考文献。正文中因引用文献所形成的标注的格式称为参考文献标注样式,也称引用样式或引用标签样式,分为两类: 顺序编码制和著者-出版年(作者年)制。引用文献的基本命令是\verb|\cite|,但为了在一篇文档中实现不同的标签效果,通常还需要使用其它命令, +比如\verb|\parencite|, \verb|\textcite|, \verb|\pagescite|,\verb|\footfullcite|等。此外为遵循biblatex对于复数形式标注命令的使用习惯,也提供上述命令的复数形式,比如\verb|\cite|命令的复数形式命令\verb|\cites|,便于输出单个文献的页码等前后注信息。 + +熟悉natbib的用户也可以直接使用使用\verb|\citet|, \verb|\citep|命令。 +另外也可以使用一些习惯命令比如\verb|\citetns|、\verb|\citepns|、 +\verb|\upcite|、\verb|\inlinecite|等。 + +\subsubsection{两种编制的标注格式} %顺序编码制的标注样式文件大体使用标准引用样式numeric-comp的内容 \paragraph{\heiti 顺序编码制的标注样式} +为满足GB/T 7714-2015第10.1节的要求,考虑\verb|\cite| 命令为上标模式,\verb|\parencite|保留非上标模式。增加 \verb|\pagescite| 命令,用于输出上标顺序编号并自动加页码。 +为使用户免于输入文献作者,完善了\verb|\textcite|命令,提供作者为句子主语,并附带行内非上标的顺序编码, +并增加了\verb|\authornumcite|命令,以输出作者作为句子主语,并附带上标的顺序编码。 +增加了\verb|\citec|命令,输出另一种形式的编码压缩标签,比如\textsuperscript{[2]-[4]}区别于一般的\textsuperscript{[2-4]}。 + +其它命令\verb|\citet|、\verb|\citep|、\verb|\citetns|、\verb|\citepns|、 +\verb|\upcite|、\verb|\inlinecite|分别等价于 +\verb|\authornumcite|、\verb|\cite|、\verb|\textcite|、\verb|\parencite|、 +\verb|\cite|、\verb|\parencite|。 + +上述命令均可在{bibtexkey}前面的[]内或第二个[]内(当有两个[]时),指定页码用于输出。若不指定页码,则仅有\verb|\pagescite|命令默认提取参考文献的页码信息进行输出。 +各引用命令的使用方式如表\ref{tab:cite:num}所示。 +测试文档见\href{run:example/testallformat.tex}{testallformat.tex}。 -\verb|\cite| 命令为上标模式,\verb|\parencite|保留非上标模式。为满足GB/T 7714-2015第10.1.3节的要求,增加了 \verb|\pagescite| 命令。为使用户免于输入文献作者来作为句子主语,完善了\verb|\textcite|命令格式, -并增加了\verb|\authornumcite|命令以同时输出作者和顺序编码。 %各命令使用方式如例\ref{eg:citefornumeric}所示。 %各引用命令的效果如图\ref{fig:cite:num}所示。 -各引用命令的使用方式如表\ref{tab:cite:num}所示。 + +\qd{对于一个引用命令中同时给出多个文献bibtexkey的压缩形式,页码只会应用到最后一个参考文献后面,这是不正确的,但这种情况其实本不应出现,因为指定页码本来就需要具体化指向某一文献。使用时请尽可能使用 +\textbackslash pagescite\{key1\}\textbackslash pagescite\{key2\}这种形式 +而不是\textbackslash pagescite\{key1,key2\}|。当然除了多次使用标注命令外,也可以使用对应标注命令的复数形式来为每篇文献提供相应的页码信息。} + + +%著者-出版年制的标注样式文件大体使用标准引用样式authoryear的内容。 +\paragraph{\heiti 著者-出版年制的标注样式} +为满足GB/T 7714-2015第10.2节的要求, +考虑\verb|\cite|和\verb|\parencite|命令将引用标签用圆括号括起来。增加了\verb|\pagescite|命令,用于自动加页码。增加了\verb|\yearpagescite|, \verb|\yearcite|命令用于处理文中已有作者信息只需要年份和页码的情况(为兼容性考虑,顺序编码制也给出该命令,但作用与 +\verb|\pagescite| 命令相同),也完善了 \verb|\textcite| 命令,提供作者为句子主语,并附带行内非上标的页码,增加了\verb|\authornumcite|命令,以输出作者作为句子主语,并附带上标的页码。 + +其它命令\verb|\citet|、\verb|\citep|、\verb|\citetns|、\verb|\citepns|、 +\verb|\upcite|、\verb|\inlinecite|分别等价于 +\verb|\authornumcite|、\verb|\cite|、\verb|\textcite|、\verb|\parencite|、 +\verb|\cite|、\verb|\parencite|。 + +%各命令使用方式如例\ref{eg:citeforauthoryear}所示。 +%各引用命令的效果如图\ref{fig:cite:ay}所示。 +各引用命令的使用方式如表\ref{tab:cite:authoryear}所示。 测试文档见\href{run:example/testallformat.tex}{testallformat.tex}。 +%\begin{table}[!htb] +\noindent\begin{minipage}{0.95\linewidth} \begin{refsection} -\begin{table}[!htb] \centering -\caption{顺序编码制常用命令示例}\label{tab:cite:num} -\small +\fixtabcaption{顺序编码制常用命令示例}\label{tab:cite:num} +\footnotesize \begin{tabular}{l@{\quad$\Rightarrow$\quad}ll} \hline -命令 & 标注标签 & 说明 \\ \hline +\heiti{命令} & \heiti{标注标签} & \heiti{说明} \\ \hline \verb|\cite{Peebles2001-100-100}| & \cite{Peebles2001-100-100} & 不带页码上标 \\ \verb|\upcite{Peebles2001-100-100}| & \upcite{Peebles2001-100-100} & 不带页码上标 \\ \verb|\supercite{Peebles2001-100-100}| & \supercite{Peebles2001-100-100} & 不带页码上标 \\ @@ -747,8 +836,9 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \verb|\citeauthor{蔡敏2006--}\cite{蔡敏2006--}| & \citeauthor{蔡敏2006--}\cite{蔡敏2006--} & 提供主语上标标签 \\ \verb|\footfullcite{赵学功2001--}| & \footfullcite{赵学功2001--} & 脚注方式文献条目 \\ 引用单篇文献: & 文献\cite{Peebles2001-100-100} & 国标示例 \\ - 同一处引用多篇文献: & 文献\cite{Peebles2001-100-100,Miroslav2004--} & 国标示例\\ + 同一处引用两篇文献: & 文献\cite{Peebles2001-100-100,Miroslav2004--} & 国标示例\\ 同一处引用多篇文献: & 文献\cite{蔡敏2006--,Miroslav2004--,赵学功2001--} & 国标示例:三篇以上压缩\\ + 同一处引用多篇文献: & 文献\citec{蔡敏2006--,Miroslav2004--,赵学功2001--} & 另一种形式的压缩\\ 多次引用同一作者的同一文献: & 文献\cite[20-22]{Miroslav2004--}, 文献\cite[55-60]{Miroslav2004--} & 国标示例 \\ @@ -756,65 +846,22 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename 文献\footfullcite[20-22]{Miroslav2004--}, 文献\footfullcite[55-60]{Miroslav2004--} & 国标示例:脚注方式 \\ \hline \end{tabular} -\end{table} \end{refsection} +\end{minipage} +%\end{table} -%\begin{example}{顺序编码制引用命令}{eg:citefornumeric} -%\begin{texlist} -%不带页码的引用(上标,方括号包围): -% \cite{Peebles2001-100-100}\upcite{Peebles2001-100-100} -% \supercite{Peebles2001-100-100} -%不带页码的引用(非上标,方括号包围): -% \parencite{Miroslav2004--} -%带页码的引用: -% \cite[49]{蔡敏2006--} \parencite[见][49页]{Miroslav2004--} -% \pagescite{Peebles2001-100-100}\pagescite[150]{Peebles2001-100-100} -% \pagescite[][201-301]{Peebles2001-100-100} -%同时输出作者和顺序编码的三种引用方式: -% (a)直接的方法:见\citeauthor{refb}\cite{refb}, \citeauthor{refc}\cite{refc} -% (b)定义新的标注命令:见\authornumcite{refb,refc} -% (c)用textcite但没有上标:见\textcite{refb,refc} -%在页脚中引用和打印文献表: -% \footnote{在脚注中引用\footcite{赵学功2001--}} \footfullcite{赵学功2001--} -% \end{texlist} -%\end{example} -% -%\begin{figure}[!htb] -%\begin{tcolorbox}[left skip=0pt,right skip=0pt,% -%width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% -%leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] -%\centering -%\deflength{\textparwd}{\linewidth-1cm} -%\parbox{\textparwd}{ -%\includegraphics{egcitenum.pdf} -%} -%\end{tcolorbox} -%\caption{顺序编码制标注格式}\label{fig:cite:num} -%\end{figure} -其中,当不指定页码时,\verb|\pagescite|命令默认调用参考文献的页码数据进行输出,如果需要指定页码,那么需要在[]内或第二个[]内(当有两个[]时)输入页码。 -\qd{对于多个文献一起的压缩形式,指定页码只会应用最后一个参考文献的页码,这是不正确的,但这种情况其实本不应出现,因为指定页码本来就需要具体化指某一文献。使用时请尽可能使用 -\textbackslash pagescite\{key1\}\textbackslash pagescite\{key2\}这种形式 -而不是\textbackslash pagescite\{key1,key2\}|。} -%作者年制的标注样式文件大体使用标准引用样式authoryear的内容。 -\paragraph{\heiti 作者年制的标注样式} \verb|\cite|和\verb|\parencite|命令将引用标签用圆括号括起来。为满足GB/T 7714-2015第10.2.4节的要求,增加了\verb|\pagescite|命令。 -为满足GB/T 7714-2015第10.2.1节的要求,增加了\verb|\yearpagescite|, \verb|\yearcite|命令用于处理文中已有作者信息只需要年份和页码的情况(为兼容性考虑,顺序编码制也给出该命令,但作用与 -\verb|\pagescite| 命令相同),也完善了 \verb|\textcite| 命令为句子提供主语。 -%各命令使用方式如例\ref{eg:citeforauthoryear}所示。 -%各引用命令的效果如图\ref{fig:cite:ay}所示。 -各引用命令的使用方式如表\ref{tab:cite:authoryear}所示。 -测试文档见\href{run:example/testallformat.tex}{testallformat.tex}。 \begin{table}[!htb] \centering \caption{著者年份制常用命令示例}\label{tab:cite:authoryear} -\includegraphics[scale=0.85]{egciteaytab.pdf} +\hspace{-1cm}{\parbox{\linewidth}{\includegraphics[scale=0.95]{egciteaytab.pdf}}} \end{table} -%\begin{example}{作者年制引用命令}{eg:citeforauthoryear} +%\begin{example}{著者-出版年制引用命令}{eg:citeforauthoryear} %\begin{texlist} %不带页码的引用: % \cite{Peebles2001-100-100} \parencite{Miroslav2004--} @@ -822,13 +869,13 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename % \cite[49]{蔡敏2006--} \parencite[见][49页]{Miroslav2004--} % \pagescite{Peebles2001-100-100}\pagescite[150]{Peebles2001-100-100} % \pagescite[][201-301]{Peebles2001-100-100} -%作者年制文中已有作者只需给出年份和页码的引用: +%著者-出版年制文中已有作者只需给出年份和页码的引用: % 见赵学功\yearpagescite[][205]{赵学功2001--}和Miroslav\yearpagescite[][15]{Miroslav2004--} -%作者年制文中已有作者只需给出年份的引用,三种方式: +%著者-出版年制文中已有作者只需给出年份的引用,三种方式: % 见赵学功\yearcite{赵学功2001--} % 见赵学功(\cite*{赵学功2001--}) % 见赵学功(\citeyear{赵学功2001--})\par -%作者年制文中无作者需要标注命令给出作者作为主语的引用: +%著者-出版年制文中无作者需要标注命令给出作者作为主语的引用: % 见\textcite{赵学功2001--}\par %在页脚中引用和打印文献表: % \footnote{在脚注中引用\footcite{赵学功2001--}} \footfullcite{赵学功2001--} @@ -845,12 +892,50 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename %\includegraphics{egciteay.pdf} %} %\end{tcolorbox} -%\caption{作者年制标注格式}\label{fig:cite:ay} +%\caption{著者-出版年制标注格式}\label{fig:cite:ay} %\end{figure} -\subsection{打印文献表及其著录格式}\label{sec:usage:bbx} +\subsubsection{标注格式局部调整} + +标注在同一个文档中是可能存在不同格式需求的,比如:有的地方需要用上标,有的地方需要用行内,有的地方需要给出作者,有的地方需要给出页码等。一般情况下,不同标注格式可以通过使用不同的标注命令来得到,比如上一小节给出的大量不同的命令,不同命令能够产生独特的标注标签。 -引用文献后,可以在文档需要的位置利用 \verb|\printbibliography| 命令输出。文献表输出的格式称为参考文献著录样式,也称著录表样式或著录格式,也分两类: 顺序编码制和作者年制(著者-出版年制)。 +除了利用命令来调整标注格式外,还有更多的方法来进行局部格式调整。这利用了tex的编组特性,编组内的局部格式不影响编组外的格式,所以可以利用编组内的局部设置来调整标注的格式,类似的,文献表的著录格式也是可以局部调整的,见下一节。 + +引用文献所产生标注标签的格式包括很多内容,包括作者数量,标点,本地化字符串等。最常见的局部调整需求是标点和本地化字符串。这里以双语图题中的引用标签的不同本地化字符串需求为例来展示局部调整的方法。 + +在中科院某类学位论文中,正文的标注标签要求两个英文作者之间用和而不是and连接,多个英文作者截断成一个作者时后面用等.而不是et al.表示。这可以容易通过设置本地化字符串来实现。然而对于双语的图题,英文图题中的出现等与和这样的字符实在不雅,所以又要求在这种全英文的环境中将和与等.更换为英文的表示符号,这就需要利用本地化字符串的局部调整。这种本地化字符串的局部调整其实已经是比较深入的内容,因为biblatex提供的接口DefineBibliographyStrings是全局的设置,如何进行局部调整并没有非常方便的接口,要解决这一需求,需要对biblatex以及gb7714-2015样式有比较深入的了解。 + +因为gb7714-2015通过gbcitelocalcase计数器来选择使用中文或英文的本地化字符串,因此通过局部设置gbcitelocalcase可以局部的选择不同语言的本地化字符串,然而因为本地化字符串的内容通常是全局设置的,所以当中文的或者英文的本地化字符串设置都不满足要求时,就需要局部的调整本地化字符串的内容,如\ref{eg:str:localset}所示,对本地化字符串andothersincite的内容做了调整,从全局设置的等.转换为et al.,和转换为and,这种局部设置是通过csdef对保存字符串信息的命令直接做的调整。比如\verb|\csdef{abx@sstr@andothersincite}{et al.}|就是将andothersincite本地化字符串的内容临时调整为et al.。 + +为方便用户使用,提供了 +\verb|\setlocalbibstring|命令来替代上述直接定义的csdef命令,比如: +\verb|\setlocalbibstring{andothersincite}{et al.}|,等价于与前面csdef那条命令。 +另外,如果要在本地化字符串的内容设置中使用biblatex提供的一些标点命令,比如adddot等,那么需要对其进行保护,避免直接展开导致命令未定义的错误,比如: +\verb|\setlocalbibstring{andothersincite}{et al\protect\adddot}| + +具体的测试见\href{egthesis/thesis-ucas-m.tex}{thesis-ucas-m.tex} + + \begin{example}{双语图题内的标注标签的本地化字符串局部设置}{eg:str:localset} + \begin{texlist} +\begin{figure}[!htbp] + \centering + \fbox{\parbox{5cm}{example fig\\在双语图题中强制使用某种语言的方式}} + \bicaption{中文图题具体见{\cite{walls2013drought}\cite{betts2005aging}}} + {English fig title See{\setlocalbibstring{andothersincite}{et al\protect\adddot}\setlocalbibstring{andincite}{and}\cite{walls2013drought} + \cite{betts2005aging}}}\label{fig:bi:lang} +\end{figure} + \end{texlist} + \end{example} + + + + + + + +\subsection{文献表输出及著录格式}\label{sec:usage:bbx} + +引用文献后,可以在文档需要的位置利用 \verb|\printbibliography| 命令输出文献表。文献表的输出格式称为参考文献著录样式,也称著录表样式或著录格式,也分两类: 顺序编码制和著者-出版年制(作者年制)。 %顺序编码制的参考文献样式基于标准样式numeric-comp/numeric \paragraph{\heiti 顺序编码制样式} 中各条参考文献条目以数字序号按引用先后顺序组织。 @@ -858,15 +943,18 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename 各类型文献条目的著录格式见\ref{sec:numeric:data}节, 参考文献条目中各信息域及其录入方式见\ref{sec:bib:bibtex}节。 -%作者年制的参考文献样式则基于标准样式authoryear -\paragraph{\heiti 作者年制样式} 中各条参考文献条目以作者-年为标签以一定的顺序排列。作者年制的著录格式与顺序编码制基本相同(除了把年份提到了作者后面作为文献条目内的标签)。数据源bib文件中各条目的数据录入与顺序编码制完全一致。 +%著者-出版年制的参考文献样式则基于标准样式authoryear +\paragraph{\heiti 著者-出版年制样式} 中各条参考文献条目以作者-年为标签以一定的顺序排列。著者-出版年制的著录格式与顺序编码制基本相同,差别仅在于把年份提前到作者后面作为条目的标签。数据源bib文件中各条目的数据录入与顺序编码制完全一致。 + +\qd{著者-出版年制有文献按文种集中的要求,因此gb7714-2015ay样式设计了gblanorder选项来配合专用的排序模板,可以方便地设置不同文种的先后顺序,默认文种顺序是中日韩英法俄。如需其他顺序则可利用gblanorder选项重设,设置方法见第\ref{sec:added:opt}节。此外,由于排序需要根据文献所使用的语言判断,因此使用language域,该域由biblatex-gb7714-2015宏包自动判断处理,一般不需过多关注,如果当语言判断出现问题,可以在bib文件中手动设置language域为正确的语言,比如chinese,japanese,english,french等。} -\qd{作者年制有分文种文献集中的要求,因此gb7714-2015排序模板以nyt模板为基础,增加 language 作为 name 前的排序域。默认情况下,本样式文件将标题(或作者)为中文的文献的 language 域设置成 chinese,英文的设置成 english。这一设置过程,在biber 处理时自动完成。当出现问题或者有更多文种分集且有特殊顺序时,可以在bib文件中为相应文种文献的 language 域手动设置适合排序的字符串。比如: 中文文献设置为 chinese,英文文献设置为 enlish,法文文献设置为 french,那么排序中,相应的中文文献排在最前面,英文文献在中间,法文文献最后,因为升序情况下字母顺序是c然后e然后f。} +%前一段为20190331更新 +%\qd{著者-出版年制有分文种文献集中的要求,因此gb7714-2015排序模板以nyt模板为基础,增加 language 作为 name 前的排序域。默认情况下,本样式文件将标题(或作者)为中文的文献的 language 域设置成 chinese,英文的设置成 english。这一设置过程,在biber 处理时自动完成。当出现问题或者有更多文种分集且有特殊顺序时,可以在bib文件中为相应文种文献的 language 域手动设置适合排序的字符串。比如: 中文文献设置为 chinese,英文文献设置为 enlish,法文文献设置为 french,那么排序中,相应的中文文献排在最前面,英文文献在中间,法文文献最后,因为升序情况下字母顺序是c然后e然后f。} %上一段2016-1114更新,下面是以前的说法。 %\qd{根据文种文献集中的要求,修改了nyt排序格式,增加了userb作为name前的排序域,当有需求进行多文种分集且有特殊顺序时,在bib文件中给相应文种的文献设置适合排序的字符串。比如中文文献设置为cn,英文文献设置为en,法文文献设置为fr,那么排序中,相应的中文文献排在最前面,英文文献在中间,法文文献最后,因为升序情况下字母顺序是c然后e然后f。} -打印出的文献表格式控制主要有两个部分的格式需要控制,一是文献表的段落格式,二是文献表中各条文献的著录格式: +打印出的文献表主要有两个部分的格式需要控制,一是文献表的段落格式,二是文献表中各条文献的著录格式: \subsubsection{段落格式控制} @@ -880,27 +968,23 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \begin{example}{文献表段落格式、字体、颜色、间距控制}{eg:biblist:fontset} \begin{texlist} % 换行的控制 -% 选项 block=none , space , par , nbpar , ragged -% 或\renewcommand*{\newblockpunct}{\par\nobreak} - + % 选项 block=none , space , par , nbpar , ragged + % 或\renewcommand*{\newblockpunct}{\par\nobreak} % 字体的控制:\textit,sl,emph-楷体,\textbf,sf-黑体,\texttt-仿宋,\textsc,md,up-宋体 -% 全局字体 + % 全局字体 \renewcommand{\bibfont}{\zihao{-5}}%\fangsong -% 题名字体 + % 题名字体 \renewcommand{\bibauthorfont}{\bfseries\color{teal}}% \renewcommand{\bibtitlefont}{\ttfamily\color{blue}}% \renewcommand{\bibpubfont}{\itshape\color{violet}}% -% url和doi字体 + % url和doi字体 \def\UrlFont{\ttfamily} %\urlstyle{sf} %\def\UrlFont{\bfseries} % 间距的控制 -\setlength{\bibitemsep}{0ex} -\setlength{\bibnamesep}{0ex} -\setlength{\bibinitsep}{0ex} - +\setlength{\bibitemsep}{0ex}\setlength{\bibnamesep}{0ex}\setlength{\bibinitsep}{0ex} % 文献表中各条文献的缩进控制 %\setlength{\bibitemindent}{0em} % bibitemindent表示一条文献中第一行相对后面各行的缩进 -%\setlength{\bibhang}{0pt} % 作者年制中 bibhang 表示的各行起始位置到页边的距离,顺序编码制中 bibhang+labelnumberwidth 表示各行起始位置到页边的距离 +%\setlength{\bibhang}{0pt} % 著者-出版年制中 bibhang 表示的各行起始位置到页边的距离,顺序编码制中 bibhang+labelnumberwidth 表示各行起始位置到页边的距离 % 标点类型的控制(全局字体能控制标点的字体) \end{texlist} @@ -924,7 +1008,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] 更多选项的详细说明见第\ref{sec:added:opt}、\ref{sec:old:opt}小节。 图\ref{fig:content:fmta}给出了选项设置为 style=gb7714-2015, gbnamefmt=givenahead, -gbpub=false, gbbiblabel=box, gbtitlelink=true 时的文献表,可以看到作者姓名、序号标签、标题超链接的设置。 +gbpub=false, gbbiblabel=dot, gbtitlelink=true 时的文献表,可以看到作者姓名、序号标签、标题超链接的设置。 \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% @@ -953,16 +1037,16 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] 图\ref{fig:content:fmtc}为选项和本地化字符串如例\ref{eg:localstr:diff}设置时的引用标注和文献表,注意其中引用标注和文献表中的不同本地化字符串输出效果,引用标注中英文作者和中文作者缩略词的不同。这是中科院大学资环类学位论文的要求格式,可以看到尽管有些特殊,但通过选项设置和本地化字符串设置也能实现。 -\begin{example}{作者年制标注和文献表不同本地字符串效果}{eg:localstr:diff} +\begin{example}{著者-出版年制标注和文献表不同本地字符串效果}{eg:localstr:diff} \begin{texlist} \usepackage[backend=biber,style=gb7714-2015ay,gbnamefmt=lowercase,maxcitenames=2,mincitenames=1, -gbbiblocal,sortcites,sorting=gbyntd]{biblatex} +sortcites=false,sorting=gbynta]{biblatex} + \renewcommand{\bibauthorfont}{\color{violet}}% \DefineBibliographyStrings{english}{ andincite = {和}, andincitecn = {和}, - andothersincitecn = {等}, andothersincite = {等{\adddot}},%adddot才能避开标点追踪 -} + andothersincitecn = {等}, } \end{texlist} \end{example} @@ -978,13 +1062,175 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \caption{文献表条目著录格式示例三}\label{fig:content:fmtc} \end{figure} +\subsubsection{著录格式局部调整}\label{sec:entry:fmtlocal} + +得益于biblatex利用tex宏控制著录格式的特点,加上tex语言本身编组的局部化特性,所以在利用biblatex生成参考文献的过程中可以有丰富手段,来进行参考文献著录格式的局部调整。也正因为局部的格式调整,因此通常局部格式都是结合refsection或者refsegment来操作的。前面提到过的一个很简单的例子,当在学位论文的写作中需要正文部分的参考文献使用顺序编码制,而附录中研究成果部分使用作者年制这样的需求就是一个典型的局部化格式调整。这一问题的解决方式为在研究成果部分使用一个refsection将其局部化,并结合gb7714-2015mx样式,并利用setaystylesection命令设置该refsection为作者年制样式。 + +因为tex宏的局部化调整特性,因此几乎biblatex中所有格式设置都是可以做局部调整的,限于篇幅,这里仅介绍一些常见的简单的调整方式: + +\begin{enumerate} + \item 文献表标题 + + 局部重定义bibname、refname或者局部重设printbibliography命令的选项可以设置文献表标题。 + + \item 文献表段落格式 + + 局部重定义bibfont命令即可局部设置参考文献的字体颜色等,进一步重定义bibauthorfont、bibtitlefont、bibpubfont 等命令用于控制文献不同著录项的格式。 + + 局部重定义bibitemindent 尺寸可以设置文献表的缩进 + + 局部重定义bibitemsep、bibnamesep、bibinitsep可以设置文献表的各条目的间距 + + \item 文献表条目著录格式 + + biblatex中绝大部分的控制选项都是使用toggle的方式,比如url选项,gbtype选项,gbannote选项等,因此在局部设置选项对应的toggle 值可以局部设置选项控制的格式。 + 另外也有一些选项使用的是计数器,比如gbnamefmt选项,因此局部设置选项对应的计数器的值可以局部设置选项控制的格式。 + 当然由于一些选项的特殊性,它无法简单的进行利用toggle值或计数器值进行设置,而可能需要调整选项对应的宏的内容,因此复杂度会明显提升,如果不是非常必要,建议不要去局部化重设这些选项的所对应的格式。 + + 示例见\href{run:./example/opt-gbannote.tex}{opt-gbannote.tex}。 + + \item 文献表条目中域或标点的格式 + + biblatex中域和标点的格式设置其实是比较简单的,且设置命令不限制一定要在导言区中,因此做局部化调整也是合适的。比如在一个refsection中需要将期刊文献的volume域的格式设置为粗体,那么可以做设置为: + + \begin{example}{域格式的局部调整示例}{eg:bib:fieldsetlocal} + \begin{texlist} + \DeclareFieldFormat[article,periodical]{volume}{\textbf{#1}}% volume of a journal + \end{texlist} + \end{example} + +\end{enumerate} + +实施上格式的局部调整和全局调整本质上是一致的,文献样式中几乎所有格式设置,都可以做局部化处理。当然做全面的样式设计会稍微往深里去一点,考虑的问题也会更多,但局部格式调整是可以借鉴的,关于样式中的格式设置和说明请参考: +\href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% +{biblatex高级使用方法和样式包设计实现方法}。 + + + + + + +\subsection{文献表排序与调整} + +\subsubsection{国标要求的排序方式} + +排序是文献表格式的重要内容。国标的两种编制方式中,顺序编码制要求文献表中的文献按照正文中文献引用的先后顺序进行排序,而著者-出版年制则要求文献表首先按照文种对不同语言的文献进行分组,中文在前英文在后,分组内的中文文献则以拼音或笔画进行排序,而西文文献则按照字母顺序进行排列。在gb7714-2015国标样式中两种编制方式的排序分别以如下选项设置来实现: + +\begin{example}{两种编制方式的排序设置}{eg:bib:sorting} +\begin{texlist} +%顺序编码制: +sorting=none + +%著者-出版年制: +sorting=gb7714-2015,gblanorder=chineseahead,sortlocale=zh__pinyin +\end{texlist} +\end{example} + +这些设置是样式的默认设置,用户如果没有其他需求则无需调整,若需调整详见下一节。 + +\subsubsection{排序的逻辑和调整方法} + +文献表中文献的排序通常是由处理bib文件的后端程序实施的,比如bibtex或biber程序。通常biblatex选择biber作为后端程序来实现更灵活的排序机制。biber在处理过程中读取bib文件信息并根据biblatex宏包和文献样式在bcf文件中输出设置信息执行排序。而bibtex程序则在读取bib文件后根据bst样式进行排序,尽管可以让bibtex读入特殊格式bib文件来提供一些设置参数,但总的来说基于bibtex的文献排序是由bst样式决定的。而biber程序则是提供了一套工具,具体的排序方式是由biblatex宏包和样式文件中的设置决定的,biber根据这些设置执行特定的逻辑来实现排序。 + +biblatex通过sorting选项选择排序模板来进行排序,而排序模板是可以自定义的。 +gb7714-2015ay样式提供了gblanorder选项来选择文种的排列顺序,其本质是对排序模板中与语言相关的域进行设置,因此它是与sorting选项选择的排序模板密切相关的,biblatex提供的标准样式排序模板并不支持该选项。 +而sortlocale选项则是针对字符排序选择本地化调整方案,比如选项zh\_\_pinyin就是选择针对中文字符根据拼音进行排序。本地化调整方案是由perl模块提供,中文字符排序的可用选项值详见前面的sortlocale选项说明。需要注意的是本地化字符排序调整方案设置也可以通过biber命令行选项提供,biblatex设置和biber命令行设置两种方式见例\ref{eg:sort:opts}、例\ref{eg:sort:bibercmd}。 + +\begin{example}{中文字符排序调整可利用biblatex选项}{eg:sort:opts} +\begin{texlist} +%按拼音排序,biblatex加载选项 +\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__pinyin]{biblatex} +%按笔画排序,biblatex加载选项 +\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__stroke]{biblatex}% +%此时,biber则正常编译不需手动加选项,因为排序调整方案(sort tailoring)已由biblatex 给出。 +biber jobname +\end{texlist} +\end{example} + +\begin{example}{中文字符排序调整也可利用biber选项}{eg:sort:bibercmd} +\begin{texlist} +%biblatex正常加载,即不设置排序的本地化调整方案 +\usepackage[backend=biber,style=gb7714-2015ay]{biblatex} + +%此时需利用biber选项给出本地化排序调整方案: +%按拼音排序,则设置-l zh__pinyin +biber -l zh__pinyin jobname +%按笔画排序,则设置-l zh__pinyin +biber -l zh__stroke jobname +\end{texlist} +\end{example} + +对于sorting选项,biblatex提供了标准的排序模板包括: + +\begin{description} + \item[nty] 按照姓名、标题、年份排序。 + \item[nyt] 按照姓名、年份、标题排序。 + \item[nyvt] 按照姓名、年份、卷数、标题排序。 + \item[anyt] 按照字母标签、姓名、年份、标题排序。 + \item[anyvt] 按照字母标签、姓名、年份、卷数、标题排序。 + \item[ynt] 按照年份、姓名、标题排序。 + \item[ydnt] 按照年份(降序)、姓名、标题排序。 + \item[none] 不进行排序。所有的条目按照引用顺序处理。 +\end{description} + +而gb7741-2015ay样式提供了4个排序模板: + +\begin{description} + \item[gb7714-2015] 以语言、作者、年份、标题、升序排列 + \item[gbnytd] 以语言、作者、年份、标题、降序排列 + \item[gbynta] 以语言、年份、作者、标题、升序排列 + \item[gbyntd] 以语言、年份、作者、标题、降序排列 +\end{description} + +在使用gb7714-2015ay样式时可以使用上述排序模板。用户也可以增加自定义模板,比如为了处理多音字的问题,用户可以手动设置key域用来对中文文献进行排序,定义如下的排序模板: + +\begin{example}{针对多音字问题的排序模板}{eg:sort:multipinyin} +\begin{texlist} +\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} + } + } +\end{texlist} +\end{example} + +其中,排序模板优先使用persort域进行排序,接着是与文种相关的lansortorder域,接着是sortkey域(该域在biblatex中就是key域的别名),接着是sortname等作者姓名相关的域,要让文献根据多音字习惯音进行排序,那么就在key域中设置文献作者姓名的习惯音。比如三篇文献作者分别是[李四]、[J. B. Conway]、[曾三]。在设置sorting=multipinyin, gblanorder=chineseahead, sortlocale=zh\_\_pinyin的情况下,根据上述的multipinyin排序模板,首先根据文种和作者信息将中文文献[曾三][李四]排在前面,接着是[J. B. Conway],因为默认情况下,曾字考虑的读音是ceng2。但若对key域手动设置中文的拼音,比如[李四]文献设置key=\{li3si4\},而[曾三]文献设置key=\{zeng1san1\},那么中文文献仍然排在前面,但根据key域的设置会将[李四]文献排列在[曾三]前面。因此手动设置作者姓名的习惯拼音后,文献排列顺序为:[李四][曾三][J. B. Conway]。 + +其中,与文种相关的排序域lansortorder是由gblanorder选项设置的,当选项值为chineseahead时,语言顺序为cn;jp;kr;en;fr;ru,会将中文文献的lansortorder域设置为1,日语文献设置为2,韩语文献设置为3,英文文献设置为4,法语文献设置为5,俄语文献设置为6。排序过程中按升序排序,那么自然中文文献在前英文文献在后。若对gblanorder选择设置一个自定义的字符串如:cn;en;ru;fr;jp;kr,那么文种的排列顺序为中文、英文、俄语、法语、日语、韩语。 + +根据上述的排序逻辑可知,要做排序的调整首先可以考虑合理地设置选项,来选择合适的排序模板、文种顺序和本地化字符排序调整方案。当不满足要求时,可以自定义排序模板,并设置sorting选项为该模板,来实现用户需要的排序方式。 + \subsection{多语言支持} \subsubsection{多语言混合文献表}\label{sec:multilan:combine} -一般情况下在国内应用环境下,多语言混合不太会超过两种语言,比如仅有中英两种语言混合。但有时可能也会存在多种语言,比如存在中/英/日/俄这种多语言环境。图\ref{fig:multi:lan}给出了这样一个示例,其中不同的语言使用了不同的本地化字符串。 +在国内的一般应用场景下,常见的多语言混合文献表是中英两种语言混合的文献表,但有时也可能会存在多种语言,比如存在中/英/日/俄等多种语言。图\ref{fig:multi:lan}给出了这样一个示例,其中不同语言的文献使用了不同的本地化字符串。 \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% @@ -997,25 +1243,49 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \caption{多语言混合文献表}\label{fig:multi:lan} \end{figure} -使用xelatex编译时,由于其原生支持unicode的特性,在tex文档内实现多语言混合比较容易实现,正确显示的关键在于合适的字体设置。一般情况下西文如英/法/俄可以利用fontspec宏包选择合适的字体来解决,而中/日/韩语可以利用ctex宏包可以解决,但仍需注意要正确的显示中/日/韩语也需要字体支持,windows下常见的中文字体可能不支持日/韩字符,而思源宋体是一个不错的选择。本文的多语言示例编译均采用思源宋体常规(SourceHanSerifSC-Regular.otf),请从其官网下载。 +\begin{enumerate} +\item 多语言混合文献表首先要解决的是多语言文献的字符显示问题。使用xelatex编译时,由于其原生支持unicode的特性,在tex文档内显示多语言字符比较容易实现,正确显示的关键在于合适的字体设置。一般情况下西文如英/法/俄可以利用fontspec宏包选择合适的字体来解决,而中/日/韩语可以利用ctex宏包可以解决,但仍需注意要正确的显示中/日/韩语也需要字体支持,windows下常见的中文字体可能不支持日/韩字符,而思源宋体是一个不错的选择。本文的多语言示例编译均采用思源宋体常规(SourceHanSerifSC-Regular.otf), +请从其\href{https://github.com/adobe-fonts/source-han-serif/tree/release}{官网}下载。 -对于参考文献来说,其实还有一个更重要的问题:本地化字符串问题。中英文情况下,中文利用在英文本地化文件基础上新增本地化字符串加以解决。但其它语言需要自己的解决方案。如第\ref{sec:usage:bbx}节所述,本样式使用language域来区分文献的语言类型,默认情况下该域不需要人工输入,可由biber根据文献信息自动判断,但也可以手动输入来人工指定。根据 biblatex 提供的多语言解决方案,还需要利用langid/langidopt域,以及babel/polyglossia宏包的支持。 +\item 除此之外,还要解决另外一个重要问题是本地化字符串问题。因为对于不同语言的文献,通常要求使用符合自身语言规范的本地化字符串。而且不同的语言,本地化字符串并不是一一对应的,特别是东亚语言,因此要考虑一个全面的解决方案: -首先,不同语言的文献需要设置文献的langid域为文献所用语言,比如英文文献则设置langid域等于english,俄文文献则设置等于rassian。langid域类似于language域通常由样式自动处理,不需要人工输入。 +对于西方语言, biblatex基于 babel/polyglossia宏包,结合autolang/language等选项和langid/langidopt等域,提供了一套多语言解决方案。 -其次,在biblatex加载时设置 autolang选项,等于none则不做多语言处理,等于hyphen则仅做不同语言的断词处理,等于other或other*则处理不同语言的断词和本地化字符串,other*选项等价于使用babel的otherlanguage*环境,与other的差别在于不忽略环境后的空白。从实践看,当要使用条目集时,使用other*选项更为合适。 +\begin{itemize} +\item 首先,对不同语言的文献,设置langid域为文献所用语言,比如英文文献则设置langid域等于english,俄文文献则设置等于rassian。 -再次,还可设置language选项,用于区分是否在标注或文献表中采用多语言处理方案。当language选项等于autobib时仅在文献表中自动切换语言,等于 autocite 时仅在标注中自动切换语言,等于 auto 时则在文献表和标注中同时切换。 +\item 其次,在biblatex加载时设置 autolang选项,等于none则不做多语言处理,等于hyphen则仅做不同语言的断词处理,等于other或other*则处理不同语言的断词和本地化字符串,other*选项等价于使用babel的otherlanguage*环境,与other的差别在于不忽略环境后的空白。从实践看,当要使用条目集时,使用other*选项更为合适。 -最后,需要在tex文档内加入babel宏包以及需要使用的语言,需要使用本地化字符串的西语都要加入,否则无法自动切换。比如需要自动切换的西文语言包括英文、法文和俄文,那么加入宏包命令为\verb|\usepackage[french,russian,english]{babel}|。 +\item 再次,还可设置language选项,用于区分是否在标注或文献表中采用多语言处理方案。当language选项等于autobib时仅在文献表中自动切换语言,等于 autocite 时仅在标注中自动切换语言,等于 auto 时则在文献表和标注中同时切换。 -由于东亚语言的特殊性,针对西文和东亚语言,分别做如下的考虑: -\begin{enumerate} +\item 最后,需要在tex文档内加入babel宏包或polyglossia,并设置需要使用的语言。注意:需要使用本地化字符串的西语都要加入,否则无法自动切换。比如需要自动切换的西文语言有英文、法文和俄文, +那么需要将加入\verb|french,russian,english|。如例\ref{eg:multi:lanset}所示: + +\begin{example}{babel/polyglossia设置西方语言的多语言支持}{eg:multi:lanset} +\begin{texlist} + %使用babel的方式 + \usepackage[russian,french,english]{babel} + + %使用polyglossia的方式 + \usepackage{polyglossia} + \setdefaultlanguage{english} + \setotherlanguages{russian,french} +\end{texlist} +\end{example} + +\end{itemize} + +对于东亚语言,通常没有像西方语言那么多的本地化字符串的应用,只有有限几个字符串需要使用,而且习惯用法也与西文不同,因此无法与西文的本地化字符串一一对应,所以考虑的解决思路也不同于西文。即不使用类似西文的本地化字符串文件,而直接利用在英文本地化文件(english.lbx)基础上新增适用于东亚语言的本地化字符串的方式。在标注和著录格式处理过程中,根据当前处理的域或条目的语言做判断,然后使用对应语言的本地化字符串。如第\ref{sec:usage:bbx}节所述,本样式使用language域来标记文献的语言类型,langid域用来标记文献对应的本地化字符串文件,默认情况下都不需要人工输入,可由宏包根据文献信息自动判断,但也可以人工输入来指定。 + +\end{enumerate} + +因此考虑东亚语言的特殊性,针对西文和东亚语言,整体解决方案做如下: +\begin{itemize} \item 如俄语/法语这样的西方语言,通过biblatex提供的方案自动解决。使用时,bib文件中的文献数据按文献本身的语言录入,在tex源文件中载入babel宏包并设置相应语言,然后设置biblatex的autolang和language选项。剩下所有工作比如自动语言判断和处理则交由gb7714-2015样式自动完成。 \item 日韩语采用类似中文的方式处理,即在英语本地化文件基础上通过增加新的本地化字符串实现处理,因此langid需设为english。在输出本地化字符串的宏中当做英文处理,但内部存在区分逻辑,当判断语言为中文时,则使用中文的本地化字符串比如andcn,andotherscn等, 当不是时,则判断不同的语言,是日文则输出本地化字符串如andjp,andothersjp,若是韩文则输出本地化字符串如andkr,andotherskr。而所有其它西文则输出本地化字符串比如and,andothers,由babel自动切换成对应语言的字符串。由于日文中作者这类信息通常用的汉字,因此常常判断为中文,所以可以使用符合中文习惯的字符串,但如果对日文有精确的判断,那么可以输出符合日文习惯的字符串。韩语由于大量使用表音的字符,所以通常使用专门的本地化字符串。中日韩语文献数据录入也不要特殊的处理,按文献本身语言输入即可,剩下所有其它工作均由gb7714-2015样式自动处理,用户无需过多关注。 -\end{enumerate} +\end{itemize} 本样式对中日韩英俄法六种语言混合文献表做了测试,详见: \href{run:example/opt-eg-multilan.tex}{opt-eg-multilan}, @@ -1024,8 +1294,10 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subsubsection{多语言对照的文献表}\label{sec:multilan:implement} -国标GB/T 7714-2015有不同语言对照文献的要求(详见第6.1节),某些期刊也有类似的需求。对于biblatex宏包,这一问题可以通过条目集类型(set)/或者条目关联(related)来解决,多语言对照的情况与双语言对照本质是一样的,因此下面主要讨论双语对照的文献表。 -图\ref{fig:double:lana}和\ref{fig:double:lanb}给出中英双语对照文献示例,两个示例中英文文献的作者姓名做了不同的设置,前者为 gbnamefmt=uppercase,后者为gbnamefmt=pinyin。 +国标GB/T 7714-2015有不同语言对照文献的要求(详见第6.1节),某些期刊也有类似的需求。 +多语言对照的文献表首先是多语言混合的文献表,所以本节的方法是在前一节基础上做的。 +对于biblatex宏包,多语言对照文献问题可以通过条目集类型(set)/或者条目关联(related)来解决,由于多语言对照的情况与双语言对照本质是一样的,因此下面主要讨论双语对照的情况。 +图\ref{fig:double:lana}和\ref{fig:double:lanb}给出中英双语对照文献示例,两个示例中英文文献的作者姓名做了不同的设置,前者为 gbnamefmt=uppercase,后者为gbnamefmt=pinyin,后者也是国内某期刊的参考文献样式。 GB中的韩中两种语言对照文献见\href{run:./stdGBT7714-2015.pdf}{stdGBT7714-2015文件}第4页。 \begin{figure}[!htb] @@ -1053,7 +1325,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \paragraph{\heiti 利用条目集类型满足双语文献要求} 设置条目集类型(set)有静态和动态两种方法。其中动态方法使用更为方便,只需在写文档时利用\verb|\defbibentryset|将两条文献不同语言的文献设置成一个set条目,然后引用set的bibtex键。比如: -\begin{example}{设置set条目集用于双语文献动态方法}{eg:setforbilangentry} +\begin{example}{设置set条目集用于双语文献的动态方法}{eg:setforbilangentry} \begin{texlist} \defbibentryset{bilangyi2013}{易仕和2013--,Yi2013--} 专著,双语文献引用\cite{bilangyi2013} @@ -1062,7 +1334,9 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] 测试见文档\href{run:example/testallformat.tex}{testallformat.tex}。 -\bc{在biblatex v3.8及以上版本中,因为set条目类型除了子条目关键词信息外,并无其他信息,因此作者年制中set的标注通常不能自动给出令人满意的标签。该问题与biblatex版本升级有关,biblatex v3.7及之前版本没有这个问题,因为这些老版本中 set 带有第一个子条目的信息,所以会自动输出子条目信息作为标签。动态设置条目集方法中,解决方案是设置一个指定格式和内容且中间无空格无英文逗号的关键字,比如“易仕和,等,2013”,这时因为没有空格和英文逗号,该关键字会以一个整体字符串处理,而不会被分开解析,因此可以用它来作为标签}。比如: +\bc{需要注意:由于biblatex的升级,在著者-出版年制中应用动态条目集方法产生的标注标签存在版本差异。 +biblatex v3.7及之前版本,因为 set 带有第一个子条目的信息,所以会自动输出子条目信息作为标签。 +而biblatex v3.8及以上版本中,因为set条目类型除了子条目关键词信息外,并无其他信息,所以set的标注标签会存在问题。这个问题可以通过设置一个指定格式和内容且中间无空格无英文逗号的关键字来弥补,比如“易仕和,等,2013”,这时因为没有空格和英文逗号,该关键字会以一个整体字符串处理,而不会被分开解析,因此可以用它来作为标签}。比如: \begin{example}{设置set条目集用于双语文献动态方法}{eg:setforbilangentry} \begin{texlist} @@ -1071,11 +1345,14 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \end{texlist} \end{example} -\qd{此时作者年制的set标注标签会是“易仕和,等,2013”,注意到其中的逗号是中文全角逗号,与其它标签的英文逗号的存在差异,正因为此,该方法并没有完美解决问题。然而静态条目集方法中通过手动设置标签则可以完美解决,对于biblatex v3.8 及以上版本还可以利用后面介绍的关联(related)方法来解决。} +\bc{在biblatex3.8以上版本中,例{eg:setforbilangentry}的作者年制标注标签会是“易仕和,等,2013”,注意到其中的逗号是中文全角逗号,与其它标签的英文逗号的存在差异,正因为此,该方法并没有完美解决问题。} + +\bc{由于顺序编码制使用的时数字标签,前述的问题对于顺序编码制并不存在。而作者年制中的标签问题,可以采用下面的静态条目集方法和关联(related)方法来解决。} + +静态方法是在bib源文件中给出条目集(set)并使用biber后端进行解析,条目的域信息定义方法如下: -静态方法是在bib源文件中给出条目集(set)并使用biber后端进行解析,条目的域信息采用如下方法定义: %当使用bibtex后端时,则需要进一步设置,具体参考biblatex宏包说明文档。 -\begin{example}{设置set条目集用于双语文献静态方法}{eg:set:static} +\begin{example}{设置set条目集用于双语文献的静态方法}{eg:set:static} \begin{texlist} @Set{set1, entryset = {key1,key2,key3}, @@ -1087,7 +1364,13 @@ entryset = {易仕和2013--,Yi2013--}, \end{texlist} \end{example} -如上述这般简单设置静态条目集时,中文排序会出现问题,条目集会出现在文献表末尾,这是因为条目集没有设置language域用于排序,而其它常规条目都会利用动态数据修改设置language域,但因为静态条目集需要在biber运行时解析,所以无法对language域进行处理。而使用动态条目集方法则没有这一问题,因为其解析过程直接会利用第一个子条目的排序信息。但静态条目集方法也有自己的解决之道,即通过在set条目中手动设置language域来修正。此外,对于静态条目集,v3.8以上版本的biblatex也不复制第一个子条目信息,因此作者年制中引用也无法生成正确的标注标签,这也就是前面动态条目集方法中未完全解决的问题,但静态条目集方法,同样可以通过在set条目中手动设置label域来解决。比如: +然而例\ref{eg:set:static}这般简单的静态条目集设置,还存在两个小的问题: +\begin{enumerate} + \item 中文排序会出现问题,条目集会出现在文献表末尾,这是因为条目集没有设置language域用于排序,而其它常规条目都会利用动态数据修改设置language域,但因为静态条目集需要在biber运行时解析,所以无法对language域进行处理。而使用动态条目集方法则没有这一问题,因为其解析过程直接会利用第一个子条目的排序信息。 + \item 著者-出版年制中的标注标签问题,对于静态条目集,v3.8以上版本的biblatex同样不复制第一个子条目信息,因此著者- 出版年制中的引用也无法生成正确的标注标签,这也就是前面动态条目集方法中提到的问题 +\end{enumerate} + +但静态条目集方法有自己的解决方便,对于第一个问题,可以通过在set条目中手动设置language域来解决;第二个问题,也可以通过在set条目中手动设置label域来解决。比如: \begin{example}{在bib文件中正确设置set条目集的静态方法}{eg:set:staticright} \begin{texlist} @@ -1110,7 +1393,7 @@ language={chinese} \paragraph{\heiti 利用条目关联满足双语文献要求} -除上述给出的条目集方案外,关联条目方法则是另一种可行方案,该方案的讨论可以见“Again about the \@ set label for authoryear style”\footnote{\url{https://github.com/plk/biblatex/issues/681}}。该方案同样也有静态和动态两种方法,静态就是修改bib文件内容,动态则是在tex源文档中做设置。 +除上述给出的条目集方案外,关联条目方法则是另一种可行方案\footnote{Again about the \@ set label for authoryear style:\url{https://github.com/plk/biblatex/issues/681}}。该方案同样也有静态和动态两种方法,静态就是直接修改bib文件的内容,动态则是在tex源文档中做设置,然后通过biblatex的动态数据修改机制做临时修改。 静态方法很简单,bib文件中条目设置如例\ref{eg:related:staticright}所示,它能解决双语同时显示的问题,也能解决排序和标注标签问题,唯一的问题在于修改了bib文件后,当不需要双语文献时还需改回来,这会带来不便,因此可以考虑下面的动态方法。但要注意动态方法需要利用多个\verb|\DeclareStyleSourcemap|,因此该方法只适用于biblatex v3.7及以上版本。 @@ -1155,9 +1438,9 @@ language={chinese} \subsubsection{一个文献表采用多种著录样式} -一个文献表采用多种著录样式主要针对的是在一个tex文档生成参考文献表中,不同的语言文献采用不同的著录格式的需求,比如中文的文献采用GB/T 7714-2015 样式,而西文文献则采用西文习惯的样式。这种情况目前由gb7714-2015ms样式来实现,选项加载方式如例\ref{eg:gb7714ms}所示。 +一个文献表采用多种著录样式主要针对的是在一个tex文档生成参考文献表中,不同语言的文献采用不同的著录格式,比如中文文献采用GB/T 7714-2015 样式,而西文文献采用西文习惯的样式。这种情况目前由gb7714-2015ms样式解决,选项加载方式如例\ref{eg:gb7714ms}所示。 -目前gb7714-2015ms样式中,中文西文分别采用GB/T 7714-2015 标准样式和biblatex的默认样式,如果有需要完全可以通过定义中文和西文的格式做进一步的修改。图\ref{fig:eg:ms}展示了两种不同语言完全不同的著录格式。 +目前gb7714-2015ms样式中,有两种应用方式,一是全部文献都采用GB/T 7714-2015 标准样式,二是中文西文分别采用GB/T 7714-2015 标准样式和biblatex的默认样式。两种方式的选择通过gbstyle选项设置。区分语言使用不同样式的情况下,如有其它需要,完全可以通过定义中文和西文的格式做进一步的修改,比如将英文文献的样式修改为IEEE格式。图\ref{fig:eg:ms}展示了两种不同语言不同的著录格式。 \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% @@ -1176,13 +1459,12 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subsubsection{不同参考文献分节采用不同著录样式} -不同参考文献分节采用不同著录样式主要针对一个tex文档中存在多个参考文献表,且各参考文献表的格式需求不同。比如正文的参考文献表为作者年制,而附录中的作者论著情况则用的顺序编码制,这在一些论文写作中是可能的。这种情况目前由gb7714-2015mx样式来实现,选项加载方式如例\ref{eg:gb7714mx}所示。 +不同参考文献分节采用不同著录样式主要针对一个tex文档中存在多个参考文献表,且各参考文献表的格式需求不同。比如一些学位论文写作中,正文的参考文献表为著者-出版年制,而附录中的作者论著情况则用顺序编码制。这种情况目前由gb7714-2015mx样式解决,选项加载方式如例\ref{eg:gb7714mx}所示。 -gb7714-2015mx样式默认使用顺序编码样式,当要使用作者年制样式时,则利用命令 -\verb|\setaystylesection{2}|进行设置,该命令表示对参考文献节2的参考文献采用作者年制样式。 -设置多个参考文献节时,则继续采用\verb|\setaystylesection|设置,比如节3也要采用作者年制样式,那么设置\verb|\setaystylesection{3}|。 +gb7714-2015mx样式默认使用顺序编码样式,当要使用著者-出版年制样式时,则利用命令 +\verb|\setaystylesection|进行设置,该命令有一个必选参数,表示采用著者-出版年制样式的参考文献节的编号。注意该命令一次只能设置一个文献节,因此设置多个参考文献节时,需要多次使用\verb|\setaystylesection|命令,比如节2节4都采用著者-出版年制样式,那么设置\verb|\setaystylesection{2}\setaystylesection{4}|。 -目前gb7714-2015mx样式中的两种格式顺序编码和作者年制样式默认都是符合GB/T 7714-2015 标准的,如果需要做格式的修改,则完全可以通过自定义作出修改。图\ref{fig:eg:ms}展示了分三个文献节的文档,其中节二使用了作者年制。 +目前gb7714-2015mx样式中的两种格式:顺序编码和著者-出版年制样式默认都是符合GB/T 7714-2015 标准的,如果需要做格式的修改,则完全可以通过自定义实现。图\ref{fig:eg:ms}展示了3个参考文献分节的文档,其中节2使用了著者-出版年制。 \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% @@ -1200,7 +1482,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subsubsection{完全自定义的条目内容样式} -完全自定义的条目内容样式,主要针对不完全和不规范的文献表输出,而是输出部分参考文献信息。这是采用文献缩略信息打印的方法实现。具体的实现方法见\href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% +完全自定义的条目内容样式,针对不完全和不规范的文献表输出,主要用于输出部分参考文献信息。这时可以采用文献缩略信息打印的方法实现。具体的实现方法见\href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% {biblatex-solution-to-latex-bibliography}中的第2.10节。 具体例子则可以参考\href{run:./stdgbT7714-2015.pdf}{stdgbT7714-2015.pdf}。其中第8节中大量使用这种方式。 @@ -1221,7 +1503,14 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] %[也由于对bibtex语言不熟悉,偷懒不想学$( \hat{} \bot \hat{} )$] \begin{enumerate} -\item 使用简单。代码结构很简单,格式控制很简单,编译方式很简单,编译命令不限(xelatex、pdflatex等均可),如例\ref{eg:compile:cmd} 所示。 +\item 使用简单。代码结构很简单,格式控制很简单,功能设置很简单,编译方式很简单,编译命令无限制(xelatex、pdflatex等均可)。例\ref{eg:func:backref} 给出了后向超链接功能的设置。 + + \begin{example}{文献条目的后向超链接设置}{eg:func:backref} + \begin{texlist} + %加上后向超链接设置,需要4步编译。 + \usepackage[backend=biber,style=gb7714-2015,backref=true]{biblatex} + \end{texlist} + \end{example} %使用够方便 @@ -1232,10 +1521,10 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] %定制很容易 %处理无限制,支持更全面 -\item 支持全面。后端处理程序biber处理大数据量毫无压力,不用担心内存不足问题,字符编码支持utf-8,完全支持中文的bibtex 键(引用关键字)。biber除了自身提供的大量功能,比如:动态数据修改、参考文献数据检查、输出引用文献的数据(例\ref{eg:bibercmd:outbibfile})等外,还可利用一些perl模块来实现一些特殊功能,比如: +\item 支持全面。后端处理程序biber处理大数据量毫无压力,不用担心内存不足问题,字符编码支持utf-8,完全支持中文的bibtex 键(引用关键字)。biber除了自身提供的大量功能,比如:动态数据修改、参考文献数据检查、引用文献数据的bib输出(例\ref{eg:bibercmd:outbibfile})等外,还可利用一些perl模块来实现一些特殊功能,比如: 实现文件编码的转换(perl 的Encode::CN 模块), 排序的本地化调整(perl的Unicode::Collation::locale 模块, - 拼音和笔画排序见例\ref{eg:sort:opts}、例\ref{eg:sort:bibercmd})等。 + 中文字符的拼音和笔画排序见例\ref{eg:sort:opts}、例\ref{eg:sort:bibercmd})等。其中引用文献数据的bib输出常用于从一个大的bib文件中导出仅有引用文献信息的小的bib文件。 \begin{example}{输出引用文献数据时的biber选项}{eg:bibercmd:outbibfile} \begin{texlist} @@ -1243,46 +1532,24 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \end{texlist} \end{example} - \begin{example}{中文文献排序可利用biblatex选项}{eg:sort:opts} - \begin{texlist} - %按拼音排序,biblatex加载选项 - \usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__pinyin]{biblatex} - %按笔画排序,biblatex加载选项 - \usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__stroke]{biblatex}% - %此时,biber则正常编译不需手动加选项,因为排序调整方案(sort tailoring)已由biblatex给出。 - biber jobname - \end{texlist} - \end{example} - - \begin{example}{中文文献排序也可利用biber选项}{eg:sort:bibercmd} - \begin{texlist} - %biblatex正常加载,即不设置排序的本地化调整方案 - \usepackage[backend=biber,style=gb7714-2015ay]{biblatex} - - %此时需利用biber选项给出本地化排序调整方案: - %按拼音排序,则设置-l zh__pinyin - biber -l zh__pinyin jobname - %按笔画排序,则设置-l zh__pinyin - biber -l zh__stroke jobname - \end{texlist} - \end{example} \end{enumerate} %上述这些优点也是笔者决定编写符合GB/T 7714-2015标准的参考文献样式文件的原因之一。 \subsubsection{数据库bib文件和文献条目}\label{sec:bib:bibtex} -参考文献数据以bibtex格式保存在bib文件中。生成参考文献除tex源文档外,还需创建参考文献数据源文件即bib文件。bib文件数据源准备完成后,在加载biblatex宏包时,使用addbibresource命令将其加载进tex源文档中。\bc{注意:数据源可以加载多个,比如多个章节的参考文献放在不同的bib文件中,那么全部加载进来即可}。 +参考文献数据以bibtex格式保存在bib文件中。生成参考文献除tex源文档外,还需创建参考文献数据源文件即bib文件。bib文件数据源准备完成后,在加载biblatex宏包后,使用addbibresource命令将其导入。\bc{注意:数据源可以加载多个,比如多个章节的参考文献放在不同的bib文件中,那么全部加载进来即可}。 -bib文件中的参考文献信息是以条目形式组织,一篇文献创建一条记录即一个参考文献条目,一个条目由若干数据域构成。文献的各部分信息应录入到条目的对应数据域中。GB/T 7714-2015标准中的文献类型与本样式中条目类型对应关系 +bib文件中的参考文献信息是以条目形式组织,一篇文献创建一条记录即一个参考文献条目,一个条目由若干数据域(有的文档也称为字段)构成。GB/T 7714-2015标准中的文献类型与本样式中条目类型对应关系 如表\ref{tab:entrytypes}所示, 各类条目具体的著录格式详见\ref{sec:numeric:data}节。 + \begin{table}[!htb] \centering -\caption{常见条目类型}\label{tab:entrytypes} -\small +\caption{参考文献常用条目类型}\label{tab:entrytypes} +\footnotesize \begin{tabular}{clc} \hline - GB/T 7714-2015中的参考文献类型 & biblatex中的条目类型 & 类型标识代码\\ \hline + GB/T 7714-2015中的条目类型 & biblatex中的条目类型 & 类型标识代码\\ \hline 专著& book & M\\ 标准& standard/book or inbook with note=standard& S\\ 专著中的析出文献& inbook & M\\ @@ -1295,7 +1562,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 会议文集中析出的文献& inproceedings/conference& C\\ 汇编或论文集& collection& G\\ 汇编或论文集析出中的文献& incollection& G\\ - 学位论文& thesis/mastersthsis/phdthsis& D\\ + 学位论文& thesis/mastersthesis/phdthesis& D\\ 报告& report/techreport& R\\ 手册& manual& A\\ 档案& archive/manual& A\\ @@ -1310,13 +1577,13 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \end{table} -组成各个条目的不同数据域(字段)保存有参考文献的各部分信息,比如作者、标题、出版项、日期等等,这些在标准中称为著录项目, -其对应关系如表\ref{tab:entryfields}所示。 + +组成各个条目的不同数据域(字段)保存有参考文献的各部分信息,比如作者、标题、出版项、日期等,这些信息称为著录项目,录入文献信息时,各著录项目信息应录入到对应的数据域中。GB/T 7714-2015标准中的数据域与biblatex中的域的对应关系如表\ref{tab:entryfields}所示。 \begin{table}[!htb] \centering -\caption{常见信息域}\label{tab:entryfields} -\small +\caption{参考文献常用信息域(字段)}\label{tab:entryfields} +\footnotesize \begin{tabular}{cl} \hline GB/T 7714-2015中的文献著录项目 & biblatex中的域\\ \hline @@ -1347,7 +1614,16 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \end{tabular} \end{table} -需要注意的是,note域在本样式中也做特殊用途,即在book类型的note域中输入standard表示标准,在aritcle类型的note域中输入news表示报纸,当然也可以不做特殊用,而只是表示杂项信息,因为标准和报纸可以用standard和newspaper类型表示,尽管这两种类型不是biblatex原生的条目类型。而usera域用于表示参考文献类型和载体标识符(为兼容Lee zeping的bst样式使用的bib文件也可以用mark和medium表示)。一般情况下usera,mark,medium这些域不用在bib文件中输入,而由样式文件自动处理得到,既为了使bib文件更纯粹,也为了兼容不同的样式。想象一下如果在bib文件中给出usera域,但另一样式需要使用usera域且用途不同,那么就会有兼容性问题。不用手动输入更重要的目的是为用户减负,因为用户可以直接使用从网络(各种学术)导出参考文献信息而不用再额外添加一个参考文献类型和载体标识符。本宏包自动判断语言而不使用一个表示语言的域比如language来标记文献的语言类型也出于同样的考虑,当然也有一种情况即一篇文献中存在多种语言是无法用一个language标识的,比如一本英文著作被翻译为中文,那么原作者是英文,而译者则是中文,这时标记language的意义不大。标记language更多的是用在多种语言混合的文档中,可以用language来标记英语、中文、日语、法语和德语等用于分语言排序。 +需要注意的是, +\begin{itemize} + \item note域在本样式中也做特殊用途,即在book类型的note域中输入standard表示标准,在aritcle类型的note域中输入news表示报纸,当然也可以不做特殊用,而只是表示杂项信息,因为标准和报纸也可以用standard和newspaper类型表示,尽管这两种类型不是biblatex原生支持的条目类型。 + + \item usera域用于表示参考文献类型和载体标识符(为兼容Lee zeping 的bst样式使用的bib文件也可以用mark和medium 表示)。一般情况下usera,mark,medium这些域不用在bib文件中输入,而由样式文件自动处理得到,既为了使bib文件更纯粹,也为了兼容不同的样式。想象一下如果在bib文件中给出usera域,但另一样式需要使用usera域且用途不同,那么就会有兼容性问题。不用手动输入更重要的目的是为用户减负,因为用户可以直接使用从网络(各种学术网站)导出参考文献信息而不用再额外添加一个参考文献类型和载体标识符。 + + \item 本样式自动判断语言,用户一般不需要直接给出表示文献语言的域language,因为样式在处理过程中会对各个域的字符做语言判断,这对于一篇文献存在多种语言的情况非常有用,比如一本英文著作被翻译为中文,原作者仍用英文,而译者则使用中文。那么该文献无法用一个language 标识文献的语言,简单来说,标记language域更多的目的是用在多种语言混合的文档中,可以用language 来标记英语、中文、日语、法语和俄语等用于分文种排序。当然这种标记也是由样式自动处理的,用户仅需在自动判断出现问题时手动干预。 + +\end{itemize} + \subsubsection{文献条目的数据域及其录入方法}\label{sec:bib:field} @@ -1355,18 +1631,28 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \bc{1. 有时直接从网络获取的参考文献信息中可能带有一些特殊字符比如\%,\&等,这些字符在 tex 中通常需要做转义处理,本样式中对像title,journal等常见域中出现的特殊字符已经做了转义,但是一些不常见的域比如 abstract 等没有考虑,所以用户需要手动处理,例如把\%改为\textbackslash \%,否则可能导致出错} -\bc{2. 由于目前biber使用\href{https://github.com/ambs/Text-BibTeX/tree/master/btparse}{btparse}来解析bib文件,因此各条目中的引用关键词中不能出现圆括号作为其内容一部分比如\@misc\{Euclidean\_geometry(hi), 这样的写法是不允许的,需要去掉其中(),否则biber会报错。%} +\bc{2. 由于目前biber使用\href{https://github.com/ambs/Text-BibTeX/tree/master/btparse} +{btparse} +来解析bib文件,因此各条目中的引用关键词中不能出现圆括号作为其内容一部分比如\@misc\{Euclidean\_geometry(hi), 这样的写法是不允许的,需要去掉其中(),否则biber会报错。%} } -\bc{3. 由于url宏包的特点,在各个域中使用 \textbackslash url命令时,无法使用中文字符,如果要使用带中文字符的网址,那么可以利用 \textbackslash href命令代替 \textbackslash url命令。或者不使用这两个命令,而直接输入网址,超链接则在域格式中用 \textbackslash href 命令定义,比如: -\textbackslash DeclareFieldFormat\{howpublished\}\{\textbackslash href\{\#1\}\{\#1\}\}。 -} +\bc{3. 由于url宏包的特点,在各个域中使用 \textbackslash url命令时,无法使用中文字符,如果要使用带中文字符的网址,那么可以利用 \textbackslash href命令代替 \textbackslash url命令。或者不使用这两个命令,而直接输入网址,超链接则在域格式中用 \textbackslash href 命令定义,比如:} +\verb|\DeclareFieldFormat{howpublished}{\href{#1}{#1}}|。 + +但要注意: 使用\verb|\href|命令形成的超链接文本,可以看做是普通的正文文本,当内部没有断行符存在时,断行可能会存在问题,因此需要手动处理,比如添加空格或者-字符。 +而当使用\verb|\url|和\verb|\nolinkurl|命令时,断行的问题则由url宏包提供的逻辑进行处理,因此往往能够得到适合的断行。所以是使用\verb|\href|还是\verb|\url|需要根据实际情况选择。 + +\bc{4. 需要表示范围类型的域,比如页码域,通常用一个或多个-符号表示范围值间的间隔符,间隔符在解析后会替换为一个\textbackslash bibrangedash。而日期域在biblatex中是作为日期类型来考虑的,尽管日期也有起止范围的问题,且由于单个日期内部已经存在-符号,因此起止日期间的间隔符用/符号。而卷和期在biblatex中是整数类型的域,本身不具备起止范围解析功能,但GB 7714-2015的连续出版物类型中存在这样的需求,所以特别设计了卷和期的解析,且由于合期常用(7/8)这样的方式表示,因此卷和期范围间隔符用-表示。这些在数据录入过程中是需要注意的。} + + 下面详细介绍本样式中使用的域及其数据录入方式: \begin{description} \item[author] 在biblatex中author域属于name数据类型,输入数据时,各姓名间用and 连接,当姓名过多省略时,用others代替。 - 单个姓名,对于中文作者直接输入中文姓名即可。比如:于潇 and 刘义 and 柴跃廷 and others + 单个姓名,对于中文作者直接输入中文姓名即可。比如: + + 于潇 and 刘义 and 柴跃廷 and others 对于英文作者,单个姓名有两种biblatex可以解析的输入方式: @@ -1374,18 +1660,21 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \textcircled{2}firstname middlename lastname or firstname prefix lastname - 对于需要输入前后缀的姓名只能采用第一种方式,比如: + 比如: + DES MARAIS, Jr., D J and H STRAUSS and SUMMONS, R. E. and others - 这里的第一个姓名输入为前缀,姓,后缀,名,中间名。第二个姓名输入为名,姓。第三个姓名输入为姓,名,中间名。 + 其中第一个姓名输入为前缀,姓,后缀,名\ 中间名。第二个姓名输入为名\ 姓。第三个姓名输入为姓,名\ 中间名。 - \bc{需要强调:对于第二种输入方式,姓名各个组成部分最好首字母是大写的,首字母非大写可能导致解析出错,比如姓名只有两个组成部分firstname和lastname,如果firstname小写的话,有可能会解析为prefix lastname。对于第一种输入方式,则至少lastname需要首字母大写,否则有可能将lastname解析成prefix。其中lastname也称familyname,firstname middlename 两者共称givenname} + \bc{ 推荐使用第一种方式录入作者姓名,特别是存在前后缀的情况。对于第二种输入方式,姓名各个组成部分最好首字母是大写的,首字母非大写可能导致解析出错,比如姓名只有两个组成部分: firstname和lastname,如果firstname 小写的话,有可能会解析为prefix lastname。对于第一种输入方式,则至少需要lastname首字母大写,否则有可能将lastname 解析成prefix。 注意lastname也称familyname,firstname middlename 两者共称givenname} - 对于机构作者,不需要解析,直接输入机构名,英文的各个机构名用\{\}包起来,比如: + 对于中文的机构作者,不需要解析,直接输入机构名,比如: 中国企业投资协会 and 台湾并购与私募股权协会 and 汇盈国际投资集团 - \{International Federation of Library Association and Institutions\} + 对于英文的机构作者,由于机构名可能存在空格或and等字符串,因此最好用\{\}包起来,避免解析出错,比如: + + \{International Federation of Library Association and Institutions\} and NASA \item[title] 直接输入需要打印的内容,subtitle或titleaddon域类似 \item[translator] 与author域类似,只是输入的是译者 @@ -1396,7 +1685,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 年-月-日/年-月-日,数字格式为:yyyy-mm-dd/yyyy-mm-dd - 比如:2001-05-06/2001-08-01 + 比如: 2001-05-06/2001-08-01 \emph{特别要注意起止日期之间的分隔符为/而不是- ,因为年月日之间已经存在分隔符-。同时因为日期biber解析是严格按照iso标准处理,因此年、月、日数字需要写全,2001-05-06不能写为2001-5-5,否则不能解析},解析完成后第一个年- 月- 日会解析并存储到year,month,day域中,第二个会解析并存储到endyear,endmonth,endday域中。更多细节参考biblatex 手册的Table 8: Date Interface。 @@ -1407,9 +1696,22 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 这一信息如果放在date中会被自动忽略,但放到year域中,本样式会先将其拷贝到date中进行解析,无法解析的话,date域忽略,但year 信息仍然存在,并原样打印。 - \item[pages] 可以格式化输入或输入需要打印的内容。格式化输入时,页码用整数,当有范围时,用短横线(使用多个短横线也没有问题)隔开。比如:59-60。 当无法解析时,输入内容被认为是需要完整打印的内容。 - \item[urldate] urldate域与date域类似,只是解析时,存储到urlday,urlmonth,urlyear,urlendday,urlendmonth,urlendyear域中。 - \item[url] 直接输入需要打印的网址内容 + + \item[urldate] urldate域与date域类似,只是解析时,存储到urlday,urlmonth,urlyear,urlendday,urlendmonth,urlendyear域中。origdate和eventdate与urldate情况类似。 + + \item[pages] 可以格式化输入或输入需要打印的内容。格式化输入时,页码用整数,当有范围时,用单个或多个短横线-隔开。比如:59-60或\verb|59--60|。 当无法解析时,输入内容被认为是需要完整打印的内容。 + + \item[url] 直接输入需要打印的网址内容。注意不需要在域内加上\verb|\url|命令来表示网址链接,仅需要输入网址本身即可,且特殊字符无需转义。即输入方式为: + + \verb|url={http://www.greenwood.com/can_b_b#abc},| + + 而不是: + + \verb|url={\url{http://www.greenwood.com/can_b_b#abc}},| + + 如果是在其它域比如howpublished等域中输入网址,也可以直接输入网址,但所有的特殊字符都需要转义,因为它就是一个普通文本,同时换行行为也与普通文本一致,当网址字符串中没有空格或-字符时,断行可能出现问题,因此需要手动处理。如果加入\verb|\url|命令,那么其中一些特殊字符可能不需要转义,比如\verb|_|等, + 且处理断行可以由\verb|\url|命令的内部逻辑处理,通过\verb|\UrlBreaks|设置可以自动实现比较合适的断行。当然因为biblatex已经做了进一步的处理,所以\verb|\url|中的文本断行是由三个计数器控制: biburlnumpenalty、biburlucpenalty、biburllcpenalty,合理设置这三个计数器,即可得到满意的断行效果。 + \item[doi] 直接输入需要打印的DOI内容 \item[note] 在本样式中note域有特殊功能,当其内容为standard或news 时,判断条目类型为标准和报纸析出的文献。 \item[bookauthor] 用于析出文献时,作为析出文献来源文献的作者,其输入方式与author 相同。 @@ -1442,37 +1744,40 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \begin{enumerate} - \item 本样式包的设计与实现方法以及设计到的一些biblatex功能介绍,以项目示例的形式总结在 + \item 本样式包的设计与实现方法以及涉及到的一些biblatex功能介绍,以项目示例的形式总结在 \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}{\LaTeX 文档中文参考文献的biblatex解决方案}中,本文档不再重复给出,有需要了解的用户可以参见其中的第3.1节。 \item tex源文档既可以用xelatex编译,也可以利用pdflatex或latex进行编译。但要注意的是pdflatex编译可能因为某些样式比如authoryear,使用了xstring宏包中的一些命令而导致错误,但numeric类样式通常没有问题。该问题在biblatex更新到3.12版本后取消xstring 宏包后得以解决。 中文用户编译还需要注意编码问题。 - utf-8编码的文档,采用xelatex 编译没有任何注意事项,但使用pdflatex编译时,需要给ctex 宏包加载UTF8选项,比如\verb|\usepackage[UTF8]{ctex}|,该选项在文档类加载时给出也可,比如\verb|\documentclass[[UTF8]{article}|,同时引用文献时使用的引用关键词应使用英文。 + utf-8编码的文档,采用xelatex 编译没有任何注意事项,但使用pdflatex编译时,需要给ctex 宏包加载UTF8选项,比如 \verb|\usepackage[UTF8]{ctex}| 。 + + 该选项在文档类加载时给出也可,比如 \verb|\documentclass[UTF8]{article}| , + 同时\bc{文献引用时所用关键词应采用英文},比如 \verb|\cite{zhangml2008}| 而不能包含中文,比如 \verb|\cite{张敏莉2008}|。 当文档使用其他编码时,可以利用notepad++ 或notepad2 等编辑器将其转换为UTF-8编码。若不进行转换,使用xelatex编译通常需要指定一个文档编码,比如windows 环境下的GB2312 编码的文档需要指定\verb|\XeTeXinputencoding "GBK"|,否则会显示乱码。使用pdflatex进行编译时,如果biblatex不能正确的处理编码问题,那么需要为其明确的指定texencoding和bibencoding 选项。比如windows环境下的GB2312编码的文档,需要指定\verb|\usepackge[texencoding=GBK]{biblatex}|。 %增加了对GBK支持的说明,2018-05-11 - \item 当顺序编码和作者年制切换,或者biblatex版本切换,或者不同样式切换时,如果编译出错,可先清理一下辅助文件,完成后再重新编译。 + \item 当顺序编码和著者-出版年制切换,或者biblatex版本切换,或者不同样式切换时,如果编译出错,可先清理一下辅助文件,完成后再重新编译。 \item 当bibtex键中含有中文的时候,texlive2015中的biblatex3.0版的对参考文献条目的超链接会出现问题,而texlive2016中的biblatex3.4或以后的版本则没有问题。 - \item GB/T 7714-2015中的作者年制要求参考文献按文种集合,且中文在前英文在后。主要通过定义DeclareSortingScheme\{gb7714-2015\} (biblatex3.7 以前版本) 或 DeclareSortingTemplate\{gb7714-2015\} (biblatex3.8以后版本),利用自动设定的language 域实现排序。默认情况下,样式能基本正确的区分中文和英文文献并排序。当如果出现错误的情况,用户可以手动修改bib源文件,将language 域设置成合适的字符串,用于排序,详见\ref{sec:usage:bbx}节的说明。 + \item GB/T 7714-2015中的著者-出版年制要求参考文献按文种集合,且中文在前英文在后。主要通过gblanorder选项、排序模板DeclareSortingScheme\{gb7714-2015\} (biblatex3.7 以前版本) 或 DeclareSortingTemplate\{gb7714-2015\} (biblatex3.8以后版本)、以及自动判断的language 域实现。一般情况下样式能够正确区分不同语言文献,如果出现错误,用户可以手动修改bib源文件,将language 域设置为正确的语言,详见\ref{sec:usage:bbx} 节的说明。 %上一段2016-1114更新,下面这段是旧的说法, %通过定义DeclareSortingScheme\{nyt\},设置方向为direction=descending,可以实现中文在前英文在后但两个文种的文献各自也是降序的。还有一种变通的方法是,在录入bib文件时,在userb域填入用于排序的信息,比如需要排前面中文文献填cn,排后面的英文文献用en。这样因为修改后的排序格式nyt会在author域前先用userb进行排序,自然会把中文文献放在前面。 - \item 当出版地和出版者同时缺省时,GB/T 7714-2015中没有给出明确的说明,但英文给出了一个例子(见GB/T 7714-2015 附录A.3)而中文没有,英文的形式是[S.l. : s.n.],因此中文也考虑类似的格式[出版地不详 : 出版者不详]。 + \item 对于出版地和出版者同时缺省的替换处理,GB/T 7714-2015中没有给出明确说明,但给出了一个英文文献示例(见GB/T 7714-2015 附录A.3),形式为: [S.l. : s.n.],尽管中文没有示例,这里也考虑类似的格式,比如: [出版地不详 : 出版者不详]。 %,这种形式本样式没有给出,而直接用两者分开的形式,[S.l.] : [s.n.] %事实上这里作者认为没有必要把s.l.和s.n. 合起来,不仅与缺省两者之一的情况不统一,样式处理起来也增加不必要的麻烦。 - \item 目前符合GB/T7714-2005或GB/T7714-2015参考文献著录规则的biblatex 样式有好几个实现,除本样式外,还有李志奇(icetea)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=74474}} 和沈周(szsdk)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152561&extra=page\%3D1}} 分别提供的样式文件,效果是类似的。此外,Casper Ti. Vector提供的biblatex 样式caspervector也是不错的中文参考文献样式 - \footnote{\url{https://gitlab.com/CasperVector/biblatex-caspervector}}。 感谢各位作者的分享! + \item 目前符合 GB/T 7714-2005 或 GB/T 7714-2015 参考文献著录规则的biblatex 样式有多个实现,除本样式外,还有李志奇(icetea)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=74474}} 和沈周(szsdk)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152561&extra=page\%3D1}} ,其效果是类似的。此外,Casper Ti. Vector提供的biblatex 样式caspervector 也是不错的中文参考文献样式 + \footnote{\url{https://gitlab.com/CasperVector/biblatex-caspervector}}。感谢各位作者的分享! - \item biblatex宏包的组成比较复杂,所以有的时候查找具体命令的代码会比较麻烦。总体来说,包括各bbx,cbx文件,重点是biblatex.sty,biblatex.def,STANDARD.BBX,还有blx-dm.def等一些设置文件。主要不要忘记lbx文件,这里面也有一些相关的代码用于设置语言相关的命令,比如\verb|\bibrangedash|,\verb|\finalandcomma|等。至于其他一些tex命令,可以从tex、xetex的相关书籍文档,latex相关代码可以从latex2e,etoolbox等文档,以及latex.ltx,etoolbox.STY等源文档中查找。注意多使用meaning命令来获取命令的定义。 + \item 由于biblatex宏包的组成比较复杂,所以查找具体命令的代码会比较麻烦。总体来说,包括各种bbx,cbx文件,重点是biblatex.sty,biblatex.def,standard.bbx,还有blx-dm.def 等一些设置文件。另外不要忘记lbx文件,这里面也有一些语言相关的命令,比如\verb|\bibrangedash|,\verb|\finalandcomma|等。至于其它一些tex 原始命令可以从tex、xetex的相关书籍文档查找,latex 相关代码则可以从latex2e,etoolbox等说明文档或latex.ltx,etoolbox.STY等源代码文档中查找。注意多使用meaning命令来获取命令的定义。 % \item 本文档根据GB/T 7714-2015提供的参考文献表著录格式示例做了测试和验证,详见第\ref{sec:eg:gb77142015}节。 @@ -1551,14 +1856,14 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \item 示例: 处理参考文献信息中\&等特殊字符 - \item 示例: 处理作者年制article中卷信息缺省的标点 + \item 示例: 处理著者-出版年制article中卷信息缺省的标点 \item 示例: 标题中有\textbackslash LaTeX\{\}等名称时的情况 \end{itemize} beamer类示例,参见: \href{run:./example/egbeamer.tex}{顺序编码制}; -\href{run:./example/egbeameray.tex}{作者年制}。 +\href{run:./example/egbeameray.tex}{著者-出版年制}。 其它示例,参见: \href{run:./example/testallformat.tex}{testallformat.tex}。 @@ -1574,7 +1879,7 @@ beamer类示例,参见: \href{run:./example/egbeamer.tex}{顺序编码制}; \subsubsection{参考文献表}\label{sec:bib:serialno} -GB/T 7714-2015规定采用顺序编码制组织参考文献时,各篇文献应按正文部分标注的序号依次列出。具体参考GB/T 7714-2015第9.1节。 +GB/T 7714-2015规定采用顺序编码制组织参考文献时,各篇文献应按正文部分标注的序号依次列出。具体参考GB/T 7714-2015 第9.1节。 \subsubsection{文献标注法} 标注则根据在正文中引用的先后顺序连续编码,将序号置于方括号内。 @@ -1583,13 +1888,13 @@ GB/T 7714-2015规定采用顺序编码制组织参考文献时,各篇文献应 多次引用同一著者的同一文献时,可在序号的方括号外著录该文献引文页码,这一要求与引用(标注)样式无关,需要作者在写文档时使用相应的引用命令并在需要时输入页码信息。针对这一要求,在cite等常用命令基础上,新定义了一个引用命令pagescite,其使用方式详见第\ref{sec:cbx:usage}节。标注样式更详细要求参考GB/T 7714-2015 第10.1节。 -如果顺序编码制采用脚注方式,则序号由计算机自动生成圈码。多次引用同一著者的同一文献时,若采用脚注方式应重复著录参考文献,但在参考文献列表中的著录项目可以简化文献序号和页码。 +如果顺序编码制采用脚注方式,则序号由计算机自动生成圈码。多次引用同一著者的同一文献时,若采用脚注方式应重复著录参考文献,但在参考文献表中的著录项目可以简化文献序号和页码,也就是说,每个文献引用都要对应的一个脚注,脚注的内容为文献条目,但条目的内容可以简化为文献序号和页码。 脚注方式的顺序编码制与一般的顺序编码制的主要差别在于: 一、正文每个文献需要引用均生成脚注文献,因此一个引用命令只能带一个文献引用关键字。且正文中引用的标注标签格式不同,是带圈的上标数字而不是[]包围的数字。 二、脚注中的文献表即便是遇到相同文献也需要重复输出,但可以简化为序号和页码。 -事实上如果不进行简化而只是简单重复输出,对于biblatex来说处理其实更方便,但为了与GB/T 7714-2015 标准给出的示例一致,biblatex-gb7714-2015也做了实现,注意:脚注方式文献表的引用命令为\verb|\footfullcite|,需要注意由于脚注本身在小页环境或表格中存在的问题,可能导致在其中使用该命令出现比较奇怪的现象。GB/T 7714-2015 标准中示例实现如图\ref{fig:numeric:footnote}所示: +事实上如果不进行简化而只是简单重复输出,对于biblatex来说处理其实更方便,但为了与GB/T 7714-2015 标准给出的示例一致,biblatex-gb7714-2015也做了实现,注意:脚注方式文献表的引用命令为\verb|\footfullcite|,需要注意由于脚注本身表格中存在的问题,可能导致在其中使用该命令出现比较奇怪的现象,也要注意在图表标题中的使用情况。GB/T 7714-2015 标准中示例实现如图\ref{fig:numeric:footnote}所示: \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% @@ -1603,11 +1908,11 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \end{figure} -\subsection{作者年制} +\subsection{著者-出版年制} \subsubsection{参考文献表} -GB/T 7714-2015规定采用作者年制组织时,各篇文献首先按文种组织,可分为中文,日文,西文,俄文和其他文种等部分;然后按照著者字顺和出版年排列。中文文献可以按著者汉语拼音字顺排序,也可按笔画顺序排列。具体参考GB/T 7714-2015第9.2节。 +GB/T 7714-2015规定采用著者-出版年制组织时,各篇文献首先按文种组织,可分为中文,日文,西文,俄文和其他文种等部分;然后按照著者字顺和出版年排列。中文文献可以按著者汉语拼音字顺排序,也可按笔画顺序排列。具体参考GB/T 7714-2015第9.2节。 %(因为需要根据语言进行划分,所以语言(language)域对于录入文献来说可能是必要的,因为作者的测试仅涉及中英文两种语言,没有遇到需要language域的情况。) @@ -1626,7 +1931,7 @@ GB/T 7714-2015规定采用作者年制组织时,各篇文献首先按文种组 标注要求具体参考GB/T 7714-2015第10.2节。 -\qd{一般情况下,当文献作者缺省时,作者年制就没有作者可以用,因此文献题名用来生成标签,这样会导致文献表中文献题名后的文献类型标识/文献载体标识消失(这是因为题名用于生成标签后,题名域会被清除,自然也就不输出题名相关的信息了,见后面的示例文献“\hyperlink{entrystdwithoutauthor}{Information and documentation-the Dublin core metadata element set}”)。此时可以用佚名替代缺省作者的方式避免这个问题,即可以使用样式文件提供的选项gbnoauthor=true,一旦设置该选项为true,则缺省的作者会根据文献语种填充为佚名或Anon。默认情况下,不进行这种处理,即相当于设置选项gbnoauthor=false。而顺序编码制因为标签是数字序号,所以不存在这个问题。} +\qd{一般情况下,当文献作者缺省时,著者-出版年制就没有作者可以用,因此文献题名用来生成标签,这样会导致文献表中文献题名后的文献类型标识/文献载体标识消失(这是因为题名用于生成标签后,题名域会被清除,自然也就不输出题名相关的信息了,见后面的示例文献“\hyperlink{entrystdwithoutauthor}{Information and documentation-the Dublin core metadata element set}”)。此时可以用佚名替代缺省作者的方式避免这个问题,即可以使用样式文件提供的选项gbnoauthor=true,一旦设置该选项为true,则缺省的作者会根据文献语种填充为佚名或Anon。默认情况下,不进行这种处理,即相当于设置选项gbnoauthor=false。而顺序编码制因为标签是数字序号,所以不存在这个问题。} %本样式文件默认情况下采用佚名方式,如果不需要使用佚名,那么需要在样式文件中注释掉一段代码,这段代码在本文档末尾2016-11-14的更新历史中有说明,见\pageref{up:20161114}页。} @@ -1698,7 +2003,7 @@ author.title[usera]//bookauthor.booktitle.edition.location:publisher,date或year 其对应的biblatex数据域为: \begin{example}{连续出版物/periodical条目的域格式}{eg:periodicalfieldfmt} \begin{texlist} -author/editor.title[usera].year或date,volume(number)-endyear, endvolume(endnumber).location:institution,date或year[urldate].url.doi +author/editor.title[usera].year或date,volume(number)-endyear, endvolume(endnumber).location:institution,date 或year[urldate].url.doi \end{texlist} \end{example} @@ -1971,7 +2276,7 @@ gb7714-2015实现了GB/T 7714-2015第8.8节要求的析出文献相关格式。 %读者若查看样式文件内容可以看到作者对各目标要求所做的修改及,读者也可以根据自己的需求进行修改,作者设计样式文件的思路以及在设计过程中用到的一些biblatex宏包功能说明,详见第\ref{sec:biblatex:mech}节和LaTeX文档中文参考文献的biblatex解决方案的第2.7节。 最后要感谢如下各位师长和朋友,正是在各位的帮助建议下,本样式不断升级逐渐完善。包括: moewew (biblatex 现在的维护者之一,给予不少有益的建议和指导)、 李志奇(基于biblatex的符合GBT7714-2005的中文文献生成工具的作者,工具中的一些设计如usera域的使用/卷期范围解析等带来很多启发,本人之前一直使用该工具,之所以开发biblatex-gb7714-2015其实主要是因为该工具因biblatex升级而无法使用)、caspervector(虽然未曾真正交流,但从biblatex-caspervector样式包中学到很多,包括排序/GBK编码等问题的解决思路)、LeoLiu(刘海洋,给出的CJK字符判断函数 -\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152663&extra=page\%3D3}} 对本宏包非常有帮助)、chinatex(china tex版主,给了很多建议和帮助,并且一起合作)、Sheng wenbo(biblatex用户手册合作译者,LaTeX2e 插图指南第三版译者,我们一起翻译的过程相互激励相互促进)、zepinglee(gbt7714-2015 bst样式作者,给了很多建议和讨论)、Harry Chen(ctex套件维护者之一,给了不少好的建议)、liubenyuan(关于项目组织给出了很好的建议)、刘小涛(讨论了关于zotero的使用并提出了建议)、ghiclgi(讨论了GB中作者年制标注标签的一些问题)、秀文工作组、leipility、qingkuan、湘厦人、秋平、任蒲军、fredericky123、qiuzhu、chaoxiaosu、Old Jack、Wu Nailong、Yibai Zhang、wayne508、 钟乙源、Xiaodong Yao、dsycircle、rpjshu、zjsdut、谢澜涛、Zutian Luo、海阔天空、zzqzyx、程晨、xmtangjun、蔡伟 等等。当然还有更多朋友提供了bug报告,提出了issue,提供了热心帮助,限于篇幅这里不再一一列举,在此一并表示感谢! +\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152663&extra=page\%3D3}} 对本宏包非常有帮助)、chinatex(china tex版主,给了很多建议和帮助,并且一起合作)、Sheng wenbo(biblatex用户手册合作译者,LaTeX2e 插图指南第三版译者,我们一起翻译的过程相互激励相互促进)、zepinglee(gbt7714-2015 bst样式作者,给了很多建议和讨论)、Harry Chen(ctex套件维护者之一,给了不少好的建议)、liubenyuan(关于项目组织给出了很好的建议)、刘小涛(讨论了关于zotero的使用并提出了建议)、ghiclgi(讨论了GB中著者-出版年制标注标签的一些问题)、秀文工作组、leipility、qingkuan、湘厦人、秋平、任蒲军、fredericky123、qiuzhu、chaoxiaosu、Old Jack、Wu Nailong、Yibai Zhang、wayne508、 钟乙源、Xiaodong Yao、dsycircle、rpjshu、zjsdut、谢澜涛、Zutian Luo、海阔天空、zzqzyx、程晨、xmtangjun、蔡伟 等等。当然还有更多朋友提供了bug报告,提出了issue,提供了热心帮助,限于篇幅这里不再一一列举,在此一并表示感谢! \section{存在的问题和下一步工作} @@ -1987,7 +2292,7 @@ gb7714-2015实现了GB/T 7714-2015第8.8节要求的析出文献相关格式。 %\item 顺序年制中当不存在著者信息时,如果用佚名或者no author,本样式文件中没有实现。怎么在数据进来后,给一些域添加信息?在biber处理过程中根据一些判断添加信息?(著者年制,没有作者,用佚名,英文怎么办?没有年怎么办?) %这个问题解决了,2016-1114 - %\item 作者年制引用标签时,文中已经存在作者名的,标签只需要写年份,这个需要定义一个新的yearcite命令,是容易实现的,但这里没有实现。 + %\item 著者-出版年制引用标签时,文中已经存在作者名的,标签只需要写年份,这个需要定义一个新的yearcite命令,是容易实现的,但这里没有实现。 %这个问题解决了,2016-1114,增加了一个yearpagescite命令。 %\item backref的格式也可以修改一下。 diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015lan.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015lan.tex index 81388b1ba56..637fc0c2936 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015lan.tex +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015lan.tex @@ -33,5 +33,13 @@ \phantomsection \includepdf[pages=-,addtotoc={1,section,1,opt-gblanorder-udforder,eg:lanorderudf}]{example/opt-gblanorder-udforder.pdf} +\phantomsection +\includepdf[pages=-,addtotoc={1,section,1,test-setlocal,eg:setlocalstring}] +{example/test-setlocal.pdf} + +\phantomsection +\includepdf[pages=-,addtotoc={1,section,1,test-setlocal-multilan,eg:setlocalstringmutillan}] +{example/test-setlocal-multilan.pdf} + \end{document} diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015thesis.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015thesis.tex index 834dd36750f..7c12dc47a98 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015thesis.tex +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/gbT7714-2015thesis.tex @@ -37,6 +37,8 @@ %\addcontentsline{toc}{section}{THU} \includepdf[pages=-,addtotoc={1,section,1,THU,eg:THU}]{egthesis/thesis-thu-numeric.pdf} +%\addcontentsline{toc}{section}{THU} +\includepdf[pages=-,addtotoc={1,section,1,THU,eg:TongJi}]{egthesis/thesis-tongji.pdf} %\addcontentsline{toc}{section}{UCAS} \includepdf[pages=-,addtotoc={1,section,1,UCAS-m,eg:UCASm}]{egthesis/thesis-ucas-m.pdf} diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx index 6429952be64..7bc20e91635 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx @@ -11,7 +11,7 @@ % % 版本和时间信息 % -\def\versionofgbtstyle{2019/03/28 v1.0r} +\def\versionofgbtstyle{2019/08/28 v1.0s} \def\versionofbiblatex{\abx@version} \ProvidesFile{gb7714-2015.bbx}[\versionofgbtstyle biblatex bibliography style] %\RequireBiber[3]%显式指定用biber后端,当用bibtex时会报错,但其实不会影响编译,只是采用bibtex后无法达成格式需求 @@ -205,6 +205,27 @@ % 设置宏包选项 %===================================================================== % + % 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息 + % 20190509,v1,0s,hzz + \newtoggle{bbx:gbannote} + \DeclareBibliographyOption{gbannote}[false]{%biblatex低版本 + \settoggle{bbx:gbannote}{#1}} + \ExecuteBibliographyOptions{gbannote} + % + %用于在文献条目后面输出注释信息的宏 + %FieldFormat{annotation}用于设置注释信息的格式 + \DeclareFieldFormat{annotation}{% + \printtext{\addspace(#1)}% + } + \renewbibmacro*{annotation}{% + \iftoggle{bbx:gbannote}% + {\iffieldundef{annotation}% + {\printfile[annotation]{\bibannotationprefix\thefield{entrykey}.tex}}% + {\printfield{annotation}}}% + {}% + } + + % % 增加一个控制是否输出type域的选项 % 20190212,v1,0q,hzz \newtoggle{bbx:gbfieldtype} @@ -213,6 +234,15 @@ \ExecuteBibliographyOptions{gbfieldtype} % + % 增加一个控制是否根据页码重设脚注数字标号的选项 + % 20190422,v1,0r,hzz + \newtoggle{bbx:gbfnperpage} + \DeclareBibliographyOption{gbfnperpage}[false]{% + \settoggle{bbx:gbfnperpage}{#1}} + \ExecuteBibliographyOptions{gbfnperpage} + + + % % 增加一个选项,用于控制是否实现GB/T 7714-2015标准的脚注文献表 % 20190203,v1.0p,hzz % 原理方法:默认做patch,文献引用带圈上标数字表示,脚注中的文献用带圈非上标数字做标签 @@ -244,7 +274,9 @@ %重新实现脚注的根据单页重设脚注号码 %重新实现脚注的悬挂对齐问题,不再使用footmisc,直接从latex核心代码和hyperref代码进行修改 %v1.0q 20190317 hzz - \@addtoreset{footnote}{page}%重设计数器 + %v1.0r 20190422 hzz 根据gbfnperpage选项设置 + \iftoggle{bbx:gbfnperpage}% + {\@addtoreset{footnote}{page}}{}%重设计数器 \@ifpackageloaded{hyperref}{%加载hyperref则对\H@@footnotetext做重定义 \long\def\H@@footnotetext##1{\insert\footins{% @@ -330,16 +362,16 @@ %v1.0q 20190309 区分使脚注标注适应minipage中的情况 \newbibmacro*{citesavefn}{% \ifciteseen%当被引用过为true - {\ifcsdef{sec\arabic{refsection}et\thefield{entrykey}}%当已经定义过脚注序号信息 - {\csgdef{labelsec\arabic{refsection}et\thefield{entrykey}}{% - \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}et\thefield{entrykey}}}% + {\ifcsdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}%当已经定义过脚注序号信息 + {\csgdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% + \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}}% \@makefnmark% }}% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% }}% }% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% %判断在minipage中比较麻烦,这里使用\@mpfn的定义进行判断 }}% @@ -356,8 +388,8 @@ {}{\setunit{\addcolon\addspace}\printfield{postnote}}}%与ay样式不同,由于已修改postnote域格式,直接用printfield }% {\usebibmacro{citesavefn}% - \ifcsdef{labelsec\arabic{refsection}et\thefield{entrykey}}% - {\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}}%\nopunct + \ifcsdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}% + {\csuse{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}}%\nopunct {\usedriver{\DeclareNameAlias{sortname}{default}}{\thefield{entrytype}}}% }% {\multicitedelim}% @@ -775,7 +807,7 @@ %andothers = {et al.},%将超过3个人名的省略,et al.改成为 等 andotherscn = {\str@andotherscn},%将超过3个人名的省略,et al.改成为 等 andothersincitecn={\str@andotherscn},%将标注中的分开,便于与文献表中的区分 - andothersincite={et al.}, + andothersincite={et al\adddot}, backrefpage = {\str@backrefpage:}, backrefpages = {\str@backrefpages:}, in={in\intitlepunct}, @@ -793,6 +825,15 @@ editorcn={\str@editorcn}, } + % + % 增加两个命令用于临时的局部的修改本地化字符串 + % 其中\setlocalbibstring修改缩写字符串,setlocalbiblstring修改长字符串 + % 注意使用时因为是局部修改,因此要将其与需要修改的引用命令放在一个编组符号内 + % v1.0t,hzz,20190525 + \newcommand{\setlocalbibstring}[2]{% + \csdef{abx@sstr@#1}{#2}} + \newcommand{\setlocalbiblstring}[2]{% + \csdef{abx@lstr@#1}{#2}} %===================================================================== % 动态数据修改 @@ -1787,7 +1828,7 @@ % 修改译者位置格式 % % 原理方法:修改来自biblatex.def文件的bytranslator+others宏的格式 -\renewbibmacro*{bytranslator+others}{% +\renewbibmacro*{bytranslator+others}{\bibauthorfont% \ifnameundef{translator} {} {%\usebibmacro{bytranslator+othersstrg} @@ -1808,7 +1849,7 @@ % v1.0O,20190103,hzz,修改利用新定义的一个分隔符strandothersdelim % % 原理方法:判断作者或译者是否中文,若中文用字符等,否则用et al. 。 -\renewbibmacro*{name:andothers}{% +\renewbibmacro*{name:andothers}{\bibauthorfont% \ifboolexpr{ test {\ifnumequal{\value{listcount}}{\value{liststop}}} and @@ -2470,7 +2511,8 @@ test{\iftoggle{iftlnine}} % % 调整doi+eprint+url格式 -% +% 2016.07.01 byhzz +% 2019.05.01 byhzz 在eprint前增加一个空格 % 原理方法:源来自standard.bbx,因为页码后面直接跟引用日期,没有标点所以去掉其中的标点。 \renewbibmacro*{doi+eprint+url}{% % \iftoggle{bbx:doi}%把doi的位置放到url后面 @@ -2478,7 +2520,7 @@ test{\iftoggle{iftlnine}} % {}% %\newunit\newblock \iftoggle{bbx:eprint} - {\usebibmacro{eprint}} + {\iffieldundef{eprint}{}{\newunit\usebibmacro{eprint}}} {}% %\newunit\newblock \iftoggle{bbx:url} @@ -2621,7 +2663,7 @@ incollection,proceedings,inproceedings]{number}{% % % 对edition版本信息格式做出修改 % -\DeclareFieldFormat{edition}{%源来自biblatex.DEF +\DeclareFieldFormat{edition}{\bibtitlefont%源来自biblatex.DEF \testCJKfirst{userd}% \iftoggle{ifCJKforgbt}% {\ifinteger{#1}% @@ -2634,7 +2676,7 @@ incollection,proceedings,inproceedings]{number}{% % % 对version的版本信息做出修改 % -\DeclareFieldFormat{version}{%源来自biblatex.DEF +\DeclareFieldFormat{version}{\bibtitlefont%源来自biblatex.DEF \testCJKfirst{userd}% \ifinteger{#1}% {\iftoggle{ifCJKforgbt}{\printtext{#1\str@edition}}% @@ -2971,6 +3013,16 @@ incollection,proceedings,inproceedings]{number}{% {\ifbibstring{#1}{\bibstring{#1}}{#1}}% } +% +% 修改series域的输出格式 +% 2019.05.01,v1.0r,byhzz +\renewbibmacro*{series+number}{% + \printfield{series}% + %\setunit*{\addspace}% + %\printfield{number}% + %\newunit + } + %===================================================================== %设置驱动格式 %===================================================================== @@ -3028,7 +3080,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -3075,7 +3127,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} @@ -3113,7 +3165,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 专利文献驱动 @@ -3156,7 +3208,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -3203,7 +3255,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -3253,7 +3305,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 论文、手册类型驱动 @@ -3305,7 +3357,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 备选类型驱动 @@ -3346,7 +3398,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -3365,8 +3417,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ \ifnameundef{editor}{}{\newunit}% }{\newunit}%替换下一句 %\newunit\newblock +\iffieldundef{series}{}{\usebibmacro{series+number}\setunit{\addcolon\addspace}}%为处理一些存在series的情况而增加 \usebibmacro{maintitle+booktitle}% - \setunit{\addcolon}\printfield{volume}\printfield{number}%增加卷和册信息 +\iffieldundef{volume}{}{\setunit{\addcolon\addspace}\printfield{volume}}% +\iffieldundef{number}{}{\setunit{\addcolon\addspace}\printfield{number}}%增加卷和册信息 \newunit\newblock% % \usebibmacro{byeditor+others}% % \newunit\newblock @@ -3378,9 +3432,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ % \printfield{part}} % {}% % \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{series+number}}% +% \printfield{volumes}% +% \newunit\newblock +% \usebibmacro{series+number} + }% \newunit\newblock %\printfield{note}% %\newunit\newblock @@ -3404,4 +3459,4 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx index 949c37dca92..a62ca688b3c 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx @@ -7,7 +7,7 @@ %% Released under the LaTeX Project Public License v1.3c or later %% --------------------------------------------------------------- %% -\def\versionofgbtstyle{2019/03/28 v1.0r} +\def\versionofgbtstyle{2019/08/28 v1.0s} \ProvidesFile{gb7714-2015.cbx}[\versionofgbtstyle biblatex citation style] % @@ -66,20 +66,10 @@ % % 定义upcite命令 % 20180604,v1.0l,hzz +% 20190409,v1.0r,hzz % 方法:对supercite增加[] -\DeclareCiteCommand{\upcite}[\mkbibsuperbracket]% - {\usebibmacro{cite:init}% - \let\multicitedelim=\supercitedelim - \iffieldundef{prenote} - {} - {\BibliographyWarning{Ignoring prenote argument}}% - \iffieldundef{postnote} - {} - {\BibliographyWarning{Ignoring postnote argument}}} - {\usebibmacro{citeindex}% - \usebibmacro{cite:comp}} - {} - {\usebibmacro{cite:dump}} +\newrobustcmd*{\upcite}{% + \cite} % % 重定义parencite命令,以满足标签带页码的国标要求 @@ -161,4 +151,129 @@ \printnames{labelname}\mkbibsuperscript{\mkbibbrackets{\usebibmacro{citeindex}% \usebibmacro{cite}}}} {\multicitedelim} - {\usebibmacro{postnote}} + {\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} 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 593f17155a9..e0609f60a15 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,7 +10,7 @@ % % 版本和时间信息 % -\def\versionofgbtstyle{2019/03/28 v1.0r} +\def\versionofgbtstyle{2019/08/28 v1.0s} \def\versionofbiblatex{\abx@version} \ProvidesFile{gb7714-2015ay.bbx}[\versionofgbtstyle biblatex bibliography style] %\RequireBiber[3]%显式指定用biber后端,当用bibtex时会报错,但其实不会影响编译,只是采用bibtex后无法达成格式需求 @@ -202,6 +202,28 @@ % 设置宏包选项 %===================================================================== % + % 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息 + % 20190509,v1,0s,hzz + \newtoggle{bbx:gbannote} + \DeclareBibliographyOption{gbannote}[false]{%biblatex低版本 + \settoggle{bbx:gbannote}{#1}} + \ExecuteBibliographyOptions{gbannote} + % + %用于在文献条目后面输出注释信息的宏 + %FieldFormat{annotation}用于设置注释信息的格式 + \DeclareFieldFormat{annotation}{% + \printtext{\addspace(#1)}% + } + \renewbibmacro*{annotation}{% + \iftoggle{bbx:gbannote}% + {\iffieldundef{annotation}% + {\printfile[annotation]{\bibannotationprefix\thefield{entrykey}.tex}}% + {\printfield{annotation}}}% + {}% + } + + + % % 增加一个控制是否输出type域的选项 % 20190212,v1,0q,hzz \newtoggle{bbx:gbfieldtype} @@ -210,6 +232,14 @@ \ExecuteBibliographyOptions{gbfieldtype} % + % 增加一个控制是否根据页码重设脚注数字标号的选项 + % 20190422,v1,0r,hzz + \newtoggle{bbx:gbfnperpage} + \DeclareBibliographyOption{gbfnperpage}[false]{% + \settoggle{bbx:gbfnperpage}{#1}} + \ExecuteBibliographyOptions{gbfnperpage} + + % % 增加一个选项,用于控制是否实现GB/T 7714-2015标准的脚注文献表 % 20190203,v1.0p,hzz % 原理方法:默认做patch,文献引用带圈上标数字表示,脚注中的文献用带圈非上标数字做标签 @@ -241,7 +271,9 @@ %重新实现脚注的根据单页重设脚注号码 %重新实现脚注的悬挂对齐问题,不再使用footmisc,直接从latex核心代码和hyperref代码进行修改 %v1.0q 20190317 hzz - \@addtoreset{footnote}{page}%重设计数器 + %v1.0r 20190422 hzz 根据gbfnperpage选项设置 + \iftoggle{bbx:gbfnperpage}% + {\@addtoreset{footnote}{page}}{}%重设计数器 \@ifpackageloaded{hyperref}{%加载hyperref则对\H@@footnotetext做重定义 \long\def\H@@footnotetext##1{\insert\footins{% @@ -326,16 +358,16 @@ %v1.0q 20190309 区分使脚注标注适应minipage中的情况 \newbibmacro*{citesavefn}{% \ifciteseen%当被引用过为true - {\ifcsdef{sec\arabic{refsection}et\thefield{entrykey}}%当已经定义过脚注序号信息 - {\csgdef{labelsec\arabic{refsection}et\thefield{entrykey}}{% - \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}et\thefield{entrykey}}}% + {\ifcsdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}%当已经定义过脚注序号信息 + {\csgdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% + \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}}% \@makefnmark% }}% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% }}% }% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% %判断在minipage中比较麻烦,这里使用\@mpfn的定义进行判断 }}% @@ -352,8 +384,8 @@ {}{\setunit{\addcolon\addspace}\printtext{\thefield{postnote}}}}%由于ay样式中没有修改postnote域,此处因为格式需要不使用默认域格式 }% {\usebibmacro{citesavefn}% - \ifcsdef{labelsec\arabic{refsection}et\thefield{entrykey}}% - {\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}\nopunct}% + \ifcsdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}% + {\csuse{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}\nopunct}% {\usedriver{\DeclareNameAlias{sortname}{default}}{\thefield{entrytype}}}% }% {\multicitedelim}% @@ -718,6 +750,16 @@ } % +% 针对3.13<=biblatex版本的选项设置,因为内容有限,所以不再增加版本区分,而用时间直接判断 +% +% 解决国标中“王临慧, 2010a.”和“王临慧, 等, 2010b.”的问题 +% 在没有这个选项之前无法加上a和b +% v1.0s,20190828 +\@ifpackagelater{biblatex}{2019/08/16}{% + \ExecuteBibliographyOptions{% + nohashothers=true}}{} + +% % 根据biblatex版本信息,选择选项设置 % % 原理方法:如下这种选择机制能自动兼容更新的版本,但对于老版本 @@ -772,7 +814,7 @@ %andothers = {et al.}, %将超过3个人名的省略,et al.改成为 等 andotherscn = {\str@andotherscn},%将超过3个人名的省略,et al.改成为 等 andothersincitecn={\str@andotherscn},%将标注中的分开,便于与文献表中的区分 - andothersincite={et al.}, + andothersincite={et al\adddot}, backrefpage = {\str@backrefpage:}, backrefpages = {\str@backrefpages:}, in={in\intitlepunct}, @@ -788,8 +830,17 @@ phdthesiscn={\str@phdthesiscn}, editorscn={\str@editorcn}, editorcn={\str@editorcn}, -} + } + % + % 增加两个命令用于临时的局部的修改本地化字符串 + % 其中\setlocalbibstring修改缩写字符串,setlocalbiblstring修改长字符串 + % 注意使用时因为是局部修改,因此要将其与需要修改的引用命令放在一个编组符号内 + % v1.0t,hzz,20190525 + \newcommand{\setlocalbibstring}[2]{% + \csdef{abx@sstr@#1}{#2}} + \newcommand{\setlocalbiblstring}[2]{% + \csdef{abx@lstr@#1}{#2}} %===================================================================== % 动态数据修改 @@ -2006,7 +2057,7 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 % 而不用对每一个引用命令单独设置,比如cite,parancite,textcite都设置 \DeclareDelimFormat{finalnamedelim}{% \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}% - \addspace% +% \addspace% \edef\userfieldabcde{userd}% \ifcurrentname{translator}{\edef\userfieldabcde{usere}}{}% \ifcurrentname{editor}{\edef\userfieldabcde{userc}}{}% @@ -2016,14 +2067,14 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \iffieldequalstr{\userfieldabcde}{chinese}{\bibstring{andincitecn}}{}% \iffieldequalstr{\userfieldabcde}{korean}{\bibstring{andkr}}{}% \iffieldequalstr{\userfieldabcde}{japanese}{\bibstring{andjp}}{}% - \iffieldequalstr{\userfieldabcde}{english}{\bibstring{andincite}}{}% - \iffieldequalstr{\userfieldabcde}{french}{\bibstring{and}}{}% - \iffieldequalstr{\userfieldabcde}{russian}{\bibstring{and}}{}% -\space% + \iffieldequalstr{\userfieldabcde}{english}{\space\bibstring{andincite}\space}{}% + \iffieldequalstr{\userfieldabcde}{french}{\space\bibstring{and}\space}{}% + \iffieldequalstr{\userfieldabcde}{russian}{\space\bibstring{and}\space}{}% +%\space% \or% - \bibstring{andincitecn}\space% + \bibstring{andincitecn}%\space% \or% - \bibstring{andincite}\space% +\space\bibstring{andincite}\space% \fi} \DeclareDelimFormat[bib,biblist]{finalnamedelim}{% @@ -2616,7 +2667,7 @@ test{\iftoggle{iftlnine}} % {}% %\newunit\newblock \iftoggle{bbx:eprint} - {\usebibmacro{eprint}} + {\iffieldundef{eprint}{}{\newunit\usebibmacro{eprint}}}%必须要做域判断否则容易产生多余的标点 {}% %\newunit\newblock \iftoggle{bbx:url} @@ -2904,7 +2955,8 @@ incollection,proceedings,inproceedings]{number}{% \iffieldundef{labelyear} {} {}}%[parens]\printtext{\printlabeldateextra} -\renewbibmacro*{bbx:ifmergeddate}{\@secondoftwo}% +\renewbibmacro*{bbx:ifmergeddate}{\@secondoftwo}%这一句用于3.12版本 +\renewbibmacro*{date}{\printdate}%这一句用于biblatex3.11以下版本 \renewbibmacro*{issue+date}{%去掉括号 \setunit{\addcomma\addspace}% \printtext{%去掉了[parens] @@ -2922,7 +2974,8 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{date}}% }}}% %\newunit - }} + }% + } \iftoggle{iftlfive}{\switchversion{3.0}{dateextra}}{}%biblatex<=3.2 \iftoggle{iftlsix}{\switchversion{3.4}{dateextra}}{}%3.3<=biblatex<=3.6 @@ -3287,6 +3340,17 @@ test {\ifentrytype{conference}} {\ifbibstring{#1}{\bibstring{#1}}{#1}}% } + +% +% 修改series域的输出格式 +% 2019.05.01,v1.0r,byhzz +\renewbibmacro*{series+number}{% + \printfield{series}% + %\setunit*{\addspace}% + %\printfield{number}% + %\newunit + } + %===================================================================== %设置驱动格式 %===================================================================== @@ -3344,7 +3408,7 @@ test {\ifentrytype{conference}} {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} @@ -3393,7 +3457,7 @@ test {\ifentrytype{conference}} {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -3430,7 +3494,7 @@ test {\ifentrytype{conference}} {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 专利文献驱动 @@ -3473,7 +3537,7 @@ test {\ifentrytype{conference}} {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -3520,7 +3584,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} @@ -3572,7 +3636,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 论文、手册类型驱动 @@ -3625,7 +3689,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 备选类型驱动 @@ -3666,7 +3730,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} @@ -3688,8 +3752,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ \ifnameundef{editor}{}{\newunit}% }{\newunit}%替换下一句 %\newunit\newblock +\iffieldundef{series}{}{\usebibmacro{series+number}\setunit{\addcolon\addspace}}%为处理一些存在series的情况而增加 \usebibmacro{maintitle+booktitle}% - \setunit{\addcolon}\printfield{volume}\printfield{number}%增加卷和册信息 +\iffieldundef{volume}{}{\setunit{\addcolon\addspace}\printfield{volume}}% +\iffieldundef{number}{}{\setunit{\addcolon\addspace}\printfield{number}}%增加卷和册信息 \newunit\newblock% % \usebibmacro{byeditor+others}% % \newunit\newblock @@ -3701,9 +3767,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ % \printfield{part}} % {}% % \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{series+number}}% +% \printfield{volumes}% +% \newunit\newblock +% \usebibmacro{series+number} + }% \newunit\newblock %\printfield{note}% %\newunit\newblock @@ -3727,4 +3794,4 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx index 3c35d2891d8..9b9adf9b141 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ay.cbx @@ -7,7 +7,7 @@ %% Released under the LaTeX Project Public License v1.3c or later %% --------------------------------------------------------------- %% -\def\versionofgbtstyle{2019/03/28 v1.0r} +\def\versionofgbtstyle{2019/08/28 v1.0s} \ProvidesFile{gb7714-2015ay.cbx}[\versionofgbtstyle biblatex citation style] % @@ -102,13 +102,10 @@ test {\iftoggle{iftlseven}}%3.7=biblatex % % 定义upcite命令 % 20180604,v1.0l,hzz -% 方法:与yearcite命令相同 -\DeclareCiteCommand{\upcite}%仅输出年份,不要页码 - {\usebibmacro{cite:init}% - \printtext{(}\usebibmacro{prenote}}% - {\usebibmacro{cite:labeldate+extradate}}%\printfield{year}\printfield{extrayear} - {\multicitedelim}% - {\printtext{)}} +% 20190409,v1.0r,hzz +% 方法:与cite命令相同 +\newrobustcmd*{\upcite}{% + \cite} % % 重定义parencite命令 @@ -177,8 +174,67 @@ test {\iftoggle{iftlseven}}%3.7=biblatex % % 定义\authornumcite命令,输出作者信息,然后在后面带上顺序编码 % 20180427,v1.0k,增加,hzz -% 为与顺序编码制兼容,增加了命令,定义与cite相同 -\DeclareCiteCommand{\authornumcite} +% 20190409,v1.0r,hzz +% 为与顺序编码制兼容,增加了命令,定义与citet相同 +\newbibmacro*{citet}{% + \iffieldundef{shorthand} + {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}} + {\usebibmacro{cite:label}% + \setunit{\printdelim{nonameyeardelim}}% + \usebibmacro{cite:labeldate+extradate}% + \usebibmacro{cite:reinit}} + {\iffieldequals{namehash}{\cbx@lasthash} + {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND + \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)} + {\setunit{\addcomma}% + \usebibmacro{cite:extradate}} + {\setunit{\compcitedelim}% + \usebibmacro{cite:labeldate+extradate}% + \savefield{labelyear}{\cbx@lastyear}}} + {\printnames{labelname}% + %\setunit{\printdelim{nameyeardelim}}% + (\usebibmacro{cite:labeldate+extradate})% + \savefield{namehash}{\cbx@lasthash}% + \savefield{labelyear}{\cbx@lastyear}}}} + {\usebibmacro{cite:shorthand}% + \usebibmacro{cite:reinit}}% + \setunit{\multicitedelim}} + +\DeclareCiteCommand{\authornumcite}% + {\usebibmacro{cite:init}% + \renewbibmacro*{postnote}{% + \iffieldundef{postnote}% + {}% + {\thefield{postnote}}}% + \usebibmacro{prenote}}% + {\usebibmacro{citeindex}% + \usebibmacro{citet}} + {} + {\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote} + } + +% +% 增加如下多个命令 +% 20190409,v1.0r,hzz +% 方法:利用newcommand或newrobustcmd命令进行定义 +% 注意\citet和\citep命令之所以不用newrobustcmd,是为避免加载natbib模块后产生冲突 + +%同\authornumcite +\DeclareCiteCommand{\citet}% + {\usebibmacro{cite:init}% + \renewbibmacro*{postnote}{% + \iffieldundef{postnote}% + {}% + {\thefield{postnote}}}% + \usebibmacro{prenote}}% + {\usebibmacro{citeindex}% + \usebibmacro{citet}} + {} + {\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote} + } + +%同cite +\DeclareCiteCommand{\citep} {\usebibmacro{cite:init}% \renewbibmacro*{postnote}{% \iffieldundef{postnote}% @@ -191,3 +247,25 @@ test {\iftoggle{iftlseven}}%3.7=biblatex {%( )\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote} } + +\newrobustcmd*{\citetns}% + {\textcite} + +\newrobustcmd*{\citepns}% + {\parencite} + +\newrobustcmd*{\inlinecite}% + {\parencite} + + +% +% 增加如下复数的命令,以符合biblatex的复数命令习惯 +% 20190430,v1.0r,hzz +% citec和citecs命令是为了兼容顺序编码制。 +% authornumcites是常用命令authornumcite的复数形式 +\newrobustcmd*{\citec}% + {\cite} + +\DeclareMultiCiteCommand{\citecs}[]{\cite}{\multicitedelim} + +\DeclareMultiCiteCommand{\authornumcites}[]{\authornumcite}{\multicitedelim} diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx index 186f5577869..13d158fd938 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.bbx @@ -11,7 +11,7 @@ % % 版本和时间信息 % -\def\versionofgbtstyle{2019/03/28 v1.0r} +\def\versionofgbtstyle{2019/08/28 v1.0s} \def\versionofbiblatex{\abx@version} \ProvidesFile{gb7714-2015ms.bbx}[\versionofgbtstyle biblatex bibliography style] %\RequireBiber[3]%显式指定用biber后端,当用bibtex时会报错,但其实不会影响编译,只是采用bibtex后无法达成格式需求 @@ -93,6 +93,28 @@ % 设置宏包选项 %===================================================================== % + % 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息 + % 20190509,v1,0s,hzz + \newtoggle{bbx:gbannote} + \DeclareBibliographyOption{gbannote}[false]{%biblatex低版本 + \settoggle{bbx:gbannote}{#1}} + \ExecuteBibliographyOptions{gbannote} + % + %用于在文献条目后面输出注释信息的宏 + %FieldFormat{annotation}用于设置注释信息的格式 + \DeclareFieldFormat{annotation}{% + \printtext{\addspace(#1)}% + } + \renewbibmacro*{annotation}{% + \iftoggle{bbx:gbannote}% + {\iffieldundef{annotation}% + {\printfile[annotation]{\bibannotationprefix\thefield{entrykey}.tex}}% + {\printfield{annotation}}}% + {}% + } + + + % % 增加一个控制是否输出type域的选项 % 20190212,v1,0q,hzz \newtoggle{bbx:gbfieldtype} @@ -101,6 +123,14 @@ \ExecuteBibliographyOptions{gbfieldtype} % + % 增加一个控制是否根据页码重设脚注数字标号的选项 + % 20190422,v1,0r,hzz + \newtoggle{bbx:gbfnperpage} + \DeclareBibliographyOption{gbfnperpage}[false]{% + \settoggle{bbx:gbfnperpage}{#1}} + \ExecuteBibliographyOptions{gbfnperpage} + + % % 增加一个选项,用于控制是否实现GB/T 7714-2015标准的脚注文献表 % 20190203,v1.0p,hzz % 原理方法:默认做patch,文献引用带圈上标数字表示,脚注中的文献用带圈非上标数字做标签 @@ -132,7 +162,9 @@ %重新实现脚注的根据单页重设脚注号码 %重新实现脚注的悬挂对齐问题,不再使用footmisc,直接从latex核心代码和hyperref代码进行修改 %v1.0q 20190317 hzz - \@addtoreset{footnote}{page}%重设计数器 + %v1.0r 20190422 hzz 根据gbfnperpage选项设置 + \iftoggle{bbx:gbfnperpage}% + {\@addtoreset{footnote}{page}}{}%重设计数器 \@ifpackageloaded{hyperref}{%加载hyperref则对\H@@footnotetext做重定义 \long\def\H@@footnotetext##1{\insert\footins{% @@ -218,16 +250,16 @@ %v1.0q 20190309 区分使脚注标注适应minipage中的情况 \newbibmacro*{citesavefn}{% \ifciteseen%当被引用过为true - {\ifcsdef{sec\arabic{refsection}et\thefield{entrykey}}%当已经定义过脚注序号信息 - {\csgdef{labelsec\arabic{refsection}et\thefield{entrykey}}{% - \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}et\thefield{entrykey}}}% + {\ifcsdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}%当已经定义过脚注序号信息 + {\csgdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% + \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}}% \@makefnmark% }}% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% }}% }% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% %判断在minipage中比较麻烦,这里使用\@mpfn的定义进行判断 }}% @@ -244,8 +276,8 @@ {}{\setunit{\addcolon\addspace}\printfield{postnote}}}%与ay样式不同,由于已修改postnote域格式,直接用printfield }% {\usebibmacro{citesavefn}% - \ifcsdef{labelsec\arabic{refsection}et\thefield{entrykey}}% - {\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}\nopunct}% + \ifcsdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}% + {\csuse{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}\nopunct}% {\usedriver{\DeclareNameAlias{sortname}{default}}{\thefield{entrytype}}}% }% {\multicitedelim}% @@ -571,7 +603,7 @@ %andothers = {et al.}, %将超过3个人名的省略,et al.改成为 等 andotherscn = {\str@andotherscn}, %将超过3个人名的省略,et al.改成为 等 andothersincitecn={\str@andotherscn},%将标注中的分开,便于与文献表中的区分 - andothersincite={et al.}, + andothersincite={et al\adddot}, backrefpage = {\str@backrefpage:}, backrefpages = {\str@backrefpages:}, in={in\intitlepunct}, @@ -589,6 +621,15 @@ editorcn={\str@editorcn}, } + % + % 增加两个命令用于临时的局部的修改本地化字符串 + % 其中\setlocalbibstring修改缩写字符串,setlocalbiblstring修改长字符串 + % 注意使用时因为是局部修改,因此要将其与需要修改的引用命令放在一个编组符号内 + % v1.0t,hzz,20190525 + \newcommand{\setlocalbibstring}[2]{% + \csdef{abx@sstr@#1}{#2}} + \newcommand{\setlocalbiblstring}[2]{% + \csdef{abx@lstr@#1}{#2}} %===================================================================== % 动态数据修改 @@ -1663,6 +1704,16 @@ \fi}% +% +% 修改series域的输出格式 +% 2019.05.01,v1.0r,byhzz +\renewbibmacro*{series+number}{% + \printfield{series}% + %\setunit*{\addspace}% + %\printfield{number}% + %\newunit + } + %===================================================================== %设置驱动格式 %===================================================================== @@ -1847,7 +1898,7 @@ togl{bbx:gbstyle} or test {\iffieldequalstr{userd}{chinese}}% % {}% %\newunit\newblock \iftoggle{bbx:eprint} - {\usebibmacro{eprint}} + {\iffieldundef{eprint}{}{\newunit\usebibmacro{eprint}}} {}% %\newunit\newblock \iftoggle{bbx:url} @@ -2284,7 +2335,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 期刊文章,连续出版物中的析出文献的格式 % @@ -2329,7 +2380,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 连续出版物的驱动 % @@ -2364,7 +2415,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 专利文献驱动 % @@ -2406,7 +2457,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 在线文献驱动 % @@ -2451,7 +2502,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 报告类型驱动 % 2016-11-11,增加了译者信息 @@ -2499,7 +2550,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 手册类型驱动 % 2016-11-11,增加了译者信息 @@ -2551,7 +2602,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 备选类型驱动 % @@ -2591,7 +2642,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% % % 专著中的析出文献的格式修改 % @@ -2608,8 +2659,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ \ifnameundef{editor}{}{\newunit}% }{\newunit}%替换下一句 %\newunit\newblock +\iffieldundef{series}{}{\usebibmacro{series+number}\setunit{\addcolon\addspace}}%为处理一些存在series的情况而增加 \usebibmacro{maintitle+booktitle}% - \setunit{\addcolon}\printfield{volume}\printfield{number}%增加卷和册信息 +\iffieldundef{volume}{}{\setunit{\addcolon\addspace}\printfield{volume}}% +\iffieldundef{number}{}{\setunit{\addcolon\addspace}\printfield{number}}%增加卷和册信息 \newunit\newblock% % \usebibmacro{byeditor+others}% % \newunit\newblock @@ -2621,9 +2674,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ % \printfield{part}} % {}% % \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{series+number}}% +% \printfield{volumes}% +% \newunit\newblock +% \usebibmacro{series+number} + }% \newunit\newblock %\printfield{note}% %\newunit\newblock @@ -2647,7 +2701,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}}% + \usebibmacro{finentry}\usebibmacro{annotation}}% }{}% } diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx index 361f9d73a31..8c19244e17b 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015ms.cbx @@ -7,8 +7,8 @@ %% 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] +\def\versionofgbtstyle{2019/08/28 v1.0s} +\ProvidesFile{gb7714-2015ms.cbx}[\versionofgbtstyle biblatex citation style] % % 加载标准样式 @@ -66,20 +66,10 @@ % % 定义upcite命令 % 20180604,v1.0l,hzz +% 20190409,v1.0r,hzz % 方法:对supercite增加[] -\DeclareCiteCommand{\upcite}[\mkbibsuperbracket] - {\usebibmacro{cite:init} - \let\multicitedelim=\supercitedelim - \iffieldundef{prenote} - {} - {\BibliographyWarning{Ignoring prenote argument}}% - \iffieldundef{postnote} - {} - {\BibliographyWarning{Ignoring postnote argument}}} - {\usebibmacro{citeindex}% - \usebibmacro{cite:comp}} - {} - {\usebibmacro{cite:dump}} +\newrobustcmd*{\upcite}{% + \cite} % % 重定义parencite命令,以满足标签带页码的国标要求 @@ -163,4 +153,38 @@ \printnames{labelname}\mkbibsuperscript{\mkbibbrackets{\usebibmacro{citeindex}% \usebibmacro{cite}}}} {\multicitedelim} - {\usebibmacro{postnote}} + {\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} diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.bbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.bbx index 7b043ea65b6..d92ac1daf92 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.bbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.bbx @@ -11,7 +11,7 @@ % % 版本和时间信息 % -\def\versionofgbtstyle{2019/03/28 v1.0r} +\def\versionofgbtstyle{2019/08/28 v1.0s} \def\versionofbiblatex{\abx@version} \ProvidesFile{gb7714-2015mx.bbx}[\versionofgbtstyle biblatex bibliography style] %\RequireBiber[3]%显式指定用biber后端,当用bibtex时会报错,但其实不会影响编译,只是采用bibtex后无法达成格式需求 @@ -27,6 +27,28 @@ % 功能函数 %===================================================================== % + % 增加一个控制是否输出annotation域的选项,该域可以用于在文献条目后面输出一些注释信息 + % 20190509,v1,0s,hzz + \newtoggle{bbx:gbannote} + \DeclareBibliographyOption{gbannote}[false]{%biblatex低版本 + \settoggle{bbx:gbannote}{#1}} + \ExecuteBibliographyOptions{gbannote} + % + %用于在文献条目后面输出注释信息的宏 + %FieldFormat{annotation}用于设置注释信息的格式 + \DeclareFieldFormat{annotation}{% + \printtext{\addspace(#1)}% + } + \renewbibmacro*{annotation}{% + \iftoggle{bbx:gbannote}% + {\iffieldundef{annotation}% + {\printfile[annotation]{\bibannotationprefix\thefield{entrykey}.tex}}% + {\printfield{annotation}}}% + {}% + } + + + % % biblatex版本判断 % 20180629,v1.0k,hzz % @@ -104,6 +126,14 @@ \ExecuteBibliographyOptions{gbfieldtype} % + % 增加一个控制是否根据页码重设脚注数字标号的选项 + % 20190422,v1,0r,hzz + \newtoggle{bbx:gbfnperpage} + \DeclareBibliographyOption{gbfnperpage}[false]{% + \settoggle{bbx:gbfnperpage}{#1}} + \ExecuteBibliographyOptions{gbfnperpage} + + % % 增加一个选项,用于控制是否实现GB/T 7714-2015标准的脚注文献表 % 20190203,v1.0p,hzz % 原理方法:默认做patch,文献引用带圈上标数字表示,脚注中的文献用带圈非上标数字做标签 @@ -135,7 +165,9 @@ %重新实现脚注的根据单页重设脚注号码 %重新实现脚注的悬挂对齐问题,不再使用footmisc,直接从latex核心代码和hyperref代码进行修改 %v1.0q 20190317 hzz - \@addtoreset{footnote}{page}%重设计数器 + %v1.0r 20190422 hzz 根据gbfnperpage选项设置 + \iftoggle{bbx:gbfnperpage}% + {\@addtoreset{footnote}{page}}{}%重设计数器 \@ifpackageloaded{hyperref}{%加载hyperref则对\H@@footnotetext做重定义 \long\def\H@@footnotetext##1{\insert\footins{% @@ -221,16 +253,16 @@ %v1.0q 20190309 区分使脚注标注适应minipage中的情况 \newbibmacro*{citesavefn}{% \ifciteseen%当被引用过为true - {\ifcsdef{sec\arabic{refsection}et\thefield{entrykey}}%当已经定义过脚注序号信息 - {\csgdef{labelsec\arabic{refsection}et\thefield{entrykey}}{% - \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}et\thefield{entrykey}}}% + {\ifcsdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}%当已经定义过脚注序号信息 + {\csgdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% + \str@sameentry\gdef\@thefnmark{\csuse{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}}% \@makefnmark% }}% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% }}% }% - {\csxdef{sec\arabic{refsection}et\thefield{entrykey}}{% + {\csxdef{sec\arabic{refsection}\arabic{page}et\thefield{entrykey}}{% \ifcsstring{@mpfn}{mpfootnote}{\@alph\c@mpfootnote}{\thefootnote}% %判断在minipage中比较麻烦,这里使用\@mpfn的定义进行判断 }}% @@ -247,8 +279,8 @@ {}{\setunit{\addcolon\addspace}\printtext{\thefield{postnote}}}}%由于ay样式中没有修改postnote域,此处因为格式需要不使用默认域格式 }% {\usebibmacro{citesavefn}% - \ifcsdef{labelsec\arabic{refsection}et\thefield{entrykey}}% - {\csuse{labelsec\arabic{refsection}et\thefield{entrykey}}}%\nopunct + \ifcsdef{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}% + {\csuse{labelsec\arabic{refsection}\arabic{page}et\thefield{entrykey}}}%\nopunct {\usedriver{\DeclareNameAlias{sortname}{default}}{\thefield{entrytype}}}% }% {\multicitedelim}% @@ -567,6 +599,15 @@ labeldateparts=true, } +% +% 针对3.13<=biblatex版本的选项设置,因为内容有限,所以不做版本区分,而用时间直接判断 +% +% 解决国标中“王临慧, 2010a.”和“王临慧, 等, 2010b.”的问题 +% 在没有这个选项之前无法加上a和b +% v1.0s,20190828 +\@ifpackagelater{biblatex}{2019/08/16}{% + \ExecuteBibliographyOptions{% + nohashothers=true}}{} %===================================================================== % 设置本地化字符串 @@ -613,7 +654,7 @@ %andothers = {et al.},%将超过3个人名的省略,et al.改成为 等 andotherscn = {\str@andotherscn},%将超过3个人名的省略,et al.改成为 等 andothersincitecn={\str@andotherscn},%将标注中的分开,便于与文献表中的区分 - andothersincite={et al.}, + andothersincite={et al\adddot}, backrefpage = {\str@backrefpage:}, backrefpages = {\str@backrefpages:}, in={in\intitlepunct}, @@ -631,6 +672,15 @@ editorcn={\str@editorcn}, } + % + % 增加两个命令用于临时的局部的修改本地化字符串 + % 其中\setlocalbibstring修改缩写字符串,setlocalbiblstring修改长字符串 + % 注意使用时因为是局部修改,因此要将其与需要修改的引用命令放在一个编组符号内 + % v1.0t,hzz,20190525 + \newcommand{\setlocalbibstring}[2]{% + \csdef{abx@sstr@#1}{#2}} + \newcommand{\setlocalbiblstring}[2]{% + \csdef{abx@lstr@#1}{#2}} %===================================================================== % 动态数据修改 @@ -2104,7 +2154,7 @@ % {}% %\newunit\newblock \iftoggle{bbx:eprint} - {\usebibmacro{eprint}} + {\iffieldundef{eprint}{}{\newunit\usebibmacro{eprint}}} {}% %\newunit\newblock \iftoggle{bbx:url} @@ -2598,6 +2648,17 @@ incollection,proceedings,inproceedings]{number}{% {\ifbibstring{#1}{\bibstring{#1}}{#1}}% } + +% +% 修改series域的输出格式 +% 2019.05.01,v1.0r,byhzz +\renewbibmacro*{series+number}{% + \printfield{series}% + %\setunit*{\addspace}% + %\printfield{number}% + %\newunit + } + %===================================================================== %设置驱动格式 %===================================================================== @@ -2655,7 +2716,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -2702,7 +2763,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} @@ -2740,7 +2801,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 专利文献驱动 @@ -2783,7 +2844,7 @@ incollection,proceedings,inproceedings]{number}{% {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -2830,7 +2891,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -2880,7 +2941,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 论文、手册类型驱动 @@ -2932,7 +2993,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % % 备选类型驱动 @@ -2973,7 +3034,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % @@ -2992,8 +3053,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ \ifnameundef{editor}{}{\newunit}% }{\newunit}%替换下一句 %\newunit\newblock +\iffieldundef{series}{}{\usebibmacro{series+number}\setunit{\addcolon\addspace}}%为处理一些存在series的情况而增加 \usebibmacro{maintitle+booktitle}% - \setunit{\addcolon}\printfield{volume}\printfield{number}%增加卷和册信息 +\iffieldundef{volume}{}{\setunit{\addcolon\addspace}\printfield{volume}}% +\iffieldundef{number}{}{\setunit{\addcolon\addspace}\printfield{number}}%增加卷和册信息 \newunit\newblock% % \usebibmacro{byeditor+others}% % \newunit\newblock @@ -3005,9 +3068,10 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ % \printfield{part}} % {}% % \newunit - \printfield{volumes}% - \newunit\newblock - \usebibmacro{series+number}}% +% \printfield{volumes}% +% \newunit\newblock +% \usebibmacro{series+number} + }% \newunit\newblock %\printfield{note}% %\newunit\newblock @@ -3031,7 +3095,7 @@ test{\iffieldundef{day}} and test{\iffieldundef{endday}} and test{\iffieldundef{ {\usebibmacro{related:init}% \usebibmacro{related}} {}% - \usebibmacro{finentry}} + \usebibmacro{finentry}\usebibmacro{annotation}} % diff --git a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.cbx b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.cbx index 28682a5601c..bf2e591f0c2 100644 --- a/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.cbx +++ b/Master/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015mx.cbx @@ -7,7 +7,7 @@ %% Released under the LaTeX Project Public License v1.3c or later %% --------------------------------------------------------------- %% -\def\versionofgbtstyle{2019/03/28 v1.0r} +\def\versionofgbtstyle{2019/08/28 v1.0s} \ProvidesFile{gb7714-2015mx.cbx}[\versionofgbtstyle biblatex citation style] % @@ -69,20 +69,10 @@ % % 定义upcite命令 % 20180604,v1.0l,hzz +% 20190409,v1.0r,hzz % 方法:对supercite增加[] -\DeclareCiteCommand{\upcite}[\mkbibsuperbracket]% - {\usebibmacro{cite:init}% - \let\multicitedelim=\supercitedelim - \iffieldundef{prenote} - {} - {\BibliographyWarning{Ignoring prenote argument}}% - \iffieldundef{postnote} - {} - {\BibliographyWarning{Ignoring postnote argument}}} - {\usebibmacro{citeindex}% - \usebibmacro{cite:comp}} - {} - {\usebibmacro{cite:dump}} +\newrobustcmd*{\upcite}{% + \cite} % % 重定义parencite命令,以满足标签带页码的国标要求 @@ -164,7 +154,41 @@ \printnames{labelname}\mkbibsuperscript{\mkbibbrackets{\usebibmacro{citeindex}% \usebibmacro{cite}}}} {\multicitedelim} - {\usebibmacro{postnote}} + {\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} %textcite标注命令中的标点设置 @@ -360,7 +384,82 @@ {} {\usebibmacro{postnote}} +% +% 定义\authornumcite命令,输出作者信息,然后在后面带上顺序编码 +% 20180427,v1.0k,增加,hzz +% 20190409,v1.0r,hzz +% 为与顺序编码制兼容,增加了命令,定义与citet相同 +\newbibmacro*{citet}{% + \iffieldundef{shorthand} + {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}} + {\usebibmacro{cite:label}% + \setunit{\printdelim{nonameyeardelim}}% + \usebibmacro{cite:labeldate+extradate}% + \usebibmacro{cite:reinit}} + {\iffieldequals{namehash}{\cbx@lasthash} + {\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND + \(\value{multicitecount}=0\OR\iffieldundef{postnote}\)} + {\setunit{\addcomma}% + \usebibmacro{cite:extradate}} + {\setunit{\compcitedelim}% + \usebibmacro{cite:labeldate+extradate}% + \savefield{labelyear}{\cbx@lastyear}}} + {\printnames{labelname}% + %\setunit{\printdelim{nameyeardelim}}% + (\usebibmacro{cite:labeldate+extradate})% + \savefield{namehash}{\cbx@lasthash}% + \savefield{labelyear}{\cbx@lastyear}}}} + {\usebibmacro{cite:shorthand}% + \usebibmacro{cite:reinit}}% + \setunit{\multicitedelim}} + +\DeclareCiteCommand{\authornumcite}% + {\usebibmacro{cite:init}% + \renewbibmacro*{postnote}{% + \iffieldundef{postnote}% + {}% + {\thefield{postnote}}}% + \usebibmacro{prenote}}% + {\usebibmacro{citeindex}% + \usebibmacro{citet}} + {} + {\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote} + } + +% +% 增加如下多个命令 +% 20190409,v1.0r,hzz +% 方法:利用newcommand或newrobustcmd命令进行定义 +% 注意\citet和\citep命令之所以不用newrobustcmd,是为避免加载natbib模块后产生冲突 + +%同\authornumcite +\DeclareCiteCommand{\citet}% + {\usebibmacro{cite:init}% + \renewbibmacro*{postnote}{% + \iffieldundef{postnote}% + {}% + {\thefield{postnote}}}% + \usebibmacro{prenote}}% + {\usebibmacro{citeindex}% + \usebibmacro{citet}} + {} + {\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote} + } +%同cite +\DeclareCiteCommand{\citep} + {\usebibmacro{cite:init}% + \renewbibmacro*{postnote}{% + \iffieldundef{postnote}% + {}% + {\thefield{postnote}}}% + (\usebibmacro{prenote}}%) + {\usebibmacro{citeindex}% + \usebibmacro{cite}} + {} + {%( + )\mkbibsuperscript{\usebibmacro{postnote}}%\usebibmacro{postnote} + } } |