├── 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 |
--------------------------------------------------------------------------------