%!Mode:: "TeX:UTF-8" %!TEX program = xelatex %!BIB program = biber \documentclass[11pt]{article} %用draft选项找到badbox的位置 twoside, \input{biblatex-gb7714-2015-preamble} %宏包和一些格式设置 \usepackage{microtype} %\usepackage[russian,french,english]{babel} %\DefineHyphenationExceptions{english}{conf-erence} \begin{document} \hyphenpenalty=100 %断词阈值,值越大越不容易出现断词 \tolerance=9000 %丑度,10000为最大无溢出盒子,参考the texbook 第6章 %------------------------------------------------------------ % 标题和目录 %------------------------------------------------------------ \pagestyle{plain} \pagenumbering{Roman} \titleformanual{符合GB/T 7714-2015标准的biblatex参考文献样式 \footnote{This Manual was created with biblatex v\versionofbiblatex, last revised at \today;\\% Style Files (gb7714-2015*.*) have version number: \versionofgbtstyle.} \footnote{repository address: \url{https://github.com/hushidong/biblatex-gb7714-2015}}} \authorformanual{胡振震\setcounter{footnote}{0}\footnote{Email: hzzmail@163.com}} \dateformanual{2016-07-01} \titleandauthor \begin{quotation} biblatex-gb7714-2015 宏包是为满足《GB/T 7714-2015~~信息与文献~~参考文献著录规则》要求而开发的 biblatex 样式包。宏包提供两种编制样式: 一、顺序编码制(gb7714-2015);二、著者-出版年制(gb7714-2015ay),能够精确地实现国标提出的著录和标注格式,且具备易用、兼容、灵活等特点,能为国内\LaTeX{}用户提供一个可靠的参考文献生成工具。 %old: %biblatex-gb7714-2015 样式宏包提供了符合《GB/T 7714-2015 信息与文献 参考文献 %著录规则》要求的 biblatex 参考文献样式。分为两种编制方式: 一、顺序编码制;二、著 %者-出版年制。配合 biblatex 宏包使用具有较高的兼容性、易用性和灵活性。宏包提供了 %详细的使用说明,为国内用户生成符合国标的参考文献表提供帮助。 \end{quotation} \phantomsection %\addcontentsline{toc}{section}{目录} \tableofcontents %\renewcommand{\numberline}[1]{#1~} %\phantomsection %\addcontentsline{toc}{section}{示例} \listoffigures \listoftables \listofegcode \newlength{\textparwd} %------------------------------------------------------------ \newpage \pagenumbering{arabic} \pagestyle{fancy} \section{概述} 《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类中的使用问题。 \item 易用性 参考文献是\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的用户也可以直接使用 \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选项,可设置文献表中各条目标题超链接)、 标准标签超链接控制(gblabelref选项,可设置标注中作者标签的超链接)、 作者项处理(gbnoauthor选项,可设置作者缺失时是否填补信息); 著录表格式选项和命令: 标签对齐控制(gbalign选项,可设置左、右、居中、项对齐方式)、 标签格式控制(gbbiblabel选项,可设置标签数字不同的包围符号)、 条目格式控制(gbstyle选项,利用gb7714-2015ms样式可实现中英文献分设不同格式)、 编制样式设置命令(利用\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输出控制、标注和文献表中作者数量控制、文献表拼音或笔画排序等等。 \item 可维护性 宏包的长期使用价值体现在宏包的维护和更新上面,追求宏包具有高的可读性、可理解性、可维护性,可为宏包长期发挥作用提供帮助。由于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高级使用方法和样式包设计实现方法}等,可为用户快速入门和维护者深入理解提供有效帮助。 \end{enumerate} %具体来讲,完成了4个方面的工作: %\begin{enumerate} % \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版本过低}。 % \item 测试了样式文件在book/report/article文档类以及beamer类下的适用性,结果表明均能满足要求。文档详细介绍了样式文件的使用方法和注意事项,说明了各条目类型的著录格式及其在biblatex 中对应信息域的构成,以及域信息的录入方法,并严格按照GB/T 7714-2015 标准测试了各种类型的文献。 %\end{enumerate} \subsection{宏包结构} 宏包文件结构如图\ref{fig:pkg:structure}所示。 \zd{gb7714-2015.bbx/cbx}、\zd{gb7714-2015ay.bbx/cbx}分别为国标参考文献样式2015版本的顺序编码制和著者年份制样式文件。 对应的\zd{gb7714-1987/ay.bbx/cbx}、\zd{gb7714-2005/ay.bbx/cbx}则是1987和2005版本的国标样式。 \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}为转换测试文献表。 \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\footnotesize \begin{tikzpicture}[node distance=1.5cm] %\definecolor{bluea}{rgb}{0.05,0.62,0.94} \ttfamily \node[align=center,fill=gbyellow!15,text width=4cm,inner sep=8pt] (project) {\textcolor{black}{Biblatex-gb7714-2015}}; \node[align=center,below of=project,draw=red,thick,text width=3.5cm] (manual) {\textcolor{black}{Manual of Package}}; \node[align=center,left of=manual,xshift=-3cm,draw=blue,thick,text width=3.5cm] (style) {\textcolor{black}{Style Files}}; \node[align=center,right of=manual,xshift=3cm,draw=orange,thick,text width=3.5cm] (script) {\textcolor{black}{Compiling Scripts}}; \draw[color=cyan,thick] (project.south) -- (manual.north) ; \draw[color=cyan,thick] (style.north) -- ($(style.north)+(0mm,3mm)$) ; \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] (numcbbx) {\tiny \textcolor{black}{gb7715-2015/ay.c/bbx}}; \node[below of=numcbbx,fill=gbgrey!20,yshift=8mm,text width=2cm] (aycbbx) {\tiny \textcolor{black}{gb7715-1987/ay.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-2005/ay.c/bbx}}; \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] (erjcbbx.west) -- ($(erjcbbx.west)+(-3mm,0mm)$) ; %\draw[color=blue,semithick] (mscbx.west) -- ($(mscbx.west)+(-3mm,0mm)$) ; \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}}; \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] (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}}; \node[below of=cpfil,fill=gbblue!10,yshift=8mm,text width=2cm] (cpcln) {\tiny \textcolor{black}{makeclear.bat/sh}}; \node[below of=cpcln,fill=gbblue!10,yshift=8mm,text width=2cm] (plspt) {\tiny \textcolor{black}{gb7714text*.pl/dat}}; \draw[color=orange,semithick] (cpall.west) -- ($(cpall.west)+(-3mm,0mm)$) ; \draw[color=orange,semithick] (cpfil.west) -- ($(cpfil.west)+(-3mm,0mm)$) ; \draw[color=orange,semithick] (cpcln.west) -- ($(cpcln.west)+(-3mm,0mm)$) ; \draw[color=orange,semithick] (plspt.west) -- ($(plspt.west)+(-3mm,0mm)$) ; \draw[color=orange,semithick] ($(plspt.west)+(-3mm,0mm)$) -- ($(plspt.west)+(-3mm,28.1mm)$) ; \end{tikzpicture} %\end{tcolorbox} \caption{宏包文件结构}\label{fig:pkg:structure} \end{figure} \subsection{最小示例} 基于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}{中文版} \footnote{地址:\url{https://github.com/hushidong/biblatex-zh-cn}} 或者 \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}{LaTeX 文档中文参考文献的biblatex解决方案} \footnote{地址:% \url{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}}。 \begin{example}{biblatex参考文献生成的最小工作示例}{code:doc:structrue} \begin{texlist} \documentclass{article}%文档类 %导言区开始: \usepackage{ctex}%加载ctex宏包,中文支持 %加载geometry宏包,定义版面 \usepackage[left=20mm,right=20mm,top=25mm, bottom=15mm]{geometry} %加载hyperref宏包,使用超链接 \usepackage[colorlinks=true,pdfstartview=FitH,linkcolor=blue,anchorcolor=violet,citecolor=magenta]{hyperref} %参考文献工具,加载biblatex宏包,,其后端backend使用biber,%标注(引用)样式citestyle,著录样式bibstyle都采用gb7714-2015样式,两者相同时可以合并为一个选项style \usepackage[backend=biber,style=gb7714-2015]{biblatex} %biblatex宏包的参考文献数据源加载方式 \addbibresource[location=local]{example.bib} \begin{document}%正文区开始: %正文内容,引用参考文献 详见文献\cite{Peebles2001-100-100}\parencite{Babu2014--} 另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014--} %打印参考文献表 \printbibliography[heading=bibliography,title=参考文献] \end{document} \end{texlist} \end{example} \subsection{编译方式} 与基于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}{文档编译命令}{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] \centering %\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] \includegraphics*[page=1,viewport=0cm 0.4cm 14cm 6.1cm,clip=true]{egfigure/egmwe.pdf} %\deflength{\textparwd}{\linewidth-1.5cm} %\begin{minipage}{\textparwd} %\fbox{\parbox{\textparwd}{%\raggedright %详见文献\cite{Peebles2001-100-100}\parencite{Babu2014--} %另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014--} %\renewcommand{\bibfont}{\zihao{-5}} %{ %\hyphenation{conference} %\hyphenpenalty=100 %断词阈值,值越大越不容易出现断词 %\tolerance=100 %丑度,10000为最大无溢出盒子,参考the texbook 第6章 %\printbibliography[heading=subbibliography,title=参考文献] %\par} %}} %\end{minipage} %\end{tcolorbox} \caption{最小工作示例编译生成的PDF文档}\label{fig:eg:ref} \end{figure} \end{refsection} \section{使用说明} \subsection{样式及选项加载} \subsubsection{几种样式} 例\ref{code:doc:structrue}中给出了宏包和样式的基本加载方式,选项的加载也类似。比如: \pdfbookmark[4]{gb7714-2015}{stygb7714-2015} \begin{example}{顺序编码制(gb7714-2015)加载方式}{eg:gb7714numeric} \begin{texlist} %简单方式: \usepackage[backend=biber,style=gb7714-2015]{biblatex} %设置gbalign选项以改变文献表序号标签对齐方式,设置gbpub=false取消缺省出版项自填补信息,比如: \usepackage[backend=biber,style=gb7714-2015,gbalign=gb7714-2015,gbpub=false]{biblatex} %当文档为GBK编码且用pdflatex/latex编译时,应设置选项gbcodegbk=true: \usepackage[backend=biber,style=gb7714-2015,gbcodegbk=true]{biblatex} \end{texlist} \end{example} \pdfbookmark[4]{gb7714-2015ay}{stygb7714-2015ay} \begin{example}{著者-出版年制(gb7714-2015ay)加载方式}{eg:gb7714authoryear} \begin{texlist} %简单方式: \usepackage[backend=biber,style=gb7714-2015ay]{biblatex} %设置gbnoauthor=true以使用佚名或Anon填补缺失的author信息: \usepackage[backend=biber,style=gb7714-2015ay,gbnoauthor=true]{biblatex} \end{texlist} \end{example} \pdfbookmark[4]{gb7714-2015ms}{stygb7714-2015ms} \begin{example}{同一文献表中不同语言区分著录格式的样式(gb7714-2015ms)}{eg:gb7714ms} \begin{texlist} %默认方式,所有文献使用一种著录格式,即GB/T 7714-2015样式 \usepackage[backend=biber,style=gb7714-2015ms]{biblatex} %设置gbstyle=false,则中文文献使用GB/T 7714-2015著录格式,而其它语言文献使用biblatex标准样式 \usepackage[backend=biber,style=gb7714-2015ms,gbstyle=false]{biblatex} \end{texlist} \end{example} 格式效果如图\ref{fig:eg:ms}所示。 \pdfbookmark[4]{gb7714-2015mx}{stygb7714-2015mx} \begin{example}{同一文档中不同文献分节区分不同著录格式的样式(gb7714-2015mx)}{eg:gb7714mx} \begin{texlist} %默认方式使用顺序编码制样式 \usepackage[backend=biber,style=gb7714-2015mx]{biblatex} %如需在某一参考文件分节使用著者年份制样式,比如第2个refsection中使用时,则在导言区设置: \setaystylesection{2} \end{texlist} \end{example} 格式效果如图\ref{fig:eg:mx}所示。 \begin{example}{顺序编码参考文献文本转换为bib文件perl脚本使用方式}{eg:transtobib} \begin{texlist} perl gb7714texttobib.pl in=textfilename out=bibfilename \end{texlist} \end{example} 其中,v1.0m版本增加的gb7714-2015ms样式文件,主要是为了在一个文献表中针对不同语言使用不同多种样式,比如中文文献使用GB/T 7714-2015规定的著录格式,而其它语言文献使用biblatex提供的标准样式。v1.0r版本增加了gb7714-2015mx样式,主要是为了在一个文档中针对不同参考文献分节使用不同的参考文献样式,比如某些节使用著者年份制,某些节使用顺序编码制。尽管这些方式不常用,但偶尔也有需求,所以都做了实现。 另外应东升要求,v1.0r版本增加了chinese-erj样式用于生成经济研究期刊的文献。且在egthesis文件夹内,针对国内一些大学的学位论文文献要求,基于国标样式做了一些定制和测试。 \pdfbookmark[4]{chinese-erj}{chinese-erj} \begin{example}{经济研究期刊文献样式(chinese-erj)}{eg:gbchineseerj} \begin{texlist} %使用经济研究期刊文献样式 \usepackage[backend=biber,style=chinese-erj]{biblatex} \end{texlist} \end{example} 尽管国标1987和2005版本已经过时,但仍然有些地方还在使用,所以1.0z版本增加了gb7714-1987和gb7714-2005两个版本的样式,也分顺序编码和著者年份制: \pdfbookmark[4]{gb7714-1987}{gb7714-1987} \pdfbookmark[4]{gb7714-1987ay}{gb7714-1987ay} \pdfbookmark[4]{gb7714-2005}{gb7714-2005} \pdfbookmark[4]{gb7714-2005ay}{gb7714-2005ay} \begin{example}{1987和2005版的国标样式}{eg:gb87and2005} \begin{texlist} %国标1987顺序编码制 \usepackage[backend=biber,style=gb7714-1987]{biblatex} %国标1987著者年份制 \usepackage[backend=biber,style=gb7714-1987ay]{biblatex} %国标2005顺序编码制 \usepackage[backend=biber,style=gb7714-2005]{biblatex} %国标2005著者年份制 \usepackage[backend=biber,style=gb7714-2005ay]{biblatex} \end{texlist} \end{example} \subsubsection{新增选项}\label{sec:added:opt} 样式包新增了一些选项,用于标签对齐方式、出版项缺省处理、责任者(作者)缺省处理等功能的控制,其使用方式与biblatex宏包选项完全相同: \begin{description} \pdfbookmark[4]{gbalign}{gbalign} \item[gbalign]=\textbf{right},left,center,gb7714-2015,\textbf{gb7714-2015ay}. \hfill default: right for numeric style and gb7714-2015ay for author-year style 为控制文献表数字序号标签增加的选项,用于选择是否生成序号标签及其对齐方式。 \begin{itemize} \item gbalign=right,数字序号标签,是list环境中的标签右对齐,是gb7714-2015样式的默认选项; \item gbalign=left,数字序号标签,是list环境中的标签左对齐; \item gbalign=center,数字序号标签,是list环境中的等宽标签,数字在[]内居中; \item gbalign=gb7714-2015,数字序号标签,是项对齐方式,即段落环境中标签使用原始宽度,标签与条目内容等间距。 \item gbalign=gb7714-2015ay,无数字序号标签,是author-year风格的文献表,是gb7714-2015ay样式的默认选项。 \end{itemize} 该选项对\textbf{著者年份制、顺序编码制均有效}。使用序号标签对齐方式的测试, 数字在标签内居中见: \href{run:./example/opt-gbalign-center.tex}{opt-gbalign-center.tex}, 标签左对齐见: \href{run:./example/opt-gbalign-left.tex}{opt-gbalign-left.tex}, 项对齐(标签与内容等间距)见: \href{run:./example/opt-gbalign-gb.tex}{opt-gbalign-gb.tex}。 效果示例如图\ref{fig:eg:optgbalign}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbalign=right 即右对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-right.pdf}}} \subfigure[\heiti gbalign=left 即左对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-left.pdf}}}\\ \subfigure[\heiti gbalign=center 即中对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-center.pdf}}} \subfigure[\heiti gbalign=gb7714-2015 即项对齐]{\parbox{0.5\linewidth}{\includegraphics*[page=4,viewport=1cm 0cm 8cm 4.5cm,clip=true]{egphoto/opt-gbalign-gb.pdf}}} \end{tcolorbox} \caption{文献表标签对齐选项gbalign效果}\label{fig:eg:optgbalign} \end{figure} \pdfbookmark[4]{gbpub}{gbpub} \item[gbpub]=\textbf{true},false. \hfill default is true 为控制出版信息缺失处理增加的选项。 \begin{itemize} \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}。 效果示例如图\ref{fig:eg:optgbpub}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbpub=false 出版项缺省]{\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0cm 9cm 4.5cm,clip=true]{egphoto/opt-gbpub-false.pdf}}} \subfigure[\heiti gbpub=true 出版项补充]{\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0cm 10cm 4.5cm,clip=true]{egphoto/opt-gbpub-true.pdf}}} \end{tcolorbox} \caption{文献表出版项缺失处理选项gbpub效果}\label{fig:eg:optgbpub} \end{figure} \pdfbookmark[4]{gbnoauthor}{gbnoauthor} \item[gbnoauthor]=true,\textbf{false}. \hfill default is false 为著者年份制增加的选项,用于控制责任者缺失时的处理。 \begin{itemize} \item gbnoauthor=false,当作者信息缺失时默认不做处理,使用标准样式的处理方式; \item gbnoauthor=true,则根据GB/T 7714-2015 的要求进行处理,中文文献使用“佚名”来代替author,英文文献用“Anon”来代替author。 \end{itemize} 测试结果见: \href{run:./example/opt-gbnoauthor-true.tex}{opt-gbnoauthor-true.tex}, \href{run:./example/opt-gbnoauthor-false.tex}{opt-gbnoauthor-false.tex}。 效果示例如图\ref{fig:eg:optgbnoauthor}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbnoauthor=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.4cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbnoauthor-true.pdf}}} \subfigure[\heiti gbnoauthor=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.4cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbnoauthor-false.pdf}}} \end{tcolorbox} \caption{文献表作者缺失处理选项gbnoauthor效果}\label{fig:eg:optgbnoauthor} \end{figure} \pdfbookmark[4]{gbbiblabel}{gbbiblabel} \item[gbbiblabel]=\textbf{bracket},parens,plain,dot,box,circle. \hfill default is bracket 为顺序编码制增加的选项,用于选择参考文献表序号数字的格式。 \begin{itemize} \item gbbiblabel=bracket,序号数字由方括号包围,比如[1]; \item gbbiblabel=parens,序号数字由圆括号包围,比如(1); \item gbbiblabel=dot,序号数字数字后面加点,比如1.; \item gbbiblabel=plain,序号数字无装饰,比如1; \item gbbiblabel=box,序号数字由方框包围,比如\framebox{1}; \item gbbiblabel=circle,序号数字由圆圈包围,比如\textcircled{1}。 \end{itemize} 效果示例如图\ref{fig:eg:optgbbiblabel}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbbiblabel=box] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabela.pdf}}} \subfigure[\heiti gbbiblabel=bracket] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabelb.pdf}}}\\ \subfigure[\heiti gbbiblabel=parens] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabelc.pdf}}} \subfigure[\heiti gbbiblabel=dot] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabeld.pdf}}}\\ \subfigure[\heiti gbbiblabel=plain] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabele.pdf}}} \subfigure[\heiti gbbiblabel=circle] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbbiblabelf.pdf}}}\\ \end{tcolorbox} \caption{文献表标签数字格式选项gbbiblabel效果}\label{fig:eg:optgbbiblabel} \end{figure} \pdfbookmark[4]{gbnamefmt}{gbnamefmt} \item[gbnamefmt]=\textbf{uppercase},lowercase,givenahead,familyahead,pinyin. \hfill default is uppercase 为姓名大小写格式控制增加的选项。 \begin{itemize} \item gbnamefmt=uppercase,使大小写符合GB/T 7714-2015 的要求; \item gbnamefmt=lowercase,大小写由输入信息确定不做改变; \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=quanpin 时,姓名的格式采用另一种常见的中文拼音方式,比如对于 Zhao, Yu Xin 或 Yu Xin Zhao 这个姓名拼音格式化为Zhao Yuxin。 \item gbnamefmt=reverseorder 时,姓名的格式与biblatex 标准样式的family-given/ given-family格式一致,常用于经济学类的文献。 \end{itemize} \bc{注意:还可以利用 nameformat 域为某一具体条目设置该条目的姓名格式,比如:要在一个文献表中实现英文文献是givenahead 格式,而拼音的文献是pinyin风格,那么可以设置拼音文献的 nameformat 域为pinyin,而gbnamefmt设置为givenahead。条目中nameformat 域的局部设置优先于gbnamefmt的全局设置。}\par \emph{注意:使用pinyin选项时,bib文件中文献的作者应给出完整的名而不是缩写,否则出来的效果未必令人满意}。 测试结果见: \href{run:./example/opt-gbnamefmt.tex}{opt-gbnamefmt.tex}, \href{run:./example/opt-gbnamefmt-default.tex}{opt-gbnamefmt-default.tex}。 效果示例如图\ref{fig:eg:optgbnamefmt}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbnamefmt=uppercase] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-a.pdf}}} \subfigure[\heiti gbnamefmt=lowercase] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-b.pdf}}}\\ \subfigure[\heiti gbnamefmt=givenahead] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-c.pdf}}} \subfigure[\heiti gbnamefmt=familyahead] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-d.pdf}}}\\ \subfigure[\heiti gbnamefmt=pinyin] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-e.pdf}}} \subfigure[\heiti gbnamefmt=reverseorder] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbnamefmt-f.pdf}}}\\ \end{tcolorbox} \caption{文献表姓名格式选项gbnamefmt效果}\label{fig:eg:optgbnamefmt} \end{figure} \pdfbookmark[4]{gbtype}{gbtype} \item[gbtype]=\textbf{true},false. \hfill default is true 为控制是否输出题名后面的文献类型和载体标识符而增加的选项。 \begin{itemize} \item gbtype=true,根据GB/T 7714-2015 要求输出标识符,例如“在线的期刊析出文献题名[J/OL]”。 \item gbtype=false,则不输出标识符,例如“在线的期刊析出文献题名”。 \end{itemize} 效果示例如图\ref{fig:eg:optgbtype}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbtype=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbtype-true.pdf}}} \subfigure[\heiti gbtype=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbtype-false.pdf}}} \end{tcolorbox} \caption{文献类型标识符输出控制选项}\label{fig:eg:optgbtype} \end{figure} \pdfbookmark[4]{gbmedium}{gbmedium} \item[gbmedium]=\textbf{true},false. \hfill default is true 为控制是否输出题名后面的文献载体标识符而增加的选项。 \begin{itemize} \item gbmedium=true,根据GB/T 7714-2015 要求输出载体标识符,例如“在线的期刊析出文献题名[J/OL]”。 \item gbmedium=false,则不输出标识符,例如“在线的期刊析出文献题名[J]”。 \end{itemize} 注意:gbtype选项是更大范围的控制,包括了gbmedium。当gbtype=false时,无所谓gbmedium设置什么,因为整个文献类型和载体标识符整个都不显示,而gbmedium只是设置载体标识的。 效果示例如图\ref{fig:eg:optgbmedium}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbmedium=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbmedium-true.pdf}}} \subfigure[\heiti gbmedium=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 8cm 2.8cm,clip=true]{egphoto/opt-gbmedium-false.pdf}}} \end{tcolorbox} \caption{文献载体标识符输出控制选项}\label{fig:eg:optgbmedium} \end{figure} \pdfbookmark[4]{gbfieldtype}{gbfieldtype} \item[gbfieldtype]=true,\textbf{false}. \hfill default is false 为控制是否输出type域而增加的选项。 \begin{itemize} \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的本地化字符串是为了适应某些样式对中英文文献的区别设置。 二是设置type域,比如在bib文件直接设置需要输出的字符,比如type=\{[博士学位论文]\}。 \end{itemize} 效果示例如图\ref{fig:eg:optgbfieldtype}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbfieldtype=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=8cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-gbfieldtype-true.pdf}}} \subfigure[\heiti gbfieldtype=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=8cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-gbfieldtype-false.pdf}}} \end{tcolorbox} \caption{文献表类型(type)域输出控制选项}\label{fig:eg:optgbfieldtype} \end{figure} \pdfbookmark[4]{gbpunctin}{gbpunctin} \item[gbpunctin]=\textbf{true},false. \hfill default is true 为控制inbook,incollection,inproceedings中析出来源文献前的\texttt{//}符号而增加的选项。 \begin{itemize} \item gbpunctin=true,根据GB/T 7714-2015 要求输出\texttt{//}。 \item gbpunctin=false,则输出默认的本地字符串, 在英语中是\texttt{in:},若要完全去掉该符号则可以在导言区增加命令 \lstinline!\DefineBibliographyStrings{english}{in={}}!,\lstinline!\DefineBibliographyStrings{english}{incn={}}!。 之所以用加cn的本地化字符串是为了适应某些样式对中英文文献的区别设置。 \end{itemize} 效果示例如图\ref{fig:eg:optgbpunctin}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbpunctin=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbpunctin-true.pdf}}} \subfigure[\heiti gbpunctin=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbpunctin-false.pdf}}} \end{tcolorbox} \caption{析出文献标识符号控制选项}\label{fig:eg:optgbpunctin} \end{figure} \pdfbookmark[4]{gbtitlelink}{gbtitlelink} \item[gbtitlelink]=true,\textbf{false}. \hfill default is false 为设置标题的超链接增加的选项。 \begin{itemize} \item gbtitlelink=false,即默认不给标题设置超链接。 \item gbtitlelink=true,当文献存在url 域时为文献标题设置超链接。 \end{itemize} 测试文件见: \href{run:example/opt-gbtitlelink.tex}{opt-gbtitlelink.tex}。 效果示例如图\ref{fig:eg:optgbtitlelink}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbtitlelink=true] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbtitlelink-true.pdf}}} \subfigure[\heiti gbtitlelink=false] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gbtitlelink-false.pdf}}} \end{tcolorbox} \caption{文献标题超链接控制选项}\label{fig:eg:optgbtitlelink} \end{figure} \pdfbookmark[4]{gblabelref}{gblabelref} \item[gblabelref]=\textbf{true},false. \hfill default is true 为作者年制设置标注中的作者标签的超链接增加的选项。 \begin{itemize} \item gblabelref=true,即默认给作者标签加上超链接。 \item gblabelref=false,不给作者标签加上超链接。 \end{itemize} 测试文件见: \href{run:egphoto/opt-gblabelref-true.tex}{opt-gblabelref-true.tex}。 \pdfbookmark[4]{gblocal}{gblocal} \item[gblocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015 \item[gbcitelocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015 \item[gbbiblocal]=\textbf{gb7714-2015},chinese,english. \hfill default is gb7714-2015 为设置引用标注标签和文献表中的本地化字符串而增加的选项。其中gbcitelocal 用于控制标注中的本地化字符串,而gbbiblocal用于控制文献表中的本地化字符串,gblocal选项等价于同时设置gbcitelocal 和 gbbiblocal。 配合\lstinline[breaklines=true]!\DefineBibliographyStrings!命令对本地化字符串进行设置可以实现一些特殊的效果。图\ref{fig:content:fmtc}就是该选项的一个使用示例。 \begin{itemize} \item gblocal=gb7714-2015,即默认区分中英文,不同语言采用不同的字符串比如中文使用“等”“和”,而英文使用“et al.”“and”。 \item gblocal=chinese,强制设置所有的本地化字符串使用中文。 \item gblocal=english,强制设置所有的本地化字符串使用英文。 \end{itemize} 测试文件见: \href{run:egfigure/egcontentfmtc.tex}{egcontentfmtc.tex}。 效果示例如图\ref{fig:eg:optgblocal}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \centering \subfigure[\heiti gblocal=gb7714-2015] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gblocal-gb.pdf}}}\hfill \subfigure[\heiti gblocal=chinese] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gblocal-chinese.pdf}}}\\ \subfigure[\heiti gblocal=english] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 2.8cm,clip=true]{egphoto/opt-gblocal-english.pdf}}} \end{tcolorbox} \caption{常用本地化字符串的中英文控制选项}\label{fig:eg:optgblocal} \end{figure} \pdfbookmark[4]{mergedate}{mergedate} \item[mergedate]=true,false,none. 为著者年份制是否在文献表中作者后面输出日期信息而增加了选项值none。 \begin{itemize} \item mergedate=true,著者年份制文献表仅在作者后输出日期 \item mergedate=false,著者年份制文献表在作者后和出版项中输出日期 \item mergedate=none,著者年份制文献表仅在出版项中输出日期。该选项用于满足中科院大学的著者年份制格式要求。 \item no mergedate,即不给出该选项,这是gb7714-2015ay默认的情况,仅在作者后输出日期且已经根据国标格式化。 \end{itemize} 效果示例如图\ref{fig:eg:optmergedate}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti mergedate 不给出] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-a.pdf}}}\\ \subfigure[\heiti mergedate=true] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-b.pdf}}}\\ \subfigure[\heiti mergedate=false] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-c.pdf}}}\\ \subfigure[\heiti mergedate=none] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 14.5cm 2.8cm,clip=true]{egphoto/opt-mergedate-d.pdf}}}\\ \end{tcolorbox} \caption{作者年制文献表年份格式控制选项}\label{fig:eg:optmergedate} \end{figure} \pdfbookmark[4]{gblanorder}{gblanorder} \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。这是一个用分号分隔的语言缩写名构成的字符串,缩写名的前后顺序代表文献表中文种分集的顺序。 \end{itemize} 测试文档见:\href{run:./example/opt-gblanorder.tex}{opt-gblanorder.tex}。 效果示例如图\ref{fig:eg:optgblanorder}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \centering \subfigure[\heiti gblanorder=chineseahead] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 4.0cm,clip=true]{egphoto/opt-gblanorder-chineseahead.pdf}}}\hfill \subfigure[\heiti gblanorder=englishahead] {\parbox{0.45\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 4.0cm,clip=true]{egphoto/opt-gblanorder-englishahead.pdf}}}\\ \subfigure[\heiti gblanorder=cn;en;ru;fr;jp;kr] {\parbox{0.5\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 7.5cm 4.0cm,clip=true]{egphoto/opt-gblanorder-udf.pdf}}} \end{tcolorbox} \caption{多语言文献表语言排序控制选项}\label{fig:eg:optgblanorder} \end{figure} \pdfbookmark[4]{citexref}{citexref} \item[citexref]=\textbf{true},false. \hfill default is true 为顺序编码制样式控制是否使用传统的crossref功能而增加的选项。 \begin{itemize} \item citexref=true,默认启用传统的crossref功能,即一个析出文献中给出crossref或xref 域来指定其析出来源文献,则在著录表中该析出文献的源用其来源文献在著录表中的序号如[1]等来代替。 \item citexref=false,则使用biblatex的默认方式,当存在crossref域时自动将来源文献的信息引入到当前析出文献中,而使用xref域时,则不引入来源文献的信息。 \end{itemize} 测试文档见:\href{run:./egphoto/opt-citexref-true.tex}{opt-citexref-true.tex}、 \href{run:./egphoto/opt-citexref-false.tex}{opt-citexref-false.tex}。 效果示例如图\ref{fig:eg:optcitexref}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti citexref=true] {\parbox{7.5cm}{\includegraphics*[page=1,viewport=0.2cm 0.2cm 7.5cm 8cm,clip=true]{egphoto/opt-citexref-true.pdf}}} \subfigure[\heiti citexref=false] {\parbox{7.5cm}{\includegraphics*[page=1,viewport=0.5cm 0.2cm 8cm 8cm,clip=true]{egphoto/opt-citexref-false.pdf}}} \end{tcolorbox} \caption{控制传统crossref功能的citexref选项}\label{fig:eg:optcitexref} \end{figure} \pdfbookmark[4]{gbannote}{gbannote} \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}。 效果示例如图\ref{fig:eg:optgbannote}所示。 \begin{figure}[!htb] \centering \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=white,colback=white,arc=0pt,%gblabelcolor leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subfigure[\heiti gbannote=true] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 16cm 2.8cm,clip=true]{egphoto/opt-gbannote-true.pdf}}}\\ \subfigure[\heiti gbannote=false] {\parbox{\linewidth}{\includegraphics*[page=1,viewport=1cm 0.2cm 16cm 2.8cm,clip=true]{egphoto/opt-gbannote-false.pdf}}} \end{tcolorbox} \caption{文献的附加注释输出控制选项}\label{fig:eg:optgbannote} \end{figure} \pdfbookmark[4]{gbctexset}{gbctexset} \item[gbctexset]=\textbf{true},false. \hfill default is true 为控制参考文献标题内容的设置方式增加的选项。 \begin{itemize} \item gbctexset=true,参考文献标题内容可以通过重定义 bibname 或 refname 宏设置。比如利用ctex宏包进行设置: \lstinline[breaklines]!\ctexset{bibname={title you want}}! \item gbctexset=false,参考文献标题内容可以通过重定义本地字符串设置,比如: \lstinline[breaklines=true]!\DefineBibliographyStrings{english}{bibliography={title you want}}! \lstinline[breaklines=true]!\DefineBibliographyStrings{english}{references={title you want}}!。 \end{itemize} 当然除此之外,利用 printbibliography 命令的 title 选项进行设置依然是最有效方式,比如: \lstinline[breaklines=true]!\printbibliography[title=title you want]!。 \pdfbookmark[4]{gbcodegbk}{gbcodegbk} \item[gbcodegbk]=true,\textbf{false}. \hfill default is false 为兼容GBK编码的文档增加的选项。 \begin{itemize} \item gbcodegbk=false,即默认是utf-8编码的文档。 \item gbcodegbk=true,为利用pdflatex/latex编译GBK编码文档时使用。 \end{itemize} 当在源文档前面增加 XeTeX 原语:\lstinline!\XeTeXinputencoding "GBK"! 后,GBK编码的文档也可以使用xelatex编译,这时应设置为false或不给出该选项。测试文件见: \href{run:example/codeopt-gbcodegbk.tex}{codeopt-gbcodegbk.tex}。 \pdfbookmark[4]{gbstyle}{gbstyle} \item[gbstyle]=\textbf{true},false. \hfill default is true 为实现多种样式并存而增加的选项。仅用于gb7714-2015ms样式中。 \begin{itemize} \item gbstyle=true,即默认全部文献使用gb7714-2015样式。 \item gbstyle=false,仅中文文献使用gb7714-2015样式,其它语言文献使用biblatex默认样式。 \end{itemize} 该选项的实现原理是把所有国标格式设置局部化到每一条文献打印时,处理时首先判断gbstyle 选项及文献的语言,当满足要求则使用这些局部化格式,否则使用默认的标准样式。这种实现为一篇文档内实现两种样式提供解决思路,尽管目前非中文语言文献的著录格式是标准样式,但只要对标准样式做进一步的修改就可以形成符合某种格式规范的样式,比如像ieee,nature等的样式。因此存在中文使用GB/T 7714-2015 著录格式,而英文文献使用ieee等著录格式的可能性。测试文档见:\href{run:./example/opt-gbstyle.tex}{opt-gbstyle.tex}。 \pdfbookmark[4]{gbfootbib}{gbfootbib} \item[gbfootbib]=true,\textbf{false}. \hfill default is false 为实现国标样式的脚注文献表格式而增加的选项。 \begin{itemize} \item gbfootbib=true,即默认做处理使脚注文献表满足国标要求。 \item gbfootbib=false,不做任何附加处理。 \end{itemize} 该选项的实现主要是两个方面: 一是实现国标要求的脚注标签和段落格式,利用对 \verb|\@makefnmark|重定义实现正文脚注标签带圈上标, 利用对\verb|\@makefntext|做patch局部化重设\verb|\@makefnmark|使得脚注中的标签不上标,利用对latex核心代码和hyperref宏包代码的重定义实现悬挂缩进的格式。 二是实现国标要求的相同文献不输出内容,而是用标签代替,比如同\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: {\small \vspace{1ex} \centering \fbox{ \setlength{\footbibmargin}{2em}%脚注的段落左侧缩进距离 \setlength{\footbiblabelsep}{1em}%脚注中标记号与脚注段落的间距 \begin{minipage}{0.75\linewidth} 脚注\footnote{中文脚注中文脚注中文脚注中文脚注中文脚注中文脚注中文脚注中文脚注中文脚注中文脚注} 脚注\footnote{English footnote English footnote English footnote English footnote English footnote} \end{minipage}} \vspace{1ex} } 需要注意的是,由于图表标题(caption)环境的特殊性,在其中使用footfullcite可能无法得到正常的脚注文献表。而通常的方法是利用footnotemark和footnotetext来实现脚注,对于文献表也是类似的,因此也不能简单使用footfullcite命令,而是要使用footnotemark和footnotetext以及fullcite命令配合来实现, 比如: \begin{example}{图表标题中产生的脚注文献表}{eg:footbib:incaption} \begin{texlist} \begin{figure}[h] \centering \fbox{abc} \caption{示意图见文献\protect\footnotemark} \end{figure} \footnotetext{\fullcite{bibtex-key}} \end{texlist} \end{example} 但要注意由于hyperref本身的原因,这种方式产生的脚注文献表可能没有超链接功能。 对于表格环境中的引用无法产生脚注文献表的问题,可以将其置于小页环境中实现或者采用前述图标标题中的类似处理方式。 注意:latex核心代码参考latex.ltx,而hyperref代码参考hyperref.STY。 \pdfbookmark[4]{gbfnperpage}{gbfnperpage} \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[gbstrict]=\textbf{true},false. \hfill default is true 为避免输出bib文件中多余的域信息而增加选项,目的是为了兼容一些bib文件,因为某些bst样式文件进行中英文判断需要在bib文件中增加类似language这样的域作为支撑,而其中某些域在标准的biblatex样式文件中是默认输出的。 \begin{itemize} \item gbstrict=true,即默认不输出。 \item gbstrict=false,需要还原标准样式的输出情况时使用。 \end{itemize} \item[gbfieldstd]=true,\textbf{false}. \hfill default is false 为控制一些域如标题,网址,卷域的格式而增加选项。目的是使用一些标准样式的处理来增加格式多样性。 \begin{itemize} \item gbfieldstd=false,即默认使用GB/T 7714-2015要求的样式。 \item gbfieldstd=true,即还原使用标准样式的格式,比如使用引号,字体,加引导词等。当然要调整这些格式也可采用biblatex提供的更为直接的设置域格式的方式。 \end{itemize} \end{description} \subsubsection{兼容的标准选项}\label{sec:old:opt} 绝大部分biblatex标准样式选项可与gb7714-2015样式联合使用,下面给出一些经过兼容性测试的选项说明。需要注意的是:使用gb7714-2015样式时(即style=gb7714-2015),backend选择应指定为biber,还有一些选项已经在样式设计中固定,如果要严格使用国标样式,一般不应做修改,比如sorting,maxnames,minnames,date,useprefix,giveninits等,但如果用户有自己的其它需求,则可按需修改。 \begin{description} \item[url]=true, false. \hfill default: true 该选项控制是否打印 url 域并获取日期。该选项只影响 url 信息是可选的那些条目类型。而 @online 条目的 url 域总是会打印出来。它是导言区选项,与样式相关,gb7714-2015样式做了特别支持,可以兼容使用。 \item[giveninits]=true, false. \hfill default: true 启用该选项时姓名中的名部分会用首字母表示。 \item[uniquelist]=true, false, minyear \hfill default: minyear 该选项用于著者-出版年制样式,用于正文中引用(标注)标签的作者列表控制(目的是消除歧义)。当uniquelist=true时,自动利用扩展作者姓名列表长度的方式消除labelname 列表的歧义; 当=false 时则禁用扩展,标签仅使用一个作者,消除歧义通过跟在年份后面的字母实现; 默认使用minyear,即当被截短的作者姓名列表存在歧义时,只有当年份相同,才会扩展列表长度以消除歧义。 注意当使用uniquelist=false后标签只有一个作者,但文中可能有同姓作者的文献,这时根据uniquename选项的设置,biblatex会使用姓名的其它部分比如名来消除歧义,但如果想强制要求仅用姓作为文中的标注标签,那么可以设置uniquename=false,但此时标注是可能存在歧义的。 \item[maxnames]=整数 \hfill default: 3 影响所有名称列表(\bibfield{author}、\bibfield{editor} 等)的阈值。如果某个列表超过了该阈值,即,它包含的姓名数量超过 \prm{integer},那么就会根据 \opt{minnames} 选项的设置进行自动截断。\opt{maxnames} 是设置 \opt{maxbibnames} 和 \opt{maxcitenames} 两个选项的支配选项。 \item[minnames]=整数 \hfill default: 3 影响所有名称列表(\bibfield{author}、\bibfield{editor} 等)的限制值。如果某个列表包含的姓名数量超过 \prm{integer},那么就会自动截断至\opt{minnames}个姓名。\prm{minnames} 的值必须小于或等于 \prm{maxnames}。\opt{minnames} 是设置 \opt{minbibnames} 和 \opt{mincitenames} 两个选项的支配选项。 \item[maxbibnames]=整数 \hfill default: \prm{maxnames} 类似于 \opt{maxnames} 但只影响参考文献表。 \item[minbibnames]=整数 \hfill default: \prm{minnames} 类似于 \opt{minnames} 但只影响参考文献表。 \item[maxcitenames]=整数 \hfill default: \prm{maxnames} 类似于 \opt{maxnames} 但只影响正文中的标注(引用)。 \item[mincitenames]=整数 \hfill default: \prm{minnames} 类似于 \opt{minnames} 但只影响正文中的标注(引用)。 \item[hyperref]=true, false, auto. \hfill default: auto 是否将引用和后向引用转化为可点击的超链接。这是宏包的载入时选项,与样式无关,自然可以使用。 \item[backref]=true, false. \hfill default: false 是否在文献中打印出反向引用。这是宏包的载入时选项,与样式无关,自然可以使用。 \item[refsection]=none, part, chapter, section, subsection. \hfill default: none 该选项自动在文档分段处(例如一章或一节)开始一个新的参考文献分节。是宏包的载入时选项,与样式无关,自然可以使用。需要注意与titlesec宏包联用时,该选项会失效。 \item[refsegment]=none, part, chapter, section, subsection. \hfill default: none 类似于refsection选项,但开始的是一个新的参考文献片段。 \item[citereset]=none, part, chapter, section, subsection. \hfill default: none 该选项在文档分段处(例如一章或一节)自动执行citereset 命令。 \item[labeldate]=year, short, long, terse, comp, ymd, iso. \hfill default: year 类似于 date 选项,但控制的是由DeclareLabeldate 选择的日期域的格式。 \item[doi]=true,false. \hfill default: true 该选项控制是否打印 \bibfield{doi} 域。 \item[isbn]=true,false. \hfill default: true 该选项控制是否打印 \bibfield{isbn}\slash \bibfield{issn}\slash \bibfield{isrn} 等域。 \item[sortlocale]=auto, locale. \hfill default: auto 该选项控制排序的本地化调整方案。对于英文文献,该选项不需要设置。对于中文文献当有按拼音或笔划等进行排序的需求时,可以设置相应的本地化调整方案。主要的调整方案有: \begin{itemize} \item \verb|sortlocale=auto| 或者不设置该选项,为unicode编码顺序 \item \verb|sortlocale=zh|,为unicode编码顺序 \item \verb|sortlocale=zh__pinyin|,为拼音顺序 \item \verb|sortlocale=zh__big5han|,为big5 编码顺序 \item \verb|sortlocale=zh__gb2312han|,为GB-2312 顺序 \item \verb|sortlocale=zh__stroke|,为笔划数顺序 \item \verb|sortlocale=zh__zhuyin|,为注音顺序 \end{itemize} \item[language]=autobib, autocite, auto, \prm{language}. \hfill default: autobib 详细说明见biblatex手册。 \item[autolang]=none, hyphen, other, other*, \prm{langname}. \hfill default: 结合langid/langidopts域,结合babel/polyglossia宏包,可以对西文做基于条目的本地化处理。详细说明见biblatex 手册。 \item[sortcites]=true, false. \hfill default: false 详细说明见biblatex手册。 \item[autocite]=plain, inline, footnote, superscript. \hfill default: plain 详细说明见biblatex手册。 \item[block]=none, space, par, nbpar, ragged. \hfill default: none 详细说明见biblatex手册。 \item[indexing]=true, false, cite, bib. \hfill default: false 详细说明见biblatex手册。 \item[其它]=下面还有很多选项,有些是宏包载入时选项,与样式无关,一般可以使用,但笔者没有做测试,各位用户可以测试使用。选项的作用可以参考biblatex 使用手册,以及文博与笔者翻译的中文版。 \begin{itemize} \item related=true, false. default: true \item defernumbers=true, false default: false \item maxitems=integer default: 3 \item minitems=integer default: 1 \item autopunct=true, false default: true \item clearlang=true, false default: true \item notetype=foot+end, footonly, endonly default: foot+end \item backrefstyle=none, three, two, two+, three+, all+ default: three \item backrefsetstyle=setonly, memonly, setormem, setandmem, memandset, setplusmem default: setonly \item loadfiles=true, false default: false \item abbreviate=true, false default: true \item julian=true, false default: false \item punctfont=true, false default: false \item arxiv=abs, ps, pdf, format default: abs \item mincrossrefs=integer default: 2 \item minxrefs=integer default: 2 \item eprint=true, false default: true \end{itemize} \end{description} \subsection{文献引用及标注格式}\label{sec:cbx:usage} 要生成参考文献,第一步就是在正文中引用参考文献。正文中因引用文献所形成的标注的格式称为参考文献标注样式,也称引用样式或引用标签样式,分为两类: 顺序编码制和著者-出版年(作者年)制。引用文献的基本命令是\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}。 %各命令使用方式如例\ref{eg:citefornumeric}所示。 %各引用命令的效果如图\ref{fig: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} \centering \fixtabcaption{顺序编码制常用命令示例}\label{tab:cite:num} \footnotesize \begin{tabular}{l@{\quad$\Rightarrow$\quad}ll} \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} & 不带页码上标 \\ \verb|\parencite{Miroslav2004--}| & \parencite{Miroslav2004--} & 不带页码非上标 \\ \verb|\cite[49]{蔡敏2006--}| & \cite[49]{蔡敏2006--} & 带页码上标 \\ \verb|\pagescite{Peebles2001-100-100}| & \pagescite{Peebles2001-100-100} & 自动页码上标 \\ \verb|\pagescite[150]{Peebles2001-100-100}| & \pagescite[150]{Peebles2001-100-100} & 带页码的上标 \\ \verb|\parencite[49]{Miroslav2004--}| & \parencite[49]{Miroslav2004--} & 带页码非上标 \\ \verb|\textcite{Miroslav2004--}| & \textcite{Miroslav2004--} & 提供主语非上标标签 \\ \verb|\authornumcite{Miroslav2004--}| & \authornumcite{Miroslav2004--} & 提供主语上标标签 \\ \verb|\citeauthor{蔡敏2006--}\cite{蔡敏2006--}| & \citeauthor{蔡敏2006--}\cite{蔡敏2006--} & 提供主语上标标签 \\ \verb|\footfullcite{赵学功2001--}| & \footfullcite{赵学功2001--} & 脚注方式文献条目 \\ 引用单篇文献: & 文献\cite{Peebles2001-100-100} & 国标示例 \\ 同一处引用两篇文献: & 文献\cite{Peebles2001-100-100,Miroslav2004--} & 国标示例\\ 同一处引用多篇文献: & 文献\cite{蔡敏2006--,Miroslav2004--,赵学功2001--} & 国标示例:三篇以上压缩\\ 同一处引用多篇文献: & 文献\citec{蔡敏2006--,Miroslav2004--,赵学功2001--} & 另一种形式的压缩\\ 多次引用同一作者的同一文献: & 文献\cite[20-22]{Miroslav2004--}, 文献\cite[55-60]{Miroslav2004--} & 国标示例 \\ 多次引用同一作者的同一文献: & 文献\footfullcite[20-22]{Miroslav2004--}, 文献\footfullcite[55-60]{Miroslav2004--} & 国标示例:脚注方式 \\ \hline \end{tabular} \end{refsection} \end{minipage} %\end{table} \begin{table}[!htb] \centering \caption{著者年份制常用命令示例}\label{tab:cite:authoryear} \hspace{-1cm}{\parbox{\linewidth}{\includegraphics[scale=0.95,page=2]{egciteaytab.pdf}}} \end{table} %\begin{example}{著者-出版年制引用命令}{eg:citeforauthoryear} %\begin{texlist} %不带页码的引用: % \cite{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} %著者-出版年制文中已有作者只需给出年份和页码的引用: % 见赵学功\yearpagescite[][205]{赵学功2001--}和Miroslav\yearpagescite[][15]{Miroslav2004--} %著者-出版年制文中已有作者只需给出年份的引用,三种方式: % 见赵学功\yearcite{赵学功2001--} % 见赵学功(\cite*{赵学功2001--}) % 见赵学功(\citeyear{赵学功2001--})\par %著者-出版年制文中无作者需要标注命令给出作者作为主语的引用: % 见\textcite{赵学功2001--}\par %在页脚中引用和打印文献表: % \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{egciteay.pdf} %} %\end{tcolorbox} %\caption{著者-出版年制标注格式}\label{fig:cite:ay} %\end{figure} \subsubsection{标注格式局部调整} 标注在同一个文档中是可能存在不同格式需求的,比如:有的地方需要用上标,有的地方需要用行内,有的地方需要给出作者,有的地方需要给出页码等。一般情况下,不同标注格式可以通过使用不同的标注命令来得到,比如上一小节给出的大量不同的命令,不同命令能够产生独特的标注标签。 除了利用命令来调整标注格式外,还有更多的方法来进行局部格式调整。这利用了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 顺序编码制样式} 中各条参考文献条目以数字序号按引用先后顺序组织。 著录格式中序号格式见\ref{sec:bib:serialno}节, 各类型文献条目的著录格式见\ref{sec:numeric:data}节, 参考文献条目中各信息域及其录入方式见\ref{sec:bib:bibtex}节。 %著者-出版年制的参考文献样式则基于标准样式authoryear \paragraph{\heiti 著者-出版年制样式} 中各条参考文献条目以作者-年为标签以一定的顺序排列。著者-出版年制的著录格式与顺序编码制基本相同,差别仅在于把年份提前到作者后面作为条目的标签。数据源bib文件中各条目的数据录入与顺序编码制完全一致。 \qd{著者-出版年制有文献按文种集中的要求,因此gb7714-2015ay样式设计了gblanorder选项来配合专用的排序模板,可以方便地设置不同文种的先后顺序,默认文种顺序是中日韩英法俄。如需其他顺序则可利用gblanorder选项重设,设置方法见第\ref{sec:added:opt}节。此外,由于排序需要根据文献所使用的语言判断,因此使用language域,该域由biblatex-gb7714-2015宏包自动判断处理,一般不需过多关注,如果当语言判断出现问题,可以在bib文件中手动设置language域为正确的语言,比如chinese,japanese,english,french等。} %前一段为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{段落格式控制} \paragraph{\heiti 文献表字体、颜色、间距、缩进控制} 为方便用户改变文献表段落格式、内容字体和颜色等,在 biblatex 提供的 \verb|\bibfont| 命令基础上, 增加了\verb|\bibauthorfont|、\verb|\bibtitlefont|、\verb|\bibpubfont| 等命令用于控制文献不同部分的格式,比如作者,标题,出版项等。 增加了尺寸\verb|\bibitemindent| 用于控制参考文献条目在文献表中的缩进, 其意义与 list 环境中 \verb|\itemindent| 相同。 用法具体见例\ref{eg:biblist:fontset},结果如图\ref{fig:par:fmt}所示。 测试用例见\href{run:example/testfontinbiblio.tex}{testfontinbiblio.tex}。 \begin{example}{文献表段落格式、字体、颜色}{eg:biblist:fontset} \begin{texlist} % 文献项之间的间隔符控制(比如是否换行) % 选项 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字体 \def\UrlFont{\ttfamily} %\urlstyle{sf} %\def\UrlFont{\bfseries} \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} \includegraphics[width=\textparwd]{egparfmt.pdf} \end{tcolorbox} \caption{文献表段落格式示例}\label{fig:par:fmt} \end{figure} 文献表各条目之间的竖直间距控制如例\ref{eg:biblist:vspace}所示: \begin{example}{文献表竖直间距控制}{eg:biblist:vspace} \begin{texlist} % 竖直间距的控制 \setlength{\bibitemsep}{0ex} \setlength{\bibnamesep}{0ex} \setlength{\bibinitsep}{0ex} \end{texlist} \end{example} 文献表的水平缩进控制,两种编制方式下是不同的。对于著者-出版年制文献表,bibitemindent表示 \emph{一条文献中第一行相对后面各行的缩进},bibhang 表示\emph{页边到文献各行起始位置的距离}。因此要调整缩进就是要设置这两尺寸。 对于顺序编码制文献表,由于存在数字标签,且其宽度与参考文献数量相关,所以这个宽度是动态变的,无能提前设定的,而是在文献表生成时给出,所以调整缩进需要在文献表输出环境中调整。由于顺序编码样式使用了两类输出环境,所以需要根据设定的选项区分处理: 一是采用list环境的文献表,即设置gbalign=left、right、center时(即顺序编码标签是左对齐、右对齐和居中对齐的情况),在重定义的文献表环境中,调整bibitemindent和bibhang两个尺寸,默认情况下bibhang+labelnumberwidth的长度是页边到各行起始位置的距离。当采用某些字体导致计算计算的标签宽度不足时,可以设置biblabelextend尺寸,来增加labelnumberwidth的宽度,避免缩进格式产生问题,默认情况下biblabelextend尺寸为0pt。 二是采用正常段落环境的文献表,即设置gbalign=gb7714-2015时(即项对齐情况,就是各条文献是自身对齐的情况),在重定义的命令中通过调整lengthid尺寸来设置\emph{每条参考文献第二行开始的缩进距离}。 调整方法见例\ref{eg:biblist:hspace}。 除了使用这种段落形式的文献表外,也有需求是要把文献表放到一个表格里面这样的需求,要求每一条文献占据表格的一行,这也是能实现的,但本宏包就不去实现了,具体有需求的用户可以在github 的biblatex下搜索tabular或者在tex.stackexchange上搜索biblatex tabular,已经有具体的实现了,这里不再赘述。 \begin{example}{文献表水平缩进控制}{eg:biblist:hspace} \begin{texlist} % 著者-出版年制文献表缩进控制 \setlength{\bibitemindent}{0em} % bibitemindent表示一条文献中第一行相对后面各行的缩进 \setlength{\bibhang}{0pt} % 著者-出版年制中 bibhang 表示的各行起始位置到页边的距离 % 顺序编码制文献表缩进控制 % 调整顺序标签与文献内容的间距 \setlength{\biblabelsep}{2mm} % 调整各条文献的缩进: %-1-----gbalign=left、right、center时,重定义 bibenvironment \defbibenvironment{bibliography}%修改对齐环境-调整缩进 {\list {\printtext[labelnumberwidth]{% \printfield{labelprefix}% \printfield{labelnumber}}} {% %这里是所做的调整,通过设置\bibitemindent,\bibhang调整缩进 \addtolength{\bibitemindent}{\labelnumberwidth}% \addtolength{\bibitemindent}{\biblabelsep}% \addtolength{\bibhang}{-\labelnumberwidth} % \addtolength{\bibhang}{-\biblabelsep}% % %以下是默认的设置 \setlength{\labelwidth}{\labelnumberwidth}% \setlength{\labelsep}{\biblabelsep}% \setlength{\leftmargin}{\bibhang}% \addtolength{\leftmargin}{\labelnumberwidth}% \setlength{\itemindent}{\bibitemindent}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} %-2-----gbalign=gb7714-2015时,重定义 \itemcmd命令 \renewcommand{\itemcmd}{%%修改对齐环境-调整缩进 \settowidth{\lengthid}{\mkgbnumlabel{\printfield{labelnumber}}} % %%这里是所做的调整,以下两句通过调整\lengthid来调整缩进 \setlength{\lengthid}{0pt} \addtolength{\lengthid}{-\biblabelsep} % %如下是默认设置 \addtolength{\lengthid}{\biblabelsep} \setlength{\lengthlw}{\textwidth} \addtolength{\lengthlw}{-\lengthid} \addvspace{\bibitemsep}%恢复\bibitemsep的作用 %\parshape 2 0em \textwidth \lengthid \lengthlw \hangindent\lengthid \mkgbnumlabel{\printfield{labelnumber}}% \hspace{\biblabelsep}} \end{texlist} \end{example} 文献表中有时需要调整标点为中文的全角标点,可以通过不同机制下的标点设置来调整。 调整方式如例\ref{eg:biblist:separator}所示。有时在本地化字符串中也可以实现标点调整,比如and,in等本地化字符串。有时在域格式中也可能出现标点调整,比如title域格式。而且因为不同语言的处理,可能内部也存在标点的调整。具体情况是比较复杂的,这里不再一一列举,一些修改示例可以参考: \href{run:./chinese-erj.bbx}{chinese-erj.bbx}, \href{run:./egthesis/thesis-uibe-numeric.tex}{thesis-uibe-numeric.tex}。具体的标点命令的意义详见biblatex手册。 \begin{example}{文献表常见标点控制}{eg:biblist:separator} \begin{texlist} % 标点类型的控制(注意:全局字体能控制标点的字体) %文献表各条文献中各单元间隔标点设置(与异步标点机制相关的) \renewcommand*{\newunitpunct}{,}%\addcomma\space %, \renewcommand*{\finentrypunct}{\iffieldequalstr{userd}{chinese}{。}{\adddot}} %姓名格式相关的标点 \DeclareDelimFormat{nameyeardelim}{,}%\addcomma\addspace %\DeclareDelimFormat[bib,biblist]{nameyeardelim}{,}%\addcomma\addspace \DeclareDelimFormat{multinamedelim}{,}%[bib,biblist] \DeclareDelimFormat{finalnamedelim}{,} \DeclareDelimFormat{andothersdelim}{,} \renewcommand*{\revsdnamepunct}{,}% \end{texlist} \end{example} \subsubsection{条目著录格式控制}\label{sec:entry:fmt} 文献表输出的格式即参考文献著录样式,除了整体的段落格式外,还有条目内部的格式可以控制,条目内部的这些项称为著录项,这些著录项的格式通常可由选项控制。可用选项除了biblatex 提供的标准选项外,也包括样式包提供的选项。 图\ref{fig:content:fmta}、\ref{fig:content:fmtb}、\ref{fig:content:fmtc}给出了一些选项设置后的格式控制效果, 更多选项的详细说明见第\ref{sec:added:opt}、\ref{sec:old:opt}小节。 图\ref{fig:content:fmta}给出了选项设置为 style=gb7714-2015, gbnamefmt=givenahead, gbpub=false, gbbiblabel=dot, gbtitlelink=true 时的文献表,可以看到作者姓名、序号标签、标题超链接的设置。 \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} \includegraphics[width=\textparwd]{egcontentfmt.pdf} \end{tcolorbox} \caption{文献表条目著录格式示例一}\label{fig:content:fmta} \end{figure} 图\ref{fig:content:fmtb}给出了选项设置为 style=gb7714-2015ms, gbnamefmt=lowercase, gbpub=false, gbtitlelink=true, gbstyle=false, sorting=nyt 时的文献表,可以看到作者姓名、标题超链接、中英文不同文献格式、文献排序的设置。 \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} \includegraphics[width=\textparwd]{egcontentfmtb.pdf} \end{tcolorbox} \caption{文献表条目著录格式示例二}\label{fig:content:fmtb} \end{figure} 图\ref{fig:content:fmtc}为选项和本地化字符串如例\ref{eg:localstr:diff}设置时的引用标注和文献表,注意其中引用标注和文献表中的不同本地化字符串输出效果,引用标注中英文作者和中文作者缩略词的不同。这是中科院大学资环类学位论文的要求格式,可以看到尽管有些特殊,但通过选项设置和本地化字符串设置也能实现。 \begin{example}{著者-出版年制标注和文献表不同本地字符串效果}{eg:localstr:diff} \begin{texlist} \usepackage[backend=biber,style=gb7714-2015ay,gbnamefmt=lowercase,maxcitenames=2,mincitenames=1, sortcites=false,sorting=gbynta]{biblatex} \renewcommand{\bibauthorfont}{\color{violet}}% \DefineBibliographyStrings{english}{ andincite = {和}, andincitecn = {和}, andothersincite = {等{\adddot}},%adddot才能避开标点追踪 andothersincitecn = {等}, } \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} \includegraphics[width=\textparwd]{egcontentfmtc.pdf} \end{tcolorbox} \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-2015及 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-2015和gb7741-2015ay样式提供了4个排序模板: \begin{description} \item[gb7714-2015] 以语言、作者、年份、标题、升序排列 \item[gbnytd] 以语言、作者、年份、标题、降序排列 \item[gbynta] 以语言、年份、作者、标题、升序排列 \item[gbyntd] 以语言、年份、作者、标题、降序排列 \end{description} 在使用gb7714-2015和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]。 需要注意的是:手动设置拼音是一个不轻松的活,所以我们可以使用自动设置拼音的工具,详见 \href{https://www.latexstudio.net/index/details/index/ids/1546}{为中文参考文献自动添加排序用的拼音信息域},\href{https://github.com/hushidong/biblatex-map}{bibmap宏包}。 其中,与文种相关的排序域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}给出了这样一个示例,其中不同语言的文献使用了不同的本地化字符串。 \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} \includegraphics[width=\textparwd]{egmultilan.pdf} \end{tcolorbox} \caption{多语言混合文献表}\label{fig:multi:lan} \end{figure} \begin{enumerate} \item 多语言混合文献表首先要解决的是多语言文献的字符显示问题。使用xelatex编译时,由于其原生支持unicode的特性,在tex文档内显示多语言字符比较容易实现,正确显示的关键在于合适的字体设置。一般情况下西文如英/法/俄可以利用fontspec宏包选择合适的字体来解决,而中/日/韩语可以利用ctex宏包可以解决,但仍需注意要正确的显示中/日/韩语也需要字体支持,windows下常见的中文字体可能不支持日/韩字符,而思源宋体是一个不错的选择。本文的多语言示例编译均采用思源宋体常规(SourceHanSerifSC-Regular.otf), 请从其\href{https://github.com/adobe-fonts/source-han-serif/tree/release}{官网}下载。 \item 除此之外,还要解决另外一个重要问题是本地化字符串问题。因为对于不同语言的文献,通常要求使用符合自身语言规范的本地化字符串。而且不同的语言,本地化字符串并不是一一对应的,特别是东亚语言,因此要考虑一个全面的解决方案: 对于西方语言, biblatex基于 babel/polyglossia宏包,结合autolang/language等选项和langid/langidopt等域,提供了一套多语言解决方案。 \begin{itemize} \item 首先,对不同语言的文献,设置langid域为文献所用语言,比如英文文献则设置langid域等于english,俄文文献则设置等于russian。 \item 其次,在biblatex加载时设置 autolang选项,等于none则不做多语言处理,等于hyphen则仅做不同语言的断词处理,等于other或other*则处理不同语言的断词和本地化字符串,other*选项等价于使用babel的otherlanguage*环境,与other的差别在于不忽略环境后的空白。从实践看,当要使用条目集时,使用other*选项更为合适。 \item 再次,还可设置language选项,用于区分是否在标注或文献表中采用多语言处理方案。当language选项等于autobib时仅在文献表中自动切换语言,等于 autocite 时仅在标注中自动切换语言,等于 auto 时则在文献表和标注中同时切换。 \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{itemize} 本样式对中日韩英俄法六种语言混合文献表做了测试,详见: \href{run:example/opt-eg-multilan.tex}{opt-eg-multilan}, \href{run:example/opt-autolang-multilan.tex}{opt-autolang-multilan}。 \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中的韩中两种语言对照文献见\href{run:./stdGBT7714-2015.pdf}{stdGBT7714-2015文件}第4页。 \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} \includegraphics[width=\textparwd]{egdoublelan.pdf} \end{tcolorbox} \caption{双语言对照文献表示例一}\label{fig:double:lana} \end{figure} \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} \includegraphics[width=\textparwd]{egdoublelanb.pdf} \end{tcolorbox} \caption{双语言对照文献表示例二}\label{fig:double:lanb} \end{figure} \paragraph{\heiti 利用条目集类型满足双语文献要求} 设置条目集类型(set)有静态和动态两种方法。其中动态方法使用更为方便,只需在写文档时利用\verb|\defbibentryset|将两条文献不同语言的文献设置成一个set条目,然后引用set的bibtex键。比如: \begin{example}{设置set条目集用于双语文献的动态方法}{eg:setforbilangentry} \begin{texlist} \defbibentryset{bilangyi2013}{易仕和2013--,Yi2013--} 专著,双语文献引用\cite{bilangyi2013} \end{texlist} \end{example} 测试见文档\href{run:example/testallformat.tex}{testallformat.tex}。 \bc{需要注意:由于biblatex的升级,在著者-出版年制中应用动态条目集方法产生的标注标签存在版本差异。 biblatex v3.7及之前版本,因为 set 带有第一个子条目的信息,所以会自动输出子条目信息作为标签。 而biblatex v3.8及以上版本中,因为set条目类型除了子条目关键词信息外,并无其他信息,所以set的标注标签会存在问题。这个问题可以通过设置一个指定格式和内容且中间无空格无英文逗号的关键字来弥补,比如“易仕和,等,2013”,这时因为没有空格和英文逗号,该关键字会以一个整体字符串处理,而不会被分开解析,因此可以用它来作为标签}。比如: \begin{example}{设置set条目集用于双语文献动态方法}{eg:setforbilangentry} \begin{texlist} \defbibentryset{易仕和,等,2013}{易仕和2013--,Yi2013--} 专著,双语文献引用\cite{易仕和,等,2013} \end{texlist} \end{example} \bc{在biblatex3.8以上版本中,例{eg:setforbilangentry}的作者年制标注标签会是“易仕和,等,2013”,注意到其中的逗号是中文全角逗号,与其它标签的英文逗号的存在差异,正因为此,该方法并没有完美解决问题。} \bc{由于顺序编码制使用的时数字标签,前述的问题对于顺序编码制并不存在。而作者年制中的标签问题,可以采用下面的静态条目集方法和关联(related)方法来解决。} 静态方法是在bib源文件中给出条目集(set)并使用biber后端进行解析,条目的域信息定义方法如下: %当使用bibtex后端时,则需要进一步设置,具体参考biblatex宏包说明文档。 \begin{example}{设置set条目集用于双语文献的静态方法}{eg:set:static} \begin{texlist} @Set{set1, entryset = {key1,key2,key3}, } %如果要达到上例动态设置set一样的结果,在bib文件中静态设置set条目如下: @Set{bilangyi2013, entryset = {易仕和2013--,Yi2013--}, } \end{texlist} \end{example} 然而例\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} %在bib文件中静态设置set条目如下,其中: %手动设置userb域用于解决排序问题 %手动设置label域用于解决标注标签问题 @Set{bilangyi2013, entryset = {易仕和2013--,Yi2013--}, label={易仕和, 等, 2013}, language={chinese} } \end{texlist} \end{example} \bc{注意:由于动态set条目集设置等价于使用了 nocite命令,因此只要定义了动态条目集的文献都会出现在文献表中,因此如果不引用相应的文献,那么无需对其定义动态条目集}。 \bc{注意:biblatex提供的mcite模块提供了mcite类命令,其等价于定义动态条目集,因此除了使用上述defbibentryset方法外,也可以使用mcite类命令}。 \bc{注意:条目集方法本质上是将多个文献条目集合成一个组一起在文献表中输出,且仅有一个标注标签。无论是否是多语言对照都是可以使用的,这里的多语言对照实现只是条目集方法的一个具体应用}。 \paragraph{\heiti 利用条目关联满足双语文献要求} 除上述给出的条目集方案外,关联条目方法则是另一种可行方案\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及以上版本。 \begin{example}{在bib文件中正确设置关联条目的静态方法}{eg:related:staticright} \begin{texlist} %在bib文件中静态设置条目如下,注意: %易仕和2013--条目中增加了related域用于关联其对应的英文条目Yi2013-- @Book{易仕和2013--, Title = {超声速和高超声速喷管设计}, Address = {北京}, Author = {易仕和 and 赵玉新 and 何霖 and 张敏莉}, Publisher = {国防工业出版社}, Year = {2013} related = {Yi2013--} } @Book{Yi2013--, Title = {Supersonic and hypersonic nozzle design}, Address = {BeiJing}, Author = {Yi, S H and Zhao, Y X and He, L and Zhang, M L}, Publisher = {National Defense Industry Press}, Year = {2013} } \end{texlist} \end{example} 动态方法利用动态数据修改自动添加related域,避免对bib文件做直接修改。本样式中对该过程进行了封装,定义一个新的命令\verb|\defdoublelangentry|,例如: \begin{example}{设置关联条目的动态方法}{eg:related:dynamic} \begin{texlist} \defdoublelangentry{易仕和2013--}{Yi2013--} \end{texlist} \end{example} 使用该命令后,可以引用主条目“易仕和2013--”生成双语文献。但要注意由于\verb|\DeclareStyleSourcemap|命令只能在导言区中使用,因此\verb|\defdoublelangentry|命令也只能出现在导言区中,这也是相比条目集动态方法的唯一遗憾。 实现的具体细节见 \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}% {biblatex-solution-to-latex-bibliography}。 双语对照文献的两种动态方法基于set和related的方法测试,参见: \href{run:./example/opt-eg-authoryear.tex}{opt-eg-authoryear.tex}。 \subsection{多样式支持} \subsubsection{一个文献表采用多种著录样式} 一个文献表采用多种著录样式主要针对的是在一个tex文档生成参考文献表中,不同语言的文献采用不同的著录格式,比如中文文献采用GB/T 7714-2015 样式,而西文文献采用西文习惯的样式。这种情况目前由gb7714-2015ms样式解决,选项加载方式如例\ref{eg:gb7714ms}所示。 目前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,% width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \centering \deflength{\textparwd}{\linewidth-1cm} \includegraphics[width=\textparwd]{egmsinabiblio.pdf} \end{tcolorbox} \caption{一个文献表采用多种著录样式示例}\label{fig:eg:ms} \end{figure} 测试见文档\href{run:egfigure/egmsinabiblio.tex}{egmsinabiblio.tex}。 \subsubsection{不同参考文献分节采用不同著录样式} 不同参考文献分节采用不同著录样式主要针对一个tex文档中存在多个参考文献表,且各参考文献表的格式需求不同。比如一些学位论文写作中,正文的参考文献表为著者-出版年制,而附录中的作者论著情况则用顺序编码制。这种情况目前由gb7714-2015mx样式解决,选项加载方式如例\ref{eg:gb7714mx}所示。 gb7714-2015mx样式默认使用顺序编码样式,当要使用著者-出版年制样式时,则利用命令 \verb|\setaystylesection|进行设置,该命令有一个必选参数,表示采用著者-出版年制样式的参考文献节的编号。注意该命令一次只能设置一个文献节,因此设置多个参考文献节时,需要多次使用\verb|\setaystylesection|命令,比如节2节4都采用著者-出版年制样式,那么设置\verb|\setaystylesection{2}\setaystylesection{4}|。 目前gb7714-2015mx样式中的两种格式:顺序编码和著者-出版年制样式默认都是符合GB/T 7714-2015 标准的,如果需要做格式的修改,则完全可以通过自定义实现。图\ref{fig:eg:ms}展示了3个参考文献分节的文档,其中节2使用了著者-出版年制。 \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} \includegraphics[width=\textparwd]{egmsindfrefsec.pdf} \end{tcolorbox} \caption{不同参考文献分节采用不同著录样式}\label{fig:eg:mx} \end{figure} 测试见文档\href{run:egfigure/egmsindfrefsec.tex}{egmsindfrefsec.tex}。 \subsubsection{完全自定义的条目内容样式} 完全自定义的条目内容样式,针对不完全和不规范的文献表输出,主要用于输出部分参考文献信息。这时可以采用文献缩略信息打印的方法实现。具体的实现方法见\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节中大量使用这种方式。 \subsection{未分类说明} \subsubsection{biblatex 的优点} 基于 biblatex 宏包的参考文献生成方法,具有很多明显的优点,读者可以从 \href{https://github.com/CTeX-org/lshort-cn}{lshort-cn}、 \href{https://github.com/latexstudio/LaTeXFAQ-cn}{LatexFAQ-CN}、 \href{https://tex.stackexchange.com}{tex.stackexchange.com} 了解到更多。 笔者从最初开始学习latex时利用 thebibliography 环境生成参考文献,到对格式化有更多需求后开始寻求利用参考文献宏包,再到最后选择使用biblatex宏包,在不断实践过程中越发感觉到biblatex 在生成参考文献方面的巨大潜力。以笔者的观点其优点主要包括: %[也由于对bibtex语言不熟悉,偷懒不想学$( \hat{} \bot \hat{} )$] \begin{enumerate} \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} %使用够方便 \item 划分自由。在一个文档中可以生成任意数量的文献表,无需用将分档划分成不同的文件来辅助生成分章参考文献。利用refsection 和refsegment方便划分,具有嵌套、遍历等多种灵活处理方式。 %划分很自由,划分无限制 \item 定制方便。使用是tex命令(宏)控制格式,定制和修改相比 bibtex 语言更为容易。全面提供适用于自然学科、人文学科的多种不同类型的参考文献样式,参考、引用、移植、定制均很便捷。 %定制很容易 %处理无限制,支持更全面 \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})等。其中引用文献数据的bib输出常用于从一个大的bib文件中导出仅有引用文献信息的小的bib文件。 \begin{example}{输出引用文献数据时的biber选项}{eg:bibercmd:outbibfile} \begin{texlist} biber jobname --output-format=bibtex \end{texlist} \end{example} \end{enumerate} %上述这些优点也是笔者决定编写符合GB/T 7714-2015标准的参考文献样式文件的原因之一。 \subsubsection{数据库bib文件和文献条目}\label{sec:bib:bibtex} 参考文献数据以bibtex格式保存在bib文件中。生成参考文献除tex源文档外,还需创建参考文献数据源文件即bib文件。bib文件数据源准备完成后,在加载biblatex宏包后,使用addbibresource命令将其导入。\bc{注意:数据源可以加载多个,比如多个章节的参考文献放在不同的bib文件中,那么全部加载进来即可}。 bib文件中的参考文献信息是以条目形式组织,一篇文献创建一条记录即一个参考文献条目,一个条目由若干数据域(有的文档也称为字段)构成。GB/T 7714-2015标准中的文献类型与本样式中条目类型对应关系 如表\ref{tab:entrytypes}所示, 各类条目具体的著录格式详见\ref{sec:numeric:data}节。 \begin{table}[!htb] \centering \caption{参考文献常用条目类型}\label{tab:entrytypes} \footnotesize \begin{tabular}{clc} \hline GB/T 7714-2015中的条目类型 & biblatex中的条目类型 & 类型标识代码\\ \hline 专著& book & M\\ 标准& standard/book or inbook with note=standard& S\\ 专著中的析出文献& inbook & M\\ 连续出版物& periodical& J\\ 连续出版物的析出文献& article& J\\ 报纸析出的文献& newspaper/article with note=news& N\\ 专利& patent& P\\ 电子资源或电子公告& online/www/electronic& EB\\ 会议录或会议文集& proceedings& C\\ 会议文集中析出的文献& inproceedings/conference& C\\ 汇编或论文集& collection& G\\ 汇编或论文集析出中的文献& incollection& G\\ 学位论文& thesis/mastersthesis/phdthesis& D\\ 报告& report/techreport& R\\ 手册& manual& A\\ 档案& archive/manual& A\\ 数据库& database& DB\\ 数据集& dataset& DS\\ 软件& software& CP\\ 舆图& map& CM\\ 未出版物& unpublished& Z\\ 其它& misc& Z\\ \hline \end{tabular} \end{table} 组成各个条目的不同数据域(字段)保存有参考文献的各部分信息,比如作者、标题、出版项、日期等,这些信息称为著录项目,录入文献信息时,各著录项目信息应录入到对应的数据域中。GB/T 7714-2015标准中的数据域与biblatex中的域的对应关系如表\ref{tab:entryfields}所示。 \begin{table}[!htb] \centering \caption{参考文献常用信息域(字段)}\label{tab:entryfields} \footnotesize \begin{tabular}{cl} \hline GB/T 7714-2015中的文献著录项目 & biblatex中的域\\ \hline 责任者 & author/editor\\ 题名 & title\\ 译者 & translator\\ 版本(主要用于出版物) & edition\\ 版本(主要用于软件和手册) & version\\ 出版地 & location/address\\ 出版者 & publisher\\ 出版者(大学和研究所) & institution/school\\ 出版者(会议主办方、手册和电子资源出品方) & organization\\ 日期 & date\\ 日期(不可解析的日期) & year\\ 页码 & pages\\ 析出文献来源的责任者 & bookauthor/editor\\ 析出文献来源的标题 & booktitle\\ 连续出版物题名(期刊、报纸) & journal/journaltitle\\ 期刊的卷 & volume\\ 期刊的期/专利号等 & number\\ 获取和访问路径 & url\\ 引用日期 & urldate\\ 数字对象标识符 & doi\\ 杂项 & note\\ 文献类型标识符 & usera/mark\\ 文献载体标识符 & medium\\ \hline \end{tabular} \end{table} 需要注意的是, \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} 各个数据域的录入应符合bib文件规范。需要注意: \bc{1. 有时直接从网络获取的参考文献信息中可能带有一些特殊字符比如\%,\&等,这些字符在 tex 中通常需要做转义处理,本样式中对像title,journal,abstract,howpublished等常见域中出现的特殊字符已经做了转义,但也存在一些域没有考虑,所以当出现错误时,用户需要手动处理,例如把\%改为\textbackslash \%。} \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 命令定义,比如:} \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 对于英文作者,单个姓名有两种biblatex可以解析的输入方式: \textcircled{1}prefix lastname, suffix, firstname middlename \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} 对于中文的机构作者,不需要解析,直接输入机构名,比如: 中国企业投资协会 and 台湾并购与私募股权协会 and 汇盈国际投资集团 对于英文的机构作者,由于机构名可能存在空格或and等字符串,因此最好用\{\}包起来,避免解析出错,比如: \{International Federation of Library Association and Institutions\} and NASA \item[title] 直接输入需要打印的内容,subtitle或titleaddon域类似 \item[translator] 与author域类似,只是输入的是译者 \item[edition] 直接输入整数,或者需要打印的内容 \item[location] 直接输入需要打印的地址内容,而address域在biblatex中作为location别名,表示相同的内容。 \item[publisher] 直接输入需要打印的出版者内容,institution,organization域类似 \item[date] 日期可以格式化输入,格式化输入biblatex 会自动解析,如果无法解析会忽略该域。格式化的输入方式是: 年-月-日/年-月-日,数字格式为:yyyy-mm-dd/yyyy-mm-dd 比如: 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。 \item[year] year域的输入与date域类似,为了兼容一些老的bib文件,把year 直接用map 转换成date,所以在本样式的使用中输入year域与date域相同。 但year与date存在一定的差异,即year可以处理仅有年的信息或者需要原样打印的内容。比如: 1881(清光绪七年)。 这一信息如果放在date中会被自动忽略,但放到year域中,本样式会先将其拷贝到date中进行解析,无法解析的话,date域忽略,但year 信息仍然存在,并原样打印。 \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 相同。 \item[editor] editor有时直接作为文献的责任者,比如连续出版物(periodical)类型。有时因为author缺失,editor被当做责任者。还有的时候bookauthor缺失,editor也被当做bookauthor,即析出文献来源文献的责任者。editor的输入方式与author相同。 \item[editortype] editortype作为editor的类型或角色说明域,可以用来在editor后面加上适当的表示角色的字符串,比如“主编”或“eds.”等。常见的角色包括:editor、compiler、founder、continuator, redactor、reviser 和collaborator等。当然这是西文环境中的情况,足够细分,中文情况下可以不用这么细分,而仅对editortype={editor}时的本地化字符串做设置,当然如果一篇文档中存在多种不同的角色editor文献的情况,也需要做细分。 \item[booktitle] 用于析出文献时,作为析出文献来源文献的题名,其输入方式与title 相同。booktitleaddon域输入方式也相同。 \item[volume] 连续出版物的卷,格式化输入用整数,当有范围时中间用短横线连接,比如:1-4。当无法解析时,输入内容被认为是需要完整打印的内容。 \item[number] 连续出版物的期或报纸的版次,输入与volume类似。或者是专利等的号时,直接输入需要打印的内容。 \item[journal] 用于连续出版物析出文献,表示连续出版物的题名,比如期刊、报纸的提名,直接输入需要打印的内容。journaltitle,journalsubtitle域类似处理。 \item[version] 用于report和manual的版本信息,直接输入需要打印的内容。 \item[mark/usera] 不用输入,自动处理。也可以输入文献类型标识符比如M, J, DB, CP等。 \item[medium] 不用输入,自动处理。也可以输入文献载体标识符比如MT, DK, CD, OL 等。 \item[language] 不用输入,自动处理。也可以输入语言类型比如english, russian, french, japnese, korean, chinese等。主要用来标识文献的语言类型,用法详见\ref{sec:multilan:combine}节。 \item[langid] 不用输入,自动处理。也可以输入语言名比如english, russian, french 等,中日韩语一般用english。主要用于配合babel等宏包进行文献的本地化字符串处理,用法详见\ref{sec:multilan:combine}节。 \item[nameformat] 不用输入。当需要调整当前条目的作者姓名的格式时,可以输入格式名:uppercase, lowercase, givenahead, familyahead, pinyin 等。详见\ref{sec:added:opt}节。 \item[namefmtid] 不用输入。 \end{description} 除了上述输入内容要求外,GB/T 7714-2015还有对数字、字母大小写等有一些格式要求,这些细节需要注意,请参考: \begin{itemize} \item 数字:\ref{sec:fmt:number}节 \item 字母大小写:\ref{sec:fmt:lettercase}节 \item 卷和期:\ref{sec:fmt:volnum}节 \item 版次:\ref{sec:fmt:edition}节 \item 出版项:\ref{sec:fmt:pubitem}节 \item 页码:\ref{sec:fmt:pages}节 \end{itemize} \subsubsection{其它注意事项}\label{sec:pkg:hints} \begin{enumerate} \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}| , 同时\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 当bibtex键中含有中文的时候,texlive2015中的biblatex3.0版的对参考文献条目的超链接会出现问题,而texlive2016中的biblatex3.4或以后的版本则没有问题。 \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.],尽管中文没有示例,这里也考虑类似的格式,比如: [出版地不详 : 出版者不详]。 %,这种形式本样式没有给出,而直接用两者分开的形式,[S.l.] : [s.n.] %事实上这里作者认为没有必要把s.l.和s.n. 合起来,不仅与缺省两者之一的情况不统一,样式处理起来也增加不必要的麻烦。 \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 本文档根据GB/T 7714-2015提供的参考文献表著录格式示例做了测试和验证,详见第\ref{sec:eg:gb77142015}节。 % 测试系统环境为: % \begin{itemize} % \item windows7x86+texlive 2014,采用xelatex编译; % % \item windows7x64+texlive 2015,采用xelatex编译; % % \item 虚拟机xp+texlive 2016,采用xelatex编译; % % \item Deepin linux-x64v15.3+texlive 2016,采用xelatex编译。 % % \item windows7x64+texlive 2017,采用xelatex编译; % \end{itemize} \end{enumerate} \section{参考文献著录格式示例}\label{sec:eg:gb77142015} %\subsection{GB/T 7714-2015 中的著录标准和顺序编码制示例} %\includepdf[pages={1-5}]{egfigure/eggbcitation.pdf} %\subsection{GB/T 7714-2015 中的著者年份制示例} %\includepdf[pages={1-2}]{egfigure/eggbcitationay.pdf} %\subsection{GB/T 7714-2015 中的附录参考文献示例} %\includepdf[pages={1-4}]{egfigure/eggbbiblio.pdf} \subsection{GB/T 7714-2015 标准示例} 详见文档:\href{run:./stdGBT7714-2015.pdf}{stdGBT7714-2015.pdf} \subsection{多语言支持相关测试示例} 详见文档:\href{run:./stdgbT7714-2015lan.pdf}{stdgbT7714-2015lan.pdf} \subsection{国内一些大学学位论文文献格式相关测试示例} 详见文档:\href{run:./stdgbT7714-2015thesis.pdf}{stdgbT7714-2015thesis.pdf} \subsection{更多示例} \begin{itemize} \item 示例: beamer类中的参考文献示例 \item 示例: 专著book和专著中的析出文献inbook及标准standard文献 \item 示例: 连续出版物periodical和连续出版物中的析出文献article \item 示例: 电子资源或在线资源online \item 示例: 学位论文thesis、专利文献patent \item 示例: 报告report、手册manual和档案、未出版物unpublished \item 示例: 会议文集proceedings和会议文集中析出的文献inproceedings \item 示例: 汇编collection和汇编中的析出文献incollection \item 示例: online条目仅存url信息 \item 示例: 传统和新增条目类型的兼容性 \item 示例: 中英文判断信息中存在编组时的处理 \item 示例: 处理参考文献信息中\&等特殊字符 \item 示例: 处理著者-出版年制article中卷信息缺省的标点 \item 示例: 标题中有\textbackslash LaTeX\{\}等名称时的情况 \end{itemize} beamer类示例,参见: \href{run:./example/egbeamer.tex}{顺序编码制}; \href{run:./example/egbeameray.tex}{著者-出版年制}。 其它示例,参见: \href{run:./example/testallformat.tex}{testallformat.tex}。 详见文档: \href{run:./example/stdGBT7714-2015eg.pdf}{stdGBT7714-2015eg.pdf}, \href{run:./example/stdgbT7714-2015fmt.pdf}{stdgbT7714-2015fmt.pdf}。 \section{GB/T 7714-2015 标准说明与实现}\label{sec:gbt:std} \subsection{顺序编码制} \subsubsection{参考文献表}\label{sec:bib:serialno} GB/T 7714-2015规定采用顺序编码制组织参考文献时,各篇文献应按正文部分标注的序号依次列出。具体参考GB/T 7714-2015 第9.1节。 \subsubsection{文献标注法} 标注则根据在正文中引用的先后顺序连续编码,将序号置于方括号内。 同一处引用多篇文献,各篇序号间用逗号隔开,遇连续序号,起讫序号用短横线连接。 多次引用同一著者的同一文献时,可在序号的方括号外著录该文献引文页码,这一要求与引用(标注)样式无关,需要作者在写文档时使用相应的引用命令并在需要时输入页码信息。针对这一要求,在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}所示: \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} \includegraphics[width=\textparwd]{egfootstyle.pdf} \end{tcolorbox} \caption{顺序编码制的脚注方式}\label{fig:numeric:footnote} \end{figure} \subsection{著者-出版年制} \subsubsection{参考文献表} GB/T 7714-2015规定采用著者-出版年制组织时,各篇文献首先按文种组织,可分为中文,日文,西文,俄文和其他文种等部分;然后按照著者字顺和出版年排列。中文文献可以按著者汉语拼音字顺排序,也可按笔画顺序排列。具体参考GB/T 7714-2015第9.2节。 %(因为需要根据语言进行划分,所以语言(language)域对于录入文献来说可能是必要的,因为作者的测试仅涉及中英文两种语言,没有遇到需要language域的情况。) \subsubsection{文献标注法} 各篇文献的标注内容由著者姓(lastname/family)和出版年构成,并置于()内。对于使用汉字的语言来说,整个姓名都是 lastname/family 所以标注的是全名。机构团体名也整体标注。 若正文中已有著者姓名,则()内只标注出版年,这一点样式文件无法判断,只能是文档作者自身把握,当然本样式提供了标签只有年份、附加年份和页码信息的引用命令yearpagescite/yearcite,方便文档作者使用,使用方法详见第\ref{sec:cbx:usage}节。当然文档作者还可以使用textcite命令同时给出满足格式要求的作者和年份信息,本样式已做支持。 引用多个著者的文献时,对西文只需标注第一著者的姓(而在参考文献列表中的作者按最大数量三个处理,这与顺序编码制一致,参考GB/T 7714-2015第8.1.2节),其后附“et al.”,对于中文著者,标注第一著者的姓名,其后附“等”。姓名与“et al.”“等”间留适当空隙。 \bc{注意到在GB/T 7714-2015第10.2.1节给出的例子中作者姓的大小写格式与参考文献表中的要求是不同的,这说明标注中的作者姓名是由写文档的作者来决定的,因此本样式文件原样输出bib源文件中作者姓的大小格式}。 引用同一著者同一年出版的多篇文献时,出版年后应采用小写字符a,b,c等区别。 多次引用同一著者的同一文献,在正常标注外,需在()外以角标形式著录引文页码,这一问题样式文件无法判断,只能提供可以形成该格式的引用命令,供文档作者使用,因此提供pagescite命令,使用方法详见第\ref{sec:cbx:usage}节。 标注要求具体参考GB/T 7714-2015第10.2节。 \qd{一般情况下,当文献作者缺省时,著者-出版年制就没有作者可以用,因此文献题名用来生成标签,这样会导致文献表中文献题名后的文献类型标识/文献载体标识消失(这是因为题名用于生成标签后,题名域会被清除,自然也就不输出题名相关的信息了,见后面的示例文献“\hyperlink{entrystdwithoutauthor}{Information and documentation-the Dublin core metadata element set}”)。此时可以用佚名替代缺省作者的方式避免这个问题,即可以使用样式文件提供的选项gbnoauthor=true,一旦设置该选项为true,则缺省的作者会根据文献语种填充为佚名或Anon。默认情况下,不进行这种处理,即相当于设置选项gbnoauthor=false。而顺序编码制因为标签是数字序号,所以不存在这个问题。} %本样式文件默认情况下采用佚名方式,如果不需要使用佚名,那么需要在样式文件中注释掉一段代码,这段代码在本文档末尾2016-11-14的更新历史中有说明,见\pageref{up:20161114}页。} \subsection{各类文献在biblatex中对应的条目和域}\label{sec:numeric:data} biblatex-gb7714-2015宏包设计的重要原则是要符合GB/T 7714-2015标准。因此根据GB/T 7714-2015 的要求并结合biblatex的条目类型和数据域,对各类参考文献做如下考虑: \subsubsection{专著/book} \begin{refentry}{}{} 专著对应的biblatex的entrytype为:book,文献类型标识用M表示。 \bibliofmt{其著录格式为}(参考GB/T 7714-2015第4.1节):\\ 主要责任者.题名:其他题名信息[文献类型标识/文献载体标识].其他责任者.版本项.出版地:出版者,出版年:引文页码[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{专著/book条目的域格式}{eg:bookfieldfmt} \begin{texlist} author.title[usera].translator.edition.location:publisher,date或year:pages[urldate].url.doi \end{texlist} \end{example} 其中标题相关的附加信息除了可以直接在title域中录入外,还可以在subtitle或titleaddon域中添加,后面出现的booktitle,journaltitle,也有类似情况,可以在booktitleaddon或者journalsubtitle中附加信息。其中出版地用location域表示,也可以用传统的address表示,biblatex将address作为location的别名处理,使用两者中的任何一个都可以表示出版地信息。\bc{特别强调: usera域不用录入,该域内容由bbx样式文件根据条目类型自动处理得到。} \qd{由于biblatex不支持standard条目类型,所以“标准”类型可以用book或inbook替代,但使用note域等于standard作为一个区分,当note域数据存在且内容等于standard时,就将其作为“标准”文献进行处理,其文献类型标识用S表示。这里为什么使用note域而不是type域和keywords域,是因为考虑到note域一般情况下没有什么特殊意义,使用它不会导致冲突,而type域在biblatex标准样式中没有被book和article条目类型当作支持的域,对于支持该域的条目比如thesis,type域又有特殊的意义,是用来区分master和doctor的,而keywords域倒是可以使用,只是该域一般很少在jabref之类软件的默认域中,需要进一步设置,而且可能带来不通用的问题。} \subsubsection{标准/standard}\label{sec:standard} “标准”(standard)作为一种文献条目类型biblatex并不支持,因此直接利用book或inbook类型加note域等于standard代替。当然为了兼容传统BIBTeX格式存在standard类型的情况,也可以直接使用standard类型。 为此本样式对standard条目类型做了特别支持。著录格式的处理原理与前一节所述相同,只是利用动态数据将standard类型转换为book/inbook类型。在bib文件中直接使用standard类型时注意使用其它biblatex样式时可能存在移植障碍,因为其它样式可能不支持standard类型。 \begin{refentry}{}{} 标准对应的biblatex的entrytype为: standard。文献类型标识用S表示。 \bibliofmt{其著录格式为}(与book和inbook类型类似,其中圆括号内是与inbook类似时存在的内容,此外当出版地和出版者不存在时直接忽略,这是与book和inbook不同的地方。):\\ 主要责任者.文献题名[文献类型标识/文献载体标识].其他责任者(//所在文献集主要责任者.文献集题名:其他题名信息).版本项.出版地:出版者,出版年:文献的页码[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{标准/standard条目的域格式}{eg:standardfieldfmt} \begin{texlist} author.title[usera](//bookauthor.booktitle).edition.location:publisher,date或year:pages[urldate].url.doi \end{texlist} \end{example} \emph{需要注意的是: 根据GB/T 7714-2015标准第19页的标准文献示例,当标准不存在出版项时,直接省略}。 \subsubsection{专著中的析出文献/inbook} \begin{refentry}{}{} 专著中的析出文献对应的biblatex的entrytype为: inbook。文献类型标识用M表示。 \bibliofmt{其著录格式为}(参考GB/T 7714-2015第4.2节):\\ 析出文献主要责任者.析出文献题名[文献类型标识/文献载体标识].析出文献其他责任者//专著主要责任者.专著题名:其他题名信息.版本项.出版地:出版者,出版年:析出文献的页码[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{专著析出文献/inbook条目的域格式}{eg:inbookfieldfmt} \begin{texlist} author.title[usera]//bookauthor.booktitle.edition.location:publisher,date或year:pages[urldate].url.doi \end{texlist} \end{example} \subsubsection{连续出版物/periodical} \begin{refentry}{}{} 连续出版物对应的biblatex的entrytype为: periodical。文献类型标识用J表示。 \bibliofmt{其著录格式为}(参考GB/T 7714-2015第4.3节):\\ 主要责任者.题名:其他题名信息[文献类型标识/文献载体标识].年,卷(期)-年,卷(期).出版地:出版者,出版年[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的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 \end{texlist} \end{example} 其中连续出版物的出版者用institution表示。 \qd{因为连续出版物可能用到两个日期,两个卷,两个期,所以录入数据时需要特别处理。不需要录入endyear等信息,只需要在到year或date域录入两个日期,由biber自动解析,由于一个日期内部的年月日之间是用-进行分隔,因此两个日期之间用/分隔。而卷和期由于可能有合订模式,且合订卷期之间用/分隔(参考GB/T 7714-2015第8.8.3节),因此如果需要解析有起止范围的卷和期,录入到volume和number域的信息中起止值之间应用-分隔。} \subsubsection{连续出版物的析出文献/article} \begin{refentry}{}{}%[break at=0.5cm/0pt] 连续出版物的析出文献对应的biblatex的entrytype为: article。文献类型标识用J表示。 \bibliofmt{其著录格式为}(参考GB/T 7714-2015第4.4节):\\ 析出文献主要责任者.析出文献题名[文献类型标识/文献载体标识].连续出版物题名:其他题名信息,年,卷(期):页码[引用日期].获取和访问路径.数字对象唯一标识符. 注意:从GB/T 7714-2015第4.4.2节的示例可以看到对于带网址的article在引用日期前可以加上修改更新日期。 \end{refentry} 其对应的biblatex数据域为: \begin{example}{连续出版物析出文献/article条目的域格式}{eg:articlefieldfmt} \begin{texlist} author.title[usera].journaltitle或journal,year,volume(number):pages[urldate].url.doi \end{texlist} \end{example} \qd{由于biblatex不支持newspaper 条目类型,所以条目类型报纸析出的文献用article表示,但使用note域等于news作为一个区分,当note域数据存在且内容等于news时,就将其作为报纸的析出文献进行处理。报纸文献类型标识用N表示,报纸的版次用number域描述。} \subsubsection{报纸析出的文献/newspaper}\label{sec:standard} biblatex没有将报纸的析出文献(newspaper)作为一种文献条目类型,因此可以直接利用article类型加note域等于news代替,或者也可以直接使用newspaper类型。为方便使用考虑,本样式增加了对新条目类型newspaper的支持,这种支持通过类似于standard类型的方式实现,没有对数据模型进行改动或增加,而完全利用动态数据修改将newspaper类型转换为article类型。在bib文件中直接使用newspaper类型时需要注意可能存在移植障碍,因为其它biblatex样式可能不支持newspaper类型。 \begin{refentry}{}{} 报纸析出的文献对应一个新的entrytype为: newspaper。文献类型标识用N表示。 \bibliofmt{其著录格式为}(类似于article):\\ 析出文献主要责任者.析出文献题名[文献类型标识/文献载体标识].报纸题名:其他题名信息,日期(版号)[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{报纸析出的文献/newspaper条目的域格式}{eg:newspaperfieldfmt} \begin{texlist} author.title[usera].journaltitle或journal,date(number)[urldate].url.doi \end{texlist} \end{example} \qd{newspaper类型与article类型的差别主要是(1)文献标识码不是J而是N;(2)报纸的日期需要表示到日。(3)报纸不需要修改和更新日期。注意:报纸名应用journal或journaltitle域录入,与article保持一致。} \subsubsection{专利/patent} \begin{refentry}{}{}%[break at=3cm/0pt] 专利文献对应的biblatex的entrytype为: patent。文献类型标识用P表示。 \bibliofmt{其著录格式为}(参考GB/T 7714-2015第4.5节):\\ 专利申请者或所有者.专利题名:专利号[文献类型标识/文献载体标识].公告日期或公开日期[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{专利文献/patent条目的域格式}{eg:patentfieldfmt} \begin{texlist} author.title:number[usera].date或year[urldate].url.doi \end{texlist} \end{example} \qd{需要注意:公告日期或公开日期需要表示到日。} \subsubsection{电子资源/online} \begin{refentry}{}{}%[break at=0.4cm/0pt] 电子资源对应的biblatex的entrytype为: online或electronic或者www。文献类型标识用EB表示。 \bc{(注意: biblatex将electronic或www作为online条目类型的别名,对于标准样式来说这两者出现在bib文件中等同于online,但这种等同标准样式是在驱动层进行处理的,而gb7714-2015样式还需要处理文献类型标识,本样式文件做了进一步支持。因此bib文件中也可以直接使用electronic和www。)} \bibliofmt{其著录格式为}(参考GB/T 7714-2015第4.6节):\\ 主要责任者.题名:其他题名信息[文献类型标识/文献载体标识].出版地:出版者,出版年:引文页码(更新或修改日期)[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{电子资源/online/electronic/www条目的域格式}{eg:onlinefieldfmt} \begin{texlist} author.title[usera].organization/instiution,date或year:pages(date/enddate/eventdate)[urldate].url.doi \end{texlist} \end{example} \qd{尽管GB/T 7714-2015中给出的著录格式包含出版地和出版者,但通常情况下具有出版地和出版者的文献会归类到其它条目类型中,至于存在的url信息,只要标识文献载体即可,即一般情况下(出版地:出版者,出版年:引文页码)这些信息很少出现在online[EB]条目中。因此默认情况下,gb7714-2015样式只处理出现organization或instiution中的出版者信息,此外用date表示更新或修改日期,urldate表示引用(访问)日期。如果出现复杂情况,更新或修改日期还可以利用enddate/eventdate表示。注意修改日期需要表示到日} 以上是GB/T 7714-2015直接给出著录格式的条目类型,还有一些类型并没有给出具体格式,但在例子中也有所体现,本样式文件根据这些例子,给出了著录格式。 \subsubsection{汇编或论文集/collection} \begin{refentry}{}{} 汇编文献对应的biblatex的entrytype为:collection。文献类型标识用G表示。 \bibliofmt{其著录格式为} 采用与book一致的格式。 \end{refentry} \subsubsection{汇编或论文集析出中的文献/incollection} \begin{refentry}{}{} 汇编中的析出文献对应的biblatex的entrytype为:incollection。文献类型标识用G表示。 \bibliofmt{其著录格式为} 采用与inbook一致的格式。 \end{refentry} \subsubsection{会议录或会议文集/proceedings} \begin{refentry}{}{} 会议文集的biblatex的entrytype为:proceedings。文献类型标识用C表示。 \bibliofmt{其著录格式为} 采用与book类似的格式。 \end{refentry} \subsubsection{会议文集中析出的文献/inproceedings} \begin{refentry}{}{} 会议文集中析出的文献对应的biblatex的entrytype为:inproceedings。文献类型标识用C表示。 \bc{(注意: biblatex将conference作为inproceedings条目类型的别名,对于标准样式来说conference出现在bib文件中等同于inproceedings,但这种等同标准样式是在驱动层进行处理的,而gb7714-2015样式还需要处理文献类型标识,本样式文件做了进一步支持。因此bib文件中也可以直接使用conference。)} \bibliofmt{其著录格式为} 采用与inbook类似的格式。 \end{refentry} \subsubsection{报告/report} \begin{refentry}{}{} 报告对应的biblatex的entrytype为: report。文献类型标识用R表示。\bc{(注意:biblatex将techreport作为report条目类型的别名,对于标准样式,techreport出现在bib文件中等同于report,但这种等同标准样式是在驱动层处理的,而gb7714-2015样式还需要处理文献类型标识,本样式文件做了进一步支持。因此bib文件中也能直接使用techreport类型。)} \bibliofmt{其著录格式为} (由biblatex的标准report格式修改得到,注意当出版地和出版者不存在时忽略这两项) 主要责任者.题名:其他题名信息[文献类型标识/文献载体标识].其他责任者.类型.号码.版本项.出版地:出版者,出版年:引文页码[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{报告/report/techreport条目的域格式}{eg:reportfieldfmt} \begin{texlist} author.title[usera].translator.type number.version.location:institution,date 或year:pages[urldate].url.doi \end{texlist} \end{example} \qd{因为有的报告文献可能存在类型和报告号信息,比如AIAA 9076或AD 730029等,所以著录格式需要有所体现,而这两个数据体现在type和number两个域中,或者在version域中体现也可,而对于标题中的出现的报告号,可以直接在标题或子标题或者附加标题中体现。report的版本信息放在version域中,而不是book等条目的edition域中。report类型出版项处理基本与book一样,但当出版项缺省时且存在网址时,直接省略出版项,且加上修改和更新日期,因此将其转换为online类型处理。从report开始,后面的所有类型,当不存在出版项且存在网址时,都以online的格式进行处理。} \subsubsection{手册或档案/manual/archive} \begin{refentry}{}{} 手册和档案采用一种格式,对应的biblatex的entrytype为: manual或archive。文献类型标识用A表示。 \bibliofmt{其著录格式为} 借用thesis格式处理,而不是标准样式中的manual格式,这种方式下,当没有出版地和出版者时,完全省略。 \end{refentry} \bc{manual出版者用institution域表示,体现的是机构而不是一般的出版社。注意:manual类型的出版项缺失时直接省略。} \subsubsection{学位论文/thesis} \begin{refentry}{}{} 学位论文对应的biblatex的entrytype为: thesis。文献类型标识用D表示。\bc{(注意:biblatex将mastersthesis或phdthesis作为thesis条目类型的别名,对于标准样式来说这两者出现在bib文件中基本等同于thesis,但却会增加type信息。但这种等同,标准样式是在驱动层进行处理的,而gb7714-2015样式还需要处理文献类型标识并且不需要type信息,本样式文件做了进一步支持。因此bib文件中也可以使用mastersthesis和phdthesis)。} \bibliofmt{其著录格式为} 由biblatex的标准thesis格式修改得到。 主要责任者.题名:其他题名信息[文献类型标识/文献载体标识].其他责任者.出版地:出版者,出版年:引文页码[引用日期].获取和访问路径.数字对象唯一标识符. \end{refentry} 其对应的biblatex数据域为: \begin{example}{学位论文/thesis/mastersthesis/phdthesis条目的域格式}{eg:thesisfieldfmt} \begin{texlist} author.title[usera].translator.location:institution,date或year:pages[urldate].url.doi \end{texlist} \end{example} \bc{由于thesis类型出版项缺失时直接省略,格式与manual一致,借用manual类型输出。} \subsubsection{未出版物/unpublished} \begin{refentry}{}{} 未出版物,对应的biblatex的entrytype为: unpublished。文献类型标识用Z表示。 \bibliofmt{其著录格式为} 借用manual格式处理。 \end{refentry} \subsubsection{备选类型} \begin{refentry}{}{} 备选/其它(misc),文献类型标识用Z表示。 \bibliofmt{其著录格式为} 当存在网址时直接转换为online类型,由于howpublished域可用于描述一些详细信息,因此不存在网址时,独立作为一种格式处理。 \end{refentry} \subsubsection{更多类型} \begin{refentry}{}{} 数据库(database)标识符(DB)、数据集(dataset)标识符(DS)、软件(software)标识符(CP)、舆图(map)标识符(CM)。 \bibliofmt{其著录格式为} 借用manual格式处理。 \end{refentry} \subsection{标准的其它细节要求} 除了第\ref{sec:numeric:data}节针对不同条目类型的著录格式要求外,GB/T 7714-2015 还有一些细节规定比如文字、符号等,biblatex-gb7714-2015宏包做如下考虑, 示例见文档\href{run:./stdGBT7714-2015.pdf}{stdGBT7714-2015}: \subsubsection{数字}\label{sec:fmt:number} \begin{property}{}{} 用户录入文献数据中包含数字时,gb7714-2015按照GB/T 7714-2015第6.2节要求输出阿拉伯数字。 \end{property} \subsubsection{英文字母}\label{sec:fmt:lettercase} \begin{property}{}{} 为了符合西文文献责任者的字母大小写习惯,gb7714-2015通过判断是否存在givenname/firstname来确定是否是个人作者,当存在givenname/firstname 时认为是个人作者,不存在则是机构作者,当是个人作者时familyname/lastname按GB/T 7714-2015 要求全大写,是机构作者则仅大写首字母。所以为满足GB/T 7714-2015 第6.3节要求,对于仅有英文姓(lastname)的个人作者,用户录入时字母应全大写。 用户录入出版项、西文期刊名缩写以及西文文献的字母时,应按照GB/T 7714-2015第6.4节,第6.5节,6.6节要求,使用符合要求的习惯用法和大小写方式,gb7714-2015以原样打印的方式处理。 对于英文大小写问题,GB/T 7714-2015除了责任者的大写要求外,其它要求均比较模糊,但提到可参照ISO 4的要求。但实际上,不同的期刊可能会有各自不同的要求。从笔者的经验看,一般国内的期刊对于字母大小写通常要求: 责任者(全部大写); 题名(句首字母大写其它全部小写); 期刊名会议名(单词首字母大写); 出版项和其它(单词首字母大写)。所以用户在录入bib文件时可以按照这种常见方式来输入以减少后期修改。 \end{property} \subsubsection{标点} \begin{property}{}{} 用户录入引文信息时不需要考虑域之间的标点符号,只需录入各数据域时考虑习惯的标点用法。gb7714-2015实现了GB/T 7714-2015第7节所给出的著录用符号要求。 \end{property} \subsubsection{责任者} \begin{property}{}{} 用户录入引文的责任者信息时,当责任者为多级机关团体时,用户填入auther信息时,应按照GB/T 7714-2015第8.1.4节要求,用英文句点.号分隔。 当责任者是个人英文名,且具有名、姓、前缀和后缀,应按照第\ref{sec:bib:bibtex}节给出姓名录入方式处理才能正确解析,比如:von Peebles, Jr., P. Z.,其中von为姓前的前缀,Jr.为姓后的后缀,P. Z. 为缩写名(包括first name 和middle name)。 gb7714-2015实现了GB/T 7714-2015第8.1节要求的责任者样式,能自动判断责任者语言并分别处理,设置了全局选项useprefix=true以使用前缀,增加了gbnamefmt选项用于设置不同的姓名输出格式。 \end{property} \subsubsection{文献类型标识和载体} \begin{property}{}{} 用户录入引文题名信息时,无需给出文献类型标识/文献载体标识。同一责任者的合订题名,应用户根据GB/T 7714-2015 第8.2.1节的要求,在多个题名间用英文分号分隔,并整体录入到title数据域中。而分卷号,卷次,册次等信息时,除了专利号用number域录入外,其它可以直接在title数据域或者subtitle/titleaddon等数据域中给出。 gb7714-2015实现了符合GB/T 7714-2015第8.2节要求的格式,能根据条目信息确定文献类型标识/文献载体标识,并在各类参考文献条目驱动中直接使用,也可以利用gbtype选项设置是否输出该信息。各不同类型文献的类型标识/文献载体标识,参考GB/T 7714-2015 表B.1和B.2。 \end{property} \subsubsection{版次}\label{sec:fmt:edition} \begin{property}{}{} 用户在录入版次信息时,只要录入版次的整数数字比如2,或者录入需要打印的字符串比如明刻本。 gb7714-2015实现了GB/T 7714-2015第8.3节要求的格式,根据edition/version域输入信息分别处理,对于整数则解析后格式化,对于其它特殊版本说明,如新1版,明刻本等,直接在edition域录入后原样打印。 \end{property} \subsubsection{出版项}\label{sec:fmt:pubitem} \begin{property}{}{} 用户在录入出版项信息时,当出版日期有其它形式的纪年时,将其置于公元纪年后面的()内,并整体录入到 year 数据域(注意不是date域)中,比如: 1845(清同治四年)。而引用/访问日期应录入到 urldate 数据域。当除了出版日期外还有修改/更新日期等时,可在year或date数据域录入第二个日期,并用/符号与前一个出版日期隔开。而专利的公告日期和其它条目类型的出版年应录入到 date 域中。 gb7714-2015实现了GB/T 7714-2015第8.4节要求的格式。当出版地和出版者缺省时,中英文自动区分处理。对于用/符号隔开的两个日期,biblatex后端biber能自动解析,后一个日期数据自动解析到endyear等域可作为修改日期等使用。 \end{property} \subsubsection{页码}\label{sec:fmt:pages} \begin{property}{}{} 用户在录入页码信息时,可以在pages域中根据需要录入可解析的页码(即用整数表示页码,起讫页码用-分隔),比如: 81-86。 也可以直接录入需要打印的信息,比如: 序2-3等。 gb7714-2015实现了GB/T 7714-2015第8.5,8.8.2节的要求,对于能解析的页码自动解析后格式化,对于不能解析的页码则原样输出。 \end{property} \subsubsection{访问路径URL和DOI} \begin{property}{}{} 用户在录入获取和访问路径、数字对象唯一标识符信息时,将访问路径录入到url域中,数字对象唯一标识符录入到doi域中即可。 gb7714-2015实现了GB/T 7714-2015第8.6,8.7节要求的格式。 \end{property} \subsubsection{卷和期}\label{sec:fmt:volnum} \begin{property}{}{}%[break at=0.4cm/0pt] 用户在录入卷、期等信息时,如\ref{sec:bib:bibtex}节中所述,合期的期号用/间隔,比如9/10,填入number域,报纸的版次也填入number域。 gb7714-2015实现了GB/T 7714-2015第8.8节要求的析出文献相关格式。 \end{property} \section{总结与致谢} 通过对 GB/T 7714-2015 标准的分析,对 biblatex 的学习和理解,在 biblatex 标准样式基础上,设计完成了符合 GB/T 7714-2015 标准的biblatex参考文献样式。从测试实践看,基本能够满足使用要求,用户可以放心使用。遇到问题时,除了可以查看 本文档说明外,也可以看样式文件代码,其中给出了详细注释,如果遇到无法解决的问题,请邮件联系作者。 %读者若查看样式文件内容可以看到作者对各目标要求所做的修改及,读者也可以根据自己的需求进行修改,作者设计样式文件的思路以及在设计过程中用到的一些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,提供了热心帮助,限于篇幅这里不再一一列举,在此一并表示感谢! \section{存在的问题和下一步工作} \subsection{存在的问题} \begin{enumerate} %\item 当作者多于3个需要添加等或et al.时,如果作者的姓名是用\{\}包起来的,可能判断会出错。 %这个问题已经解决了,本来在\testCJKfirst中如果单靠edef加expandafter 组合,无法处理带编组的字符流。所以考虑利用xstring 宏包的\exploregroups函数来,提取字符到命令中,这一就能真正的获得域中的第一个字符,而不会把一个编组当成一个字符进行判断。2016-1223,详见修改历史1.0e中的说明。 %\item 顺序年制中当不存在著者信息时,如果用佚名或者no author,本样式文件中没有实现。怎么在数据进来后,给一些域添加信息?在biber处理过程中根据一些判断添加信息?(著者年制,没有作者,用佚名,英文怎么办?没有年怎么办?) %这个问题解决了,2016-1114 %\item 著者-出版年制引用标签时,文中已经存在作者名的,标签只需要写年份,这个需要定义一个新的yearcite命令,是容易实现的,但这里没有实现。 %这个问题解决了,2016-1114,增加了一个yearpagescite命令。 %\item backref的格式也可以修改一下。 %没有要求处理,但修改了,2016-1114,修改英文本地化字符串为引用页面。 %\item shorthand的问题没有遇到,其应用可能需要进一步理解。,主要是获取参考文献的部分信息进行统计和打印。该问题已经解决,参见biblatex-solution-to-latex-bibliography(20180525)。 \item 当专著同时存在作者和编者的时候,GB/T 7714-2015没有明确的规定,所以目前样式文件中以biblatex标准样式的方式处理,这种处理因为与本地化相关,直接应用可能不好看的,也许需要修改。 \item 在各类文献的著录格式中,GB/T 7714-2015 对于出版项给出的就是出版地和出版者,但习惯上不同的类型还是存在差异的,比如专利文献出版项还应该再明确,比如在线资源常用organization表示而无出版地。这些有待进一步明确。 \item 当作者不明时,GB/T 7714-2015 给出的说法是用佚名和其它语言相应的词代替。英文给了一个例子是Anon,似乎是anonymity的缩写。这也有待进一步明确。v1.0l版后将之前用的noauthor换成Anon。 %\item 因为GB/T 7714-2015中给出的了一些著录格式,如果把这些著录格式作为一个严格标准,那么条目中只能出现其中规定的域,而往往在bib文件中可能存在一些另外的信息比如chapter等,而且从标准样式修改的驱动中也仍然带有这些域的处理,如果为了标准化规范化考虑,可以去掉国标中没有提到的域的信息,可能使得内容更为标准,这可以通过修改增加数据模型,数据源动态修改,驱动修改(驱动中目前存在较多的似乎用不到的域,而且意义不是非常明确,这个等到biblatex说明文档中文版完成后再结合它全面的进行梳理)三条路子做到,需要的话,可以在下一步实现(2017-0226)。添加了gbstrict选项后,该问题基本已经解决(20180525)。 \end{enumerate} \subsection{下一步工作} \begin{enumerate} \item 到1.0p版本,已经完全实现GB/T 7714-2015样式要求格式,并增加了更多的功能,剩下的问题主要是用户一些特殊需求实现以及可能存在的兼容性问题,需要广大用户发现和建议,非常感谢! %到目前,无论是基本功能还是附加功能,biblatex-gb7714-2015样式包已经基本够用,剩下的问题可能是一些特殊情况时带来的适应性问题,这需要经过大量的测试来发现问题。如果在使用过程中发现什么问题,请邮件联系作者,非常感谢! % 到1.0i版为止,进一步完善了: GB7714风格的文献表标签项对齐设计,编组内信息的中英文判断,特殊或老的bibtex 条目类型支持,改善空格设计以满足断行要求,支持了宏包选项(url等)应用,增加了宏包选项用于GB7714风格实现控制(gbpub 等),重新设计了版本兼容方式,以后的版本中将更容易兼容biblatex的升级。 %到1.0h版为止,进一步完善了样式宏包,该版本将是最后支持texlive2015的版本,以后版本的功能实现将基于最新texlive中biblatex 版本,而不再考虑texlive2015中3.0版的biblatex。 %1.0g版增加对mastersthesis,phdthesis,www,electronic,standard,techreport,conference,newspaper等条目类型的兼容,增加了对标准样式standard.bbx中url包选项的兼容性,增加了析出文献标识符//后面的短空格以支持著录表的断行机制,增加了特殊字符处理功能并实现对texlive2015 的兼容,给出了gb7714风格参考文献著录表文本转换为bib文件的perl脚本,与gb7714-2015 样式形成闭环。 %1.0f版完善了gbalign 选项(用于实现GB7714 风格的著录文献表标签,texlive2016 有效),带花括号的责任者的中英文判断等功能对texlive2015 的兼容性。 %到1.0e版为止,功能需求已经完全实现,剩下的问题可能是一些文献具有特殊信息或者特殊情况时带来的适应性问题,这需要经过大量的测试来发现问题。各位朋友如果发现什么问题,请邮件联系,作者会非常感谢! \item biblatex宏包的说明文档中文版,已经由Shen wenbo和我基本完成,下一步是完善,校对,以及增加新版的内容。如果有朋友觉得这个事情有意义,愿意一起来完成这个事情,非常欢迎,请email联系。 %\item 打算翻译biblatex宏包的说明文档和biber的说明文档,这个已经在进行中,完成了一部分,但因为只是业余时间做,可能最终完成的时间会比较长。如果有朋友觉得这个事情有意义,愿意一起来完成这个事情,非常欢迎,请email联系。 %\item 进一步完善上一节提到的问题。 \end{enumerate} \section{更新历史} \input{example/updatehistory.tex} % \input{example/updatehistoryold.tex} % \end{document}