diff options
author | Karl Berry <karl@freefriends.org> | 2017-07-04 22:06:51 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-07-04 22:06:51 +0000 |
commit | 72ab27e8dbc6f44e906e1d570e98e957566cb603 (patch) | |
tree | 10a81193ec4ab1160c50a4ded282b51b6729ee9c /Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-content.tex | |
parent | 67228e148954896e0a854965c68ced6595691099 (diff) |
biblatex-gb7714-2015 (4jul17)
git-svn-id: svn://tug.org/texlive/trunk@44750 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-content.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-content.tex | 949 |
1 files changed, 775 insertions, 174 deletions
diff --git a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-content.tex b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-content.tex index 49080d69e98..79879a2ef78 100644 --- a/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-content.tex +++ b/Master/texmf-dist/doc/latex/biblatex-gb7714-2015/biblatex-gb7714-2015-content.tex @@ -1,15 +1,15 @@ %------------------------------------------------------------ -\def\versionnumber{v1.0g} %版本和修改时间信息 -\def\versiondate{2017/02/26} +\def\versionnumber{v1.0h} %版本和修改时间信息 +\def\versiondate{2017/04/11} %------------------------------------------------------------ %-----------------标题和目录--------------------------------- -\titleformanual{符合GB7714-2015标准的biblatex参考\\ +\titleformanual{符合GB/T 7714-2015标准的biblatex参考\\ 文献样式文件\footnote{The files (gb7714-2015*.*) have version number \versionnumber, last revised \versiondate.}} \authorformanual{胡振震\setcounter{footnote}{0}\footnote{hzzmail@163.com}} \dateformanual{2016-07-01} \titleandauthor \phantomsection -\addcontentsline{toc}{section}{目录} +%\addcontentsline{toc}{section}{目录} \tableofcontents %\renewcommand{\numberline}[1]{#1~} \phantomsection @@ -22,10 +22,10 @@ 样式文件的主要特点包括: \begin{enumerate} - \item 实现了GB/T 7714-2015标准的完整功能,不仅包括两种编制方式下的各类型参考文献著录格式和标注格式等基本内容,还包括:双语文献格式,带页码的标注格式,作者年制下文献的自动排序和仅有年的标注格式,两种编码制方式下责任者缺省不同处理,其他信息缺省时的自动处理,一些信息如页码卷期等自动解析等特殊功能,而且增加了一个顺序编码制的标签对齐选项,提供右对齐、左对齐和项对齐三种方式。 - \item 实现了用户文献数据录入优化,用户在录入参考文献数据的时候,只需要录入文献的实际信息即可,不需要录入文献标识符和载体标识符,不需要录入language或者其它域信息用来区分中英文文献,完全实现自动中英文判断并处理。支持一些特殊的条目类型比如standard,newspaper,mastersthesis,phdthesis等。 + \item 实现了GB/T 7714-2015标准的完整功能,不仅包括两种编制方式下的各类型参考文献著录格式和标注格式等基本内容,还包括:双语文献格式,带页码的标注格式,作者年制下仅有年的标注格式和文献按语言集中并自动排序,两种编码制方式下责任者缺省不同处理,一些信息如页码卷期等自动解析,出版信息缺省时的自动处理并增加控制选项(gbpub)来控制是否应用这种自动处理等功能,而且增加了一个顺序编码制的标签对齐选项(align),提供右对齐、左对齐和项对齐三种方式。 + \item 实现了用户文献数据录入优化,用户在录入参考文献数据时,只需要录入文献的实际信息即可,不需要录入文献标识符和载体标识符,不需要录入language或者其它域信息用来区分中英文文献,完全实现自动中英文判断并处理。支持一些特殊的条目类型比如standard,newspaper,mastersthesis,phdthesis等。 \item 实现了对biblatex不同版本的兼容,能够应用于biblatex3.2以前的老版本,也能用于3.3以后姓名处理方式改变后的版本。即可以与texlive2014/2015/2016配合使用,无需升级biblatex情况下安装biblatex-gb7714-2015宏包即可使用。 - \item 实现了常规文档类book/report/article以及beamer类下的样式文件测试,均能达到要求。文档详细介绍了各条目类型的著录格式及其在biblatex 中对应域的构成,以及域信息的录入方法和一些注意点,说明了样式文件的使用方法和注意事项,并严格按照GB/T 7714-2015 标准测试了各种类型的文献。 + \item 测试了样式文件在文档类book/report/article以及beamer类下的适用性,结果表明均能满足要求。文档详细介绍了各条目类型的著录格式及其在biblatex 中对应信息域的构成,以及域信息的录入方法和一些注意点,说明了样式文件的使用方法和注意事项,并严格按照GB/T 7714-2015 标准测试了各种类型的文献。 \end{enumerate} 样式文件由如下文件构成: @@ -40,70 +40,227 @@ biblatex-gb7714-2015.tex,biblatex-gb7714-2015ay.tex,biblatex-gb7714-2015-bea \textbf{*.bat}和\textbf{*.sh}分别是windows下和linux下的编译脚本。\textbf{*.pl}是用来将gb7714格式的著录文献文本转换为bib文件的perl脚本,\textbf{*.dat}是用于转换的测试文本文件。 -样式文件在标准样式基础上修改设计而成,读者若查看样式文件内容可以看到作者对各目标要求所做的修改及其注释,读者也可以根据自己的需要修改需要的样式,作者设计样式文件的思路以及在设计过程中用到的一些biblatex宏包功能说明,详见第\ref{sec:biblatex:mech}节和\footnote{\makebox{LaTeX文档中文参考文献的biblatex解决方案,地址:\url{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}}}的第2.7节。 +\subsection{biblatex宏包的参考文献生成方法} +biblatex生成参考文献有其优越性。笔者从最初开始学习latex时利用thebibliography环境生成参考文献,到后来对格式化参考文献有更多需求,开始寻求利用参考文献宏包,再到最后选择了使用biblatex宏包[也由于对bibtex语言不熟悉,偷懒不想学$( \hat{} \bot \hat{} )$],经过了大量的实践,从结果看利用biblatex宏包生成参考文献具有如下优点: -在继续介绍之前需要特别说明,在作者设计完成这个样式之前,一直都是在使用基于李志奇编写的样式文件修改的参考文献样式 -\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=74474}}, -其中关于usera域的使用思路和解析卷期范围的函数对于作者设计gb7714-2015样式很有启发价值,当然还有平时写文档时的大量应用,非常感谢。在完成样式设计过程中,因为希望通过判断条目的内容来判断中英文,特别需要一个好用的判断CJK字符的函数,因此在知乎、CTEX论坛和微博提问,得到了包括秀文工作组、刘海洋、leipility、qingkuan等人的回答,多有受益,特别是刘海洋(LeoLiu)给出的回答非常完美 -\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152663&extra=page\%3D3}} -,其中代码直接用于本参考文献样式,深表感谢。当然还有更多这里没有提到姓名的师长和朋友们的热心帮忙,在此一并表示感谢! +\begin{enumerate} +\item 使用方便。样式随宏包加载,参考文献源bib文件利用addbibresource加载,打印文献表利用printbibliography命令可以在文档任意位置打印。参考文献只需三步编译,第一遍xelatex,第二遍biber,第三遍xelatex,当然如果需要存在反向超链接,还需要第四遍xelatex。例\ref{eg:compile:cmd} 给出编译命令,其中xelatex命令也可以用mklatex -xelatex代替。 -\subsection{样式加载使用方式} -样式加载方式为(\emph{注意:顺序编码制增加了一个align选项用于选择参考文献表序号标签的对齐方式,align=right是默认的右对齐,align=left是左对齐,align=gb7714-2015是项对齐方式。对于作者年制该选项无效。测试结果见第\ref{sec:align:test}节。}): + \begin{codetex}{使用biblatex宏包的文档编译命令}{eg:compile:cmd} + xelatex --synctex=-1 jobname.tex + biber jobname + xelatex --synctex=-1 jobname.tex + xelatex --synctex=-1 jobname.tex + \end{codetex} +%使用够方便 + +\item 划分自由。利用biblatex宏包可以在一个文档中生成任意数量的参考文献表,而不需要用include把分档划分成不同的文件来生成分章参考文献。利用refsection和refsegment可以很方便地划分参考文献节,甚至还可以嵌套使用。 +%划分很自由,划分无限制 + +\item 支持全面。biber处理大数据量参考文献毫无压力,不用担心bibtex可能存在的内存不足等局限,字符编码也支持utf-8,完全支持中文的bibtex键。 +%处理无限制,支持更全面 + +\item 定制容易。biblatex宏包实现参考文献著录格式使用的是tex语言,相比传统的bibtex语言学习更为容易。biblatex 提供了很多不同类型的参考文献标准样式,查看、参考和引用都很方便,因此定制起需要的参考文献格式也很便捷。 +%定制很容易 +%\item 学习无障碍,因为biblatex宏包用的是tex语言,所以查看代码,学习都很方便,自然也便于生成需要的参考文献样式。 +%\item 定制很容易,biblatex提供了很多不同的参考文献标准样式,学习参考都很方便,因此定制起需要的参考文献格式来非常容易。 +\end{enumerate} + +上述这些优点也是笔者决定编写符合GB/T 7714-2015标准的参考文献样式文件的原因之一。 + +下面简单介绍biblatex宏包生成参考文献的方法,直接给出最小工作示例。事实上biblatex生成参考文献万变不离其宗。示例中给出了详细的注释,要进一步了解biblatex参考文献生成可以参考biblatex宏包手册或者LaTeX 文档中文参考文献的biblatex解决方案\footnote{地址:\url{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}}。 + +\begin{codetex}{biblatex参考文献生成最小工作示例}{code:doc:structrue} +\documentclass{article}%文档类 +%导言区开始: +%加载ctex宏包,中文支持 +\usepackage{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样式 +\usepackage[backend=biber,bibstyle=gb7714-2015,%nature,% +citestyle=gb7714-2015%,backref=true% +]{biblatex} +%biblatex宏包的参考文献数据源加载方式 +\addbibresource[location=local]{example.bib} + +%正文区开始: +\begin{document} +%正文内容,引用参考文献 +详见文献\cite{Peebles2001-100-100}\parencite{Miroslav2004--} +参考文献\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--} + +%打印参考文献表 +\printbibliography[heading=bibliography,title=参考文献] +\end{document} +\end{codetex} + + +\subsection{gb7714-2015样式加载方式和选项说明} +\subsubsection{样式加载方式} +最小示例(\ref{code:doc:structrue})中给出了宏包和样式的基本加载方式,对于gb7714-2015样式也是类似的,当然著录样式bibstyle和标注样式citestyle相同的话可以合并为一个选项style。比如: \begin{codetex}{gb7714-2015顺序编码制加载方式}{eg:gb7714numeric} \usepackage[backend=biber,style=gb7714-2015]{biblatex} -%如果要设置参考文献表序号标签对齐方式的话,请设置align选项,比如: -\usepackage[backend=biber,style=gb7714-2015,align=left]{biblatex} +%如果要设置参考文献表序号标签对齐方式的话请设置align选项,如果要取消缺省出版项自动填补的话设置gbpub=false,比如: +\usepackage[backend=biber,style=gb7714-2015,align=left,gbpub=true]{biblatex} \end{codetex} \begin{codetex}{gb7714-2015作者年制加载方式}{eg:gb7714authoryear} \usepackage[backend=biber,style=gb7714-2015ay]{biblatex} +%如果要取消缺省出版项自动填补的话设置gbpub=false,如果要使用佚名或NOAUTHOR代替补充缺失的author信息可以设置gbnoauthor=true,比如: +\usepackage[backend=biber,style=gb7714-2015ay,gbpub=true,gbnoauthor=true]{biblatex} \end{codetex} \begin{codetex}{参考文献文本转换为bib文件perl脚本使用方式}{eg:transtobib} perl gb7714texttobib.pl in=textfilename out=bibfilename \end{codetex} -本文档给出了两种样式文件的使用说明,并根据GB/T 7714-2015提供的参考文献表著录格式示例做了测试和验证,详见第\ref{sec:eg:gb77142015}节。测试系统环境为: -\begin{enumerate} -\item windows7x86+texlive 2014,采用xelatex编译; +\subsubsection{增加的选项} +本小节主要介绍gb7714-2015样式增加的选项,选项的使用方式与包选项完全相同: +\begin{description} + \item[align]=right,left,gb7714-2015. \hfill default is right -\item windows7x64+texlive 2015,采用xelatex编译; + 为顺序编码制增加的标签对齐选项,选择参考文献表序号标签的对齐方式,align=right是默认的右对齐,align=left是左对齐,align=gb7714-2015是项对齐方式。对于作者年制该选项无效。测试结果见第\ref{sec:align:test}节 -\item 虚拟机xp+texlive 2016,采用xelatex编译; + \item[gbpub]=true,false. \hfill default is true -\item Deepin linux-x64v15.3+texlive 2016,采用xelatex编译。 -\end{enumerate} + 为出版信息存在缺失时自动处理增加的控制选项,默认选择gbpub=true,自动利用:[出版地不详],[出版者不详],[S.l.],[s.n.]等填补缺省信息,设置gbpub=false时,则取消自动处理,使用标准样式的方式取消相应项的输出。 -作者自己从学习latex开始就使用xelatex,对于参考文献生成,开始用的thebibliography环境,后来对于格式化参考文献有更多的需求后,开始寻求利用参考文献宏包。因为对于bibtex语言不熟悉,所以就开始使用biblatex宏包。从实践来看,使用biblatex宏包生成参考文献有些优点是值得肯定的: + \item[gbnoauthor]=true,false. \hfill default is false -\begin{enumerate} -\item 使用够方便,样式随宏包加载,参考文献源bib文件利用addbibresource加载,打印文献表利用printbibliography命令可以在文档任意位置打印。参考文献只需三步编译,第一遍xelatex,第二遍biber,第三遍xelatex,当然如果需要存在反向超链接,还需要第四遍xelatex。例\ref{eg:compile:cmd}给出编译命令,其中命令xelatex也可以用mklatex -xelatex代替。关于更多的参考文献相关问题及解决方法详见\footnote{\makebox{LaTeX 文档中文参考文献的biblatex解决方案,地址:\url{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}}}。 + 为作者信息存在缺失时自动处理增加的控制选项,默认选择gbnoauthor=false,当作者信息缺失时不做处理,使用标准样式的处理方式,设置gbnoauthor=true 时,则根据gb7714-2015的要求进行处理,中文文献使用佚名来代替author,英文文献用NOAUTHOR来代替author。 +\end{description} + + +\subsubsection{与标准选项的兼容性} +本小节介绍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[hyperref]=true, false, auto. \hfill default: auto + + 是否将引用和向后引用转化为可点击的超链接。这是宏包的载入时选项,与样式无关,自然可以使用。 + + \item[backref]=true, false. \hfill default: false + + 是否在文献中打印出反向引用。这是宏包的载入时选项,与样式无关,自然可以使用。 + + + \item[refsection]=none, part, chapter, section, subsection. \hfill default: none + + 该选项自动在文档分段处(例如一章或一节)开始一个新的参考文献分节。是宏包的载入时选项,与样式无关,自然可以使用。 + + \item[refsegment]=none, part, chapter, section, subsection. \hfill default: none -\begin{codetex}{使用biblatex宏包的文档编译命令}{eg:compile:cmd} -xelatex --synctex=-1 jobname.tex -biber jobname -xelatex --synctex=-1 jobname.tex -xelatex --synctex=-1 jobname.tex + 类似于refsection选项,但开始的是一个新的参考文献片段。 + + \item[citereset]=none, part, chapter, section, subsection. \hfill default: none + + 该选项在文档分段处(例如一章或一节)自动执行介绍的citereset 命令。 + + \item[labeldate]=year, short, long, terse, comp, ymd, edtf. \hfill default: year + + 类似于 date 选项,但控制的是由DeclareLabeldate 选择的日期域的格式。 + + \item[其它]=下面还有很多选项,有些是宏包载入时选项,与样式无关,一般可以使用,但笔者没有做测试,各位朋友可以测试使用。选项的作用可以参考biblatex使用手册,以及笔者和Sheng Wenbo兄翻译的中文版。 + \begin{itemize} + \item related=true, false. default: true + \item defernumbers=true, false default: false + \item sortcites=true, false default: false + \item maxitems=integer default: 3 + \item minitems=integer default: 1 + \item autocite=plain, inline, footnote, superscript, ... + \item autopunct=true, false default: true + \item language=autobib, autocite, auto,language default: autobib + \item clearlang=true, false default: true + \item autolang=none, hyphen, other, other*, langname default: none + \item block=none, space, par, nbpar, ragged default: none + \item notetype=foot+end, footonly, endonly default: foot+end + \item indexing=true, false, cite, bib default: false + \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 isbn=true, false default: true + \item doi=true, false default: true + \item eprint=true, false default: true + \end{itemize} + +\end{description} + + +\subsection{样式文件的进一步说明} + +\subsubsection{顺序编码/作者年制bbx样式文件的使用说明} +顺序编码制的参考文献样式文件基于标准numeric-comp样式修改得到。著录格式中序号格式见 +\ref{sec:bib:serialno}节,各类型文献条目的著录格式见\ref{sec:numeric:data}节,参考文献条目中各信息域及其录入方式见\ref{sec:field}节。 + +作者年制的参考文献样式文件使用了标准authoryear样式的标签生成,修改了参考文献表的格式。其参考文献条目著录格式与顺序编码制基本相同(除了把年份提到了作者后面作为标签)。引文数据源bib文件所要求的条目信息域录入与顺序编码制完全一致,详见\ref{sec:numeric:data}节。 + +\qd{注意:因为作者年制有文种文献集中的要求,所以修改了nyt排序格式,增加了userb作为name前的排序域,默认情况下,本样式文件将作者为中文的文献的userb域设置成cn,英文的设置成en。这一设置过程,在处理样式时由biber自动处理,当出现问题或者有更多文种分集且有特殊顺序时,可以在bib文件中给相应文种文献的userb域设置适合排序的字符串。比如中文文献设置为cn,英文文献设置为en,法文文献设置为fr,那么排序中,相应的中文文献排在最前面,英文文献在中间,法文文献最后,因为升序情况下字母顺序是c然后e然后f。} + +%上一段2016-1114更新,下面是以前的说法。 +%\qd{根据文种文献集中的要求,修改了nyt排序格式,增加了userb作为name前的排序域,当有需求进行多文种分集且有特殊顺序时,在bib文件中给相应文种的文献设置适合排序的字符串。比如中文文献设置为cn,英文文献设置为en,法文文献设置为fr,那么排序中,相应的中文文献排在最前面,英文文献在中间,法文文献最后,因为升序情况下字母顺序是c然后e然后f。} + +\subsubsection{顺序编码/作者年制cbx样式文件的使用说明}\label{sec:cbx:usage} + +顺序编码制的引用样式文件大体使用标准引用样式numeric-comp的内容,仅对cite等命令进行了修改。为满足GB/T 7714-2015第10.1.3节的要求,增加了pagescite命令。为方便在同一文章中同时使用上标和非上标的标注方式,仅将cite命令修改为上标模式,而parencite保留标准样式提供的非上标模式。这些命令使用方式如下: + +\begin{codetex}{顺序编码制cbx样式命令使用说明}{eg:citefornumeric} +不带页码的引用(上标,方括号包围)\cite{Peebles2001-100-100} + +不带页码的引用(非上标,方括号包围)\parencite{Miroslav2004--} + +带页码的引用\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--} + +\pagescite{Peebles2001-100-100}\pagescite[][201-301]{Peebles2001-100-100} + +在页脚中引用和打印文献表\footnote{在脚注中引用\footcite{赵学功2001--}} + \footfullcite{赵学功2001--} \end{codetex} -\item 划分无限制,利用biblatex宏包可以在一个文档中生成任意数量的参考文献表,而不需要用include把分档划分成不同的文件来生成分章参考文献。利用refsection和refsegment 可以很方便构建参考文献表,甚至还可以嵌套使用。 -%划分很自由 +其中,当不指定页码时,pagescite命令默认调用参考文献的页码数据进行输出,如果需要指定页码,那么需要在第二个[]内输入页码内容。 + +\qd{注意:对于多个文献一起的压缩形式,指定页码只会应用最后一个参考文献的页码,这是不对的,当然其实这种情况是不应该存在的,指定页码本来就应该具体化指某一文献的,因此使用时尽可能使用pagescite\{key1\}pagescite\{key2\}这种形式而不是pagescite\{key1,key2\}。} -\item 支持更全面,biber处理数量很大的参考文献条目没有任何压力,不用担心bibtex可能存在的内存不足等局限,字符编码也支持utf-8,完全支持中文的bibtex键。 -%处理无限制 -\item 定制很容易,因为biblatex宏包实现参考文献著录格式用的是tex语言,所以相比学习bibtex语言更为容易。biblatex 还提供了很多不同的参考文献标准样式,查看,参考都很方便,因此定制起需要的参考文献格式来也比较容易。 -%\item 学习无障碍,因为biblatex宏包用的是tex语言,所以查看代码,学习都很方便,自然也便于生成需要的参考文献样式。 -%\item 定制很容易,biblatex提供了很多不同的参考文献标准样式,学习参考都很方便,因此定制起需要的参考文献格式来非常容易。 -\end{enumerate} +作者年制的引用样式文件大体使用标准引用样式authoryear的内容。也是对cite,parencite进行了修改,将引用标签用括号括起来。为满足GB/T 7714-2015第10.2.4节的要求,增加了pagescite命令。为满足GB/T 7714-2015第10.2.1节的要求,增加了yearpagescite命令用于处理文中已有作者信息只需要年份和页码信息的情况。 -上述这些优点也是作者决定编写符合GB/T 7714-2015标准的参考文献样式文件的原因之一。 +这些命令使用方式如下: + +\begin{codetex}{作者年制cbx样式命令使用说明}{eg:citeforauthoryear} +不带页码的引用\cite{Peebles2001-100-100}\parencite{Miroslav2004--} + +带页码的引用\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--} +\pagescite{Peebles2001-100-100}\pagescite[][201-301]{Peebles2001-100-100} + +作者年制文中已有作者只需要年份和页码的情况,使用命令yearpagescite,而顺序制的情况下该命令与pagescite命令作用相同。 +比如见赵耀东\yearpagescite[][205]{赵耀东1998--}和Simon\yearpagescite[][15]{Simon2001--}的文献。 + +在页脚中引用和打印文献表\footnote{在脚注中引用\footcite{赵学功2001--}} + \footfullcite{赵学功2001--} +\end{codetex} + +各引用命令的效果见\ref{sec:test:book}节。 + +\section{标准说明与实现} \subsection{顺序编码制} -\subsubsection{参考文献表} +\subsubsection{参考文献表}\label{sec:bib:serialno} GB/T 7714-2015规定采用顺序编码制组织参考文献时,各篇文献应按正文部分标注的序号依次列出。具体参考GB/T 7714-2015第9.1节。 @@ -127,20 +284,19 @@ GB/T 7714-2015规定采用作者年制组织时,各篇文献首先按文种组 \subsubsection{文献标注法} 各篇文献的标注内容由著者姓(lastname)和出版年构成,并置于()内。对于使用汉字的语言来说,整个姓名都是lastname所以标注的是全名。机构团体名也整体标注。 -若正文中已有著者姓名,则()内只标注出版年,这一点样式文件无法判断,只能是文档作者自身把握,当然样式文件提供了标签只有年份、附加年份和页码信息的引用命令yearpagescite,方便文档写作者使用,使用方法详见第\ref{sec:cbxay:usage}节。 +若正文中已有著者姓名,则()内只标注出版年,这一点样式文件无法判断,只能是文档作者自身把握,当然样式文件提供了标签只有年份、附加年份和页码信息的引用命令yearpagescite,方便文档写作者使用,使用方法详见第\ref{sec:cbx:usage}节。 引用多个著者的文献时,对西文只需标注第一著者的姓(而在参考文献列表中的作者按最大数量三个处理,这与顺序编码制一致,参考GB/T 7714-2015第8.1.2节),其后附“et al.”,对于中文著者,标注第一著者的姓名,其后附“等”。姓名与“et al.”“等”间留适当空隙。注意到在GB/T 7714-2015第10.2.1节给出的例子中作者姓的大小写格式与参考文献表中的要求是不同的,这说明标注中的作者姓名是由写文档的作者来决定的,因此本样式文件原样输出bib源文件中作者姓的大小格式。 引用同一著者同一年出版的多篇文献时,出版年后应采用小写字符a,b,c等区别。 -多次引用同一著者的同一文献,在正常标注外,需在()外以角标形式著录引文页码,这一问题样式文件无法判断,只能提供可以形成该格式的引用命令,供文档作者使用,因此提供pagescite命令,使用方法详见第\ref{sec:cbxay:usage}节。 +多次引用同一著者的同一文献,在正常标注外,需在()外以角标形式著录引文页码,这一问题样式文件无法判断,只能提供可以形成该格式的引用命令,供文档作者使用,因此提供pagescite命令,使用方法详见第\ref{sec:cbx:usage}节。 标注要求具体参考GB/T 7714-2015第10.2节。 -\emph{需要注意的是:一般情况下,当文献作者缺省时,作者年制就没有作者可以用,因此文献题名用来生成标签,这样会导致参考文献表中文献题名后的文献类型标识/文献载体标识消失。但是可以用佚名替代缺省作者的方式避免这个问题,本样式文件默认情况下采用佚名方式,如果不需要使用佚名,那么需要在样式文件中注释掉一段代码,这段代码在本文档末尾2016-11-14的更新历史中有说明,见\pageref{up:20161114}页。} +\qd{注意:一般情况下,当文献作者缺省时,作者年制就没有作者可以用,因此文献题名用来生成标签,这样会导致参考文献表中文献题名后的文献类型标识/文献载体标识消失。但是可以用佚名替代缺省作者的方式避免这个问题,即可以使用样式文件选项gbnoauthor=true,一旦设置该选项为true,则缺省的作者会根据文献语种填充为佚名或NOAUTHOR。默认情况下,不进行这种处理,即相当于设置选项gbnoauthor=false。} - -\section{顺序编码制bbx样式文件的使用说明} +%本样式文件默认情况下采用佚名方式,如果不需要使用佚名,那么需要在样式文件中注释掉一段代码,这段代码在本文档末尾2016-11-14的更新历史中有说明,见\pageref{up:20161114}页。} \subsection{各类文献在biblatex中对应的条目和域}\label{sec:numeric:data} gb7714-2015.bbx是按照GB/T 7714-2015要求实现的biblatex参考文献样式文件。 @@ -159,9 +315,9 @@ gb7714-2015.bbx是按照GB/T 7714-2015要求实现的biblatex参考文献样式 author.title:subtitle或titleaddon[usera].translator.edition.address或location:publisher,date或year:pages[urldate].url.doi \end{codetex} -使用时,首先建立参考文献数据文件即bib文件,将对应的文献信息录入到相应条目的相应数据域中。\qd{特别注意:usera域不用录入,该域内容由bbx样式文件根据条目类型处理得到。} +使用时,首先建立参考文献数据文件即bib文件,将对应的文献信息录入到相应条目的相应数据域中。\bc{特别强调:usera域不用录入,该域内容由bbx样式文件根据条目类型自动处理得到。} -\qd{还需要注意:由于biblatex不支持standard条目类型,所以“标准”类型可以用book或inbook替代,但使用note域等于standard作为一个区分,当note域数据存在且内容等于standard时,就将其作为“标准”文献进行处理,其文献类型标识用S表示。这里为什么使用note域而不是type域和keywords域,是因为考虑到note域一般情况没有什么特殊意义,使用它不会导致冲突,而type域在biblatex标准样式中没有被book和article条目类型当作支持的域,对于支持该域的条目比如thesis,type域又有特殊的意义,是用来区分master和doctor的,而keywords域倒可以使用,只是该域一般很少在jabref之类软件的默认域中,需要进一步设置,而且可能带来不通用的问题。} +\qd{注意:由于biblatex不支持standard条目类型,所以“标准”类型可以用book或inbook替代,但使用note域等于standard作为一个区分,当note域数据存在且内容等于standard时,就将其作为“标准”文献进行处理,其文献类型标识用S表示。这里为什么使用note域而不是type域和keywords域,是因为考虑到note域一般情况没有什么特殊意义,使用它不会导致冲突,而type域在biblatex标准样式中没有被book和article条目类型当作支持的域,对于支持该域的条目比如thesis,type域又有特殊的意义,是用来区分master和doctor的,而keywords域倒可以使用,只是该域一般很少在jabref之类软件的默认域中,需要进一步设置,而且可能带来不通用的问题。} \subsubsection{标准/standard}\label{sec:standard} “标准”(standard)作为一种文献条目类型biblatex并不支持,因此可以如上一小节所述,直接利用book或inbook类型加note域代替。 @@ -183,7 +339,7 @@ author.title[usera](//bookauthor.booktitle:booktitleaddon).edition.address 或lo \subsubsection{域/field}\label{sec:field} -各域的数据录入格式符合bib文件规范即可,这里再详细说明一下,后面的其它条目涉及到的域也在这里一并介绍: +参考文献条目各个信息域的数据录入格式符合bib文件规范即可,这里再详细说明一下,后面其它条目涉及到的域也在这里一并介绍: \begin{description} \item[author] 在biblatex中author域属于name数据类型,输入数据时,各姓名间用and 连接,当姓名过多省略时,用others代替。 @@ -200,7 +356,7 @@ author.title[usera](//bookauthor.booktitle:booktitleaddon).edition.address 或lo 这里的第一个姓名输入为前缀,姓,后缀,名,中间名。第二个姓名输入为名,姓。第三个姓名输入为姓,名,中间名。 - \emph{还要注意:对于第二种输入方式非首字母大写,姓名各个组成部分最好首字母是大写的,可能导致解析出错,比如姓名只有两个组成部分firstname和lastname,如果firstname小写的话,有可能会解析为prefix lastname。对于第一种输入方式,则至少lastname需要首字母大写,否则有可能将lastname解析成prefix。其中lastname也称familyname,firstname middlename 两者共称givenname} + \bc{需要强调:对于第二种输入方式非首字母大写,姓名各个组成部分最好首字母是大写的,可能导致解析出错,比如姓名只有两个组成部分firstname和lastname,如果firstname小写的话,有可能会解析为prefix lastname。对于第一种输入方式,则至少lastname需要首字母大写,否则有可能将lastname解析成prefix。其中lastname也称familyname,firstname middlename 两者共称givenname} 对于机构作者,不需要解析,直接输入机构名,英文的各个机构名用\{\}包起来,比如: @@ -214,7 +370,7 @@ author.title[usera](//bookauthor.booktitle:booktitleaddon).edition.address 或lo \item[edition] 直接输入整数,或者需要打印的内容 \item[address] 直接输入需要打印的地址内容,location域类似。 \item[publisher] 直接输入需要打印的出版者内容,institution,organization域类似 - \item[date] 日期可以格式化输入或者直接输入需要打印的内容,格式化输入biblatex 会自动解析。格式化的输入方式是: + \item[date] 日期可以格式化输入,格式化输入biblatex 会自动解析,如果无法解析会忽略该域。格式化的输入方式是: 年-月-日/年-月-日 @@ -222,10 +378,12 @@ author.title[usera](//bookauthor.booktitle:booktitleaddon).edition.address 或lo 其中第一个年-月-日会解析并存储到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(清光绪七年)。 - year域的输入与date域类似,为了兼容一些老的bib文件,把year直接用map转换成date,所以在本样式的使用中输入时year域与date域相同,但处理过程中year域的信息仅有年或者需要完整打印的内容。 + 这一信息如果放在date中会被自动忽略,但放到year域中,本样式会先将其拷贝到date中进行解析,无法解析的话,date域忽略,但year信息仍然存在,并原样打印。 \item[pages] 可以格式化输入或输入需要打印的内容。格式化输入时,页码用整数,当有范围时,用短横线隔开。比如:59-60。 当无法解析时,输入内容被认为是需要完整打印的内容。 \item[urldate] urldate域与date域类似,只是解析时,存储到urlday,urlmonth,urlyear,urlendday,urlendmonth,urlendyear域中。 @@ -266,7 +424,7 @@ author.title[usera]//bookauthor.booktitle:booktitleaddon.edition.address 或loca author/editor.title:subtitle或titleaddon[usera].year或date,volume(number)-endyear, endvolume(endnumber).address或location:publisher,date或year[urldate].url.doi \end{codetex} -需要注意: 因为连续出版物可能用到两个日期,两个卷,两个期,所以录入数据时需要特别处理。不需要录入endyear等信息,只需要在到year或date域录入日期,由biber自动解析,两个日期之间用/分隔。而卷和期由于可能有合订模式,合订卷期之间用/分隔,参考GB/T 7714-2015第8.8.3节,需要解析范围的卷和期,录入到volume和number域时,两个不同的值用-分隔。\emph{这里对于卷和期的解析所采用的函数利用了李志齐所编写的样式文件中的函数,特此说明,表示感谢!} +需要注意: 因为连续出版物可能用到两个日期,两个卷,两个期,所以录入数据时需要特别处理。不需要录入endyear等信息,只需要在到year或date域录入日期,由biber自动解析,两个日期之间用/分隔。而卷和期由于可能有合订模式,合订卷期之间用/分隔,参考GB/T 7714-2015第8.8.3节,需要解析范围的卷和期,录入到volume和number域时,两个不同的值用-分隔。\bc{这里对于卷和期的解析所采用的函数利用了李志齐所编写的样式文件中的函数,特此说明,表示感谢!} \subsubsection{连续出版物的析出文献/article} \begin{refentry}{}{} @@ -363,7 +521,7 @@ author.title:subtitle或titleaddon[usera].translator.address或location:publishe \subsubsection{报告/report} \begin{refentry}{}{} -报告对应的biblatex的entrytype为:report。文献类型标识用R表示。(注意:biblatex将techreport作为report条目类型的别名,对于标准样式来说techreport出现在bib文件中等同于report,但这种等同标准样式是在驱动层进行处理的,而gb7714样式还需要处理文献类型标识,本样式文件做了进一步支持。因此bib文件中也可以直接使用techreport。) +报告对应的biblatex的entrytype为:report。文献类型标识用R表示。(注意:biblatex将techreport作为report条目类型的别名,对于标准样式,techreport出现在bib文件中等同于report,但这种等同标准样式是在驱动层处理的,而gb7714样式还需要处理文献类型标识,本样式文件做了进一步支持。因此bib文件中也能直接使用techreport类型。) \paragraph{其著录格式为} (由biblatex的标准report格式修改得到,注意当出版地和出版者不存在时忽略这两项) @@ -407,10 +565,12 @@ author.title:subtitle或titleaddon[usera].translator.type number.version.address \paragraph{其著录格式为} 采用与inbook类似的格式。 \end{refentry} -\subsection{其它满足GB/T 7714-2015著录格式要求的方法} +\subsection{标准的其它要求与实现} 除了上一小节针对不同条目类型的著录格式要求外,GB/T 7714-2015还有一些细节要求比如文字、符号等需要满足,可以采用如下方法: +\subsubsection{多语言文献} + \begin{property}{}{} 某些期刊对于参考文献有双语文献要求,那么可以通过条目集类型(set)进行设置,这对于专著和连续出版物的析出文献来说有可能是常用的。具体要求见GB/T 7714-2015第6.1节。 \end{property} @@ -436,24 +596,32 @@ entryset = {易仕和2013--,Yi2013--}, \end{codetex} 当使用bibtex后端时,则需要进一步设置,具体参考biblatex宏包说明文档。 +\subsubsection{数字} + \begin{property}{}{} 用户给bib源文件录入数字时,应按照GB/T 7714-2015第6.2节要求用阿拉伯数字表示。 为了符合西文文献责任者的字母大小写习惯,本bbx样式文件,通过判断是否存在first name来确定是否是个人作者,当存在first name 时认为是个人作者,不存在则是机构作者,当是个人作者时lastname按GB/T 7714-2015要求全大写,是机构作者则仅大写首字母。所以对于仅有lastname的个人作者,填入信息英文姓的字母请全用大写。个人著者的格式要求参考GB/T 7714-2015第6.3节。 \end{property} +\subsubsection{英文字母} + \begin{property}{}{} 用户给bib源文件录入出版项、西文期刊名缩写以及西文文献的字母时,应按照GB/T 7714-2015第6.4节,第6.5节,6.6节要求,使用符合要求的习惯用法和大小写方式。 本样式文件使用原样打印的方式进行处理。 \end{property} +\subsubsection{标点} + \begin{property}{}{} 用户给bib源文件录入引文信息时不需要考虑标点符号问题,只需录入各数据域的信息即可。 本样式文件实现了GB/T 7714-2015第7部分所给出的著录用符号要求。 \end{property} +\subsubsection{责任者} + \begin{property}{}{} 用户给bib源文件录入引文的责任者信息时,当责任者为多级机关团体时,用户填入auther数据信息时,应按照GB/T 7714-2015第8.1.4节要求,用英文句点.号分隔。 @@ -462,96 +630,52 @@ entryset = {易仕和2013--,Yi2013--}, 本样式文件实现了GB/T 7714-2015第8.1节要求的责任者样式,能自动判断责任者是中文还是英文,并分别处理。并且设置了全局选项useprefix=true,可以使用前缀。 \end{property} +\subsubsection{文献类型标识和载体} + \begin{property}{}{} 用户在给bib源文件录入引文题名信息时,不需要给出文献类型标识/文献载体标识。同一责任者的合订题名,应用户根据GB/T 7714-2015 第8.2.1节的要求,在多个题名间用英文分号分隔,并整体录入到title数据域中。而分卷号,卷次,册次等信息时,除了专利号用number域录入外,其它可以直接在title数据域或者subtitle/titleaddon等数据域中给出。 本样式文件实现了符合GB/T 7714-2015第8.2节要求的格式,能根据条目类型直接给出文献类型标识/文献载体标识并设置给自定义域usera,并在biblatex的参考文献条目驱动中直接使用,各不同类型文献的文献类型标识/文献载体标识,参考GB/T 7714-2015表B.1和B.2。 \end{property} +\subsubsection{版次} + \begin{property}{}{} 用户在给bib源文件录入版次信息时,只要录入版次的整数数字或者录入需要打印的字符串。 本样式文件实现了GB/T 7714-2015第8.3节要求的格式,对于一般的版式格式,根据edition/version域输入的整数进行处理,其它特殊的版本说明,比如新1版,明刻本等直接在edition域录入后原样打印。 \end{property} +\subsubsection{出版项} + \begin{property}{}{} 用户在给bib源文件录入出版项信息时,当出版日期有其它形式的纪年时,将其置于公元纪年后面的()内,并整体录入year或date数据域,比如1845(清同治四年)。而引用日期应录入到urldate数据域。当除了出版日期外还有修改更新日期等时,可在year或date数据域录入第二个日期,并用/符号与前一个出版日期隔开。 本样式文件实现了GB/T 7714-2015第8.4节要求的格式。当出版地和出版者缺省时,中英文自动区分处理。对于用/符号隔开的两个日期,biblatex后端biber能自动解析,后一个日期数据自动解析到endyear等域可作为修改日期等在样式文件中使用。 \end{property} - +\subsubsection{页码} \begin{property}{}{} 用户在给bib源文件录入页码信息时,可以在pages域中根据需要录入可解析的页码(即用整数表示页码,起讫页码用-分隔),比如81-86。也可以直接录入需要打印的信息,比如序2-3等。 本样式实现了GB/T 7714-2015第8.5,8.8.2节的要求,对于能解析的页码自动解析,对于不能解析的页码原样输出。 \end{property} - +\subsubsection{访问路径URL和DOI} \begin{property}{}{} 用户在给bib源文件录入获取和访问路径、数字对象唯一标识符信息时,将访问路径录入到url域中,数字对象唯一标识符格式录入到doi域中即可。 本样式文件实现了GB/T 7714-2015第8.6,8.7节要求的格式。 \end{property} +\subsubsection{卷和期} \begin{property}{}{} 用户在给bib源文件录入卷、期等信息时,如\ref{sec:field}节中所说,合期的期号用/间隔,比如9/10,填入number域,报纸的版次也填入number域。 本样式文件实现了GB/T 7714-2015第8.8节要求的析出文献相关格式。 \end{property} -\section{顺序编码制cbx样式文件的使用说明}\label{sec:cbx:usage} - -顺序编码制的引用样式文件为gb7714-2015.cbx。该样式大体使用标准引用样式numeric-comp的内容。仅对cite,parencite进行了修改,将其原来在行中的位置改到上标中。为满足GB/T 7714-2015第10.1.3节的要求,增加了pagescite命令。为方便在同一文章中同时使用上标和非上标的标准方式,仅将cite命令修改为上标模式,而parencite保留标准样式提供的非上标模式。 - -这些命令使用方式如下: - -\begin{codetex}{顺序编码制cbx样式命令使用说明}{eg:citefornumeric} -不带页码的引用(上标,方括号包围)\cite{Peebles2001-100-100} - -不带页码的引用(非上标,方括号包围)\parencite{Miroslav2004--} - -带页码的引用\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--} - -\pagescite{Peebles2001-100-100}\pagescite[][201-301]{Peebles2001-100-100} - -在页脚中引用和打印文献表\footnote{在脚注中引用\footcite{赵学功2001--}} - \footfullcite{赵学功2001--} -\end{codetex} - -其中,当不指定页码时,pagescite命令默认调用参考文献的页码数据进行输出,如果需要指定页码,那么需要在第二个[]内输入页码内容。 - -\qd{还要注意:对于多个文献一起的压缩形式,指定页码只会应用最后一个参考文献的页码,这是不对的,当然其实这种情况是不应该存在的,指定页码的目的就是具体化某一文献的,因此使用时尽可能使用pagescite\{key1\}pagescite\{key2\}这种形式而不是pagescite\{key1,key2\}}。 - -\section{作者年制bbx样式文件的使用说明} - -作者年制的参考文献样式文件使用了基于标准authoryear样式的标签生成,修改了参考文献表的格式。而参考文献条目著录格式与顺序编码制的样式文件基本相同,除了把年份提到了作者后面作为标签。作者年制参考文献表的引文数据源bib文件所要求的信息录入方式与顺序编码制完全一致,详见\ref{sec:numeric:data}节。 - -\qd{根据文种文献集中的要求,修改了nyt排序格式,增加了userb作为name前的排序域,默认情况下,本样式文件将作者为中文的文献的userb域设置成cn,英文的设置成en。这一设置过程,在处理样式的时候由biber自动处理,当出现问题或者有更多文种分集且有特殊顺序时,可以在bib文件中给相应文种文献的userb域设置适合排序的字符串。比如中文文献设置为cn,英文文献设置为en,法文文献设置为fr,那么排序中,相应的中文文献排在最前面,英文文献在中间,法文文献最后,因为升序情况下字母顺序是c然后e然后f。} - -%上一段2016-1114更新,下面是以前的说法。 -%\qd{根据文种文献集中的要求,修改了nyt排序格式,增加了userb作为name前的排序域,当有需求进行多文种分集且有特殊顺序时,在bib文件中给相应文种的文献设置适合排序的字符串。比如中文文献设置为cn,英文文献设置为en,法文文献设置为fr,那么排序中,相应的中文文献排在最前面,英文文献在中间,法文文献最后,因为升序情况下字母顺序是c然后e然后f。} - - - -\section{作者年制cbx样式文件的使用说明}\label{sec:cbxay:usage} - -作者年制的引用样式文件为gb7714-2015ay.cbx。该样式大体使用标准引用样式authoryear的内容。仅对cite,parencite进行了修改,将引用标签用括号括起来。为满足GB/T 7714-2015第10.2.4节的要求,增加了pagescite命令。为满足GB/T 7714-2015第10.2.1节的要求,增加了yearpagescite命令用于处理作者年制文中已有作者只需要年份和页码的情况。 - -这些命令使用方式如下: - -\begin{codetex}{作者年制cbx样式命令使用说明}{eg:citeforauthoryear} -不带页码的引用\cite{Peebles2001-100-100}\parencite{Miroslav2004--} -带页码的引用\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--} -\pagescite{Peebles2001-100-100}\pagescite[][201-301]{Peebles2001-100-100} - -作者年制文中已有作者只需要年份和页码的情况,使用命令yearpagescite,而顺序制的情况下该命令与pagescite命令作用相同。 -比如见赵耀东\yearpagescite[][205]{赵耀东1998--}和Simon\yearpagescite[][15]{Simon2001--}的文献。 - -在页脚中引用和打印文献表\footnote{在脚注中引用\footcite{赵学功2001--}} - \footfullcite{赵学功2001--} -\end{codetex} \section{参考文献著录格式测试} @@ -641,26 +765,26 @@ entryset = {易仕和2013--,Yi2013--}, \cite{Dublin2012-06-14--} -\printbibliography[heading=subbibintoc,type=book,notkeyword=standard,title=【普通图书-著录格式示例】] +\printbibliography[heading=subbibliography,type=book,notkeyword=standard,title=【普通图书-著录格式示例】]%subbibintoc \defbibfilter{collections}{% type=collection or type=proceedings or type=incollection or type=inproceedings } -\printbibliography[heading=subbibintoc,filter=collections,title=【论文集、会议录-著录格式示例】] -\printbibliography[heading=subbibintoc,type=report,title=【报告-著录格式示例】] -\printbibliography[heading=subbibintoc,type=thesis,title=【学位论文-著录格式示例】] -\printbibliography[heading=subbibintoc,type=patent,title=【专利-著录格式示例】] +\printbibliography[heading=subbibliography,filter=collections,title=【论文集、会议录-著录格式示例】] +\printbibliography[heading=subbibliography,type=report,title=【报告-著录格式示例】] +\printbibliography[heading=subbibliography,type=thesis,title=【学位论文-著录格式示例】] +\printbibliography[heading=subbibliography,type=patent,title=【专利-著录格式示例】] \defbibfilter{standard}{% ( type=book or type=inbook ) and keyword=standard } -\printbibliography[heading=subbibintoc,filter=standard,title=【标准文献-著录格式示例】] -\printbibliography[heading=subbibintoc,type=inbook,notkeyword=standard,title=【专著中析出的文献-著录格式示例】] -\printbibliography[heading=subbibintoc,type=article,notkeyword=news,title=【期刊中析出的文献-著录格式示例】] -\printbibliography[heading=subbibintoc,type=article,keyword=news,title=【报纸析出的文献-著录格式示例】] -\printbibliography[heading=subbibintoc,type=online,title=【电子资源-著录格式示例】] +\printbibliography[heading=subbibliography,filter=standard,title=【标准文献-著录格式示例】] +\printbibliography[heading=subbibliography,type=inbook,notkeyword=standard,title=【专著中析出的文献-著录格式示例】] +\printbibliography[heading=subbibliography,type=article,notkeyword=news,title=【期刊中析出的文献-著录格式示例】] +\printbibliography[heading=subbibliography,type=article,keyword=news,title=【报纸析出的文献-著录格式示例】] +\printbibliography[heading=subbibliography,type=online,title=【电子资源-著录格式示例】] \end{refsection} \subsection{测试:专著book和专著中的析出文献inbook}\label{sec:test:book} @@ -675,6 +799,7 @@ and keyword=standard \cite{Parsons2000a--,Parsons2000b--,Parsons2000--,Parsons2000nodate--, Parsons2000noloc--,Parsons2000nopub--,Parsons2000nopubnoyear--, Parsons2000nopubpages--,Parsons2000noauthor--} + \item 年份信息有额外说明的文献比较测试\cite{汪昂1912--,汪昂1881--,王夫之1845--} \item 页脚中引用和打印文献表\footnote{参考文献在脚注中引用\footcite{赵学功2001--}} \footfullcite{赵学功2001--} \item 专著的双语文献引用测试\cite{bilangyi2013} @@ -684,10 +809,10 @@ Parsons2000nopubpages--,Parsons2000noauthor--} \parencite[见][49页]{Miroslav2004--}\cite[见][49页]{蔡敏2006--} \item 作者年制文中已有作者只需要年份和页码的情况,使用命令yearpagescite,而顺序制的情况下该命令与pagescite命令作用相同。比如: 见赵耀东\yearpagescite[][205]{赵耀东1998--}和Simon\yearpagescite[][15]{Simon2001--}的文献。 \item 专著更多测试 -\cite{GPS1988--}\cite{顾炎武1982--}\cite{PIGGOT1990--}\cite{PEEBLES2001--}\cite{王夫之1845--} +\cite{GPS1988--}\cite{顾炎武1982--}\cite{PIGGOT1990--}\cite{PEEBLES2001--} \cite{Poisel2013--}\cite{张伯伟2002--}\cite{2009-155-155} \cite{GPS1988--,CRANE1972--,CRAWFPRD1995--,Gradshteyn2000--,IFLAI1977--,Kinchy2012-50-50,Lin2004--,Miroslav2004--,Mittelbach2004--,OBRIEN1994--} -\cite{PEEBLES2001--,Peebles2001-100-100,PIGGOT1990--,Poisel2013--,Praetzellis2011-13-13,Proakis2007--,Reed2005--,ROOD2001--,Ross2010--,Simon2004--,Simon2001--,Stueber2001--,Yi2013--,YUFIN2000--, 埃伯哈德$ullet$蔡德勒等2012--,蔡敏2006--,陈希孺2009--,陈志杰2006--,樊昌信2005--,顾炎武1982--,广西壮族自治区林业厅1993--,郭文彬2006--,候文顺2010-119-119,胡承正2010-112-112,胡广书2012--,胡伟2011--,蒋有绪1998--,库恩2012--,李云霞2009--,廖平2012--,刘海洋2013--,罗斯基2009--,美国妇产科医师学会2010-38-39,鸟哥--,孙玉文2000--,唐绪军1999-117-121,同济大学数学系2014--,汪昂1912--,汪昂1881--,王夫之1845--,王雪松2010--,辛希孟1994--,阎毅2013--,杨林2015--} +\cite{PEEBLES2001--,Peebles2001-100-100,PIGGOT1990--,Poisel2013--,Praetzellis2011-13-13,Proakis2007--,Reed2005--,ROOD2001--,Ross2010--,Simon2004--,Simon2001--,Stueber2001--,Yi2013--,YUFIN2000--, 埃伯哈德$ullet$蔡德勒等2012--,蔡敏2006--,陈希孺2009--,陈志杰2006--,樊昌信2005--,顾炎武1982--,广西壮族自治区林业厅1993--,郭文彬2006--,候文顺2010-119-119,胡承正2010-112-112,胡广书2012--,胡伟2011--,蒋有绪1998--,库恩2012--,李云霞2009--,廖平2012--,刘海洋2013--,罗斯基2009--,美国妇产科医师学会2010-38-39,鸟哥--,孙玉文2000--,唐绪军1999-117-121,同济大学数学系2014--,王雪松2010--,辛希孟1994--,阎毅2013--,杨林2015--} \cite{张伯伟2002--,赵凯华1995--,赵学功2001--,赵耀东1998--,中国企业投资协会2013--,中国社会科学院语言研究所词典编辑室1996--,庄钊文2007--,1962-50-50,2009-155-155,booknoauthor,Parsons2000noauthor--} \end{enumerate} @@ -762,7 +887,7 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \item 专利引用\cite{KOSEKI2002--,TACHIBANA2002--,河北绿洲生态环境科技有限公司2001--,姜锡洲1989--,刘加林1993--,西安电子科技大学2002--,张凯军2012-04-05--} \end{enumerate} -注意:文献\cite{刘加林1993--}的location定义了中国,GB/T 7714-2015中其实并不需要该域,但这里并没有去掉,先放着也许以后标准修改后可能用的着。如果要去掉,那么将bib文件中该条目的location去掉就行了。 +\qd{注意:文献\cite{刘加林1993--}的location定义了中国,GB/T 7714-2015中其实并不需要该域,但这里并没有去掉,先放着也许以后标准修改后可能用的着。如果要去掉,那么将bib文件中该条目的location去掉就行了。} \printbibliography[heading=bibliography,title=【专利】] \end{refsection} @@ -836,8 +961,9 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} 不带页码的引用(顺序编码制非上标,方括号包围;作者年制行内,括号包围。):文献\parencite{Miroslav2004--}中。 带页码的引用\\ -标准命令,默认样式:\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--} -增加命令,GB/T 7714-2015样式:\pagescite{Peebles2001-100-100}\pagescite[][201-301]{Peebles2001-100-100} +标准命令,默认样式:\cite[见][49页]{蔡敏2006--}\parencite[见][49页]{Miroslav2004--}\\ +增加命令,GB/T 7714-2015样式:\pagescite{Peebles2001-100-100} +\pagescite[][201-301]{Peebles2001-100-100} 已有作者只需要年份和页码的情况(使用命令yearpagescite)\\ 作者年制中(上标),顺序编码制中(与pagescite作用相同),比如:见赵耀东\yearpagescite[][205]{赵耀东1998--}和Simon\yearpagescite[][15]{Simon2001--}的文献。 @@ -861,7 +987,7 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \begin{figure}[!htb] \centering \fbox{\includegraphics[width=0.9\textwidth,page=2]{egbibenv-left.pdf}} - \caption{顺序编码制序号标签右对齐}\label{bib:env:left} + \caption{顺序编码制序号标签左对齐}\label{bib:env:left} \end{figure} 顺序编码制序号标签-项对齐 @@ -870,10 +996,10 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \begin{figure}[!htb] \centering \fbox{\includegraphics[width=0.9\textwidth,page=2]{egbibenv-gb7714-2015.pdf}} - \caption{顺序编码制序号标签右对齐}\label{bib:env:gb} + \caption{顺序编码制序号标签项对齐}\label{bib:env:gb} \end{figure} -\subsection{测试:phdthsis等条目类型的兼容性}\label{sec:entrytype:compatibility} +\subsection{测试: phdthsis等条目类型的兼容性}\label{sec:entrytype:compatibility} \begin{refsection} 测试有些bib文件给出的mastersthsis,phdthsis,www,electronic,standard,techreport,conference条目类型,测试本样式增加的newspaper类型。 @@ -896,48 +1022,96 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \printbibliography[heading=bibliography,title=【处理参考文献信息中\&等特殊字符】] \end{refsection} -\section{样式文件设计思路及相关的biblatex高级功能}\label{sec:biblatex:mech} -使用biblatex总的感受,biblatex相当完善和强大,笔者制作的样式文件实现的功能和格式只是biblatex功能的很小一部分,biblatex提供的更多功能其实都没有用到。可以说,biblatex作为参考文献问题的一个完整解决方案是名副其实的。biblatex宏包的一些功能,以及笔者在设计样式文件时应用这些功能的思路和方法介绍如下: +\subsection{测试:处理作者年制article中卷信息缺省的标点}\label{sec:article:novol} +\begin{refsection} +文献\cite{刘彻东1998-38-39}\cite{亚洲地质图编目组1978-194-208} +\cite{高光明1998-60-65} -\begin{enumerate} - \item 考虑到我国引用参考文献通常是中英文混合的情况,修改过程没有考虑针对中文的本地化处理,而是在英文本地化的基础(英文的本地化字符串设置文档是english.lbx)上添加一些中文要求的本地化字符串来使用。而为了区分使用中英文的字符串,对参考文献各条目内容进行中英文判断,若中文则使用中文字符串,若英文则使用英文字符串。 +\printbibliography[heading=bibliography,title=【author-year style:article without volume】] +\end{refsection} - \item 标注命令自定义,在脚注中引用文献,或者把引文放在脚注中或者旁注中 - \begin{itemize} +\subsection{测试: gbpub选项导致的问题}\label{sec:option:deal} +\begin{refsection} +文献\cite{AAAS1883--} +\cite{陈志勇2011--} +\cite{萧钰2001--} +\cite{北京交通大学研究生公众号2016--} +\cite{赵学功2001--} + +\printbibliography[heading=bibliography,title=【added option test】] +\end{refsection} + +\subsection{测试: online条目信息严重缺失和gbnoauthor选项导致的问题}\label{sec:opt:noauthor} +\begin{refsection} +文献\cite{olnoauthorcn} +\cite{olnoauthoren} +\cite{Allianceurlonly} + +\printbibliography[heading=bibliography,title=【online entry with url info only】] +\end{refsection} + + +\section{样式文件设计、实现、应用}\label{sec:biblatex:mech} +使用biblatex总的感受,biblatex相当完善和强大,笔者制作的样式文件实现的功能和格式只是biblatex功能的很小一部分,biblatex提供的更多功能其实都没有用到。可以说,biblatex作为参考文献问题的一个完整解决方案是名副其实的。笔者在设计样式文件时应用biblatex宏包功能的思路和实现总结如下: + +\subsection{基本思路} + +考虑到我国引用参考文献通常是中英文混合的情况,修改过程没有考虑针对中文的本地化处理,而是在英文本地化的基础(英文的本地化字符串设置文档是english.lbx)上添加一些中文要求的本地化字符串来使用。而为了区分使用中英文的字符串,对参考文献各条目内容进行中英文判断,若中文则使用中文字符串,若英文则使用英文字符串。 + +这里的中英文判断主要是在tex中的判断,利用对域中的信息进行检测,当信息的第一个字符是CJK字符时,判断该域的信息是中文的,否则是英文的。 + +在作者年制中不同语种文献分集时也有一个中英文判断,主要是利用动态数据修改的方法。利用perl正则表达式判断作者和标题域中是否有中文信息(可以用排除法即匹配不是英文数字标点的字符通常是中文字符,当然最直接的是用unicode的中文字符范围匹配),有的话设置cn,否则为en。事实上这种判断可以进一步扩展,利用强大的perl正则表达式,对所有的关键域进行判断,并在一些域中设置标识,用于tex输出时进行判断,而避免直接使用上述CJK字符判断函数。当然目前还是采用判断CJK字符的方法。 + + +\subsection{脚注或旁注文献} + 标注命令自定义,在脚注中引用文献,或者把引文放在脚注中或者旁注中 + \begin{enumerate} \item 标注命令定义可以使用DeclareCiteCommand命令,设置上标,包围符号,标注前后内容等。针对GB/T7714-2015中关于引用标注的特殊要求,增加了一些方便实现要求的命令比如pagescite、yearpagescite等。 \item 在footnote的脚注文本中使用footcite命令 \item 在正文中使用footfullcite命令,见4.11.6 Mixing Programming Interfaces - \end{itemize} + \end{enumerate} - \item 参考文献标题修改并将标题加入目录中 - \begin{itemize} +\subsection{参考文献标题} + 参考文献标题修改并将标题加入目录中 + \begin{enumerate} \item 利用defbibheading\{bibliography\}[\textbackslash bibname]\{\}重定义标题 \item 使用bibliography外的其它标题样式比如bibintoc等 \item 利用titlesec等宏包进行修改标题样式,利用其局部性可以调整生成多种样式。注意: 利用titlesec后,直接在defbibheading\{bibliography\}[\textbackslash bibname]\{\} 中放置居中命令centering无效。 - \end{itemize} + \end{enumerate} - \item 标点的特点和机制 - \begin{itemize} + +\subsection{标点和空格的特点和机制} + \begin{enumerate} \item 标点符号设置比如:renewrobustcmd*\{\textbackslash bibinitperiod\}\{\}和renewcommand*\{\textbackslash revsdnamepunct\}\{\}等用于全局修改标点。 \item 如isdot/adddot,adddot将原样(逐字,如实)句点转换为缩写点在有利用printtext输入原样字符的时候很重要比如[s.n.] 中,比如title末尾。 \item 利用newunit输出的标点,需要后面遇到printfield等命令有内容才输出标点,这是标点的异步处理机制。 \item setunit*的作用是前面printtext等没有输出时候就不输出,见4.11.7.3节的应用以及出版项缺省时的代码处理。 - \end{itemize} - - \item biber动态数据处理,详见4.5.3 Dynamic Modification of Data和bbx文件中DeclareSourcemap的内容。利用biber在处理数据源时,动态的处理一些数据,比如设置一些域的值,可以用于进一步的判断和使用。 - \begin{itemize} + \item 标点和空格的调试方法:有时引入多余的空格和标点后很难快速处理,那么需要调试,调试的第一步是注释掉多余的代码,实现无多余空格或标点情况(一种快速方法是直接在一个printtext输出各相关域),然后一步步恢复原来的代码,直到找到多余空格或标点产生的原因,最后根据原因作出修改。 + \item 多余空格的引入,可能来自于如下方面(下面是已经遇到的,可能还有更多) + \begin{itemize} + \item 行末空格引入,解决方法:把相关的代码行结尾用\%符号注释。 + \item mkbibparens等命令引入,解决方法:利用printtext\{(\},printtext\{)\}来代替 + \item nopunct等命令引入,这种引入的空格使用unspace命令还消除不了,解决方法:避免使用nopunct命令,而在标点设置时多做判断,只有有内容时才设置标点,而不是过分依赖biblatex提供的标点异步处理机制。 + \end{itemize} + \end{enumerate} + + +\subsection{动态数据修改} +biber动态数据处理,详见4.5.3 Dynamic Modification of Data和bbx文件中DeclareSourcemap的内容。利用biber在处理数据源时,动态的处理一些数据,比如设置一些域的值,可以用于进一步的判断和使用。 + \begin{enumerate} \item map的作用,对条目逐条进行处理 \item final作用,当不成立map终止。 \item append的作用,给域添加信息 \item origfieldvalue来源 - \item overwite选项有无的作用,无overwite时,只要域原有信息,那么就不在map,有overwite时,则进行重写。\emph{注意:使用append的时候也需要overwite选项}。 + \item overwite选项有无的作用,无overwite时,只要域原有信息,那么就不再map,有overwite时,则进行覆盖。\bc{注意:使用append的时候也需要overwite选项}。 \item 动态数据处理中利用正则表达式可以用来处理特殊字符,处理\%,\#直接在regexp中写字符都没有问题,但是对于\&字符就存在问题,所以对于该字符使用十六进制表示方法\verb|\x26|。 \item 3.4版的biblatex可以使用foreach选项,而3.0版的biblatex只能一个域一个域的处理,意味着每一个域处理都要写一个map步。 - \end{itemize} + \item date域仅作为解析用,不出现在bbl文件中,所以在bbx内部进行日期判断的时候要注意不用date 进行判断而要用其解析处理的year等进行判断,而且当date域的内容不符合解析格式要求时,自动忽略掉,那么信息就丢失了,因此当有不符合解析格式的日期信息时应放到year域中。 + \end{enumerate} - \item biblatex数据模型与动态数据处理的关系。biblatex提供了数据模型定义功能,这在真正需要定义一些新的条目类型和域时是用的到的。但实际上,从本样式实践的经验看,为了biblatex的兼容性考虑,没有必要使用数据模型定义功能去费力的定义新的条目类型,而是直接利用动态数据处理来将bib 中的一些类型转换成biblatex支持的类型来的方便,如果一定要区分可以利用一些域的信息进行区分,比如note域等于news或standard。 - \begin{itemize} - \item biblatex做的别名处理是用DeclareDriverSourcemap做的,这是驱动层的映射。在本样式中,因为usera域是在用户层的映射中做的,所以biblatex做的默认别名处理还不够,还需要在用户层首先处理usera域。而因为DeclareDriverSourcemap 中会增加一些不需要的信息,这可以利用DeclareSourcemap,DeclarestyleSourcemap先进行映射,这样就避开了DeclareDriverSourcemap。或者在增加DeclareDriverSourcemap,将标准样式中的默认DeclareDriverSourcemap增加的信息去掉。 + biblatex数据模型与动态数据处理的关系。biblatex提供了数据模型定义功能,这在真正需要定义一些新的条目类型和域时是用的到的。但实际上,从本样式实践的经验看,为了biblatex的兼容性考虑,没有必要使用数据模型定义功能去费力的定义新的条目类型,而是直接利用动态数据处理来将bib 中的一些类型转换成biblatex支持的类型来的方便,如果一定要区分可以利用一些域的信息进行区分,比如note域等于news或standard。 + \begin{enumerate} + \item biblatex做的别名处理是用DeclareDriverSourcemap做的,这是驱动层的映射。在本样式中,因为usera域是在用户层的映射中做的,所以biblatex做的默认别名处理还不够,还需要在用户层首先处理usera域。而因为DeclareDriverSourcemap 中会增加一些不需要的信息,这可以利用DeclareSourcemap,DeclarestyleSourcemap(\bc{注意texlive2016的biblatex3.4仅支持1个styleSourcemap,而biblatex3.7则已经支持多个styleSourcemap})先进行映射,这样就避开了DeclareDriverSourcemap。 或者在增加DeclareDriverSourcemap,将标准样式中的默认DeclareDriverSourcemap增加的信息去掉。 \item 数据模型在blx-dm.DEF中,可以看到standard有条目类型定义,但域和约束没有定义,而biblatex标准样式默认做的别名处理中的其它一些条目比如electronic等时有域和约束定义的。 \item 标准样式standard.BBX中的DeclareBibliographyAlias\{*\}\{misc\}将一些数据模型中没有定义的条目直接用misc条目的驱动处理,这不是驱动层的数据源映射,只是利用其驱动进行输出。由一个问题是DeclareBibliographyAlias\{newspaper\}\{article\}是否可以实现?还是要定义数据模型?从实践结果看是不需要定义数据模型的,而且驱动的别名处理可以实现类似驱动层映射的效果。比如: 做了用户层映射后: @@ -971,45 +1145,115 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \end{texlist} \item 从实践看,数据模型中完全没有定义的条目类型newspaper也可以进行数据源映射。 - \end{itemize} + \end{enumerate} - \item 引用标签的生成机制,即责任者截短时的歧义消除问题,见4.11.4 Name Disambiguation 节。 - \begin{itemize} +\subsection{标注(引用)标签} +引用标签的生成机制,即责任者截短时的歧义消除问题,见4.11.4 Name Disambiguation 节。 + \begin{enumerate} \item uniquename的作用 \item uniquelist的作用 - \end{itemize} + \end{enumerate} - \item biblatex的核心-参考文献样式文件的设计 - \begin{itemize} +\subsection{样式文件简单设计方法} + biblatex的核心-参考文献样式文件的设计 + \begin{enumerate} \item driver的作用:条目驱动,修改一些顺序,略去一些输出和标点 \item format的作用:域打印格式,修改一些斜体,强调样式等。 \item micro的作用:输出宏,修改需要的输出内容 \item command的作用:一些设置和命令 \item sty中的代码 - \end{itemize} + \end{enumerate} + +\subsection{宏包选项增加} + +biblatex的宏包选项增加 + \begin{enumerate} + \item 在gb7714-2015.bbx文件中有四种判断的方式包括:版本的判断,参考环境选项的判断,出版项处理控制选项的判断,一般的域的是否定义或与字符串比较是否相同的判断。 + + 第一种判断,是直接根据已有的信息进行处理,给出toggle:iftexlivesix的设置,然后根据这一信息做任何的定义。 + + 第二种判断,是通过宏包选项align给出的,这一选项是string类型。在选项的执行代码中直接给出命令,这种情况下,特别要注意DeclareBibliographyOption选项定义命令中给出的默认值是在加载该选项但不给出值时的默认值,而不是将选项默认设置为该默认值。因此当加载时不给出align选项时,不执行任何的语句,即不执行setalignleft,也不执行setaligngbstyle,也就是参考文献环境命令使用标准样式给出的定义而没有在setalignleft或setaligngbstyle中重定义。 + 如果给出选项align,相当于align=默认值,如果给出选项align=指定值,那么值就是指定值,然后并执行DeclareBibliographyOption的定义代码,根据值进行判断。 + + 第三种判断,通过gbpub选项给出,这一选项类似于standard.bbx中定义的url等选项。给出选项定义后: + \begin{texlist} + \newtoggle{bbx:gbpub} + \DeclareBibliographyOption[boolean]{gbpub}[true]{% + %\settoggle{bbx:gbpub}{#1} %或采用下面这一句 + \ifstrequal{#1}{false}{\togglefalse{bbx:gbpub}}{\toggletrue{bbx:gbpub}}} + \end{texlist} + 默认可以利用toggle:bbx:gbpub进行任何的定义,但这时默认值是newtoggle命令给出的默认值false。 + + 要使用选项给出的默认值,还需要使用命令: + \begin{texlist} + \ExecuteBibliographyOptions{gbpub} + \end{texlist} + 这时bbx:gbpub的值设置为true。这一命令用来执行选项的,如果不给出这一命令,且宏包加载选择中没有给出选项设置,那么toggle只有新建toggle时的默认定义。如果给出了命令 + \begin{texlist} + \ExecuteBibliographyOptions{gbpub} + \ExecuteBibliographyOptions{gbpub=true} + \ExecuteBibliographyOptions{gbpub=false} + \end{texlist} + 等价于在宏包加载时给出选项。但是宏包加载选择可以覆盖这个命令的设置。 + + 如果在宏包加载时给出选项gbpub=false,那么bbx:gbpub的值设置为false。 + 如果在宏包加载时给出选项gbpub,gbpub=true,那么bbx:gbpub的值设置为true。 + + 第四种判断,利用iffieldundef和iffieldequalstr进行判断即可。 + + \item 要注意使用toggle时,如果先根据toggle判断然后定义,这种情况下在bbx加载时就已经根据当前的值展开了,所有DeclareBibliographyOption中的任何toggle设置都是无效的。比如:上述第二种宏包选项设置中,命令DeclareBibliographyOption是设置string选项,如果用ifstrequal 判断出选项的参数,然后设置toggletrue或false,然后再后面根据toggle的true或false来展开内容,是不行的。因为后面的toggle判断后的内容先于设置toggletrue或false展开了。 + + 如果在文档正文中看,toggle设置为true没有问题,但就是没有bbx 文件中对应设置为true 的展开。需要根据选项宏包设置而进行不同的展开那么就不能采用这样的方式,而应该采用直接在选项设置命令展开,不能用toggle判断然后展开。尝试代码可以见\pageref{up:161207}页中更新说明中的注释代码。 + + 但是在宏的定义中使用toggle就没有问题,因为只是使用toggle来定义,在使用展开前,只要toggle变化,都可以影响最终的展开。 + + \begin{texlist} + %\newtoggle{bbx:gbpub} + %\DeclareBibliographyOption[boolean]{gbpub}[true]{% + % \settoggle{bbx:gbpub}{#1}} + %这种机制的标识判断,能用于usemacro使用,域格式定义中,但无法用来判断后定义macro + %定义宏和使用宏是两个不同的展开层级,而可以在定义macro中进行判断 + %\ExecuteBibliographyOptions{gbpub} + %但是使用这句默认设置可以用来定义macro + + %\DeclareBibliographyOption{gbpub}[true]{%应使用这种直接的机制 + %\ifstrequal{#1}{false}{\pubaddmacronewdefine}{\pubaddmacroredefine}} + + %特别注意DeclareBibliographyOption,而给出的默认值是在加载时没有选项没有给出值时的默认值。 + %当加载时不给出gbpub选项时,不执行ifstrequal判断语句,无任何加载。 + %如果给出选项gb,或者gb=true,那么ifstrequal判断仍然是假,执行的默认的加载\pubaddmacroredefine + %如果给出选项false,那么ifstrequal判断是真,执行的就是非默认的加载\pubaddmacronewdefine + %\ExecuteBibliographyOptions{gbpub}%这句报错是因为\pubaddmacroredefine没有定义,如果把定义放到前面那么应该是可以的。 + + %还是采用另一种方式可以较好的进行默认选项的处理 + \newtoggle{bbx:gbpub} + \DeclareBibliographyOption[boolean]{gbpub}[true]{% + %\settoggle{bbx:gbpub}{#1} %或采用下面这一句 + \ifstrequal{#1}{false}{\togglefalse{bbx:gbpub}}{\toggletrue{bbx:gbpub}}} + \ExecuteBibliographyOptions{gbpub} + + \end{texlist} - \item biblatex的宏包选项增加 - \begin{itemize} - \item 需要重点注意的是:宏包选项设置命令DeclareBibliographyOption中,如果设置string选项,并用ifstrequal判断出选项的参数,然后设置toggletrue或false,然后再后面根据toggle的true 或false来展开内容,是不行的。因为后面的toggle判断先于设置toggletrue或false展开。这样,如果在文档正文中看,toggle设置为true没有问题,但就是没有bbx 文件中对应设置为true 的展开。所以不能采用这样的方式。而应该采用直接在选项设置命令展开,不用在多一道toggle 判断了。尝试代码可以见\pageref{up:161207}页中更新说明中的注释代码。 \item 注意:ExecuteBibliographyOptions命令是用来执行选项的,如果不给出设置选项的值,那么使用默认的参数。比如设置了一个gb7714选项,并用ExecuteBibliographyOptions\{gb7714\}进行设置,那么相当于设置为gb7714=true - \item 摒弃了上述说明的方式后,采用在选项执行代码中直接调用命令的方式,详见bbx文件。 - \end{itemize} - \item biblatex的宏包参考文献表的打印 - \begin{itemize} + \end{enumerate} + + +\subsection{文献表环境和打印输出} + biblatex的宏包参考文献表的打印 + \begin{enumerate} \item 根据biblatex.sty文件中的\verb|\blx@bibliography|命令可以知道,定义的参考文献表的环境的开始代码在命令中\verb|\blx@bibliography|中,结束代码在\verb|\blx@endbibliography|中,循环项代码在\verb|\blx@bibitem|中的\verb|blx@item@\blx@theenv}|命令中。参考文献循环打印依靠\verb|\blx@listloop|命令实现。 \item 从\verb|\blx@listloop|可以知道,各条参考文献表的指引信息是混合在一起的并且以|字符为分隔。将混合的参考文献指引信息解析成单独的指引信息,并交给\verb|\blx@bibitem|命令处理。 \item \verb|\blx@bibitem|首先开始一个编组,然后根据单独一条参考文献的指引信息,获取数据,执行判断,利用参考文献表环境定义的循环项代码对参考文献内容设置段落格式,最后结束编组。在定义align=gb7714-2015样式的段落格式时,采用了parshape或者hangindent命令来实现,所以其中增加了一个par命令以使其生效。 - \end{itemize} + \end{enumerate} -\end{enumerate} -\section{样式文件一些需要说明的问题} +\subsection{其它需要说明的问题} 下面的问题想到哪写到哪,没有特别的顺序: \begin{enumerate} \item 因为采用xelatex编译,所以样式文件直接采用UTF-8编码,没有考虑GBK编码。 - + \item \zhongdian{【Most Important】【注意】:texlive2015中的biblatex版本是3.0,texlive2016中biblatex的版本是3.4,新版本对于名字域打印有了较大变化(即不同版本的biblatex对于DeclareNameFormat的输入参数处理有所不同,如例\ref{eg:name:variables}所示),所以需做相应的修改,为此在biblatex中首先进行版本判断,然后根据版本不同分别进行设置。} \begin{codetex}{texlive2016中biblatex3.4版Name域格式输入参数的修改}{eg:name:variables} @@ -1069,13 +1313,34 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \item 范围解析函数,详见bbx文件内容。 - \item 消除可能多出来的空格方法,把相关的代码行结尾用\%符号注释。 - \item 目前符合GB/T7714-2005或GB/T7714-2015参考文献著录规则的biblatex样式有好几个实现,除了这里作者提供的之外,还有李志奇(icetea)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=74474}} 和沈周(szsdk)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152561&extra=page\%3D1}} 分别提供的样式文件,效果是类似的,也感谢两位作者的分享! + \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编译。 + \end{itemize} + \end{enumerate} +\section{总结} + +样式文件在标准样式基础上修改设计而成,读者若查看样式文件内容可以看到作者对各目标要求所做的修改及其注释,读者也可以根据自己的需求进行修改,作者设计样式文件的思路以及在设计过程中用到的一些biblatex宏包功能说明,详见第\ref{sec:biblatex:mech}节和\footnote{\makebox{LaTeX文档中文参考文献的biblatex解决方案,地址:\url{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}}}的第2.7节。 + +需要特别说明的是,在作者设计完成这个样式之前,一直都是在使用基于李志奇编写的样式文件修改的参考文献样式 +\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=74474}}, +其中关于usera域的使用思路和解析卷期范围的函数对于作者设计gb7714-2015样式很有启发,非常感谢。在完成样式设计过程中,因为希望通过判断条目的内容来判断中英文,特别需要一个好用的判断CJK字符的函数,因此在知乎、CTEX论坛和微博提问,得到了包括秀文工作组、刘海洋、leipility、qingkuan等人的回答,多有受益,特别是刘海洋(LeoLiu)给出的回答非常完美 +\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152663&extra=page\%3D3}} +,其中代码直接用于本参考文献样式,深表感谢。当然还有更多这里没有提到姓名的师长和朋友们的热心帮忙,在此一并表示感谢! + + + \section{存在的问题和下一步工作} @@ -1099,16 +1364,16 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \item 当专著同时存在作者和编者的时候,GB/T 7714-2015没有明确的规定,所以目前样式文件中以biblatex标准样式的方式处理,这种处理因为与本地化相关,直接应用可能不好看的,也许需要修改。 - \item 因为GB/T 7714-2015中给出的了一些著录格式,如果把这些著录格式作为一个严格标准,那么条目中只能出现其中规定的域,而往往在bib文件中可能存在一些另外的信息比如chapter等,而且从标准样式修改的驱动中也仍然带有这些域的处理,如果为了标准化规范化考虑,可以去掉国标中没有提到的域的信息,可能使得内容更为标准,这可以通过修改增加数据模型,数据源动态修改,驱动修改(驱动中目前存在较多的似乎用不到的域,而且意义不是非常明确,这个等到biblatex文档中文版完成后再结合它全面的进行梳理)三条路子做到,需要的可以在下一步实现(2017-0226)。 + \item 因为GB/T 7714-2015中给出的了一些著录格式,如果把这些著录格式作为一个严格标准,那么条目中只能出现其中规定的域,而往往在bib文件中可能存在一些另外的信息比如chapter等,而且从标准样式修改的驱动中也仍然带有这些域的处理,如果为了标准化规范化考虑,可以去掉国标中没有提到的域的信息,可能使得内容更为标准,这可以通过修改增加数据模型,数据源动态修改,驱动修改(驱动中目前存在较多的似乎用不到的域,而且意义不是非常明确,这个等到biblatex说明文档中文版完成后再结合它全面的进行梳理)三条路子做到,需要的话,可以在下一步实现(2017-0226)。 \end{enumerate} \subsection{下一步工作} \begin{enumerate} + \item 到1.0h版为止,进一步完善了样式宏包,该版本将是最后支持texlive2015的版本,以后版本的功能实现将基于最新texlive中biblatex版本,而不再考虑texlive2015中3.0版的biblatex。1.0f版完善了align 选项(用于实现GB7714 风格的著录文献表标签,texlive2016 有效),带花括号的责任者的中英文判断等功能对texlive2015 的兼容性。1.0g版增加对mastersthesis,phdthesis,www,electronic,standard,techreport,conference,newspaper等条目类型的兼容,增加了对标准样式standard.bbx中url包选项的兼容性,增加了析出文献标识符//后面的短空格以支持著录表的断行机制,增加了特殊字符处理功能并实现对texlive2015 的兼容,给出了gb7714风格参考文献著录表文本转换为bib文件的perl脚本,与gb7714-2015 样式形成闭环。 + \item 到1.0e版为止,功能需求已经完全实现,剩下的问题可能是一些文献具有特殊信息或者特殊情况时带来的适应性问题,这需要经过大量的测试来发现问题。各位朋友如果发现什么问题,请邮件联系,作者会非常感谢! - \item 到1.0g版为止,进一步完善了样式宏包,该版本将是最后支持texlive2015的版本,以后版本的功能实现将基于最新texlive中biblatex版本,而不再考虑texlive2015中3.0版的biblatex。1.0f版完善了align 选项(用于实现GB7714 风格的著录文献表标签,texlive2016 有效),带花括号的责任者的中英文判断等功能对texlive2015 的兼容性。1.0g版增加对mastersthesis,phdthesis,www,electronic,standard,techreport,conference,newspaper等条目类型的兼容,增加了对标准样式standard.bbx中url包选项的兼容性,增加了析出文献标识符//后面的短空格以支持著录表的断行机制,增加了特殊字符处理功能并实现对texlive2015 的兼容,给出了gb7714风格参考文献著录表文本转换为bib文件的perl脚本,与gb7714-2015 样式形成闭环。 - \item 打算翻译biblatex宏包的说明文档和biber的说明文档,这个已经在进行中,完成了一部分,但因为只是业余时间做,可能最终完成的时间会比较长。如果有朋友觉得这个事情有意义,愿意一起来完成这个事情,非常欢迎,请email联系。 %\item 进一步完善上一节提到的问题。 @@ -1117,6 +1382,342 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \section{更新历史} %============================ +\updateinfo[2017-04-11]{update to version 1.0h}\label{up:170411} +\begin{enumerate} +\item texlive2017中biblatex3.7对于authoryear样式中的date+extrayear宏有一定的修改,从原来texlive2016中的命令printdateextralabel转换到了printlabeldateextra。因此做一个修改。 + \begin{texlist} + %设置因为mergedate默认为true时的情况,来自\bbx@opt@mergedate@compact +%去掉作者后面包围年份的圆括号 +%这里因为biblatex版本的不同,做不同的处理,texlive2017版的在iftexliveseven=true中设置 +%2016等低版本的在iftexliveseven=false中设置 +%重设date+extrayear格式,源来自authoryear.BBX +\iftoggle{iftexliveseven}{% + \renewbibmacro*{date+extrayear}{% + \iffieldundef{labelyear} + {} + {\printtext{%[parens]%这里把括号去掉 + \iffieldsequal{year}{labelyear} + {\printlabeldateextra}% + {\printfield{labelyear}% + \printfield{extrayear}}}}}% +}{% +\renewbibmacro*{date+extrayear}{% + \iffieldundef{\thefield{datelabelsource}year} + {} + {\printtext{%[parens]%这里把括号去掉 + \iffieldsequal{year}{\thefield{datelabelsource}year} + {\printdateextralabel}% + {\printfield{labelyear}% + \printfield{extrayear}}}}}% +} + \end{texlist} + + 当然其实这还有更简单的解决方法就是: + \begin{texlist} + \let\printdateextralabel=\printlabeldateextra + \end{texlist} + 只是这里为了清楚区分才用判断的方式。 + +\item 根据同学(zjsdut@163.com)发现的问题,修改一个bug,感谢。当online类型仅有url信息时,url前面多了一个点。这是modifydate宏设计中printtext位置导致标点异步处理机制失效所产生现象。因此作出修改如下: + \begin{texlist} + \newbibmacro*{modifydate}{%新增加一个带括号的日期,用于表示表示电子资源的更新和修改日期,而公告日期安按日期格式 + \iffieldundef{year}{% + \iffieldundef{endyear}{% + \iffieldundef{eventyear}{}{\printtext{\mkbibparens{\printtext{\printfield{eventyear}}% + \iffieldundef{eventmonth}{}{\bibrangedash\thefield{eventmonth}}% + \iffieldundef{eventday}{}{\bibrangedash\printfield{eventday}}}}% + }% + }{% + \iffieldundef{endyear}{}{\printtext{\mkbibparens{\printtext{\printfield{endyear}}% + \iffieldundef{endmonth}{}{\bibrangedash\thefield{endmonth}}% + \iffieldundef{endday}{}{\bibrangedash\printfield{endday}}}}% + }% + }}{% + \iffieldundef{year}{}{\printtext{\mkbibparens{\printtext{\printfield{year}}% + \iffieldundef{month}{}{\bibrangedash\thefield{month}}% + \iffieldundef{day}{}{\bibrangedash\printfield{day}}}}% + }}% + }% + \end{texlist} + +\item 增加一个选项gbnoauthor。当给出选项gbnoauthor=true时,作者年制中当作者缺省时,使用佚名或noauthor代替,即将佚名或noauthor作为作者处理。默认情况下gbnoauthor=true不处理,即当无作者进行处理。同时也修改了中英文排序判断和佚名代替的机制。 + \begin{texlist} + %增加一个处理佚名或noauthor的控制选项 + \DeclareBibliographyOption[boolean]{gbnoauthor}[true]{% + \ifstrequal{#1}{false}{}{\dealnoathor}} + %\ExecuteBibliographyOptions{gbnoauthor=true}%对于需要展开较早(展开层级优先)的选项,这一执行无效,只能用宏包加载时给出的选项。 + \end{texlist} + + \begin{texlist} + \map{%因为无法进行cjk字符判断,所以用反的思路,判断没有英文字符,没有空格,没有逗号等字符情况下 + %认为是中文的,将文献userb设置成cn,用于排序 + \step[fieldsource=author,match=\regexp{[^a-zA-Z\s\.\,\'\{\}\-\:0-9]},final] + \step[fieldset=userb,fieldvalue={cn}] + } + \map{%因为无法进行cjk字符判断,所以用反的思路,判断没有英文字符,没有空格,没有逗号等字符情况下 + %认为是中文的,将文献userb设置成cn,用于排序 + \step[fieldsource=title,match=\regexp{[^a-zA-Z\s\.\,\'\{\}\-\:0-9]},final] + \step[fieldset=userb,fieldvalue={cn}] + }%如果没有作者和标题,那么剩下的最可能有意义的只有网址了,而网址通常是英文的,因此不用再进一步对其它域进行判断了。 + \map{%将没有设置的userb设置成en,即认为不是中文的就是英文的。 + \step[fieldset=userb,fieldvalue={en}] + } + \end{texlist} + + \begin{texlist} + \def\dealnoathor{ + \DeclareStyleSourcemap{ + \maps[datatype=bibtex]{ + \map{%默认情况下将空缺作者设置为佚名 + \step[fieldsource=userb,match={cn},final] + \step[fieldset=author, fieldvalue={佚名}] + } + \map{%默认情况下将空缺作者设置为佚名 + \step[fieldsource=userb,match={en},final] + \step[fieldset=author, fieldvalue={NOAUTHOR}] + } + } + }} + \end{texlist} + + 下面是已经取消的以前的处理方式: + \begin{texlist} + \map{%默认情况下将空缺作者设置为佚名 + \step[fieldset=author, fieldvalue={佚名}] + } + \map[overwrite]{%当标题带有英文字符,且作者为佚名的情况,设置作者为noauthor, + %也有一些特殊情况可能处理不到,比如标题中英混合,作者又却是 + \step[fieldsource=title,match=\regexp{[a-zA-Z]},final] + \step[fieldsource=author,match=\regexp{佚名}, replace={NOAUTHOR}] + } + \map{%因为无法进行cjk字符判断,所以用反的思路,判断没有英文字符,没有空格,没有逗号等字符情况下 + %认为是中文的,将文献userb设置成cn,用于排序 + \step[fieldsource=author,match=\regexp{[^a-zA-Z\s\.\,\'\{\}\-]},final] + \step[fieldset=userb,fieldvalue={cn}] + } + \map{%将没有设置的userb设置成en,即认为不是中文的就是英文的。 + \step[fieldset=userb,fieldvalue={en}] + } + \end{texlist} + + +\item 修改多语言参考文献间的分割符号,即将par改为newline,避免采用gb7714-2015的项对齐方式时,不同语言的参考文献间的分段导致没有缩进。(测试结果见:\ref{sec:align:test}节的项对齐方式,如图\ref{bib:env:gb}所示) + + \begin{texlist} + %\renewcommand*{\entrysetpunct}{\adddot\par\nobreak} + \renewcommand*{\entrysetpunct}{\adddot\newline\nobreak} + \end{texlist} + +\item Zeping Lee兄发现了一个小问题,感谢,一直没有注意到这个问题。这里做出修改:主要是作者年制中,期刊析出的文献中,当卷信息不存在时,期刊名和期是连在一起的,而不是中间有个逗号,例如GB/T 7714-2015 中第10.2.4 节中的刘彻东条目。主要修改如下(结果测试见:\ref{sec:article:novol}节): + + \begin{texlist} + %调整期刊名的格式,源来自standard.bbx + \renewbibmacro*{journal+issuetitle}{% + \usebibmacro{journal}% + %\setunit*{\addspace}% + %\setunit*{\addcomma\addspace}%修改为增加一个逗号 + \iffieldundef{series}% + {}% + {\newunit% + \printfield{series}% + \setunit{\addspace}}% + %\usebibmacro{volume+number+eid}% + %\setunit{\addspace}% + \usebibmacro{issue+date}% + %\setunit{\addcolon\space}% + %换成逗号和空格 + \usebibmacro{issue}% + \iffieldundef{volume}{}{\setunit{\addcomma\space}}% + \usebibmacro{volume+number+eid}%把卷期放到年份后面 + %\newunit + } + + %调整journal,首先判断子标题,然后在设置标点。避免直接设置标点后,当volume不存在是需要使用\nopuct去标点进而引入不必要的空格 + \renewbibmacro*{journal}{% + \iffieldundef{journaltitle}% + {}% + {\printtext[journaltitle]{% + \printfield[titlecase]{journaltitle}% + \iffieldundef{journalsubtitle}{}{\setunit{\subtitlepunct}% + \printfield[titlecase]{journalsubtitle}}}}} + + %调整issue+date,原在authoryear.BBX中\bbx@opt@mergedate@compact中定义 + %当issue存在时,才设置newunit。避免直接设置标点后,当volume不存在是需要使用\nopuct 去标点进而引入不必要的空格 + \renewbibmacro*{issue+date}{% + \iffieldundef{issue}% + {}% + {\printtext[parens]{\printfield{issue}}\newunit}} + + %增加一个number带括号的格式,避免使用mkbibparens而引入一个不必要的空格 + \DeclareFieldFormat{addnumflag}{% + \nobreak\printtext{(}\nobreak #1\nobreak\printtext{)}} + + %调整期刊卷和期的格式,源来自standard.bbx + \renewbibmacro*{volume+number+eid}{% + \printfield{volume}% + %\setunit*{\adddot}%去掉点号 + %\printfield{number}% + \iffieldundef{number}{}{\printfield[addnumflag]{number}}% + %\iffieldundef{number}{}{\printtext{\mkbibparens{\printfield{number}}}}%增加一个圆括号 + \iffieldundef{eid}{}{% + \setunit{\addcomma\space}% + \printfield{eid}}} + \end{texlist} + +\item wayne508同学提出了一个需求,就是不希望使用出版项缺省时的默认处理,即不使用[出版地不详],[出版者不详],[S.l.],[s.n.]等填充,因此增加了一个宏包选项gbpub,当等于false时,去掉自动处理,使用biblatex的标准处理方式。 + + \begin{texlist} + \newtoggle{bbx:gbpub} + \DeclareBibliographyOption[boolean]{gbpub}[true]{% + %\settoggle{bbx:gbpub}{#1} %或采用下面这一句 + \ifstrequal{#1}{false}{\togglefalse{bbx:gbpub}}{\toggletrue{bbx:gbpub}}} + \ExecuteBibliographyOptions{gbpub} + + %出版社和地址的处理 + \newbibmacro*{location+institution+date}{% + \iftoggle{bbx:gbpub}% + {\testCJKfirst{\thefield{title}} + \iflistundef{location}{\iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}}{\printtext{[S.l.\adddot]}}}% + {\printlist{location}}% + % \iflistundef{institution} + % {\setunit*{\addcomma\space}} + % {\setunit*{\addcolon\space}}% + % \printlist{institution}% + % \setunit*{\addcomma\space}% + \addcolon\addspace% + \iflistundef{institution}{% + \iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}}{\printtext{\mkbibbrackets{s.n.}}}}% \bibstring{nopublisher}%[s.n.\adddot] + {\printlist{institution}}% + \setunit{\addcomma\addspace}% + %\usebibmacro{date}% + \printfield{year}% + \bibrangedash% + \iffieldundef{endyear}{}{\printfield{endyear}}% + \newunit}% + { \printlist{location}% + \iflistundef{institution}% + {\setunit*{\addcomma\space}} + {\setunit*{\addcolon\space}}% + \printlist{institution}% + \setunit*{\addcomma\space}% + \usebibmacro{date}% + \newunit}% + } + + \renewbibmacro*{publisher+location+date}{% + \iftoggle{bbx:gbpub}% + {\testCJKfirst{\thefield{title}}% + %\testifnoteeqstd% + \iflistundef{location}{%\adddot + \iffieldequalstr{note}{standard}{}{%从gbt7714-2015标准低19页看到,标准存在出版项时输出,没有时完全省略。 + %\iftoggle{ifnoteeqstandard}{}{%}替换为上一句,尽可能用biblatex提供的函数 + \iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}\addcolon\addspace}{\printtext{[S.l.\adddot]}\addcolon\addspace}% + }}% \bibstring{noaddress} + {\printlist{location}\addcolon\addspace}% + %\addcolon\addspace% + \iflistundef{publisher}{% + \iffieldequalstr{note}{standard}{}{% + %\iftoggle{ifnoteeqstandard}{}{%}替换为上一句,尽可能用biblatex提供的函数 + \iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}% + {\printtext{\mkbibbrackets{s.n.}}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}% + }}% + {\printlist{publisher}\setunit*{\addcomma\addspace}}% + %\addcomma\addspace% + \usebibmacro{date}% + %\newunit %去掉这个标点 + }% + {\printlist{location}% + \iflistundef{publisher} + {\setunit*{\addcomma\space}} + {\setunit*{\addcolon\space}}% + \printlist{publisher}% + \setunit*{\addcomma\space}% + \usebibmacro{date}% + %\newunit + }% + } + + \end{texlist} + + + + 下面这种处理方式是有问题的,即默认处理情况不是希望的true的情况,但如果给出宏包加载选项时没有问题的。因此采用上一种方式。 + \begin{texlist} + %\newtoggle{bbx:gbpub} + %\DeclareBibliographyOption[boolean]{gbpub}[true]{% + % \settoggle{bbx:gbpub}{#1}} + %这种机制的标识判断,能用于usemacro使用,域格式定义中,但无法用来定义macro + %定义宏和使用宏是两个不同的展开层级 + %\ExecuteBibliographyOptions{gbpub} + %但是使用这句默认设置可以用来定义macro + \DeclareBibliographyOption[bool]{gbpub}[true]{%应使用这种直接的机制 + \ifstrequal{#1}{true}{\pubaddmacroredefine}{}} + + %出版社和地址的处理 + %新增一个样式用于输出连续出版物的地址,单位,时间 + %类似\newbibmacro*{publisher+location+date} + \newbibmacro*{location+institution+date}{% + \printlist{location}% + \iflistundef{institution} + {\setunit*{\addcomma\space}} + {\setunit*{\addcolon\space}}% + \printlist{institution}% + \setunit*{\addcomma\space}% + \usebibmacro{date}% + \newunit} + %当没有出版社地址时,直接判断title的信息是否是中文,若为中文,则写出版地不详,否则用英文的字符表示。 + %事实上title对于每个文献来说是必须的,所以用它判断是最快的,而且一般标题和出版社的语言是一样的。 + \def\pubaddmacroredefine{% + \renewbibmacro*{publisher+location+date}{% + \testCJKfirst{\thefield{title}}% + %\testifnoteeqstd% + \iflistundef{location}{%\adddot + \iffieldequalstr{note}{standard}{}{%从gbt7714-2015标准低19页看到,标准存在出版项时输出,没有时完全省略。 + %\iftoggle{ifnoteeqstandard}{}{%}替换为上一句,尽可能用biblatex提供的函数 + \iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}\addcolon\addspace}{\printtext{[S.l.\adddot]}\addcolon\addspace}% + }}% \bibstring{noaddress} + {\printlist{location}\addcolon\addspace}% + %\addcolon\addspace% + \iflistundef{publisher}{% + \iffieldequalstr{note}{standard}{}{% + %\iftoggle{ifnoteeqstandard}{}{%}替换为上一句,尽可能用biblatex提供的函数 + \iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}% + {\printtext{\mkbibbrackets{s.n.}}\setunit{\adddot\addspace}\setunit*{\addcomma\addspace}}% + }}% + {\printlist{publisher}\setunit*{\addcomma\addspace}}% + %\addcomma\addspace% + \usebibmacro{date}% + %\newunit %去掉这个标点 + } + %新增一个样式用于输出连续出版物的地址,单位,时间 + %类似与上面的\newbibmacro*{publisher+location+date} + \newbibmacro*{location+institution+date}{% + \testCJKfirst{\thefield{title}} + \iflistundef{location}{\iftoggle{ifCJKforgbt}{\printtext{[出版地不详]}}{\printtext{[S.l.\adddot]}}}% + {\printlist{location}}% + % \iflistundef{institution} + % {\setunit*{\addcomma\space}} + % {\setunit*{\addcolon\space}}% + % \printlist{institution}% + % \setunit*{\addcomma\space}% + \addcolon\addspace% + \iflistundef{institution}{% + \iftoggle{ifCJKforgbt}{\printtext{[出版者不详]}}{\printtext{\mkbibbrackets{s.n.}}}}% \bibstring{nopublisher}%[s.n.\adddot] + {\printlist{institution}}% + \setunit{\addcomma\addspace}% + %\usebibmacro{date}% + \printfield{year}% + \bibrangedash% + \iffieldundef{endyear}{}{\printfield{endyear}}% + \newunit} + } + + + \end{texlist} + +\end{enumerate} + +%============================ \updateinfo[2017-02-26]{update to version 1.0g}\label{up:170226} \begin{enumerate} \item 进一步增加兼容性,支持条目类型比如MASTERSTHESIS,PHDTHESIS,www,electronic,standard,techreport,conference等,支持本样式增加的newspaper类型。因此在bib文件中可以直接使用这些条目类型。具体的测试详见\ref{sec:entrytype:compatibility}节。 @@ -1223,7 +1824,7 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \item 为方便bib文件生成,构建可以从gb7714-2015格式的参考文献表文本转bib文件的perl程序,利用它可以批量解析参考文献信息并转换为bib数据源文件。详见:\href{run:./gb7714texttobib.pl}{gb7714texttobib.pl},测试文件见:\href{run:./gb7714texteg.dat}{gb7714texteg.dat}。 -\item 在输出标识符的usera域格式中考虑标准样式的url选项,以便实现对是否打印url和urldate的控制。 +\item 在输出标识符的usera域格式中考虑标准样式的url选项,以便实现对是否打印url和urldate的控制。这个需求是Wenbo Sheng兄提出的,这里做出修改。 \begin{texlist} \DeclareFieldFormat{gbtypeflag}{% \iftoggle{bbx:url}{\iffieldundef{url}%当存在url时,增加一个OL标识符 @@ -1253,7 +1854,7 @@ Chiani2004-1312-1318b,Chiani2003-840-845,Chiani2009-231-254} \usebibmacro{bybookauthor}% \end{texlist} -\item 对参考文献的一些域中存在的一些特殊字符比如\&,\%,\#等进行处理,方法是利用动态数据修改。同时因为texlive2015/texlive2016中biblatex版本的不同分别进行处理。 +\item 对参考文献的一些域中存在的一些特殊字符比如\&,\%,\#等进行处理,方法是利用动态数据修改。同时因为texlive2015/texlive2016中biblatex版本的不同分别进行处理。这个需求是湘厦人提出的,这里做出修改。 \begin{texlist} \iftoggle{iftexlivesix}{ \DeclareStyleSourcemap{ |