From becf79ac9bbdddd15ef9d66a35c6d64252a2cd46 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 12 Sep 2023 03:01:04 +0000 Subject: CTAN sync 202309120301 --- .../biblatex-gb7714-2015/README.md | 3 +- .../biblatex-gb7714-2015-preamble.tex | 2 +- .../biblatex-gb7714-2015/biblatex-gb7714-2015.pdf | Bin 1722838 -> 1727093 bytes .../biblatex-gb7714-2015/biblatex-gb7714-2015.tex | 830 +++++++++++++-------- .../biblatex-gb7714-2015/gb7714-2015.bbx | 60 +- .../biblatex-gb7714-2015/gb7714-2015.cbx | 6 +- .../biblatex-gb7714-2015/gb7714-2015ay.bbx | 61 +- 7 files changed, 608 insertions(+), 354 deletions(-) (limited to 'macros/latex/contrib/biblatex-contrib') diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md index 73958edc29..df74edf5c8 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md +++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/README.md @@ -1,4 +1,4 @@ -Date of last change: 2023-05-24 to version v1.1n +Date of last change: 2023-09-10 to version v1.1o # biblatex-gb7714-2015: a biblatex style package @@ -1601,6 +1601,7 @@ please see the file 'biblatex-gb7714-2015.pdf' for further information! * 2023/03/31 v1.1l,ctan,github * 2023/04/24 v1.1m,ctan,github * 2023/05/24 v1.1n,ctan,github +* 2023/09/10 v1.1o,ctan,github --------------------------------------------------------- diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex index cae76042ca..ab9409b3f8 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex +++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015-preamble.tex @@ -14,7 +14,7 @@ %\usepackage{unicode-math} %\setmathfont[math-style=ISO,bold-style=ISO]{TeX Gyre Pagella Math} -\setmainfont{CMU Serif} +%\setmainfont{CMU Serif} \IfFileExists{SourceHanSerifSC-Regular.otf} {\setCJKmainfont[BoldFont=SourceHanSansSC-Regular.otf, ItalicFont=simkai.ttf]{SourceHanSerifSC-Regular.otf}}{} diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf index 23f368025f..9226cb0107 100644 Binary files a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf and b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.pdf differ diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex index 962aaae18a..bab5e1f479 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex +++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/biblatex-gb7714-2015.tex @@ -36,7 +36,7 @@ Style Files (gb7714-2015*.*) have version number: \versionofgbtstyle.} \titleandauthor \begin{quotation} -biblatex-gb7714-2015 宏包是为满足《GB/T 7714-2015~~信息与文献~~参考文献著录规则》要求而开发的 biblatex 样式包。宏包主要提供两种编制样式: 一、顺序编码制(gb7714-2015);二、著者-出版年制(gb7714-2015ay),能够精确地实现国标提出的著录和标注格式。另外提供gb7714-2005和gb7714-1987两个老版本的国标样式,和经济学研究(chinese-erj)、社会科学(chinese-css)、管理世界(chinese-jmw)等期刊的文献样式,以及西北农林(gb7714-NWAFU)、华中师范(gb7714-CCNU)、东南大学(gb7714-SEU)等几个明显有别于国标的特殊学位论文文献样式。 +biblatex-gb7714-2015 宏包是为满足《GB/T 7714-2015~~信息与文献~~参考文献著录规则》要求而开发的 biblatex 样式包。宏包主要提供两种编制样式: 一、顺序编码制(gb7714-2015);二、著者-出版年制(gb7714-2015ay),能够精确地实现国标提出的著录和标注格式。另外提供gb7714-2005和gb7714-1987两个老版本的国标样式,gb7714-2015ms(一个文献表中英文不同)和gb7714-2015mx(一个文档顺序编码和作者年制混用)两个特殊样式,和经济学研究(chinese-erj)、社会科学(chinese-css)、管理世界(chinese-jmw)等典型文科期刊样式,以及西北农林(gb7714-NWAFU)、华中师范(gb7714-CCNU)、东南大学(gb7714-SEU)等几个明显有别于国标的特殊学位论文样式。 具备灵活、易用、兼容性好等特点,能为国内\LaTeX{}用户提供一个可靠的参考文献生成工具。 %old: %biblatex-gb7714-2015 样式宏包提供了符合《GB/T 7714-2015 信息与文献 参考文献 @@ -324,7 +324,10 @@ latexmk -xelatex jobname.tex \subsubsection{几种样式} -例\ref{code:doc:structrue}中给出了宏包和样式的基本加载方式,选项的加载也类似。比如: +本样式包提供了两种基本样式(gb7714-2015样式(例\ref{eg:gb7714numeric})实现顺序编码制国标,gb7714-2015ay样式(例\ref{eg:gb7714authoryear})实现著者年份制国标)和其他一些为不同应用目的和格式要求而实现的样式 +(例\ref{eg:gb7714ms},\ref{eg:gb7714mx},\ref{eg:gb87and2005}等), +以及一个将顺序编码制国标文本转换为bib文件的工具(例\ref{eg:transtobib})。 + \pdfbookmark[4]{gb7714-2015}{stygb7714-2015} \begin{example}{顺序编码制(gb7714-2015)加载方式}{eg:gb7714numeric} @@ -380,12 +383,12 @@ perl gb7714texttobib.pl in=textfilename out=bibfilename \end{texlist} \end{example} -其中, -v1.0m版本增加的gb7714-2015ms样式文件,主要是为了在一个文献表中针对不同语言使用不同的样式,即中文文献使用GB/T 7714-2015规定的著录格式,而其它语言文献使用biblatex提供的标准样式。 -v1.0r版本增加了gb7714-2015mx样式,主要是为了在一个文档中针对不同参考文献分节使用不同的样式,比如某些节使用著者年份制,某些节使用顺序编码制。 +其中,v1.0m版本增加的gb7714-2015ms样式文件,主要是为了在一个文献表中针对不同语言使用不同的样式,即中文文献使用GB/T 7714-2015规定的著录格式,而其它语言文献使用biblatex提供的标准样式。 +v1.0r版本增加的gb7714-2015mx样式,主要是为了在一个文档中针对不同参考文献分节使用不同的样式,比如某些节使用著者年份制,某些节使用顺序编码制。 +v1.0z版本增加的gb7714-1987和gb7714-2005两个版本的顺序编码和著者年份制样式,用于仍在使用 +1987和2005版国标的情况,尽管两者已经过时。 %尽管这些方式不常用,但偶尔也有需求,所以都做了实现。 -尽管国标1987和2005版本已经过时,但仍然有些地方还在使用,所以1.0z版本增加了gb7714-1987和gb7714-2005两个版本的样式,也分顺序编码和著者年份制: \pdfbookmark[4]{gb7714-1987}{gb7714-1987} \pdfbookmark[4]{gb7714-1987ay}{gb7714-1987ay} @@ -411,7 +414,7 @@ v1.0r版本增加了gb7714-2015mx样式,主要是为了在一个文档中针 v1.0r版本增加了chinese-erj样式用于生成经济研究期刊的文献; v1.1l版本增加了chinese-css样式用于生成社会科学期刊的脚注注释文献; v1.1m版本增加了chinese-jmw样式用于生成管理世界期刊的文献。 -而理工类期刊文献通常与国标差别不大,部分期刊与国标的最大的差异主要是在双语对照文献中,比如计算机学报等,可以通过简单的设置来满足要求,具体可以参考github上的问题。 +而理工类期刊文献通常与国标差别不大,部分期刊与国标的最大的差异主要是双语对照文献的格式,比如计算机学报等,这可以通过简单的设置实现格式调整(可以参考github上的问题)。 \pdfbookmark[4]{chinese-erj}{chinese-erj} \begin{example}{经济研究期刊文献样式(chinese-erj)}{eg:gbchineseerj} @@ -448,7 +451,7 @@ v1.1m版本增加了chinese-jmw样式用于生成管理世界期刊的文献。 \begin{description} \pdfbookmark[4]{gbalign}{gbalign} - \item[gbalign]=\textbf{right},left,center,gb7714-2015,\textbf{gb7714-2015ay}. \hfill default: right for numeric style and gb7714-2015ay for author-year style + \item[gbalign]=\textbf{right},left,center,centpos,gb7714-2015,\textbf{gb7714-2015ay}. \hfill default: right for numeric style and gb7714-2015ay for author-year style 为控制文献表数字序号标签增加的选项,用于选择是否生成序号标签及其对齐方式。 \begin{itemize} @@ -594,6 +597,8 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \item gbnamefmt=pinyin 时,姓名的格式采用一种常见的中文拼音方式,比如对于 Zhao, Yu Xin 或 Yu Xin Zhao 这个姓名拼音格式化为ZHAO Yu-xin。 \item gbnamefmt=quanpin 时,姓名的格式采用另一种常见的中文拼音方式,比如对于 Zhao, Yu Xin 或 Yu Xin Zhao 这个姓名拼音格式化为Zhao Yuxin。 \item gbnamefmt=reverseorder 时,姓名的格式与biblatex 标准样式的family-given/ given-family格式一致,常用于经济学类的文献。 + \item gbnamefmt=fullname 时,姓名的格式采用英文默认的名在前姓在后的全拼模式。 + 比如对于 Zhao, Yu Xin 或 Yu Xin Zhao 格式化后为YuXin Zhao \end{itemize} \bc{注意:还可以利用 nameformat 域为某一具体条目设置该条目的姓名格式,比如:要在一个文献表中实现英文文献是givenahead 格式,而拼音的文献是pinyin风格,那么可以设置拼音文献的 nameformat 域为pinyin,而gbnamefmt设置为givenahead。条目中nameformat 域的局部设置优先于gbnamefmt的全局设置。}\par \emph{注意:使用pinyin选项时,bib文件中文献的作者应给出完整的名而不是缩写,否则出来的效果未必令人满意}。 @@ -601,9 +606,14 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \verb|\apptocmd{\gbpinyinlocalset}{\renewrobustcmd*{\bibnamedelima}{}}{}{}| - 而全拼格式的名中间的短横线可以用相反的设置加上。 + 而quanpin格式的名中间的短横线可以用相反的设置加上。 + + \verb|\apptocmd{\gbquanpinlocalset}{\renewrobustcmd*{\bibnamedelima}{\mbox{-}}}{}{}| + + 而fullname格式的名中间也可以加上空格: + + \verb|\apptocmd{\gbfullnamelocalset}{\renewrobustcmd*{\bibnamedelima}{\space}}{}{}| - \verb|\apptocmd{\gbpinyinlocalset}{\renewrobustcmd*{\bibnamedelima}{\mbox{-}}}{}{}| 测试结果见: \href{run:./example/opt-gbnamefmt.tex}{opt-gbnamefmt.tex}, @@ -1037,7 +1047,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] 注意,若要让脚注计数器与其它计数器比如chapter等关联,那么采用latex的常规方法就能解决,比如使用latex内核常用的\verb|\@addtoreset|命令。 - + \item[gbstrict]=\textbf{true},false. \hfill default is true 为避免输出bib文件中多余的域信息而增加选项,目的是为了兼容一些bib文件,因为某些bst样式文件进行中英文判断需要在bib文件中增加类似language这样的域作为支撑,而其中某些域在标准的biblatex样式文件中是默认输出的。 @@ -1066,7 +1076,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] 用于定义双语对照文献,将entrykey2条目和entrykey1条目关联起来,在文献表中对照输出。比如:\verb|\defdblanentry{entrykey1}{entrykey2}|或 \verb|\defdoublelangentry{entrykey1}{entrykey2}|,若entrykey1条目是中文的文献,entrykey2条目是对应entrykey1条目的英文形式,那么该命令会使得在文献表中,entrykey2的英文内容紧跟在entrykey1的中文内容后对照输出。该命令也只能出现在导言区中。 - + \pdfbookmark[4]{addEntryField}{addEntryField} \item[addEntryField] \{entrykey or entrykey comma list\}\{field\}\{fieldvalue\} @@ -1076,8 +1086,8 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] 将会为author2007en,author2014en两个条目添加nameformat域信息。 该命令也只能出现在导言区中。 - - + + \pdfbookmark[4]{setlocalbibstring}{setlocalbibstring} \item[setlocalbibstring] \{bibstringkey\}\{bibstringval\} @@ -1247,7 +1257,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \verb|\authornumcite|、\verb|\cite|、\verb|\textcite|、\verb|\parencite|、 \verb|\cite|、\verb|\parencite|。 -上述命令均可指定页码等信息用于输出,即在{entrykey}前面的[]内或第二个[]内(当有两个[]时)给出需要附加输出的信息,比如:\verb|\cite[p. 9]{entrykey}|或\verb|\cite[第九页]{中文entrykey}|。若不指定页码,则仅有\verb|\pagescite|命令默认提取参考文献的页码信息进行输出。 +上述命令均可指定页码等信息用于输出,即在{entrykey}前面的[]内或第二个[]内(当有两个[]时)给出需要附加输出的信息,比如:\verb|\cite[p. 9]{entrykey}| 或 \verb|\cite[第九页]{中文entrykey}|。若不指定页码,则仅有\verb|\pagescite|命令默认提取参考文献的页码信息进行输出。 各引用命令的使用方式如表\ref{tab:cite:num}所示。 测试文档见\href{run:example/testallformat.tex}{testallformat.tex}。 @@ -1263,22 +1273,23 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \begin{tabular}{l@{\quad$\Rightarrow$\quad}ll} \hline \heiti{命令} & \heiti{标注标签} & \heiti{说明} \\ \hline - \verb|\cite{Peebles2001-100-100}| & \cite{Peebles2001-100-100} & 不带页码上标 \\ - \verb|\upcite{Peebles2001-100-100}| & \upcite{Peebles2001-100-100} & 不带页码上标 \\ - \verb|\supercite{Peebles2001-100-100}| & \supercite{Peebles2001-100-100} & 不带页码上标 \\ - \verb|\parencite{Miroslav2004--}| & \parencite{Miroslav2004--} & 不带页码非上标 \\ - \verb|\cite[49]{蔡敏2006--}| & \cite[49]{蔡敏2006--} & 带页码上标 \\ - \verb|\pagescite{Peebles2001-100-100}| & \pagescite{Peebles2001-100-100} & 自动页码上标 \\ - \verb|\pagescite[150]{Peebles2001-100-100}| & \pagescite[150]{Peebles2001-100-100} & 带页码的上标 \\ - \verb|\parencite[49]{Miroslav2004--}| & \parencite[49]{Miroslav2004--} & 带页码非上标 \\ + \verb|\cite{Peebles2001-100-100}| & \cite{Peebles2001-100-100} & 上标不带页码 \\ + \verb|\upcite{Peebles2001-100-100}| & \upcite{Peebles2001-100-100} & 上标不带页码 \\ + \verb|\supercite{Peebles2001-100-100}| & \supercite{Peebles2001-100-100} & 上标不带页码 \\ + \verb|\parencite{Miroslav2004--}| & \parencite{Miroslav2004--} & 非上标不带页码 \\ + \verb|\cite[49]{蔡敏2006--}| & \cite[49]{蔡敏2006--} & 上标带页码 \\ + \verb|\pagescite{Peebles2001-100-100}| & \pagescite{Peebles2001-100-100} & 上标自动页码 \\ + \verb|\pagescite[150]{Peebles2001-100-100}| & \pagescite[150]{Peebles2001-100-100} & 上标带页码 \\ + \verb|\parencite[49]{Miroslav2004--}| & \parencite[49]{Miroslav2004--} & 非上标带页码 \\ \verb|\textcite{Miroslav2004--}| & \textcite{Miroslav2004--} & 提供主语非上标标签 \\ \verb|\authornumcite{Miroslav2004--}| & \authornumcite{Miroslav2004--} & 提供主语上标标签 \\ \verb|\citeauthor{蔡敏2006--}\cite{蔡敏2006--}| & \citeauthor{蔡敏2006--}\cite{蔡敏2006--} & 提供主语上标标签 \\ \verb|\footfullcite{赵学功2001--}| & \footfullcite{赵学功2001--} & 脚注方式文献条目 \\ 引用单篇文献: & 文献\cite{Peebles2001-100-100} & 国标示例 \\ 同一处引用两篇文献: & 文献\cite{Peebles2001-100-100,Miroslav2004--} & 国标示例\\ - 同一处引用多篇文献: & 文献\cite{蔡敏2006--,Miroslav2004--,赵学功2001--} & 国标示例:三篇以上压缩\\ - 同一处引用多篇文献: & 文献\citec{蔡敏2006--,Miroslav2004--,赵学功2001--} & 另一种形式的压缩\\ + 同一处引用多篇文献: & 文献\cite{蔡敏2006--,Miroslav2004--,赵学功2001--} & 国标示例:三篇以上\\ + 同一处引用多篇文献: & 文献\citec{蔡敏2006--,Miroslav2004--,赵学功2001--} & + 由\verb|\citec|实现的另一种压缩\\ 多次引用同一作者的同一文献: & 文献\cite[20-22]{Miroslav2004--}, 文献\cite[55-60]{Miroslav2004--} & 国标示例 \\ @@ -1302,6 +1313,9 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \verb|\cites[p.2]{entrykey1}[p.5]{entrykey2}|, 而不是\verb|\cite[p.5]{entrykey1,entrykey2}|。 +注意:在同一处引用多篇序号连续的文献时,标注标签默认是从两篇文献开始压缩的,比如同时连续引用两篇和三篇文献时标注分别为[1-2]和[1-3]。若需要修改从三篇文献开始压缩,比如:两篇和三篇文献分别标注为[1,2]和[1-3]。则只需要在导言区设置计数器gbrefcompress的值为3,即: +\verb|\setcounter{gbrefcompress}{3}| + %当然除了这种多次使用标注命令外,也可以使用对应标注命令的复数形式来为每篇文献提供相应的页码信息。 @@ -1326,7 +1340,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \begin{table}[!htb] \centering \caption{著者年份制常用命令示例}\label{tab:cite:authoryear} -\hspace{-1cm}{\parbox{\linewidth}{\includegraphics[scale=0.95,page=2]{egciteaytab.pdf}}} +\hspace{-1cm}{\parbox{\linewidth}{\includegraphics[scale=0.95,page=1]{egciteaytab.pdf}}} \end{table} @@ -1375,18 +1389,19 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \paragraph{标注中“等”“和”等本地化字符串调整} -在中科院某类学位论文中,正文的标注标签要求两个英文作者之间用“和”而不是“and”连接,多个英文作者则截断成一个作者时后面用“等.”而不是“et al.”表示。这可以容易通过设置本地化字符串来实现。然而对于双语的图题,英文图题中不适合出现“等”与“和”这样的字符,所以又要求在这种全英文的环境中将“和”与“等.”更换为英文符号,这就需要利用本地化字符串的局部调整。这种本地化字符串的局部调整其实已经是比较深入的内容,因为biblatex提供的接口DefineBibliographyStrings是全局的设置,而局部调整则需要使用其它方式。 +在中科院某类学位论文中,正文的标注标签要求两个英文作者之间用“和”而不是“and”连接,多个英文作者则截断成一个作者时后面用“等.”而不是“et al.”表示。这可以容易通过设置本地化字符串来实现。然而对于双语的图题,英文图题中不适合出现“等”与“和”这样的字符,所以又要求在这种全英文的环境中将“和”与“等.”更换为英文符号,这就需要对本地化字符串做局部调整。而这种局部调整其实已经是比较底层的处理,biblatex提供的接口DefineBibliographyStrings仅用于全局设置,因此局部调整则需采用其它方式。 %如何进行局部调整并没有非常方便的接口,要解决这一需求,需要对biblatex以及gb7714-2015样式有比较深入的了解。 -因为gb7714-2015通过gbcitelocalcase计数器来选择使用中文或英文的本地化字符串,因此通过局部设置gbcitelocalcase可以局部的选择不同语言的本地化字符串,比如在一个编组内,局部化设置计数器为:\verb|\defcounter{gbcitelocalcase}{1}|,那么这个编组内的所有本地化字符串会使用默认的中文字符串,反之若设置为2,则本地化字符串会使用默认的英文字符串。 +gb7714-2015通过gbcitelocalcase计数器来选择使用中文或英文的本地化字符串,因此通过局部设置gbcitelocalcase可以局部的选择不同语言的本地化字符串,比如在一个编组内,局部化设置计数器为:\verb|\defcounter{gbcitelocalcase}{1}|,那么这个编组内的所有本地化字符串会使用默认的中文字符串,反之若设置为2,则本地化字符串会使用默认的英文字符串。 -然而因为本地化字符串的内容通常是全局设置的,所以当中文的或者英文的本地化字符串设置都不满足要求时,就需要局部的调整本地化字符串的内容,如例\ref{eg:str:localset}所示,对本地化字符串andothersincite的内容做了调整,从全局设置的“等.”转换为“et al.”,“和”转换为“and”,这种局部设置可通过csdef对保存字符串信息的命令直接做的调整,比如\verb|\csdef{abx@sstr@andothersincite}{et al.}|就是将andothersincite本地化字符串的内容临时调整为“et al.”。 -但为方便用户使用,提供了 +然而因为本地化字符串的默认内容通常是全局设置的,所以当中文的或者英文的本地化字符串设置都不满足要求时,就需要局部的调整本地化字符串的内容,如例\ref{eg:str:localset}所示,对本地化字符串andothersincite的内容做了调整,从全局设置的“等.”转换为“et al.”,“和”转换为“and”,这种局部设置可通过csdef直接重定义保存字符串信息的命令来进行调整, +比如\verb|\csdef{abx@sstr@andothersincite}{et al.}|就是将andothersincite本地化字符串的内容临时调整为“et al.”。 +但为方便用户使用, 宏包提供了\verb|\setlocalbibstring|命令来替代上述直接定义的csdef命令, 如例\ref{eg:str:localset}所示。 具体的测试见\href{egthesis/thesis-ucas-m.tex}{thesis-ucas-m.tex} - \begin{example}{双语图题内的标注标签的本地化字符串局部设置}{eg:str:localset} +\begin{example}{双语图题内的标注标签的本地化字符串局部设置}{eg:str:localset} \begin{texlist} \begin{figure}[!htbp] \centering @@ -1396,14 +1411,14 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \cite{betts2005aging}}}\label{fig:bi:lang} \end{figure} \end{texlist} - \end{example} +\end{example} \paragraph{标注中的全半角标点和括号调整} -除了本地化字符串外,标注中的括号和标点也是需要调整的内容。这里两个默认采用英文的半角符号。首先可以通过选项调整,gbcitelabel选项提供了不同的选择,可以设置标注的括号,为全局或半角,同时提供了一个gbcitelabel=quanjiao,可以将标点和括号全部改为全角。 +除了本地化字符串外,标注中的括号和标点(默认采用英文的半角符号)也常是需要调整的内容。这两者首先可以通过选项调整,gbcitelabel选项提供了不同的选择比如bracketqj等,用来设置标注的括号为全局或半角,同时提供了一个gbcitelabel=quanjiao,可以将标点和括号全部改为全角。 -如果选项提供的效果还不够,那么可以局部调整mkbibleftborder和mkbibrightborder,来更换需要的括号。例\ref{eg:parens:localset}中的局部调整可以将标注中的括号改变为『和』。 +如果选项提供的效果还不够,那么可以通过局部调整mkbibleftborder和mkbibrightborder来更换需要的括号。例\ref{eg:parens:localset}中的局部调整将标注中的括号改变为『和』。 \begin{example}{局部调整标注标签中的括号}{eg:parens:localset} \begin{texlist} @@ -1415,27 +1430,41 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \end{texlist} \end{example} -对于标点来说,若默认的设定不满足要求,则可以在导言区进行调整, -如例\ref{eg:punct:globalset}中的第一段代码所示,除了其中标点外,有时还需要设置finalnamedelim。这是标签中除姓名外的标点调整,至于姓名内的标点调整则是需要从另外的接口修改,比如:通过gbcaselocalset等来修改revsdnamepunct,bibinitperiod等等,这些在标注标签中通常不太需要修改。 +对于标点来说,若默认的设定不满足要求,则首先可以在导言区进行调整, +如例\ref{eg:punct:globalset}中的第一段代码所示,主要是标签中非姓名内中(即姓名之间,姓名之后)的标点调整。 +至于姓名内的标点调整则需利用另外的接口,比如:通过gbcaselocalset等来修改revsdnamepunct,bibinitperiod等(见例\ref{eg:biblist:separator}),但这些在标注标签中通常不太需要修改。 + -但有的时候,我们需要对中英文文献的标注标签使用不同的符号,比如中文的标签使用中文全角标点,而英文的标签使用英文的标点,那么可以在标点设置时做一个判断,如例 +第一段代码是一种全局的设置,不考虑中英文文献以及环境的差异。 +但有时我们需要对中英文文献的标注标签使用不同的符号,比如中文的标签使用中文全角标点,而英文的标签使用英文的标点,那么可以在标点设置时做一个判断(括号若有类似需求也可采用类似处理),如例 \ref{eg:punct:globalset}中的第二段代码所示。 +值得注意的是:当同一处引用多篇文献时,且起始和终止的两篇文献的中英文不同,则标注标签周围的括号会变得不一致。此时可以用例\ref{eg:punct:globalset}第三段代码所采用的方式,利用局部设置gbcitelocalcase来临时统一符号。 -而还有的时候,文档中存在独立的中文段落和英文段落,期望在中文段落中使用中文的标点,而在英文段落中则使用英文的标点,此时可以利用gbcitelocal选项的内部设置的计数器gbcitelocalcase来局部化调整。如例 -\ref{eg:punct:globalset}中的第三段代码所示,做如此设置后,那么只要在指定的段落局部化计数器gbcitelocalcase的值就可以达到临时调整标点的目的。 +此外,当文档中存在独立的中文段落和英文段落时,期望在中文段落中使用中文的标点,而在英文段落中使用英文的标点,则可以利用gbcitelocal选项的内部设置的计数器gbcitelocalcase来局部化调整。如例 +\ref{eg:punct:globalset}中的第三段代码所示。做此设置后,只要在指定的段落局部化计数器gbcitelocalcase的值就可以达到临时调整标点的目的。 \begin{example}{标注标签中的标点的全局和局部设置}{eg:punct:globalset} \begin{texlist} %第一段代码:导言区重设标注标签的标点 +%多个引用间的标点 \renewcommand*{\multicitedelim}{;}%\addsemicolon\addspace; -\renewcommand*{\compcitedelim}{,} +\renewcommand*{\compcitedelim}{,}%\addcomma\space \renewcommand{\compextradelim}{,} -\DeclareDelimFormat[cite,parencite,pagescite]{nameyeardelim}{,}%\addcomma\space -\DeclareDelimFormat[textcite]{nameyeardelim}{,}%\addcomma\space +%姓名与年份之间的标点(间隔符) +\DeclareDelimFormat[cite,parencite,pagescite]{nameyeardelim}{,} +\DeclareDelimFormat[textcite]{nameyeardelim}{,}% +%最后一个姓名与等之间的符号(间隔符) \DeclareDelimFormat[cite,parencite,pagescite]{andothersdelim}{,}% \DeclareDelimFormat[textcite]{andothersdelim}{,}% +%除此之外,有时还需要设置finalnamedelim等来调整姓名间的标点。 +% multinamedelim是各姓名之间的标点 +% finalnamedelim是最后一个姓名前的取代multinamedelim的标点 %第二段代码:导言区重设标注标签的标点,根据文献的中英文调整标点形式 +\renewrobustcmd{\mkbibleftborder} +{\iffieldequalstr{userf}{chinese}{(}{(}}% +\renewrobustcmd{\mkbibrightborder} +{\iffieldequalstr{userf}{chinese}{)}{)}}% \renewcommand*{\multicitedelim}{\iffieldequalstr{userf}{chinese}{;}{\addsemicolon\addspace}}%; \renewcommand*{\compcitedelim}{\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}} \renewcommand{\compextradelim}{\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}} @@ -1449,6 +1478,13 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] {\iffieldequalstr{userf}{chinese}{,}{\addcomma\space}}% %第二段代码:导言区重设标注标签的标点,可根据计数器gbcitelocalcase局部设置调整中英文标点 +%也包括同时设置括号 +\renewrobustcmd{\mkbibleftborder} +{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{(}{(}% +\or (\or (\fi}% +\renewrobustcmd{\mkbibrightborder} +{\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{)}{)}% +\or )\or )\fi}% \renewcommand*{\multicitedelim} {\ifcase\value{gbcitelocalcase}\iffieldequalstr{userf}{chinese}{;}{\addsemicolon\addspace}% \or ;\or\addsemicolon\addspace\fi}%; @@ -1508,7 +1544,8 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subsubsection{标题格式控制} -标题内容的设置有三种方式,这里再重复一下:一是直接在printbibliography命令中利用选项title设置,二是gbctexset=true时,重定义bibname和refname来设置,三是gbctexset=false时,利用本地化字符串进行设置。具体参见gbctexset选项。 +标题内容的设置有三种方式%,这里再重复一下 +:一是直接在printbibliography命令中利用选项title设置,二是gbctexset=true时,重定义bibname和refname来设置,三是gbctexset=false时,利用本地化字符串进行设置。具体参见gbctexset选项。 标题格式的设置主要是通过重定义参考文献环境的heading进行,比如: @@ -1528,7 +1565,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \paragraph{\heiti 文献表字体、颜色} 为方便用户改变文献表段落格式、内容字体和颜色等,在 biblatex 提供的 \verb|\bibfont| 命令基础上, 增加了\verb|\bibauthorfont|、\verb|\bibtitlefont|、\verb|\bibpubfont| 等命令用于控制文献部分著录项的格式,比如作者,标题,出版项等。增加了\verb|\SlashFont|用于控制斜杠的字体。 -具体用法见例\ref{eg:biblist:fontset},结果如图\ref{fig:par:fmt}所示。 +具体用法见例\ref{eg:biblist:fontset},结果如图\ref{fig:par:fmt}所示, 测试用例见\href{run:example/testfontinbiblio.tex}{testfontinbiblio.tex}。 \begin{example}{文献表段落格式、字体、颜色}{eg:biblist:fontset} @@ -1562,7 +1599,7 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \end{figure} \paragraph{\heiti 文献表竖直间距控制} -文献表各条目之间的竖直间距控制如例\ref{eg:biblist:vspace}所示,此外,还可以调整方括号和圆括号的竖直位置,使其与无基线以下部分的字体的文本相配合。 +文献表各条目之间的竖直间距控制如例\ref{eg:biblist:vspace}所示,此外,还可以调整方括号和圆括号的竖直位置,使其与使用无基线以下部分字体的文本相配合。 \begin{example}{文献表竖直间距控制}{eg:biblist:vspace} \begin{texlist} @@ -1681,16 +1718,25 @@ bibitemindent表示 %\hspace{\biblabelsep}} -\paragraph{\heiti 文献表中的标点控制} 文献表中有时需要调整标点为中文的全角标点,可以通过不同机制下的标点设置来调整。 -调整方式如例\ref{eg:biblist:separator}所示。有时在本地化字符串中也可以实现标点调整,比如and,in等本地化字符串。有时在域格式中也可能出现标点调整,比如title域格式。而且因为不同语言的处理,可能内部也存在标点的调整。具体情况是比较复杂的,这里不再一一列举,一些修改示例可以参考: +\paragraph{\heiti 文献表中的标点或间隔符控制} 文献表中有时需要调整标点为中文的全角标点等其它形式,则需要通过不同机制下的标点(或间隔符)设置来调整。 +有时通过间隔符设置直接调整,比如标题与类型标识符之间间隔符。 +有时则通过设置本地化字符串进行,比如and,in等本地化字符串。 +有时则需要在域格式设置中进行调整,比如title,doi等域的DeclareFieldFormat格式定义。 +此外,因为不同语言的存在,可能需要区分语言进行调整,比如bibrangedash等符号。 +具体情况是比较复杂的,这里不再一一列举, +常见的调整方式如例\ref{eg:biblist:separator}所示。 +其它一些修改示例可以参考: \href{run:./chinese-erj.bbx}{chinese-erj.bbx}, \href{run:./gb7714-CCNU.bbx}{gb7714-CCNU.bbx}, -\href{run:./egthesis/thesis-uibe-numeric.tex}{thesis-uibe-numeric.tex}。具体的标点命令的意义详见biblatex手册。 +\href{run:./egthesis/thesis-uibe-numeric.tex}{thesis-uibe-numeric.tex}。各标点命令的意义详见biblatex手册。 -\begin{example}{文献表常见标点控制}{eg:biblist:separator} +\begin{example}{文献表常见标点(间隔符)控制}{eg:biblist:separator} \begin{texlist} % 标点类型的控制(注意:全局字体能控制标点的字体) +% 标题与文献类型表示符之间的间隔符 title[J] +\DeclareDelimFormat[bib,biblist]{titletypedelim}{\space} + %文献表各条文献中各单元间隔标点设置(与异步标点机制相关的) \renewcommand*{\newunitpunct}{,}%\addcomma\space %, \renewcommand*{\finentrypunct}{\iffieldequalstr{userd}{chinese}{。}{\adddot}} @@ -1713,17 +1759,49 @@ bibitemindent表示 \end{texlist} \end{example} -\subsubsection{条目著录格式控制}\label{sec:entry:fmt} +\subsubsection{条目著录项格式控制}\label{sec:entry:fmt} -文献表输出的格式即参考文献著录样式,除了整体的段落格式外,还有条目内部的格式可以控制,条目内部的这些项称为著录项,这些著录项的格式通常可由选项控制。 +文献表输出的格式即参考文献著录样式,除了各条目构成的文献表整体的格式外,还有条目内部的格式可以控制,包括:条目内部各个项(称为著录项); 项之间或内部的内容、标点、字体和颜色等。其中标点字体颜色等的修改已经部分包含在前一小节介绍的接口中,而更为复杂的著录项修改则需要通过域格式的修改来实现,前面介绍的接口实际就是定义在这些域格式中。 -可用选项除了biblatex 提供的标准选项外,也包括样式包提供的选项。 +一些简单的域格式修改如例\ref{eg:bib:fieldsetlocal}所示,其中将期刊文献的volume域的格式设置为粗体,将会议论文的日期设置为粗体。 + +\begin{example}{域格式的局部调整示例}{eg:bib:fieldsetlocal} +\begin{texlist} +%期刊文献的卷加粗 +\DeclareFieldFormat[article,periodical]{volume}{\textbf{#1}} +%会议论文年份加粗 +\DeclareFieldFormat[inproceedings]{date}{\mkbibbold{#1}} +\end{texlist} + \end{example} + +值得注意的是,由于本样式包已经根据常见需求定义了很多著录项相关的格式控制,因此用户往往不需要关注域格式的定义,而通常只要使用前面介绍的接口和选项就能大体满足要求。 + +可用选项除了样式包提供的选项外,也包括 biblatex 提供的标准选项。 图\ref{fig:content:fmta}、\ref{fig:content:fmtb}、\ref{fig:content:fmtc}给出了一些选项设置后的格式控制效果, 更多选项的详细说明见第\ref{sec:added:opt}、\ref{sec:old:opt}小节。 图\ref{fig:content:fmta}给出了选项设置为 style=gb7714-2015, gbnamefmt=givenahead, gbpub=false, gbbiblabel=dot, gbtitlelink=true 时的文献表,可以看到作者姓名、序号标签、标题超链接的设置。 +图\ref{fig:content:fmtb}给出了选项设置为 style=gb7714-2015ms, gbnamefmt=lowercase, +gbpub=false, gbtitlelink=true, gbstyle=false, sorting=nyt 时的文献表,可以看到作者姓名、标题超链接、中英文不同文献格式、文献排序的设置。 + +图\ref{fig:content:fmtc}为选项和本地化字符串如例\ref{eg:localstr:diff}设置时的引用标注和文献表,注意其中引用标注和文献表中的不同本地化字符串输出效果,引用标注中英文作者和中文作者缩略词的不同。这是中科院大学资环类学位论文的要求格式,可以看到尽管有些特殊,但通过选项设置和本地化字符串设置也能实现。 + +\begin{example}{著者-出版年制标注和文献表不同本地字符串效果}{eg:localstr:diff} +\begin{texlist} +\usepackage[backend=biber,style=gb7714-2015ay,gbnamefmt=lowercase,maxcitenames=2,mincitenames=1, +sortcites=false,sorting=gbynta]{biblatex} + \renewcommand{\bibauthorfont}{\color{violet}}% +\DefineBibliographyStrings{english}{ + andincite = {和}, + andincitecn = {和}, + andothersincite = {等{\adddot}},%adddot才能避开标点追踪 + andothersincitecn = {等}, } +\end{texlist} +\end{example} + + \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% @@ -1735,9 +1813,6 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \caption{文献表条目著录格式示例一}\label{fig:content:fmta} \end{figure} -图\ref{fig:content:fmtb}给出了选项设置为 style=gb7714-2015ms, gbnamefmt=lowercase, -gbpub=false, gbtitlelink=true, gbstyle=false, sorting=nyt 时的文献表,可以看到作者姓名、标题超链接、中英文不同文献格式、文献排序的设置。 - \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% @@ -1749,22 +1824,6 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \caption{文献表条目著录格式示例二}\label{fig:content:fmtb} \end{figure} -图\ref{fig:content:fmtc}为选项和本地化字符串如例\ref{eg:localstr:diff}设置时的引用标注和文献表,注意其中引用标注和文献表中的不同本地化字符串输出效果,引用标注中英文作者和中文作者缩略词的不同。这是中科院大学资环类学位论文的要求格式,可以看到尽管有些特殊,但通过选项设置和本地化字符串设置也能实现。 - -\begin{example}{著者-出版年制标注和文献表不同本地字符串效果}{eg:localstr:diff} -\begin{texlist} -\usepackage[backend=biber,style=gb7714-2015ay,gbnamefmt=lowercase,maxcitenames=2,mincitenames=1, -sortcites=false,sorting=gbynta]{biblatex} - \renewcommand{\bibauthorfont}{\color{violet}}% -\DefineBibliographyStrings{english}{ - andincite = {和}, - andincitecn = {和}, - andothersincite = {等{\adddot}},%adddot才能避开标点追踪 - andothersincitecn = {等}, } -\end{texlist} -\end{example} - - \begin{figure}[!htb] \begin{tcolorbox}[left skip=0pt,right skip=0pt,% width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% @@ -1780,9 +1839,9 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] \subsubsection{参考文献表的局部调整}\label{sec:entry:fmtlocal} 文档中有时需要多个文献表,而且可能具有不同的格式,因此全局的设置不一定满足要求,所以需要进行局部的调整,调整的内容也包括:文献表的标题、段落格式和著录格式。 -得益于biblatex利用tex宏控制著录格式的特点,加上tex语言本身编组的局部化特性,所以在利用biblatex生成参考文献的过程中可以有丰富手段来进行参考文献表的局部调整。因为是局部的格式调整,所以通常是结合refsection或者refsegment来操作的。前面提到过的一个很简单的例子,当在学位论文的写作中需要正文部分的参考文献使用顺序编码制,而附录中研究成果部分使用作者年制这样的需求就是一个典型的局部化格式调整。这一问题的解决方式为:在研究成果部分使用refsection将其局部化,并结合gb7714-2015mx样式,并利用setaystylesection命令设置该refsection为作者年制样式。 +得益于biblatex利用tex宏控制著录格式的特点,加上tex语言本身编组的局部化特性,所以在利用biblatex生成参考文献的过程中可以有丰富手段来进行参考文献表的局部调整。因为是局部的格式调整,所以通常是结合refsection或者refsegment来操作的。前面提到过的一个很简单的例子的需求(在一篇学位论文的写作中需要正文部分的参考文献使用顺序编码制,而附录中研究成果部分使用作者年制),是一个典型的局部化格式调整。这一需求的典型解决方式为:在研究成果部分使用refsection将其局部化,并结合gb7714-2015mx样式,并利用setaystylesection命令设置该refsection为作者年制样式。 -因为tex宏的局部化调整特性,因此几乎biblatex中所有格式设置都是可以做局部调整的,限于篇幅,这里仅介绍一些常见的简单的调整方式: +因为tex宏的局部化调整特性,因此几乎biblatex中所有格式设置,特别是前面介绍过的设置,都是可以做局部调整的。限于篇幅,这里仅介绍一些常用的方式: \begin{enumerate} \item 文献表标题 @@ -1797,173 +1856,292 @@ leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] 局部重定义bibitemsep、bibnamesep、bibinitsep可以设置文献表的各条目的间距 - \item 文献表条目著录格式 + \item 文献表条目著录项格式 + 因为著录项格式可以由选项控制,因此也可以通过选项底层控制接口进行局部化。 biblatex中绝大部分的控制选项都是使用toggle的方式,比如url选项,gbtype选项,gbannote选项等,因此在局部设置选项对应的toggle 值可以局部设置选项控制的格式。 另外也有一些选项使用的是计数器,比如gbnamefmt选项,因此局部设置选项对应的计数器的值可以局部设置选项控制的格式。 当然由于一些选项的特殊性,它无法简单的进行利用toggle值或计数器值进行设置,而可能需要调整选项对应的宏的内容,因此复杂度会明显提升,如果不是非常必要,建议不要去局部化重设这些选项的所对应的格式。 - 示例见\href{run:./example/opt-gbannote.tex}{opt-gbannote.tex}。 + 除了选项提供的接口外,著录项和著录项之间的格式设置,可以使用前述介绍过的命令或者域格式来具体不调整,只要相关的设置命令不限制一定要在导言区中,就可以局部化调整。比如前面设置volume为粗体的调整,就可以在不同的refsection做不同形式的调整。 - \item 文献表条目中域或标点的格式 - - biblatex中域和标点的格式设置其实是比较简单的,且设置命令不限制一定要在导言区中,因此做局部化调整也是合适的。比如在一个refsection中需要将期刊文献的volume域的格式设置为粗体,那么可以做设置为: - - \begin{example}{域格式的局部调整示例}{eg:bib:fieldsetlocal} - \begin{texlist} - %期刊文献的卷加粗 - \DeclareFieldFormat[article,periodical]{volume}{\textbf{#1}} - %会议论文年份加粗 - \DeclareFieldFormat[inproceedings]{date}{\mkbibbold{#1}} - \end{texlist} - \end{example} + 示例见\href{run:./example/opt-gbannote.tex}{opt-gbannote.tex}。 \end{enumerate} -实施上格式的局部调整和全局调整本质上是一致的,文献样式中几乎所有格式设置,都可以做局部化处理。当然做全面的样式设计会稍微往深里去一点,考虑的问题也会更多,但局部格式调整是可以借鉴的,关于样式中的格式设置和说明请参考: +实际上,全局格式调整和局部格式调整本质上是一致的,所以文献样式中几乎所有的格式设置都可以做局部化处理,借鉴其高层或底层的实现总能找到合适的方式来实现局部化。当然,面向全局样式设计的全局格式设置,会因为问题和要求的不同,在文献表、条目、著录项等不同层面有一些深入设计,所以局部格式调整要考虑全局设计中的不同的实现作区分处理。 +关于样式中的格式设置和说明请参考: \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% {biblatex高级使用方法和样式包设计实现方法}。 +\subsection{多样式支持} +\subsubsection{一个文献表采用多种著录样式} +一个文献表采用多种著录样式主要针对的是在一个tex文档生成参考文献表中,不同语言的文献采用不同的著录格式,比如中文文献采用GB/T 7714-2015 样式,而西文文献采用西文习惯的样式。这种情况目前由gb7714-2015ms样式解决,选项加载方式如例\ref{eg:gb7714ms}所示。 -\subsection{文献表排序与调整} +目前gb7714-2015ms样式中,有两种应用方式,一是全部文献都采用GB/T 7714-2015 标准样式,二是中文西文分别采用GB/T 7714-2015 标准样式和biblatex的默认样式。两种方式的选择通过gbstyle选项设置。区分语言使用不同样式的情况下,如有其它需要,完全可以通过定义中文和西文的格式做进一步的修改,比如将英文文献的样式修改为IEEE格式。图\ref{fig:eg:ms}展示了两种不同语言不同的著录格式。 -\subsubsection{国标要求的排序方式} +\begin{figure}[!htb] +\begin{tcolorbox}[left skip=0pt,right skip=0pt,% +width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% +leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] +\centering +\deflength{\textparwd}{\linewidth-1cm} +\includegraphics[width=\textparwd]{egmsinabiblio.pdf} +\end{tcolorbox} +\caption{一个文献表采用多种著录样式示例}\label{fig:eg:ms} +\end{figure} -排序是文献表格式的重要内容。国标的两种编制方式中,顺序编码制要求文献表中的文献按照正文中文献引用的先后顺序进行排序,而著者-出版年制则要求文献表首先按照文种对不同语言的文献进行分组,中文在前英文在后,分组内的中文文献则以拼音或笔画进行排序,而西文文献则按照字母顺序进行排列。在gb7714-2015国标样式中两种编制方式的排序分别以如下选项设置来实现: +测试见文档\href{run:egfigure/egmsinabiblio.tex}{egmsinabiblio.tex}。 -\begin{example}{两种编制方式的排序设置}{eg:bib:sorting} -\begin{texlist} -%顺序编码制: -sorting=none -%著者-出版年制: -sorting=gb7714-2015,gblanorder=chineseahead,sortlocale=zh__pinyin -\end{texlist} -\end{example} -这些设置是样式的默认设置,用户如果没有其他需求则无需调整,若需调整详见下一节。 +\subsubsection{不同参考文献分节采用不同著录样式} -\subsubsection{排序的逻辑和调整方法} +不同参考文献分节采用不同著录样式主要针对一个tex文档中存在多个参考文献表,且各参考文献表的格式需求不同。比如一些学位论文写作中,正文的参考文献表为著者-出版年制,而附录中的作者论著情况则用顺序编码制。这种情况目前由gb7714-2015mx样式解决,选项加载方式如例\ref{eg:gb7714mx}所示。 -文献表中文献的排序通常是由处理bib文件的后端程序实施的,比如bibtex或biber程序。通常biblatex选择biber作为后端程序来实现更灵活的排序机制。biber在处理过程中读取bib文件信息并根据biblatex宏包和文献样式在bcf文件中输出设置信息执行排序。而bibtex程序则在读取bib文件后根据bst样式进行排序,尽管可以让bibtex读入特殊格式bib文件来提供一些设置参数,但总的来说基于bibtex的文献排序是由bst样式决定的。而biber程序则是提供了一套工具,具体的排序方式是由biblatex宏包和样式文件中的设置决定的,biber根据这些设置执行特定的逻辑来实现排序。 +gb7714-2015mx样式默认使用顺序编码样式,当要使用著者-出版年制样式时,则利用命令 +\verb|\setaystylesection|进行设置,该命令有一个必选参数,表示采用著者-出版年制样式的参考文献节的编号。注意该命令一次只能设置一个文献节,因此设置多个参考文献节时,需要多次使用\verb|\setaystylesection|命令,比如节2节4都采用著者-出版年制样式, +那么设置\verb|\setaystylesection{2}\setaystylesection{4}|。 -biblatex通过sorting选项选择排序模板来进行排序,而排序模板是可以自定义的。gb7714-2015及 -gb7714-2015ay样式提供了gblanorder选项来选择文种的排列顺序,其本质是对排序模板中与语言相关的域进行设置,因此它是与sorting选项选择的排序模板密切相关的,biblatex提供的标准样式排序模板并不支持该选项。 -而sortlocale选项则是针对字符排序选择本地化调整方案,比如选项zh\_\_pinyin就是选择针对中文字符根据拼音进行排序。本地化调整方案是由perl模块提供,中文字符排序的可用选项值详见前面的sortlocale选项说明。需要注意的是本地化字符排序调整方案设置也可以通过biber命令行选项提供,biblatex设置和biber命令行设置两种方式见例\ref{eg:sort:opts}、例\ref{eg:sort:bibercmd}。 +目前gb7714-2015mx样式中的两种格式:顺序编码和著者-出版年制样式默认都是符合GB/T 7714-2015 标准的,如果需要做格式的修改,则完全可以通过自定义实现。图\ref{fig:eg:ms}展示了3个参考文献分节的文档,其中节2使用了著者-出版年制。 -\begin{example}{中文字符排序调整可利用biblatex选项}{eg:sort:opts} -\begin{texlist} -%按拼音排序,biblatex加载选项 -\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__pinyin]{biblatex} -%按笔画排序,biblatex加载选项 -\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__stroke]{biblatex}% -%此时,biber则正常编译不需手动加选项,因为排序调整方案(sort tailoring)已由biblatex 给出。 -biber jobname -\end{texlist} -\end{example} +\begin{figure}[!htb] +\begin{tcolorbox}[left skip=0pt,right skip=0pt,% +width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% +leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] +\centering +\deflength{\textparwd}{\linewidth-1cm} +\includegraphics[width=\textparwd]{egmsindfrefsec.pdf} +\end{tcolorbox} +\caption{不同参考文献分节采用不同著录样式}\label{fig:eg:mx} +\end{figure} -\begin{example}{中文字符排序调整也可利用biber选项}{eg:sort:bibercmd} +测试见文档\href{run:egfigure/egmsindfrefsec.tex}{egmsindfrefsec.tex}。 + +\subsubsection{局部定义的不同样式的文献表}\label{sec:local:biblist:set} + +在一些学位论文中,除了正文后面的全局文献表外,有时需要给出攻读学位期间的学术成果,这部分内容可以直接按正文的方式写,有时也可以利用文献表的方式写,即将学术成果内容写成bibtex格式,然后利用类似生成参考文献表的方式输出。 + +这一局部定义的文献表可以利用不同的方式来得到,比如使用refsection分节,或者使用category/type等筛选输出指定的文献。若该文献表的格式不同于正文的文献表,那么就需要做局部调整,此时利用一些能够局部调整的选项来实现会比较方便,如果需要的话也可以引入一些其它设置来实现特殊的格式,比如论文作者加粗等。例\ref{eg:resume:localset}给出了一个简单示例,其中故意做了一些局部设置,使用时需注意局部选项设置和数据注解与bib文件内容的配合。 + +\begin{example}{为研究成果表局部设置格式}{eg:resume:localset} \begin{texlist} -%biblatex正常加载,即不设置排序的本地化调整方案 -\usepackage[backend=biber,style=gb7714-2015ay]{biblatex} +\begin{filecontents}{resume.bib} +@article{ref-1-1-Yang, +author = {Yang, Y and Ren, T L and Zhang, L T and others}, +title = {Miniature microphone with silicon-based ferroelectric thin films}, +journal = {Integrated Ferroelectrics}, +date = {2003}, +pages = {229-235}, +volume = {52}, +annotation = {SCI 收录, 检索号:758FZ}, +AUTHOR+an={1=thesisauthor}, +OPTIONS = {maxbibnames=1,minbibnames=1} +} -%此时需利用biber选项给出本地化排序调整方案: -%按拼音排序,则设置-l zh__pinyin -biber -l zh__pinyin jobname -%按笔画排序,则设置-l zh__pinyin -biber -l zh__stroke jobname +@article{ref-2-1-杨轶, +author = {杨轶 and 张宁欣 and 任天令 and others}, +title = {硅基铁电微声学器件中薄膜残余应力的研究}, +journal = {中国机械工程}, +pages= {1289-1291}, +date = {2005}, +volume = {16}, +number ={14}, +annotation ={EI 收录, 检索号:0534931 2907}, +AUTHOR+an={1=thesisauthor} +} + +@patent{ref-8-1-任天令, +author = {任天令 and 杨轶 and 朱一平 and others}, +title = {硅基铁电微声学传感器畴极化区域控制和电极连接的方法}, +number ={中国, CN1602118A}, +annotation = {中国专利公开号.}, +} + +@patent{ref-9-1-Ren, +author = {Ren, T L and Yang, Y and Zhu, Y P and others}, +title = {Piezoelectric micro acoustic sensor based on ferroelectric materials}, +number ={USA, No.11/215, 102}, +annotation = {美国发明专利申请号.}, +} +\end{filecontents} + +\begin{refsection}[resume.bib] +\nocite{ref-8-1-任天令,ref-9-1-Ren}% +\printbibliography[heading=subbibliography,title={研究成果}] +\end{refsection} + + +\begin{refsection}[ref/resume.bib] +\settoggle{bbx:gbtype}{false}%局部设置不输出文献类型和载体标识符 +\settoggle{bbx:gbannote}{true}%局部设置输出附加的annote/annotation信息 +\setcounter{gbnamefmtcase}{1}%局部设置作者的格式为familyahead格式 +\makeatletter +\renewcommand*{\mkbibnamegiven}[1]{%通过作者注释(AUTHOR+an)局部调整作者的格式需与bib配合 +\ifitemannotation{thesisauthor} +{\ifbibliography{\textcolor{blue}{\textbf{#1}}}{#1}}% +{#1}\ifbibliography{\ifitemannotation{corresponding}{\textsuperscript{*}}{}}{}% +} +\renewcommand*{\mkbibnamefamily}[1]{% +\ifitemannotation{thesisauthor} +{\ifbibliography{\textcolor{blue}{\textbf{#1}}}{#1}} +{#1}} +\def\blx@maxbibnames{2} %局部调整作者数量,bib文件中加入选项也可以调整 +\def\blx@minbibnames{2} +%\defcounter{gbbiblocalcase}{1} %局部强迫中文本地化字符串 +%\defcounter{gbbiblocalcase}{2} %局部强迫英文本地化字符串 +\setlocalbibstring{andotherscn}{et al.} %另一种调整方式 +\setlocalbibstring{andothers}{等} +\makeatother + +\nocite{ref-1-1-Yang,ref-2-1-杨轶} + +\setlength{\biblabelsep}{12pt} +\printbibliography[heading=subbibliography,title={发表的学术论文}] %发表和录用的合在一起 +\end{refsection} \end{texlist} \end{example} -对于sorting选项,biblatex提供了标准的排序模板包括: +其它示例可以参考:\href{https://blog.csdn.net/xenonhu/article/details/120853247}{修改指定作者的格式来突出显示},nudtpaper,BIThesis等。 +测试文档见\href{run:example/test-resume.tex}{test-resume.tex}。 -\begin{description} - \item[nty] 按照姓名、标题、年份排序。 - \item[nyt] 按照姓名、年份、标题排序。 - \item[nyvt] 按照姓名、年份、卷数、标题排序。 - \item[anyt] 按照字母标签、姓名、年份、标题排序。 - \item[anyvt] 按照字母标签、姓名、年份、卷数、标题排序。 - \item[ynt] 按照年份、姓名、标题排序。 - \item[ydnt] 按照年份(降序)、姓名、标题排序。 - \item[none] 不进行排序。所有的条目按照引用顺序处理。 -\end{description} -而gb7741-2015和gb7741-2015ay样式提供了4个排序模板: +\subsubsection{完全自定义的条目内容样式} -\begin{description} - \item[gb7714-2015] 以语言、作者、年份、标题、升序排列 - \item[gbnytd] 以语言、作者、年份、标题、降序排列 - \item[gbynta] 以语言、年份、作者、标题、升序排列 - \item[gbyntd] 以语言、年份、作者、标题、降序排列 -\end{description} +完全自定义的条目内容样式分两类: +一类是对已知类型文献的做针对性的调整。 +比如上交图书馆要求 arXiv 文献使用 [EB/OL] 而 [J] 类型,要求的著录格式如下: -在使用gb7714-2015和gb7714-2015ay样式时可以使用上述排序模板。用户也可以增加自定义模板,比如为了处理多音字的问题,用户可以手动设置key域用来对中文文献进行排序,定义如下的排序模板: +\begin{texlist} +主要责任者.题名:其他题名信息[EB/OL].预印本平台:预印本编号(更新或修改日期)[引用日期].获取和访问路径 +\end{texlist} -\begin{example}{针对多音字问题的排序模板}{eg:sort:multipinyin} +若直接使用 arXiv 网站导出的bib信息,则文献类型是misc,通常无法生成需要的格式,此时我们可以arXiv文献根据上述要求做自定义调整。因为 arXiv 导出的bib信息中包含archivePrefix=\{arXiv\}的特殊域,该域在biber处理后还会转换为eprinttype域,所以可以作为识别的关键。由于 arXiv 网站导出的bib信息中不含有网址,访问日期等信息,也可以通过sourcemap批量添加。因此我们自定义的方式如例\ref{eg:arXiv:localset}所示,如此处理在不影响其它文献的情况下可以生成arXiv 文献的专门格式。 +\begin{example}{arXiv 文献的特殊格式定制}{eg:arXiv:localset} \begin{texlist} -\DeclareSortingTemplate{multipinyin}{ - \sort{ - \field{presort} - } - \sort{ - \field{lansortorder}%language - } - \sort{ - \field{sortkey} - } - \sort{%[direction=descending] - \field{sortname} - \field{author} - \field{editor} - \field{translator} - } - \sort{ - \field{sortyear} - \field{year} - } - \sort{ - \field{sorttitle} - \field{title} - } - \sort{ - \field{volume} - \literal{0} +%自动添加一些信息 +\DeclareStyleSourcemap{ + \maps[datatype=bibtex]{ + \map[overwrite]{ + \pertype{misc} + \step[fieldsource=archivePrefix,match=arXiv,final] + \step[fieldset=usera,fieldvalue={EB}] + \step[fieldset=primaryClass,fieldvalue={}] + \step[fieldset=url,fieldvalue={https://arxiv.org/abs/}] + \step[fieldsource=eprint] + \step[fieldset=url,origfieldval, append] + \step[fieldset=urldate,fieldvalue={2023-02-03}] } } -\end{texlist} -\end{example} - -其中,排序模板优先使用persort域进行排序,接着是与文种相关的lansortorder域,接着是sortkey域(该域在biblatex中就是key域的别名),接着是sortname等作者姓名相关的域,要让文献根据多音字习惯音进行排序,那么就在key域中设置文献作者姓名的习惯音。比如三篇文献作者分别是[李四]、[J. B. Conway]、[曾三]。在设置sorting=multipinyin, gblanorder=chineseahead, sortlocale=zh\_\_pinyin的情况下,根据上述的multipinyin排序模板,首先根据文种和作者信息将中文文献[曾三][李四]排在前面,接着是[J. B. Conway],因为默认情况下,曾字考虑的读音是ceng2,但这不是我们希望得到的。 - -所以需要手动将key域设置为中文的拼音,比如[李四]文献设置key=\{li3si4\},而[曾三]文献设置key=\{zeng1san1\},那么中文文献仍然排在前面,但根据key域的设置会将[李四]文献排列在[曾三]前面。因此手动设置作者姓名的习惯拼音后,文献排列正确,顺序为:[李四][曾三][J. B. Conway]。 需要注意的是:若要手动设置拼音则需要对文献表中的全部中文文献设置否则利用key域排序就会失效,而这并是一个轻松的活,此时我们可以使用自动设置拼音的工具,详见 -\href{https://www.latexstudio.net/index/details/index/ids/1546}{为中文参考文献自动添加排序用的拼音信息域},\href{https://github.com/hushidong/biblatex-map}{bibmap宏包}。 +} +%添加更新日期 +\renewbibmacro*{doi+eprint+url}{% + \iftoggle{bbx:eprint} + {\iffieldundef{eprint}{}{\newunit\usebibmacro{eprint}}} + {}% + \iffieldundef{eprinttype}{}%%注意:archivePrefix映射成了eprinttype + {\iffieldequalstr{eprinttype}{arXiv}% + {\mkbibparens{\usebibmacro{newsdate}}}{}}% + \iftoggle{bbx:url} + {\usebibmacro{url+urldate}} + {} + \newunit\newblock + \iftoggle{bbx:doi} + {\printfield{doi}} + {}} +% +% 备选类型驱动 +% +% 利用biblatex的misc驱动 +\DeclareBibliographyDriver{misc}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author/editor+others/translator+others}% + \ifnameundef{namea}{}{\setunit{\labelnamepunct}\newblock}% + \usebibmacro{title}% + \newunit\newblock + \printfield{howpublished}% + \newunit\newblock + \printfield{type}% + \newunit + \printfield{version}% + \newunit + \printfield{note}% + \newunit\newblock + \iffieldundef{eprinttype}{\usebibmacro{institution+location+date}}% + {}%注意:archivePrefix映射成了eprinttype + \usebibmacro{doi+eprint+url}% + \newunit\newblock + \usebibmacro{addendum+pubstate}% + \setunit{\bibpagerefpunct}\newblock + \usebibmacro{pageref}% + \newunit\newblock + \iftoggle{bbx:related} + {\usebibmacro{related:init}% + \usebibmacro{related}} + {}% + \usebibmacro{annotation}\usebibmacro{finentry}} +\end{texlist} +\end{example} -其中,与文种相关的排序域lansortorder是由gblanorder选项设置的,当选项值为chineseahead时,语言顺序为cn;jp;kr;en;fr;ru,会将中文文献的lansortorder域设置为1,日语文献设置为2,韩语文献设置为3,英文文献设置为4,法语文献设置为5,俄语文献设置为6。排序过程中按升序排序,那么自然中文文献在前英文文献在后。若对gblanorder选择设置一个自定义的字符串如:cn;en;ru;fr;jp;kr,那么文种的排列顺序为中文、英文、俄语、法语、日语、韩语。 +第二类则是不完全(或无规范)的自定义输出,主要用于输出部分参考文献信息。这时可以采用文献缩略信息打印的方法实现。比如只输出题名信息如例\ref{eg:partial:info}所示。 -根据上述的排序逻辑可知,要做排序的调整首先可以考虑合理地设置选项,来选择合适的排序模板、文种顺序和本地化字符排序调整方案。当不满足要求时,可以自定义排序模板,并设置sorting选项为该模板,来实现用户需要的排序方式。 +\begin{example}{部分文献信息自定义输出}{eg:partial:info} +\begin{texlist} +%定义驱动 +\DeclareBibliographyDriver{titlexample}{% +\usebibmacro{begentry}% +\iffieldundef{title}{\usebibmacro{journal+issuetitle}}{\usebibmacro{title}} +\usebibmacro{finentry} +} +%定义环境 +\defbibenvironment{exampleenv} + {\list + {示例\printfield{labelnumber}:\space} + {\setlength{\labelwidth}{1cm}% + \setlength{\leftmargin}{\labelwidth}% + \setlength{\labelsep}{\biblabelsep}% + \addtolength{\leftmargin}{\labelsep}% + \setlength{\itemsep}{\bibitemsep}% + \setlength{\parsep}{\bibparsep}% + \renewcommand*{\makelabel}[1]{##1\hss}}} + {\endlist} + {\item} + +%正文中 +\subsection{题名} +\begin{refsection} +\nocite{王夫之的诠释--} +\nocite{张子正蒙注--} +\nocite{化学动力学和反应器原理--} +\nocite{袖珍神学--} +\nocite{北京师范大学学报--} +\nocite{Gasesinsea--} +\nocite{jmath--} +\printbiblist[title={题名示例},env=exampleenv]{titlexamplea} +\end{refsection} +\end{texlist} +\end{example} +更多的实现方法见 +\href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% +{biblatex-solution-to-latex-bibliography}中的第2.10节。 -\subsubsection{姓名中的多音字排序调整} +具体例子则可以参考\href{run:./stdgbT7714-2015.pdf}{stdgbT7714-2015.pdf}。其中第8节中大量使用这种方式。 -前一小节在介绍排序模板时,附带介绍了姓名多音字处理的一种方法,具体来说,就是人工或者利用bibmap工具为bib文件中的各个中文条目添加key域,用于指定中文的多音字的拼音,从而使排序时使用这个在key域指定的拼音进行排序。 -为避免这一添加拼音到key域的操作,这里提供另一种可能更为方便的方法。biber在做排序时实际上是利用 perl 的 Unicode::Collation::locale 模块,其中的Pinyin.pm提供了汉字的拼音顺序,对该文件做临时的修改,可以调整多音字的顺序。 -因为在参考文献排序中通常会使用字的姓名音,所以我们对这个文件做非正式的修改,并放到github上(\href{https://github.com/hushidong/biblatex-gb7714-2015/files/11147697/Pinyin-modified-zhai.zip}{Pinyin.zip}),若用户需要正确的姓的多音字排序,那么只要用该文件替换biber临时工作目录中的文件即可。 -%注意:目前该文件只修改了“曾”“沈”两个字,而“翟”“仇”等没有做修改,若用户有需求后面再增加。 -通常biber在第一次运行的时候,会构建一个依赖目录,这也是biber的临时工作路径,而所有的依赖文件就在其中。 -在windows下通常会在临时目录temp下构建类似\verb|par-/cache-|的目录(其它系统也是类似命名,可以搜索一下),所有的依赖包括Pinyin.pm都会在其内部,找到并替换即可(Pinyin.pm文件通常在\verb|cache-\inc\lib\Unicode\Collate\CJK|下)。 +\subsection{多语言支持} -\subsection{多语言支持} \subsubsection{多语言混合文献表}\label{sec:multilan:combine} @@ -2210,145 +2388,148 @@ language={chinese} 更多的示例可以参考:\href{https://github.com/hushidong/biblatex-gb7714-2015/issues/154} {双语参考文献中note注释}。 -\subsection{多样式支持} -\subsubsection{一个文献表采用多种著录样式} -一个文献表采用多种著录样式主要针对的是在一个tex文档生成参考文献表中,不同语言的文献采用不同的著录格式,比如中文文献采用GB/T 7714-2015 样式,而西文文献采用西文习惯的样式。这种情况目前由gb7714-2015ms样式解决,选项加载方式如例\ref{eg:gb7714ms}所示。 -目前gb7714-2015ms样式中,有两种应用方式,一是全部文献都采用GB/T 7714-2015 标准样式,二是中文西文分别采用GB/T 7714-2015 标准样式和biblatex的默认样式。两种方式的选择通过gbstyle选项设置。区分语言使用不同样式的情况下,如有其它需要,完全可以通过定义中文和西文的格式做进一步的修改,比如将英文文献的样式修改为IEEE格式。图\ref{fig:eg:ms}展示了两种不同语言不同的著录格式。 -\begin{figure}[!htb] -\begin{tcolorbox}[left skip=0pt,right skip=0pt,% -width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% -leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] -\centering -\deflength{\textparwd}{\linewidth-1cm} -\includegraphics[width=\textparwd]{egmsinabiblio.pdf} -\end{tcolorbox} -\caption{一个文献表采用多种著录样式示例}\label{fig:eg:ms} -\end{figure} -测试见文档\href{run:egfigure/egmsinabiblio.tex}{egmsinabiblio.tex}。 +\subsection{文献表排序与调整} +\subsubsection{国标要求的排序方式} +排序是文献表格式的重要内容。国标的两种编制方式中,顺序编码制要求文献表中的文献按照正文中文献引用的先后顺序进行排序,而著者-出版年制则要求文献表首先按照文种对不同语言的文献进行分组,中文在前英文在后,分组内的中文文献则以拼音或笔画进行排序,而西文文献则按照字母顺序进行排列。在gb7714-2015国标样式中两种编制方式的排序分别以如下选项设置来实现: -\subsubsection{不同参考文献分节采用不同著录样式} +\begin{example}{两种编制方式的排序设置}{eg:bib:sorting} +\begin{texlist} +%顺序编码制: +sorting=none -不同参考文献分节采用不同著录样式主要针对一个tex文档中存在多个参考文献表,且各参考文献表的格式需求不同。比如一些学位论文写作中,正文的参考文献表为著者-出版年制,而附录中的作者论著情况则用顺序编码制。这种情况目前由gb7714-2015mx样式解决,选项加载方式如例\ref{eg:gb7714mx}所示。 +%著者-出版年制: +sorting=gb7714-2015,gblanorder=chineseahead,sortlocale=zh__pinyin +\end{texlist} +\end{example} -gb7714-2015mx样式默认使用顺序编码样式,当要使用著者-出版年制样式时,则利用命令 -\verb|\setaystylesection|进行设置,该命令有一个必选参数,表示采用著者-出版年制样式的参考文献节的编号。注意该命令一次只能设置一个文献节,因此设置多个参考文献节时,需要多次使用\verb|\setaystylesection|命令,比如节2节4都采用著者-出版年制样式,那么设置\verb|\setaystylesection{2}\setaystylesection{4}|。 +这些设置是样式的默认设置,用户如果没有其他需求则无需调整,若需调整详见下一节。 -目前gb7714-2015mx样式中的两种格式:顺序编码和著者-出版年制样式默认都是符合GB/T 7714-2015 标准的,如果需要做格式的修改,则完全可以通过自定义实现。图\ref{fig:eg:ms}展示了3个参考文献分节的文档,其中节2使用了著者-出版年制。 +\subsubsection{排序的逻辑和调整方法} -\begin{figure}[!htb] -\begin{tcolorbox}[left skip=0pt,right skip=0pt,% -width=\linewidth,colframe=gblabelcolor,colback=white,arc=0pt,% -leftrule=0pt,rightrule=0pt,toprule=0.4pt,bottomrule=0.4pt] -\centering -\deflength{\textparwd}{\linewidth-1cm} -\includegraphics[width=\textparwd]{egmsindfrefsec.pdf} -\end{tcolorbox} -\caption{不同参考文献分节采用不同著录样式}\label{fig:eg:mx} -\end{figure} +文献表中文献的排序通常是由处理bib文件的后端程序实施的,比如bibtex或biber程序。通常biblatex选择biber作为后端程序来实现更灵活的排序机制。biber在处理过程中读取bib文件信息并根据biblatex宏包和文献样式在bcf文件中输出设置信息执行排序。而bibtex程序则在读取bib文件后根据bst样式进行排序,尽管可以让bibtex读入特殊格式bib文件来提供一些设置参数,但总的来说基于bibtex的文献排序是由bst样式决定的。而biber程序则是提供了一套工具,具体的排序方式是由biblatex宏包和样式文件中的设置决定的,biber根据这些设置执行特定的逻辑来实现排序。 -测试见文档\href{run:egfigure/egmsindfrefsec.tex}{egmsindfrefsec.tex}。 +biblatex通过sorting选项选择排序模板来进行排序,而排序模板是可以自定义的。gb7714-2015及 +gb7714-2015ay样式提供了gblanorder选项来选择文种的排列顺序,其本质是对排序模板中与语言相关的域进行设置,因此它是与sorting选项选择的排序模板密切相关的,biblatex提供的标准样式排序模板并不支持该选项。 +而sortlocale选项则是针对字符排序选择本地化调整方案,比如选项zh\_\_pinyin就是选择针对中文字符根据拼音进行排序。本地化调整方案是由perl模块提供,中文字符排序的可用选项值详见前面的sortlocale选项说明。需要注意的是本地化字符排序调整方案设置也可以通过biber命令行选项提供,biblatex设置和biber命令行设置两种方式见例\ref{eg:sort:opts}、例\ref{eg:sort:bibercmd}。 -\subsubsection{局部定义的不同文献表的样式} +\begin{example}{中文字符排序调整可利用biblatex选项}{eg:sort:opts} +\begin{texlist} +%按拼音排序,biblatex加载选项 +\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__pinyin]{biblatex} +%按笔画排序,biblatex加载选项 +\usepackage[backend=biber,style=gb7714-2015ay,sortlocale=zh__stroke]{biblatex}% +%此时,biber则正常编译不需手动加选项,因为排序调整方案(sort tailoring)已由biblatex 给出。 +biber jobname +\end{texlist} +\end{example} -在一些学位论文中,除了正文后面的全局文献表外,有时需要给出攻读学位期间的学术成果,这部分内容可以直接按正文的方式写,有时也可以利用文献表的方式写,即将学术成果内容写成bibtex格式,然后利用类似生成参考文献的方式输出。 +\begin{example}{中文字符排序调整也可利用biber选项}{eg:sort:bibercmd} +\begin{texlist} +%biblatex正常加载,即不设置排序的本地化调整方案 +\usepackage[backend=biber,style=gb7714-2015ay]{biblatex} -该文献表可以利用不同的形式来得到,比如使用refsection分节,或者使用category/type等筛选输出指定的文献。若该文献表的格式不同于正文的文献表,那么就需要做局部调整,此时利用一些能够局部调整的选项来实现会比较方便,如果需要的话也可以引入一些其它设置来实现特殊的格式,比如论文作者加粗等。例\ref{eg:resume:localset}给出了一个简单示例,其中故意做了一些局部设置,使用时需注意局部选项设置和数据注解与bib文件内容的配合。 +%此时需利用biber选项给出本地化排序调整方案: +%按拼音排序,则设置-l zh__pinyin +biber -l zh__pinyin jobname +%按笔画排序,则设置-l zh__pinyin +biber -l zh__stroke jobname +\end{texlist} +\end{example} -\begin{example}{为研究成果表局部设置格式}{eg:resume:localset} -\begin{texlist} - \begin{filecontents}{resume.bib} - @article{ref-1-1-Yang, - author = {Yang, Y and Ren, T L and Zhang, L T and others}, - title = {Miniature microphone with silicon-based ferroelectric thin films}, - journal = {Integrated Ferroelectrics}, - date = {2003}, - pages = {229-235}, - volume = {52}, - annotation = {SCI 收录, 检索号:758FZ}, - AUTHOR+an={1=thesisauthor}, - OPTIONS = {maxbibnames=1,minbibnames=1} - } +对于sorting选项,biblatex提供了标准的排序模板包括: - @article{ref-2-1-杨轶, - author = {杨轶 and 张宁欣 and 任天令 and others}, - title = {硅基铁电微声学器件中薄膜残余应力的研究}, - journal = {中国机械工程}, - pages= {1289-1291}, - date = {2005}, - volume = {16}, - number ={14}, - annotation ={EI 收录, 检索号:0534931 2907}, - AUTHOR+an={1=thesisauthor} - } +\begin{description} + \item[nty] 按照姓名、标题、年份排序。 + \item[nyt] 按照姓名、年份、标题排序。 + \item[nyvt] 按照姓名、年份、卷数、标题排序。 + \item[anyt] 按照字母标签、姓名、年份、标题排序。 + \item[anyvt] 按照字母标签、姓名、年份、卷数、标题排序。 + \item[ynt] 按照年份、姓名、标题排序。 + \item[ydnt] 按照年份(降序)、姓名、标题排序。 + \item[none] 不进行排序。所有的条目按照引用顺序处理。 +\end{description} - @patent{ref-8-1-任天令, - author = {任天令 and 杨轶 and 朱一平 and others}, - title = {硅基铁电微声学传感器畴极化区域控制和电极连接的方法}, - number ={中国, CN1602118A}, - annotation = {中国专利公开号.}, - } +而gb7741-2015和gb7741-2015ay样式提供了4个排序模板: - @patent{ref-9-1-Ren, - author = {Ren, T L and Yang, Y and Zhu, Y P and others}, - title = {Piezoelectric micro acoustic sensor based on ferroelectric materials}, - number ={USA, No.11/215, 102}, - annotation = {美国发明专利申请号.}, - } - \end{filecontents} - - \begin{refsection}[resume.bib] - \nocite{ref-8-1-任天令,ref-9-1-Ren}% - \printbibliography[heading=subbibliography,title={研究成果}] - \end{refsection} - - - \begin{refsection}[ref/resume.bib] - \settoggle{bbx:gbtype}{false}%局部设置不输出文献类型和载体标识符 - \settoggle{bbx:gbannote}{true}%局部设置输出注释信息 - \setcounter{gbnamefmtcase}{1}%局部设置作者的格式为familyahead格式 - \makeatletter - \renewcommand*{\mkbibnamegiven}[1]{%通过作者注释局部调整作者的格式需与bib配合 - \ifitemannotation{thesisauthor} - {\ifbibliography{\textcolor{blue}{\textbf{#1}}}{#1}}% - {#1}\ifbibliography{\ifitemannotation{corresponding}{\textsuperscript{*}}{}}{}% +\begin{description} + \item[gb7714-2015] 以语言、作者、年份、标题、升序排列 + \item[gbnytd] 以语言、作者、年份、标题、降序排列 + \item[gbynta] 以语言、年份、作者、标题、升序排列 + \item[gbyntd] 以语言、年份、作者、标题、降序排列 +\end{description} + +在使用gb7714-2015和gb7714-2015ay样式时可以使用上述排序模板。用户也可以增加自定义模板,比如为了处理多音字的问题,用户可以手动设置key域用来对中文文献进行排序,定义如下的排序模板: + +\begin{example}{针对多音字问题的排序模板}{eg:sort:multipinyin} +\begin{texlist} +\DeclareSortingTemplate{multipinyin}{ + \sort{ + \field{presort} + } + \sort{ + \field{lansortorder}%language + } + \sort{ + \field{sortkey} + } + \sort{%[direction=descending] + \field{sortname} + \field{author} + \field{editor} + \field{translator} + } + \sort{ + \field{sortyear} + \field{year} + } + \sort{ + \field{sorttitle} + \field{title} + } + \sort{ + \field{volume} + \literal{0} + } } - \renewcommand*{\mkbibnamefamily}[1]{% - \ifitemannotation{thesisauthor} - {\ifbibliography{\textcolor{blue}{\textbf{#1}}}{#1}} - {#1}} - \def\blx@maxbibnames{2} %局部调整作者数量,bib文件中加入选项也可以调整 - \def\blx@minbibnames{2} - %\defcounter{gbbiblocalcase}{1} %局部强迫中文本地化字符串 - %\defcounter{gbbiblocalcase}{2} %局部强迫英文本地化字符串 - \setlocalbibstring{andotherscn}{et al.} %另一种调整方式 - \setlocalbibstring{andothers}{等} - \makeatother - - \nocite{ref-1-1-Yang,ref-2-1-杨轶} - - \setlength{\biblabelsep}{12pt} - \printbibliography[heading=subbibliography,title={发表的学术论文}] % 发表的和录用的合在一起 - \end{refsection} \end{texlist} \end{example} -其它示例可以参考:\href{https://blog.csdn.net/xenonhu/article/details/120853247}{修改指定作者的格式来突出显示},nudtpaper,BIThesis等。 -测试文档见\href{run:example/test-resume.tex}{test-resume.tex}。 +其中,排序模板优先使用persort域进行排序,接着是与文种相关的lansortorder域,接着是sortkey域(该域在biblatex中就是key域的别名),接着是sortname等作者姓名相关的域,要让文献根据多音字习惯音进行排序,那么就在key域中设置文献作者姓名的习惯音。比如三篇文献作者分别是[李四]、[J. B. Conway]、[曾三]。在设置sorting=multipinyin, gblanorder=chineseahead, sortlocale=zh\_\_pinyin的情况下,根据上述的multipinyin排序模板,首先根据文种和作者信息将中文文献[曾三][李四]排在前面,接着是[J. B. Conway],因为默认情况下,曾字考虑的读音是ceng2,但这不是我们希望得到的。 + +所以需要手动将key域设置为中文的拼音,比如[李四]文献设置key=\{li3si4\},而[曾三]文献设置key=\{zeng1san1\},那么中文文献仍然排在前面,但根据key域的设置会将[李四]文献排列在[曾三]前面。因此手动设置作者姓名的习惯拼音后,文献排列正确,顺序为:[李四][曾三][J. B. Conway]。 需要注意的是:若要手动设置拼音则需要对文献表中的全部中文文献设置否则利用key域排序就会失效,而这并是一个轻松的活,此时我们可以使用自动设置拼音的工具,详见 +\href{https://www.latexstudio.net/index/details/index/ids/1546}{为中文参考文献自动添加排序用的拼音信息域},\href{https://github.com/hushidong/biblatex-map}{bibmap宏包}。 + + + +其中,与文种相关的排序域lansortorder是由gblanorder选项设置的,当选项值为chineseahead时,语言顺序为cn;jp;kr;en;fr;ru,会将中文文献的lansortorder域设置为1,日语文献设置为2,韩语文献设置为3,英文文献设置为4,法语文献设置为5,俄语文献设置为6。排序过程中按升序排序,那么自然中文文献在前英文文献在后。若对gblanorder选择设置一个自定义的字符串如:cn;en;ru;fr;jp;kr,那么文种的排列顺序为中文、英文、俄语、法语、日语、韩语。 + +根据上述的排序逻辑可知,要做排序的调整首先可以考虑合理地设置选项,来选择合适的排序模板、文种顺序和本地化字符排序调整方案。当不满足要求时,可以自定义排序模板,并设置sorting选项为该模板,来实现用户需要的排序方式。 + + +\subsubsection{姓名中的多音字排序调整} + +前一小节在介绍排序模板时,附带介绍了姓名多音字处理的一种方法,具体来说,就是人工或者利用bibmap工具为bib文件中的各个中文条目添加key域,用于指定中文的多音字的拼音,从而使排序时使用这个在key域指定的拼音进行排序。 + +为避免这一添加拼音到key域的操作,这里提供另一种可能更为方便的方法。biber在做排序时实际上是利用 perl 的 Unicode::Collation::locale 模块,其中的Pinyin.pm提供了汉字的拼音顺序,对该文件做临时的修改,可以调整多音字的顺序。 + +因为在参考文献排序中通常会使用字的姓名音,所以我们对这个文件做非正式的修改,并放到github上(\href{https://github.com/hushidong/biblatex-gb7714-2015/files/11147697/Pinyin-modified-zhai.zip}{Pinyin.zip}),若用户需要正确的姓的多音字排序,那么只要用该文件替换biber临时工作目录中的文件即可。 +%注意:目前该文件只修改了“曾”“沈”两个字,而“翟”“仇”等没有做修改,若用户有需求后面再增加。 + +通常biber在第一次运行的时候,会构建一个依赖目录,这也是biber的临时工作路径,而所有的依赖文件就在其中。 +在windows下通常会在临时目录temp下构建类似\verb|par-/cache-|的目录(其它系统也是类似命名,可以搜索一下),所有的依赖包括Pinyin.pm都会在其内部,找到并替换即可(Pinyin.pm文件通常在\verb|cache-\inc\lib\Unicode\Collate\CJK|下)。 + + -\subsubsection{完全自定义的条目内容样式} -完全自定义的条目内容样式,针对不完全和不规范的文献表输出,主要用于输出部分参考文献信息。这时可以采用文献缩略信息打印的方法实现。具体的实现方法见\href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography/blob/master/biblatex-solution-to-latex-bibliography.pdf}% -{biblatex-solution-to-latex-bibliography}中的第2.10节。 -具体例子则可以参考\href{run:./stdgbT7714-2015.pdf}{stdgbT7714-2015.pdf}。其中第8节中大量使用这种方式。 \subsection{bib文件与文献条目数据} @@ -2570,8 +2751,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \subsection{其它事项}\label{sec:pkg:hints} -\begin{enumerate} - \item biblatex 的优点 +\subsubsection{biblatex 的优点} 基于 biblatex 宏包的参考文献生成方法,具有很多明显的优点,读者可以从 \href{https://github.com/CTeX-org/lshort-cn}{lshort-cn}、 @@ -2581,15 +2761,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 %[也由于对bibtex语言不熟悉,偷懒不想学$( \hat{} \bot \hat{} )$] \begin{itemize} - \item 使用简单。代码结构很简单,格式控制很简单,功能设置很简单,编译方式很简单,编译命令无限制(xelatex、pdflatex等均可)。例\ref{eg:func:backref} 给出了后向超链接功能的设置。 - - \begin{example}{文献条目的后向超链接设置}{eg:func:backref} - \begin{texlist} - %加上后向超链接设置,需要4步编译。 - \usepackage[backend=biber,style=gb7714-2015,backref=true]{biblatex} - \end{texlist} - \end{example} - + \item 使用简单。代码结构很简单,格式控制很简单,功能设置很简单,编译方式很简单,编译命令无限制(xelatex、pdflatex等均可)。 %使用够方便 \item 划分自由。在一个文档中可以生成任意数量的文献表,无需用将分档划分成不同的文件来辅助生成分章参考文献。利用refsection 和refsegment方便划分,具有嵌套、遍历等多种灵活处理方式。 @@ -2605,7 +2777,18 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \end{itemize} %上述这些优点也是笔者决定编写符合GB/T 7714-2015标准的参考文献样式文件的原因之一。 - \item biber 输出引用文献bib文件 +\subsubsection{文献表后向超链接功能} + +文献表后向超链接功能由backref选项启用,如例\ref{eg:func:backref} 所示。 + +\begin{example}{文献条目的后向超链接设置}{eg:func:backref} +\begin{texlist} +%加上后向超链接设置,需要4步编译。 +\usepackage[backend=biber,style=gb7714-2015,backref=true]{biblatex} +\end{texlist} +\end{example} + +\subsubsection{biber 抽取当前引用文献到新的bib文件} 利用biber可以实现引用文献数据的bib输出,常用于从一个大的bib文件中导出仅被引用的文献信息到一个小的bib 文件,比如:要提交一个小论文附带的bib文件时。 @@ -2615,8 +2798,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \end{texlist} \end{example} - - \item biber 控制特殊符号的tex宏的转换 +\subsubsection{biber 控制特殊符号的tex宏的转换} 默认情况下biber为了实现更好的排序,会将一些latex提供的特殊宏转换为utf-8编码字符。但有时我们可能并不需要做这样的转换,因为转换后符号的形式就变了。由于biber依赖一个字符映射表recode\_data.xml进行转换,因此我们可以利用它来构建一个自定义映射表,从而避免biber 对一些特殊宏的转换。具体做法如下: \begin{itemize} @@ -2632,8 +2814,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 \end{example} \end{itemize} - - \item 不同tex引擎下的编译 +\subsubsection{不同tex引擎下的编译方式} tex源文档既可以用xelatex编译,也可以利用pdflatex或latex进行编译。但要注意的是pdflatex编译可能因为某些样式比如authoryear,使用了xstring宏包中的一些命令而导致错误,但numeric类样式通常没有问题。该问题在biblatex更新到3.12版本后取消xstring 宏包后得以解决。 @@ -2641,14 +2822,17 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 utf-8编码的文档,采用xelatex 编译没有任何注意事项,但使用pdflatex编译时,需要给ctex 宏包加载UTF8选项,比如 \verb|\usepackage[UTF8]{ctex}| 。 该选项在文档类加载时给出也可,比如 \verb|\documentclass[UTF8]{article}| , - 同时\bc{文献引用时所用关键词应采用英文},比如 \verb|\cite{zhangml2008}| 而不能包含中文,比如 \verb|\cite{张敏莉2008}|。 + 同时\bc{文献引用时所用关键词应采用英文},比如 \verb|\cite{zhangml2008}| 而不能包含中文,比如 \verb|\cite{张敏莉2008}|,因为参考文献entrykey用中文时,bbl中会包含中文的entrykey,所以pdflatex编译时ctex宏包对中文的附加处理会让biblatex读入bbl进行排序时会报错,但若忽略错误也能正确输出参考文献,但正文会有额外输出。 + + 当文档使用其他编码时,可以利用notepad++ 或notepad2 等编辑器将其转换为UTF-8编码。 - 当文档使用其他编码时,可以利用notepad++ 或notepad2 等编辑器将其转换为UTF-8编码。若不进行转换,使用xelatex编译通常需要指定一个文档编码,比如windows 环境下的GB2312 编码的文档需要指定\verb|\XeTeXinputencoding "GBK"|,否则会显示乱码。使用pdflatex 进行编译时,如果biblatex不能正确的处理编码问题,那么需要为其明确的指定texencoding 和bibencoding 选项。比如windows环境下的GB2312编码的文档, + 若不进行转换,使用xelatex编译通常需要指定一个文档编码,比如windows 环境下的GB2312 编码的文档需要指定\verb|\XeTeXinputencoding "GBK"|,否则会显示乱码。使用pdflatex 进行编译时,如果biblatex不能正确的处理编码问题,那么需要为其明确的指定texencoding 和bibencoding 选项。比如windows环境下的GB2312编码的文档, 需要指定\verb|\usepackge[texencoding=GBK]{biblatex}|。 %增加了对GBK支持的说明,2018-05-11 - \item 容易出现的错误和解决 +\subsubsection{容易出现的错误和解决方式} + \begin{itemize} \item 当顺序编码和著者-出版年制切换,或者biblatex版本切换,或者不同样式切换时,如果编译出错,可先清理一下辅助文件,完成后再重新编译。 @@ -2668,17 +2852,17 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 若要自己去解决问题,则可以从如下查找顺序来研究。 biblatex自身相关的包括各种bbx,cbx文件,重点是biblatex.sty,biblatex.def,standard.bbx,还有blx-dm.def 等一些设置文件。另外不要忘记lbx文件,这里面也有一些语言相关的命令, 比如\verb|\bibrangedash|,\verb|\finalandcomma|等。至于其它一些tex 原始命令可以从tex、xetex的相关书籍文档查找,latex 相关代码则可以从latex2e,etoolbox等说明文档或latex.ltx,etoolbox.STY等源代码文档中查找。注意多使用meaning 命令来获取命令的定义。 - \end{itemize} - \item 宏包设计方法说明 + +\subsubsection{其它说明} + %宏包设计方法说明 关于宏包的设计说明,读者可以直接查看bbx,cbx文件,其中有详细的注释说明。 更一般的思路性质的设计与实现方法以及涉及到的一些biblatex功能介绍,以项目示例的形式总结在 \href{https://github.com/hushidong/biblatex-solution-to-latex-bibliography}{\LaTeX 文档中文参考文献的biblatex解决方案}中,本文档不再重复给出,有需要了解的用户参考。 - \item 其它biblatex中文样式 - + 关于其它biblatex中文样式, 目前符合 GB/T 7714-2005 或 GB/T 7714-2015 参考文献著录规则的 biblatex 样式有多个实现,除本样式外,还有李志奇(icetea)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=74474}} 和沈周(szsdk)\footnote{\url{http://bbs.ctex.org/forum.php?mod=viewthread&tid=152561&extra=page\%3D1}} ,其效果是类似的。此外,Casper Ti. Vector提供的biblatex 样式caspervector 也是不错的中文参考文献样式 \footnote{\url{https://gitlab.com/CasperVector/biblatex-caspervector}}。感谢各位作者的分享! @@ -2697,7 +2881,7 @@ bib文件中的参考文献信息是以条目形式组织,一篇文献创建 % \item windows7x64+texlive 2017,采用xelatex编译; % \end{itemize} -\end{enumerate} + \section{参考文献著录格式示例}\label{sec:eg:gb77142015} @@ -3247,6 +3431,8 @@ gb7714-2015实现了GB/T 7714-2015第8.8节要求的析出文献相关格式。 %\item 打算翻译biblatex宏包的说明文档和biber的说明文档,这个已经在进行中,完成了一部分,但因为只是业余时间做,可能最终完成的时间会比较长。如果有朋友觉得这个事情有意义,愿意一起来完成这个事情,非常欢迎,请email联系。 %\item 进一步完善上一节提到的问题。 + + \item biblatex宏包完全用tex宏来定义参考文献样式的带来的一个遗憾是在一个文档内切换使用多种不同的样式不是很方便,尽管本宏包提供了gb7714-2015mx样式可以在一个文档内使用国标的顺序编码制和作者年制切换。但若在使用国标样式的同时又要使用类似APA 等样式则还不能直接切换,目前解决思路是通过局部定制样式来实现,即在局部实现一套APA 的样式,类似于前面第\ref{sec:local:biblist:set}小节提过的一种情况:在文档末尾使用国标样式,但在成果列表中使用另一种样式。显然这种实现方式目前看效果是可以的。对于APA等其它样式来说,也许我们也不用完全按标准去实现,只要利用局部定制实现一个大概就可以了,但即便如此也还需要对这些样式标准做一定的了解。 \end{enumerate} \section{更新历史} diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx index d68a55d403..2ce88b01ad 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.bbx @@ -11,7 +11,7 @@ % % 版本和时间信息 % -\def\versionofgbtstyle{2023/05/24 v1.1n} +\def\versionofgbtstyle{2023/09/10 v1.1o} \def\versionofbiblatex{\abx@version} \ProvidesFile{gb7714-2015.bbx}[\versionofgbtstyle biblatex bibliography style] %\RequireBiber[3]%显式指定用biber后端,当用bibtex时会报错,但其实不会影响编译,只是采用bibtex后无法达成格式需求 @@ -800,6 +800,7 @@ \ifstrequal{#1}{pinyin}{\setcounter{gbnamefmtcase}{4}}{}%family-given \ifstrequal{#1}{reverseorder}{\setcounter{gbnamefmtcase}{5}}{}%family-given/given-family \ifstrequal{#1}{quanpin}{\setcounter{gbnamefmtcase}{6}}{}%全拼 + \ifstrequal{#1}{fullname}{\setcounter{gbnamefmtcase}{7}}{}%英文的全拼,名在前-姓在后 } \ExecuteBibliographyOptions{gbnamefmt} @@ -2336,6 +2337,7 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 %===================================================================== % 修改域的格式,重定义域的输出宏 %===================================================================== +\DeclareDelimFormat{titletypedelim}{\allowbreak} %标题内容和文献标识符之间的标点 % % 新增文献类型标识符的格式 % []前的nobreak,从GB4.1节的例子看不应该加,所以去掉 @@ -2346,14 +2348,14 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \iftoggle{bbx:gbmedium}% {\iftoggle{bbx:url}% {\iffieldundef{url}%当存在url时,增加一个OL标识符 - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% }% {\ifentrytype{online}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% }}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\gbrightbracket}}% } % @@ -2363,11 +2365,11 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \iftoggle{bbx:gbmedium}% {\iftoggle{bbx:url}% {\iffieldundef{url}%当存在url时,增加一个OL标识符 - {\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% - {\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% }% - {\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% -}{\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% +}{\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{\gbrightbracket}\nobreak}% } % @@ -2377,11 +2379,11 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \iftoggle{bbx:gbmedium}% {\iftoggle{bbx:url}% {\iffieldundef{url}%当存在url时,增加一个OL标识符 - {\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% - {\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% }% - {\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% -}{\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% +}{\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{\gbrightbracket}\nobreak}% } % @@ -2773,6 +2775,12 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 {\namepartgiven} {\namepartprefix} {\namepartsuffix}% +\or +\usebibmacro{name:gbfullname} + {\namepartfamily} + {\namepartgiven} + {\namepartprefix} + {\namepartsuffix}% \fi \usebibmacro{name:andothers}} @@ -2902,6 +2910,30 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}}% } +%英文风格,全名模式 +\def\gbfullnamelocalset{\renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY +\renewcommand*{\revsdnamepunct}{}%%来源biblatex.def +\renewrobustcmd*{\bibnamedelima}{}} +\newbibmacro*{name:gbfullname}[4]{\bibauthorfont% +\gbfullnamelocalset% + \ifuseprefix + {\usebibmacro{name:delim}{#3#1}% + \usebibmacro{name:hook}{#3#1}% + \ifdefvoid{#2}{}{\mkbibnamegiven{\MakeSentenceCase{#2}}\isdot\bibnamedelimd}%\MakeCapital + \ifdefvoid{#3}{}{% + \ifcapital + {\mkbibnameprefix{\MakeCapital{#3}}\isdot} + {\mkbibnameprefix{#3}\isdot}% + \ifprefchar{}{\bibnamedelimc}}% + \mkbibnamefamily{\MakeCapital{#1}}\isdot% + \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}} + {\usebibmacro{name:delim}{#1}% + \usebibmacro{name:hook}{#1}% + \ifdefvoid{#2}{}{\mkbibnamegiven{\MakeCapital{#2}}\isdot\bibnamedelimd}%\MakeCapital + \ifdefvoid{#2}{\mkbibnamefamily{\MakeCapital{#1}}}{\mkbibnamefamily{\MakeUppercase{#1}}}\isdot% + \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}}% +} + \@ifpackagelater{biblatex}{2016/03/27}%biblatex<3.2版的情况 {}{ diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx index 7d9d75eefe..4be08f7985 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015.cbx @@ -177,9 +177,11 @@ %一般情况下cbx@tempcnta为0,所以该宏不输出任何内容。当cbx@tempcnta在cite:comp:comp宏中更改变大后 %说明开始进入需要压缩的范围,当到压缩终点时,cbx@tempcnta必然大于1,则输出内容。 %修改第二行的数字1为0即可将默认的3个开始压缩变为2个开始压缩。 +\newcounter{gbrefcompress} +\setcounter{gbrefcompress}{2} \renewbibmacro*{cite:dump}{% \ifnumgreater{\value{cbx@tempcnta}}{0}% - {\ifnumgreater{\value{cbx@tempcnta}}{0}%1改为0,可以将压缩起始3个编号改为2个编号 + {\ifnumgreater{\value{cbx@tempcnta}}{\thegbrefcompress-2}%1改为0,可以将压缩起始3个编号改为2个编号 {\bibrangedash}% {\multicitedelim}% \bibhyperref[\cbx@lastkey]{% @@ -200,7 +202,7 @@ \usebibmacro{cite:dump:inset}% % dump labelnumber (+labelprefix) \ifnumgreater{\value{cbx@tempcnta}}{0} - {\ifnumgreater{\value{cbx@tempcnta}}{0}%1改为0,可以将压缩起始3个编号改为2个编号 + {\ifnumgreater{\value{cbx@tempcnta}}{\thegbrefcompress-2}%1改为0,可以将压缩起始3个编号改为2个编号 {\setunit{\multiciterangedelim}} {\setunit{\multicitedelim}}% \usebibmacro{cite:print:last:labelnumber}% diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx index 3ebe52afca..fa23a27dcf 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-gb7714-2015/gb7714-2015ay.bbx @@ -10,7 +10,7 @@ % % 版本和时间信息 % -\def\versionofgbtstyle{2023/05/24 v1.1n} +\def\versionofgbtstyle{2023/09/10 v1.1o} \def\versionofbiblatex{\abx@version} \ProvidesFile{gb7714-2015ay.bbx}[\versionofgbtstyle biblatex bibliography style] %\RequireBiber[3]%显式指定用biber后端,当用bibtex时会报错,但其实不会影响编译,只是采用bibtex后无法达成格式需求 @@ -743,6 +743,7 @@ \ifstrequal{#1}{pinyin}{\setcounter{gbnamefmtcase}{4}}{}% \ifstrequal{#1}{reverseorder}{\setcounter{gbnamefmtcase}{5}}{}%family-given/given-family \ifstrequal{#1}{quanpin}{\setcounter{gbnamefmtcase}{6}}{}% + \ifstrequal{#1}{fullname}{\setcounter{gbnamefmtcase}{7}}{}%英文的全拼,名在前-姓在后 } \ExecuteBibliographyOptions{gbnamefmt} @@ -2194,6 +2195,7 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 %===================================================================== % 修改域的格式,重定义域的输出宏 %===================================================================== +\DeclareDelimFormat{titletypedelim}{\allowbreak} %标题内容和文献标识符之间的标点 % % 新增文献类型标识符的格式 % []前的nobreak,从GB4.1节的例子看不应该加,所以去掉 @@ -2204,14 +2206,14 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \iftoggle{bbx:gbmedium}% {\iftoggle{bbx:url}% {\iffieldundef{url}%当存在url时,增加一个OL标识符 - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% }% {\ifentrytype{online}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{{\SlashFont/}OL\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}}% }}% - {\allowbreak\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\gbrightbracket}}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak#1\nobreak\printtext{\gbrightbracket}}% } % @@ -2221,11 +2223,11 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \iftoggle{bbx:gbmedium}% {\iftoggle{bbx:url}% {\iffieldundef{url}%当存在url时,增加一个OL标识符 - {\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% - {\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% }% - {\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% -}{\allowbreak\printtext{\gbleftbracket}\nobreak N\printtext{\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% +}{\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak N\printtext{\gbrightbracket}\nobreak}% } % @@ -2235,11 +2237,11 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \iftoggle{bbx:gbmedium}% {\iftoggle{bbx:url}% {\iffieldundef{url}%当存在url时,增加一个OL标识符 - {\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% - {\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{{\SlashFont/}OL\gbrightbracket}\nobreak}% }% - {\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% -}{\allowbreak\printtext{\gbleftbracket}\nobreak S\printtext{\gbrightbracket}\nobreak}% + {\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{\iffieldundef{medium}{}{{\SlashFont/}\thefield{medium}}\gbrightbracket}\nobreak}% +}{\printdelim{titletypedelim}\printtext{\gbleftbracket}\nobreak S\printtext{\gbrightbracket}\nobreak}% } % @@ -2629,6 +2631,12 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 {\namepartgiven} {\namepartprefix} {\namepartsuffix}% +\or +\usebibmacro{name:gbfullname} + {\namepartfamily} + {\namepartgiven} + {\namepartprefix} + {\namepartsuffix}% \fi \usebibmacro{name:andothers}} @@ -2757,6 +2765,31 @@ test {\iftoggle{iftlseven}}%biblatex<=3.7 \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}}% } +%英文风格,全名模式 +\def\gbfullnamelocalset{\renewrobustcmd*{\bibinitperiod}{}%将名字简写后的点去掉,%来源biblatex2.STY +\renewcommand*{\revsdnamepunct}{}%%来源biblatex.def +\renewrobustcmd*{\bibnamedelima}{}} +\newbibmacro*{name:gbfullname}[4]{\bibauthorfont% +\gbfullnamelocalset% + \ifuseprefix + {\usebibmacro{name:delim}{#3#1}% + \usebibmacro{name:hook}{#3#1}% + \ifdefvoid{#2}{}{\mkbibnamegiven{\MakeSentenceCase{#2}}\isdot\bibnamedelimd}%\MakeCapital + \ifdefvoid{#3}{}{% + \ifcapital + {\mkbibnameprefix{\MakeCapital{#3}}\isdot} + {\mkbibnameprefix{#3}\isdot}% + \ifprefchar{}{\bibnamedelimc}}% + \mkbibnamefamily{\MakeCapital{#1}}\isdot% + \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}} + {\usebibmacro{name:delim}{#1}% + \usebibmacro{name:hook}{#1}% + \ifdefvoid{#2}{}{\mkbibnamegiven{\MakeCapital{#2}}\isdot\bibnamedelimd}%\MakeCapital + \ifdefvoid{#2}{\mkbibnamefamily{\MakeCapital{#1}}}{\mkbibnamefamily{\MakeUppercase{#1}}}\isdot% + \ifdefvoid{#4}{}{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}}% +} + + \@ifpackagelater{biblatex}{2016/03/27}%biblatex<3.2版的情况 {}{ -- cgit v1.2.3