\documentclass[UTF8, fancyhdr, hyperref]{ctexart}
\usepackage[margin = 2cm, centering, includefoot]{geometry}
\usepackage[backend = biber, style = caspervector, utf8]{biblatex}
\usepackage{CJKspace, enumitem, fancyvrb, hologo}

\pagestyle{fancy}\fancyhf{}\cfoot{\thepage}
\renewcommand{\headrulewidth}{0pt}
\setlist{nolistsep}
\hypersetup{allcolors = blue}

\DeclareBibliographyCategory{cited}
\AtEveryCitekey{\addtocategory{cited}{\thefield{entrykey}}}
\addbibresource{readme.bib}

\newcommand{\myemph}[1]{\emph{\textcolor{red}{#1}}}

\begin{document}
\title{\textbf{biblatex 参考文献和引用样式：\texttt{caspervector} v0.1.8}}
\author{%
	Casper Ti.\ Vector\thanks{\ %
		\href{mailto:CasperVector@gmail.com}{\texttt{CasperVector@gmail.com}}.%
	}%
}
\date{2013/04/07}
\maketitle

\section{引言}

传统的 \hologo{BibTeX} 引擎存在一些固有的问题：
首先，其样式文件（\verb|bst| 文件）使用后缀式的栈语言编写，
使开发者难以入门和精通，更不便于一般用户进行自定义；
其次，其排序方式很单一，
无法直接实现中文 \TeX{} 用户常常遇到的按汉语拼音排序等需求。

与此相对应，
biblatex\supercite{biblatex}/biber\supercite{biber}
是一套新兴的 \TeX{} 参考文献排版引擎，
其样式文件（设定参考文献样式的 \verb|bbx| 文件和设定引用样式的 \verb|cbx| 文件）
使用 \LaTeX{} 编写，便于学习；
同时，其支持根据 locale 进行排序。

目前 \TeX{} 社区中尚无人发布为中文用户设计的 biblatex 样式。
为了个人需要，同时也是为了给社区提供一个有益的参考，
本文作者根据实际应用中遇到的常见需求编写了
\verb|caspervector| 这个用于顺序编码制的中英文 biblatex 样式。
其逻辑框架基于
国家标准 GB/T 7714--2005\supercite{gbt7714-2005}，
但在其基础上根据个人审美趣味和 biblatex 所能实现的功能而
对参考文献和引用格式进行了较大幅度的修改。

\section{许可协议}

版权所有 \copyright\ 2012-2013 Casper Ti.\ Vector。%
\verb|caspervector| 参考文献和引用样式以
\LaTeX{} Project Public License\footnote{\ %
	\url{http://www.latex-project.org/lppl/}.%
}发布。%
\verb|caspervector| 样式目前由其作者维护。

\section{系统要求和安装方式}
\subsection{系统要求}

\begin{itemize}
	\item biblatex 宏包（\myemph{必需}）：%
		\verb|caspervector| 样式基于 biblatex 宏包。
	\item 中文环境（\myemph{必需}）：%
		\verb|caspervector| 样式虽支持中文，但其本身不提供中文环境。
		用户仍然需要中文环境才能排版出文档。
	\item biber 程序（\myemph{可选}）：
		用 biber 可以方便地实现文献按字母和拼音顺序排序。
\end{itemize}

以上要求在\myemph{最新}的\myemph{完全版}
\TeX{}Live 系统和 \CTeX{} 套装中都有完善的支持。

\subsection{安装方式}

使用 \TeX{}Live 的用户可以通过在终端中以管理员权限执行
\begin{Verbatim}[frame = single]
tlmgr install biblatex-caspervector
\end{Verbatim}
来安装 \verb|caspervector| 样式。

使用 \CTeX{} 套装的用户可以通过在命令提示符中执行
\begin{Verbatim}[frame = single]
mpm --install=biblatex-caspervector
\end{Verbatim}
来安装 \verb|caspervector| 样式。

\section{使用简介}
\subsection{样式调用}

用户应当通过以下命令调用 \verb|caspervector| 样式：
\begin{Verbatim}[frame = single]
% 如果系统上无法使用 biber，可将“biber”改为“bibtex”。
% “gbk”可能需要改为“utf8”，根据用户使用的字符编码而定。
% “...” 代表其它选项。
\usepackage[
	backend = biber, style = caspervector, gbk, sorting = centy, ...
]{biblatex}
\end{Verbatim}
其中 \verb|sorting| 选项用于（全局）指定按哪些字段排序，
除 biblatex 提供的标准选项\supercite{biblatex}外，%
\verb|caspervector| 样式还提供 \verb|centy| 和 \verb|ecnty| 两种排序方案
（\verb|caspervector| 默认设置为 \verb|none| 排序方案，即按引用顺序排序），
表示依次按文献语言
（\textbf{ce}nty 表示中文文献在前，\textbf{ec}nty 表示英文文献在前；
文献语言根据 \verb|userf| 字段进行区分，详见第 \ref{sec:fields} 部分）、
编著者姓名（\textbf{n}ame）、标题（\textbf{t}itle）
和出版年（\textbf{y}ear）排序。

参考文献数据库
（\verb|.bib| 文件，其格式见第 \ref{sec:fields}、\ref{sec:entries} 部分）
通过 \verb|\addbibresource| 命令导入，%
\myemph{注意不要省略扩展名 \texttt{.bib}}。
例如，本文的参考文献数据库就是通过下述命令导入的：
\begin{Verbatim}[frame = single]
\addbibresource{readme.bib}
\end{Verbatim}
用户可以多次使用 \verb|\addbibresource| 命令，
从多个参考文献数据库中导入参考文献。

\subsection{引用命令}

\verb|caspervector| 样式支持 biblatex 所提供的引用命令，
其中最常用的是 \verb|\supercite|、\verb|\parencite| 和 \verb|\cite|。
三个命令的用法类似：
\begin{Verbatim}[frame = single]
% 可选参数 prenote 和 postnote 分别用于设定引用记号前、后的注释。
\citecommand[prenote][postnote]{key}
\end{Verbatim}
其中 \verb|\cite| 产生无格式化的引用标记\footnote{\ %
	biblatex 的默认设置是带方括号，
	而 \texttt{caspervector} 样式中出于功能完备性的考虑去掉了方括号。%
}，\verb|\parencite| 产生带方括号的引用标记，
而 \verb|\supercite| 产生上标且带方括号的引用标记\footnote{\ %
	biblatex 的默认设置是只上标、不带方括号，
	而 \texttt{caspervector} 样式中根据作者见到的常见需求加上了方括号。%
}。

例如，在本文中，%
\verb|\parencite{gbt7714-2005}| 的输出是“\parencite{gbt7714-2005}”，
而
\begin{Verbatim}[frame = single]
\cite[文献][第 4 页]{gbt7714-2005}
\end{Verbatim}
的输出是“\cite[文献][第 4 页]{gbt7714-2005}”。

\subsection{文献列表}

使用 \verb|\printbibliography| 命令可以在相应位置排版文献列表。
其可（在方括号内）带一些可选参数\supercite{biblatex}，
常见的有：
\begin{itemize}
	\item \verb|title = 标题|：
		可以用于指定文献列表的标题（默认为“参考文献”）。
	\item \verb|heading = 标题样式|：
		最常用的是当 \verb|heading| 的值为 \verb|bibintoc| 时，
		可以将参考文献加入目录中；
		当其值为 \verb|bibnumbered| 时，
		参考文献列表参与章节编号（当然也会被自动加入目录中）。
	\item \verb|sorting = 排序方案|：
		对这一部分的文献按照指定的方案排序。此设置会覆盖全局设置。\myemph{%
			注：
			只有同时使用 2.x 或之后版本的 biblatex 和相应兼容版本的 biber，
			才能对每个 \texttt{\string\printbibliography} 命令采用不同的排序方案。%
		}
\end{itemize}

例如，用
\begin{Verbatim}[frame = single]
\printbibliography[title = {文献}, heading = bibnumbered]
\end{Verbatim}
可以将文献列表的标题改为 “文献”，
并使文献列表参与章节编号。

\subsection{编译方法}

一般情况下，依次执行
\begin{Verbatim}[frame = single]
# “texfile”是被 TeX 编译的文件名中除去“.tex”的部分。
# “pdflatex”可改为其它 TeX 程序，使用纯 latex 编译时可能还需要运行 dvipdfmx。
# 如果系统上无法使用 biber，可将执行 biber 的一行改为
#   bibtex texfile
# 但将无法按拼音排序或进行分类排序。
pdflatex texfile
biber -l zh__pinyin texfile
pdflatex texfile
pdflatex texfile
\end{Verbatim}
即可实现正确的排版。

上述执行 \verb|biber| 的一行命令中，%
\verb|-l| 的参数 \verb|zh__pinyin| 可改为其它
被 Perl 的 \verb|Unicode::Collate| 模块支持的 locale\footnote{\ %
	\url{http://search.cpan.org/~sadahiro/Unicode-Collate/Collate/Locale.pm}.%
}，这样在排序时将使用相应的排序规则。
例如，如果要按笔画排序的话，可以将 \verb|zh__pinyin| 改为 \verb|zh__stroke|。

\section{字段介绍}\label{sec:fields}
\subsection{基本字段}

除非特别指出，此部分字段在所有类型条目中均可用。

\begin{itemize}
	\item \verb|author|、\verb|editor|、\verb|translator|：
		作者、编者、译者。\\
		\myemph{%
			注：
			在析出文献条目中，%
			\texttt{author}、\texttt{editor}、\texttt{translator}
			专指析出文献的作者、编者、译者。
			在 \texttt{@patent} 类条目中，%
			\texttt{author} 也可指专利的持有者。%
		}
	\item \verb|bookauthor|、\verb|booktitle|：析出文献所出自文献的作者和题名。
	\item \verb|title|：文献题名。
	\item \verb|type|：文献类型和电子文献载体标志代码\supercite{gbt7714-2005}。
	\item \verb|location|：出版地，或（在 \verb|@patent| 类条目中）专利申请地。
	\item \verb|publisher|：出版者。
	\item \verb|journal|/\verb|journaltitle|：连续出版物题名，这两个字段是等价的。
	\item \verb|year|/\verb|date|：出版年、日期，这两个字段只需填写一个即可。
	\item \verb|volume|：期刊中文献所处的卷号。
	\item \verb|number|：期刊中文献所处的期号，或专利的申请号。
	\item \verb|pages|：文献页码。
	\item \verb|url|：文献的 URL。
	\item \verb|urldate|：检索日期，或 URL 的访问日期。
	\item \verb|addendum|：补充说明，排版在文献列表中相应条目的最后。
\end{itemize}

\subsection{特殊字段}

\begin{itemize}
	\item \verb|userf|：
		值为 \verb|zh| 或 \verb|cn| 时，相应条目在文献列表中用中文排版；
		否则（为其他值或未定义时）用英文排版。\\
		\myemph{%
			注：
			不可用 \texttt{language} 字段区分中英文文献，
			因为 biblatex 使用 babel\supercite{babel} 宏包处理此字段，
			但后者目前不支持中文，所以可能出错。%
		}
	\item 其它通用特殊字段，见 biblatex 手册\supercite{biblatex}。
\end{itemize}

\section{条目类型}\label{sec:entries}
\subsection{\texttt{@book} 类型}

\verb|@book| 类型对应于 GB/T 7714--2005 中所指的“专著”和“电子文献”，
其支持的常见别名包括 \verb|@booklet|、\verb|@online|、\verb|@proceedings|、%
\verb|@report|、\verb|@thesis|、\verb|@unpublished|。

\verb|@book| 类条目必需的基本字段为 \verb|title|。

除必需字段之外，\verb|@book| 类条目也支持以下基本字段：%
\verb|author|、\verb|editor|、\verb|translator|、%
\verb|type|、\verb|location|、\verb|publisher|、%
\verb|year|/\verb|date|、\verb|pages|、%
\verb|url|、\verb|urldate|、\verb|addendum|。

\subsection{\texttt{@incollection} 类型}

\verb|@incollection| 类型对应于 GB/T 7714--2005 中所指的“专著中的析出文献”，
其支持的常见别名包括
\verb|@bookinbook|、\verb|@conference|、\verb|@inbook|、\verb|@inproceedings|。

\verb|@incollection| 类条目必需的基本字段为 \verb|title| 以及 \verb|booktitle|。

除必需字段之外，\verb|@incollection| 类条目也支持以下基本字段：%
\verb|author|、\verb|editor|、\verb|translator|、\verb|bookauthor|、%
\verb|type|、\verb|location|、\verb|publisher|、%
\verb|year|/\verb|date|、\verb|pages|、%
\verb|url|、\verb|urldate|、\verb|addendum|。

\subsection{\texttt{@periodical} 类型}

\verb|@periodical| 类型对应于 GB/T 7714--2005 中所指的“连续出版物”。

\verb|@periodical| 类条目必需的基本字段为
\verb|title|/\verb|journal|/\verb|journaltitle| 三者中的至少一个。

除必需字段之外，\verb|@periodical| 类条目也支持以下基本字段：%
\verb|author|/\verb|editor|/\verb|translator|、%
\verb|type|、\verb|location|、\verb|publisher|、%
\verb|year|/\verb|date|、\verb|volume|、\verb|number|、\verb|pages|、%
\verb|url|、\verb|urldate|、\verb|addendum|。

\subsection{\texttt{@article} 类型}

\verb|@article| 类型对应于 GB/T 7714--2005 中所指的“连续出版物中的析出文献”。

\verb|@article| 类条目必需的基本字段为
\verb|journal|/\verb|journaltitle| 两者中的至少一个，
以及 \verb|year|/\verb|date| 两者中的至少一个。

除必需字段之外，\verb|@article| 类条目也支持以下基本字段：%
\verb|author|、\verb|title|、\verb|type|、%
\verb|volume|、\verb|number|、\verb|pages|、%
\verb|url|、\verb|urldate|、\verb|addendum|。

\subsection{\texttt{@patent} 类型}

\verb|@patent| 类型用于专利文献。

\verb|@patent| 类条目必需的基本字段为 \verb|title|，
以及 \verb|year|/\verb|date| 两者中的至少一个。

除必需字段之外，\verb|@article| 类条目也支持以下基本字段：%
\verb|author|、\verb|title|、\verb|type|、%
\verb|location|、\verb|number|、%
\verb|url|、\verb|urldate|、\verb|addendum|。

\subsection{\texttt{@customf} 类型}

\verb|@customf| 类型为特殊类型，
专用于在文献列表的相应条目中排版自定义的文字。
此类条目必需且唯一支持的基本字段为 \verb|addendum|，
用户可将其设为自己希望排版的内容。

\myemph{%
	注：
	\texttt{@customf} 类型虽不支持 \texttt{author} 等字段，
	但用户仍可以设定它们的值。
	这样虽不能自动根据这些字段排版，
	但在仍可以根据它们
	（主要是 \texttt{author}、\texttt{title} 和 \texttt{year} 三个字段）
	进行排序。 %
}

\section{对参考文献进行分类排序}

使用 biblatex 2.6 和 biber 1.6（或两者的更高版本）的用户可以通过
对不同的 \verb|\printbibliography| 命令传递不同的 \verb|sorting| 选项来实现
对不同部分文献按不同方案排序。
例如，如需对被引用的文献按照引用顺序排序，
而对未引用的文献按照英文文献在前、中文文献在后排序，
则可以在导言区中加入下列几行代码：
\begin{Verbatim}[frame = single]
% 新建条目分类（category）用于区分被引用和未引用的文献条目。
\DeclareBibliographyCategory{cited}
% 每执行一次除 \nocite 之外的 \cite 类命令，将被引用的文献加到“cited”分类中。
\AtEveryCitekey{\addtocategory{cited}{\thefield{entrykey}}}
\end{Verbatim}
在正文中准备排版文献列表的位置使用如下代码：
\begin{Verbatim}[frame = single]
% 按引用顺序排版“cited”分类，即被引用的文献条目。
\printbibliography[category = cited, ..., sorting = none, title = {References}]
% 按英文文献在前、中文文献在后排版“cited”分类之外，即未被引用的文献条目。
\printbibliography[notcategory = cited, sorting = ecnty, title = {Works Not Cited}]
\end{Verbatim}
并在最后一个除 \verb|\nocite| 之外的 \verb|\cite| 类命令之后、%
\verb|\end{document}| 之前的任意合适位置\footnote{\ %
	因为 biblatex 中的引用顺序记录是按每个条目被第一次引用的顺序计算的，
	所以 \texttt{\string\nocite\{*\}} 时导入文献的顺序会覆盖掉后面
	\texttt{\string\cite} 类命令的引用顺序。
}（例如，在本说明文档中，就是在两个 \verb|\printbibliography| 命令之间）
加入以下代码：
\begin{Verbatim}[frame = single]
% 将 .bib 文件中所有的参考文献都加到引用列表中，但不将它们加到“cited”分类中，
% 也不会排版引用标号，只是在最后的 \printbibliography 命令中排版相应的文献条目。
\nocite{*}
\end{Verbatim}

\section{FAQ 和其它使用提示}

用户可以通过省略可选字段的方式来避免排版相应的内容。
例如，省略 \verb|type| 字段便可使相应条目不排版文献类型和电子文献载体标志代码。

用户可以通过手动调用格式化命令来临时覆盖预设的格式设定，
例如文献 \parencite{1-7} 中的出版年便是通过设定
\begin{Verbatim}[frame = single]
year = {1845\textmd{\emph{（清同治四年）}}}
\end{Verbatim}
得到的。

\verb|caspervector| 样式不支持 \verb|edition| 字段，
用户可以在 \verb|title| 等字段中手动标注。

\section{存在的问题}

biber 1.6 之前的版本存在一个 bug\footnote{\ %
	\url{https://github.com/plk/biblatex/issues/101}.%
}：在源代码中任意位置出现的 \verb|\nocite{*}| 都会覆盖整个引用顺序记录，
导致即使在 \verb|sorting = none| 的设定下，
排版出来的文献列表依然不是按照引用顺序排序的情况。
因此，如果需要使用相关功能，\myemph{强烈建议将 biblatex 和 biber 升级到最新版本}。

如上文所述，因为 babel 宏包目前不支持中文，
故对中英文的分别处理只能通过比较麻烦的方式实现，
指定语言也只能通过一个自定义的字段（\verb|userf|）进行。

因为 biblatex 现有功能的限制，一些需求无法直接实现。
例如类似于文献 \parencite{3-2} 中同时有出版起止年和起止期号的情况就无法自动排版，
只能通过用户手动实现。下面两种方式均可实现上述需求：
（\verb|sortyear| 字段的用法请参考 biblatex 手册\supercite{biblatex}）：
\begin{Verbatim}[frame = single]
@periodical{3-2,
	author = {中国图书馆学会},
	title = {图书馆学通讯},
	type = {J},
	sortyear = {1957},
	year = {\textmd{\textbf{1957}(1) -- \textbf{1990}(4)}},
	location = {北京},
	publisher = {北京图书馆},
	userf = {zh},
}
\end{Verbatim}
或
\begin{Verbatim}[frame = single]
@customf{3-2,
	author = {中国图书馆学会},
	title = {图书馆学通讯},
	sortyear = {1957},
	addendum = {中国图书馆学会。
		\textit{图书馆学通讯} [J]。
		\textbf{1957}(1) -- \textbf{1990}(4)。
		北京：北京图书馆。}
}
\end{Verbatim}
这两种方法中更加推荐使用前者，因为前者只需手动实现出版年和期号的排版。

\section{更新记录}
\VerbatimInput[tabsize = 4, baselinestretch = 1]{ChangeLog.txt}

\printbibliography%
	[category = cited, heading = bibnumbered, sorting = none, title = {本文参考文献}]
\nocite{*}
\printbibliography[
	notcategory = cited, heading = bibnumbered, sorting = ecnty,
	title = {%
		其它参考文献示例
		（引自\texorpdfstring{文献 \parencite{gbt7714-2005}}{ GB/T 7714-2005}）
	}
]
\end{document}

