hushidong / biblatex-gb7714-2015

A biblatex implementation of the GB/T7714-2015 bibliography style || GB/T 7714-2015 参考文献著录和标注的biblatex样式包
763 stars 84 forks source link
biblatex biblatex-style bibliography-style gbt-7714-1987 gbt-7714-2005 gbt-7714-2015 package

Date of last change: 2024-05-15 to version v1.1r

biblatex-gb7714-2015: a biblatex style package


使用入门 |==| 说明文档 |==| WIKI

Introduction

Maintainer: huzhenzhen hzzmail@163.com

Homepage: https://github.com/hushidong/biblatex-gb7714-2015

ctan-pkg: https://www.ctan.org/pkg/biblatex-gb7714-2015

License: LaTeX Project Public License 1.3c or later

A biblatex implementation of the GB/T 7714-2015 bibliography style for Chinese users

The biblatex-gb7714-2015 package provides an implementation of the bibliography style of the GB/T 7714-2015 bibliography style. This implementation follows GB/T 7714-2015 standard, and can be used simply by loading biblatex with the appropriate option

biblatex-gb7714-2015 宏包是中文参考文献著录/标注标准 GB/T 7714-2015 的 biblatex 实现。它本质上是一个样式包,在 tex 文档中配合 biblatex 宏包使用,以生成满足《GB/T 7714-2015 信息与文献 参考文献著录规则》要求的参考文献。 宏包主要提供两种编制样式: 一、顺序编码制(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)等。 宏包除了具备 biblatex 提供的不同于传统基于 bibtex 的参考文献解决方案外,还具有如下特点:

简单使用说明见:使用入门


Need to do:

* 注意:ms.bbx 样式引入内容时需要特别注意空格的引入
* 注意:mx.cbx 样式没有更新一些新的设置(比如 2 篇文献就压缩等),若有需要可以参考 15.cbx 和 15ay.cbx 修改。
* 应该说经过这些年的使用,很多 corner case 已经处理过了,但还是可能会存在一些,特别是 ms 和 mx 两个样式使用的少。
* special characters in all fields?
* entry without author: the delimiter between title and year?
* TEST FOR texlive 2015,2016,2017
* 标注中包围符号的定义[]、()、圆圈、方框等,有些命令没有去修改。

Applications

Related Links


Tutorial/使用入门

0. Package Usage/宏包加载方式

样式包配合 biblatex 使用,即在 biblatex 调用时加载样式包:

\usepackage[backend=biber,style=gb7714-2015]{biblatex}
\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}
% 设置 gbstyle=false,中文文献使用 GB/T 7714-2015 著录格式,而其它语言文献使用 biblatex 标准样式
\usepackage[backend=biber,style=gb7714-2015ms,gbstyle=false]{biblatex}
% gb7714-2015mx 默认使用顺序编码制样式
\usepackage[backend=biber,style=gb7714-2015mx]{biblatex}
% 如需在某一参考文件分节使用著者年份制样式,比如第 2 个 refsection 中使用时,则在导言区设置:
\setaystylesection{2}
% 设置 gbalign 选项以改变文献表序号标签对齐方式,
% 设置 gbpub=false 取消缺省出版项自填补信息,比如:
\usepackage[backend=biber,style=gb7714-2015,gbalign=gb7714-2015,gbpub=false]{biblatex}

更多宏包选项的说明见:biblatex-gb7714-2015.pdf

宏包加载的完整文档示例见:tex 文档一般结构

1. TeX source file/tex文档一般结构

注意其中加载 biblatex 宏包的代码:

\documentclass{article} % 文档类
% 导言区开始:
\usepackage{ctex} % 加载 ctex 宏包,中文支持

\usepackage{geometry} % 加载 geometry 宏包,定义版面

\usepackage[colorlinks=true,pdfstartview=FitH,%
linkcolor=blue,anchorcolor=violet,citecolor=magenta]{hyperref} % 加载 hyperref 宏包,使用超链接

\usepackage[backend=biber,bibstyle=gb7714-2015,%nature,% 加载 biblatex 宏包,使用参考文献
citestyle=gb7714-2015%,backref=true % 其中后端 backend 使用 biber
]{biblatex} % 标注(引用)样式 citestyle,著录样式 bibstyle 都采用 gb7714-2015 样式

\usepackage{filecontents}
\begin{filecontents}{egbibdata.bib}
@Book{Peebles2001-100-100,
  Title                    = {Probability, random variable, and random signal Principles and \LaTeX{}},
  Address                  = {New York},
  Author                   = {von Peebles, Jr., P. Z.},
  Edition                  = {4},
  Pages                    = {100},
  Publisher                = {McGraw-Hill},
  Year                     = {2001}
}

@Book{蔡敏2006--,
  Title                    = {UML基础和Rose建模教程},
  Address                  = {北京},
  Author                   = {蔡敏 and 徐慧慧 and 黄柄强},
  Publisher                = {人民邮电出版社},
  Year                     = {2006},
  Month                    = {1}
}
\end{filecontents}

\addbibresource[location=local]{egbibdata.bib}%biblatex宏包的参考文献数据源加载方式

\begin{document} % 正文区开始:

% 正文内容,引用参考文献

一、基本用法

见文献\cite{Peebles2001-100-100}\\
见文献\parencite{Peebles2001-100-100}\\
见文献\citet{Peebles2001-100-100}\\
见文献\citep{Peebles2001-100-100}\\

二、详细用法

1. 不带页码的引用(顺序编码制上标,方括号包围;作者年制行内,括号包围):\\
    见文献\cite{Peebles2001-100-100}\\
    见文献\upcite{Peebles2001-100-100}\\
    见文献\supercite{Peebles2001-100-100}

2. 不带页码的引用(顺序编码制非上标,方括号包围;作者年制行内,括号包围):\\
    见文献\parencite{Peebles2001-100-100}\\
    见文献\citep{Peebles2001-100-100}

3. 带页码的引用(标准命令,默认样式; 增加命令,GB/T 7714-2015样式):\\
    见文献\cite[见][49页]{蔡敏2006--}\\
    见文献\parencite[见][49页]{Peebles2001-100-100}\\
    见文献\pagescite{Peebles2001-100-100}\\
    见文献\pagescite[201-301]{Peebles2001-100-100}

4. 顺序编码制中同时输出作者和顺序编码标签,比如:\\
    见\citet{蔡敏2006--}(顺序编码标签上标)\\
    见\authornumcite{蔡敏2006--}\\
    见\textcite{蔡敏2006--} (顺序编码标签不上标)
    见\citeauthor{蔡敏2006--}\cite{蔡敏2006--}\\

5. 作者年制文中已有作者还需要年份和页码(顺序编码制与pagescite作用相同,作者年制年份行内页码上标):\\
    见蔡敏\yearpagescite[][205]{蔡敏2006--}和Peebles\yearpagescite[][15]{Peebles2001-100-100}

6. 作者年制文中已有作者只需要年份(顺序编码制与pagescite作用相同,作者年制年份行内):\\
    见赵耀东\yearcite{蔡敏2006--}\\
    见赵耀东(\cite*{蔡敏2006--})\\
    见赵耀东(\citeyear{蔡敏2006--})

7. 作者年制中由标注命令给出作者年份信息,作者以主语方式作为正文内容:\\
    见\cite{蔡敏2006--}\\
    见\parencite{蔡敏2006--}\\
    见\textcite{蔡敏2006--}\\
    见\citet{蔡敏2006--}\\
    见\citep{蔡敏2006--}\\

8. 在页脚中引用和打印文献表:\\
    见文献\footnote{在脚注中引用\footcite{蔡敏2006--}}\\
    见文献\footfullcite{蔡敏2006--}

% 打印参考文献表
\printbibliography[heading=bibliography,title=参考文献]
\end{document}

2. Compile method/文档编译方式

xelatex jobname.tex
biber jobname
xelatex jobname.tex
xelatex jobname.tex

或者

latexmk -xelatex jobname.tex

编译引擎使用 lualatex 也是可以的,只要该引擎编译时 ctex 宏包能够正确支持中文。

3. Recommended Environment/推荐使用环境

4. Common Questions/常见问题

4.1 Installation and Use/安装和使用

(1)在导言区加载biblatex宏包,并使用gb7714-2015样式:

\usepackage[backend=biber,style=gb7714-2015]{biblatex}

(2)正文中引用参考文献:

见文献 \cite{referencbibtexkey}

(3)在需要的地方打印参考文献表:

\printbibliography

更直接的例子见前述的 tex 源文档

biblatex-gb7714-2015 宏包是基于 biblatex 的样式宏包,目前 TeX Live,MiKTeX都已收录,因此可以直接使用,一般不需要安装。

如果使用时,系统提示找不 gb7714-2015.bbx 或 gb7714-2015ay.bbx 文件的错误,说明当前 TeX 系统未安装 biblatex-gb7714-2015 样式包,这时需要安装它。

最简单的方法是从本项目源码中下载 gb7714-2015.bbx、gb7714-2015ay.bbx、gb7714-2015.cbx、gb7714-2015ay.cbx 四个文件放到你要编译的主文档所在目录,如果需要使用 gbk 编码,则还需复制 gb7714-2015-gbk.def 文件。对于已经安装的用户需要更新到最新版,也可以下载这些文件替换系统已经安装的文件。

因为宏包的功能不断增加和完善,当在 tex 源文档中,使用新版中的一些选项时,而系统中的 biblatex-gb7714-2015 宏包是旧版时,就会出现gb****选项未定义的错误。解决方法就是更新 biblatex-gb7714-2015 宏包。更新方法见上一个问题。

可能有三个原因:

(1) 辅助文件没有清理导致,当采用 caspervector 样式时编译产生的辅助文件中可能带有该样式的一些特有信息,由此产生一些不兼容。因此需要的操作是,清除辅助文件,然后再进行编译。清除命令为 (下面的命令是 Windows 下的,linux 下的是类似的只需把删除命令换成rm -f):

del /q *.aux *.bbl *.blg *.log *.out *.toc *.bcf *.xml *.synctex *.nlo *.nls *.bak *.ind *.idx *.ilg *.lof *.lot *.ent-x *.tmp *.ltx *.los *.lol *.loc *.listing *.gz *.synctex(busy) *.nav *.snm *.vrb *.fls *.xdv *.fdb_latexmk

(2) biblatex-gb7714-2015 版本过于陈旧,旧版本对于一些特殊情况可能考虑不全面。因此需要的操作是更新 biblatex-gb7714-2015,方法见上一个问题。

(3) 编译命令问题,通常情况下 tex 文档和 bib 文档是 utf8 编码的,因此最好采用 xelatex 编译,而不用 pdflatex。因此如果编译时用 pdflatex 出现错误,请换成 xelatex。

当编译过程出现错误时,那么检查错误的原因,并解决它。 当编译过程没有出现错误,那么很有可能是没有采用正确的命令进行文献编译,比如采用了传统的 bibtex 而不是 biber。那么采用正确的编译命令重新编译即可:

xelatex jobname.tex
biber jobname
xelatex jobname.tex

由于 biber 在第一次运行时会在缓存文件夹下创建一些二进制运行文件,如果这些文件被破坏,那么 biber 运行结果会出现莫名其妙的错误。比如: biber 运行一半就结束了,log 信息如下所示:

INFO - This is Biber 2.16
INFO - Logfile is 'thuthesis-example.blg'
INFO - Reading 'thuthesis-example.bcf'
INFO - Found 34 citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'ref/refs.bib' for section 0
INFO - LaTeX decoding ...
INFO - Found BibTeX data source 'ref/refs.bib'

这次运行中只是找到了 bib 文件,并没有下一步的处理,显然是存在问题的。

因此如果出现这种情况,可以手动删除缓存文件夹,让 biber 重新创建。这些缓存文件夹名字通常为:

par-<hex_encoded_username>/cache-*
par-<hex_encoded_username>\cache-*

在不同的系统下面,缓存文件夹的位置是不同的,可能的位置包括:

/var/folders/*/*/*/ (OSX, local GUI login shell)
/var/tmp/ (OSX (remote ssh login shell), Unix)
/tmp/ (Linux)
C:\Documents and Settings\<username>\Local Settings\Temp (Windows XP/Cyg- win)
C:\Windows\Temp (Windows)
C:\Users\<username>\AppData\Local\Temp (Windows 7/8)

也可以从运行得到的 .blg 文件或者命令 biber --cache 来找到缓存文件夹。

删除缓存文件夹操作,在 Linux 和 Mac 下可以使用如下命令操作:

rm -rf `biber --cache`

在 Windows 下,那么其实随便用个清理软件把临时文件夹清理一下就行。直接点就是找到par-<hex_encoded_username>/cache-*缓存文件夹然后删除它。

由于 ctex2.9 套装多年未更新,其中的 biblatex 宏包过于陈旧,所以需要更新 biblatex。

能用 pdflatex 进行编译。但要注意的是因为某些样式比如 authoryear 等使用了 xstring 宏包中的一些命令,所以会产生错误,但 numeric 类样式通常没有问题。这一问题在 biblatex 更新到 3.12 版本后取消 xstring 宏包后得以解决。

中文用户需要注意一些编码的问题:

utf-8 编码的文档,采用 xelatex 编译没有任何注意事项,但使用 pdflatex 编译时,需要给 ctex 宏包加载 UTF8 选项,比如 \usepackage[UTF8]{ctex} 或者在文档类加载时给出也可以比如\documentclass[[UTF8]{article},同时引用文献时使用的引用关键词应使用英文。

当文档使用其他编码时,xelatex 编译通常需要指定一个文档编码,比如 Windows 环境下的 GB2312 编码的文档需要指定 \XeTeXinputencoding "GBK",否则显示乱码。使用 pdflatex 进行编译,如果 biblatex 不能正确的处理编码问题,那么需要为其明确的指定 texencoding 和 bibencoding 选项。比如 Windows 环境下的 GB2312 编码的文档,需要指定 \usepackge[texencoding=GBK]{biblatex}

可以使用 \PassOptionsToPackage 命令来实现。,比如将 gbnamefmt=lowercase 选项传递给 biblatex,那么可以使用如下命令:

\PassOptionsToPackage{gbnamefmt=lowercase}{biblatex}

需要注意的是要使该命令生效,这条命令需要在调用 biblatex 之前出现,可以放到导言区调用 biblatex 之前,也可以放到文档类调用之前 (即 \documentclass 命令之前),比如:

\PassOptionsToPackage{gbpub=false}{biblatex}

\documentclass[twoside]{article}
\usepackage{ctex}
\usepackage[backend=biber,style=gb7714-2015,gbalign=center]{biblatex}

对页码进行正确超链接需要一个前提是,当前链接的页码是唯一的。当有两页具有相同的页码时,超链接总是链接到第一各具有该页码的页面上。比如封面页页码是 1,正文第一页页码也是 1,那么到正文第一页的反向超链接总会链接到封面页上。解决该问题就是要解决页码的唯一性问题。当页码的表示形式不是同一种时,那么也会得到正确的区分。比如封面页用罗马字母I表示,而正文第一页用阿拉伯数字1表示,那么就能得到正确的反向超链接。类似于:

\pagenumbering{roman}
\title{title}
\maketitle
\clearpage

\pagenumbering{arabic}
\section{文献表}

一般情况下文献表是按引用顺序进行排列,标签是顺序的数字,这种方式称为顺序编码制。 如果要以文献作者字母顺序排列,那么可以换一种编制方式,称为作者年制:

\usepackage[backend=biber,style=gb7714-2015ay]{biblatex}

如果要求使用顺序编码制文献表,又要以文献作者字母顺序排列,那么可以增加排序选项 sorting=nyt,意为按照姓名、年份、标题的字母顺序进行排序:

\usepackage[backend=biber,style=gb7714-2015,sorting=nyt]{biblatex}

能,有两种方式实现:

(1)通过编译时给 biber 设置选项来实现:

% 按拼音排序,biber 命令
biber -l zh__pinyin jobname
% 按笔画排序,biber 命令
biber -l zh__stroke jobname

(2)通过增加 biblatex 选项来实现(此时 biber 编译无需另加选项),比如:

\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__pinyin]{biblatex}

能,通过修改 sorting 选项实现:

\usepackage[backend=biber,style=gb7714-2015ay,sorting=gbnytd]{biblatex}

可用的选项值包括:

nty 按照姓名、标题、年份排序。
nyt 按照姓名、年份、标题排序。
nyvt 按照姓名、年份、卷数、标题排序。
anyt 按照字母标签、姓名、年份、标题排序。
anyvt 按照字母标签、姓名、年份、卷数、标题排序。
ynt 按照年份、姓名、标题排序。
ydnt 按照年份(降序)、姓名、标题排序。
none 不进行排序。所有的条目按照引用顺序处理。
gb7714-2015 以语言、作者、年份、标题、升序排列
gbnytd 以语言、作者、年份、标题、降序排列
gbynta 以语言、年份、作者、标题、升序排列
gbyntd 以语言、年份、作者、标题、降序排列

顺序编码文献著录表默认是按引用顺序排序,但可以通过设置 sorting 选项进行调整,比如 sorting=nyt 表示按作者姓名年份以及文献标题进行排序。要使中文能按拼音排序,可以设置本地化排序调整方案,即 sortlocale 选项,比如:

\usepackage[backend=biber,citestyle=gb7714-2015ay,bibstyle=gb7714-2015,sorting=nyt,sortlocale=zh__pinyin]{biblatex}

可以设置不同的标注和著录样式,比如标注样式用作者年制,而著录样式用顺序编码制,比如:

\usepackage[backend=biber,citestyle=gb7714-2015ay,bibstyle=gb7714-2015]{biblatex}

但这种情况下,文献表中的年份信息是在出版项里面的,如果要提前到作者后面,可以使用如下方式:

\usepackage[backend=biber,style=gb7714-2015ay,gbgalign=right]{biblatex}

如果要让年份信息既出现在作者后面又出现在出版项里面,那么还可以增加 mergedate 选项进行控制:

\usepackage[backend=biber,style=gb7714-2015ay,gbgalign=right,mergedate=false]{biblatex}

这种情况下,直接用 gb7714-2015ay 下的 gbgalign 选项来生成数字标签的文献表,而且可以使用 right/left/center/gb7714-2015 等不同的选项值来实现不同对齐形式的标签。

反过来如果要在文中引用是数字标签,而文献表是无数字标签的样式,那么也可以使用下面两种方式:

\usepackage[backend=biber,style=gb7714-2015,gbalign=gb7714-2015ay]{biblatex}

这种情况下,文献表中的年份信息是在出版项里面的,如果要提前到作者后面,则使用:

\usepackage[backend=biber,citestyle=gb7714-2015,bibstyle=gb7714-2015ay]{biblatex}

类似的也可以使用 mergedate 选项来控制年份的显示情况:

\usepackage[backend=biber,citestyle=gb7714-2015,bibstyle=gb7714-2015ay,mergedate=false]{biblatex}

参见 issue: 参考文献的顺序, issue90

通常不会出现问题,直接输入即可,当出现问题时可以手动调整比如修改为 \&{\LaTeX{}}

直接显示希腊字母等 unicode 字符需要字体的支持,比如 CMU Serif 等,可以在整个文档全局使用该字体,也可以仅在文献表中使用该字体,比如:

{
\newcommand{\ftcmu}{\fontspec{CMU Serif}\selectfont}
\renewcommand{\bibfont}{\ftcmu} % 设置英文字体不影响中文字体
\printbibliography
}

当然字体设置需要 fontspec 宏包的支持。

设置如下尺寸即可

% 间距的控制
\setlength{\bibitemsep}{0ex}
\setlength{\bibnamesep}{0ex}
\setlength{\bibinitsep}{0ex}

其中 itemsep 设置各条文献之间的间隔,一般够用,后面两个常在西文中使用。具体意义参考 biblatex-zh-cn

对于著者-出版年制文献表,设置如下尺寸即可:

% 文献表中各条文献的缩进控制
\setlength{\bibitemindent}{0em} % bibitemindent 表示一条文献中第一行相对后面各行的缩进
\setlength{\bibhang}{0pt} % 著者-出版年制中 bibhang 表示的各行起始位置到页边的距离     

对于顺序编码制文献表,可以采用如下方法:

由于顺序编码制存在数字标签,且其宽度与参考文献数量相关的,在 biblatex 中这个宽度是一个动态变量,不是提前设定的,而是在文献表生成时给出,所以设定缩进需要更复杂的操作。

对于采用 list 环境的文献表,即设置 gbalign=left、right、center 时,那么需要修改文献表环境来设定缩进,比如:

% 调整顺序标签与文献内容的间距
\setlength{\biblabelsep}{2mm}
% 修改对齐环境-使不缩进
\defbibenvironment{bibliography}
  {\list
     {\printtext[labelnumberwidth]{%
        \printfield{labelprefix}%
        \printfield{labelnumber}}}
     {% 这里是所做的调整,通过设置 \bibitemindent,\bibhang 调整缩进
     \addtolength{\bibitemindent}{\labelnumberwidth}%
     \addtolength{\bibitemindent}{\biblabelsep}%
     \addtolength{\bibhang}{-\labelnumberwidth} %
     \addtolength{\bibhang}{-\biblabelsep}%
     % 以下是默认的设置
     \setlength{\labelwidth}{\labelnumberwidth}%
     \setlength{\labelsep}{\biblabelsep}%
     \setlength{\leftmargin}{\bibhang}%
     \addtolength{\leftmargin}{\labelnumberwidth}%
     \setlength{\itemindent}{\bibitemindent}%
     \setlength{\itemsep}{\bibitemsep}%
     \setlength{\parsep}{\bibparsep}}%
     \renewcommand*{\makelabel}[1]{\hss##1}}
  {\endlist}
  {\item}

对于不采用 list 环境的文献表,即设置 gbalign=gb7714-2015 时,可以采用如下设定:

% 调整顺序标签与文献内容的间距
\setlength{\biblabelsep}{2mm}
% 修改对齐环境-使不缩进
\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}}

示例见:issue

通过修改如下命令实现

% 字体的控制: \textit, sl, emph-楷体, \textbf, sf-黑体, \texttt-仿宋, \textsc, md, up-宋体
% 全局字体
\renewcommand{\bibfont}{\zihao{-5}}%\fangsong
% 题名字体
\renewcommand{\bibauthorfont}{\bfseries\color{teal}}%
\renewcommand{\bibtitlefont}{\ttfamily\color{blue}}%
\renewcommand{\bibpubfont}{\itshape\color{violet}}%
% url 和 doi 字体
\def\UrlFont{\ttfamily} %\urlstyle{sf} %\def\UrlFont{\bfseries}

GB/T 7714-2015 标准实现的 bst 版本,已经由 zepinglee 开发完毕,直接使用即可。

请邮件联系 hzzmail@163.com 或在项目内发 issue 提问即可。

一般用户的话查:biblatex-gb7714-2015.pdf,biblatex-solution-to-latex-bibliography.pdf,biblatex-zh-cn.PDF。 宏包作者的话查:gb7714-2015*.C/BBX,biblatex.PDF,numeric/authoryear.c/BBX,standard.bbx,biblatex.def,biblatex.sty,english.lbx 注意别忘了 lbx 文件。

4.2 Bibliography Format/文献表著录格式

可以,latex 的列表通常用 list 来实现,因此一般列表的内容都是对齐的, 此时如果标签右对齐的,那么标签和内容等间距,但标签左侧是不对齐的,此时对应的选项为:gbalign=right。 如果标签是左对齐的,那么标签和内容的间距不相等,此时对应的选项为:gbalign=left。 如果标签是中间对齐的,那么标签的两侧的[]是对齐的,数字标签处于其中间,此时对应的选项为:gbalign=center。 如果要求标签左侧对齐,且标签与内容等间距,则必须放弃使用list,这种方式在本宏包中称为项对齐,对应选项为 gbalign=gb7714-2015, 这是 biblatex-7714-2015 的顺序编码制样式为项对齐设计了专门环境达成的,其使用方式很简单,加上响应的选项即可:

\usepackage[backend=biber,bibstyle=gb7714-2015,gbalign=gb7714-2015]{biblatex}

设置选项 gbpub 可以实现,当 gbpub=false 时,biblatex-gb7714-2015 宏包会放弃国标的要求,不使用“出版地不详”等补充信息:

\usepackage[backend=biber,bibstyle=gb7714-2015,gbpub=false]{biblatex}

能,通过设置 gbnamefmt 可以实现,默认情况下 gbnamefmt=uppercase,作者姓名字母全部大写。 当设置 gbnamefmt=lowercase 时,biblatex-gb7714-2015 宏包对于 bib 文件中的作者姓名的大小写不做改变, 这时可以在 bib 文件中手动设置想要的大小写方式。 当要实现类似 ZHAO Yu-xin 这样的拼音方式,则可以设置 gbnamefmt=pinyin:

\usepackage[backend=biber,bibstyle=gb7714-2015,gbnamefmt=lowercase]{biblatex}

可通过设置选项 gbtype=false 实现:

\usepackage[backend=biber,bibstyle=gb7714-2015,gbtype=false]{biblatex}

可通过设置选项 url=false 实现:

\usepackage[backend=biber,bibstyle=gb7714-2015,url=false]{biblatex}

可通过设置选项 doi=false 实现:

\usepackage[backend=biber,bibstyle=gb7714-2015,doi=false]{biblatex}

能,可以通过设置三个计数器的值来调整,取值范围 0 到 9999,计数器的值越大则越容易在相应的内容后断行:

\setcounter{biburlnumpenalty}{100} % 大于 0 允许在数字后面断行
\setcounter{biburlucpenalty}{100}  % 大于 0 允许在大写字母后面断行
\setcounter{biburllcpenalty}{100}  % 大于 0 允许在小写字母后面断行

biblatex 的参考文献表的换行是由 tex 的断行机制决定的,处理行(盒子)溢出就要用 tex 的方式处理:

直接使用 \sloppy 命令

{
\sloppy
\printbibliography[heading=subbibintoc,title=【参考文献】]
}

或者自己设置具体断行相关的参数

 {
 %\hyphenation{Proce-edings}
 \hyphenpenalty=5000 % 断词阈值, 值越大越不容易出现断词
 \tolerance=500      % 丑度, 10000 为最大无溢出盒子, 参考 the TeXbook 第 6 章
 \hbadness=100       % 如果丑度超过 hbadness 这一阀值, 那么就会发出警告
 \printbibliography[heading=subbibintoc,title=【参考文献】]
}

当然如果不想这么设置,可以手动的修改参考文献条目的内容,在需要换行的内容前加上-符号。 见:https://github.com/hushidong/biblatex-gb7714-2015/issues/89

通常是由一条参考文献内部不分页导致的,默认情况下希望一条参考文献条件放在一个页面内,所以在页面底部的文献可能由于放不下跑到下一页。 这种情况可以通过调整段内的分页阈值改变,即使得一条参考文献(即一个段内)更容易分页即可:

{
  \interlinepenalty=5000  % 分页阈值,越小越容易分页
 \printbibliography[heading=subbibintoc,title=【参考文献】]
}  

可通过设置选项 gbnoauthor=true 实现,注意该处理主要用在作者年制中:

\usepackage[backend=biber,bibstyle=gb7714-2015,gbnoauthor=true]{biblatex}

可通过设置选项 maxbibnamesminbibnames 实现,比如下面的设置用于显示 5 个作者:

\usepackage[backend=biber,bibstyle=gb7714-2015,maxbibnames=5,minbibnames=5]{biblatex}

可以通过重设两个分隔符来实现,分别是 multinamedelim 和 finalnamedelim。低版本的 biblatex 直接重定义命令 \multinamedelim\finalnamedelim,高版本的 biblatex 可以使用分隔符环境,这样可以在标注、文献表等不同位置直接使用不同的分隔符,而不像低版本 biblatex 那样只能在不同的位置修改局部定义。比如:

\DeclareDelimFormat[bib]{multinamedelim}{\addspace and \addspace}
\DeclareDelimFormat[bib]{finalnamedelim}{\addspace and \addspace}
\DeclareDelimFormat[cite]{multinamedelim}{\addcomma\addspace}
\DeclareDelimFormat[cite]{finalnamedelim}{\addcomma\addspace}

默认情况下,biblatex-gb7714-2015 仅对标题首字母做调整,使其变成为大写,而其他字母大小写不做处理,因此要得到想要的字母大小写格式,需要在 bib 文件输入参考文献信息时给出需要的除首字母外的其它字母的大小写格式。

若有特殊情况,需要首字母为小写,可采用如下两种方法:

(1)根据字符大小写更换命令比如

{\MakeLowercase i}FogSim title contents

(2)修改 titlecase 域格式,即将如下命令放到导言区中,放在 biblatex 宏包加载命令后面

\DeclareFieldFormat{titlecase}{\iftoggle{bbx:titlelink}{%
\iffieldundef{url}{#1}{%
\href{\thefield{url}}{#1}}}{#1}}%重设标题格式,将去除首字母大写

注意:v1.1g 版本后不再默认修改标题的字母大小写,若需要修改可以手动修改 bib 文件,若需要批量修改,可以使用 bibmap 工具。

默认情况下,biblatex-gb7714-2015 不对期刊名的字母大小写做处理, 因此需要在 bib 文件输入参考文献信息时给出需要的大小写格式。

biblatex-gb7714-2015 设计了两种多语言对照参考文献的实现方式, 一种是利用条目集的概念,另一种是利用关联条目的概念。 因此有两种方法:

(1)方法一,动态定义条目集: 在导言区或正文中定义:

\defbibentryset{易仕和,等,2013}{易仕和2013--,Yi2013--}

在正文中引用:

双语文献引用\cite{易仕和,等,2013}

(2)方法二,动态定义关联条目: 在导言区定义:

\defdoublelangentry{易仕和2013--}{Yi2013--}

在正文中引用:

双语文献引用\cite{易仕和2013--}

参考文献中日期格式主要有四种修改方式: (1) 利用 biblatex 选项全局的修改日期格式 (2) 修改日期输出宏,使根据条目类型输出不同的日期格式 (3) 修改日期输出宏,使根据具体条目输出不同的日期格式 (4) 修改参考文献信息,使当前条目原样输出需要的格式

具体示例见:biblatex 中如何修改参考文献中日期的著录格式

调整其域格式输出即可,比如:

\DeclareFieldFormat[article,periodical]{volume}{\textbf{#1}}
\DeclareFieldFormat[article,periodical]{number}{\textbf{#1}}

见:issue

4.3 Citation Format/正文引用的标注格式

可以使用不同的命令来实现上标和非上标的标签, 上标标签的命令为 \cite{bibtexkey} ,非上标标签的命令为 \parencite{bibtexkey}。 当希望上标的标签也给出国标要求的页码时,则可以使用 \cite[50-55]{bibtexkey}\pagescite[50-55]{bibtexkey} 给出指定页码 或者 \pagescite{bibtexkey} 直接使用 bib 文件中的页码。

在引用命令后面加一个没有长度的空白即可,比如:

中文字符\cite{sally_history_1985}\mbox{}中文字符

中文字符\cite{sally_history_1985}\hbox{}中文字符

中文字符\cite{sally_history_1985}\makebox{}中文字符

中文字符\cite{sally_history_1985}\hspace{0pt}中文字符

(1) 一是自动排序

宏包加载时使用:

\usepackage[backend=biber,style=gb7714-2015ay,sortcites,sorting=ynt]{biblatex}

正文中引用:

\cite{refa2010,refb2008,refc2009}

然后在文献打印前加

\newrefcontext[sorting=gb7714-2015]

(2) 二是手动给出排序

宏包加载时使用

\usepackage[backend=biber,style=gb7714-2015ay,sortcites=false]{biblatex}

引用多个文献时按照年份顺序给出引用关键字,即正文中引用:

\cite{refb2008,refc2009,refa2010}

参考 issue: citation 的顺序和 bibliography 的顺序如何不关联

可以通过将 gb7714-2015ay.cbx 中的引用的基础样式 authoryear 更换成 authoryear-comp。

可通过设置选项 maxcitenames,mincitenames 实现,比如下面的设置用于显示 5 个作者:

\usepackage[backend=biber,style=gb7714-2015ay,maxcitenames=5,mincitenames=5]{biblatex}

可通过设置选项 uniquelist=false 实现,该设置标签中的作者只会是指定的 1 个:

\usepackage[backend=biber,style=gb7714-2015ay,uniquelist=false]{biblatex}

首先设置标注标签中的作者的最大数量为 3 个:

\usepackage[backend=biber,style=gb7714-2015ay,maxcitenames=3]{biblatex}

然后修改标注中的本地化字符串:

\DefineBibliographyStrings{english}{
        andincitecn = {\str@andcn},% 将标注中的分开,便于与文献表中的区分
        andincite   = {\&}}

最后重新定义 \finalandcomma 标点,注意这里与语言相关的标点,需要用 \DefineBibliographyExtras 命令定义。

\DefineBibliographyExtras{english}{\def\finalandcomma{}}%

可通过设置选项 uniquelist=false, uniquename=false 实现,该设置标签中的作者只会是指定的 1 个且只用该作者的姓:

\usepackage[backend=biber,style=gb7714-2015ay,uniquelist=false,uniquename=false]{biblatex}

上标的标注与行内的标注不一样,因此采用了上标的处理,所以上标的标注无法自动断行,因此在页边附近的长标注很有可能会溢出。由于上标标注的断行国标中并没有什么明确要求和说明,因此只能按照自己的方式进行处理,通常是将一个长标注手动分成两个短的标注,比如将:

\cite{key1,key2,key3,key4,key5,key6,key7}

变换成:

\cite{key1,key2,key3}\linebreak\cite{key4,key5,key6,key7}

如果两个 cite 之间还需要增加一个上标的逗号,那么可以手动处理比如增加 \textsuperscript{,}

biblatex 中处理顺序数字编码压缩的代码默认从 3 个连续编码开始压缩,比如 [1,2,3] 压缩成 [1-3]。如果要修改为从 2 个连续编码开始压缩,只需要做一个很简单的修改即可:

% 该宏的目的是抛弃压缩内部的编号,而仅输出最后一个编号,主要通过 cbx@tempcnta 来控制
% 一般情况下 cbx@tempcnta 为 0,所以该宏不输出任何内容。当 cbx@tempcnta在cite:comp:comp 宏中更改变大后
% 说明开始进入需要压缩的范围,当到压缩终点时,cbx@tempcnta 必然大于 1,则输出内容。
% 修改第二行的数字 1 为 0 即可将默认的 3 个开始压缩变为 2 个开始压缩。
\renewbibmacro*{cite:dump}{
  \ifnumgreater{\value{cbx@tempcnta}}{0}
    {\ifnumgreater{\value{cbx@tempcnta}}{1} % 1 改为 0,可以将压缩起始 3 个编号改为 2 个编号
       {\bibrangedash}
       {\multicitedelim}%
     \bibhyperref[\cbx@lastkey]{%
       \ifdef\cbx@lastprefix
         {\printtext[labelprefix]{\cbx@lastprefix}}
         {}%
       \printtext[labelnumber]{\cbx@lastnumber}}}
    {}%
  \setcounter{cbx@tempcnta}{0}%
  \global\undef\cbx@lastprefix}

反之,从两个开始压缩改成 3 个连续压缩,方法是类似的,就是将中的 0 改回 1。

使用最新版本的 biblatex (v3.15 以后)可以直接定义如下标点:

\renewcommand{\multiciterangedelim}{$\sim$}

对于老版本可以修改宏,注意其中的注释

\renewbibmacro*{cite:dump}{
  \ifnumgreater{\value{cbx@tempcnta}}{0}
    {\ifnumgreater{\value{cbx@tempcnta}}{1} % 1 改为 0,可以将压缩起始 3 个编号改为 2 个编号
       {$\sim$}% 压缩的链接标点修改 \bibrangedash
       {\multicitedelim}%
     \bibhyperref[\cbx@lastkey]{%
       \ifdef\cbx@lastprefix
         {\printtext[labelprefix]{\cbx@lastprefix}}
         {}%
       \printtext[labelnumber]{\cbx@lastnumber}}}
    {}%
  \setcounter{cbx@tempcnta}{0}%
  \global\undef\cbx@lastprefix}

顺序数字编码压缩的代码,主要有 cite:comp:comp 宏控制,因此需要局部取消压缩,可以局部的修改该宏。修改很简单,只需要注释掉其中的一行,在需要取消压缩的环境中,重定义该宏,比如:

\renewbibmacro*{cite:comp:comp}{%
  \ifboolexpr{
    ( test {\iffieldundef{labelprefix}} and test {\ifundef\cbx@lastprefix} )
    or
    test {\iffieldequals{labelprefix}{\cbx@lastprefix}}
  }
    {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}}
       {\savefield{entrykey}{\cbx@lastkey}%
        \savefield{labelnumber}{\cbx@lastnumber}%
        \addtocounter{cbx@tempcnta}{1}}
       {\ifnumequal{\thefield{labelnumber}}{\value{cbx@tempcntb}-1}
          {}
          {\usebibmacro{cite:dump}%
           \ifnumgreater{\value{cbx@tempcntb}}{-1}
             {\multicitedelim}
             {}%
           \printtext[bibhyperref]{%
             \printfield{labelprefix}%
             \printfield{labelnumber}}}}}
    {\usebibmacro{cite:comp:end}}%
  %\setcounter{cbx@tempcntb}{\thefield{labelnumber}}% 注释该行,以取消压缩
  \savefield{labelprefix}{\cbx@lastprefix}}

5. Examples/著录和标注结果示例

代码见:opt-gbnamefmt.texopt-gbnamefmt-default.tex

对于bib文件中的如下条目,有:

    @Article{Zhang2007-500-503,
      Title                    = {The design and experimental investigations of supersonic length shorted nozzle},
      Author                   = {Zhang, Min-li and Yi, Shi-he and Zhao, Yu-xin},
      Journal                  = {ACTA AERODYNAMICA SINICA},
      Number                   = {4},
      Pages                    = {500-503},
      Volume                   = {25},
      Year                     = {2007}
    }

    @Book{Yi2013--,
      Title                    = {Supersonic and hypersonic nozzle design},
      Address                  = {Beijing},
      Author                   = {Yi, Shi he and Zhao, Yu xin and He, Lin and Zhang, Min li},
      Publisher                = {National Defense Industry Press},
      Year                     = {2013}
    }

    @Book{LIAO2012--,
      Title                    = {Electronic countermeasure techniques for missile penetration},
      Address                  = {Beijing},
      Author                   = {LIAO, ping and JIANG, qin bo},
      Publisher                = {National Defense Industry Press},
      Year                     = {2013}
    }

    @Book{LIU2003--,
      Title                    = {Introduction of Ballistic Misille Techniques},
      Address                  = {Beijing},
      Author                   = {LIU, shi Qiu},
      Publisher                = {China Astronautic Publishing House},
      Year                     = {2003}
    }

示例c

6. 测试文件说明


Usage

A demonstration database is provided to show how to format input for the style. The biblatex-gb7714-2015 style works with texlive2014, texlive2015, texlive2016, texlive2017 , texlive2018 and so on.

please see the file 'biblatex-gb7714-2015.pdf' for further information!

Version history:


Update history:

update: tex

update: tex