├── Word_Template.doc ├── LaTex_Template ├── main.pdf ├── pictures │ └── CSU_Logo.jpg ├── literature │ └── thesis.bib ├── README.md ├── body.tex ├── cover.tex ├── abstract.tex ├── appendix.tex ├── pythonhighlight.sty ├── main.tex ├── gbt7714.sty ├── gbt7714-numerical.bst └── gbt7714-author-year.bst ├── README.md └── LICENSE /Word_Template.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heyzbw/CSU_Thesis_Template/HEAD/Word_Template.doc -------------------------------------------------------------------------------- /LaTex_Template/main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heyzbw/CSU_Thesis_Template/HEAD/LaTex_Template/main.pdf -------------------------------------------------------------------------------- /LaTex_Template/pictures/CSU_Logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heyzbw/CSU_Thesis_Template/HEAD/LaTex_Template/pictures/CSU_Logo.jpg -------------------------------------------------------------------------------- /LaTex_Template/literature/thesis.bib: -------------------------------------------------------------------------------- 1 | %# -*- coding: utf-8-unix -*- 2 | 3 | @book{IOTB2, 4 | title={物联网技术导论(第二版)}, 5 | address = {北京}, 6 | publisher={清华大学出版社}, 7 | year={2018}, 8 | author={桂小林,安健,何欣}, 9 | } 10 | 11 | @article{IOTJA, 12 | title={IoT, Big Data, and Artificial Intelligence in Agriculture and Food Industry}, 13 | author={N. N. Misra and Yash Dixit and Ahmad Al-Mallahi and Manreet Bhullar and Rohit Upadhyay and Alex I. Martynenko}, 14 | journal={IEEE Internet of Things Journal}, 15 | year={2022}, 16 | volume={9}, 17 | pages={6305-6324} 18 | } 19 | -------------------------------------------------------------------------------- /LaTex_Template/README.md: -------------------------------------------------------------------------------- 1 | # 中南大学本科生毕业设计论文LaTex模板 2 | > 本模板适合有一定LaTex基础的学习者使用 3 | > 4 | > 初学者可配合[首页](https://github.com/heyzbw/CSU_Thesis_Template)的LaTex常用语法学习使用 5 | ## 使用指南 6 | - `main.tex`为主源文件,使用模板时编译此文件 7 | - `cover.tex`编辑论文封面 8 | - `abstract.tex`编辑论文标题与中英文的摘要 9 | - `body.tex`编辑论文正文(包括结束语) 10 | - `appendix.tex`编辑论文附录 11 | - 文件夹`literature`存放文献数据库`thesis.bib`文件 12 | - 文件夹`picture`存放论文中引用的图片 13 | - 模板编译效果见main.pdf 14 | 15 | ## 致谢 16 | 参考文献格式文件`gbt7714.sty`、`gbt7714-numerical.bst`和`gbt7714-author-year.bst`来源于GitHub项目:[GB/T 7714-2015 BibTeX Style](https://github.com/CTeX-org/gbt7714-bibtex-style) 17 | 18 | Python引用格式文件`pythonhighlight.sty`来源于GitHub项目:[python-latex-highlighting](https://github.com/olivierverdier/python-latex-highlighting) 19 | -------------------------------------------------------------------------------- /LaTex_Template/body.tex: -------------------------------------------------------------------------------- 1 | \newpage\vspace*{-21.6pt} 2 | 3 | \section{标题1} 4 | \subsection{小标题1} 5 | 正文部分1, 6 | \subsection{小标题2} 7 | \subsubsection{小小标题1} 8 | 正文部分2。 9 | \subsubsection{小小标题2} 10 | 正文部分3,Matlab代码示例见附录\ref{python},作为附录引用示例。 11 | \newpage\vspace*{-21.6pt} 12 | \section{标题2} 13 | \subsection{小标题1} 14 | 中间部分,开始摆烂(doge),随便引用一点文献\cite{IOTJA}。 15 | \subsection{小标题2} 16 | …… 17 | 18 | 内容就靠自己了,文档格式来源于“中南大学毕业论文(模板).docx” 19 | 20 | \newpage\vspace*{-21.6pt} 21 | \begin{center} 22 | \zihao{3}\heiti 23 | \phantomsection 24 | \addcontentsline{toc}{section}{结束语(或致谢)} 25 | 结束语(或致谢) 26 | \end{center} 27 | 28 | 这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。这里写结束语或致谢内容。可以顺便致谢一下这个模板(doge)。 -------------------------------------------------------------------------------- /LaTex_Template/cover.tex: -------------------------------------------------------------------------------- 1 | \begin{titlepage} 2 | \phantom{\LARGE 中南大学} 3 | \begin{figure}[htbp] 4 | \centering 5 | \includegraphics[scale=0.58]{./pictures/CSU_Logo.jpg}\\ 6 | \end{figure} 7 | 8 | \phantom{中南大学} 9 | 10 | \begin{center} 11 | {\fontsize{45pt}{14.4pt}\heiti 本科毕业设计(论文)} 12 | \end{center} 13 | 14 | \begin{center} 15 | {\zihao{1}\rmfamily GRADUATION DESIGN(THESIS)} 16 | \end{center} 17 | 18 | \phantom{中南大学} 19 | 20 | \phantom{中南大学} 21 | 22 | \begin{table}[htbp] 23 | \centering 24 | \LARGE\kaishu 25 | \begin{tabular}{cc} 26 | {\heiti 题\qquad 目:} & \makecell{本科毕业设计论文模板} \\ 27 | \cline{2-2} 28 | {\heiti 学生姓名:} & heyzbw \\ 29 | \cline{2-2} 30 | {\heiti 指导老师:} & heyzbw \\ 31 | \cline{2-2} 32 | {\heiti 学\qquad 院:} & 自动化学院 \\ 33 | \cline{2-2} 34 | {\heiti 专业班级:} & 智能2002班 \\ 35 | \cline{2-2} 36 | \end{tabular} 37 | \end{table} 38 | \vspace{28pt} 39 | \begin{center} 40 | \zihao{2}{\heiti 本科生院制}\\ 41 | 42 | \zihao{-2}{\heiti 2022年10月} 43 | 44 | \end{center} 45 | \end{titlepage} 46 | 47 | -------------------------------------------------------------------------------- /LaTex_Template/abstract.tex: -------------------------------------------------------------------------------- 1 | \vspace*{-21.6pt} 2 | \begin{center} 3 | \zihao{-2}\heiti 4 | 本科毕业设计(论文模板) 5 | \end{center} 6 | \par 7 | \begin{center} 8 | \zihao{3}\heiti 9 | \phantomsection 10 | \addcontentsline{toc}{section}{摘要} 11 | 摘要 12 | \end{center} 13 | 14 | 这里是摘要,请好好写。本文的参考文献用于举例参考文献引用方法\cite{IOTB2}。本文的附录用于举例附录引用方法如“见附录\ref{matlab}和附录\ref{python}”。 15 | \par 16 | 17 | \bigskip 18 | \noindent\textbf{关键字:}关键字1\quad 关键字2\quad 关键字3 19 | 20 | \newpage 21 | \vspace*{-21.6pt} 22 | \begin{center} 23 | \zihao{-2}\bfseries 24 | \rmfamily Template for the Thesis of Central South University 25 | \end{center} 26 | \par 27 | \phantomsection 28 | \addcontentsline{toc}{section}{ABSTRACT} 29 | \begin{center} 30 | \zihao{3}\rmfamily\bfseries 31 | ABSTRACT 32 | \end{center} 33 | 34 | \par 35 | This is abstract. Literature are for example\cite{IOTB2}.The appendix of this article is used for example, like this "See Appendix \ref{matlab} for details". 36 | 37 | \bigskip 38 | \noindent\textbf{Key Words:}\quad Key1\quad Key2\quad Key3\quad Key4 39 | -------------------------------------------------------------------------------- /LaTex_Template/appendix.tex: -------------------------------------------------------------------------------- 1 | \appendix 2 | \newpage 3 | \vspace*{-21.6pt} 4 | 5 | \begin{center} 6 | \Large\heiti 7 | \phantomsection 8 | \addcontentsline{toc}{section}{附录} 9 | 附\quad 录 10 | \end{center} 11 | 12 | \section{Matlab代码示例} 13 | \label{matlab} 14 | \definecolor{DarkGreen}{rgb}{0.0,0.4,0.0} 15 | \lstloadlanguages{Matlab} 16 | \lstset{language=Matlab, 17 | frame=single, % 添加边框 18 | rulesepcolor= \color{gray}, 19 | breaklines=true 20 | basicstyle=\small\ttfamily, 21 | keywordstyle=[1]\color{blue}\bfseries, % primitive funs in bold blue 22 | keywordstyle=[2]\color{purple}, % args of funs in purple 23 | keywordstyle=[3]\color{blue}\underbar, % user funs in blue with underbar 24 | stringstyle=\color{purple}, % strings in purple 25 | showstringspaces=false, 26 | identifierstyle=, 27 | commentstyle=\usefont{T1}{pcr}{m}{sl}\color{DarkGreen}\small, 28 | tabsize=4, 29 | % more standard MATLAB funcs 30 | morekeywords={sawtooth, square}, 31 | % args of funcs 32 | morekeywords=[2]{on, off, interp}, 33 | % user funcs 34 | morekeywords=[3]{FindESS, homework\_example}, 35 | morecomment=[l][\color{blue}]{...}, % line continuation (...) like blue comment 36 | numbers=left, 37 | numberstyle=\tiny\color{blue}, 38 | firstnumber=1, 39 | stepnumber=1, 40 | escapeinside=``, 41 | } 42 | 43 | \begin{lstlisting}[language=Matlab] 44 | function f=det(P) 45 | n=size(P,4); 46 | f=0; 47 | if n==2 48 | f=conv(P(:,:,1,1),P(:,:,2,2))-conv(P(:,:,1,2),P(:,:,2,1)); 49 | end 50 | \end{lstlisting} 51 | 52 | 53 | \section{Python代码示例} 54 | \label{python} 55 | \begin{python} 56 | import math 57 | def hix(x): 58 | if x > 0: 59 | return x 60 | else: 61 | return 0 62 | 63 | def trans1(x1, x2, n, s1, s2, lock): 64 | # 1. (A1,B1) -> (A1,B1) 65 | if lock == 1: 66 | dt = 22 * (math.floor(x1 / 2) + math.floor(x2 / 2)) 67 | dw = math.floor(x1 / 2) * n + math.floor(x2 / 2) * (150 - n) 68 | return dt, dw, lock 69 | else: 70 | return 0, 0, lock 71 | \end{python} 72 | %\end{appendices} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CSU_Thesis_Template 2 | 中南大学本科生毕业设计论文模板 3 | - `Word_Template`来自中南大学本科生院官方[通知文件](http://oa.its.csu.edu.cn/Home/Release_TZTG_zd/9730F88738E24312B05D4162BC0144FD) 4 | - `LaTex_Template`参考`Word_Template`的格式整理制作 5 | 6 | > 英文报告模板(哈佛引用格式)以及Overleaf适配版可参见[ICL LaTex模板](https://github.com/heyzbw/ICL_Thesis_Template) 7 | 8 | ## LaTeX常见语法记录 9 | - 有编号分点 10 | ~~~ 11 | \begin{enumerate} 12 | \item 13 | \item 14 | \item 15 | \end{enumerate} 16 | 17 | 更改编号格式为小写罗马数字: 18 | \begin{enumerate}[label=\roman*)] 19 | \item 20 | \item 21 | \item 22 | \end{enumerate} 23 | 24 | [label=\Roman*)] -> 大写罗马数字 25 | [label=\arabic*)] -> 数字 26 | [label=(\alph*)] -> 字母 27 | 28 | 29 | 此外,常见调节参数如下: 30 | [ 31 | itemsep=0pt, % 项间垂直间距 32 | parsep=0pt, % 段落内行间距 33 | topsep=0pt, % 列表与上文间距 34 | partopsep=0pt, % 单独段落时的额外间距 35 | leftmargin=*, % 自动左对齐 36 | label=\arabic*., % 数字编号格式 37 | font=\bfseries, % 编号加粗 38 | before=\vspace{-0.5\baselineskip}, % 列表前间距 39 | after=\vspace{-\baselineskip} % 列表后间距 40 | ] 41 | 更多信息可以参考enumitem包的文档:https://ctan.org/pkg/enumitem 42 | ~~~ 43 | - 无编号分点 44 | ~~~ 45 | \begin{itemize} 46 | \item 47 | \item 48 | \item 49 | \end{itemize} 50 | ~~~ 51 | - 图像引入与引用 52 | ~~~ 53 | \begin{figure}[!h] 54 | \centering 55 | \includegraphics[width=.85\textwidth]{P1} 56 | \caption{图片示意} 57 | \label{P1} 58 | \end{figure} 59 | 60 | \ref{P1} 61 | ~~~ 62 | - 有编号公式与引用 63 | ~~~ 64 | \begin{align}\label{E1} 65 | 66 | \end{align} 67 | 68 | \ref{E1} 69 | ~~~ 70 | - 表格表头添加与引用 71 | ~~~ 72 | \begin{table}[!h] 73 | \centering 74 | \caption{说明表} 75 | \label{T1} 76 | 77 | \ref{T1} 78 | ~~~ 79 | - 参考文献 80 | ~~~ 81 | bibtex格式引用放在.bib文件中 82 | \cite{} 83 | ~~~ 84 | - 字体大小 85 | ~~~ 86 | Command Nominal Point Size Exact Point Size 87 | \tiny 5 5 88 | \scriptsize 7 7 89 | \footnotesize 8 8 90 | \small 9 9 91 | \normalsize 10 10 92 | \large 12 12 93 | \Large 14 14.40 94 | \LARGE 18 17.28 95 | \huge 20 20.74 96 | \Huge 24 24.88 97 | ~~~ 98 | - 文本字体 99 | ~~~ 100 | \textbf{加粗} 101 | \emph{斜体} 102 | ~~~ 103 | - 添加斜杠 104 | ~~~ 105 | \usepackage{diagbox} 106 | 107 | ~~~ 108 | - 引用python语法(提前加入配置文件) 109 | ~~~ 110 | \begin{python} 111 | 112 | \end{python} 113 | ~~~ 114 | - 脚注 115 | ~~~ 116 | \footnote{} 117 | ~~~ 118 | - 插入超链接 119 | ~~~ 120 | \href{网址}{显示文字} 121 | ~~~ 122 | - 生僻字拼字法 123 | ~~~ 124 | % 例如“琎” 125 | \hbox{\scalebox{0.4}[1]{王}\kern-.2em\scalebox{0.8}[1]{进}} 126 | ~~~ 127 | 128 | 模板还有很多不足之处待改进,欢迎大家在issue里提问。 129 | 130 | -------------------------------------------------------------------------------- /LaTex_Template/pythonhighlight.sty: -------------------------------------------------------------------------------- 1 | \NeedsTeXFormat{LaTeX2e} 2 | \ProvidesPackage{pythonhighlight}[2011/09/19 python code highlighting; provided by Olivier Verdier ] 3 | 4 | 5 | \RequirePackage{listings} 6 | \RequirePackage{xcolor} 7 | 8 | \renewcommand*{\lstlistlistingname}{Code Listings} 9 | \renewcommand*{\lstlistingname}{Code Listing} 10 | \definecolor{gray}{gray}{0.5} 11 | \colorlet{commentcolour}{green!50!black} 12 | 13 | \colorlet{stringcolour}{red!60!black} 14 | \colorlet{keywordcolour}{magenta!90!black} 15 | \colorlet{exceptioncolour}{yellow!50!red} 16 | \colorlet{commandcolour}{blue!60!black} 17 | \colorlet{numpycolour}{blue!60!green} 18 | \colorlet{literatecolour}{magenta!90!black} 19 | \colorlet{promptcolour}{green!50!black} 20 | \colorlet{specmethodcolour}{violet} 21 | 22 | \newcommand*{\framemargin}{3ex} 23 | 24 | \newcommand*{\literatecolour}{\textcolor{literatecolour}} 25 | 26 | \newcommand*{\pythonprompt}{\textcolor{promptcolour}{{>}{>}{>}}} 27 | 28 | \lstdefinestyle{mypython}{ 29 | %\lstset{ 30 | %keepspaces=true, 31 | language=python, 32 | showtabs=true, 33 | tab=, 34 | tabsize=2, 35 | basicstyle=\ttfamily\footnotesize,%\setstretch{.5}, 36 | stringstyle=\color{stringcolour}, 37 | showstringspaces=false, 38 | alsoletter={1234567890}, 39 | otherkeywords={\%, \}, \{, \&, \|}, 40 | keywordstyle=\color{keywordcolour}\bfseries, 41 | emph={and,break,class,continue,def,yield,del,elif ,else,% 42 | except,exec,finally,for,from,global,if,import,in,% 43 | lambda,not,or,pass,print,raise,return,try,while,assert,with}, 44 | emphstyle=\color{blue}\bfseries, 45 | emph={[2]True, False, None}, 46 | emphstyle=[2]\color{keywordcolour}, 47 | emph={[3]object,type,isinstance,copy,deepcopy,zip,enumerate,reversed,list,set,len,dict,tuple,xrange,append,execfile,real,imag,reduce,str,repr}, 48 | emphstyle=[3]\color{commandcolour}, 49 | emph={Exception,NameError,IndexError,SyntaxError,TypeError,ValueError,OverflowError,ZeroDivisionError}, 50 | emphstyle=\color{exceptioncolour}\bfseries, 51 | %upquote=true, 52 | morecomment=[s]{"""}{"""}, 53 | commentstyle=\color{commentcolour}\slshape, 54 | %emph={[4]1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, 55 | emph={[4]ode, fsolve, sqrt, exp, sin, cos,arctan, arctan2, arccos, pi, array, norm, solve, dot, arange, isscalar, max, sum, flatten, shape, reshape, find, any, all, abs, plot, linspace, legend, quad, polyval,polyfit, hstack, concatenate,vstack,column_stack,empty,zeros,ones,rand,vander,grid,pcolor,eig,eigs,eigvals,svd,qr,tan,det,logspace,roll,min,mean,cumsum,cumprod,diff,vectorize,lstsq,cla,eye,xlabel,ylabel,squeeze}, 56 | emphstyle=[4]\color{numpycolour}, 57 | emph={[5]__init__,__add__,__mul__,__div__,__sub__,__call__,__getitem__,__setitem__,__eq__,__ne__,__nonzero__,__rmul__,__radd__,__repr__,__str__,__get__,__truediv__,__pow__,__name__,__future__,__all__}, 58 | emphstyle=[5]\color{specmethodcolour}, 59 | emph={[6]assert,yield}, 60 | emphstyle=[6]\color{keywordcolour}\bfseries, 61 | emph={[7]range}, 62 | emphstyle={[7]\color{keywordcolour}\bfseries}, 63 | % emph={[7]self}, 64 | % emphstyle=[7]\bfseries, 65 | literate=*% 66 | {:}{{\literatecolour:}}{1}% 67 | {=}{{\literatecolour=}}{1}% 68 | {-}{{\literatecolour-}}{1}% 69 | {+}{{\literatecolour+}}{1}% 70 | {*}{{\literatecolour*}}{1}% 71 | {**}{{\literatecolour{**}}}2% 72 | {/}{{\literatecolour/}}{1}% 73 | {//}{{\literatecolour{//}}}2% 74 | {!}{{\literatecolour!}}{1}% 75 | %{(}{{\literatecolour(}}{1}% 76 | %{)}{{\literatecolour)}}{1}% 77 | {[}{{\literatecolour[}}{1}% 78 | {]}{{\literatecolour]}}{1}% 79 | {<}{{\literatecolour<}}{1}% 80 | {>}{{\literatecolour>}}{1}% 81 | {>>>}{\pythonprompt}{3}% 82 | ,% 83 | %aboveskip=.5ex, 84 | frame=trbl, 85 | %frameround=tttt, 86 | %framesep=.3ex, 87 | rulecolor=\color{black!40}, 88 | %framexleftmargin=\framemargin, 89 | %framextopmargin=.1ex, 90 | %framexbottommargin=.1ex, 91 | %framexrightmargin=\framemargin, 92 | %framexleftmargin=1mm, framextopmargin=1mm, frame=shadowbox, rulesepcolor=\color{blue},#1 93 | %frame=tb, 94 | backgroundcolor=\color{white}, 95 | breakindent=.5\textwidth,frame=single,breaklines=true% 96 | %} 97 | } 98 | 99 | \newcommand*{\inputpython}[3]{\lstinputlisting[firstline=#2,lastline=#3,firstnumber=#2,frame=single,breakindent=.5\textwidth,frame=single,breaklines=true,style=mypython]{#1}} 100 | 101 | \lstnewenvironment{python}[1][]{\lstset{style=mypython}}{} 102 | 103 | \lstdefinestyle{mypythoninline}{ 104 | style=mypython,% 105 | basicstyle=\ttfamily,% 106 | keywordstyle=\color{keywordcolour},% 107 | emphstyle={[7]\color{keywordcolour}},% 108 | emphstyle=\color{exceptioncolour},% 109 | literate=*% 110 | {:}{{\literatecolour:}}{2}% 111 | {=}{{\literatecolour=}}{2}% 112 | {-}{{\literatecolour-}}{2}% 113 | {+}{{\literatecolour+}}{2}% 114 | {*}{{\literatecolour*}}2% 115 | {**}{{\literatecolour{**}}}3% 116 | {/}{{\literatecolour/}}{2}% 117 | {//}{{\literatecolour{//}}}{2}% 118 | {!}{{\literatecolour!}}{2}% 119 | %{(}{{\literatecolour(}}{2}% 120 | %{)}{{\literatecolour)}}{2}% 121 | {[}{{\literatecolour[}}{2}% 122 | {]}{{\literatecolour]}}{2}% 123 | {<}{{\literatecolour<}}{2}% 124 | {<=}{{\literatecolour{<=}}}3% 125 | {>}{{\literatecolour>}}{2}% 126 | {>=}{{\literatecolour{>=}}}3% 127 | {==}{{\literatecolour{==}}}3% 128 | {!=}{{\literatecolour{!=}}}3% 129 | {+=}{{\literatecolour{+=}}}3% 130 | {-=}{{\literatecolour{-=}}}3% 131 | {*=}{{\literatecolour{*=}}}3% 132 | {/=}{{\literatecolour{/=}}}3% 133 | %% emphstyle=\color{blue},% 134 | } 135 | 136 | \newcommand*{\pyth}{\lstinline[style=mypythoninline]} 137 | 138 | -------------------------------------------------------------------------------- /LaTex_Template/main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper,12pt,UTF8,oneside,hyperref]{ctexart}%twoside可设置双面打印格式; 2 | \usepackage{times}%全文英文字体使用Times New Roman; 3 | \linespread{1.5}%全文1.5倍行距; 4 | %========================电子文档与超链接====================== 5 | \usepackage[backref=page,hyperfootnotes=false]{hyperref} 6 | \usepackage[a4paper,left=3.0cm,right=2.0cm,top=3.51cm,bottom=4.25cm]{geometry} 7 | \hypersetup{ 8 | bookmarks = true, 9 | bookmarksopen = true, 10 | pdfborder=0 0 0, 11 | hyperfootnotes=false, 12 | pdfpagemode = FullScreen, 13 | pdfstartview = Fit, 14 | pdftitle = {本科毕业设计(论文)}, 15 | pdfauthor = {heyzbw} 16 | } 17 | \pdfbookmark[1]{Contents}{contents} 18 | %=============================================================== 19 | 20 | %=========================设=置=页=眉=========================== 21 | \usepackage{fancyhdr}% 为了保证正确长度的页眉下划线,fancyhdr宏包要在geometry宏包后使用; 22 | \pagestyle{fancy} 23 | \fancyhf{} 24 | \lhead{\includegraphics[scale=0.13]{./pictures/CSU_Logo.jpg}} 25 | \usepackage{lastpage} 26 | \rhead{\small\heiti 本科毕业设计(论文模板)} 27 | %=============================================================== 28 | 29 | %==========================章节格式============================= 30 | \usepackage{titlesec} 31 | \usepackage{indentfirst} 32 | \setlength{\parindent}{2em} 33 | \titleformat{\section}[hang]{\heiti\Large\center}{第\,\thesection\,章 \quad}{0pt}{}{} 34 | \titleformat{\subsection}[hang]{\heiti\normalsize\raggedright}{\thesubsection\quad}{0pt}{}{} 35 | \titleformat{\subsubsection}[hang]{\normalsize\kaishu\raggedright}{\thesubsubsection\quad}{0pt}{}{} 36 | \titlespacing*{\section}{0pt}{0pt}{19.2pt}[0pt] 37 | \titlespacing*{\subsection}{0pt}{0pt}{0pt}[0pt] 38 | \titlespacing*{\subsubsection}{0pt}{0pt}{0pt}[0pt] 39 | %=============================================================== 40 | 41 | %============================目录=============================== 42 | \usepackage{titletoc} 43 | \titlecontents{section}[0mm]{}{}{}{}[] 44 | \dottedcontents{section}[0.0em]{\normalsize}{1.0em}{4pt} 45 | \dottedcontents{subsection}[3.0em]{\normalsize}{2.0em}{4pt} 46 | \dottedcontents{subsubsection}[6.0em]{\normalsize}{3.0em}{4pt} 47 | %=============================================================== 48 | 49 | %==========================脚注格式============================= 50 | \usepackage{pifont} 51 | \renewcommand\thefootnote{\ding{\numexpr171+\value{footnote}}}% 更好看的一个脚注格式 52 | \usepackage[perpage]{footmisc}%脚注每页清零编号 53 | %=============================================================== 54 | 55 | %==========================插入图片============================= 56 | \usepackage{graphicx} 57 | \usepackage{subfigure}%两图并排 58 | \usepackage{picinpar}%文字绕排 59 | \usepackage{caption} 60 | \graphicspath{{./pictures/}}%设置图片放置路径 61 | \captionsetup{font=small,labelfont=bf,labelsep=quad} 62 | \captionsetup{skip=0pt}%标题与浮动环境内容的垂直间距无额外间距(设置为0pt); 63 | %=============================================================== 64 | 65 | %==========================插入表格============================= 66 | \usepackage{booktabs,multirow}%三线表 67 | \usepackage{longtable}%长表格 68 | \usepackage{bigstrut} 69 | %\usepackage{subcaption}%插入并排图片 70 | \usepackage{diagbox} 71 | \usepackage{makecell} 72 | \usepackage{tabularx} 73 | \newcolumntype{Y}{>{\centering\arraybackslash}X} 74 | %==========================解决三线表竖线过短的问题============================= 75 | \renewcommand{\cmidrulesep}{0mm} %定义两条相邻\cmidrule之间的间隔 76 | \setlength{\aboverulesep}{0mm} %在线条[不包括\toprule]上面增加一段垂直距离,此处为0mm 77 | \setlength{\belowrulesep}{0mm} %在线条[不包括\bottomrule]下面增加一条垂直距离,此处为0mm 78 | \setlength{\abovetopsep}{0cm} %在线条\toprule上面,即表格与上面的文字之间的距离。 79 | \setlength{\belowbottomsep}{0cm}%在线条\bottomrule下面,即表格与下面的文字之间的距离。 80 | %=============================================================== 81 | 82 | %==========================数学公式============================= 83 | \usepackage{amsmath}%公式 84 | \usepackage{amssymb} 85 | \usepackage{bm}%粗体 86 | \usepackage{upgreek}%直立希腊字母 87 | \usepackage{mhchem}%化学公式 \ce{SiO2} 或 \ce{H2O} 88 | \DeclareMathOperator\dif{d\!}%微分算子\frac{\dif y}{dif x} 89 | %\usepackage{xfrac}%行内小分式 90 | \newenvironment{sequation}{\begin{equation}\small}{\end{equation}} 91 | \newenvironment{tequation}{\begin{equation}\tiny}{\end{equation}} 92 | %=============================================================== 93 | 94 | %==========================使用彩色============================= 95 | %\usepackage[usenames,dvipsnames]{color} 96 | \usepackage{color} 97 | \usepackage[table]{xcolor} 98 | \usepackage{colortbl} 99 | \definecolor{mygray}{gray}{.9} 100 | \definecolor{mypink}{rgb}{.99,.91,.95} 101 | \definecolor{mycyan}{cmyk}{.3,0,0,0} 102 | %================================================================ 103 | 104 | %==========================程序代码============================= 105 | \usepackage{listings} 106 | \usepackage{pythonhighlight} 107 | %=============================================================== 108 | 109 | %=============================其它=============================== 110 | \usepackage{siunitx}%摄氏度 \SI{100}{\degreeCelsius} 111 | \makeatletter%罗马数字 112 | \newcommand{\rmnum}[1]{\romannumeral #1}% 罗马数字 113 | \newcommand{\Rmnum}[1]{\expandafter\@slowromancap\romannumeral #1@}%罗马数字 114 | \makeatother%罗马数字 \Rmnum{1} 或 \Rmnum{2} 或 \rmnum{3} 115 | \usepackage{xfrac}%行内小分式 116 | %================================================================== 117 | 118 | %=============================文献格式=============================== 119 | \usepackage[sort]{gbt7714}%文献格式使用GB/T7714-2015标准; 120 | \newcommand{\upcite}[1]{\textsuperscript{\textsuperscript{\cite{#1}}}} 121 | \usepackage{natbib} 122 | \renewcommand\bibfont{\small\kaishu}%文献改用5号楷书字体; 123 | \setlength\bibsep{0pt}%取消不同文献条目之间的距离; 124 | \usepackage{url} 125 | %================================================================== 126 | 127 | %=========================一个更好的下划线设置======================= 128 | \usepackage{ulem} 129 | \usepackage{enumitem} 130 | \usepackage{hhline}% 双线表 131 | \newcommand\dlmu[2][4cm]{\hskip1pt\underline{\hb@xt@ #1{\hss#2\hss}}\hskip3pt} 132 | %================================================================== 133 | 134 | %=========================公式按章编号=============================== 135 | \makeatletter 136 | \@addtoreset{equation}{section} 137 | \makeatother 138 | \renewcommand{\theequation}{\arabic{section}-\arabic{equation}} 139 | 140 | \makeatletter 141 | \@addtoreset{figure}{section} 142 | \makeatother 143 | \renewcommand{\thefigure}{\thesection\,-\,\arabic{figure}} 144 | 145 | \makeatletter 146 | \@addtoreset{table}{section} 147 | \makeatother 148 | \renewcommand{\thetable}{\thesection\,-\,\arabic{table}} 149 | %================================================================== 150 | 151 | \usepackage{ifpdf} 152 | 153 | \newtheorem{thm}{定理} 154 | 155 | %==============积分符号修改,改原倾斜的积分符号为直立体================== 156 | \usepackage{amsmath,amssymb} 157 | \DeclareSymbolFont{EulerExtension}{U}{euex}{m}{n} 158 | \DeclareMathSymbol{\euintop}{\mathop} {EulerExtension}{"52} 159 | \DeclareMathSymbol{\euointop}{\mathop} {EulerExtension}{"48} 160 | \let\intop\euintop 161 | \let\ointop\euointop 162 | %================================================================== 163 | 164 | \usepackage{doc}%BibTeX显示; 165 | \begin{document} 166 | \input{cover.tex} 167 | \clearpage 168 | \phantom{s} 169 | %\thispagestyle{empty} 170 | %\newpage 171 | 172 | \setcounter{page}{1} 173 | \pagenumbering{Roman} 174 | \cfoot{\small\thepage} 175 | \input{abstract.tex} 176 | \newpage 177 | 178 | \phantomsection%设置“幻影标题”,解决额外插入目录(\addcontentsline)后总是引用到第一页的问题; 179 | \addcontentsline{toc}{section}{目录} 180 | \vspace*{-21.6pt} 181 | \tableofcontents 182 | \newpage 183 | 184 | \setcounter{page}{1} 185 | \pagenumbering{arabic} 186 | \cfoot{\small 第\,\thepage\,页\quad 共\,\pageref{LastPage}\,页} 187 | \input{body.tex} 188 | 189 | 190 | \newpage 191 | \phantomsection 192 | \addcontentsline{toc}{section}{参考文献} 193 | \nocite{*} 194 | \bibliographystyle{gbt7714-numerical}%命令选择参考文献样式 195 | %\bibliographystyle{gbt7714-author-year} 196 | \bibliography{./literature/thesis} 197 | \titleformat{\section}[hang]{\heiti\large\center}{附录\,\thesection \quad}{0pt}{}{} 198 | \input{appendix.tex} 199 | \end{document} 200 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /LaTex_Template/gbt7714.sty: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `gbt7714.sty', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% gbt7714.dtx (with options: `package') 8 | %% ------------------------------------------------------------------- 9 | %% GB/T 7714 BibTeX Style 10 | %% https://github.com/zepinglee/gbt7714-bibtex-style 11 | %% Version: 2022/10/03 v2.1.5 12 | %% ------------------------------------------------------------------- 13 | %% Copyright (C) 2016--2022 by Zeping Lee 14 | %% ------------------------------------------------------------------- 15 | %% This file may be distributed and/or modified under the 16 | %% conditions of the LaTeX Project Public License, either version 1.3c 17 | %% of this license or (at your option) any later version. 18 | %% The latest version of this license is in 19 | %% https://www.latex-project.org/lppl.txt 20 | %% and version 1.3c or later is part of all distributions of LaTeX 21 | %% version 2008 or later. 22 | %% ------------------------------------------------------------------- 23 | \NeedsTeXFormat{LaTeX2e}[1999/12/01] 24 | \ProvidesPackage{gbt7714} 25 | [2022/10/03 v2.1.5 GB/T 7714 BibTeX Style] 26 | \newif\ifgbt@legacy@interface 27 | \newif\ifgbt@mmxv 28 | \newif\ifgbt@numerical 29 | \newif\ifgbt@super 30 | \newcommand\gbt@obsolete@option[1]{% 31 | \PackageWarning{gbt7714}{The option "#1" is obsolete}% 32 | } 33 | \DeclareOption{2015}{% 34 | \gbt@obsolete@option{2015}% 35 | \gbt@legacy@interfacetrue 36 | \gbt@mmxvtrue 37 | } 38 | \DeclareOption{2005}{% 39 | \gbt@obsolete@option{2005}% 40 | \gbt@legacy@interfacetrue 41 | \gbt@mmxvfalse 42 | } 43 | \DeclareOption{super}{% 44 | \gbt@obsolete@option{super}% 45 | \gbt@legacy@interfacetrue 46 | \gbt@numericaltrue 47 | \gbt@supertrue 48 | } 49 | \DeclareOption{numbers}{% 50 | \gbt@obsolete@option{numbers}% 51 | \gbt@legacy@interfacetrue 52 | \gbt@numericaltrue 53 | \gbt@superfalse 54 | } 55 | \DeclareOption{authoryear}{% 56 | \gbt@obsolete@option{authoryear}% 57 | \gbt@legacy@interfacetrue 58 | \gbt@numericalfalse 59 | } 60 | \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{natbib}} 61 | \ProcessOptions\relax 62 | \RequirePackage{natbib} 63 | \RequirePackage{url} 64 | \def\NAT@cmprs{\@ne} 65 | \renewcommand\newblock{\space} 66 | \newcommand\bibstyle@super{\bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}} 67 | \newcommand\bibstyle@numbers{\bibpunct{[}{]}{,}{n}{,}{,}} 68 | \newcommand\bibstyle@authoryear{\bibpunct{(}{)}{;}{a}{,}{,}} 69 | \newcommand\bibstyle@inline{\bibstyle@numbers} 70 | \@namedef{bibstyle@gbt7714-numerical}{\bibstyle@super} 71 | \@namedef{bibstyle@gbt7714-author-year}{\bibstyle@authoryear} 72 | \@namedef{bibstyle@gbt7714-2005-numerical}{\bibstyle@super} 73 | \@namedef{bibstyle@gbt7714-2005-author-year}{\bibstyle@authoryear} 74 | \renewcommand\NAT@citesuper[3]{% 75 | \ifNAT@swa 76 | \if*#2*\else 77 | #2\NAT@spacechar 78 | \fi 79 | % \unskip\kern\p@\textsuperscript{\NAT@@open#1\NAT@@close}% 80 | % \if*#3*\else\NAT@spacechar#3\fi\else #1\fi\endgroup} 81 | \unskip\kern\p@ 82 | \textsuperscript{% 83 | \NAT@@open 84 | #1% 85 | \NAT@@close 86 | \if*#3*\else 87 | #3% 88 | \fi 89 | }% 90 | \kern\p@ 91 | \else 92 | #1% 93 | \fi 94 | \endgroup 95 | } 96 | \renewcommand\NAT@citenum[3]{% 97 | \ifNAT@swa 98 | \NAT@@open 99 | \if*#2*\else 100 | #2\NAT@spacechar 101 | \fi 102 | % #1\if*#3*\else\NAT@cmt#3\fi\NAT@@close\else#1\fi\endgroup} 103 | #1\NAT@@close 104 | \if*#3*\else 105 | \textsuperscript{#3}% 106 | \fi 107 | \else 108 | #1% 109 | \fi 110 | \endgroup 111 | } 112 | \def\NAT@citexnum[#1][#2]#3{% 113 | \NAT@reset@parser 114 | \NAT@sort@cites{#3}% 115 | \NAT@reset@citea 116 | \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty 117 | \@for\@citeb:=\NAT@cite@list\do 118 | {\@safe@activestrue 119 | \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% 120 | \@safe@activesfalse 121 | \@ifundefined{b@\@citeb\@extra@b@citeb}{% 122 | {\reset@font\bfseries?} 123 | \NAT@citeundefined\PackageWarning{natbib}% 124 | {Citation `\@citeb' on page \thepage \space undefined}}% 125 | {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm 126 | \NAT@parse{\@citeb}% 127 | \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% 128 | \let\NAT@name=\NAT@all@names 129 | \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% 130 | \fi 131 | \ifNAT@full\let\NAT@nm\NAT@all@names\else 132 | \let\NAT@nm\NAT@name\fi 133 | \ifNAT@swa 134 | \@ifnum{\NAT@ctype>\@ne}{% 135 | \@citea 136 | \NAT@hyper@{\@ifnum{\NAT@ctype=\tw@}{\NAT@test{\NAT@ctype}}{\NAT@alias}}% 137 | }{% 138 | \@ifnum{\NAT@cmprs>\z@}{% 139 | \NAT@ifcat@num\NAT@num 140 | {\let\NAT@nm=\NAT@num}% 141 | {\def\NAT@nm{-2}}% 142 | \NAT@ifcat@num\NAT@last@num 143 | {\@tempcnta=\NAT@last@num\relax}% 144 | {\@tempcnta\m@ne}% 145 | \@ifnum{\NAT@nm=\@tempcnta}{% 146 | \@ifnum{\NAT@merge>\@ne}{}{\NAT@last@yr@mbox}% 147 | }{% 148 | \advance\@tempcnta by\@ne 149 | \@ifnum{\NAT@nm=\@tempcnta}{% 150 | % \ifx\NAT@last@yr\relax 151 | % \def@NAT@last@yr{\@citea}% 152 | % \else 153 | % \def@NAT@last@yr{--\NAT@penalty}% 154 | % \fi 155 | \def@NAT@last@yr{-\NAT@penalty}% 156 | }{% 157 | \NAT@last@yr@mbox 158 | }% 159 | }% 160 | }{% 161 | \@tempswatrue 162 | \@ifnum{\NAT@merge>\@ne}{\@ifnum{\NAT@last@num=\NAT@num\relax}{\@tempswafalse}{}}{}% 163 | \if@tempswa\NAT@citea@mbox\fi 164 | }% 165 | }% 166 | \NAT@def@citea 167 | \else 168 | \ifcase\NAT@ctype 169 | \ifx\NAT@last@nm\NAT@nm \NAT@yrsep\NAT@penalty\NAT@space\else 170 | \@citea \NAT@test{\@ne}\NAT@spacechar\NAT@mbox{\NAT@super@kern\NAT@@open}% 171 | \fi 172 | \if*#1*\else#1\NAT@spacechar\fi 173 | \NAT@mbox{\NAT@hyper@{{\citenumfont{\NAT@num}}}}% 174 | \NAT@def@citea@box 175 | \or 176 | \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% 177 | \or 178 | \NAT@hyper@citea@space{\NAT@test{\NAT@ctype}}% 179 | \or 180 | \NAT@hyper@citea@space\NAT@alias 181 | \fi 182 | \fi 183 | }% 184 | }% 185 | \@ifnum{\NAT@cmprs>\z@}{\NAT@last@yr}{}% 186 | \ifNAT@swa\else 187 | % \@ifnum{\NAT@ctype=\z@}{% 188 | % \if*#2*\else\NAT@cmt#2\fi 189 | % }{}% 190 | \NAT@mbox{\NAT@@close}% 191 | \@ifnum{\NAT@ctype=\z@}{% 192 | \if*#2*\else 193 | \textsuperscript{#2}% 194 | \fi 195 | }{}% 196 | \NAT@super@kern 197 | \fi 198 | }{#1}{#2}% 199 | }% 200 | \renewcommand\NAT@cite% 201 | [3]{\ifNAT@swa\NAT@@open\if*#2*\else#2\NAT@spacechar\fi 202 | #1\NAT@@close\if*#3*\else\textsuperscript{#3}\fi\else#1\fi\endgroup} 203 | \def\NAT@citex% 204 | [#1][#2]#3{% 205 | \NAT@reset@parser 206 | \NAT@sort@cites{#3}% 207 | \NAT@reset@citea 208 | \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty 209 | \@for\@citeb:=\NAT@cite@list\do 210 | {\@safe@activestrue 211 | \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% 212 | \@safe@activesfalse 213 | \@ifundefined{b@\@citeb\@extra@b@citeb}{\@citea% 214 | {\reset@font\bfseries ?}\NAT@citeundefined 215 | \PackageWarning{natbib}% 216 | {Citation `\@citeb' on page \thepage \space undefined}\def\NAT@date{}}% 217 | {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year 218 | \NAT@parse{\@citeb}% 219 | \ifNAT@longnames\@ifundefined{bv@\@citeb\@extra@b@citeb}{% 220 | \let\NAT@name=\NAT@all@names 221 | \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}% 222 | \fi 223 | \ifNAT@full\let\NAT@nm\NAT@all@names\else 224 | \let\NAT@nm\NAT@name\fi 225 | \ifNAT@swa\ifcase\NAT@ctype 226 | \if\relax\NAT@date\relax 227 | \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@date}% 228 | \else 229 | \ifx\NAT@last@nm\NAT@nm\NAT@yrsep 230 | \ifx\NAT@last@yr\NAT@year 231 | \def\NAT@temp{{?}}% 232 | \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% 233 | {Multiple citation on page \thepage: same authors and 234 | year\MessageBreak without distinguishing extra 235 | letter,\MessageBreak appears as question mark}\fi 236 | \NAT@hyper@{\NAT@exlab}% 237 | \else\unskip\NAT@spacechar 238 | \NAT@hyper@{\NAT@date}% 239 | \fi 240 | \else 241 | \@citea\NAT@hyper@{% 242 | \NAT@nmfmt{\NAT@nm}% 243 | \hyper@natlinkbreak{% 244 | \NAT@aysep\NAT@spacechar}{\@citeb\@extra@b@citeb 245 | }% 246 | \NAT@date 247 | }% 248 | \fi 249 | \fi 250 | \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% 251 | \or\@citea\NAT@hyper@{\NAT@date}% 252 | \or\@citea\NAT@hyper@{\NAT@alias}% 253 | \fi \NAT@def@citea 254 | \else 255 | \ifcase\NAT@ctype 256 | \if\relax\NAT@date\relax 257 | \@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% 258 | \else 259 | \ifx\NAT@last@nm\NAT@nm\NAT@yrsep 260 | \ifx\NAT@last@yr\NAT@year 261 | \def\NAT@temp{{?}}% 262 | \ifx\NAT@temp\NAT@exlab\PackageWarningNoLine{natbib}% 263 | {Multiple citation on page \thepage: same authors and 264 | year\MessageBreak without distinguishing extra 265 | letter,\MessageBreak appears as question mark}\fi 266 | \NAT@hyper@{\NAT@exlab}% 267 | \else 268 | \unskip\NAT@spacechar 269 | \NAT@hyper@{\NAT@date}% 270 | \fi 271 | \else 272 | \@citea\NAT@hyper@{% 273 | \NAT@nmfmt{\NAT@nm}% 274 | \hyper@natlinkbreak{\NAT@spacechar\NAT@@open\if*#1*\else#1\NAT@spacechar\fi}% 275 | {\@citeb\@extra@b@citeb}% 276 | \NAT@date 277 | }% 278 | \fi 279 | \fi 280 | \or\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}}% 281 | \or\@citea\NAT@hyper@{\NAT@date}% 282 | \or\@citea\NAT@hyper@{\NAT@alias}% 283 | \fi 284 | \if\relax\NAT@date\relax 285 | \NAT@def@citea 286 | \else 287 | \NAT@def@citea@close 288 | \fi 289 | \fi 290 | }}\ifNAT@swa\else 291 | % \if*#2*\else\NAT@cmt#2\fi 292 | \if\relax\NAT@date\relax\else\NAT@@close\fi 293 | \if*#2*\else\textsuperscript{#2}\fi 294 | \fi}{#1}{#2}} 295 | \renewcommand\@biblabel[1]{[#1]\hfill} 296 | \g@addto@macro\UrlBreaks{% 297 | \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9% 298 | \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M 299 | \do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z 300 | \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m 301 | \do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z 302 | } 303 | \Urlmuskip=0mu plus 0.1mu 304 | \newif\ifgbt@bib@style@written 305 | \@ifpackageloaded{chapterbib}{}{% 306 | \def\bibliography#1{% 307 | \ifgbt@bib@style@written\else 308 | \bibliographystyle{gbt7714-numerical}% 309 | \fi 310 | \if@filesw 311 | \immediate\write\@auxout{\string\bibdata{\zap@space#1 \@empty}}% 312 | \fi 313 | \@input@{\jobname.bbl}} 314 | \def\bibliographystyle#1{% 315 | \gbt@bib@style@writtentrue 316 | \ifx\@begindocumenthook\@undefined\else 317 | \expandafter\AtBeginDocument 318 | \fi 319 | {\if@filesw 320 | \immediate\write\@auxout{\string\bibstyle{#1}}% 321 | \fi}% 322 | }% 323 | } 324 | \ifgbt@legacy@interface 325 | \ifgbt@numerical 326 | \ifgbt@super\else 327 | \citestyle{numbers} 328 | \fi 329 | \bibliographystyle{gbt7714-numerical} 330 | \else 331 | \bibliographystyle{gbt7714-author-year} 332 | \fi 333 | \fi 334 | -------------------------------------------------------------------------------- /LaTex_Template/gbt7714-numerical.bst: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `gbt7714-numerical.bst', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% gbt7714.dtx (with options: `2015,numerical') 8 | %% ------------------------------------------------------------------- 9 | %% GB/T 7714 BibTeX Style 10 | %% https://github.com/zepinglee/gbt7714-bibtex-style 11 | %% Version: 2022/10/03 v2.1.5 12 | %% ------------------------------------------------------------------- 13 | %% Copyright (C) 2016--2022 by Zeping Lee 14 | %% ------------------------------------------------------------------- 15 | %% This file may be distributed and/or modified under the 16 | %% conditions of the LaTeX Project Public License, either version 1.3c 17 | %% of this license or (at your option) any later version. 18 | %% The latest version of this license is in 19 | %% https://www.latex-project.org/lppl.txt 20 | %% and version 1.3c or later is part of all distributions of LaTeX 21 | %% version 2008 or later. 22 | %% ------------------------------------------------------------------- 23 | INTEGERS { 24 | citation.et.al.min 25 | citation.et.al.use.first 26 | bibliography.et.al.min 27 | bibliography.et.al.use.first 28 | uppercase.name 29 | terms.in.macro 30 | year.after.author 31 | period.after.author 32 | italic.book.title 33 | sentence.case.title 34 | link.title 35 | title.in.journal 36 | show.patent.country 37 | show.mark 38 | space.before.mark 39 | show.medium.type 40 | short.journal 41 | italic.journal 42 | bold.journal.volume 43 | show.missing.address.publisher 44 | space.before.pages 45 | only.start.page 46 | wave.dash.in.pages 47 | show.urldate 48 | show.url 49 | show.doi 50 | show.preprint 51 | show.note 52 | show.english.translation 53 | end.with.period 54 | } 55 | 56 | STRINGS { 57 | component.part.label 58 | } 59 | 60 | FUNCTION {load.config} 61 | { 62 | #2 'citation.et.al.min := 63 | #1 'citation.et.al.use.first := 64 | #4 'bibliography.et.al.min := 65 | #3 'bibliography.et.al.use.first := 66 | #1 'uppercase.name := 67 | #0 'terms.in.macro := 68 | #0 'year.after.author := 69 | #1 'period.after.author := 70 | #0 'italic.book.title := 71 | #1 'sentence.case.title := 72 | #0 'link.title := 73 | #1 'title.in.journal := 74 | #0 'show.patent.country := 75 | #1 'show.mark := 76 | #0 'space.before.mark := 77 | #1 'show.medium.type := 78 | "slash" 'component.part.label := 79 | #0 'short.journal := 80 | #0 'italic.journal := 81 | #0 'bold.journal.volume := 82 | #0 'show.missing.address.publisher := 83 | #1 'space.before.pages := 84 | #0 'only.start.page := 85 | #0 'wave.dash.in.pages := 86 | #1 'show.urldate := 87 | #1 'show.url := 88 | #1 'show.doi := 89 | #1 'show.preprint := 90 | #0 'show.note := 91 | #0 'show.english.translation := 92 | #1 'end.with.period := 93 | } 94 | 95 | ENTRY 96 | { address 97 | archivePrefix 98 | author 99 | booktitle 100 | date 101 | doi 102 | edition 103 | editor 104 | eprint 105 | eprinttype 106 | entrysubtype 107 | howpublished 108 | institution 109 | journal 110 | journaltitle 111 | key 112 | langid 113 | language 114 | location 115 | mark 116 | medium 117 | note 118 | number 119 | organization 120 | pages 121 | publisher 122 | school 123 | series 124 | shortjournal 125 | title 126 | translation 127 | translator 128 | url 129 | urldate 130 | volume 131 | year 132 | } 133 | { entry.lang entry.is.electronic is.pure.electronic entry.numbered } 134 | { label extra.label sort.label short.label short.list entry.mark entry.url } 135 | 136 | INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } 137 | 138 | INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other } 139 | 140 | INTEGERS { charptr len } 141 | 142 | FUNCTION {init.state.consts} 143 | { #0 'before.all := 144 | #1 'mid.sentence := 145 | #2 'after.sentence := 146 | #3 'after.block := 147 | #4 'after.slash := 148 | #3 'lang.zh := 149 | #4 'lang.ja := 150 | #1 'lang.en := 151 | #2 'lang.ru := 152 | #0 'lang.other := 153 | } 154 | 155 | FUNCTION {bbl.anonymous} 156 | { entry.lang lang.zh = 157 | { "佚名" } 158 | { "Anon" } 159 | if$ 160 | } 161 | 162 | FUNCTION {bbl.space} 163 | { entry.lang lang.zh = 164 | { "\ " } 165 | { " " } 166 | if$ 167 | } 168 | 169 | FUNCTION {bbl.and} 170 | { "" } 171 | 172 | FUNCTION {bbl.et.al} 173 | { entry.lang lang.zh = 174 | { "等" } 175 | { entry.lang lang.ja = 176 | { "他" } 177 | { entry.lang lang.ru = 178 | { "идр" } 179 | { "et~al." } 180 | if$ 181 | } 182 | if$ 183 | } 184 | if$ 185 | } 186 | 187 | FUNCTION {citation.and} 188 | { terms.in.macro 189 | { "{\biband}" } 190 | 'bbl.and 191 | if$ 192 | } 193 | 194 | FUNCTION {citation.et.al} 195 | { terms.in.macro 196 | { "{\bibetal}" } 197 | 'bbl.et.al 198 | if$ 199 | } 200 | 201 | FUNCTION {bbl.colon} { ": " } 202 | 203 | FUNCTION {bbl.pages.colon} 204 | { space.before.pages 205 | { ": " } 206 | { ":\allowbreak " } 207 | if$ 208 | } 209 | 210 | FUNCTION {bbl.wide.space} { "\quad " } 211 | 212 | FUNCTION {bbl.slash} { "//\allowbreak " } 213 | 214 | FUNCTION {bbl.sine.loco} 215 | { entry.lang lang.zh = 216 | { "[出版地不详]" } 217 | { "[S.l.]" } 218 | if$ 219 | } 220 | 221 | FUNCTION {bbl.sine.nomine} 222 | { entry.lang lang.zh = 223 | { "[出版者不详]" } 224 | { "[s.n.]" } 225 | if$ 226 | } 227 | 228 | FUNCTION {bbl.sine.loco.sine.nomine} 229 | { entry.lang lang.zh = 230 | { "[出版地不详: 出版者不详]" } 231 | { "[S.l.: s.n.]" } 232 | if$ 233 | } 234 | 235 | FUNCTION {not} 236 | { { #0 } 237 | { #1 } 238 | if$ 239 | } 240 | 241 | FUNCTION {and} 242 | { 'skip$ 243 | { pop$ #0 } 244 | if$ 245 | } 246 | 247 | FUNCTION {or} 248 | { { pop$ #1 } 249 | 'skip$ 250 | if$ 251 | } 252 | 253 | STRINGS { x y } 254 | 255 | FUNCTION {contains} 256 | { 'y := 257 | 'x := 258 | y text.length$ 'len := 259 | x text.length$ len - #1 + 'charptr := 260 | { charptr #0 > 261 | x charptr len substring$ y = not 262 | and 263 | } 264 | { charptr #1 - 'charptr := } 265 | while$ 266 | charptr #0 > 267 | } 268 | 269 | STRINGS { s t } 270 | 271 | FUNCTION {output.nonnull} 272 | { 's := 273 | output.state mid.sentence = 274 | { ", " * write$ } 275 | { output.state after.block = 276 | { add.period$ write$ 277 | newline$ 278 | "\newblock " write$ 279 | } 280 | { output.state before.all = 281 | 'write$ 282 | { output.state after.slash = 283 | { bbl.slash * write$ 284 | newline$ 285 | } 286 | { add.period$ " " * write$ } 287 | if$ 288 | } 289 | if$ 290 | } 291 | if$ 292 | mid.sentence 'output.state := 293 | } 294 | if$ 295 | s 296 | } 297 | 298 | FUNCTION {output} 299 | { duplicate$ empty$ 300 | 'pop$ 301 | 'output.nonnull 302 | if$ 303 | } 304 | 305 | FUNCTION {output.after} 306 | { 't := 307 | duplicate$ empty$ 308 | 'pop$ 309 | { 's := 310 | output.state mid.sentence = 311 | { t * write$ } 312 | { output.state after.block = 313 | { add.period$ write$ 314 | newline$ 315 | "\newblock " write$ 316 | } 317 | { output.state before.all = 318 | 'write$ 319 | { output.state after.slash = 320 | { bbl.slash * write$ } 321 | { add.period$ " " * write$ } 322 | if$ 323 | } 324 | if$ 325 | } 326 | if$ 327 | mid.sentence 'output.state := 328 | } 329 | if$ 330 | s 331 | } 332 | if$ 333 | } 334 | 335 | FUNCTION {output.check} 336 | { 't := 337 | duplicate$ empty$ 338 | { pop$ "empty " t * " in " * cite$ * warning$ } 339 | 'output.nonnull 340 | if$ 341 | } 342 | 343 | FUNCTION {fin.entry} 344 | { end.with.period 345 | 'add.period$ 346 | 'skip$ 347 | if$ 348 | write$ 349 | show.english.translation entry.lang lang.zh = and 350 | { ")" 351 | write$ 352 | } 353 | 'skip$ 354 | if$ 355 | newline$ 356 | } 357 | 358 | FUNCTION {new.block} 359 | { output.state before.all = 360 | 'skip$ 361 | { output.state after.slash = 362 | 'skip$ 363 | { after.block 'output.state := } 364 | if$ 365 | } 366 | if$ 367 | } 368 | 369 | FUNCTION {new.sentence} 370 | { output.state after.block = 371 | 'skip$ 372 | { output.state before.all = 373 | 'skip$ 374 | { output.state after.slash = 375 | 'skip$ 376 | { after.sentence 'output.state := } 377 | if$ 378 | } 379 | if$ 380 | } 381 | if$ 382 | } 383 | 384 | FUNCTION {new.slash} 385 | { output.state before.all = 386 | 'skip$ 387 | { component.part.label "slash" = 388 | { after.slash 'output.state := } 389 | { new.block 390 | component.part.label "in" = 391 | { entry.lang lang.en = 392 | { "In: " output 393 | write$ 394 | "" 395 | before.all 'output.state := 396 | } 397 | 'skip$ 398 | if$ 399 | } 400 | 'skip$ 401 | if$ 402 | } 403 | if$ 404 | } 405 | if$ 406 | } 407 | 408 | FUNCTION {new.block.checka} 409 | { empty$ 410 | 'skip$ 411 | 'new.block 412 | if$ 413 | } 414 | 415 | FUNCTION {new.block.checkb} 416 | { empty$ 417 | swap$ empty$ 418 | and 419 | 'skip$ 420 | 'new.block 421 | if$ 422 | } 423 | 424 | FUNCTION {new.sentence.checka} 425 | { empty$ 426 | 'skip$ 427 | 'new.sentence 428 | if$ 429 | } 430 | 431 | FUNCTION {new.sentence.checkb} 432 | { empty$ 433 | swap$ empty$ 434 | and 435 | 'skip$ 436 | 'new.sentence 437 | if$ 438 | } 439 | 440 | FUNCTION {field.or.null} 441 | { duplicate$ empty$ 442 | { pop$ "" } 443 | 'skip$ 444 | if$ 445 | } 446 | 447 | FUNCTION {emphasize} 448 | { duplicate$ empty$ 449 | { pop$ "" } 450 | { "\emph{" swap$ * "}" * } 451 | if$ 452 | } 453 | 454 | FUNCTION {format.btitle} 455 | { italic.book.title 456 | entry.lang lang.en = and 457 | 'emphasize 458 | 'skip$ 459 | if$ 460 | } 461 | 462 | INTEGERS { byte second.byte } 463 | 464 | INTEGERS { char.lang tmp.lang } 465 | 466 | STRINGS { tmp.str } 467 | 468 | FUNCTION {get.str.lang} 469 | { 'tmp.str := 470 | lang.other 'tmp.lang := 471 | #1 'charptr := 472 | tmp.str text.length$ #1 + 'len := 473 | { charptr len < } 474 | { tmp.str charptr #1 substring$ chr.to.int$ 'byte := 475 | byte #128 < 476 | { charptr #1 + 'charptr := 477 | byte #64 > byte #91 < and byte #96 > byte #123 < and or 478 | { lang.en 'char.lang := } 479 | { lang.other 'char.lang := } 480 | if$ 481 | } 482 | { tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte := 483 | byte #224 < 484 | { charptr #2 + 'charptr := 485 | byte #207 > byte #212 < and 486 | byte #212 = second.byte #176 < and or 487 | { lang.ru 'char.lang := } 488 | { lang.other 'char.lang := } 489 | if$ 490 | } 491 | { byte #240 < 492 | { charptr #3 + 'charptr := 493 | byte #227 > byte #234 < and 494 | { lang.zh 'char.lang := } 495 | { byte #227 = 496 | { second.byte #143 > 497 | { lang.zh 'char.lang := } 498 | { second.byte #128 > second.byte #132 < and 499 | { lang.ja 'char.lang := } 500 | { lang.other 'char.lang := } 501 | if$ 502 | } 503 | if$ 504 | } 505 | { byte #239 = 506 | second.byte #163 > second.byte #172 < and and 507 | { lang.zh 'char.lang := } 508 | { lang.other 'char.lang := } 509 | if$ 510 | } 511 | if$ 512 | } 513 | if$ 514 | } 515 | { charptr #4 + 'charptr := 516 | byte #240 = second.byte #159 > and 517 | { lang.zh 'char.lang := } 518 | { lang.other 'char.lang := } 519 | if$ 520 | } 521 | if$ 522 | } 523 | if$ 524 | } 525 | if$ 526 | char.lang tmp.lang > 527 | { char.lang 'tmp.lang := } 528 | 'skip$ 529 | if$ 530 | } 531 | while$ 532 | tmp.lang 533 | } 534 | 535 | FUNCTION {check.entry.lang} 536 | { author field.or.null 537 | title field.or.null * 538 | get.str.lang 539 | } 540 | 541 | STRINGS { entry.langid } 542 | 543 | FUNCTION {set.entry.lang} 544 | { "" 'entry.langid := 545 | language empty$ not 546 | { language 'entry.langid := } 547 | 'skip$ 548 | if$ 549 | langid empty$ not 550 | { langid 'entry.langid := } 551 | 'skip$ 552 | if$ 553 | entry.langid empty$ 554 | { check.entry.lang } 555 | { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or 556 | { lang.en } 557 | { entry.langid "chinese" = 558 | { lang.zh } 559 | { entry.langid "japanese" = 560 | { lang.ja } 561 | { entry.langid "russian" = 562 | { lang.ru } 563 | { check.entry.lang } 564 | if$ 565 | } 566 | if$ 567 | } 568 | if$ 569 | } 570 | if$ 571 | } 572 | if$ 573 | 'entry.lang := 574 | } 575 | 576 | FUNCTION {set.entry.numbered} 577 | { type$ "patent" = 578 | type$ "standard" = or 579 | type$ "techreport" = or 580 | { #1 'entry.numbered := } 581 | { #0 'entry.numbered := } 582 | if$ 583 | } 584 | 585 | INTEGERS { nameptr namesleft numnames name.lang } 586 | 587 | FUNCTION {format.name} 588 | { "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 589 | t "others" = 590 | { bbl.et.al } 591 | { t get.str.lang 'name.lang := 592 | name.lang lang.en = 593 | { t #1 "{vv~}{ll}{ f{~}}" format.name$ 594 | uppercase.name 595 | { "u" change.case$ } 596 | 'skip$ 597 | if$ 598 | t #1 "{, jj}" format.name$ * 599 | } 600 | { t #1 "{ll}{ff}" format.name$ } 601 | if$ 602 | } 603 | if$ 604 | } 605 | 606 | FUNCTION {format.names} 607 | { 's := 608 | #1 'nameptr := 609 | s num.names$ 'numnames := 610 | "" 611 | numnames 'namesleft := 612 | { namesleft #0 > } 613 | { s nameptr format.name bbl.et.al = 614 | numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or 615 | { ", " * 616 | bbl.et.al * 617 | #1 'namesleft := 618 | } 619 | { nameptr #1 > 620 | { namesleft #1 = bbl.and "" = not and 621 | { bbl.and * } 622 | { ", " * } 623 | if$ 624 | } 625 | 'skip$ 626 | if$ 627 | s nameptr format.name * 628 | } 629 | if$ 630 | nameptr #1 + 'nameptr := 631 | namesleft #1 - 'namesleft := 632 | } 633 | while$ 634 | } 635 | 636 | FUNCTION {format.key} 637 | { empty$ 638 | { key field.or.null } 639 | { "" } 640 | if$ 641 | } 642 | 643 | FUNCTION {format.authors} 644 | { author empty$ not 645 | { author format.names } 646 | { "empty author in " cite$ * warning$ 647 | "" 648 | } 649 | if$ 650 | } 651 | 652 | FUNCTION {format.editors} 653 | { editor empty$ 654 | { "" } 655 | { editor format.names } 656 | if$ 657 | } 658 | 659 | FUNCTION {format.translators} 660 | { translator empty$ 661 | { "" } 662 | { translator format.names 663 | entry.lang lang.zh = 664 | { translator num.names$ #3 > 665 | { "译" * } 666 | { ", 译" * } 667 | if$ 668 | } 669 | 'skip$ 670 | if$ 671 | } 672 | if$ 673 | } 674 | 675 | FUNCTION {format.full.names} 676 | {'s := 677 | #1 'nameptr := 678 | s num.names$ 'numnames := 679 | numnames 'namesleft := 680 | { namesleft #0 > } 681 | { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 682 | t get.str.lang 'name.lang := 683 | name.lang lang.en = 684 | { t #1 "{vv~}{ll}" format.name$ 't := } 685 | { t #1 "{ll}{ff}" format.name$ 't := } 686 | if$ 687 | nameptr #1 > 688 | { 689 | namesleft #1 > 690 | { ", " * t * } 691 | { 692 | numnames #2 > 693 | { "," * } 694 | 'skip$ 695 | if$ 696 | t "others" = 697 | { " et~al." * } 698 | { " and " * t * } 699 | if$ 700 | } 701 | if$ 702 | } 703 | 't 704 | if$ 705 | nameptr #1 + 'nameptr := 706 | namesleft #1 - 'namesleft := 707 | } 708 | while$ 709 | } 710 | 711 | FUNCTION {author.editor.full} 712 | { author empty$ 713 | { editor empty$ 714 | { "" } 715 | { editor format.full.names } 716 | if$ 717 | } 718 | { author format.full.names } 719 | if$ 720 | } 721 | 722 | FUNCTION {author.full} 723 | { author empty$ 724 | { "" } 725 | { author format.full.names } 726 | if$ 727 | } 728 | 729 | FUNCTION {editor.full} 730 | { editor empty$ 731 | { "" } 732 | { editor format.full.names } 733 | if$ 734 | } 735 | 736 | FUNCTION {make.full.names} 737 | { type$ "book" = 738 | type$ "inbook" = 739 | or 740 | 'author.editor.full 741 | { type$ "collection" = 742 | type$ "proceedings" = 743 | or 744 | 'editor.full 745 | 'author.full 746 | if$ 747 | } 748 | if$ 749 | } 750 | 751 | FUNCTION {output.bibitem} 752 | { newline$ 753 | "\bibitem[" write$ 754 | label ")" * 755 | make.full.names duplicate$ short.list = 756 | { pop$ } 757 | { duplicate$ "]" contains 758 | { "{" swap$ * "}" * } 759 | 'skip$ 760 | if$ 761 | * 762 | } 763 | if$ 764 | "]{" * write$ 765 | cite$ write$ 766 | "}" write$ 767 | newline$ 768 | "" 769 | before.all 'output.state := 770 | } 771 | 772 | FUNCTION {change.sentence.case} 773 | { entry.lang lang.en = 774 | { "t" change.case$ } 775 | 'skip$ 776 | if$ 777 | } 778 | 779 | FUNCTION {add.link} 780 | { url empty$ not 781 | { "\href{" url * "}{" * swap$ * "}" * } 782 | { doi empty$ not 783 | { "\href{https://doi.org/" doi * "}{" * swap$ * "}" * } 784 | 'skip$ 785 | if$ 786 | } 787 | if$ 788 | } 789 | 790 | FUNCTION {format.title} 791 | { title empty$ 792 | { "" } 793 | { title 794 | sentence.case.title 795 | 'change.sentence.case 796 | 'skip$ 797 | if$ 798 | entry.numbered number empty$ not and 799 | { bbl.colon * 800 | type$ "patent" = show.patent.country and 801 | { address empty$ not 802 | { address * ", " * } 803 | { location empty$ not 804 | { location * ", " * } 805 | { entry.lang lang.zh = 806 | { "中国" * ", " * } 807 | 'skip$ 808 | if$ 809 | } 810 | if$ 811 | } 812 | if$ 813 | } 814 | 'skip$ 815 | if$ 816 | number * 817 | } 818 | 'skip$ 819 | if$ 820 | link.title 821 | 'add.link 822 | 'skip$ 823 | if$ 824 | } 825 | if$ 826 | } 827 | 828 | FUNCTION {tie.or.space.connect} 829 | { duplicate$ text.length$ #3 < 830 | { "~" } 831 | { " " } 832 | if$ 833 | swap$ * * 834 | } 835 | 836 | FUNCTION {either.or.check} 837 | { empty$ 838 | 'pop$ 839 | { "can't use both " swap$ * " fields in " * cite$ * warning$ } 840 | if$ 841 | } 842 | 843 | FUNCTION {is.digit} 844 | { duplicate$ empty$ 845 | { pop$ #0 } 846 | { chr.to.int$ 847 | duplicate$ "0" chr.to.int$ < 848 | { pop$ #0 } 849 | { "9" chr.to.int$ > 850 | { #0 } 851 | { #1 } 852 | if$ 853 | } 854 | if$ 855 | } 856 | if$ 857 | } 858 | 859 | FUNCTION {is.number} 860 | { 's := 861 | s empty$ 862 | { #0 } 863 | { s text.length$ 'charptr := 864 | { charptr #0 > 865 | s charptr #1 substring$ is.digit 866 | and 867 | } 868 | { charptr #1 - 'charptr := } 869 | while$ 870 | charptr not 871 | } 872 | if$ 873 | } 874 | 875 | FUNCTION {format.volume} 876 | { volume empty$ not 877 | { volume is.number 878 | { entry.lang lang.zh = 879 | { "第 " volume * " 卷" * } 880 | { "Vol." volume tie.or.space.connect } 881 | if$ 882 | } 883 | { volume } 884 | if$ 885 | } 886 | { "" } 887 | if$ 888 | } 889 | 890 | FUNCTION {format.number} 891 | { number empty$ not 892 | { number is.number 893 | { entry.lang lang.zh = 894 | { "第 " number * " 册" * } 895 | { "No." number tie.or.space.connect } 896 | if$ 897 | } 898 | { number } 899 | if$ 900 | } 901 | { "" } 902 | if$ 903 | } 904 | 905 | FUNCTION {format.volume.number} 906 | { volume empty$ not 907 | { format.volume } 908 | { format.number } 909 | if$ 910 | } 911 | 912 | FUNCTION {format.title.vol.num} 913 | { title 914 | sentence.case.title 915 | 'change.sentence.case 916 | 'skip$ 917 | if$ 918 | entry.numbered 919 | { number empty$ not 920 | { bbl.colon * number * } 921 | 'skip$ 922 | if$ 923 | } 924 | { format.volume.number 's := 925 | s empty$ not 926 | { bbl.colon * s * } 927 | 'skip$ 928 | if$ 929 | } 930 | if$ 931 | } 932 | 933 | FUNCTION {format.series.vol.num.title} 934 | { format.volume.number 's := 935 | series empty$ not 936 | { series 937 | sentence.case.title 938 | 'change.sentence.case 939 | 'skip$ 940 | if$ 941 | entry.numbered 942 | { bbl.wide.space * } 943 | { bbl.colon * 944 | s empty$ not 945 | { s * bbl.wide.space * } 946 | 'skip$ 947 | if$ 948 | } 949 | if$ 950 | title * 951 | sentence.case.title 952 | 'change.sentence.case 953 | 'skip$ 954 | if$ 955 | entry.numbered number empty$ not and 956 | { bbl.colon * number * } 957 | 'skip$ 958 | if$ 959 | } 960 | { format.title.vol.num } 961 | if$ 962 | format.btitle 963 | link.title 964 | 'add.link 965 | 'skip$ 966 | if$ 967 | } 968 | 969 | FUNCTION {format.booktitle.vol.num} 970 | { booktitle 971 | entry.numbered 972 | 'skip$ 973 | { format.volume.number 's := 974 | s empty$ not 975 | { bbl.colon * s * } 976 | 'skip$ 977 | if$ 978 | } 979 | if$ 980 | } 981 | 982 | FUNCTION {format.series.vol.num.booktitle} 983 | { format.volume.number 's := 984 | series empty$ not 985 | { series bbl.colon * 986 | entry.numbered not s empty$ not and 987 | { s * bbl.wide.space * } 988 | 'skip$ 989 | if$ 990 | booktitle * 991 | } 992 | { format.booktitle.vol.num } 993 | if$ 994 | format.btitle 995 | } 996 | 997 | FUNCTION {remove.period} 998 | { 't := 999 | "" 's := 1000 | { t empty$ not } 1001 | { t #1 #1 substring$ 'tmp.str := 1002 | tmp.str "." = not 1003 | { s tmp.str * 's := } 1004 | 'skip$ 1005 | if$ 1006 | t #2 global.max$ substring$ 't := 1007 | } 1008 | while$ 1009 | s 1010 | } 1011 | 1012 | FUNCTION {abbreviate} 1013 | { remove.period 1014 | 't := 1015 | t "l" change.case$ 's := 1016 | "" 1017 | s "physical review letters" = 1018 | { "Phys Rev Lett" } 1019 | 'skip$ 1020 | if$ 1021 | 's := 1022 | s empty$ 1023 | { t } 1024 | { pop$ s } 1025 | if$ 1026 | } 1027 | 1028 | FUNCTION {get.journal.title} 1029 | { short.journal 1030 | { shortjournal empty$ not 1031 | { shortjournal } 1032 | { journal empty$ not 1033 | { journal abbreviate } 1034 | { journaltitle empty$ not 1035 | { journaltitle abbreviate } 1036 | { "" } 1037 | if$ 1038 | } 1039 | if$ 1040 | } 1041 | if$ 1042 | } 1043 | { journal empty$ not 1044 | { journal } 1045 | { journaltitle empty$ not 1046 | { journaltitle } 1047 | { shortjournal empty$ not 1048 | { shortjournal } 1049 | { "" } 1050 | if$ 1051 | } 1052 | if$ 1053 | } 1054 | if$ 1055 | } 1056 | if$ 1057 | } 1058 | 1059 | FUNCTION {check.arxiv.preprint} 1060 | { #1 #5 substring$ "l" change.case$ "arxiv" = 1061 | { #1 } 1062 | { #0 } 1063 | if$ 1064 | } 1065 | 1066 | FUNCTION {format.journal} 1067 | { get.journal.title 1068 | duplicate$ empty$ not 1069 | { italic.journal entry.lang lang.en = and 1070 | 'emphasize 1071 | 'skip$ 1072 | if$ 1073 | } 1074 | 'skip$ 1075 | if$ 1076 | } 1077 | 1078 | FUNCTION {set.entry.mark} 1079 | { entry.mark empty$ not 1080 | 'pop$ 1081 | { mark empty$ not 1082 | { pop$ mark 'entry.mark := } 1083 | { 'entry.mark := } 1084 | if$ 1085 | } 1086 | if$ 1087 | } 1088 | 1089 | FUNCTION {format.mark} 1090 | { show.mark 1091 | { entry.mark 1092 | show.medium.type 1093 | { medium empty$ not 1094 | { "/" * medium * } 1095 | { entry.is.electronic 1096 | { "/OL" * } 1097 | 'skip$ 1098 | if$ 1099 | } 1100 | if$ 1101 | } 1102 | 'skip$ 1103 | if$ 1104 | 'entry.mark := 1105 | space.before.mark 1106 | { " " } 1107 | { "\allowbreak" } 1108 | if$ 1109 | "[" * entry.mark * "]" * 1110 | } 1111 | { "" } 1112 | if$ 1113 | } 1114 | 1115 | FUNCTION {num.to.ordinal} 1116 | { duplicate$ text.length$ 'charptr := 1117 | duplicate$ charptr #1 substring$ 's := 1118 | s "1" = 1119 | { "st" * } 1120 | { s "2" = 1121 | { "nd" * } 1122 | { s "3" = 1123 | { "rd" * } 1124 | { "th" * } 1125 | if$ 1126 | } 1127 | if$ 1128 | } 1129 | if$ 1130 | } 1131 | 1132 | FUNCTION {format.edition} 1133 | { edition empty$ 1134 | { "" } 1135 | { edition is.number 1136 | { edition "1" = not 1137 | { entry.lang lang.zh = 1138 | { edition " 版" * } 1139 | { edition num.to.ordinal " ed." * } 1140 | if$ 1141 | } 1142 | 'skip$ 1143 | if$ 1144 | } 1145 | { entry.lang lang.en = 1146 | { edition change.sentence.case 's := 1147 | s "Revised" = s "Revised edition" = or 1148 | { "Rev. ed." } 1149 | { s " ed." * } 1150 | if$ 1151 | } 1152 | { edition } 1153 | if$ 1154 | } 1155 | if$ 1156 | } 1157 | if$ 1158 | } 1159 | 1160 | FUNCTION {format.publisher} 1161 | { publisher empty$ not 1162 | { publisher } 1163 | { school empty$ not 1164 | { school } 1165 | { organization empty$ not 1166 | { organization } 1167 | { institution empty$ not 1168 | { institution } 1169 | { "" } 1170 | if$ 1171 | } 1172 | if$ 1173 | } 1174 | if$ 1175 | } 1176 | if$ 1177 | } 1178 | 1179 | FUNCTION {format.address.publisher} 1180 | { address empty$ not 1181 | { address } 1182 | { location empty$ not 1183 | { location } 1184 | { "" } 1185 | if$ 1186 | } 1187 | if$ 1188 | duplicate$ empty$ not 1189 | { format.publisher empty$ not 1190 | { bbl.colon * format.publisher * } 1191 | { entry.is.electronic not show.missing.address.publisher and 1192 | { bbl.colon * bbl.sine.nomine * } 1193 | 'skip$ 1194 | if$ 1195 | } 1196 | if$ 1197 | } 1198 | { pop$ 1199 | entry.is.electronic not show.missing.address.publisher and 1200 | { format.publisher empty$ not 1201 | { bbl.sine.loco bbl.colon * format.publisher * } 1202 | { bbl.sine.loco.sine.nomine } 1203 | if$ 1204 | } 1205 | { format.publisher empty$ not 1206 | { format.publisher } 1207 | { "" } 1208 | if$ 1209 | } 1210 | if$ 1211 | } 1212 | if$ 1213 | } 1214 | 1215 | FUNCTION {extract.before.dash} 1216 | { duplicate$ empty$ 1217 | { pop$ "" } 1218 | { 's := 1219 | #1 'charptr := 1220 | s text.length$ #1 + 'len := 1221 | { charptr len < 1222 | s charptr #1 substring$ "-" = not 1223 | and 1224 | } 1225 | { charptr #1 + 'charptr := } 1226 | while$ 1227 | s #1 charptr #1 - substring$ 1228 | } 1229 | if$ 1230 | } 1231 | 1232 | FUNCTION {extract.after.dash} 1233 | { duplicate$ empty$ 1234 | { pop$ "" } 1235 | { 's := 1236 | #1 'charptr := 1237 | s text.length$ #1 + 'len := 1238 | { charptr len < 1239 | s charptr #1 substring$ "-" = not 1240 | and 1241 | } 1242 | { charptr #1 + 'charptr := } 1243 | while$ 1244 | { charptr len < 1245 | s charptr #1 substring$ "-" = 1246 | and 1247 | } 1248 | { charptr #1 + 'charptr := } 1249 | while$ 1250 | s charptr global.max$ substring$ 1251 | } 1252 | if$ 1253 | } 1254 | 1255 | FUNCTION {extract.before.slash} 1256 | { duplicate$ empty$ 1257 | { pop$ "" } 1258 | { 's := 1259 | #1 'charptr := 1260 | s text.length$ #1 + 'len := 1261 | { charptr len < 1262 | s charptr #1 substring$ "/" = not 1263 | and 1264 | } 1265 | { charptr #1 + 'charptr := } 1266 | while$ 1267 | s #1 charptr #1 - substring$ 1268 | } 1269 | if$ 1270 | } 1271 | 1272 | FUNCTION {extract.after.slash} 1273 | { duplicate$ empty$ 1274 | { pop$ "" } 1275 | { 's := 1276 | #1 'charptr := 1277 | s text.length$ #1 + 'len := 1278 | { charptr len < 1279 | s charptr #1 substring$ "-" = not 1280 | and 1281 | s charptr #1 substring$ "/" = not 1282 | and 1283 | } 1284 | { charptr #1 + 'charptr := } 1285 | while$ 1286 | { charptr len < 1287 | s charptr #1 substring$ "-" = 1288 | s charptr #1 substring$ "/" = 1289 | or 1290 | and 1291 | } 1292 | { charptr #1 + 'charptr := } 1293 | while$ 1294 | s charptr global.max$ substring$ 1295 | } 1296 | if$ 1297 | } 1298 | 1299 | FUNCTION {format.year} 1300 | { year empty$ not 1301 | { year extract.before.slash extra.label * } 1302 | { date empty$ not 1303 | { date extract.before.dash extra.label * } 1304 | { entry.is.electronic not 1305 | { "empty year in " cite$ * warning$ } 1306 | 'skip$ 1307 | if$ 1308 | urldate empty$ not 1309 | { "[" urldate extract.before.dash * extra.label * "]" * } 1310 | { "" } 1311 | if$ 1312 | } 1313 | if$ 1314 | } 1315 | if$ 1316 | } 1317 | 1318 | FUNCTION {format.periodical.year} 1319 | { year empty$ not 1320 | { year extract.before.slash 1321 | "--" * 1322 | year extract.after.slash 1323 | duplicate$ empty$ 1324 | 'pop$ 1325 | { * } 1326 | if$ 1327 | } 1328 | { date empty$ not 1329 | { date extract.before.dash } 1330 | { "empty year in " cite$ * warning$ 1331 | urldate empty$ not 1332 | { "[" urldate extract.before.dash * "]" * } 1333 | { "" } 1334 | if$ 1335 | } 1336 | if$ 1337 | } 1338 | if$ 1339 | } 1340 | 1341 | FUNCTION {format.date} 1342 | { date empty$ not 1343 | { type$ "patent" = type$ "newspaper" = or 1344 | { date } 1345 | { entrysubtype empty$ not 1346 | { type$ "article" = entrysubtype "newspaper" = and 1347 | { date } 1348 | { format.year } 1349 | if$ 1350 | } 1351 | { format.year } 1352 | if$ 1353 | } 1354 | if$ 1355 | } 1356 | { year empty$ not 1357 | { format.year } 1358 | { "" } 1359 | if$ 1360 | } 1361 | if$ 1362 | } 1363 | 1364 | FUNCTION {format.editdate} 1365 | { date empty$ not 1366 | { "\allowbreak(" date * ")" * } 1367 | { "" } 1368 | if$ 1369 | } 1370 | 1371 | FUNCTION {format.urldate} 1372 | { show.urldate show.url and entry.url empty$ not and 1373 | is.pure.electronic or 1374 | urldate empty$ not and 1375 | { "\allowbreak[" urldate * "]" * } 1376 | { "" } 1377 | if$ 1378 | } 1379 | 1380 | FUNCTION {hyphenate} 1381 | { 't := 1382 | "" 1383 | { t empty$ not } 1384 | { t #1 #1 substring$ "-" = 1385 | { wave.dash.in.pages 1386 | { "~" * } 1387 | { "-" * } 1388 | if$ 1389 | { t #1 #1 substring$ "-" = } 1390 | { t #2 global.max$ substring$ 't := } 1391 | while$ 1392 | } 1393 | { t #1 #1 substring$ * 1394 | t #2 global.max$ substring$ 't := 1395 | } 1396 | if$ 1397 | } 1398 | while$ 1399 | } 1400 | 1401 | FUNCTION {format.pages} 1402 | { pages empty$ 1403 | { "" } 1404 | { pages hyphenate } 1405 | if$ 1406 | } 1407 | 1408 | FUNCTION {format.extracted.pages} 1409 | { pages empty$ 1410 | { "" } 1411 | { pages 1412 | only.start.page 1413 | 'extract.before.dash 1414 | 'hyphenate 1415 | if$ 1416 | } 1417 | if$ 1418 | } 1419 | 1420 | FUNCTION {format.journal.volume} 1421 | { volume empty$ not 1422 | { bold.journal.volume 1423 | { "\textbf{" volume * "}" * } 1424 | { volume } 1425 | if$ 1426 | } 1427 | { "" } 1428 | if$ 1429 | } 1430 | 1431 | FUNCTION {format.journal.number} 1432 | { number empty$ not 1433 | { "\allowbreak (" number * ")" * } 1434 | { "" } 1435 | if$ 1436 | } 1437 | 1438 | FUNCTION {format.journal.pages} 1439 | { pages empty$ 1440 | { "" } 1441 | { format.extracted.pages } 1442 | if$ 1443 | } 1444 | 1445 | FUNCTION {format.periodical.year.volume.number} 1446 | { year empty$ not 1447 | { year extract.before.slash } 1448 | { "empty year in periodical " cite$ * warning$ } 1449 | if$ 1450 | volume empty$ not 1451 | { ", " * volume extract.before.dash * } 1452 | 'skip$ 1453 | if$ 1454 | number empty$ not 1455 | { "\allowbreak (" * number extract.before.dash * ")" * } 1456 | 'skip$ 1457 | if$ 1458 | "--" * 1459 | year extract.after.slash empty$ 1460 | volume extract.after.dash empty$ and 1461 | number extract.after.dash empty$ and not 1462 | { year extract.after.slash empty$ not 1463 | { year extract.after.slash * } 1464 | { year extract.before.slash * } 1465 | if$ 1466 | volume empty$ not 1467 | { ", " * volume extract.after.dash * } 1468 | 'skip$ 1469 | if$ 1470 | number empty$ not 1471 | { "\allowbreak (" * number extract.after.dash * ")" * } 1472 | 'skip$ 1473 | if$ 1474 | } 1475 | 'skip$ 1476 | if$ 1477 | } 1478 | 1479 | FUNCTION {check.url} 1480 | { url empty$ not 1481 | { "\url{" url * "}" * 'entry.url := 1482 | #1 'entry.is.electronic := 1483 | } 1484 | { howpublished empty$ not 1485 | { howpublished #1 #5 substring$ "\url{" = 1486 | { howpublished 'entry.url := 1487 | #1 'entry.is.electronic := 1488 | } 1489 | 'skip$ 1490 | if$ 1491 | } 1492 | { note empty$ not 1493 | { note #1 #5 substring$ "\url{" = 1494 | { note 'entry.url := 1495 | #1 'entry.is.electronic := 1496 | } 1497 | 'skip$ 1498 | if$ 1499 | } 1500 | 'skip$ 1501 | if$ 1502 | } 1503 | if$ 1504 | } 1505 | if$ 1506 | } 1507 | 1508 | FUNCTION {output.url} 1509 | { show.url is.pure.electronic or 1510 | entry.url empty$ not and 1511 | { new.block 1512 | entry.url output 1513 | } 1514 | 'skip$ 1515 | if$ 1516 | } 1517 | 1518 | FUNCTION {check.doi} 1519 | { doi empty$ not 1520 | { #1 'entry.is.electronic := } 1521 | 'skip$ 1522 | if$ 1523 | } 1524 | 1525 | FUNCTION {is.in.url} 1526 | { 's := 1527 | s empty$ 1528 | { #1 } 1529 | { entry.url empty$ 1530 | { #0 } 1531 | { s text.length$ 'len := 1532 | entry.url text.length$ 'charptr := 1533 | { entry.url charptr len substring$ s = not 1534 | charptr #0 > 1535 | and 1536 | } 1537 | { charptr #1 - 'charptr := } 1538 | while$ 1539 | charptr 1540 | } 1541 | if$ 1542 | } 1543 | if$ 1544 | } 1545 | 1546 | FUNCTION {format.doi} 1547 | { "" 1548 | doi empty$ not 1549 | { "" 's := 1550 | doi 't := 1551 | #0 'numnames := 1552 | { t empty$ not} 1553 | { t #1 #1 substring$ 'tmp.str := 1554 | tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or 1555 | { t #2 #1 substring$ empty$ 1556 | { s tmp.str * 's := } 1557 | 'skip$ 1558 | if$ 1559 | s empty$ s is.in.url or 1560 | 'skip$ 1561 | { numnames #1 + 'numnames := 1562 | numnames #1 > 1563 | { ", " * } 1564 | { "DOI: " * } 1565 | if$ 1566 | "\doi{" s * "}" * * 1567 | } 1568 | if$ 1569 | "" 's := 1570 | } 1571 | { s tmp.str * 's := } 1572 | if$ 1573 | t #2 global.max$ substring$ 't := 1574 | } 1575 | while$ 1576 | } 1577 | 'skip$ 1578 | if$ 1579 | } 1580 | 1581 | FUNCTION {output.doi} 1582 | { doi empty$ not show.doi and 1583 | show.english.translation entry.lang lang.zh = and not and 1584 | { new.block 1585 | format.doi output 1586 | } 1587 | 'skip$ 1588 | if$ 1589 | } 1590 | 1591 | FUNCTION {check.electronic} 1592 | { "" 'entry.url := 1593 | #0 'entry.is.electronic := 1594 | 'check.doi 1595 | 'skip$ 1596 | if$ 1597 | 'check.url 1598 | 'skip$ 1599 | if$ 1600 | medium empty$ not 1601 | { medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or 1602 | { #1 'entry.is.electronic := } 1603 | 'skip$ 1604 | if$ 1605 | } 1606 | 'skip$ 1607 | if$ 1608 | } 1609 | 1610 | FUNCTION {format.eprint} 1611 | { archivePrefix empty$ not 1612 | { archivePrefix } 1613 | { eprinttype empty$ not 1614 | { archivePrefix } 1615 | { "" } 1616 | if$ 1617 | } 1618 | if$ 1619 | 's := 1620 | s empty$ not 1621 | { s ": \eprint{" * 1622 | url empty$ not 1623 | { url } 1624 | { "https://" s "l" change.case$ * ".org/abs/" * eprint * } 1625 | if$ 1626 | * "}{" * 1627 | eprint * "}" * 1628 | } 1629 | { eprint } 1630 | if$ 1631 | } 1632 | 1633 | FUNCTION {output.eprint} 1634 | { show.preprint eprint empty$ not and 1635 | { new.block 1636 | format.eprint output 1637 | } 1638 | 'skip$ 1639 | if$ 1640 | } 1641 | 1642 | FUNCTION {format.note} 1643 | { note empty$ not show.note and 1644 | { note } 1645 | { "" } 1646 | if$ 1647 | } 1648 | 1649 | FUNCTION {output.translation} 1650 | { show.english.translation entry.lang lang.zh = and 1651 | { translation empty$ not 1652 | { translation } 1653 | { "[English translation missing!]" } 1654 | if$ 1655 | " (in Chinese)" * output 1656 | write$ 1657 | format.doi duplicate$ empty$ not 1658 | { newline$ 1659 | write$ 1660 | } 1661 | 'pop$ 1662 | if$ 1663 | " \\" write$ 1664 | newline$ 1665 | "(" write$ 1666 | "" 1667 | before.all 'output.state := 1668 | } 1669 | 'skip$ 1670 | if$ 1671 | } 1672 | 1673 | FUNCTION {empty.misc.check} 1674 | { author empty$ title empty$ 1675 | year empty$ 1676 | and and 1677 | key empty$ not and 1678 | { "all relevant fields are empty in " cite$ * warning$ } 1679 | 'skip$ 1680 | if$ 1681 | } 1682 | 1683 | FUNCTION {monograph} 1684 | { output.bibitem 1685 | output.translation 1686 | author empty$ not 1687 | { format.authors } 1688 | { editor empty$ not 1689 | { format.editors } 1690 | { "empty author and editor in " cite$ * warning$ 1691 | "" 1692 | } 1693 | if$ 1694 | } 1695 | if$ 1696 | output 1697 | year.after.author 1698 | { period.after.author 1699 | 'new.sentence 1700 | 'skip$ 1701 | if$ 1702 | format.year "year" output.check 1703 | } 1704 | 'skip$ 1705 | if$ 1706 | new.block 1707 | format.series.vol.num.title "title" output.check 1708 | "M" set.entry.mark 1709 | format.mark "" output.after 1710 | new.block 1711 | format.translators output 1712 | new.sentence 1713 | format.edition output 1714 | new.block 1715 | format.address.publisher output 1716 | year.after.author not 1717 | { format.year "year" output.check } 1718 | 'skip$ 1719 | if$ 1720 | format.pages bbl.pages.colon output.after 1721 | format.urldate "" output.after 1722 | output.url 1723 | output.doi 1724 | new.block 1725 | format.note output 1726 | fin.entry 1727 | } 1728 | 1729 | FUNCTION {incollection} 1730 | { output.bibitem 1731 | output.translation 1732 | format.authors output 1733 | author format.key output 1734 | year.after.author 1735 | { period.after.author 1736 | 'new.sentence 1737 | 'skip$ 1738 | if$ 1739 | format.year "year" output.check 1740 | } 1741 | 'skip$ 1742 | if$ 1743 | new.block 1744 | format.title "title" output.check 1745 | "M" set.entry.mark 1746 | format.mark "" output.after 1747 | new.block 1748 | format.translators output 1749 | new.slash 1750 | format.editors output 1751 | new.block 1752 | format.series.vol.num.booktitle "booktitle" output.check 1753 | new.block 1754 | format.edition output 1755 | new.block 1756 | format.address.publisher output 1757 | year.after.author not 1758 | { format.year "year" output.check } 1759 | 'skip$ 1760 | if$ 1761 | format.extracted.pages bbl.pages.colon output.after 1762 | format.urldate "" output.after 1763 | output.url 1764 | output.doi 1765 | new.block 1766 | format.note output 1767 | fin.entry 1768 | } 1769 | 1770 | FUNCTION {periodical} 1771 | { output.bibitem 1772 | output.translation 1773 | format.authors output 1774 | author format.key output 1775 | year.after.author 1776 | { period.after.author 1777 | 'new.sentence 1778 | 'skip$ 1779 | if$ 1780 | format.year "year" output.check 1781 | } 1782 | 'skip$ 1783 | if$ 1784 | new.block 1785 | format.title "title" output.check 1786 | "J" set.entry.mark 1787 | format.mark "" output.after 1788 | new.block 1789 | format.periodical.year.volume.number output 1790 | new.block 1791 | format.address.publisher output 1792 | year.after.author not 1793 | { format.periodical.year "year" output.check } 1794 | 'skip$ 1795 | if$ 1796 | format.urldate "" output.after 1797 | output.url 1798 | output.doi 1799 | new.block 1800 | format.note output 1801 | fin.entry 1802 | } 1803 | 1804 | FUNCTION {journal.article} 1805 | { output.bibitem 1806 | output.translation 1807 | format.authors output 1808 | author format.key output 1809 | year.after.author 1810 | { period.after.author 1811 | 'new.sentence 1812 | 'skip$ 1813 | if$ 1814 | format.year "year" output.check 1815 | } 1816 | 'skip$ 1817 | if$ 1818 | new.block 1819 | title.in.journal 1820 | { format.title "title" output.check 1821 | entrysubtype empty$ not 1822 | { 1823 | entrysubtype "newspaper" = 1824 | { "N" set.entry.mark } 1825 | { "J" set.entry.mark } 1826 | if$ 1827 | } 1828 | { "J" set.entry.mark } 1829 | if$ 1830 | format.mark "" output.after 1831 | new.block 1832 | } 1833 | 'skip$ 1834 | if$ 1835 | format.journal "journal" output.check 1836 | year.after.author not 1837 | { format.date "year" output.check } 1838 | 'skip$ 1839 | if$ 1840 | format.journal.volume output 1841 | format.journal.number "" output.after 1842 | format.journal.pages bbl.pages.colon output.after 1843 | format.urldate "" output.after 1844 | output.url 1845 | output.doi 1846 | new.block 1847 | format.note output 1848 | fin.entry 1849 | } 1850 | 1851 | FUNCTION {patent} 1852 | { output.bibitem 1853 | output.translation 1854 | format.authors output 1855 | author format.key output 1856 | year.after.author 1857 | { period.after.author 1858 | 'new.sentence 1859 | 'skip$ 1860 | if$ 1861 | format.year "year" output.check 1862 | } 1863 | 'skip$ 1864 | if$ 1865 | new.block 1866 | format.title "title" output.check 1867 | "P" set.entry.mark 1868 | format.mark "" output.after 1869 | new.block 1870 | format.date "year" output.check 1871 | format.urldate "" output.after 1872 | output.url 1873 | output.doi 1874 | new.block 1875 | format.note output 1876 | fin.entry 1877 | } 1878 | 1879 | FUNCTION {electronic} 1880 | { #1 #1 check.electronic 1881 | #1 'entry.is.electronic := 1882 | #1 'is.pure.electronic := 1883 | output.bibitem 1884 | output.translation 1885 | format.authors output 1886 | author format.key output 1887 | year.after.author 1888 | { period.after.author 1889 | 'new.sentence 1890 | 'skip$ 1891 | if$ 1892 | format.year "year" output.check 1893 | } 1894 | 'skip$ 1895 | if$ 1896 | new.block 1897 | format.series.vol.num.title "title" output.check 1898 | "EB" set.entry.mark 1899 | format.mark "" output.after 1900 | new.block 1901 | format.address.publisher output 1902 | year.after.author not 1903 | { date empty$ 1904 | { format.date output } 1905 | 'skip$ 1906 | if$ 1907 | } 1908 | 'skip$ 1909 | if$ 1910 | format.pages bbl.pages.colon output.after 1911 | format.editdate "" output.after 1912 | format.urldate "" output.after 1913 | output.url 1914 | output.doi 1915 | new.block 1916 | format.note output 1917 | fin.entry 1918 | } 1919 | 1920 | FUNCTION {preprint} 1921 | { output.bibitem 1922 | output.translation 1923 | author empty$ not 1924 | { format.authors } 1925 | { editor empty$ not 1926 | { format.editors } 1927 | { "empty author and editor in " cite$ * warning$ 1928 | "" 1929 | } 1930 | if$ 1931 | } 1932 | if$ 1933 | output 1934 | year.after.author 1935 | { period.after.author 1936 | 'new.sentence 1937 | 'skip$ 1938 | if$ 1939 | format.year "year" output.check 1940 | } 1941 | 'skip$ 1942 | if$ 1943 | new.block 1944 | title.in.journal 1945 | { format.series.vol.num.title "title" output.check 1946 | "A" set.entry.mark 1947 | format.mark "" output.after 1948 | new.block 1949 | } 1950 | 'skip$ 1951 | if$ 1952 | format.translators output 1953 | new.sentence 1954 | format.edition output 1955 | new.block 1956 | year.after.author not 1957 | { date empty$ 1958 | { format.date output } 1959 | 'skip$ 1960 | if$ 1961 | } 1962 | 'skip$ 1963 | if$ 1964 | format.pages bbl.pages.colon output.after 1965 | format.editdate "" output.after 1966 | format.urldate "" output.after 1967 | output.eprint 1968 | output.url 1969 | new.block 1970 | format.note output 1971 | fin.entry 1972 | } 1973 | 1974 | FUNCTION {misc} 1975 | { get.journal.title 1976 | duplicate$ empty$ not 1977 | { check.arxiv.preprint 1978 | 'preprint 1979 | 'journal.article 1980 | if$ 1981 | } 1982 | { pop$ 1983 | booktitle empty$ not 1984 | 'incollection 1985 | { publisher empty$ not 1986 | 'monograph 1987 | { eprint empty$ not archivePrefix empty$ not or 1988 | 'preprint 1989 | { entry.is.electronic 1990 | 'electronic 1991 | { 1992 | "Z" set.entry.mark 1993 | monograph 1994 | } 1995 | if$ 1996 | } 1997 | if$ 1998 | } 1999 | if$ 2000 | } 2001 | if$ 2002 | } 2003 | if$ 2004 | empty.misc.check 2005 | } 2006 | 2007 | FUNCTION {archive} 2008 | { "A" set.entry.mark 2009 | misc 2010 | } 2011 | 2012 | FUNCTION {article} { misc } 2013 | 2014 | FUNCTION {book} { monograph } 2015 | 2016 | FUNCTION {booklet} { book } 2017 | 2018 | FUNCTION {collection} 2019 | { "G" set.entry.mark 2020 | monograph 2021 | } 2022 | 2023 | FUNCTION {database} 2024 | { "DB" set.entry.mark 2025 | electronic 2026 | } 2027 | 2028 | FUNCTION {dataset} 2029 | { "DS" set.entry.mark 2030 | electronic 2031 | } 2032 | 2033 | FUNCTION {inbook} { book } 2034 | 2035 | FUNCTION {inproceedings} 2036 | { "C" set.entry.mark 2037 | incollection 2038 | } 2039 | 2040 | FUNCTION {conference} { inproceedings } 2041 | 2042 | FUNCTION {legislation} { archive } 2043 | 2044 | FUNCTION {map} 2045 | { "CM" set.entry.mark 2046 | misc 2047 | } 2048 | 2049 | FUNCTION {manual} { monograph } 2050 | 2051 | FUNCTION {mastersthesis} 2052 | { "D" set.entry.mark 2053 | monograph 2054 | } 2055 | 2056 | FUNCTION {newspaper} 2057 | { "N" set.entry.mark 2058 | article 2059 | } 2060 | 2061 | FUNCTION {online} 2062 | { "EB" set.entry.mark 2063 | electronic 2064 | } 2065 | 2066 | FUNCTION {phdthesis} { mastersthesis } 2067 | 2068 | FUNCTION {proceedings} 2069 | { "C" set.entry.mark 2070 | monograph 2071 | } 2072 | 2073 | FUNCTION {software} 2074 | { "CP" set.entry.mark 2075 | electronic 2076 | } 2077 | 2078 | FUNCTION {standard} 2079 | { "S" set.entry.mark 2080 | misc 2081 | } 2082 | 2083 | FUNCTION {techreport} 2084 | { "R" set.entry.mark 2085 | misc 2086 | } 2087 | 2088 | FUNCTION {unpublished} { misc } 2089 | 2090 | FUNCTION {default.type} { misc } 2091 | 2092 | MACRO {jan} {"January"} 2093 | 2094 | MACRO {feb} {"February"} 2095 | 2096 | MACRO {mar} {"March"} 2097 | 2098 | MACRO {apr} {"April"} 2099 | 2100 | MACRO {may} {"May"} 2101 | 2102 | MACRO {jun} {"June"} 2103 | 2104 | MACRO {jul} {"July"} 2105 | 2106 | MACRO {aug} {"August"} 2107 | 2108 | MACRO {sep} {"September"} 2109 | 2110 | MACRO {oct} {"October"} 2111 | 2112 | MACRO {nov} {"November"} 2113 | 2114 | MACRO {dec} {"December"} 2115 | 2116 | MACRO {acmcs} {"ACM Computing Surveys"} 2117 | 2118 | MACRO {acta} {"Acta Informatica"} 2119 | 2120 | MACRO {cacm} {"Communications of the ACM"} 2121 | 2122 | MACRO {ibmjrd} {"IBM Journal of Research and Development"} 2123 | 2124 | MACRO {ibmsj} {"IBM Systems Journal"} 2125 | 2126 | MACRO {ieeese} {"IEEE Transactions on Software Engineering"} 2127 | 2128 | MACRO {ieeetc} {"IEEE Transactions on Computers"} 2129 | 2130 | MACRO {ieeetcad} 2131 | {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} 2132 | 2133 | MACRO {ipl} {"Information Processing Letters"} 2134 | 2135 | MACRO {jacm} {"Journal of the ACM"} 2136 | 2137 | MACRO {jcss} {"Journal of Computer and System Sciences"} 2138 | 2139 | MACRO {scp} {"Science of Computer Programming"} 2140 | 2141 | MACRO {sicomp} {"SIAM Journal on Computing"} 2142 | 2143 | MACRO {tocs} {"ACM Transactions on Computer Systems"} 2144 | 2145 | MACRO {tods} {"ACM Transactions on Database Systems"} 2146 | 2147 | MACRO {tog} {"ACM Transactions on Graphics"} 2148 | 2149 | MACRO {toms} {"ACM Transactions on Mathematical Software"} 2150 | 2151 | MACRO {toois} {"ACM Transactions on Office Information Systems"} 2152 | 2153 | MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} 2154 | 2155 | MACRO {tcs} {"Theoretical Computer Science"} 2156 | 2157 | FUNCTION {sortify} 2158 | { purify$ 2159 | "l" change.case$ 2160 | } 2161 | 2162 | FUNCTION {chop.word} 2163 | { 's := 2164 | 'len := 2165 | s #1 len substring$ = 2166 | { s len #1 + global.max$ substring$ } 2167 | 's 2168 | if$ 2169 | } 2170 | 2171 | FUNCTION {format.lab.name} 2172 | { "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 2173 | t "others" = 2174 | { citation.et.al } 2175 | { t get.str.lang 'name.lang := 2176 | name.lang lang.zh = name.lang lang.ja = or 2177 | { t #1 "{ll}{ff}" format.name$ } 2178 | { t #1 "{vv~}{ll}" format.name$ } 2179 | if$ 2180 | } 2181 | if$ 2182 | } 2183 | 2184 | FUNCTION {format.lab.names} 2185 | { 's := 2186 | s #1 format.lab.name 'short.label := 2187 | #1 'nameptr := 2188 | s num.names$ 'numnames := 2189 | "" 2190 | numnames 'namesleft := 2191 | { namesleft #0 > } 2192 | { s nameptr format.lab.name citation.et.al = 2193 | numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or 2194 | { bbl.space * 2195 | citation.et.al * 2196 | #1 'namesleft := 2197 | } 2198 | { nameptr #1 > 2199 | { namesleft #1 = citation.and "" = not and 2200 | { citation.and * } 2201 | { ", " * } 2202 | if$ 2203 | } 2204 | 'skip$ 2205 | if$ 2206 | s nameptr format.lab.name * 2207 | } 2208 | if$ 2209 | nameptr #1 + 'nameptr := 2210 | namesleft #1 - 'namesleft := 2211 | } 2212 | while$ 2213 | } 2214 | 2215 | FUNCTION {author.key.label} 2216 | { author empty$ 2217 | { key empty$ 2218 | { cite$ #1 #3 substring$ } 2219 | 'key 2220 | if$ 2221 | } 2222 | { author format.lab.names } 2223 | if$ 2224 | } 2225 | 2226 | FUNCTION {author.editor.key.label} 2227 | { author empty$ 2228 | { editor empty$ 2229 | { key empty$ 2230 | { cite$ #1 #3 substring$ } 2231 | 'key 2232 | if$ 2233 | } 2234 | { editor format.lab.names } 2235 | if$ 2236 | } 2237 | { author format.lab.names } 2238 | if$ 2239 | } 2240 | 2241 | FUNCTION {author.key.organization.label} 2242 | { author empty$ 2243 | { key empty$ 2244 | { organization empty$ 2245 | { cite$ #1 #3 substring$ } 2246 | { "The " #4 organization chop.word #3 text.prefix$ } 2247 | if$ 2248 | } 2249 | 'key 2250 | if$ 2251 | } 2252 | { author format.lab.names } 2253 | if$ 2254 | } 2255 | 2256 | FUNCTION {editor.key.organization.label} 2257 | { editor empty$ 2258 | { key empty$ 2259 | { organization empty$ 2260 | { cite$ #1 #3 substring$ } 2261 | { "The " #4 organization chop.word #3 text.prefix$ } 2262 | if$ 2263 | } 2264 | 'key 2265 | if$ 2266 | } 2267 | { editor format.lab.names } 2268 | if$ 2269 | } 2270 | 2271 | FUNCTION {calc.short.authors} 2272 | { "" 'short.label := 2273 | type$ "book" = 2274 | type$ "inbook" = 2275 | or 2276 | 'author.editor.key.label 2277 | { type$ "collection" = 2278 | type$ "proceedings" = 2279 | or 2280 | { editor empty$ not 2281 | 'editor.key.organization.label 2282 | 'author.key.organization.label 2283 | if$ 2284 | } 2285 | 'author.key.label 2286 | if$ 2287 | } 2288 | if$ 2289 | 'short.list := 2290 | short.label empty$ 2291 | { short.list 'short.label := } 2292 | 'skip$ 2293 | if$ 2294 | } 2295 | 2296 | FUNCTION {calc.label} 2297 | { calc.short.authors 2298 | short.list "]" contains 2299 | { "{" short.list * "}" * } 2300 | { short.list } 2301 | if$ 2302 | "(" 2303 | * 2304 | format.year duplicate$ empty$ 2305 | short.list key field.or.null = or 2306 | { pop$ "" } 2307 | 'skip$ 2308 | if$ 2309 | duplicate$ "]" contains 2310 | { "{" swap$ * "}" * } 2311 | 'skip$ 2312 | if$ 2313 | * 2314 | 'label := 2315 | short.label 2316 | "(" 2317 | * 2318 | format.year duplicate$ empty$ 2319 | short.list key field.or.null = or 2320 | { pop$ "" } 2321 | 'skip$ 2322 | if$ 2323 | * 2324 | 'short.label := 2325 | } 2326 | 2327 | INTEGERS { seq.num } 2328 | 2329 | FUNCTION {init.seq} 2330 | { #0 'seq.num :=} 2331 | 2332 | FUNCTION {int.to.fix} 2333 | { "000000000" swap$ int.to.str$ * 2334 | #-1 #10 substring$ 2335 | } 2336 | 2337 | FUNCTION {presort} 2338 | { set.entry.lang 2339 | set.entry.numbered 2340 | show.url show.doi check.electronic 2341 | #0 'is.pure.electronic := 2342 | calc.label 2343 | label sortify 2344 | " " 2345 | * 2346 | seq.num #1 + 'seq.num := 2347 | seq.num int.to.fix 2348 | 'sort.label := 2349 | sort.label * 2350 | #1 entry.max$ substring$ 2351 | 'sort.key$ := 2352 | } 2353 | 2354 | STRINGS { longest.label last.label next.extra last.extra.label } 2355 | 2356 | INTEGERS { longest.label.width number.label } 2357 | 2358 | FUNCTION {initialize.longest.label} 2359 | { "" 'longest.label := 2360 | #0 int.to.chr$ 'last.label := 2361 | "" 'next.extra := 2362 | #0 'longest.label.width := 2363 | #0 'number.label := 2364 | "" 'last.extra.label := 2365 | } 2366 | 2367 | FUNCTION {forward.pass} 2368 | { 2369 | number.label #1 + 'number.label := 2370 | } 2371 | 2372 | FUNCTION {reverse.pass} 2373 | { 2374 | label extra.label * 'label := 2375 | } 2376 | 2377 | FUNCTION {bib.sort.order} 2378 | { sort.label 'sort.key$ := 2379 | } 2380 | 2381 | FUNCTION {begin.bib} 2382 | { preamble$ empty$ 2383 | 'skip$ 2384 | { preamble$ write$ newline$ } 2385 | if$ 2386 | "\begin{thebibliography}{" number.label int.to.str$ * "}" * 2387 | write$ newline$ 2388 | terms.in.macro 2389 | { "\providecommand{\biband}{和}" 2390 | write$ newline$ 2391 | "\providecommand{\bibetal}{等}" 2392 | write$ newline$ 2393 | } 2394 | 'skip$ 2395 | if$ 2396 | "\providecommand{\natexlab}[1]{#1}" 2397 | write$ newline$ 2398 | "\providecommand{\url}[1]{#1}" 2399 | write$ newline$ 2400 | "\expandafter\ifx\csname urlstyle\endcsname\relax\else" 2401 | write$ newline$ 2402 | " \urlstyle{same}\fi" 2403 | write$ newline$ 2404 | "\expandafter\ifx\csname href\endcsname\relax" 2405 | write$ newline$ 2406 | " \DeclareUrlCommand\doi{\urlstyle{rm}}" 2407 | write$ newline$ 2408 | " \def\eprint#1#2{#2}" 2409 | write$ newline$ 2410 | "\else" 2411 | write$ newline$ 2412 | " \def\doi#1{\href{https://doi.org/#1}{\nolinkurl{#1}}}" 2413 | write$ newline$ 2414 | " \let\eprint\href" 2415 | write$ newline$ 2416 | "\fi" 2417 | write$ newline$ 2418 | } 2419 | 2420 | FUNCTION {end.bib} 2421 | { newline$ 2422 | "\end{thebibliography}" write$ newline$ 2423 | } 2424 | 2425 | READ 2426 | 2427 | EXECUTE {init.state.consts} 2428 | 2429 | EXECUTE {load.config} 2430 | 2431 | EXECUTE {init.seq} 2432 | 2433 | ITERATE {presort} 2434 | 2435 | SORT 2436 | 2437 | EXECUTE {initialize.longest.label} 2438 | 2439 | ITERATE {forward.pass} 2440 | 2441 | REVERSE {reverse.pass} 2442 | 2443 | ITERATE {bib.sort.order} 2444 | 2445 | SORT 2446 | 2447 | EXECUTE {begin.bib} 2448 | 2449 | ITERATE {call.type$} 2450 | 2451 | EXECUTE {end.bib} 2452 | -------------------------------------------------------------------------------- /LaTex_Template/gbt7714-author-year.bst: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `gbt7714-author-year.bst', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% gbt7714.dtx (with options: `2015,author-year') 8 | %% ------------------------------------------------------------------- 9 | %% GB/T 7714 BibTeX Style 10 | %% https://github.com/zepinglee/gbt7714-bibtex-style 11 | %% Version: 2022/10/03 v2.1.5 12 | %% ------------------------------------------------------------------- 13 | %% Copyright (C) 2016--2022 by Zeping Lee 14 | %% ------------------------------------------------------------------- 15 | %% This file may be distributed and/or modified under the 16 | %% conditions of the LaTeX Project Public License, either version 1.3c 17 | %% of this license or (at your option) any later version. 18 | %% The latest version of this license is in 19 | %% https://www.latex-project.org/lppl.txt 20 | %% and version 1.3c or later is part of all distributions of LaTeX 21 | %% version 2008 or later. 22 | %% ------------------------------------------------------------------- 23 | INTEGERS { 24 | citation.et.al.min 25 | citation.et.al.use.first 26 | bibliography.et.al.min 27 | bibliography.et.al.use.first 28 | uppercase.name 29 | terms.in.macro 30 | year.after.author 31 | period.after.author 32 | italic.book.title 33 | sentence.case.title 34 | link.title 35 | title.in.journal 36 | show.patent.country 37 | show.mark 38 | space.before.mark 39 | show.medium.type 40 | short.journal 41 | italic.journal 42 | bold.journal.volume 43 | show.missing.address.publisher 44 | space.before.pages 45 | only.start.page 46 | wave.dash.in.pages 47 | show.urldate 48 | show.url 49 | show.doi 50 | show.preprint 51 | show.note 52 | show.english.translation 53 | end.with.period 54 | lang.zh.order 55 | lang.ja.order 56 | lang.en.order 57 | lang.ru.order 58 | lang.other.order 59 | } 60 | 61 | STRINGS { 62 | component.part.label 63 | } 64 | 65 | FUNCTION {load.config} 66 | { 67 | #2 'citation.et.al.min := 68 | #1 'citation.et.al.use.first := 69 | #4 'bibliography.et.al.min := 70 | #3 'bibliography.et.al.use.first := 71 | #1 'uppercase.name := 72 | #0 'terms.in.macro := 73 | #1 'year.after.author := 74 | #0 'period.after.author := 75 | #0 'italic.book.title := 76 | #1 'sentence.case.title := 77 | #0 'link.title := 78 | #1 'title.in.journal := 79 | #0 'show.patent.country := 80 | #1 'show.mark := 81 | #0 'space.before.mark := 82 | #1 'show.medium.type := 83 | "slash" 'component.part.label := 84 | #0 'short.journal := 85 | #0 'italic.journal := 86 | #0 'bold.journal.volume := 87 | #0 'show.missing.address.publisher := 88 | #1 'space.before.pages := 89 | #0 'only.start.page := 90 | #0 'wave.dash.in.pages := 91 | #1 'show.urldate := 92 | #1 'show.url := 93 | #1 'show.doi := 94 | #1 'show.preprint := 95 | #0 'show.note := 96 | #0 'show.english.translation := 97 | #1 'end.with.period := 98 | #1 'lang.zh.order := 99 | #2 'lang.ja.order := 100 | #3 'lang.en.order := 101 | #4 'lang.ru.order := 102 | #5 'lang.other.order := 103 | } 104 | 105 | ENTRY 106 | { address 107 | archivePrefix 108 | author 109 | booktitle 110 | date 111 | doi 112 | edition 113 | editor 114 | eprint 115 | eprinttype 116 | entrysubtype 117 | howpublished 118 | institution 119 | journal 120 | journaltitle 121 | key 122 | langid 123 | language 124 | location 125 | mark 126 | medium 127 | note 128 | number 129 | organization 130 | pages 131 | publisher 132 | school 133 | series 134 | shortjournal 135 | title 136 | translation 137 | translator 138 | url 139 | urldate 140 | volume 141 | year 142 | } 143 | { entry.lang entry.is.electronic is.pure.electronic entry.numbered } 144 | { label extra.label sort.label short.label short.list entry.mark entry.url } 145 | 146 | INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } 147 | 148 | INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other } 149 | 150 | INTEGERS { charptr len } 151 | 152 | FUNCTION {init.state.consts} 153 | { #0 'before.all := 154 | #1 'mid.sentence := 155 | #2 'after.sentence := 156 | #3 'after.block := 157 | #4 'after.slash := 158 | #3 'lang.zh := 159 | #4 'lang.ja := 160 | #1 'lang.en := 161 | #2 'lang.ru := 162 | #0 'lang.other := 163 | } 164 | 165 | FUNCTION {bbl.anonymous} 166 | { entry.lang lang.zh = 167 | { "佚名" } 168 | { "Anon" } 169 | if$ 170 | } 171 | 172 | FUNCTION {bbl.space} 173 | { entry.lang lang.zh = 174 | { "\ " } 175 | { " " } 176 | if$ 177 | } 178 | 179 | FUNCTION {bbl.and} 180 | { "" } 181 | 182 | FUNCTION {bbl.et.al} 183 | { entry.lang lang.zh = 184 | { "等" } 185 | { entry.lang lang.ja = 186 | { "他" } 187 | { entry.lang lang.ru = 188 | { "идр" } 189 | { "et~al." } 190 | if$ 191 | } 192 | if$ 193 | } 194 | if$ 195 | } 196 | 197 | FUNCTION {citation.and} 198 | { terms.in.macro 199 | { "{\biband}" } 200 | 'bbl.and 201 | if$ 202 | } 203 | 204 | FUNCTION {citation.et.al} 205 | { terms.in.macro 206 | { "{\bibetal}" } 207 | 'bbl.et.al 208 | if$ 209 | } 210 | 211 | FUNCTION {bbl.colon} { ": " } 212 | 213 | FUNCTION {bbl.pages.colon} 214 | { space.before.pages 215 | { ": " } 216 | { ":\allowbreak " } 217 | if$ 218 | } 219 | 220 | FUNCTION {bbl.wide.space} { "\quad " } 221 | 222 | FUNCTION {bbl.slash} { "//\allowbreak " } 223 | 224 | FUNCTION {bbl.sine.loco} 225 | { entry.lang lang.zh = 226 | { "[出版地不详]" } 227 | { "[S.l.]" } 228 | if$ 229 | } 230 | 231 | FUNCTION {bbl.sine.nomine} 232 | { entry.lang lang.zh = 233 | { "[出版者不详]" } 234 | { "[s.n.]" } 235 | if$ 236 | } 237 | 238 | FUNCTION {bbl.sine.loco.sine.nomine} 239 | { entry.lang lang.zh = 240 | { "[出版地不详: 出版者不详]" } 241 | { "[S.l.: s.n.]" } 242 | if$ 243 | } 244 | 245 | FUNCTION {not} 246 | { { #0 } 247 | { #1 } 248 | if$ 249 | } 250 | 251 | FUNCTION {and} 252 | { 'skip$ 253 | { pop$ #0 } 254 | if$ 255 | } 256 | 257 | FUNCTION {or} 258 | { { pop$ #1 } 259 | 'skip$ 260 | if$ 261 | } 262 | 263 | STRINGS { x y } 264 | 265 | FUNCTION {contains} 266 | { 'y := 267 | 'x := 268 | y text.length$ 'len := 269 | x text.length$ len - #1 + 'charptr := 270 | { charptr #0 > 271 | x charptr len substring$ y = not 272 | and 273 | } 274 | { charptr #1 - 'charptr := } 275 | while$ 276 | charptr #0 > 277 | } 278 | 279 | STRINGS { s t } 280 | 281 | FUNCTION {output.nonnull} 282 | { 's := 283 | output.state mid.sentence = 284 | { ", " * write$ } 285 | { output.state after.block = 286 | { add.period$ write$ 287 | newline$ 288 | "\newblock " write$ 289 | } 290 | { output.state before.all = 291 | 'write$ 292 | { output.state after.slash = 293 | { bbl.slash * write$ 294 | newline$ 295 | } 296 | { add.period$ " " * write$ } 297 | if$ 298 | } 299 | if$ 300 | } 301 | if$ 302 | mid.sentence 'output.state := 303 | } 304 | if$ 305 | s 306 | } 307 | 308 | FUNCTION {output} 309 | { duplicate$ empty$ 310 | 'pop$ 311 | 'output.nonnull 312 | if$ 313 | } 314 | 315 | FUNCTION {output.after} 316 | { 't := 317 | duplicate$ empty$ 318 | 'pop$ 319 | { 's := 320 | output.state mid.sentence = 321 | { t * write$ } 322 | { output.state after.block = 323 | { add.period$ write$ 324 | newline$ 325 | "\newblock " write$ 326 | } 327 | { output.state before.all = 328 | 'write$ 329 | { output.state after.slash = 330 | { bbl.slash * write$ } 331 | { add.period$ " " * write$ } 332 | if$ 333 | } 334 | if$ 335 | } 336 | if$ 337 | mid.sentence 'output.state := 338 | } 339 | if$ 340 | s 341 | } 342 | if$ 343 | } 344 | 345 | FUNCTION {output.check} 346 | { 't := 347 | duplicate$ empty$ 348 | { pop$ "empty " t * " in " * cite$ * warning$ } 349 | 'output.nonnull 350 | if$ 351 | } 352 | 353 | FUNCTION {fin.entry} 354 | { end.with.period 355 | 'add.period$ 356 | 'skip$ 357 | if$ 358 | write$ 359 | show.english.translation entry.lang lang.zh = and 360 | { ")" 361 | write$ 362 | } 363 | 'skip$ 364 | if$ 365 | newline$ 366 | } 367 | 368 | FUNCTION {new.block} 369 | { output.state before.all = 370 | 'skip$ 371 | { output.state after.slash = 372 | 'skip$ 373 | { after.block 'output.state := } 374 | if$ 375 | } 376 | if$ 377 | } 378 | 379 | FUNCTION {new.sentence} 380 | { output.state after.block = 381 | 'skip$ 382 | { output.state before.all = 383 | 'skip$ 384 | { output.state after.slash = 385 | 'skip$ 386 | { after.sentence 'output.state := } 387 | if$ 388 | } 389 | if$ 390 | } 391 | if$ 392 | } 393 | 394 | FUNCTION {new.slash} 395 | { output.state before.all = 396 | 'skip$ 397 | { component.part.label "slash" = 398 | { after.slash 'output.state := } 399 | { new.block 400 | component.part.label "in" = 401 | { entry.lang lang.en = 402 | { "In: " output 403 | write$ 404 | "" 405 | before.all 'output.state := 406 | } 407 | 'skip$ 408 | if$ 409 | } 410 | 'skip$ 411 | if$ 412 | } 413 | if$ 414 | } 415 | if$ 416 | } 417 | 418 | FUNCTION {new.block.checka} 419 | { empty$ 420 | 'skip$ 421 | 'new.block 422 | if$ 423 | } 424 | 425 | FUNCTION {new.block.checkb} 426 | { empty$ 427 | swap$ empty$ 428 | and 429 | 'skip$ 430 | 'new.block 431 | if$ 432 | } 433 | 434 | FUNCTION {new.sentence.checka} 435 | { empty$ 436 | 'skip$ 437 | 'new.sentence 438 | if$ 439 | } 440 | 441 | FUNCTION {new.sentence.checkb} 442 | { empty$ 443 | swap$ empty$ 444 | and 445 | 'skip$ 446 | 'new.sentence 447 | if$ 448 | } 449 | 450 | FUNCTION {field.or.null} 451 | { duplicate$ empty$ 452 | { pop$ "" } 453 | 'skip$ 454 | if$ 455 | } 456 | 457 | FUNCTION {emphasize} 458 | { duplicate$ empty$ 459 | { pop$ "" } 460 | { "\emph{" swap$ * "}" * } 461 | if$ 462 | } 463 | 464 | FUNCTION {format.btitle} 465 | { italic.book.title 466 | entry.lang lang.en = and 467 | 'emphasize 468 | 'skip$ 469 | if$ 470 | } 471 | 472 | INTEGERS { byte second.byte } 473 | 474 | INTEGERS { char.lang tmp.lang } 475 | 476 | STRINGS { tmp.str } 477 | 478 | FUNCTION {get.str.lang} 479 | { 'tmp.str := 480 | lang.other 'tmp.lang := 481 | #1 'charptr := 482 | tmp.str text.length$ #1 + 'len := 483 | { charptr len < } 484 | { tmp.str charptr #1 substring$ chr.to.int$ 'byte := 485 | byte #128 < 486 | { charptr #1 + 'charptr := 487 | byte #64 > byte #91 < and byte #96 > byte #123 < and or 488 | { lang.en 'char.lang := } 489 | { lang.other 'char.lang := } 490 | if$ 491 | } 492 | { tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte := 493 | byte #224 < 494 | { charptr #2 + 'charptr := 495 | byte #207 > byte #212 < and 496 | byte #212 = second.byte #176 < and or 497 | { lang.ru 'char.lang := } 498 | { lang.other 'char.lang := } 499 | if$ 500 | } 501 | { byte #240 < 502 | { charptr #3 + 'charptr := 503 | byte #227 > byte #234 < and 504 | { lang.zh 'char.lang := } 505 | { byte #227 = 506 | { second.byte #143 > 507 | { lang.zh 'char.lang := } 508 | { second.byte #128 > second.byte #132 < and 509 | { lang.ja 'char.lang := } 510 | { lang.other 'char.lang := } 511 | if$ 512 | } 513 | if$ 514 | } 515 | { byte #239 = 516 | second.byte #163 > second.byte #172 < and and 517 | { lang.zh 'char.lang := } 518 | { lang.other 'char.lang := } 519 | if$ 520 | } 521 | if$ 522 | } 523 | if$ 524 | } 525 | { charptr #4 + 'charptr := 526 | byte #240 = second.byte #159 > and 527 | { lang.zh 'char.lang := } 528 | { lang.other 'char.lang := } 529 | if$ 530 | } 531 | if$ 532 | } 533 | if$ 534 | } 535 | if$ 536 | char.lang tmp.lang > 537 | { char.lang 'tmp.lang := } 538 | 'skip$ 539 | if$ 540 | } 541 | while$ 542 | tmp.lang 543 | } 544 | 545 | FUNCTION {check.entry.lang} 546 | { author field.or.null 547 | title field.or.null * 548 | get.str.lang 549 | } 550 | 551 | STRINGS { entry.langid } 552 | 553 | FUNCTION {set.entry.lang} 554 | { "" 'entry.langid := 555 | language empty$ not 556 | { language 'entry.langid := } 557 | 'skip$ 558 | if$ 559 | langid empty$ not 560 | { langid 'entry.langid := } 561 | 'skip$ 562 | if$ 563 | entry.langid empty$ 564 | { check.entry.lang } 565 | { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or 566 | { lang.en } 567 | { entry.langid "chinese" = 568 | { lang.zh } 569 | { entry.langid "japanese" = 570 | { lang.ja } 571 | { entry.langid "russian" = 572 | { lang.ru } 573 | { check.entry.lang } 574 | if$ 575 | } 576 | if$ 577 | } 578 | if$ 579 | } 580 | if$ 581 | } 582 | if$ 583 | 'entry.lang := 584 | } 585 | 586 | FUNCTION {set.entry.numbered} 587 | { type$ "patent" = 588 | type$ "standard" = or 589 | type$ "techreport" = or 590 | { #1 'entry.numbered := } 591 | { #0 'entry.numbered := } 592 | if$ 593 | } 594 | 595 | INTEGERS { nameptr namesleft numnames name.lang } 596 | 597 | FUNCTION {format.name} 598 | { "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 599 | t "others" = 600 | { bbl.et.al } 601 | { t get.str.lang 'name.lang := 602 | name.lang lang.en = 603 | { t #1 "{vv~}{ll}{ f{~}}" format.name$ 604 | uppercase.name 605 | { "u" change.case$ } 606 | 'skip$ 607 | if$ 608 | t #1 "{, jj}" format.name$ * 609 | } 610 | { t #1 "{ll}{ff}" format.name$ } 611 | if$ 612 | } 613 | if$ 614 | } 615 | 616 | FUNCTION {format.names} 617 | { 's := 618 | #1 'nameptr := 619 | s num.names$ 'numnames := 620 | "" 621 | numnames 'namesleft := 622 | { namesleft #0 > } 623 | { s nameptr format.name bbl.et.al = 624 | numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or 625 | { ", " * 626 | bbl.et.al * 627 | #1 'namesleft := 628 | } 629 | { nameptr #1 > 630 | { namesleft #1 = bbl.and "" = not and 631 | { bbl.and * } 632 | { ", " * } 633 | if$ 634 | } 635 | 'skip$ 636 | if$ 637 | s nameptr format.name * 638 | } 639 | if$ 640 | nameptr #1 + 'nameptr := 641 | namesleft #1 - 'namesleft := 642 | } 643 | while$ 644 | } 645 | 646 | FUNCTION {format.key} 647 | { empty$ 648 | { key field.or.null } 649 | { "" } 650 | if$ 651 | } 652 | 653 | FUNCTION {format.authors} 654 | { author empty$ not 655 | { author format.names } 656 | { "empty author in " cite$ * warning$ 657 | bbl.anonymous 658 | } 659 | if$ 660 | } 661 | 662 | FUNCTION {format.editors} 663 | { editor empty$ 664 | { "" } 665 | { editor format.names } 666 | if$ 667 | } 668 | 669 | FUNCTION {format.translators} 670 | { translator empty$ 671 | { "" } 672 | { translator format.names 673 | entry.lang lang.zh = 674 | { translator num.names$ #3 > 675 | { "译" * } 676 | { ", 译" * } 677 | if$ 678 | } 679 | 'skip$ 680 | if$ 681 | } 682 | if$ 683 | } 684 | 685 | FUNCTION {format.full.names} 686 | {'s := 687 | #1 'nameptr := 688 | s num.names$ 'numnames := 689 | numnames 'namesleft := 690 | { namesleft #0 > } 691 | { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 692 | t get.str.lang 'name.lang := 693 | name.lang lang.en = 694 | { t #1 "{vv~}{ll}" format.name$ 't := } 695 | { t #1 "{ll}{ff}" format.name$ 't := } 696 | if$ 697 | nameptr #1 > 698 | { 699 | namesleft #1 > 700 | { ", " * t * } 701 | { 702 | numnames #2 > 703 | { "," * } 704 | 'skip$ 705 | if$ 706 | t "others" = 707 | { " et~al." * } 708 | { " and " * t * } 709 | if$ 710 | } 711 | if$ 712 | } 713 | 't 714 | if$ 715 | nameptr #1 + 'nameptr := 716 | namesleft #1 - 'namesleft := 717 | } 718 | while$ 719 | } 720 | 721 | FUNCTION {author.editor.full} 722 | { author empty$ 723 | { editor empty$ 724 | { "" } 725 | { editor format.full.names } 726 | if$ 727 | } 728 | { author format.full.names } 729 | if$ 730 | } 731 | 732 | FUNCTION {author.full} 733 | { author empty$ 734 | { "" } 735 | { author format.full.names } 736 | if$ 737 | } 738 | 739 | FUNCTION {editor.full} 740 | { editor empty$ 741 | { "" } 742 | { editor format.full.names } 743 | if$ 744 | } 745 | 746 | FUNCTION {make.full.names} 747 | { type$ "book" = 748 | type$ "inbook" = 749 | or 750 | 'author.editor.full 751 | { type$ "collection" = 752 | type$ "proceedings" = 753 | or 754 | 'editor.full 755 | 'author.full 756 | if$ 757 | } 758 | if$ 759 | } 760 | 761 | FUNCTION {output.bibitem} 762 | { newline$ 763 | "\bibitem[" write$ 764 | label ")" * 765 | make.full.names duplicate$ short.list = 766 | { pop$ } 767 | { duplicate$ "]" contains 768 | { "{" swap$ * "}" * } 769 | 'skip$ 770 | if$ 771 | * 772 | } 773 | if$ 774 | "]{" * write$ 775 | cite$ write$ 776 | "}" write$ 777 | newline$ 778 | "" 779 | before.all 'output.state := 780 | } 781 | 782 | FUNCTION {change.sentence.case} 783 | { entry.lang lang.en = 784 | { "t" change.case$ } 785 | 'skip$ 786 | if$ 787 | } 788 | 789 | FUNCTION {add.link} 790 | { url empty$ not 791 | { "\href{" url * "}{" * swap$ * "}" * } 792 | { doi empty$ not 793 | { "\href{https://doi.org/" doi * "}{" * swap$ * "}" * } 794 | 'skip$ 795 | if$ 796 | } 797 | if$ 798 | } 799 | 800 | FUNCTION {format.title} 801 | { title empty$ 802 | { "" } 803 | { title 804 | sentence.case.title 805 | 'change.sentence.case 806 | 'skip$ 807 | if$ 808 | entry.numbered number empty$ not and 809 | { bbl.colon * 810 | type$ "patent" = show.patent.country and 811 | { address empty$ not 812 | { address * ", " * } 813 | { location empty$ not 814 | { location * ", " * } 815 | { entry.lang lang.zh = 816 | { "中国" * ", " * } 817 | 'skip$ 818 | if$ 819 | } 820 | if$ 821 | } 822 | if$ 823 | } 824 | 'skip$ 825 | if$ 826 | number * 827 | } 828 | 'skip$ 829 | if$ 830 | link.title 831 | 'add.link 832 | 'skip$ 833 | if$ 834 | } 835 | if$ 836 | } 837 | 838 | FUNCTION {tie.or.space.connect} 839 | { duplicate$ text.length$ #3 < 840 | { "~" } 841 | { " " } 842 | if$ 843 | swap$ * * 844 | } 845 | 846 | FUNCTION {either.or.check} 847 | { empty$ 848 | 'pop$ 849 | { "can't use both " swap$ * " fields in " * cite$ * warning$ } 850 | if$ 851 | } 852 | 853 | FUNCTION {is.digit} 854 | { duplicate$ empty$ 855 | { pop$ #0 } 856 | { chr.to.int$ 857 | duplicate$ "0" chr.to.int$ < 858 | { pop$ #0 } 859 | { "9" chr.to.int$ > 860 | { #0 } 861 | { #1 } 862 | if$ 863 | } 864 | if$ 865 | } 866 | if$ 867 | } 868 | 869 | FUNCTION {is.number} 870 | { 's := 871 | s empty$ 872 | { #0 } 873 | { s text.length$ 'charptr := 874 | { charptr #0 > 875 | s charptr #1 substring$ is.digit 876 | and 877 | } 878 | { charptr #1 - 'charptr := } 879 | while$ 880 | charptr not 881 | } 882 | if$ 883 | } 884 | 885 | FUNCTION {format.volume} 886 | { volume empty$ not 887 | { volume is.number 888 | { entry.lang lang.zh = 889 | { "第 " volume * " 卷" * } 890 | { "Vol." volume tie.or.space.connect } 891 | if$ 892 | } 893 | { volume } 894 | if$ 895 | } 896 | { "" } 897 | if$ 898 | } 899 | 900 | FUNCTION {format.number} 901 | { number empty$ not 902 | { number is.number 903 | { entry.lang lang.zh = 904 | { "第 " number * " 册" * } 905 | { "No." number tie.or.space.connect } 906 | if$ 907 | } 908 | { number } 909 | if$ 910 | } 911 | { "" } 912 | if$ 913 | } 914 | 915 | FUNCTION {format.volume.number} 916 | { volume empty$ not 917 | { format.volume } 918 | { format.number } 919 | if$ 920 | } 921 | 922 | FUNCTION {format.title.vol.num} 923 | { title 924 | sentence.case.title 925 | 'change.sentence.case 926 | 'skip$ 927 | if$ 928 | entry.numbered 929 | { number empty$ not 930 | { bbl.colon * number * } 931 | 'skip$ 932 | if$ 933 | } 934 | { format.volume.number 's := 935 | s empty$ not 936 | { bbl.colon * s * } 937 | 'skip$ 938 | if$ 939 | } 940 | if$ 941 | } 942 | 943 | FUNCTION {format.series.vol.num.title} 944 | { format.volume.number 's := 945 | series empty$ not 946 | { series 947 | sentence.case.title 948 | 'change.sentence.case 949 | 'skip$ 950 | if$ 951 | entry.numbered 952 | { bbl.wide.space * } 953 | { bbl.colon * 954 | s empty$ not 955 | { s * bbl.wide.space * } 956 | 'skip$ 957 | if$ 958 | } 959 | if$ 960 | title * 961 | sentence.case.title 962 | 'change.sentence.case 963 | 'skip$ 964 | if$ 965 | entry.numbered number empty$ not and 966 | { bbl.colon * number * } 967 | 'skip$ 968 | if$ 969 | } 970 | { format.title.vol.num } 971 | if$ 972 | format.btitle 973 | link.title 974 | 'add.link 975 | 'skip$ 976 | if$ 977 | } 978 | 979 | FUNCTION {format.booktitle.vol.num} 980 | { booktitle 981 | entry.numbered 982 | 'skip$ 983 | { format.volume.number 's := 984 | s empty$ not 985 | { bbl.colon * s * } 986 | 'skip$ 987 | if$ 988 | } 989 | if$ 990 | } 991 | 992 | FUNCTION {format.series.vol.num.booktitle} 993 | { format.volume.number 's := 994 | series empty$ not 995 | { series bbl.colon * 996 | entry.numbered not s empty$ not and 997 | { s * bbl.wide.space * } 998 | 'skip$ 999 | if$ 1000 | booktitle * 1001 | } 1002 | { format.booktitle.vol.num } 1003 | if$ 1004 | format.btitle 1005 | } 1006 | 1007 | FUNCTION {remove.period} 1008 | { 't := 1009 | "" 's := 1010 | { t empty$ not } 1011 | { t #1 #1 substring$ 'tmp.str := 1012 | tmp.str "." = not 1013 | { s tmp.str * 's := } 1014 | 'skip$ 1015 | if$ 1016 | t #2 global.max$ substring$ 't := 1017 | } 1018 | while$ 1019 | s 1020 | } 1021 | 1022 | FUNCTION {abbreviate} 1023 | { remove.period 1024 | 't := 1025 | t "l" change.case$ 's := 1026 | "" 1027 | s "physical review letters" = 1028 | { "Phys Rev Lett" } 1029 | 'skip$ 1030 | if$ 1031 | 's := 1032 | s empty$ 1033 | { t } 1034 | { pop$ s } 1035 | if$ 1036 | } 1037 | 1038 | FUNCTION {get.journal.title} 1039 | { short.journal 1040 | { shortjournal empty$ not 1041 | { shortjournal } 1042 | { journal empty$ not 1043 | { journal abbreviate } 1044 | { journaltitle empty$ not 1045 | { journaltitle abbreviate } 1046 | { "" } 1047 | if$ 1048 | } 1049 | if$ 1050 | } 1051 | if$ 1052 | } 1053 | { journal empty$ not 1054 | { journal } 1055 | { journaltitle empty$ not 1056 | { journaltitle } 1057 | { shortjournal empty$ not 1058 | { shortjournal } 1059 | { "" } 1060 | if$ 1061 | } 1062 | if$ 1063 | } 1064 | if$ 1065 | } 1066 | if$ 1067 | } 1068 | 1069 | FUNCTION {check.arxiv.preprint} 1070 | { #1 #5 substring$ "l" change.case$ "arxiv" = 1071 | { #1 } 1072 | { #0 } 1073 | if$ 1074 | } 1075 | 1076 | FUNCTION {format.journal} 1077 | { get.journal.title 1078 | duplicate$ empty$ not 1079 | { italic.journal entry.lang lang.en = and 1080 | 'emphasize 1081 | 'skip$ 1082 | if$ 1083 | } 1084 | 'skip$ 1085 | if$ 1086 | } 1087 | 1088 | FUNCTION {set.entry.mark} 1089 | { entry.mark empty$ not 1090 | 'pop$ 1091 | { mark empty$ not 1092 | { pop$ mark 'entry.mark := } 1093 | { 'entry.mark := } 1094 | if$ 1095 | } 1096 | if$ 1097 | } 1098 | 1099 | FUNCTION {format.mark} 1100 | { show.mark 1101 | { entry.mark 1102 | show.medium.type 1103 | { medium empty$ not 1104 | { "/" * medium * } 1105 | { entry.is.electronic 1106 | { "/OL" * } 1107 | 'skip$ 1108 | if$ 1109 | } 1110 | if$ 1111 | } 1112 | 'skip$ 1113 | if$ 1114 | 'entry.mark := 1115 | space.before.mark 1116 | { " " } 1117 | { "\allowbreak" } 1118 | if$ 1119 | "[" * entry.mark * "]" * 1120 | } 1121 | { "" } 1122 | if$ 1123 | } 1124 | 1125 | FUNCTION {num.to.ordinal} 1126 | { duplicate$ text.length$ 'charptr := 1127 | duplicate$ charptr #1 substring$ 's := 1128 | s "1" = 1129 | { "st" * } 1130 | { s "2" = 1131 | { "nd" * } 1132 | { s "3" = 1133 | { "rd" * } 1134 | { "th" * } 1135 | if$ 1136 | } 1137 | if$ 1138 | } 1139 | if$ 1140 | } 1141 | 1142 | FUNCTION {format.edition} 1143 | { edition empty$ 1144 | { "" } 1145 | { edition is.number 1146 | { edition "1" = not 1147 | { entry.lang lang.zh = 1148 | { edition " 版" * } 1149 | { edition num.to.ordinal " ed." * } 1150 | if$ 1151 | } 1152 | 'skip$ 1153 | if$ 1154 | } 1155 | { entry.lang lang.en = 1156 | { edition change.sentence.case 's := 1157 | s "Revised" = s "Revised edition" = or 1158 | { "Rev. ed." } 1159 | { s " ed." * } 1160 | if$ 1161 | } 1162 | { edition } 1163 | if$ 1164 | } 1165 | if$ 1166 | } 1167 | if$ 1168 | } 1169 | 1170 | FUNCTION {format.publisher} 1171 | { publisher empty$ not 1172 | { publisher } 1173 | { school empty$ not 1174 | { school } 1175 | { organization empty$ not 1176 | { organization } 1177 | { institution empty$ not 1178 | { institution } 1179 | { "" } 1180 | if$ 1181 | } 1182 | if$ 1183 | } 1184 | if$ 1185 | } 1186 | if$ 1187 | } 1188 | 1189 | FUNCTION {format.address.publisher} 1190 | { address empty$ not 1191 | { address } 1192 | { location empty$ not 1193 | { location } 1194 | { "" } 1195 | if$ 1196 | } 1197 | if$ 1198 | duplicate$ empty$ not 1199 | { format.publisher empty$ not 1200 | { bbl.colon * format.publisher * } 1201 | { entry.is.electronic not show.missing.address.publisher and 1202 | { bbl.colon * bbl.sine.nomine * } 1203 | 'skip$ 1204 | if$ 1205 | } 1206 | if$ 1207 | } 1208 | { pop$ 1209 | entry.is.electronic not show.missing.address.publisher and 1210 | { format.publisher empty$ not 1211 | { bbl.sine.loco bbl.colon * format.publisher * } 1212 | { bbl.sine.loco.sine.nomine } 1213 | if$ 1214 | } 1215 | { format.publisher empty$ not 1216 | { format.publisher } 1217 | { "" } 1218 | if$ 1219 | } 1220 | if$ 1221 | } 1222 | if$ 1223 | } 1224 | 1225 | FUNCTION {extract.before.dash} 1226 | { duplicate$ empty$ 1227 | { pop$ "" } 1228 | { 's := 1229 | #1 'charptr := 1230 | s text.length$ #1 + 'len := 1231 | { charptr len < 1232 | s charptr #1 substring$ "-" = not 1233 | and 1234 | } 1235 | { charptr #1 + 'charptr := } 1236 | while$ 1237 | s #1 charptr #1 - substring$ 1238 | } 1239 | if$ 1240 | } 1241 | 1242 | FUNCTION {extract.after.dash} 1243 | { duplicate$ empty$ 1244 | { pop$ "" } 1245 | { 's := 1246 | #1 'charptr := 1247 | s text.length$ #1 + 'len := 1248 | { charptr len < 1249 | s charptr #1 substring$ "-" = not 1250 | and 1251 | } 1252 | { charptr #1 + 'charptr := } 1253 | while$ 1254 | { charptr len < 1255 | s charptr #1 substring$ "-" = 1256 | and 1257 | } 1258 | { charptr #1 + 'charptr := } 1259 | while$ 1260 | s charptr global.max$ substring$ 1261 | } 1262 | if$ 1263 | } 1264 | 1265 | FUNCTION {extract.before.slash} 1266 | { duplicate$ empty$ 1267 | { pop$ "" } 1268 | { 's := 1269 | #1 'charptr := 1270 | s text.length$ #1 + 'len := 1271 | { charptr len < 1272 | s charptr #1 substring$ "/" = not 1273 | and 1274 | } 1275 | { charptr #1 + 'charptr := } 1276 | while$ 1277 | s #1 charptr #1 - substring$ 1278 | } 1279 | if$ 1280 | } 1281 | 1282 | FUNCTION {extract.after.slash} 1283 | { duplicate$ empty$ 1284 | { pop$ "" } 1285 | { 's := 1286 | #1 'charptr := 1287 | s text.length$ #1 + 'len := 1288 | { charptr len < 1289 | s charptr #1 substring$ "-" = not 1290 | and 1291 | s charptr #1 substring$ "/" = not 1292 | and 1293 | } 1294 | { charptr #1 + 'charptr := } 1295 | while$ 1296 | { charptr len < 1297 | s charptr #1 substring$ "-" = 1298 | s charptr #1 substring$ "/" = 1299 | or 1300 | and 1301 | } 1302 | { charptr #1 + 'charptr := } 1303 | while$ 1304 | s charptr global.max$ substring$ 1305 | } 1306 | if$ 1307 | } 1308 | 1309 | FUNCTION {format.year} 1310 | { year empty$ not 1311 | { year extract.before.slash extra.label * } 1312 | { date empty$ not 1313 | { date extract.before.dash extra.label * } 1314 | { entry.is.electronic not 1315 | { "empty year in " cite$ * warning$ } 1316 | 'skip$ 1317 | if$ 1318 | urldate empty$ not 1319 | { "[" urldate extract.before.dash * extra.label * "]" * } 1320 | { "" } 1321 | if$ 1322 | } 1323 | if$ 1324 | } 1325 | if$ 1326 | } 1327 | 1328 | FUNCTION {format.periodical.year} 1329 | { year empty$ not 1330 | { year extract.before.slash 1331 | "--" * 1332 | year extract.after.slash 1333 | duplicate$ empty$ 1334 | 'pop$ 1335 | { * } 1336 | if$ 1337 | } 1338 | { date empty$ not 1339 | { date extract.before.dash } 1340 | { "empty year in " cite$ * warning$ 1341 | urldate empty$ not 1342 | { "[" urldate extract.before.dash * "]" * } 1343 | { "" } 1344 | if$ 1345 | } 1346 | if$ 1347 | } 1348 | if$ 1349 | } 1350 | 1351 | FUNCTION {format.date} 1352 | { date empty$ not 1353 | { type$ "patent" = type$ "newspaper" = or 1354 | { date } 1355 | { entrysubtype empty$ not 1356 | { type$ "article" = entrysubtype "newspaper" = and 1357 | { date } 1358 | { format.year } 1359 | if$ 1360 | } 1361 | { format.year } 1362 | if$ 1363 | } 1364 | if$ 1365 | } 1366 | { year empty$ not 1367 | { format.year } 1368 | { "" } 1369 | if$ 1370 | } 1371 | if$ 1372 | } 1373 | 1374 | FUNCTION {format.editdate} 1375 | { date empty$ not 1376 | { "\allowbreak(" date * ")" * } 1377 | { "" } 1378 | if$ 1379 | } 1380 | 1381 | FUNCTION {format.urldate} 1382 | { show.urldate show.url and entry.url empty$ not and 1383 | is.pure.electronic or 1384 | urldate empty$ not and 1385 | { "\allowbreak[" urldate * "]" * } 1386 | { "" } 1387 | if$ 1388 | } 1389 | 1390 | FUNCTION {hyphenate} 1391 | { 't := 1392 | "" 1393 | { t empty$ not } 1394 | { t #1 #1 substring$ "-" = 1395 | { wave.dash.in.pages 1396 | { "~" * } 1397 | { "-" * } 1398 | if$ 1399 | { t #1 #1 substring$ "-" = } 1400 | { t #2 global.max$ substring$ 't := } 1401 | while$ 1402 | } 1403 | { t #1 #1 substring$ * 1404 | t #2 global.max$ substring$ 't := 1405 | } 1406 | if$ 1407 | } 1408 | while$ 1409 | } 1410 | 1411 | FUNCTION {format.pages} 1412 | { pages empty$ 1413 | { "" } 1414 | { pages hyphenate } 1415 | if$ 1416 | } 1417 | 1418 | FUNCTION {format.extracted.pages} 1419 | { pages empty$ 1420 | { "" } 1421 | { pages 1422 | only.start.page 1423 | 'extract.before.dash 1424 | 'hyphenate 1425 | if$ 1426 | } 1427 | if$ 1428 | } 1429 | 1430 | FUNCTION {format.journal.volume} 1431 | { volume empty$ not 1432 | { bold.journal.volume 1433 | { "\textbf{" volume * "}" * } 1434 | { volume } 1435 | if$ 1436 | } 1437 | { "" } 1438 | if$ 1439 | } 1440 | 1441 | FUNCTION {format.journal.number} 1442 | { number empty$ not 1443 | { "\allowbreak (" number * ")" * } 1444 | { "" } 1445 | if$ 1446 | } 1447 | 1448 | FUNCTION {format.journal.pages} 1449 | { pages empty$ 1450 | { "" } 1451 | { format.extracted.pages } 1452 | if$ 1453 | } 1454 | 1455 | FUNCTION {format.periodical.year.volume.number} 1456 | { year empty$ not 1457 | { year extract.before.slash } 1458 | { "empty year in periodical " cite$ * warning$ } 1459 | if$ 1460 | volume empty$ not 1461 | { ", " * volume extract.before.dash * } 1462 | 'skip$ 1463 | if$ 1464 | number empty$ not 1465 | { "\allowbreak (" * number extract.before.dash * ")" * } 1466 | 'skip$ 1467 | if$ 1468 | "--" * 1469 | year extract.after.slash empty$ 1470 | volume extract.after.dash empty$ and 1471 | number extract.after.dash empty$ and not 1472 | { year extract.after.slash empty$ not 1473 | { year extract.after.slash * } 1474 | { year extract.before.slash * } 1475 | if$ 1476 | volume empty$ not 1477 | { ", " * volume extract.after.dash * } 1478 | 'skip$ 1479 | if$ 1480 | number empty$ not 1481 | { "\allowbreak (" * number extract.after.dash * ")" * } 1482 | 'skip$ 1483 | if$ 1484 | } 1485 | 'skip$ 1486 | if$ 1487 | } 1488 | 1489 | FUNCTION {check.url} 1490 | { url empty$ not 1491 | { "\url{" url * "}" * 'entry.url := 1492 | #1 'entry.is.electronic := 1493 | } 1494 | { howpublished empty$ not 1495 | { howpublished #1 #5 substring$ "\url{" = 1496 | { howpublished 'entry.url := 1497 | #1 'entry.is.electronic := 1498 | } 1499 | 'skip$ 1500 | if$ 1501 | } 1502 | { note empty$ not 1503 | { note #1 #5 substring$ "\url{" = 1504 | { note 'entry.url := 1505 | #1 'entry.is.electronic := 1506 | } 1507 | 'skip$ 1508 | if$ 1509 | } 1510 | 'skip$ 1511 | if$ 1512 | } 1513 | if$ 1514 | } 1515 | if$ 1516 | } 1517 | 1518 | FUNCTION {output.url} 1519 | { show.url is.pure.electronic or 1520 | entry.url empty$ not and 1521 | { new.block 1522 | entry.url output 1523 | } 1524 | 'skip$ 1525 | if$ 1526 | } 1527 | 1528 | FUNCTION {check.doi} 1529 | { doi empty$ not 1530 | { #1 'entry.is.electronic := } 1531 | 'skip$ 1532 | if$ 1533 | } 1534 | 1535 | FUNCTION {is.in.url} 1536 | { 's := 1537 | s empty$ 1538 | { #1 } 1539 | { entry.url empty$ 1540 | { #0 } 1541 | { s text.length$ 'len := 1542 | entry.url text.length$ 'charptr := 1543 | { entry.url charptr len substring$ s = not 1544 | charptr #0 > 1545 | and 1546 | } 1547 | { charptr #1 - 'charptr := } 1548 | while$ 1549 | charptr 1550 | } 1551 | if$ 1552 | } 1553 | if$ 1554 | } 1555 | 1556 | FUNCTION {format.doi} 1557 | { "" 1558 | doi empty$ not 1559 | { "" 's := 1560 | doi 't := 1561 | #0 'numnames := 1562 | { t empty$ not} 1563 | { t #1 #1 substring$ 'tmp.str := 1564 | tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or 1565 | { t #2 #1 substring$ empty$ 1566 | { s tmp.str * 's := } 1567 | 'skip$ 1568 | if$ 1569 | s empty$ s is.in.url or 1570 | 'skip$ 1571 | { numnames #1 + 'numnames := 1572 | numnames #1 > 1573 | { ", " * } 1574 | { "DOI: " * } 1575 | if$ 1576 | "\doi{" s * "}" * * 1577 | } 1578 | if$ 1579 | "" 's := 1580 | } 1581 | { s tmp.str * 's := } 1582 | if$ 1583 | t #2 global.max$ substring$ 't := 1584 | } 1585 | while$ 1586 | } 1587 | 'skip$ 1588 | if$ 1589 | } 1590 | 1591 | FUNCTION {output.doi} 1592 | { doi empty$ not show.doi and 1593 | show.english.translation entry.lang lang.zh = and not and 1594 | { new.block 1595 | format.doi output 1596 | } 1597 | 'skip$ 1598 | if$ 1599 | } 1600 | 1601 | FUNCTION {check.electronic} 1602 | { "" 'entry.url := 1603 | #0 'entry.is.electronic := 1604 | 'check.doi 1605 | 'skip$ 1606 | if$ 1607 | 'check.url 1608 | 'skip$ 1609 | if$ 1610 | medium empty$ not 1611 | { medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or 1612 | { #1 'entry.is.electronic := } 1613 | 'skip$ 1614 | if$ 1615 | } 1616 | 'skip$ 1617 | if$ 1618 | } 1619 | 1620 | FUNCTION {format.eprint} 1621 | { archivePrefix empty$ not 1622 | { archivePrefix } 1623 | { eprinttype empty$ not 1624 | { archivePrefix } 1625 | { "" } 1626 | if$ 1627 | } 1628 | if$ 1629 | 's := 1630 | s empty$ not 1631 | { s ": \eprint{" * 1632 | url empty$ not 1633 | { url } 1634 | { "https://" s "l" change.case$ * ".org/abs/" * eprint * } 1635 | if$ 1636 | * "}{" * 1637 | eprint * "}" * 1638 | } 1639 | { eprint } 1640 | if$ 1641 | } 1642 | 1643 | FUNCTION {output.eprint} 1644 | { show.preprint eprint empty$ not and 1645 | { new.block 1646 | format.eprint output 1647 | } 1648 | 'skip$ 1649 | if$ 1650 | } 1651 | 1652 | FUNCTION {format.note} 1653 | { note empty$ not show.note and 1654 | { note } 1655 | { "" } 1656 | if$ 1657 | } 1658 | 1659 | FUNCTION {output.translation} 1660 | { show.english.translation entry.lang lang.zh = and 1661 | { translation empty$ not 1662 | { translation } 1663 | { "[English translation missing!]" } 1664 | if$ 1665 | " (in Chinese)" * output 1666 | write$ 1667 | format.doi duplicate$ empty$ not 1668 | { newline$ 1669 | write$ 1670 | } 1671 | 'pop$ 1672 | if$ 1673 | " \\" write$ 1674 | newline$ 1675 | "(" write$ 1676 | "" 1677 | before.all 'output.state := 1678 | } 1679 | 'skip$ 1680 | if$ 1681 | } 1682 | 1683 | FUNCTION {empty.misc.check} 1684 | { author empty$ title empty$ 1685 | year empty$ 1686 | and and 1687 | key empty$ not and 1688 | { "all relevant fields are empty in " cite$ * warning$ } 1689 | 'skip$ 1690 | if$ 1691 | } 1692 | 1693 | FUNCTION {monograph} 1694 | { output.bibitem 1695 | output.translation 1696 | author empty$ not 1697 | { format.authors } 1698 | { editor empty$ not 1699 | { format.editors } 1700 | { "empty author and editor in " cite$ * warning$ 1701 | bbl.anonymous 1702 | } 1703 | if$ 1704 | } 1705 | if$ 1706 | output 1707 | year.after.author 1708 | { period.after.author 1709 | 'new.sentence 1710 | 'skip$ 1711 | if$ 1712 | format.year "year" output.check 1713 | } 1714 | 'skip$ 1715 | if$ 1716 | new.block 1717 | format.series.vol.num.title "title" output.check 1718 | "M" set.entry.mark 1719 | format.mark "" output.after 1720 | new.block 1721 | format.translators output 1722 | new.sentence 1723 | format.edition output 1724 | new.block 1725 | format.address.publisher output 1726 | year.after.author not 1727 | { format.year "year" output.check } 1728 | 'skip$ 1729 | if$ 1730 | format.pages bbl.pages.colon output.after 1731 | format.urldate "" output.after 1732 | output.url 1733 | output.doi 1734 | new.block 1735 | format.note output 1736 | fin.entry 1737 | } 1738 | 1739 | FUNCTION {incollection} 1740 | { output.bibitem 1741 | output.translation 1742 | format.authors output 1743 | author format.key output 1744 | year.after.author 1745 | { period.after.author 1746 | 'new.sentence 1747 | 'skip$ 1748 | if$ 1749 | format.year "year" output.check 1750 | } 1751 | 'skip$ 1752 | if$ 1753 | new.block 1754 | format.title "title" output.check 1755 | "M" set.entry.mark 1756 | format.mark "" output.after 1757 | new.block 1758 | format.translators output 1759 | new.slash 1760 | format.editors output 1761 | new.block 1762 | format.series.vol.num.booktitle "booktitle" output.check 1763 | new.block 1764 | format.edition output 1765 | new.block 1766 | format.address.publisher output 1767 | year.after.author not 1768 | { format.year "year" output.check } 1769 | 'skip$ 1770 | if$ 1771 | format.extracted.pages bbl.pages.colon output.after 1772 | format.urldate "" output.after 1773 | output.url 1774 | output.doi 1775 | new.block 1776 | format.note output 1777 | fin.entry 1778 | } 1779 | 1780 | FUNCTION {periodical} 1781 | { output.bibitem 1782 | output.translation 1783 | format.authors output 1784 | author format.key output 1785 | year.after.author 1786 | { period.after.author 1787 | 'new.sentence 1788 | 'skip$ 1789 | if$ 1790 | format.year "year" output.check 1791 | } 1792 | 'skip$ 1793 | if$ 1794 | new.block 1795 | format.title "title" output.check 1796 | "J" set.entry.mark 1797 | format.mark "" output.after 1798 | new.block 1799 | format.periodical.year.volume.number output 1800 | new.block 1801 | format.address.publisher output 1802 | year.after.author not 1803 | { format.periodical.year "year" output.check } 1804 | 'skip$ 1805 | if$ 1806 | format.urldate "" output.after 1807 | output.url 1808 | output.doi 1809 | new.block 1810 | format.note output 1811 | fin.entry 1812 | } 1813 | 1814 | FUNCTION {journal.article} 1815 | { output.bibitem 1816 | output.translation 1817 | format.authors output 1818 | author format.key output 1819 | year.after.author 1820 | { period.after.author 1821 | 'new.sentence 1822 | 'skip$ 1823 | if$ 1824 | format.year "year" output.check 1825 | } 1826 | 'skip$ 1827 | if$ 1828 | new.block 1829 | title.in.journal 1830 | { format.title "title" output.check 1831 | entrysubtype empty$ not 1832 | { 1833 | entrysubtype "newspaper" = 1834 | { "N" set.entry.mark } 1835 | { "J" set.entry.mark } 1836 | if$ 1837 | } 1838 | { "J" set.entry.mark } 1839 | if$ 1840 | format.mark "" output.after 1841 | new.block 1842 | } 1843 | 'skip$ 1844 | if$ 1845 | format.journal "journal" output.check 1846 | year.after.author not 1847 | { format.date "year" output.check } 1848 | 'skip$ 1849 | if$ 1850 | format.journal.volume output 1851 | format.journal.number "" output.after 1852 | format.journal.pages bbl.pages.colon output.after 1853 | format.urldate "" output.after 1854 | output.url 1855 | output.doi 1856 | new.block 1857 | format.note output 1858 | fin.entry 1859 | } 1860 | 1861 | FUNCTION {patent} 1862 | { output.bibitem 1863 | output.translation 1864 | format.authors output 1865 | author format.key output 1866 | year.after.author 1867 | { period.after.author 1868 | 'new.sentence 1869 | 'skip$ 1870 | if$ 1871 | format.year "year" output.check 1872 | } 1873 | 'skip$ 1874 | if$ 1875 | new.block 1876 | format.title "title" output.check 1877 | "P" set.entry.mark 1878 | format.mark "" output.after 1879 | new.block 1880 | format.date "year" output.check 1881 | format.urldate "" output.after 1882 | output.url 1883 | output.doi 1884 | new.block 1885 | format.note output 1886 | fin.entry 1887 | } 1888 | 1889 | FUNCTION {electronic} 1890 | { #1 #1 check.electronic 1891 | #1 'entry.is.electronic := 1892 | #1 'is.pure.electronic := 1893 | output.bibitem 1894 | output.translation 1895 | format.authors output 1896 | author format.key output 1897 | year.after.author 1898 | { period.after.author 1899 | 'new.sentence 1900 | 'skip$ 1901 | if$ 1902 | format.year "year" output.check 1903 | } 1904 | 'skip$ 1905 | if$ 1906 | new.block 1907 | format.series.vol.num.title "title" output.check 1908 | "EB" set.entry.mark 1909 | format.mark "" output.after 1910 | new.block 1911 | format.address.publisher output 1912 | year.after.author not 1913 | { date empty$ 1914 | { format.date output } 1915 | 'skip$ 1916 | if$ 1917 | } 1918 | 'skip$ 1919 | if$ 1920 | format.pages bbl.pages.colon output.after 1921 | format.editdate "" output.after 1922 | format.urldate "" output.after 1923 | output.url 1924 | output.doi 1925 | new.block 1926 | format.note output 1927 | fin.entry 1928 | } 1929 | 1930 | FUNCTION {preprint} 1931 | { output.bibitem 1932 | output.translation 1933 | author empty$ not 1934 | { format.authors } 1935 | { editor empty$ not 1936 | { format.editors } 1937 | { "empty author and editor in " cite$ * warning$ 1938 | bbl.anonymous 1939 | } 1940 | if$ 1941 | } 1942 | if$ 1943 | output 1944 | year.after.author 1945 | { period.after.author 1946 | 'new.sentence 1947 | 'skip$ 1948 | if$ 1949 | format.year "year" output.check 1950 | } 1951 | 'skip$ 1952 | if$ 1953 | new.block 1954 | title.in.journal 1955 | { format.series.vol.num.title "title" output.check 1956 | "A" set.entry.mark 1957 | format.mark "" output.after 1958 | new.block 1959 | } 1960 | 'skip$ 1961 | if$ 1962 | format.translators output 1963 | new.sentence 1964 | format.edition output 1965 | new.block 1966 | year.after.author not 1967 | { date empty$ 1968 | { format.date output } 1969 | 'skip$ 1970 | if$ 1971 | } 1972 | 'skip$ 1973 | if$ 1974 | format.pages bbl.pages.colon output.after 1975 | format.editdate "" output.after 1976 | format.urldate "" output.after 1977 | output.eprint 1978 | output.url 1979 | new.block 1980 | format.note output 1981 | fin.entry 1982 | } 1983 | 1984 | FUNCTION {misc} 1985 | { get.journal.title 1986 | duplicate$ empty$ not 1987 | { check.arxiv.preprint 1988 | 'preprint 1989 | 'journal.article 1990 | if$ 1991 | } 1992 | { pop$ 1993 | booktitle empty$ not 1994 | 'incollection 1995 | { publisher empty$ not 1996 | 'monograph 1997 | { eprint empty$ not archivePrefix empty$ not or 1998 | 'preprint 1999 | { entry.is.electronic 2000 | 'electronic 2001 | { 2002 | "Z" set.entry.mark 2003 | monograph 2004 | } 2005 | if$ 2006 | } 2007 | if$ 2008 | } 2009 | if$ 2010 | } 2011 | if$ 2012 | } 2013 | if$ 2014 | empty.misc.check 2015 | } 2016 | 2017 | FUNCTION {archive} 2018 | { "A" set.entry.mark 2019 | misc 2020 | } 2021 | 2022 | FUNCTION {article} { misc } 2023 | 2024 | FUNCTION {book} { monograph } 2025 | 2026 | FUNCTION {booklet} { book } 2027 | 2028 | FUNCTION {collection} 2029 | { "G" set.entry.mark 2030 | monograph 2031 | } 2032 | 2033 | FUNCTION {database} 2034 | { "DB" set.entry.mark 2035 | electronic 2036 | } 2037 | 2038 | FUNCTION {dataset} 2039 | { "DS" set.entry.mark 2040 | electronic 2041 | } 2042 | 2043 | FUNCTION {inbook} { book } 2044 | 2045 | FUNCTION {inproceedings} 2046 | { "C" set.entry.mark 2047 | incollection 2048 | } 2049 | 2050 | FUNCTION {conference} { inproceedings } 2051 | 2052 | FUNCTION {legislation} { archive } 2053 | 2054 | FUNCTION {map} 2055 | { "CM" set.entry.mark 2056 | misc 2057 | } 2058 | 2059 | FUNCTION {manual} { monograph } 2060 | 2061 | FUNCTION {mastersthesis} 2062 | { "D" set.entry.mark 2063 | monograph 2064 | } 2065 | 2066 | FUNCTION {newspaper} 2067 | { "N" set.entry.mark 2068 | article 2069 | } 2070 | 2071 | FUNCTION {online} 2072 | { "EB" set.entry.mark 2073 | electronic 2074 | } 2075 | 2076 | FUNCTION {phdthesis} { mastersthesis } 2077 | 2078 | FUNCTION {proceedings} 2079 | { "C" set.entry.mark 2080 | monograph 2081 | } 2082 | 2083 | FUNCTION {software} 2084 | { "CP" set.entry.mark 2085 | electronic 2086 | } 2087 | 2088 | FUNCTION {standard} 2089 | { "S" set.entry.mark 2090 | misc 2091 | } 2092 | 2093 | FUNCTION {techreport} 2094 | { "R" set.entry.mark 2095 | misc 2096 | } 2097 | 2098 | FUNCTION {unpublished} { misc } 2099 | 2100 | FUNCTION {default.type} { misc } 2101 | 2102 | MACRO {jan} {"January"} 2103 | 2104 | MACRO {feb} {"February"} 2105 | 2106 | MACRO {mar} {"March"} 2107 | 2108 | MACRO {apr} {"April"} 2109 | 2110 | MACRO {may} {"May"} 2111 | 2112 | MACRO {jun} {"June"} 2113 | 2114 | MACRO {jul} {"July"} 2115 | 2116 | MACRO {aug} {"August"} 2117 | 2118 | MACRO {sep} {"September"} 2119 | 2120 | MACRO {oct} {"October"} 2121 | 2122 | MACRO {nov} {"November"} 2123 | 2124 | MACRO {dec} {"December"} 2125 | 2126 | MACRO {acmcs} {"ACM Computing Surveys"} 2127 | 2128 | MACRO {acta} {"Acta Informatica"} 2129 | 2130 | MACRO {cacm} {"Communications of the ACM"} 2131 | 2132 | MACRO {ibmjrd} {"IBM Journal of Research and Development"} 2133 | 2134 | MACRO {ibmsj} {"IBM Systems Journal"} 2135 | 2136 | MACRO {ieeese} {"IEEE Transactions on Software Engineering"} 2137 | 2138 | MACRO {ieeetc} {"IEEE Transactions on Computers"} 2139 | 2140 | MACRO {ieeetcad} 2141 | {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} 2142 | 2143 | MACRO {ipl} {"Information Processing Letters"} 2144 | 2145 | MACRO {jacm} {"Journal of the ACM"} 2146 | 2147 | MACRO {jcss} {"Journal of Computer and System Sciences"} 2148 | 2149 | MACRO {scp} {"Science of Computer Programming"} 2150 | 2151 | MACRO {sicomp} {"SIAM Journal on Computing"} 2152 | 2153 | MACRO {tocs} {"ACM Transactions on Computer Systems"} 2154 | 2155 | MACRO {tods} {"ACM Transactions on Database Systems"} 2156 | 2157 | MACRO {tog} {"ACM Transactions on Graphics"} 2158 | 2159 | MACRO {toms} {"ACM Transactions on Mathematical Software"} 2160 | 2161 | MACRO {toois} {"ACM Transactions on Office Information Systems"} 2162 | 2163 | MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} 2164 | 2165 | MACRO {tcs} {"Theoretical Computer Science"} 2166 | 2167 | FUNCTION {sortify} 2168 | { purify$ 2169 | "l" change.case$ 2170 | } 2171 | 2172 | FUNCTION {chop.word} 2173 | { 's := 2174 | 'len := 2175 | s #1 len substring$ = 2176 | { s len #1 + global.max$ substring$ } 2177 | 's 2178 | if$ 2179 | } 2180 | 2181 | FUNCTION {format.lab.name} 2182 | { "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 2183 | t "others" = 2184 | { citation.et.al } 2185 | { t get.str.lang 'name.lang := 2186 | name.lang lang.zh = name.lang lang.ja = or 2187 | { t #1 "{ll}{ff}" format.name$ } 2188 | { t #1 "{vv~}{ll}" format.name$ } 2189 | if$ 2190 | } 2191 | if$ 2192 | } 2193 | 2194 | FUNCTION {format.lab.names} 2195 | { 's := 2196 | s #1 format.lab.name 'short.label := 2197 | #1 'nameptr := 2198 | s num.names$ 'numnames := 2199 | "" 2200 | numnames 'namesleft := 2201 | { namesleft #0 > } 2202 | { s nameptr format.lab.name citation.et.al = 2203 | numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or 2204 | { bbl.space * 2205 | citation.et.al * 2206 | #1 'namesleft := 2207 | } 2208 | { nameptr #1 > 2209 | { namesleft #1 = citation.and "" = not and 2210 | { citation.and * } 2211 | { ", " * } 2212 | if$ 2213 | } 2214 | 'skip$ 2215 | if$ 2216 | s nameptr format.lab.name * 2217 | } 2218 | if$ 2219 | nameptr #1 + 'nameptr := 2220 | namesleft #1 - 'namesleft := 2221 | } 2222 | while$ 2223 | } 2224 | 2225 | FUNCTION {author.key.label} 2226 | { author empty$ 2227 | { key empty$ 2228 | { cite$ #1 #3 substring$ } 2229 | 'key 2230 | if$ 2231 | } 2232 | { author format.lab.names } 2233 | if$ 2234 | } 2235 | 2236 | FUNCTION {author.editor.key.label} 2237 | { author empty$ 2238 | { editor empty$ 2239 | { key empty$ 2240 | { cite$ #1 #3 substring$ } 2241 | 'key 2242 | if$ 2243 | } 2244 | { editor format.lab.names } 2245 | if$ 2246 | } 2247 | { author format.lab.names } 2248 | if$ 2249 | } 2250 | 2251 | FUNCTION {author.key.organization.label} 2252 | { author empty$ 2253 | { key empty$ 2254 | { organization empty$ 2255 | { cite$ #1 #3 substring$ } 2256 | { "The " #4 organization chop.word #3 text.prefix$ } 2257 | if$ 2258 | } 2259 | 'key 2260 | if$ 2261 | } 2262 | { author format.lab.names } 2263 | if$ 2264 | } 2265 | 2266 | FUNCTION {editor.key.organization.label} 2267 | { editor empty$ 2268 | { key empty$ 2269 | { organization empty$ 2270 | { cite$ #1 #3 substring$ } 2271 | { "The " #4 organization chop.word #3 text.prefix$ } 2272 | if$ 2273 | } 2274 | 'key 2275 | if$ 2276 | } 2277 | { editor format.lab.names } 2278 | if$ 2279 | } 2280 | 2281 | FUNCTION {calc.short.authors} 2282 | { "" 'short.label := 2283 | type$ "book" = 2284 | type$ "inbook" = 2285 | or 2286 | 'author.editor.key.label 2287 | { type$ "collection" = 2288 | type$ "proceedings" = 2289 | or 2290 | { editor empty$ not 2291 | 'editor.key.organization.label 2292 | 'author.key.organization.label 2293 | if$ 2294 | } 2295 | 'author.key.label 2296 | if$ 2297 | } 2298 | if$ 2299 | 'short.list := 2300 | short.label empty$ 2301 | { short.list 'short.label := } 2302 | 'skip$ 2303 | if$ 2304 | } 2305 | 2306 | FUNCTION {calc.label} 2307 | { calc.short.authors 2308 | short.list "]" contains 2309 | { "{" short.list * "}" * } 2310 | { short.list } 2311 | if$ 2312 | "(" 2313 | * 2314 | format.year duplicate$ empty$ 2315 | short.list key field.or.null = or 2316 | { pop$ "" } 2317 | 'skip$ 2318 | if$ 2319 | duplicate$ "]" contains 2320 | { "{" swap$ * "}" * } 2321 | 'skip$ 2322 | if$ 2323 | * 2324 | 'label := 2325 | short.label 2326 | "(" 2327 | * 2328 | format.year duplicate$ empty$ 2329 | short.list key field.or.null = or 2330 | { pop$ "" } 2331 | 'skip$ 2332 | if$ 2333 | * 2334 | 'short.label := 2335 | } 2336 | 2337 | FUNCTION {sort.language.label} 2338 | { entry.lang lang.zh = 2339 | { lang.zh.order } 2340 | { entry.lang lang.ja = 2341 | { lang.ja.order } 2342 | { entry.lang lang.en = 2343 | { lang.en.order } 2344 | { entry.lang lang.ru = 2345 | { lang.ru.order } 2346 | { lang.other.order } 2347 | if$ 2348 | } 2349 | if$ 2350 | } 2351 | if$ 2352 | } 2353 | if$ 2354 | #64 + 2355 | int.to.chr$ 2356 | } 2357 | 2358 | FUNCTION {sort.format.names} 2359 | { 's := 2360 | #1 'nameptr := 2361 | "" 2362 | s num.names$ 'numnames := 2363 | numnames 'namesleft := 2364 | { namesleft #0 > } 2365 | { 2366 | s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := 2367 | nameptr #1 > 2368 | { 2369 | " " * 2370 | namesleft #1 = t "others" = and 2371 | { "zzzzz" * } 2372 | { numnames #2 > nameptr #2 = and 2373 | { "zz" * year field.or.null * " " * } 2374 | 'skip$ 2375 | if$ 2376 | t sortify * 2377 | } 2378 | if$ 2379 | } 2380 | { t sortify * } 2381 | if$ 2382 | nameptr #1 + 'nameptr := 2383 | namesleft #1 - 'namesleft := 2384 | } 2385 | while$ 2386 | } 2387 | 2388 | FUNCTION {sort.format.title} 2389 | { 't := 2390 | "A " #2 2391 | "An " #3 2392 | "The " #4 t chop.word 2393 | chop.word 2394 | chop.word 2395 | sortify 2396 | #1 global.max$ substring$ 2397 | } 2398 | 2399 | FUNCTION {anonymous.sort} 2400 | { entry.lang lang.zh = 2401 | { "yi4 ming2" } 2402 | { "anon" } 2403 | if$ 2404 | } 2405 | 2406 | FUNCTION {warn.empty.key} 2407 | { entry.lang lang.zh = 2408 | { "empty key in " cite$ * warning$ } 2409 | 'skip$ 2410 | if$ 2411 | } 2412 | 2413 | FUNCTION {author.sort} 2414 | { key empty$ 2415 | { warn.empty.key 2416 | author empty$ 2417 | { anonymous.sort } 2418 | { author sort.format.names } 2419 | if$ 2420 | } 2421 | { key } 2422 | if$ 2423 | } 2424 | 2425 | FUNCTION {author.editor.sort} 2426 | { key empty$ 2427 | { warn.empty.key 2428 | author empty$ 2429 | { editor empty$ 2430 | { anonymous.sort } 2431 | { editor sort.format.names } 2432 | if$ 2433 | } 2434 | { author sort.format.names } 2435 | if$ 2436 | } 2437 | { key } 2438 | if$ 2439 | } 2440 | 2441 | FUNCTION {author.organization.sort} 2442 | { key empty$ 2443 | { warn.empty.key 2444 | author empty$ 2445 | { organization empty$ 2446 | { anonymous.sort } 2447 | { "The " #4 organization chop.word sortify } 2448 | if$ 2449 | } 2450 | { author sort.format.names } 2451 | if$ 2452 | } 2453 | { key } 2454 | if$ 2455 | } 2456 | 2457 | FUNCTION {editor.organization.sort} 2458 | { key empty$ 2459 | { warn.empty.key 2460 | editor empty$ 2461 | { organization empty$ 2462 | { anonymous.sort } 2463 | { "The " #4 organization chop.word sortify } 2464 | if$ 2465 | } 2466 | { editor sort.format.names } 2467 | if$ 2468 | } 2469 | { key } 2470 | if$ 2471 | } 2472 | 2473 | FUNCTION {presort} 2474 | { set.entry.lang 2475 | set.entry.numbered 2476 | show.url show.doi check.electronic 2477 | #0 'is.pure.electronic := 2478 | calc.label 2479 | label sortify 2480 | " " 2481 | * 2482 | sort.language.label 2483 | " " 2484 | * 2485 | type$ "book" = 2486 | type$ "inbook" = 2487 | or 2488 | 'author.editor.sort 2489 | { type$ "collection" = 2490 | type$ "proceedings" = 2491 | or 2492 | 'editor.organization.sort 2493 | 'author.sort 2494 | if$ 2495 | } 2496 | if$ 2497 | * 2498 | " " 2499 | * 2500 | year field.or.null sortify 2501 | * 2502 | " " 2503 | * 2504 | cite$ 2505 | * 2506 | #1 entry.max$ substring$ 2507 | 'sort.label := 2508 | sort.label * 2509 | #1 entry.max$ substring$ 2510 | 'sort.key$ := 2511 | } 2512 | 2513 | STRINGS { longest.label last.label next.extra last.extra.label } 2514 | 2515 | INTEGERS { longest.label.width number.label } 2516 | 2517 | FUNCTION {initialize.longest.label} 2518 | { "" 'longest.label := 2519 | #0 int.to.chr$ 'last.label := 2520 | "" 'next.extra := 2521 | #0 'longest.label.width := 2522 | #0 'number.label := 2523 | "" 'last.extra.label := 2524 | } 2525 | 2526 | FUNCTION {forward.pass} 2527 | { 2528 | last.label short.label = 2529 | { "" 'extra.label := 2530 | last.extra.label text.length$ 'charptr := 2531 | { last.extra.label charptr #1 substring$ "z" = 2532 | charptr #0 > and 2533 | } 2534 | { "a" extra.label * 'extra.label := 2535 | charptr #1 - 'charptr := 2536 | } 2537 | while$ 2538 | charptr #0 > 2539 | { last.extra.label charptr #1 substring$ chr.to.int$ #1 + int.to.chr$ 2540 | extra.label * 'extra.label := 2541 | last.extra.label #1 charptr #1 - substring$ 2542 | extra.label * 'extra.label := 2543 | } 2544 | { "a" extra.label * 'extra.label := } 2545 | if$ 2546 | extra.label 'last.extra.label := 2547 | } 2548 | { "a" 'last.extra.label := 2549 | "" 'extra.label := 2550 | short.label 'last.label := 2551 | } 2552 | if$ 2553 | number.label #1 + 'number.label := 2554 | } 2555 | 2556 | FUNCTION {reverse.pass} 2557 | { 2558 | next.extra "b" = 2559 | { "a" 'extra.label := } 2560 | 'skip$ 2561 | if$ 2562 | extra.label 'next.extra := 2563 | extra.label 2564 | duplicate$ empty$ 2565 | 'skip$ 2566 | { "{\natexlab{" swap$ * "}}" * } 2567 | if$ 2568 | 'extra.label := 2569 | label extra.label * 'label := 2570 | } 2571 | 2572 | FUNCTION {bib.sort.order} 2573 | { sort.label 'sort.key$ := 2574 | } 2575 | 2576 | FUNCTION {begin.bib} 2577 | { preamble$ empty$ 2578 | 'skip$ 2579 | { preamble$ write$ newline$ } 2580 | if$ 2581 | "\begin{thebibliography}{" number.label int.to.str$ * "}" * 2582 | write$ newline$ 2583 | terms.in.macro 2584 | { "\providecommand{\biband}{和}" 2585 | write$ newline$ 2586 | "\providecommand{\bibetal}{等}" 2587 | write$ newline$ 2588 | } 2589 | 'skip$ 2590 | if$ 2591 | "\providecommand{\natexlab}[1]{#1}" 2592 | write$ newline$ 2593 | "\providecommand{\url}[1]{#1}" 2594 | write$ newline$ 2595 | "\expandafter\ifx\csname urlstyle\endcsname\relax\else" 2596 | write$ newline$ 2597 | " \urlstyle{same}\fi" 2598 | write$ newline$ 2599 | "\expandafter\ifx\csname href\endcsname\relax" 2600 | write$ newline$ 2601 | " \DeclareUrlCommand\doi{\urlstyle{rm}}" 2602 | write$ newline$ 2603 | " \def\eprint#1#2{#2}" 2604 | write$ newline$ 2605 | "\else" 2606 | write$ newline$ 2607 | " \def\doi#1{\href{https://doi.org/#1}{\nolinkurl{#1}}}" 2608 | write$ newline$ 2609 | " \let\eprint\href" 2610 | write$ newline$ 2611 | "\fi" 2612 | write$ newline$ 2613 | } 2614 | 2615 | FUNCTION {end.bib} 2616 | { newline$ 2617 | "\end{thebibliography}" write$ newline$ 2618 | } 2619 | 2620 | READ 2621 | 2622 | EXECUTE {init.state.consts} 2623 | 2624 | EXECUTE {load.config} 2625 | 2626 | ITERATE {presort} 2627 | 2628 | SORT 2629 | 2630 | EXECUTE {initialize.longest.label} 2631 | 2632 | ITERATE {forward.pass} 2633 | 2634 | REVERSE {reverse.pass} 2635 | 2636 | ITERATE {bib.sort.order} 2637 | 2638 | SORT 2639 | 2640 | EXECUTE {begin.bib} 2641 | 2642 | ITERATE {call.type$} 2643 | 2644 | EXECUTE {end.bib} 2645 | --------------------------------------------------------------------------------