%!Mode:: "TeX:UTF-8" %!TEX program = xelatex %!BIB program = biber \documentclass[11pt]{article} %用draft选项找到badbox的位置 twoside, \input{biblatex-gb7714-2015-preamble} %宏包和一些格式设置 \usepackage{microtype} \usepackage{datetime} \renewcommand{\dateseparator}{-} \yyyymmdddate %\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 first created at 2016-07-01 and revised at \today ~with biblatex v\versionofbiblatex;\\% 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{\today} \titleandauthor \begin{quotation} biblatex-gb7714-2015 宏包是为满足《GB/T 7714-2015~~信息与文献~~参考文献著录规则》要求而开发的 biblatex 样式包。宏包主要提供两种编制样式: 一、顺序编码制(gb7714-2015);二、著者-出版年制(gb7714-2015ay),能够精确实现国标提出的著录和标注格式。另外提供: 两个老版国标样式(gb7714-2005/gb7714-2005ay、gb7714-1987/gb7714-1987ay); 两个特殊样式(一个文献表内中英文格式不同的gb7714-2015ms、 一个文档内顺序编码和作者年制混用的gb7714-2015mx); 三个典型文科期刊样式(经济学研究的chinese-erj、社会科学的chinese-css、管理世界的chinese-jmw); 以及几个明显有别于国标的特殊学位论文样式(西北农林的gb7714-NWAFU、华中师范的gb7714-CCNU、东南大学的gb7714-SEU)等。 具备灵活、易用、兼容性好等特点,能为国内\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或更换使用最新版 texlive)。 出于兼容一些旧的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|\fullcite|(类似文献表的标注)、 \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域或使用修改后的locale文件(即 pinyin.pm)解决。 著录项格式选项: 姓名格式调整(gbnamefmt选项,可以设置大写、小写、西语习惯用法、拼音习惯用法等)、 出版项控制(gbpub选项,可设置出版项缺失时是否填补信息)、 类型和载体标识控制(gbtype选项,可设置不输出)、 析出文献标识符控制(gbpunctin选项,可设置\texttt{//}不输出或其它表示形式)、 标题超链接控制(gbtitlelink选项,可设置文献表中各条目标题超链接)、 标准标签超链接控制(gblabelref选项,可设置标注中作者标签的超链接)、 标注标签格式控制(gbcitelabel选项,可设置标签包围符号)、 作者项处理(gbnoauthor选项,可设置作者缺失时是否填补信息); 著录表格式选项和命令: 标签对齐控制(gbalign选项,可设置左、右、居中、项对齐方式)、 标签格式控制(gbbiblabel选项,可设置标签数字不同的包围符号)、 条目格式控制(gbstyle选项,利用gb7714-2015ms样式可实现中英文献分设不同格式)、 编制样式设置命令(利用\verb|\setaystylesection|和gb7714-2015mx样式实现不同文献节不同的编制方式)、 文献标题控制(gbctexset选项,可设置标题内容由\verb|\bibname|或\verb|\refname|宏调整)、 命令\verb|\bibauthorfont|可设置作者项字体等格式、 命令\verb|\bibtitlefont|可设置标题项字体等格式、 命令\verb|\bibpubfont|可设置出版项字体等格式、 尺寸\verb|\bibitemindent|和\verb|\bibhang|可设置文献表的缩进等格式; 编码设置选项: GBK编码兼容(gbcodegbk选项,可设置GBK编码文档编译)等等。 配合biblatex提供的选项、\verb|\bibfont|命令、\verb|\bibitemsep|间距等可以实现丰富的格式调整,包括标注和文献表采用不同样式、url/doi/isbn输出控制、标注和文献表中作者数量控制、文献表按拼音或笔画排序等等。 \item 可维护性 宏包的长期使用价值体现在宏包的维护和更新上,追求宏包具有高的可读性、可理解性、可维护性,可为宏包长期发挥作用提供帮助。由于biblatex已经是一个相当成熟完善的宏包,即使在样式方面考虑也相当全面,这可能与西方出版界对于参考文献的多样且细致的要求有关。而国内只有一个通用标准就是GB/T 7714标准,且除了部分特殊需求要额外实现外,标准中的大多数格式要求可借助biblatex提供的标准样式实现,因此完全不需要重新造轮子,而只需在biblatex原有样式基础上增加有限修改并加上详细注释来达成目标。如此,既可使gb7714-2015样式与biblatex宏包的标准样式保持一致的结构、风格和习惯,还可以大大增加代码的可读性和可维护性,读者只需通过学习biblatex,即可轻松理解gb7714-2015样式的代码。 %做的工作,比如做了哪些修改,为什么这么修改,实现了什么样的效果。维护者 另外,为方便用户,样式包提供了全面、详实的说明,包括 GB/T 7714标准的理解和解释(\ref{sec:gbt:std}节)、 条目类型和域的理解和录入方法(\ref{sec:bib:bibtex}节)、 参考文献引用和文献表打印及其格式控制方法(\ref{sec:cbx:usage},\ref{sec:usage:bbx}节)、 \hypertarget{lab:manual:hyper}{以及} \href{https://github.com/hushidong/biblatex-gb7714-2015/wiki}{biblatex和样式包基本使用方法}、 \href{https://github.com/plk/biblatex}{biblatex手册}、 \href{https://github.com/hushidong/biblatex-zh-cn}{biblatex手册中文版}、 \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}{LaTeX 文档中文参考文献的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}、\zd{chinese-css.bbx/cbx}、\zd{chinese-jmw.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=2.5cm] (numcbbx) {\tiny \textcolor{black}{gb7715-2015/ay.c/bbx}}; \node[below of=numcbbx,fill=gbgrey!20,yshift=8mm,text width=2.5cm] (aycbbx) {\tiny \textcolor{black}{gb7715-1987/ay.c/bbx}}; \node[below of=aycbbx,fill=gbgrey!20,yshift=8mm,text width=2.5cm] (mscbbx) {\tiny \textcolor{black}{gb7715-2015ms.c/bbx}}; \node[below of=mscbbx,fill=gbgrey!20,yshift=8mm,text width=2.5cm] (mxcbbx) {\tiny \textcolor{black}{gb7715-2015mx.c/bbx}}; \node[below of=mxcbbx,fill=gbgrey!20,yshift=8mm,text width=2.5cm] (gbkdef) {\tiny \textcolor{black}{gb7715-2005/ay.c/bbx}}; \node[below of=gbkdef,fill=gbgrey!20,yshift=8mm,text width=2.5cm] (erjcbbx) {\tiny \textcolor{black}{chinese-erj.c/bbx}}; \node[below of=erjcbbx,fill=gbgrey!20,yshift=8mm,text width=2.5cm] (csscbbx) {\tiny \textcolor{black}{chinese-css.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] (csscbbx.west) -- ($(csscbbx.west)+(-3mm,0mm)$) ; %\draw[color=blue,semithick] (mscbx.west) -- ($(mscbx.west)+(-3mm,0mm)$) ; \draw[color=blue,semithick] ($(csscbbx.west)+(-3mm,0mm)$) -- ($(style.center)+(-14.5mm,-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} \section{使用说明} \subsection{最小示例} 基于biblatex宏包生成参考文献非常简单,一个最小工作示例 (Minimum Work Example, MWE) 如例 \ref{code:doc:structrue}所示,其编译结果如图\ref{fig:eg:ref}所示。该Tex源文档给出了使用biblatex时的基本结构及其详细注释,其中: \begin{itemize} \item 参考文献样式(即cbx/bbx文件)随biblatex宏包加载(比如:style=gb7714-2015,加载了gb7714-2015.cbx和gb7714-2015.bbx); \item 参考文献数据库文件(即bib文件)利用 \verb|\addbibresource| 加载 (比如: \lstinline[breaklines=true]!\addbibresource[location=local]{example.bib}!, 注意:bib文件需另外准备,详见\ref{sec:bib:bibtex}节); \item 引用文献则使用\verb|\cite|等命令,即使用这些命令在正文中适当位置引用参考文献的唯一标识(即entrykey),比如\verb|\cite{entrykey}|; \item 打印文献表则使用 \verb|\printbibliography| 命令,该命令可放在正文任意位置(即文献表可在任意位置输出)。 \end{itemize} \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宏包的参考文献数据源即bib文件加载方式 \addbibresource[location=local]{example.bib} \begin{document}%正文区开始: %正文内容,引用参考文献 详见文献\cite{Peebles2001-100-100}\parencite{Babu2014a} 另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014a} %打印参考文献表 \printbibliography[heading=bibliography,title=参考文献] \end{document} \end{texlist} \end{example} %\begin{refsection} \begin{figure}[!h] \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{Babu2014a} %另见文献\cite[49]{于潇2012-1518-1523}\parencite[106]{Babu2014a} %\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} 正所谓万变不离其宗,无论文档大小如何,结构如何变化,基于biblatex 生成参考文献的方式 大体如例\ref{code:doc:structrue}一般。使用其它功能如分章参考文献表等时,所需的修改也极为有限。要全面了解更多高级功能可参考前述\hyperlink{lab:manual:hyper}{手册}。 %\footnote{地址:\url{https://github.com/plk/biblatex}}、 %\footnote{地址:\url{https://github.com/hushidong/biblatex-zh-cn}} %\footnote{地址:% %\url{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}}。 \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} \subsection{样式、选项和命令} \subsubsection{几种样式} 本样式包提供了两种基本样式:gb7714-2015样式实现顺序编码制国标(例\ref{eg:gb7714numeric}),gb7714-2015ay样式实现著者年份制国标(例\ref{eg:gb7714authoryear}),和其他一些样式以实现不同的应用目的和格式要求 (例\ref{eg:gb7714ms},\ref{eg:gb7714mx},\ref{eg:gb87and2005}等), 以及一个将顺序编码制国标文本转换为bib文件的工具(例\ref{eg:transtobib})。 \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.0z版本增加的gb7714-1987和gb7714-2005两个版本的顺序编码和著者年份制样式,用于仍在使用 1987和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} 另外,根据国内大学的学位论文的文献生成需求,增加了几个与国标有明显区别的样式,包括:西北农林(gb7714-NWAFU)、华中师范(gb7714-CCNU)、东南大学(gb7714-SEU)等。其他大学的文献样式与国标基本一致,比如上海交大、浙大、复旦等,直接使用即可。另外一些大学与国标略有差别,可以通过简单的设置满足要求,比如清华、科学院大学、中科大、国防科大等,通常在学位论文模板中实现。而在egthesis文件夹内则对一些大学的学位论文参考文献做了测试。 \pdfbookmark[4]{gb7714-NWAFU/CCNU/SEU}{gb7714-NWAFU/CCNU/SEU} \begin{example}{国内一些大学要求的特殊文献样式}{eg:gbchnuniversity} \begin{texlist} %使用西北农林的文献样式 \usepackage[backend=biber,style=gb7714-NWAFU]{biblatex} %使用华中师范的文献样式 \usepackage[backend=biber,style=gb7714-CCNU]{biblatex} %使用东南大学的文献样式 \usepackage[backend=biber,style=gb7714-SEU]{biblatex} \end{texlist} \end{example} 此外,根据期刊文献生成需求,为文科类期刊增加了如下样式: v1.0r版本增加了chinese-erj样式用于生成经济研究期刊的文献; v1.1l版本增加了chinese-css样式用于生成社会科学期刊的脚注注释文献; v1.1m版本增加了chinese-jmw样式用于生成管理世界期刊的文献。 而理工类期刊文献通常与国标差别不大,部分期刊与国标的最大的差异主要是双语对照文献的格式,比如计算机学报等,这可以通过简单的设置实现格式调整(可以参考github上的 \href{https://github.com/hushidong/biblatex-gb7714-2015/issues/154}{issue154})。 \pdfbookmark[4]{chinese-erj/css/jmw}{chinese-erj/css/jmw} \begin{example}{经济研究等文科类期刊文献样式}{eg:gbchinesesocial} \begin{texlist} %使用经济研究期刊文献样式 \usepackage[backend=biber,style=chinese-erj]{biblatex} %使用社会科学期刊文献样式 \usepackage[backend=biber,style=chinese-css,gbfootbib=true,gbfnperpage=true]{biblatex} %使用社会科学期刊文献样式 \usepackage[backend=biber,style=chinese-jmw]{biblatex} \end{texlist} \end{example} \subsubsection{新增选项}\label{sec:added:opt} 样式包新增了一些选项。 %由于选项更为常用,所以在本节集中介绍。 %而新增命令往往涉及更细节的修改,所以在后面各类格式调整的内容中介绍。 新增选项用于处理标签对齐、缺省出版项、缺省责任者(作者)处理等,其使用方式与biblatex宏包选项完全相同。关于文献表排序,除了下面gblanorder和sorting选项外,也还需了解一些其它知识,详见第\ref{sec:sort:adj}节。 \begin{description} \pdfbookmark[4]{gbalign}{gbalign} \item[gbalign]=\textbf{right},left,center,centpos,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=centpos,是list环境中的局中数字序号标签,带括号标签[1]在标签盒子内居中; \item gbalign=gb7714-2015,是项对齐方式数字序号标签,即段落环境中标签使用原始宽度,标签与条目内容等间距。 \item gbalign=gb7714-2015ay,无数字序号标签,是author-year风格的文献表,是gb7714-2015ay样式的默认选项。 \end{itemize} 该选项对\textbf{著者年份制、顺序编码制均有效},也就是说当使用著者年份制时,加上gbalign选项后同样可以实现文献表的顺序序号标签(比如: \lstinline[breaklines=true]!\usepackage[style=gb7714-2015ay, gbalign=left]{biblatex}!,可以实现\emph{著者年份制格式的带左对齐的顺序序号标签的文献表})。 序号标签对齐方式的测试,包括: 数字在标签内居中见: \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]=true,\textbf{false}. \hfill default is false 为控制出版信息缺失处理增加的选项。 \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]{gbnosameeditor}{gbnosameeditor} \item[gbnosameeditor]=true,\textbf{false}. \hfill default is false 用于控制inbook,incollection等类型中bookauthor/editor与author相同时是否输出bookauthor/editor。 \begin{itemize} \item gbnosameeditor=false,默认方式,正常输出; \item gbnosameeditor=true,不输出。 \end{itemize} \pdfbookmark[4]{gbnoothers}{gbnoothers} \item[gbnoothers]=true,\textbf{false}. \hfill default is false 为控制是否输出作者列表截断后的等/et al. 信息增加的选项。 \begin{itemize} \item gbnoothers=false,默认输出等、et al.信息; \item gbnoothers=true,不输出。 \end{itemize} 该选项是全局选项,设置为true后,全文的作者列表都将不输出。若需要再局部调整,则利用编组局部设置\verb|\settoggle{bbx:gbnoothers}{true}|即可。 \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 gbcitelabel=bracketqj,标注标签由全角方括号包围,比如【1】; \item gbcitelabel=parensqj,标注标签由全角圆括号包围,比如(1); \item gbcitelabel=quanjiao,标注标签由全角方括号包围,比如【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{texlist} \usepackage{circledtext} \renewcommand{\mkgbnumlabel}[1]{\circledtext*[height=2.0ex]{#1}} \end{texlist} \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]{gbcitelabel}{gbcitelabel} \item[gbcitelabel]=\textbf{bracket},parens,plain,dot,box,circle. \hfill default is bracket 为标注标签的包围符号增加的选项,用于选择正文中标注标签符号。 \begin{itemize} \item gbcitelabel=bracket,标注标签由方括号包围,比如[1]; \item gbcitelabel=parens,标注标签由圆括号包围,比如(1); \item gbcitelabel=dot,标注标签数字后面加点,比如1.; \item gbcitelabel=plain,标注标签无装饰,比如1; \item gbcitelabel=box,标注标签由方框包围,比如\framebox{1}; \item gbcitelabel=circle,标注标签由圆圈包围,比如\textcircled{1}。 \item gbcitelabel=bracketqj,标签由全角方括号包围,比如【作者, 2001】 \item gbcitelabel=parensqj,标签由全角圆括号包围,比如(作者, 2001) \item gbcitelabel=quanjiao,标签由全角圆括号包围且内部标点为全角标点,比如(作者,2001) \end{itemize} 注意顺序编码制和作者年制存在一定的差异,作者年制主要是方括号、圆括号以及全角半角的选择。 顺序编码制默认是方括号,作者年制默认是圆括号。 \pdfbookmark[4]{gbnamefmt}{gbnamefmt} \item[gbnamefmt]=\textbf{uppercase},lowercase,pinyin etc. \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格式一致,常用于经济学类的文献。 \item gbnamefmt=fullname 时,姓名的格式采用英文默认的名在前姓在后的全拼模式。 比如对于 Zhao, Yu Xin 或 Yu Xin Zhao 格式化后为YuXin Zhao \end{itemize} \bc{注意:还可以利用 nameformat 域为某一具体条目设置该条目的姓名格式,比如:要在一个文献表中实现英文文献是givenahead 格式,而拼音的文献是pinyin风格,那么可以设置拼音文献的 nameformat 域为pinyin,而gbnamefmt设置为givenahead。条目中nameformat 域的局部设置优先于gbnamefmt的全局设置。}\par \emph{注意:使用pinyin选项时,bib文件中文献的作者应给出完整的名而不是缩写,否则出来的效果未必令人满意}。 另外,pinyin格式中名之间的短横线可以用如下设置取消。 \verb|\apptocmd{\gbpinyinlocalset}{\renewrobustcmd*{\bibnamedelima}{}}{}{}| 而quanpin格式的名中间的短横线可以用相反的设置加上。 \verb|\apptocmd{\gbquanpinlocalset}{\renewrobustcmd*{\bibnamedelima}{\mbox{-}}}{}{}| 而fullname格式的名中间也可以加上空格: \verb|\apptocmd{\gbfullnamelocalset}{\renewrobustcmd*{\bibnamedelima}{\space}}{}{}| 测试结果见: \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]{gbpunctcn}{gbpunctcn} \item[gbpunctcn]=\textbf{true},false. \hfill default is true 为chinese-erj、chinese-css样式控制文献表中的标点增加的选项。 \begin{itemize} \item gbpunctcn=true,chinese-erj使用格式要求的中文标点(即全角标点),chinese-css注释中的中文文献使用中文标点。 \item gbpunctcn=false,则将所有的文献中的标点改为英文标点(即半角标点)。 \end{itemize} 需要注意的是:若只想修改英文文献的全部标点为半角标点,而中文文献的标点不变,可在导言区采用如下方式修改英文文献的标点: \lstinline[breaklines=true]!\def\gbpunctcommalanen{\addcomma\addspace}!, \lstinline[breaklines=true]!\def\gbpunctcolonlanen{\addcolon\addspace}!。 \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} 标注和文献表中如:等、和等字符,本质上是由andincite等本地化字符串所控制的,直接修改它们可以得到不同的效果,比如: \begin{texlist} \DefineBibliographyStrings{english}{ andincite = {和}, %判断为英文的文献使用的字符串 andincitecn = {和}, %判断为中文的文献使用的字符串 andothersincitecn = {等}, andothersincite = {等{\adddot}},%adddot才能避开标点追踪 } \end{texlist} 测试文件见: \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}所示。注意:对于在线资源当没有date等信息而只有urldate信息时,著者年份制要求使用urldate的年份作为标签,且要求加上方括号,默认就按这一要求处理。但若希望去掉方括号,则可以通过在导言区增加如下定义: \lstinline[breaklines=true]!\DeclareFieldFormat{labelurlyear}{#1}!。 反过来,其它不使用urldate的标签默认不带方括号,若希望加上方括号或者其它符号,则可以通过增加如下定义实现: \lstinline[breaklines=true]!\DeclareFieldFormat{labelyear}{【#1】}!。 \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} \emph{需要注意的是:bib文件中的annote域会自动转换为annotation域若需要进行判断则需要用annotation域。}比如: \verb|\renewcommand*{\finentrypunct}{\iffieldundef{annotation}{\addperiod}{}}| 测试文档见:\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,即默认全部文献使用国标样式。 \item gbstyle=false,仅中文文献使用国标样式,其它语言文献使用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]{gbfootbibfmt}{gbfootbibfmt} \item[gbfootbibfmt]=true,\textbf{false}. \hfill default is false 如果不想要默认的脚注符号和缩进,但要实现脚注文献表且脚注中相同文献用标签替代等国标要求,则可使用gbfootbibfmt代替上面的gbfootbib选项。 \begin{itemize} \item gbfootbibfmt=true,实现脚注文献表及相同文献用标签代替等国标要求,但不设置脚注符号和缩进,用户可自行通过其它方式或宏包设置需要的符号和缩进形式。 \item gbfootbibfmt=false,不做任何附加处理。 \end{itemize} \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:add:cmd} \begin{description} \pdfbookmark[4]{defdblanentry}{defdblanentry} \item[defdblanentry] \{entrykey1\}\{entrykey2\} 用于定义双语对照文献,将entrykey2条目和entrykey1条目关联起来,在文献表中对照输出。比如:\verb|\defdblanentry{entrykey1}{entrykey2}|或 \verb|\defdoublelangentry{entrykey1}{entrykey2}|,若entrykey1条目是中文的文献,entrykey2条目是对应entrykey1条目的英文形式,那么该命令会使得在文献表中,entrykey2的英文内容紧跟在entrykey1的中文内容后对照输出。该命令也只能出现在导言区中。 \pdfbookmark[4]{addEntryField}{addEntryField} \item[addEntryField] \{entrykey or entrykey comma list\}\{field\}\{fieldvalue\} 用于给指定的文献条目(集)添加域。即将field=\{fieldvalue\}这样的域信息添加到指定的entrykey条目或者entrykey comma list条目集中。比如: \verb|\addEntryField{author2007en,author2014en}{nameformat}{quanpin}| 将会为author2007en,author2014en两个条目添加nameformat域信息。 该命令也只能出现在导言区中。 \pdfbookmark[4]{delEntryField}{delEntryField} \item[delEntryField] \{entrykey or entrykey comma list\}\{field\} 用于给指定的文献条目(集)删除域。即将指定的entrykey 条目或者entrykey comma list 中的各个条目中的 field 域删除。 \verb|\delEntryField{author2007en,author2014en}{usera}| 将会把author2007en,author2014en两个条目中usera域信息删除。 \pdfbookmark[4]{setlocalbibstring}{setlocalbibstring} \item[setlocalbibstring] \{bibstringkey\}\{bibstringval\} 用于局部调整本地化字符串的内容。比如\verb|\setlocalbibstring{andothersincite}{et al.}|,就是临时将本地化字符串andothersincite的内容调整为“et al.”。 注意:如果要在本地化字符串的内容设置中使用biblatex提供的一些标点命令,比如adddot 等,那么需要对其进行保护,避免直接展开导致命令未定义的错误,比如: \verb|\setlocalbibstring{andothersincite}{et al\protect\adddot}| \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[sorting]=none 等. \hfill default: none/gb7714-2015 sorting可以使用biblatex提供的选项,也可以使用本样式包提供的选项,详见 第\ref{sec:sort:adj}节。 \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|\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|。 上述命令均可指定页码等信息用于输出,即在\{entrykey\}前面的[]内或第二个[]内(当有两个[]时)给出需要附加输出的信息,比如:\verb|\cite[p. 9]{entrykey}| 或 \verb|\cite[第九页]{中文entrykey}|。若不指定页码,则仅有\verb|\pagescite|命令默认提取参考文献的页码信息进行输出。 各引用命令的使用方式及其效果如表\ref{tab:cite:num}所示。 测试文档见\href{run:example/testallformat.tex}{testallformat.tex}。 %\begin{table}[!htb] \medskip \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--} & 由\verb|\citec|实现的另一种压缩\\ 多次引用同一作者的同一文献: & 文献\cite[20-22]{Miroslav2004--}, 文献\cite[55-60]{Miroslav2004--} & 国标示例 \\ 多次引用同一作者的同一文献: & 文献\footfullcite[20-22]{Miroslav2004--}, 文献\footfullcite[55-60]{Miroslav2004--} & 国标示例:脚注方式 \\ \hline \end{tabular} \end{refsection} \end{minipage} \medskip %\end{table} %各命令使用方式如例\ref{eg:citefornumeric}所示。 %各引用命令的效果如图\ref{fig:cite:num}所示。 注意:对于一个引用命令中同时给出多个文献entrykey的压缩形式,页码只会应用到最后一个参考文献后面。 %这是不正确的,但这种情况其实本不应出现,因为指定页码本来就需要具体化指向某一文献。 若要为每篇添加页码信息,则应多次使用标注命令 \verb|\cite[p.2]{entrykey1}\cite[p.5]{entrykey2}|或使用复数形式的标注命令 \verb|\cites[p.2]{entrykey1}[p.5]{entrykey2}|, 而不是\verb|\cite[p.5]{entrykey1,entrykey2}|。 注意:在同一处引用多篇序号连续的文献时,标注标签默认是从两篇文献开始压缩的,比如同时连续引用两篇和三篇文献时标注分别为[1-2]和[1-3]。若需要修改从三篇文献开始压缩,比如:两篇和三篇文献分别标注为[1,2]和[1-3],则只需要在导言区设置计数器gbrefcompress的值为3,即: \verb|\setcounter{gbrefcompress}{3}|。 %当然除了这种多次使用标注命令外,也可以使用对应标注命令的复数形式来为每篇文献提供相应的页码信息。 %著者-出版年制的标注样式文件大体使用标准引用样式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] \centering \caption{著者年份制常用命令示例}\label{tab:cite:authoryear} \hspace{-1cm}{\parbox{\linewidth}{\includegraphics[scale=0.95,page=1]{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的编组特性,编组内的局部格式不影响编组外的格式,所以可利用编组内的局部设置来调整标注的格式。类似的,文献表的著录格式也可局部调整,详见下一节。 引用文献所产生标注标签的格式包括很多内容,包括作者数量、标点、本地化字符串等。最常见的局部调整需求是本地化字符串和标点(下面会以双语图题中的引用标注标签的不同本地化字符串需求为例来展示局部调整的方法)。 \paragraph{标注中输出的作者数量} 可以通过宏包选项 maxcitenames 和 mincitenames 进行控制(文献表中的作者数量的控制选项则是maxbibnames 和 minbibnames)。 在著者年份制的样式中,有些出版物会要求当文献作者是两位时全部输出,而不是国标默认的只输出第一个作者。此时设置:maxcitenames=2,mincitenames=1 表示当作者数超过2则只输出1位作者,否则全部输出。 注意:这一设置其实是全局的设置,若要局部调整作者数量,比如某篇文献单独调整数量或某个章节调整数量,则有两种方法可以实现:一是给指定文献附加选项; 二是在局部编组内调整内部计数器值。例\ref{eg:resume:localset}给出了文献表的作者数量局部调整的一个示例,标注中的调整原理相同,采用相同方法即可。 \paragraph{标注中“等”“和”等本地化字符串调整} 前述根据gbcitelocal选项可以选择本地化字符串使用默认的中文、英文或区分中英文选择中英文字符串的方式。但这可能还不足以满足更多的定制化需求,比如: 在中科院某类学位论文中,正文的标注标签要求两个英文作者之间用“和”而不是“and”连接,多个英文作者截断成一个作者时后面用“等.”而不是“et al.”表示。这可以通过设置本地化字符串来实现,如例\ref{eg:localstr:diff}和图\ref{fig:content:fmtc}所示。 \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 = {等}, } %通过标点设置等前的标点,比如: \DeclareDelimFormat[textcite,citet]{andothersdelim}{}%\space \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} 然而对于双语的图题,英文图题中不适合出现“等”与“和”这样的字符,所以又要求在这种全英文的环境中将“和”与“等.”更换为英文符号,这就需要对本地化字符串做局部调整。而这种局部调整其实已经是比较底层的处理,biblatex提供的接口DefineBibliographyStrings仅用于全局设置,因此局部调整则需采用其它方式。 %如何进行局部调整并没有非常方便的接口,要解决这一需求,需要对biblatex以及gb7714-2015样式有比较深入的了解。 gb7714-2015通过gbcitelocalcase计数器来选择使用中文或英文的本地化字符串,因此通过局部设置gbcitelocalcase可以局部的选择不同语言的本地化字符串,比如在一个编组内,局部化设置计数器为:\verb|\defcounter{gbcitelocalcase}{1}|,那么这个编组内的所有本地化字符串会使用默认的中文字符串,反之若设置为2,则本地化字符串会使用默认的英文字符串。 然而因为本地化字符串的默认内容通常是全局设置的,所以当中文的或者英文的本地化字符串设置都不满足要求时,就需要局部的调整本地化字符串的内容,如例\ref{eg:str:localset}所示,对本地化字符串andothersincite的内容做了调整,从全局设置的“等.”转换为“et al.”,“和”转换为“and”,这种局部设置可通过csdef直接重定义保存字符串信息的命令来进行调整, 比如\verb|\csdef{abx@sstr@andothersincite}{et al.}|就是将andothersincite本地化字符串的内容临时调整为“et al.”。 但为方便用户使用, 宏包提供了\verb|\setlocalbibstring|命令来替代上述直接定义的csdef命令, 如例\ref{eg:str:localset}所示。 具体的测试见\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} \paragraph{标注中的全半角标点和括号调整} 除了本地化字符串外,标注中的括号和标点(默认采用英文的半角符号)也常是需要调整的内容。这两者首先可以通过选项调整,gbcitelabel选项提供了不同的选择比如bracketqj等,用来设置标注的括号为全局或半角,同时提供了一个gbcitelabel=quanjiao,可以将标点和括号全部改为全角。 如果选项提供的效果还不够,那么可以通过局部调整mkbibleftborder和mkbibrightborder来更换需要的括号。例\ref{eg:parens:localset}中的局部调整将标注中的括号改变为『和』。 \begin{example}{局部调整标注标签中的括号}{eg:parens:localset} \begin{texlist} {\renewrobustcmd{\mkbibleftborder}{『}% \renewrobustcmd{\mkbibrightborder}{』}% 中文段落\cite{Aaa_2018,Aaa_2018a}\cite{Aaa_2021,Aaa_2018}\\ 中文段落\textcite{Aaa_2018,Aaa_2018a},\textcite{Aaa_2021,Aaa_2018} \\ 中文段落\cite{Aaa_2018,Bbb_2019}\parencite{Aaa_2018,Bbb_2019}} \end{texlist} \end{example} 对于标点来说,若默认的设定不满足要求,则首先可以在导言区进行调整, 如例\ref{eg:punct:globalset}中的第一段代码所示,主要是标签中非姓名内中(即姓名之间,姓名之后)的标点调整。 至于姓名内的标点调整则需利用另外的接口,比如:通过gbcaselocalset等来修改revsdnamepunct,bibinitperiod等(见例\ref{eg:biblist:separator}),但这些在标注标签中通常不太需要修改。 第一段代码是一种全局的设置,不考虑中英文文献以及环境的差异。 但有时我们需要对中英文文献的标注标签使用不同的符号,比如中文的标签使用中文全角标点,而英文的标签使用英文的标点,那么可以在标点设置时做一个判断(括号若有类似需求也可采用类似处理),如例 \ref{eg:punct:globalset}中的第二段代码所示。 值得注意的是:当同一处引用多篇文献时,且起始和终止的两篇文献的中英文不同,则标注标签周围的括号会变得不一致。此时可以用例\ref{eg:punct:globalset}第三段代码所采用的方式,利用局部设置gbcitelocalcase来临时统一符号。 此外,当文档中存在独立的中文段落和英文段落时,期望在中文段落中使用中文的标点,而在英文段落中使用英文的标点,则可以利用gbcitelocal选项的内部设置的计数器gbcitelocalcase来局部化调整。如例 \ref{eg:punct:globalset}中的第三段代码所示。做此设置后,只要在指定的段落局部化计数器gbcitelocalcase的值就可以达到临时调整标点的目的。 \begin{example}{标注标签中的标点的全局和局部设置}{eg:punct:globalset} \begin{texlist} %第一段代码:导言区重设标注标签的标点 %多个引用间的标点 \renewcommand*{\multicitedelim}{;}%\addsemicolon\addspace; \renewcommand*{\compcitedelim}{,}%\addcomma\space \renewcommand{\compextradelim}{,} %姓名与年份之间的标点(间隔符) \DeclareDelimFormat[cite,parencite,pagescite]{nameyeardelim}{,} \DeclareDelimFormat[textcite]{nameyeardelim}{,}% %最后一个姓名与等之间的符号(间隔符) \DeclareDelimFormat[cite,parencite,pagescite]{andothersdelim}{,}% \DeclareDelimFormat[textcite]{andothersdelim}{,}% %除此之外,有时还需要设置finalnamedelim等来调整姓名间的标点。 % multinamedelim是各姓名之间的标点 % finalnamedelim是最后一个姓名前的取代multinamedelim的标点 %第二段代码:导言区重设标注标签的标点,根据文献的中英文调整标点形式 \renewrobustcmd{\mkbibleftborder} {\iffieldequalstr{userf}{chinese}{(}{(}}% \renewrobustcmd{\mkbibrightborder} {\iffieldequalstr{userf}{chinese}{)}{)}}% \renewcommand*{\multicitedelim}{\iffieldequalstr{userf}{chinese}{;}{\addsemicolon\addspace}}%; \renewcommand*{\compcitedelim}{\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}} \renewcommand{\compextradelim}{\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}} \DeclareDelimFormat[cite,parencite,pagescite,citep]{nameyeardelim} {\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}}% \DeclareDelimFormat[textcite,authornumcite,citet]{nameyeardelim} {\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}}% \DeclareDelimFormat[cite,parencite,pagescite,citep]{andothersdelim} {\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}}% \DeclareDelimFormat[textcite,authornumcite,citet]{andothersdelim} {\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}}% %第二段代码:导言区重设标注标签的标点,可根据计数器gbcitelocalcase局部设置调整中英文标点 %也包括同时设置括号 \renewrobustcmd{\mkbibleftborder} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{(}{(}% \or (\or (\fi}% \renewrobustcmd{\mkbibrightborder} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{)}{)}% \or )\or )\fi}% \renewcommand*{\multicitedelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{;}{\addsemicolon\addspace}% \or ;\or\addsemicolon\addspace\fi}%; \renewcommand*{\compcitedelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}% \or ,\or\addcomma\space\fi} \renewcommand{\compextradelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}% \or ,\or\addcomma\space\fi} \DeclareDelimFormat[cite,parencite,pagescite,citep]{nameyeardelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}% \or ,\or\addcomma\space\fi} \DeclareDelimFormat[textcite,authornumcite,citet]{nameyeardelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}% \or ,\or\addcomma\space\fi} \DeclareDelimFormat[cite,parencite,pagescite,citep]{andothersdelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}% \or ,\or\addcomma\space\fi} \DeclareDelimFormat[textcite,authornumcite,citet]{andothersdelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}% \or ,\or\addcomma\space\fi} \end{texlist} \end{example} 示例可以参考:\href{run:example/test-punct-quanjiao.tex}{test-punct-quanjiao.tex} 参考:\url{https://blog.csdn.net/xenonhu/article/details/124686522} \subsection{文献表输出及著录格式}\label{sec:usage:bbx} 引用文献后,可以在文档需要的位置利用 \verb|\printbibliography| 命令输出文献表。文献表的输出格式称为参考文献著录样式,也称著录表样式或著录格式,也分两类: 顺序编码制和著者-出版年制(作者年制)。 %顺序编码制的参考文献样式基于标准样式numeric-comp/numeric \subsubsection{顺序编码制样式} 文献表中各参考文献条目以数字序号按引用先后顺序组织。 著录格式中序号格式见\ref{sec:bib:serialno}节, 各类型文献条目的著录格式见\ref{sec:numeric:data}节, 参考文献条目中各信息域及其录入方式见\ref{sec:bib:bibtex}节。 %著者-出版年制的参考文献样式则基于标准样式authoryear \subsubsection{著者-出版年制样式} 文献表中各参考文献条目以作者-年为标签以一定的顺序排列。著者-出版年制的著录格式与顺序编码制基本相同,差别仅在于把年份提前到作者后面作为条目的标签。数据源bib文件中各条目的数据录入与顺序编码制完全一致。 注意:著者-出版年制有文献按文种集中的要求,因此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{标题格式控制} 标题内容的设置有三种方式%,这里再重复一下 :一是直接在printbibliography命令中利用选项title设置,二是gbctexset=true时,重定义bibname和refname来设置,三是gbctexset=false时,利用本地化字符串进行设置。具体参见gbctexset选项。 标题格式的设置主要是通过重定义参考文献环境的heading进行,比如: \begin{example}{文献表标题格式}{eg:biblist:title} \begin{texlist} %将参考文献标题设置为段落的层级,若是其它层级则使用对应的命令,比如chapter,section等 \defbibheading{bibliography}[\bibname]{% \paragraph{#1}}% \end{texlist} \end{example} %更多的设置方法,请参考: %\href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% %{biblatex高级使用方法和样式包设计实现方法} \subsubsection{段落格式控制} \paragraph{\heiti 文献表字体、颜色} 为方便用户改变文献表段落格式、内容字体和颜色等,在 biblatex 提供的 \verb|\bibfont| 命令基础上, 增加了\verb|\bibauthorfont|、\verb|\bibtitlefont|、\verb|\bibpubfont| 等命令用于控制文献部分著录项的格式,比如作者,标题,出版项等。增加了\verb|\SlashFont|用于控制斜杠的字体。 具体用法见例\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}%\rmfamily %\urlstyle{sf} %\def\UrlFont{\bfseries} %斜杠的字体,比如[J/OL]或析出文献符号//中的斜杠 \def\SlashFont{\ttfamily}%\rmfamily等 \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} \paragraph{\heiti 文献表竖直间距控制} 文献表各条目之间的竖直间距控制如例\ref{eg:biblist:vspace}所示。注意,这些竖直间距设置不是行距设置,而是行距基础上附加设置,行距默认采用正文的设置,若要局部调整参考文献的行距,则在局部编组中采用linespread命令或者调整 baselinestretch 实现。此外,还可以调整方括号和圆括号的竖直位置,使其与使用无基线以下部分字体的文本相配合。 \begin{example}{文献表竖直间距控制}{eg:biblist:vspace} \begin{texlist} % 竖直间距的控制 \setlength{\bibitemsep}{0ex} \setlength{\bibnamesep}{0ex} \setlength{\bibinitsep}{0ex} % 调整方括号和圆括号的竖直位置 \setlength{\BracketLift}{0ex} \end{texlist} \end{example} \paragraph{\heiti 文献表水平间距(缩进)控制} 增加了尺寸\verb|\bibitemindent| 用于控制参考文献条目在文献表中的缩进, 其意义与 list 环境中 \verb|\itemindent| 相同。 文献表的水平缩进控制,两种编制方式下是不同的,调整方法见例\ref{eg:biblist:hspace}。 \textbf{(a)} 对于\emph{著者-出版年}制文献表 bibitemindent表示 \emph{一条文献中第一行相对后面各行的缩进},bibhang 表示\emph{页边到文献各行起始位置的距离}。因此要调整缩进则直接设置这两尺寸。 当使用著者-出版年样式又需要使用顺序编码数字标签的文献表时(此时使用gbalign选项),缩进方式与顺序编码制文献表类似,但又略有差异。 数字标签盒子默认宽度为2em,可以调整biblabelextend来增大或缩小(使用正或负的长度)该宽度,数字标签的盒子与文献内容之间的间距为4.5pt,通过直接设置biblabelsep尺寸来调整。 \textbf{(b)} 对于\emph{顺序编码}制文献表 由于存在数字标签,且其宽度与参考文献数量相关,所以这个宽度是动态变化的,不能提前设定,而是在文献表生成时给出,所以调整缩进需要根据文献表输出环境的情况做针对性处理。 顺序编码样式使用了两类输出环境,所以设定选项也区分两类: \begin{itemize} \item 一是采用list环境的文献表,即设置gbalign=left、right、center时(即顺序编码标签是左对齐、右对齐和居中对齐的情况)。此时需要调整的尺寸包括三个:biblabelsep,bibitemindent,biblabelextend。 \hspace{2em}此时的文献表环境中,数字标签盒子默认宽度为labelnumberwidth,由biblatex根据文献数量自动计算后设定,因此改变缩进主要通过调整biblabelsep和bibitemindent两个尺寸来实现。biblabelsep设置数字标签盒子与文献内容之间的间距。bibitemindent设置第一行相对后面其它行的缩进,默认情况下bibitemindent为0pt,则一条文献内所有行缩进相同,若bibitemindent>0pt则第一行相比后面各行缩进,若bibitemindent<0pt则后面各行相比第一行缩进。 \hspace{2em}顺序编码样式下bibitemindent与bibhang的意义与著者-出版年制下相同,但由于数字标签盒子的存在,所以页边到各行起始位置的距离bibhang=labelnumberwidth +biblabelsep -bibitemindent。 当采用某些字体导致默认计算的标签宽度不足时,可以设置biblabelextend尺寸,来增加labelnumberwidth的宽度避免缩进格式产生问题,使得:bibhang=labelnumberwidth +biblabelextend +biblabelsep -bibitemindent。默认情况下biblabelextend尺寸为0pt。 \item 二是采用正常段落环境的文献表,即设置gbalign=gb7714-2015时(即项对齐情况,每条文献严格按从左到右的顺序输出,顺序数字标签宽度等于实际宽度,文献内容与其间隔biblabelsep)。此时需要调整的尺寸包括两个:biblabelsep,bibitemindent。 \hspace{2em}此时数字标签盒子默认宽度根据标签实际宽度自动设定,因此不存在数字标签盒子宽度不足的情况,因而无需设置biblabelextend尺寸。数字标签盒子与文献内容之间的间距可通过调整biblabelsep设置。\emph{每条参考文献第二行开始的缩进距离}通过调整bibitemindent尺寸设置,bibitemindent默认为0pt,则一条文献内所有行缩进相同,若bibitemindent>0pt则第一行相比后面各行缩进,若bibitemindent<0pt则后面各行相比第一行缩进。 \end{itemize} \begin{example}{文献表水平缩进控制}{eg:biblist:hspace} \begin{texlist} % % 【著者-出版年制】文献表缩进控制 \setlength{\bibitemindent}{0em} % bibitemindent表示一条文献中第一行相对后面各行的缩进 \setlength{\bibhang}{0pt} % 著者-出版年制中 bibhang 表示的各行起始位置到页边的距离 % % 【顺序编码制】文献表缩进控制 % 调整顺序标签与文献内容的间距 \setlength{\biblabelsep}{2mm} \setlength{\bibitemindent}{0pt} \setlength{\biblabelextend}{0pt} \end{texlist} \end{example} \textbf{(c)} 其它形式的文献表 除了使用这种段落形式的文献表外,也有生成\emph{表格文献表}的需求,即把文献表放到一个表格里面,要求每一条文献占据表格的一行。这也是能实现的,具体参考我的博客文章 \href{https://blog.csdn.net/xenonhu/article/details/121696116}{latex中生成表格形式的参考文献表}。 %% 调整各条文献的缩进: %%-1-----gbalign=left、right、center时,重定义 bibenvironment %\defbibenvironment{bibliography}%修改对齐环境-调整缩进 % {\list % {\printtext[labelnumberwidth]{% % \printfield{labelprefix}% % \printfield{labelnumber}}} %{%默认设置 % \setlength{\bibhang}{\biblabelsep}% % \addtolength{\bibhang}{\labelnumberwidth}% % % %%这里是所做的调整,通过设置\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}} \paragraph{\heiti 文献表中的标点或间隔符控制} 文献表中有时需要调整标点为中文的全角标点等其它形式,则需要通过不同机制下的标点(或间隔符)设置来调整。 有时通过间隔符设置直接调整,比如标题与类型标识符之间间隔符 titletypedelim; 有时则通过设置本地化字符串进行,比如and,in等本地化字符串; 有时则需要在域格式设置中进行调整,比如title,doi等域的DeclareFieldFormat格式定义。 此外,因为不同语言的存在,可能需要区分语言进行调整,比如bibrangedash等符号。 具体情况是比较复杂的,这里不再一一列举, 常见的调整方式如例\ref{eg:biblist:separator}所示。 其它一些修改示例可以参考: \href{run:./chinese-erj.bbx}{chinese-erj.bbx}, \href{run:./gb7714-CCNU.bbx}{gb7714-CCNU.bbx}, \href{run:./egthesis/thesis-uibe-numeric.tex}{thesis-uibe-numeric.tex}。各标点命令的意义详见biblatex手册。一些示例见:\url{https://github.com/TheNetAdmin/zjuthesis/issues/374}。 \begin{example}{文献表常见标点(间隔符)控制}{eg:biblist:separator} \begin{texlist} % 标点类型的控制(注意:全局字体能控制标点的字体) % 标题与文献类型表示符之间的间隔符 title[J] \DeclareDelimFormat[bib,biblist]{titletypedelim}{\space} %将页码间隔符替换会英文的短横线 \newcommand{\fttilde}{\fontspec{FreeSerif}\selectfont} \DefineBibliographyExtras{english}{\renewcommand*{\bibrangedash}{{\fttilde\textsim}}} %比如:~$\sim$\symbol{"FF5E}\symbol{"223C}\symbol{"2053}\symbol{"02DC}\symbol{"02F7} %\textsim \textbacksim \texttildebelow \texttildelow \texttilde %文献表各条文献中各单元间隔标点设置(与异步标点机制相关的) \renewcommand*{\newunitpunct}{,}%\addcomma\space %, \renewcommand*{\finentrypunct}{\iffieldequalstr{userd}{chinese}{。}{\adddot}} %姓名格式相关的标点 \DeclareDelimFormat[bib,biblist]{nameyeardelim}{,}%\addcomma\addspace \DeclareDelimFormat[bib,biblist]{multinamedelim}{,}%[bib,biblist] \DeclareDelimFormat[bib,biblist]{finalnamedelim}{,} \DeclareDelimFormat[bib,biblist]{andothersdelim}{,} %姓名内部的相关标点,包括如下等设置 %注意这类设置与gbnamefmt选项相关,不同的选项值对应不同的gb...localset %包括:gbcaselocalset,gbpinyinlocalset,gbquanpinlocalset,gbfullnamelocalset %如果是familyahead,givenahead选项,则直接使用内部的重设命令即可。 %除了如下命令外还有其它设置,有需要可以查biblatex文档 \def\gbcaselocalset{% \renewcommand*{\revsdnamepunct}{,}%% \renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉 \renewrobustcmd*{\bibinithyphendelim}{}%.\mbox{-} \renewrobustcmd*{\bibnamedelima}{} %%全拼名后的标点\mbox{-} \renewrobustcmd*{\bibnamedelimi}{} %名缩写点后的标点,Initials in the bib file \renewrobustcmd*{\bibinitdelim}{} %名缩写点后的标点 } \end{texlist} \end{example} \subsubsection{条目著录项格式控制}\label{sec:entry:fmt} 文献表输出的格式即参考文献著录样式,除了各条目构成的文献表整体的格式外,还有条目内部的格式可以控制,包括:条目内部各个项(称为著录项); 项之间或内部的内容、标点、字体和颜色等。其中标点字体颜色等的修改已经部分包含在前一小节介绍的接口中,而更为复杂的著录项修改则需要通过域格式的修改来实现,前面介绍的接口实际就是定义在这些域格式中。 一些简单的域格式修改如例\ref{eg:bib:fieldsetlocal}所示,其中将期刊文献的volume域的格式设置为粗体,将会议论文的日期设置为粗体。 \begin{example}{域格式的局部调整示例}{eg:bib:fieldsetlocal} \begin{texlist} %期刊文献的卷加粗 \DeclareFieldFormat[article,periodical]{volume}{\textbf{#1}} %会议论文年份加粗 \DeclareFieldFormat[inproceedings]{date}{\mkbibbold{#1}} \end{texlist} \end{example} 值得注意的是,由于本样式包已经根据常见需求定义了很多著录项相关的格式控制,因此用户往往不需要关注域格式的定义,而通常只要使用前面介绍的接口和选项就能大体满足要求。 可用选项除了样式包提供的选项外,也包括 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 时的文献表,可以看到作者姓名、序号标签、标题超链接的设置。 图\ref{fig:content:fmtb}给出了选项设置为 style=gb7714-2015ms, gbnamefmt=lowercase, gbpub=false, gbtitlelink=true, gbstyle=false, sorting=nyt 时的文献表,可以看到作者姓名、标题超链接、中英文不同文献格式、文献排序的设置。 图\ref{fig:content:fmtc}为选项和本地化字符串如例\ref{eg:localstr:diff}设置时的引用标注和文献表,注意其中引用标注和文献表中的不同本地化字符串输出效果,引用标注中英文作者和中文作者缩略词的不同。这是中科院大学资环类学位论文的要求格式,可以看到尽管有些特殊,但通过选项设置和本地化字符串设置也能实现。 \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} \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} \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值或计数器值进行设置,而可能需要调整选项对应的宏的内容,因此复杂度会明显提升,如果不是非常必要,建议不要去局部化重设这些选项的所对应的格式。 除了选项提供的接口外,著录项和著录项之间的格式设置,可以使用前述介绍过的命令或者域格式来具体不调整,只要相关的设置命令不限制一定要在导言区中,就可以局部化调整。比如前面设置volume为粗体的调整,就可以在不同的refsection做不同形式的调整。 示例见\href{run:./example/opt-gbannote.tex}{opt-gbannote.tex}。 \end{enumerate} 实际上,全局格式调整和局部格式调整本质上是一致的,所以文献样式中几乎所有的格式设置都可以做局部化处理,借鉴其高层或底层的实现总能找到合适的方式来实现局部化。当然,面向全局样式设计的全局格式设置,会因为问题和要求的不同,在文献表、条目、著录项等不同层面有一些深入设计,所以局部格式调整要考虑全局设计中的不同的实现作区分处理。 关于样式中的格式设置和说明请参考: \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% {biblatex高级使用方法和样式包设计实现方法}。 \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{局部定义的不同样式的文献表}\label{sec:local:biblist:set} 在一些学位论文中,除了正文后面的全局文献表外,有时需要给出攻读学位期间的学术成果,这部分内容可以直接按正文的方式写,有时也可以利用文献表的方式写,即将学术成果内容写成bibtex格式,然后利用类似生成参考文献表的方式输出。 这一局部定义的文献表可以利用不同的方式来得到,比如使用refsection分节,或者使用category/type等筛选输出指定的文献。若该文献表的格式不同于正文的文献表,那么就需要做局部调整,此时利用一些能够局部调整的选项来实现会比较方便,如果需要的话也可以引入一些其它设置来实现特殊的格式,比如论文作者加粗等。例\ref{eg:resume:localset}给出了一个简单示例,其中故意做了一些局部设置,使用时需注意局部选项设置和数据注解与bib文件内容的配合。 \begin{example}{为研究成果表局部设置格式}{eg:resume:localset} \begin{texlist} \begin{filecontents}{resume.bib} @article{ref-1-1-Yang, author = {Yang, Y and Ren, T L and Zhang, L T and others}, title = {Miniature microphone with silicon-based ferroelectric thin films}, journal = {Integrated Ferroelectrics}, date = {2003}, pages = {229-235}, volume = {52}, annotation = {SCI 收录, 检索号:758FZ}, AUTHOR+an={1=thesisauthor}, OPTIONS = {maxbibnames=1,minbibnames=1} } @article{ref-2-1-杨轶, author = {杨轶 and 张宁欣 and 任天令 and others}, title = {硅基铁电微声学器件中薄膜残余应力的研究}, journal = {中国机械工程}, pages= {1289-1291}, date = {2005}, volume = {16}, number ={14}, annotation ={EI 收录, 检索号:0534931 2907}, AUTHOR+an={1=thesisauthor} } @patent{ref-8-1-任天令, author = {任天令 and 杨轶 and 朱一平 and others}, title = {硅基铁电微声学传感器畴极化区域控制和电极连接的方法}, number ={中国, CN1602118A}, annotation = {中国专利公开号.}, } @patent{ref-9-1-Ren, author = {Ren, T L and Yang, Y and Zhu, Y P and others}, title = {Piezoelectric micro acoustic sensor based on ferroelectric materials}, number ={USA, No.11/215, 102}, annotation = {美国发明专利申请号.}, } \end{filecontents} %导言区 %去掉文献Zhang2007-500-503的usera域 \delEntryField{Zhang2007-500-503}{usera} %在第1个refsection中去掉article类的文献标识符 %利用AtEveryBibitem在对refsection和entrytype判断后局部做设置 \AtEveryBibitem{% \ifnumequal{\value{refsection}}{1} {% \ifentrytype{article}{\settoggle{bbx:gbtype}{false}}{\settoggle{bbx:gbtype}{true}}% }% {}% } %正文区 \begin{refsection}[resume.bib] \nocite{ref-8-1-任天令,ref-9-1-Ren}% \printbibliography[heading=subbibliography,title={研究成果}] \end{refsection} \begin{refsection}[ref/resume.bib] \settoggle{bbx:gbtype}{false}%局部设置不输出文献类型和载体标识符 \settoggle{bbx:gbannote}{true}%局部设置输出附加的annote/annotation信息 \setcounter{gbnamefmtcase}{1}%局部设置作者的格式为familyahead格式 \makeatletter \renewcommand*{\mkbibnamegiven}[1]{%通过作者注释(AUTHOR+an)局部调整作者的格式需与bib配合 \ifitemannotation{thesisauthor} {\ifbibliography{\textcolor{blue}{\textbf{#1}}}{#1}}% {#1}\ifbibliography{\ifitemannotation{corresponding}{\textsuperscript{*}}{}}{}% } \renewcommand*{\mkbibnamefamily}[1]{% \ifitemannotation{thesisauthor} {\ifbibliography{\textcolor{blue}{\textbf{#1}}}{#1}} {#1}} \def\blx@maxbibnames{2} %局部调整作者数量,bib文件中加入选项也可以调整 \def\blx@minbibnames{2} %\defcounter{gbbiblocalcase}{1} %局部强迫中文本地化字符串 %\defcounter{gbbiblocalcase}{2} %局部强迫英文本地化字符串 \setlocalbibstring{andotherscn}{et al.} %另一种调整方式 \setlocalbibstring{andothers}{等} \makeatother \nocite{ref-1-1-Yang,ref-2-1-杨轶} \setlength{\biblabelsep}{12pt} \printbibliography[heading=subbibliography,title={发表的学术论文}] %发表和录用的合在一起 \end{refsection} \end{texlist} \end{example} 其它示例可以参考:\href{https://blog.csdn.net/xenonhu/article/details/120853247}{修改指定作者的格式来突出显示},nudtpaper,BIThesis等。 测试文档见\href{run:example/test-resume.tex}{test-resume.tex}。 \subsubsection{完全自定义的条目内容样式} 完全自定义的条目内容样式分两类: 一类是对已知类型文献的做针对性的调整。 比如上交图书馆要求 arXiv 文献使用 [EB/OL] 而 [J] 类型,要求的著录格式如下: \begin{texlist} 主要责任者.题名:其他题名信息[EB/OL].预印本平台:预印本编号(更新或修改日期)[引用日期].获取和访问路径 \end{texlist} 若直接使用 arXiv 网站导出的bib信息,则文献类型是misc,通常无法生成需要的格式,此时我们可以arXiv文献根据上述要求做自定义调整。因为 arXiv 导出的bib信息中包含archivePrefix=\{arXiv\}的特殊域,该域在biber处理后还会转换为eprinttype域,所以可以作为识别的关键。由于 arXiv 网站导出的bib信息中不含有网址,访问日期等信息,也可以通过sourcemap批量添加。因此我们自定义的方式如例\ref{eg:arXiv:localset}所示,如此处理在不影响其它文献的情况下可以生成arXiv 文献的专门格式。 \begin{example}{arXiv 文献的特殊格式定制}{eg:arXiv:localset} \begin{texlist} %自动添加一些信息 \DeclareStyleSourcemap{ \maps[datatype=bibtex]{ \map[overwrite]{ \pertype{misc} \step[fieldsource=archivePrefix,match=arXiv,final] \step[fieldset=usera,fieldvalue={EB}] \step[fieldset=primaryClass,fieldvalue={}] \step[fieldset=url,fieldvalue={https://arxiv.org/abs/}] \step[fieldsource=eprint] \step[fieldset=url,origfieldval, append] \step[fieldset=urldate,fieldvalue={2023-02-03}] } } } %添加更新日期 \renewbibmacro*{doi+eprint+url}{% \iftoggle{bbx:eprint} {\iffieldundef{eprint}{}{\newunit\usebibmacro{eprint}}} {}% \iffieldundef{eprinttype}{}%%注意:archivePrefix映射成了eprinttype {\iffieldequalstr{eprinttype}{arXiv}% {\mkbibparens{\usebibmacro{newsdate}}}{}}% \iftoggle{bbx:url} {\usebibmacro{url+urldate}} {} \newunit\newblock \iftoggle{bbx:doi} {\printfield{doi}} {}} % % 备选类型驱动 % % 利用biblatex的misc驱动 \DeclareBibliographyDriver{misc}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}% \usebibmacro{title}% \newunit\newblock \printfield{howpublished}% \newunit\newblock \printfield{type}% \newunit \printfield{version}% \newunit \printfield{note}% \newunit\newblock \iffieldundef{eprinttype}{\usebibmacro{institution+location+date}}% {}%注意:archivePrefix映射成了eprinttype \usebibmacro{doi+eprint+url}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{annotation}\usebibmacro{finentry}} \end{texlist} \end{example} 第二类则是不完全(或无规范)的自定义输出,主要用于输出部分参考文献信息。这时可以采用文献缩略信息打印的方法实现。比如只输出题名信息如例\ref{eg:partial:info}所示。 \begin{example}{部分文献信息自定义输出}{eg:partial:info} \begin{texlist} %定义驱动 \DeclareBibliographyDriver{titlexample}{% \usebibmacro{begentry}% \iffieldundef{title}{\usebibmacro{journal+issuetitle}}{\usebibmacro{title}} \usebibmacro{finentry} } %定义环境 \defbibenvironment{exampleenv} {\list {示例\printfield{labelnumber}:\space} {\setlength{\labelwidth}{1cm}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}% \renewcommand*{\makelabel}[1]{##1\hss}}} {\endlist} {\item} %正文中 \subsection{题名} \begin{refsection} \nocite{王夫之的诠释--} \nocite{张子正蒙注--} \nocite{化学动力学和反应器原理--} \nocite{袖珍神学--} \nocite{北京师范大学学报--} \nocite{Gasesinsea--} \nocite{jmath--} \printbiblist[title={题名示例},env=exampleenv]{titlexamplea} \end{refsection} \end{texlist} \end{example} 更多的实现方法见 \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{多语言混合文献表}\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以上版本中,例\ref{eg:setforbilangentry}的作者年制标注标签会是“易仕和,等,2013”,注意到其中的逗号是中文全角逗号,与其它标签的英文逗号的存在差异,正因为此,该方法并没有完美解决问题。} \bc{由于顺序编码制使用的是数字标签,前述的问题对于顺序编码制并不存在。而作者年制中的标签问题,可以采用下面的静态条目集方法和关联(related)方法来解决。} 静态方法是在bib源文件中给出条目集(set)并使用biber后端进行解析,条目的域信息定义方法如下: %当使用bibtex后端时,则需要进一步设置,具体参考biblatex宏包说明文档。 \begin{example}{设置set条目集用于双语文献的静态方法}{eg:set:static} \begin{texlist} @Set{set1, entryset = {entrykey1,entrykey2,entrykey3}, } %如果要达到上例动态设置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|\defdblanentry|和一个等价命令\verb|\defdoublelangentry|来实现,例如: \begin{example}{设置关联条目的动态方法}{eg:related:dynamic} \begin{texlist} \defdoublelangentry{易仕和2013--}{Yi2013--} \end{texlist} \end{example} 使用该命令后,可以引用主条目“易仕和2013--”生成双语文献。 但要注意由于\verb|\DeclareStyleSourcemap|命令只能在导言区中使用, 因此\verb|\defdblanentry|或\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}。 \paragraph{\heiti 双语文献表的格式调整} 不同期刊对于双语文献表可能有不同的格式要求,主要是附加一些信息,修改一些标点,或者调换中英文的顺序等。例\ref{eg:refdblan:fmt}给出的一个简单的修改示例。 \begin{example}{双语文献表的格式调整示例}{eg:refdblan:fmt} \begin{texlist} %%%%%%%%%%%%%%%%% %define double lang entry here %%%%%%%%%%%%%%%%% \defbibentryset{张敏莉2007dblan}{Zhang2007-500-503,张敏莉2007-500-503} \defdoublelangentry{Yi2013--}{易仕和2013--} %%%%%%%%%%%%%%%%% %modify delim here %%%%%%%%%%%%%%%%% %for defbibentryset \renewcommand{\entrysetpunct}{(in chinese)\newline\nobreak(} %for defdoublelangentry (biblatex <2.11) \renewcommand{\relateddelim}{(in chinese)\newline\nobreak(} %for defdoublelangentry (biblatex >=2.11) \renewcommand{\begrelateddelim}{(in chinese)\newline\nobreak(} %note the difference between defbibentryset and defdoublelangentry \DeclareBibliographyCategory{Endpuncparen} \addtocategory{Endpuncparen}{张敏莉2007-500-503,Yi2013--} \renewcommand{\finentrypunct}{\ifentrycategory{\thefield{keywords}}{Endpuncparen}{)}{\addperiod}} \apptocmd{\gbquanpinlocalset}{\renewrobustcmd*{\bibnamedelima}{\mbox{-}}}{}{} \end{texlist} \end{example} 更多的示例可以参考:\href{https://github.com/hushidong/biblatex-gb7714-2015/issues/154} {双语参考文献中note注释}。 \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{排序的逻辑和调整方法}\label{sec:sort:adj} 文献表中文献的排序通常是由处理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]。 需要注意的是:若要手动设置拼音则需要对文献表中的全部中文文献设置否则利用key域排序就会失效,而这并不是一个轻松的活,此时我们可以使用自动设置拼音的工具,详见 \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选项为该模板,来实现用户需要的排序方式。 \subsubsection{姓名中的多音字排序调整} 前一小节在介绍排序模板时,附带介绍了姓名多音字处理的一种方法,具体来说,就是人工或者利用bibmap工具为bib文件中的各个中文条目添加key域,用于指定中文的多音字的拼音,从而使排序时使用这个在key域指定的拼音进行排序。 为避免这一添加拼音到key域的操作,这里提供另一种可能更为方便的方法。biber在做排序时实际上是利用 perl 的 Unicode::Collation::locale 模块,其中的Pinyin.pm提供了汉字的拼音顺序,对该文件做临时的修改,可以调整多音字的顺序。 因为在参考文献排序中通常会使用字的姓名音,所以我们对这个文件做非正式的修改,并放到github上(\href{https://github.com/hushidong/biblatex-gb7714-2015/files/11147697/Pinyin-modified-zhai.zip}{Pinyin.zip}),若用户需要正确的姓的多音字排序,那么只要用该文件替换biber临时工作目录中的文件即可。 %注意:目前该文件只修改了“曾”“沈”两个字,而“翟”“仇”等没有做修改,若用户有需求后面再增加。 通常biber在第一次运行的时候,会构建一个依赖目录,这也是biber的临时工作路径,而所有的依赖文件就在其中。 在windows下通常会在临时目录temp下构建类似\verb|par-/cache-|的目录(其它系统也是类似命名,可以搜索一下),所有的依赖包括Pinyin.pm都会在其内部,找到并替换即可(Pinyin.pm文件通常在\verb|cache-\inc\lib\Unicode\Collate\CJK|下)。 \subsection{bib文件与文献条目数据} \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|inbook(note|entrysubtype=standard)& S\\ 专著中的析出文献& inbook & M\\ 连续出版物& periodical& J\\ 连续出版物的析出文献& article& J\\ 报纸析出的文献& newspaper/article(note|entrysubtype=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或newspaper表示报纸。 当然也可以不做特殊用,而只是表示杂项信息,因为报纸和标准也可以在entrysubtype域中输入new或newspaper和standard表示报纸和标准类型,亦或者直接用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|newspaper 时,判断条目类型为标准和报纸析出的文献。 \item[entrysubtype] 当其内容为standard或news|newspaper 时,判断条目类型为标准和报纸析出的文献。 \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} \subsection{其它事项}\label{sec:pkg:hints} \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{itemize} \item 使用简单。代码结构很简单,格式控制很简单,功能设置很简单,编译方式很简单,编译命令无限制(xelatex、pdflatex等均可)。 %使用够方便 \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})等。 \end{itemize} %上述这些优点也是笔者决定编写符合GB/T 7714-2015标准的参考文献样式文件的原因之一。 \subsubsection{文献表后向超链接功能} 文献表后向超链接功能由backref选项启用,如例\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} \subsubsection{biber 抽取当前引用文献到新的bib文件} 利用biber可以实现引用文献数据的bib输出,常用于从一个大的bib文件中导出仅被引用的文献信息到一个小的bib 文件,比如:要提交一个小论文附带的bib文件时。 \begin{example}{输出引用文献数据时的biber选项}{eg:bibercmd:outbibfile} \begin{texlist} biber jobname --output-format=bibtex \end{texlist} \end{example} \subsubsection{biber 控制特殊符号的tex宏的转换} 默认情况下biber为了实现更好的排序,会将一些latex提供的特殊宏转换为utf-8编码字符。但有时我们可能并不需要做这样的转换,因为转换后符号的形式就变了。由于biber依赖一个字符映射表recode\_data.xml进行转换,因此我们可以利用它来构建一个自定义映射表,从而避免biber 对一些特殊宏的转换。具体做法如下: \begin{itemize} \item 找到biber的临时工作路径中的,recode\_data.xml (搜索能找到) \item 复制一个到其它位置,并定义为,比如\verb|c:\recodeudf.xml| \item 打开该文件,并找到textquotesingle那一项删除,将所有的set修改为special,并保存 \item 编译的时候,xelatex正常编译,biber这一步则使用命令: \begin{example}{使用自定义特殊字符宏映射表的biber选项}{eg:bibercmd:charmap} \begin{texlist} biber jobname.bcf --recodedata=c:\recodeudf.xml --decodecharsset=special \end{texlist} \end{example} \end{itemize} \subsubsection{不同tex引擎下的编译方式} 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}|,因为参考文献entrykey用中文时,bbl中会包含中文的entrykey,所以pdflatex编译时ctex宏包对中文的附加处理会让biblatex读入bbl进行排序时会报错,但若忽略错误也能正确输出参考文献,但正文会有额外输出。 当文档使用其他编码时,可以利用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 \subsubsection{容易出现的错误和解决方式} \begin{itemize} \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 域设置为正确的语言(比如设置成:chinese,english,russian,japanese等),详见\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 由于biblatex宏包的组成比较复杂,所以当遇到具体问题时,查找具体命令的代码会比较麻烦。出现问题首先可以从biblatex-gb7714-2015,biblatex-solution-to-latex-bibliography里面查找说明。若没有则可以从github上的readme,wiki,issue里面查找问题,当找不到解决方案可以提issue。 若要自己去解决问题,则可以从如下查找顺序来研究。 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 命令来获取命令的定义。 \end{itemize} \subsubsection{其它说明} %宏包设计方法说明 关于宏包的设计说明,读者可以直接查看bbx,cbx文件,其中有详细的注释说明。 更一般的思路性质的设计与实现方法以及涉及到的一些biblatex功能介绍,以项目示例的形式总结在 \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}{\LaTeX 文档中文参考文献的biblatex解决方案}中,本文档不再重复给出,有需要了解的用户参考。 关于其它biblatex中文样式, 目前符合 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 本文档根据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} \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{需要注意的是,当文献没有作者(责任制),但有编者、译者时,可以利用编者和译者替代责任者,这是需要使用选项useeditor或usetranslator。当前默认使用该上述选项,若不使用则可能出现标点问题。文献条目比如:} \begin{texlist} @Book{周鲁卫2011--, translator = {周鲁卫}, title = {软物质物理导论}, year = {2011}, publisher = {复旦大学出版社}, address = {上海}, pages = {1}, } \end{texlist} \qd{由于biblatex不支持standard条目类型,所以“标准”类型可以用book或inbook替代,但使用entrysubtype或note域等于standard作为一个区分,当entrysubtype或note域数据存在且内容等于standard时,就将其作为“标准”文献进行处理,其文献类型标识用S表示。这里为什么使用entrysubtype或note域而不是type域和keywords域,是因为考虑到entrysubtype通常标准样式不使用,而note域一般情况下没有什么特殊意义,使用它不会导致冲突,而type域在biblatex标准样式中没有被book和article条目类型当作支持的域,对于支持该域的条目比如thesis,type域又有特殊的意义,是用来区分master和doctor的,而keywords域在biblatex-gb7714-2015中用来存放entrykey以实现一些特殊的判断,所以也不便于使用它。} \subsubsection{标准/standard}\label{sec:standard} “标准”(standard)作为一种文献条目类型biblatex并不支持,因此直接利用book或inbook类型加entrysubtype或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域的信息中起止值之间应用-分隔。} 需要注意:当gbpub选项为false时,不使用起止范围的卷期,会导致只有起始范围时不输出后面的-字符,若要使其与国标完全一致,则赢使用gbpub=true选项。 \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表示,但使用entrysubtype或note域等于news|newspaper作为一个区分,当note域数据存在且内容等于news或newspaper时,就将其作为报纸的析出文献进行处理。报纸文献类型标识用N表示,报纸的版次用number域描述。} \subsubsection{报纸析出的文献/newspaper}\label{sec:standard} biblatex没有将报纸的析出文献(newspaper)作为一种文献条目类型,因此可以直接利用article类型加entrysubtype或note域等于news|newspaper代替,或者也可以直接使用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/pages)[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 进一步完善上一节提到的问题。 \item biblatex宏包完全用tex宏来定义参考文献样式的带来的一个遗憾是在一个文档内切换使用多种不同的样式不是很方便,尽管本宏包提供了gb7714-2015mx样式可以在一个文档内使用国标的顺序编码制和作者年制切换。但若在使用国标样式的同时又要使用类似APA 等样式则还不能直接切换,目前解决思路是通过局部定制样式来实现,即在局部实现一套APA 的样式,类似于前面第\ref{sec:local:biblist:set}小节提过的一种情况:在文档末尾使用国标样式,但在成果列表中使用另一种样式。显然这种实现方式目前看效果是可以的。对于APA等其它样式来说,也许我们也不用完全按标准去实现,只要利用局部定制实现一个大概就可以了,但即便如此也还需要对这些样式标准做一定的了解。 \end{enumerate} \section{更新历史} \input{example/updatehistory.tex} % \input{example/updatehistoryold.tex} % \end{document}