├── .gitignore ├── README.md ├── cite.bib ├── main.pdf ├── main.tex ├── oucauthoryear.bst ├── ouclogo.png └── oucthesis.cls /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | words.count 3 | main.aux 4 | main.toc 5 | main.fdb_latexmk 6 | main.fls 7 | main.log 8 | missfont.log 9 | .texpadtmp/* 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 中国海洋大学硕士博士学位论文 LaTeX 模板 2 | [![GitHub release](https://img.shields.io/github/release/ouc-ocean-group/oucthesis/all.svg)](https://github.com/ouc-ocean-group/oucthesis/releases/latest) 3 | 4 | 本仓库因作者离开学校许久,请前往 5 | 6 | [https://github.com/summitgao/OUC-LaTex-master](https://github.com/summitgao/OUC-LaTex-master) 7 | 8 | 继续使用。 9 | -------------------------------------------------------------------------------- /cite.bib: -------------------------------------------------------------------------------- 1 | @article{knuth84, 2 | author = {Donald E. Knuth}, 3 | title = {Literate Programming}, 4 | journal = {The Computer Journal}, 5 | year = {1984}, 6 | number = {2}, 7 | volume = {27}, 8 | pages = {97--111}, 9 | } 10 | 11 | @book{knuth86a, 12 | author = {Donald E. Knuth}, 13 | title = {The {\TeX}book}, 14 | volume = {A}, 15 | publisher = {Addison-Wesley}, 16 | address = {Reading, MA, USA}, 17 | year = {1986}, 18 | series = {Computers and Typesetting}, 19 | } 20 | 21 | @book{lamport94, 22 | author = {Leslie Lamport}, 23 | title = {{\LaTeX}: a Document Preparation System}, 24 | publisher = {Addison-Wesley}, 25 | address = {Reading, MA, USA}, 26 | edition = {2}, 27 | year = {1994}, 28 | } 29 | 30 | @book{tlc2, 31 | author = {Frank Mittelbach and Michel Goossens and Johannes 32 | Braams and David Carlisle}, 33 | title = {The {\LaTeX} Companion}, 34 | publisher = {Addison-Wesley}, 35 | address = {Reading, MA, USA}, 36 | edition = {2}, 37 | year = {2004}, 38 | } 39 | 40 | @collection{slg, 41 | editor = {孙立广}, 42 | title = {顶级期刊论文摘要汇编(1999--2010)}, 43 | address = {合肥}, 44 | publisher = {中国科学技术大学出版社}, 45 | year = {2016}, 46 | pages = {222}, 47 | } 48 | 49 | @book{lyc, 50 | author = {李泳池}, 51 | title = {张量初步和近代连续介质力学概论}, 52 | edition = {2}, 53 | address = {合肥}, 54 | publisher = {中国科学技术大学出版社}, 55 | year = {2016}, 56 | pages = {61}, 57 | } 58 | 59 | @book{ljs, 60 | author = {刘景双}, 61 | title = {湿地生态系统碳、氮、硫、磷生物地球化学过程}, 62 | address = {合肥}, 63 | publisher = {中国科学技术大学出版社}, 64 | year = {2014}, 65 | } 66 | 67 | @incollection{cgw, 68 | author = {程根伟}, 69 | title = {1998年长江洪水的成因与减灾对策}, 70 | editor = {许厚泽 and 赵其国}, 71 | booktitle = {长江流域洪涝灾害与科技对策}, 72 | address = {北京}, 73 | publisher = {科学出版社}, 74 | year = {1999}, 75 | pages = {26--32}, 76 | } 77 | 78 | @incollection{cjb, 79 | author = {陈晋镳 and 张惠民 and 朱士兴 and 赵震 and 王振刚}, 80 | title = {蓟县震旦亚界研究}, 81 | editor = {中国地质科学院天津地质矿产研究所}, 82 | booktitle = {中国震旦亚界}, 83 | address = {天津}, 84 | publisher = {天津科学技术出版社}, 85 | year = {1980}, 86 | pages = {56--114}, 87 | } 88 | 89 | @article{kqy, 90 | author = {孔庆勇 and 郭红健 and 孔庆和}, 91 | title = {我国科技期刊的金字塔分层模型及发展路径初探}, 92 | journal = {中国科技期刊研究}, 93 | year = {2015}, 94 | volume = {26}, 95 | number = {10}, 96 | pages = {1100--1103}, 97 | } 98 | 99 | @article{yhs, 100 | author = {杨洪升}, 101 | title = {四库馆私家抄校书考略}, 102 | journal = {文献}, 103 | year = {2013}, 104 | number = {1}, 105 | pages = {56--75}, 106 | } 107 | 108 | @article{yx, 109 | author = {于潇 and 刘义 and 柴跃廷 and others}, 110 | title = {互联网药品可信交易环境中主体资质审核备案模式}, 111 | journal = {清华大学学报(自然科学版)}, 112 | year = {2012}, 113 | volume = {52}, 114 | number = {11}, 115 | pages = {1518--1521}, 116 | } 117 | 118 | @newspaper{dwx, 119 | author = {丁文详}, 120 | title = {数字革命与竞争国际化}, 121 | journal = {中国青年报}, 122 | year = {2000}, 123 | date = {2000-11-20}, 124 | number = {15}, 125 | } 126 | 127 | @patent{jxz, 128 | author = {姜锡洲}, 129 | title = {一种温热外敷药制备方案:中国,88105607.3}, 130 | year = {1989}, 131 | date = {1989-07-26}, 132 | } 133 | 134 | @database{wjk, 135 | author = {万锦坤}, 136 | title = {中国大学学报论文文摘(1983--1993)(英文版)}, 137 | medium = {CD}, 138 | address = {北京}, 139 | publisher = {中国大百科全书出版社}, 140 | year = {1996}, 141 | } 142 | 143 | @phdthesis{syw, 144 | author = {孙玉文}, 145 | title = {汉语变调构词研究}, 146 | address = {北京}, 147 | school = {北京大学}, 148 | year = {2000}, 149 | } 150 | 151 | @article{wf, 152 | author = {文富 and 顾丽梅}, 153 | title = {网络时代经济发展战略特征}, 154 | journal = {学术研究}, 155 | year = {2000}, 156 | volume = {21}, 157 | number = {4}, 158 | pages = {35--40}, 159 | } 160 | 161 | @book{xd, 162 | author = {肖度 and others}, 163 | title = {知识时代的企业合作经营}, 164 | address = {北京}, 165 | publisher = {北京大学出版社}, 166 | year = {2000}, 167 | pages = {67--69}, 168 | } 169 | 170 | @techreport{twh, 171 | author = {{The White House}}, 172 | title = {Technology for Economic Growth}, 173 | address = {Washington}, 174 | year = {1993}, 175 | } 176 | 177 | @article{huston, 178 | author = {Hutson, Jeremy M}, 179 | title = {Vibrational dependence of the anisotropic intermolecular 180 | potential of argon-hydrogen chloride}, 181 | journal = {J. Phys. Chem.}, 182 | year = {1992}, 183 | volume = {96}, 184 | number = {11}, 185 | pages = {4237--4247}, 186 | } 187 | -------------------------------------------------------------------------------- /main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouc-ocean-group/oucthesis/1831436b9bca1ee99ed2a7bececee30e6355b71e/main.pdf -------------------------------------------------------------------------------- /main.tex: -------------------------------------------------------------------------------- 1 | \documentclass[pdf,count]{oucthesis} 2 | % [pdf|print, [count], [enmac]] 3 | % pdf: 便于阅读的电子版,去除掉多余的空白页,加入超链接等。 4 | % print:打印版本,添加空白页,便于双面打印,禁用超链接。 5 | % count: 字数统计,使用此功能,请在编译时,添加 --shell-escape 选项,并且主文件必须为 main.tex。 6 | % enmac: 可选,当你使用的是英文版 macOS,设置此选项以正确设置字体。 7 | 8 | % ======================================== 9 | %| 论文信息填写 | 10 | % ======================================== 11 | 12 | \title{基于唱跳说唱篮球的舞蹈练习} 13 | \entitle{How to Master Singing, Rap, Dancing, and Basketball} 14 | \author{蔡徐坤} 15 | \advisor{ABC} 16 | \keywords{流行,舞蹈} 17 | \enkeywords{Pop, Dancing} 18 | \mythanks{谨以此文献给我的父母、老师和朋友们!} 19 | 20 | % ======================================== 21 | %| 包引用 | 22 | % ======================================== 23 | \usepackage{booktabs} 24 | \usepackage{amsthm} 25 | \usepackage{algorithm} 26 | \usepackage{algorithmicx} 27 | \usepackage{algpseudocode} 28 | 29 | % ======================================== 30 | %| 内容区域 | 31 | % ======================================== 32 | \begin{document} 33 | % ======================================== 34 | %| 创建前置页 | 35 | % ======================================== 36 | \makeprepage 37 | 38 | % ======================================== 39 | %| 中文摘要 | 40 | % ======================================== 41 | \begin{abstract} 42 | 43 | 出道之后,蔡徐坤大部分精力都投身于新歌的创作和专辑的打造。彼时,他需要随着NINE PERCENT在三个月内完成17场大型巡回见面会,因此写歌的时间必须“挤出来”用。洗澡时、做造型时、飞机上、两个行程间或吃饭的空隙,只要有手机、旋律,任何地方都是他的创作场所;偶尔待在录音室里,甚至成为他的喘息时间。去年,新京报记者见到他时正值午饭,化妆室里传来哼鸣声,“采访完的休息时间,我都可以写一段词。我还年轻,我觉得这都OK。”他曾表示。 44 | 45 | 而《1》的发表同样“违背”偶像市场的规律。蔡徐坤本可以每月发一首,制造更多话题。但他认为,一首首发表并不足以让外界更全面地了解他的音乐风格,“当别人都走得很快,我反而要踏踏实实一步步走。”偶尔听到舆论质疑他没有作品,蔡徐坤也曾犹豫,要不要先发一部分出来?但内心却总有个声音说,“你可以再多做几首不同风格的作品,让大家看到最全面、最好的你,而不是急于求成地去展现自己。” 46 | 47 | 在纷繁的流言蜚语中,蔡徐坤始终坚持自己把控节奏,不被潮流所左右。与蔡徐坤共事过的工作人员佩服他的“自控力”,坦言为了让外界更易接受他的音乐,团队对《1》的新歌也提过不少建议,“但他一直知道自己想要什么,很多事情也都能自己作出正确的决定。” 48 | 49 | 而在蔡徐坤出道一周年之际,他再次消失于公众视野,低调前往美国,筹备自己的首次海外公演。此次公演,已计划半年之久,但直到准备充分他才肯提上日程。公演是小型Live形式,一半DJ,一半表演。他还带来了自己的新歌,并把过去的作品做了更具现场性的改编。在美国,蔡徐坤没有给自己安排任何休闲时间,每天往返于录音棚和住所,“我最近在编曲上下了很多工夫,也重新调整了自己的录音方式,甚至在即兴创作上有了新的呈现。” 50 | 51 | 海外公演后,国内巡演也进入紧张的筹备。而音乐之外的工作,他坦言,于当下仍不在考虑范围。在蔡徐坤的节奏里,音乐才是他选择“在场”的最重要方式。 52 | 53 | 《偶像练习生》的首次登台,作为个人练习生,蔡徐坤是唯一一个大胆选择自己原创歌曲上台的人。一首《I Wanna Get Love》,蔡徐坤并不吝惜在舞台上展现性感、自如、洒脱的表演方式,“只有在舞台上,我才是真正的自己。”录制前,蔡徐坤耗费半个月精心编排新的舞蹈,在录音室反复练唱,连出场造型都精心设计了多种方案。那场表演,他成为全场第一个拿A等级的选手。然而节目播出后,外界焦点却集中于他的装扮。“重新再表演一次,我还是会这样选择。”在他看来,“性感”符合这首歌的表达,也是属于蔡徐坤的风格,舞台之外的事,他都不在意。 54 | 55 | 从小,蔡徐坤就表现出音乐天赋。家中有不少人从事与艺术相关的工作。在他一岁左右,会说整句话的时候,就开始唱歌了,见到麦克风就会跑过去抓起来哼唱,一听到音乐会情不自禁地跟着节奏摇摆。 56 | 57 | \end{abstract} 58 | 59 | % ======================================== 60 | %| 英文摘要 | 61 | % ======================================== 62 | \begin{enabstract} 63 | After his debut, Cai devoted most of his energy to the creation of new songs and the creation of albums. At that time, he needed to complete 17 large-scale tour meetings with nine percent in three months, so the time for writing songs had to be "squeezed out". When bathing, modeling, on the plane, between two itineraries or between meals, as long as there is a mobile phone and melody, anywhere is his creation place; occasionally stay in the studio, even become his breathing time. Last year, when the reporter of the Beijing News saw him, it was lunch time, and there was a hum in the dressing room. "I can write a paragraph during the rest time after the interview. I'm still young. I think it's OK. " He once said. 64 | 65 | 66 | 67 | The publication of "1" also "violates" the law of idol market. Cai Xukun could have written one song a month to create more topics. However, he believes that the publication of a song is not enough to give the outside world a more comprehensive understanding of his music style Occasionally heard the public doubt that he has no works, Cai Xukun also hesitated, do you want to send some first? But there is always a voice in my heart that says, "you can do more works of different styles, so that everyone can see the most comprehensive and best of you, instead of rushing to show yourself." 68 | 69 | 70 | 71 | In the numerous rumors, Cai Xukun always insists on keeping pace and not being influenced by the trend. The staff who worked with CAI Xukun admired his "self-control" and admitted that in order to make his music more acceptable to the outside world, the team also made a lot of suggestions for the new song of 1, "but he always knows what he wants and can make the right decisions for many things." 72 | 73 | 74 | 75 | On the first anniversary of CAI's debut, he once again disappeared from public view and went to the United States in a low-key way to prepare his first overseas performance. The performance has been planned for half a year, but he was not willing to put it on the agenda until he was fully prepared. The public performance is a small live form, half DJ, half performance. He also brought his own new songs and made more live adaptations of his past works. In the United States, Cai Xukun didn't arrange any leisure time for himself. He commuted to the studio and his residence every day. "I've worked a lot in the arrangement of music recently, and I've readjusted my recording method, and even made a new presentation in improvisation." 76 | 77 | 78 | 79 | After the overseas public performance, the domestic tour also entered the tense preparation. Work outside of music, he admits, is still out of consideration at the moment. In CAI Xukun's rhythm, music is the most important way for him to choose "presence". 80 | 81 | 82 | 83 | As an individual trainee, Cai Xukun is the only one who boldly chooses his own original songs to appear on the stage. "I wanna get love", Cai Xukun is not reluctant to show sexy, free and easy performance on the stage, "only on the stage, I am the real myself." Before recording, Cai Xukun spent half a month elaborately choreographing new dances, repeatedly practicing singing in the studio, and elaborately designed a variety of schemes even for appearance modeling. In that performance, he became the first player to take A-level. However, after the program was broadcast, the focus of the outside world was on his costume. "Do it again, I'll still do it." In his opinion, "sexy" is in line with the expression of this song, and also belongs to CAI Xukun's style. He doesn't care about things outside the stage. 84 | 85 | 86 | 87 | Since childhood, Cai Xukun has shown his musical talent. Many people in the family are engaged in art related work. When he was about one year old and could speak the whole sentence, he began to sing. When he saw the microphone, he would run to it and hum. When he heard the concert, he could not help but swing with the rhythm. 88 | 89 | \end{enabstract} 90 | 91 | % ======================================== 92 | %| 目录 | 93 | % ======================================== 94 | \tableofcontents 95 | 96 | % ======================================== 97 | %| 正文 | 98 | %| 注意!!\mainmatter 设置正文格式 | 99 | % ======================================== 100 | \mainmatter 101 | 102 | \chapter{简介} 103 | \section{一级标题} 104 | \subsection{二级标题} 105 | 106 | 2017年2月,即便前途未卜,蔡徐坤为了掌握主动权仍决定奋力一搏,向前公司提出解约,并开始了长达一年,无经济来源的“北漂”生活。“为了舞台,我愿意付出所有一切。”那段时间,蔡徐坤经常宅在家或录音棚里反复地听音乐,学音乐制作,尝试制作片段式的旋律。没有人知道蔡徐坤何时能回归舞台,很多人劝他不应该在别人都抢着拍戏时,却去做音乐,但他却为自己写下“静守己心”四个字,“可能是我比较固执。”他笑笑,“沉寂的时候每个人都会有所迷失,会不知道方向。但这也是最关键的时刻。我就是很单纯地喜欢音乐,也是这样的一份热爱帮助了我。” 107 | 108 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor 109 | incididunt ut labore et dolore magna aliqua. 110 | Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 111 | aliquip ex ea commodo consequat. 112 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu 113 | fugiat nulla pariatur. 114 | Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia 115 | deserunt mollit anim id est laborum. 116 | 117 | \section{脚注} 118 | 119 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor 120 | incididunt ut labore et dolore magna aliqua. 121 | \footnote{Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris 122 | nisi ut aliquip ex ea commodo consequat. 123 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore 124 | eu fugiat nulla pariatur.} 125 | 126 | 127 | 128 | 129 | \chapter{公式、图与表} 130 | \section{公式插入} 131 | 本节为公式 \ref{eq:example} 插入测试。 132 | \begin{equation} 133 | \begin{split} 134 | I(X;Y)&=\mathcal{D}_{KL}(\mathbb{J}(X,Y)||\mathbb{P}(X)\otimes\mathbb{P}(Y)). 135 | \end{split} 136 | \label{eq:example} 137 | \end{equation} 138 | 139 | \section{图片插入} 140 | 有的同学可能听说“\LaTeX{} 只能使用 eps 格式的图片”,甚至把 jpg 格式转为 eps。 141 | 事实上,这种做法已经过时。 142 | 而且每次编译时都要要调用外部工具解析 eps,导致降低编译速度。 143 | 所以我们推荐矢量图直接使用 pdf 格式,位图使用 jpeg 或 png 格式。 144 | \begin{figure*}[ht] 145 | \centering 146 | \includegraphics[width=0.5\textwidth]{ouclogo} 147 | \caption{中国海洋大学图片。} 148 | \label{fig:ouc} 149 | \end{figure*} 150 | 151 | \section{表格插入} 152 | 153 | 本校没有过多的表格格式要求,只要求表头在上即可。 154 | 155 | \begin{table}[htb] 156 | \centering\small 157 | \caption{表号和表题在表的正上方} 158 | \label{tab:exampletable} 159 | \begin{tabular}{cl} 160 | \toprule 161 | 类型 & 描述 \\ 162 | \midrule 163 | 挂线表 & 挂线表也称系统表、组织表,用于表现系统结构 \\ 164 | 无线表 & 无线表一般用于设备配置单、技术参数列表等 \\ 165 | 无线表 & 无线表一般用于设备配置单、技术参数列表等 \\ 166 | \bottomrule 167 | \end{tabular} 168 | \end{table} 169 | 170 | \section{算法环境} 171 | 这是算法演示。关于该宏包的具体用法,请阅读宏包的官方文档。这是算法演示。关于该宏包的具体用法,请阅读宏包的官方文档。这是算法演示。关于该宏包的具体用法,请阅读宏包的官方文档。 172 | 173 | 174 | \begin{algorithm}[t] 175 | \small 176 | \caption{发表论文} 177 | \begin{algorithmic}[1] %每行显示行号 178 | \Require 脑子 179 | \While{Ture} 180 | 做实验 181 | \If {巧了} 182 | \State break 183 | \EndIf 184 | \EndWhile 185 | \end{algorithmic} 186 | \end{algorithm} 187 | 188 | \chapter{引用文献} 189 | \section{文献引用测试章节} 190 | 学校前身是创办于1924年的私立青岛大学\cite{lamport94}。1930年,在省立山东大学和私立青岛大学的基础上成立国立青岛大学。后历经国立山东大学、山东大学时期\cite{dwx},1958年山东大学主体迁往济南,以留青的海洋系、水产系、地质系、生物系等为基础,于1959年3月成立山东海洋学院。1960年被确定为全国13所重点综合性大学之一。1988年更名为青岛海洋大学。2002年更名为中国海洋大学。 191 | 192 | Lorem ipsum dolor sit amet\cite{xd}, consectetur adipiscing elit, sed do eiusmod tempor 193 | incididunt ut labore et dolore magna aliqua. 194 | Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut 195 | aliquip ex ea commodo consequat. 196 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu 197 | fugiat nulla pariatur. 198 | Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia 199 | deserunt mollit anim id est laborum. 200 | 201 | 202 | % ======================================== 203 | %| 文献 | 204 | % ======================================== 205 | \bibliographystyle{oucauthoryear} 206 | \bibliography{cite} 207 | 208 | % ======================================== 209 | %| 致谢 | 210 | % ======================================== 211 | \begin{ackonwlegmentback} 212 | 在论文的最后我想向所有帮助支持过我的亲人、朋友、老师致以崇高的敬意和真诚的感谢,感谢你们在我三年研究生的生活中给予的生活和工作的支持。 213 | 214 | 2017年9月,我开始了研究生生活,时间飞逝,我即将离开学校,走向社会,在此期间,我要特别感谢XX教授,是两位老师带我进入了XXXX的世界;特别感谢实验室的同学,在我碰到问题的时候伸出援手,帮助我解决问题;最后我要特别感谢我的父母,感谢你们对我学习生涯的资助,感谢你们对我未来决定的支持。 215 | \end{ackonwlegmentback} 216 | 217 | % ======================================== 218 | %| 简历 | 219 | % ======================================== 220 | \begin{profile} 221 | \section*{个人简历} 222 | 2000年0月0日出生于XX省XX市(县)。 223 | 2001年9月考入XX大学XX专业,2002年7月本科毕业并获得工学学士学位。 224 | 2002年9月考入中国海洋大学XX学院XX专业攻读硕士学位至今。 225 | 226 | \section*{发表的学术论文} 227 | \noindent[1] Xukun Cai, et al., Singing, Dancing, Rap, Basketball. ABC. 2019 228 | 229 | \section*{申请发明专利} 230 | \noindent[1]蔡徐坤。唱跳Rap篮球。PN: 20181000000.0 231 | \end{profile} 232 | 233 | 234 | \end{document} -------------------------------------------------------------------------------- /oucauthoryear.bst: -------------------------------------------------------------------------------- 1 | %% 2 | %% Original file is `versions/ustc/ustcthesis-numerical.bst', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% gbt7714.dtx (with options: `ustc,2015,numerical') 8 | %% ------------------------------------------------------------------- 9 | %% GB/T 7714-2015 BibTeX Style 10 | %% https://github.com/CTeX-org/gbt7714-bibtex-style 11 | %% Version: 2019/03/21 v1.1.1 12 | %% ------------------------------------------------------------------- 13 | %% Copyright 14 | %% USTC (C) 2015-2019 Created by Zeping Lee 15 | %% OUC version modified my Geo 16 | %% ------------------------------------------------------------------- 17 | %% This file may be distributed and/or modified under the 18 | %% conditions of the LaTeX Project Public License, either version 1.3c 19 | %% of this license or (at your option) any later version. 20 | %% The latest version of this license is in 21 | %% https://www.latex-project.org/lppl.txt 22 | %% and version 1.3c or later is part of all distributions of LaTeX 23 | %% version 2005/12/01 or later. 24 | %% ------------------------------------------------------------------- 25 | INTEGERS { 26 | uppercase.name 27 | max.num.authors 28 | period.between.author.year 29 | sentence.case.title 30 | link.title 31 | show.mark 32 | slash.for.extraction 33 | in.booktitle 34 | italic.jounal 35 | bold.journal.volume 36 | show.missing.address.publisher 37 | show.url 38 | show.doi 39 | show.note 40 | } 41 | 42 | FUNCTION {load.config} 43 | { 44 | #0 'uppercase.name := 45 | #3 'max.num.authors := 46 | #1 'sentence.case.title := 47 | #0 'link.title := 48 | #1 'show.mark := 49 | #1 'slash.for.extraction := 50 | #0 'in.booktitle := 51 | #0 'italic.jounal := 52 | #0 'bold.journal.volume := 53 | #1 'show.missing.address.publisher := 54 | #0 'show.missing.address.publisher := 55 | #1 'show.url := 56 | #1 'show.doi := 57 | #0 'show.note := 58 | } 59 | 60 | ENTRY 61 | { address 62 | author 63 | booktitle 64 | date 65 | doi 66 | edition 67 | editor 68 | howpublished 69 | institution 70 | journal 71 | key 72 | language 73 | mark 74 | medium 75 | note 76 | number 77 | organization 78 | pages 79 | publisher 80 | school 81 | series 82 | title 83 | translator 84 | url 85 | urldate 86 | volume 87 | year 88 | } 89 | { entry.lang entry.is.electronic entry.numbered } 90 | { label extra.label sort.label short.list entry.mark entry.url } 91 | 92 | INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } 93 | 94 | INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other } 95 | 96 | INTEGERS { charptr len } 97 | 98 | FUNCTION {init.state.consts} 99 | { #0 'before.all := 100 | #1 'mid.sentence := 101 | #2 'after.sentence := 102 | #3 'after.block := 103 | #4 'after.slash := 104 | #3 'lang.zh := 105 | #4 'lang.ja := 106 | #1 'lang.en := 107 | #2 'lang.ru := 108 | #0 'lang.other := 109 | } 110 | 111 | FUNCTION {bbl.anonymous} 112 | { entry.lang lang.zh = 113 | { "佚名" } 114 | { "Anon" } 115 | if$ 116 | } 117 | 118 | FUNCTION {bbl.space} 119 | { entry.lang lang.zh = 120 | { "\ " } 121 | { " " } 122 | if$ 123 | } 124 | 125 | FUNCTION {bbl.et.al} 126 | { entry.lang lang.zh = 127 | { "等" } 128 | { entry.lang lang.ja = 129 | { "他" } 130 | { entry.lang lang.ru = 131 | { "идр" } 132 | { "et~al." } 133 | if$ 134 | } 135 | if$ 136 | } 137 | if$ 138 | } 139 | 140 | FUNCTION {citation.et.al} 141 | { bbl.et.al } 142 | 143 | FUNCTION {bbl.colon} { ": " } 144 | 145 | FUNCTION {bbl.wide.space} { "\quad " } 146 | 147 | FUNCTION {bbl.slash} { "//\allowbreak " } 148 | 149 | FUNCTION {bbl.sine.loco} 150 | { entry.lang lang.zh = 151 | { "[出版地不详]" } 152 | { "[S.l.]" } 153 | if$ 154 | } 155 | 156 | FUNCTION {bbl.sine.nomine} 157 | { entry.lang lang.zh = 158 | { "[出版者不详]" } 159 | { "[s.n.]" } 160 | if$ 161 | } 162 | 163 | FUNCTION {bbl.sine.loco.sine.nomine} 164 | { entry.lang lang.zh = 165 | { "[出版地不详: 出版者不详]" } 166 | { "[S.l.: s.n.]" } 167 | if$ 168 | } 169 | 170 | FUNCTION {not} 171 | { { #0 } 172 | { #1 } 173 | if$ 174 | } 175 | 176 | FUNCTION {and} 177 | { 'skip$ 178 | { pop$ #0 } 179 | if$ 180 | } 181 | 182 | FUNCTION {or} 183 | { { pop$ #1 } 184 | 'skip$ 185 | if$ 186 | } 187 | 188 | STRINGS { s t } 189 | 190 | FUNCTION {output.nonnull} 191 | { 's := 192 | output.state mid.sentence = 193 | { ", " * write$ } 194 | { output.state after.block = 195 | { add.period$ write$ 196 | newline$ 197 | "\newblock " write$ 198 | } 199 | { output.state before.all = 200 | 'write$ 201 | { output.state after.slash = 202 | { bbl.slash * write$ 203 | newline$ 204 | } 205 | { add.period$ " " * write$ } 206 | if$ 207 | } 208 | if$ 209 | } 210 | if$ 211 | mid.sentence 'output.state := 212 | } 213 | if$ 214 | s 215 | } 216 | 217 | FUNCTION {output} 218 | { duplicate$ empty$ 219 | 'pop$ 220 | 'output.nonnull 221 | if$ 222 | } 223 | 224 | FUNCTION {output.after} 225 | { 't := 226 | duplicate$ empty$ 227 | 'pop$ 228 | { 's := 229 | output.state mid.sentence = 230 | { t * write$ } 231 | { output.state after.block = 232 | { add.period$ write$ 233 | newline$ 234 | "\newblock " write$ 235 | } 236 | { output.state before.all = 237 | 'write$ 238 | { output.state after.slash = 239 | { bbl.slash * write$ } 240 | { add.period$ " " * write$ } 241 | if$ 242 | } 243 | if$ 244 | } 245 | if$ 246 | mid.sentence 'output.state := 247 | } 248 | if$ 249 | s 250 | } 251 | if$ 252 | } 253 | 254 | FUNCTION {output.check} 255 | { 't := 256 | duplicate$ empty$ 257 | { pop$ "empty " t * " in " * cite$ * warning$ } 258 | 'output.nonnull 259 | if$ 260 | } 261 | 262 | FUNCTION {fin.entry} 263 | { add.period$ 264 | write$ 265 | newline$ 266 | } 267 | 268 | FUNCTION {new.block} 269 | { output.state before.all = 270 | 'skip$ 271 | { output.state after.slash = 272 | 'skip$ 273 | { after.block 'output.state := } 274 | if$ 275 | } 276 | if$ 277 | } 278 | 279 | FUNCTION {new.sentence} 280 | { output.state after.block = 281 | 'skip$ 282 | { output.state before.all = 283 | 'skip$ 284 | { output.state after.slash = 285 | 'skip$ 286 | { after.sentence 'output.state := } 287 | if$ 288 | } 289 | if$ 290 | } 291 | if$ 292 | } 293 | 294 | FUNCTION {new.slash} 295 | { output.state before.all = 296 | 'skip$ 297 | { slash.for.extraction 298 | { after.slash 'output.state := } 299 | { after.block 'output.state := } 300 | if$ 301 | } 302 | if$ 303 | } 304 | 305 | FUNCTION {new.block.checka} 306 | { empty$ 307 | 'skip$ 308 | 'new.block 309 | if$ 310 | } 311 | 312 | FUNCTION {new.block.checkb} 313 | { empty$ 314 | swap$ empty$ 315 | and 316 | 'skip$ 317 | 'new.block 318 | if$ 319 | } 320 | 321 | FUNCTION {new.sentence.checka} 322 | { empty$ 323 | 'skip$ 324 | 'new.sentence 325 | if$ 326 | } 327 | 328 | FUNCTION {new.sentence.checkb} 329 | { empty$ 330 | swap$ empty$ 331 | and 332 | 'skip$ 333 | 'new.sentence 334 | if$ 335 | } 336 | 337 | FUNCTION {field.or.null} 338 | { duplicate$ empty$ 339 | { pop$ "" } 340 | 'skip$ 341 | if$ 342 | } 343 | 344 | FUNCTION {italicize} 345 | { duplicate$ empty$ 346 | { pop$ "" } 347 | { "\textit{" swap$ * "}" * } 348 | if$ 349 | } 350 | 351 | INTEGERS { byte second.byte } 352 | 353 | INTEGERS { char.lang tmp.lang } 354 | 355 | STRINGS { tmp.str } 356 | 357 | FUNCTION {get.str.lang} 358 | { 'tmp.str := 359 | lang.other 'tmp.lang := 360 | #1 'charptr := 361 | tmp.str text.length$ #1 + 'len := 362 | { charptr len < } 363 | { tmp.str charptr #1 substring$ chr.to.int$ 'byte := 364 | byte #128 < 365 | { charptr #1 + 'charptr := 366 | byte #64 > byte #91 < and byte #96 > byte #123 < and or 367 | { lang.en 'char.lang := } 368 | { lang.other 'char.lang := } 369 | if$ 370 | } 371 | { tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte := 372 | byte #224 < 373 | { charptr #2 + 'charptr := 374 | byte #207 > byte #212 < and 375 | byte #212 = second.byte #176 < and or 376 | { lang.ru 'char.lang := } 377 | { lang.other 'char.lang := } 378 | if$ 379 | } 380 | { byte #240 < 381 | { charptr #3 + 'charptr := 382 | byte #227 > byte #234 < and 383 | { lang.zh 'char.lang := } 384 | { byte #227 = 385 | { second.byte #143 > 386 | { lang.zh 'char.lang := } 387 | { second.byte #128 > second.byte #132 < and 388 | { lang.ja 'char.lang := } 389 | { lang.other 'char.lang := } 390 | if$ 391 | } 392 | if$ 393 | } 394 | { byte #239 = 395 | second.byte #163 > second.byte #172 < and and 396 | { lang.zh 'char.lang := } 397 | { lang.other 'char.lang := } 398 | if$ 399 | } 400 | if$ 401 | } 402 | if$ 403 | } 404 | { charptr #4 + 'charptr := 405 | byte #240 = second.byte #159 > and 406 | { lang.zh 'char.lang := } 407 | { lang.other 'char.lang := } 408 | if$ 409 | } 410 | if$ 411 | } 412 | if$ 413 | } 414 | if$ 415 | char.lang tmp.lang > 416 | { char.lang 'tmp.lang := } 417 | 'skip$ 418 | if$ 419 | } 420 | while$ 421 | tmp.lang 422 | } 423 | 424 | FUNCTION {check.entry.lang} 425 | { author field.or.null 426 | title field.or.null * 427 | get.str.lang 428 | } 429 | 430 | FUNCTION {set.entry.lang} 431 | { language empty$ 432 | { check.entry.lang } 433 | { language "english" = language "american" = or language "british" = or 434 | { lang.en } 435 | { language "chinese" = 436 | { lang.zh } 437 | { language "japanese" = 438 | { lang.ja } 439 | { language "russian" = 440 | { lang.ru } 441 | { check.entry.lang } 442 | if$ 443 | } 444 | if$ 445 | } 446 | if$ 447 | } 448 | if$ 449 | } 450 | if$ 451 | 'entry.lang := 452 | } 453 | 454 | FUNCTION {set.entry.numbered} 455 | { type$ "patent" = 456 | type$ "standard" = or 457 | type$ "techreport" = or 458 | { #1 'entry.numbered := } 459 | { #0 'entry.numbered := } 460 | if$ 461 | } 462 | 463 | INTEGERS { nameptr namesleft numnames name.lang } 464 | 465 | FUNCTION {format.names} 466 | { 's := 467 | #1 'nameptr := 468 | s num.names$ 'numnames := 469 | numnames 'namesleft := 470 | { namesleft #0 > } 471 | { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 472 | nameptr max.num.authors > 473 | { bbl.et.al 474 | #1 'namesleft := 475 | } 476 | { t "others" = 477 | { bbl.et.al } 478 | { t get.str.lang 'name.lang := 479 | name.lang lang.en = 480 | { t #1 "{vv~}{ll}{~f{~}}" format.name$ 481 | uppercase.name 482 | { "u" change.case$ } 483 | 'skip$ 484 | if$ 485 | t #1 "{, jj}" format.name$ * 486 | } 487 | { t #1 "{ll}{ff}" format.name$ } 488 | if$ 489 | } 490 | if$ 491 | } 492 | if$ 493 | nameptr #1 > 494 | { ", " swap$ * * } 495 | 'skip$ 496 | if$ 497 | nameptr #1 + 'nameptr := 498 | namesleft #1 - 'namesleft := 499 | } 500 | while$ 501 | } 502 | 503 | FUNCTION {format.key} 504 | { empty$ 505 | { key field.or.null } 506 | { "" } 507 | if$ 508 | } 509 | 510 | FUNCTION {format.authors} 511 | { author empty$ not 512 | { author format.names } 513 | { "empty author in " cite$ * warning$ 514 | "" 515 | } 516 | if$ 517 | } 518 | 519 | FUNCTION {format.editors} 520 | { editor empty$ 521 | { "" } 522 | { editor format.names } 523 | if$ 524 | } 525 | 526 | FUNCTION {format.translators} 527 | { translator empty$ 528 | { "" } 529 | { translator format.names 530 | entry.lang lang.zh = 531 | { translator num.names$ #3 > 532 | { "译" * } 533 | { ", 译" * } 534 | if$ 535 | } 536 | 'skip$ 537 | if$ 538 | } 539 | if$ 540 | } 541 | 542 | FUNCTION {format.full.names} 543 | {'s := 544 | #1 'nameptr := 545 | s num.names$ 'numnames := 546 | numnames 'namesleft := 547 | { namesleft #0 > } 548 | { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 549 | t get.str.lang 'name.lang := 550 | name.lang lang.en = 551 | { t #1 "{vv~}{ll}" format.name$ 't := } 552 | { t #1 "{ll}{ff}" format.name$ 't := } 553 | if$ 554 | nameptr #1 > 555 | { 556 | namesleft #1 > 557 | { ", " * t * } 558 | { 559 | numnames #2 > 560 | { "," * } 561 | 'skip$ 562 | if$ 563 | t "others" = 564 | { " et~al." * } 565 | { " and " * t * } 566 | if$ 567 | } 568 | if$ 569 | } 570 | 't 571 | if$ 572 | nameptr #1 + 'nameptr := 573 | namesleft #1 - 'namesleft := 574 | } 575 | while$ 576 | } 577 | 578 | FUNCTION {author.editor.full} 579 | { author empty$ 580 | { editor empty$ 581 | { "" } 582 | { editor format.full.names } 583 | if$ 584 | } 585 | { author format.full.names } 586 | if$ 587 | } 588 | 589 | FUNCTION {author.full} 590 | { author empty$ 591 | { "" } 592 | { author format.full.names } 593 | if$ 594 | } 595 | 596 | FUNCTION {editor.full} 597 | { editor empty$ 598 | { "" } 599 | { editor format.full.names } 600 | if$ 601 | } 602 | 603 | FUNCTION {make.full.names} 604 | { type$ "book" = 605 | type$ "inbook" = 606 | or 607 | 'author.editor.full 608 | { type$ "collection" = 609 | type$ "proceedings" = 610 | or 611 | 'editor.full 612 | 'author.full 613 | if$ 614 | } 615 | if$ 616 | } 617 | 618 | FUNCTION {output.bibitem} 619 | { newline$ 620 | "\bibitem[" write$ 621 | label write$ 622 | ")" make.full.names duplicate$ short.list = 623 | { pop$ } 624 | { * } 625 | if$ 626 | 's := 627 | s text.length$ 'charptr := 628 | { charptr #0 > } 629 | { s charptr #1 substring$ "]" = 630 | { #0 'charptr := } 631 | { charptr #1 - 'charptr := } 632 | if$ 633 | } 634 | while$ 635 | charptr #0 > 636 | { "{" s * "}" * } 637 | { s } 638 | if$ 639 | "]{" * write$ 640 | cite$ write$ 641 | "}" write$ 642 | newline$ 643 | "" 644 | before.all 'output.state := 645 | } 646 | 647 | FUNCTION {change.sentence.case} 648 | { entry.lang lang.en = 649 | { "t" change.case$ } 650 | 'skip$ 651 | if$ 652 | } 653 | 654 | FUNCTION {add.link} 655 | { url empty$ not 656 | { "\href{" url * "}{" * swap$ * "}" * } 657 | { doi empty$ not 658 | { "\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" * } 659 | 'skip$ 660 | if$ 661 | } 662 | if$ 663 | } 664 | 665 | FUNCTION {format.title} 666 | { title empty$ 667 | { "" } 668 | { title 669 | sentence.case.title 670 | 'change.sentence.case 671 | 'skip$ 672 | if$ 673 | entry.numbered number empty$ not and 674 | { bbl.colon * number * } 675 | 'skip$ 676 | if$ 677 | link.title 678 | 'add.link 679 | 'skip$ 680 | if$ 681 | } 682 | if$ 683 | } 684 | 685 | FUNCTION {tie.or.space.connect} 686 | { duplicate$ text.length$ #3 < 687 | { "~" } 688 | { " " } 689 | if$ 690 | swap$ * * 691 | } 692 | 693 | FUNCTION {either.or.check} 694 | { empty$ 695 | 'pop$ 696 | { "can't use both " swap$ * " fields in " * cite$ * warning$ } 697 | if$ 698 | } 699 | 700 | FUNCTION {is.digit} 701 | { duplicate$ empty$ 702 | { pop$ #0 } 703 | { chr.to.int$ 704 | duplicate$ "0" chr.to.int$ < 705 | { pop$ #0 } 706 | { "9" chr.to.int$ > 707 | { #0 } 708 | { #1 } 709 | if$ 710 | } 711 | if$ 712 | } 713 | if$ 714 | } 715 | 716 | FUNCTION {is.number} 717 | { 's := 718 | s empty$ 719 | { #0 } 720 | { s text.length$ 'charptr := 721 | { charptr #0 > 722 | s charptr #1 substring$ is.digit 723 | and 724 | } 725 | { charptr #1 - 'charptr := } 726 | while$ 727 | charptr not 728 | } 729 | if$ 730 | } 731 | 732 | FUNCTION {format.volume} 733 | { volume empty$ not 734 | { volume is.number 735 | { entry.lang lang.zh = 736 | { "第 " volume * " 卷" * } 737 | { "volume" volume tie.or.space.connect } 738 | if$ 739 | } 740 | { volume } 741 | if$ 742 | } 743 | { "" } 744 | if$ 745 | } 746 | 747 | FUNCTION {format.number} 748 | { number empty$ not 749 | { number is.number 750 | { entry.lang lang.zh = 751 | { "第 " number * " 册" * } 752 | { "number" number tie.or.space.connect } 753 | if$ 754 | } 755 | { number } 756 | if$ 757 | } 758 | { "" } 759 | if$ 760 | } 761 | 762 | FUNCTION {format.volume.number} 763 | { volume empty$ not 764 | { format.volume } 765 | { format.number } 766 | if$ 767 | } 768 | 769 | FUNCTION {format.title.vol.num} 770 | { title 771 | sentence.case.title 772 | 'change.sentence.case 773 | 'skip$ 774 | if$ 775 | entry.numbered 776 | { number empty$ not 777 | { bbl.colon * number * } 778 | 'skip$ 779 | if$ 780 | } 781 | { format.volume.number 's := 782 | s empty$ not 783 | { bbl.colon * s * } 784 | 'skip$ 785 | if$ 786 | } 787 | if$ 788 | } 789 | 790 | FUNCTION {format.series.vol.num.title} 791 | { format.volume.number 's := 792 | series empty$ not 793 | { series 794 | sentence.case.title 795 | 'change.sentence.case 796 | 'skip$ 797 | if$ 798 | entry.numbered 799 | { bbl.wide.space * } 800 | { bbl.colon * 801 | s empty$ not 802 | { s * bbl.wide.space * } 803 | 'skip$ 804 | if$ 805 | } 806 | if$ 807 | title * 808 | sentence.case.title 809 | 'change.sentence.case 810 | 'skip$ 811 | if$ 812 | entry.numbered number empty$ not and 813 | { bbl.colon * number * } 814 | 'skip$ 815 | if$ 816 | } 817 | { format.title.vol.num } 818 | if$ 819 | link.title 820 | 'add.link 821 | 'skip$ 822 | if$ 823 | } 824 | 825 | FUNCTION {format.booktitle.vol.num} 826 | { booktitle 827 | entry.numbered 828 | 'skip$ 829 | { format.volume.number 's := 830 | s empty$ not 831 | { bbl.colon * s * } 832 | 'skip$ 833 | if$ 834 | } 835 | if$ 836 | } 837 | 838 | FUNCTION {format.series.vol.num.booktitle} 839 | { format.volume.number 's := 840 | series empty$ not 841 | { series bbl.colon * 842 | entry.numbered not s empty$ not and 843 | { s * bbl.wide.space * } 844 | 'skip$ 845 | if$ 846 | booktitle * 847 | } 848 | { format.booktitle.vol.num } 849 | if$ 850 | in.booktitle 851 | { duplicate$ empty$ not entry.lang lang.en = and 852 | { "In: " swap$ * } 853 | 'skip$ 854 | if$ 855 | } 856 | 'skip$ 857 | if$ 858 | } 859 | 860 | FUNCTION {format.journal} 861 | { journal 862 | italic.jounal entry.lang lang.en = and 863 | 'italicize 864 | 'skip$ 865 | if$ 866 | } 867 | 868 | FUNCTION {set.entry.mark} 869 | { entry.mark empty$ not 870 | 'pop$ 871 | { mark empty$ not 872 | { pop$ mark 'entry.mark := } 873 | { 'entry.mark := } 874 | if$ 875 | } 876 | if$ 877 | } 878 | 879 | FUNCTION {format.mark} 880 | { show.mark 881 | { medium empty$ not 882 | { entry.mark "/" * medium * 'entry.mark := } 883 | { entry.is.electronic 884 | { entry.mark "/OL" * 'entry.mark := } 885 | 'skip$ 886 | if$ 887 | } 888 | if$ 889 | "\allowbreak[" entry.mark * "]" * 890 | } 891 | { "" } 892 | if$ 893 | } 894 | 895 | FUNCTION {num.to.ordinal} 896 | { duplicate$ text.length$ 'charptr := 897 | duplicate$ charptr #1 substring$ 's := 898 | s "1" = 899 | { "st" * } 900 | { s "2" = 901 | { "nd" * } 902 | { s "3" = 903 | { "rd" * } 904 | { "th" * } 905 | if$ 906 | } 907 | if$ 908 | } 909 | if$ 910 | } 911 | 912 | FUNCTION {format.edition} 913 | { edition empty$ 914 | { "" } 915 | { edition is.number 916 | { entry.lang lang.zh = 917 | { edition " 版" * } 918 | { edition num.to.ordinal " ed." * } 919 | if$ 920 | } 921 | { entry.lang lang.en = 922 | { edition change.sentence.case 's := 923 | s "Revised" = s "Revised edition" = or 924 | { "Rev. ed." } 925 | { s " ed." *} 926 | if$ 927 | } 928 | { edition } 929 | if$ 930 | } 931 | if$ 932 | } 933 | if$ 934 | } 935 | 936 | FUNCTION {format.publisher} 937 | { publisher empty$ not 938 | { publisher } 939 | { school empty$ not 940 | { school } 941 | { organization empty$ not 942 | { organization } 943 | { institution empty$ not 944 | { institution } 945 | { "" } 946 | if$ 947 | } 948 | if$ 949 | } 950 | if$ 951 | } 952 | if$ 953 | } 954 | 955 | FUNCTION {format.address.publisher} 956 | { address empty$ not 957 | { address 958 | format.publisher empty$ not 959 | { bbl.colon * format.publisher * } 960 | { entry.is.electronic not show.missing.address.publisher and 961 | { bbl.colon * bbl.sine.nomine * } 962 | 'skip$ 963 | if$ 964 | } 965 | if$ 966 | } 967 | { entry.is.electronic not show.missing.address.publisher and 968 | { format.publisher empty$ not 969 | { bbl.sine.loco bbl.colon * format.publisher * } 970 | { bbl.sine.loco.sine.nomine } 971 | if$ 972 | } 973 | { format.publisher empty$ not 974 | { format.publisher } 975 | { "" } 976 | if$ 977 | } 978 | if$ 979 | } 980 | if$ 981 | } 982 | 983 | FUNCTION {extract.before.dash} 984 | { duplicate$ empty$ 985 | { pop$ "" } 986 | { 's := 987 | #1 'charptr := 988 | s text.length$ #1 + 'len := 989 | { charptr len < 990 | s charptr #1 substring$ "-" = not 991 | and 992 | } 993 | { charptr #1 + 'charptr := } 994 | while$ 995 | s #1 charptr #1 - substring$ 996 | } 997 | if$ 998 | } 999 | 1000 | FUNCTION {extract.after.dash} 1001 | { duplicate$ empty$ 1002 | { pop$ "" } 1003 | { 's := 1004 | #1 'charptr := 1005 | s text.length$ #1 + 'len := 1006 | { charptr len < 1007 | s charptr #1 substring$ "-" = not 1008 | and 1009 | } 1010 | { charptr #1 + 'charptr := } 1011 | while$ 1012 | { charptr len < 1013 | s charptr #1 substring$ "-" = 1014 | and 1015 | } 1016 | { charptr #1 + 'charptr := } 1017 | while$ 1018 | s charptr global.max$ substring$ 1019 | } 1020 | if$ 1021 | } 1022 | 1023 | FUNCTION {contains.dash} 1024 | { duplicate$ empty$ 1025 | { pop$ #0 } 1026 | { 's := 1027 | { s empty$ not 1028 | s #1 #1 substring$ "-" = not 1029 | and 1030 | } 1031 | { s #2 global.max$ substring$ 's := } 1032 | while$ 1033 | s empty$ not 1034 | } 1035 | if$ 1036 | } 1037 | 1038 | FUNCTION {format.year} 1039 | { year empty$ not 1040 | { year extract.before.dash } 1041 | { date empty$ not 1042 | { date extract.before.dash } 1043 | { "empty year in " cite$ * warning$ 1044 | urldate empty$ not 1045 | { "[" urldate extract.before.dash * "]" * } 1046 | { "" } 1047 | if$ 1048 | } 1049 | if$ 1050 | } 1051 | if$ 1052 | extra.label * 1053 | } 1054 | 1055 | FUNCTION {format.date} 1056 | { type$ "patent" = type$ "newspaper" = or 1057 | date empty$ not and 1058 | { date } 1059 | { year } 1060 | if$ 1061 | } 1062 | 1063 | FUNCTION {format.editdate} 1064 | { date empty$ not 1065 | { "\allowbreak(" date * ")" * } 1066 | { "" } 1067 | if$ 1068 | } 1069 | 1070 | FUNCTION {format.urldate} 1071 | { urldate empty$ not entry.is.electronic and 1072 | { "\allowbreak[" urldate * "]" * } 1073 | { "" } 1074 | if$ 1075 | } 1076 | 1077 | FUNCTION {hyphenate} 1078 | { 't := 1079 | "" 1080 | { t empty$ not } 1081 | { t #1 #1 substring$ "-" = 1082 | { "-" * 1083 | { t #1 #1 substring$ "-" = } 1084 | { t #2 global.max$ substring$ 't := } 1085 | while$ 1086 | } 1087 | { t #1 #1 substring$ * 1088 | t #2 global.max$ substring$ 't := 1089 | } 1090 | if$ 1091 | } 1092 | while$ 1093 | } 1094 | 1095 | FUNCTION {format.pages} 1096 | { pages empty$ 1097 | { "" } 1098 | { pages hyphenate } 1099 | if$ 1100 | } 1101 | 1102 | FUNCTION {format.journal.volume} 1103 | { volume empty$ not 1104 | { bold.journal.volume 1105 | { "\textbf{" volume * "}" * } 1106 | { volume } 1107 | if$ 1108 | } 1109 | { "" } 1110 | if$ 1111 | } 1112 | 1113 | FUNCTION {format.journal.number} 1114 | { number empty$ not 1115 | { "\penalty0 (" number * ")" * } 1116 | { "" } 1117 | if$ 1118 | } 1119 | 1120 | FUNCTION {format.journal.pages} 1121 | { pages empty$ 1122 | { "" } 1123 | { ":\penalty0 " pages hyphenate * } 1124 | if$ 1125 | } 1126 | 1127 | FUNCTION {format.periodical.year.volume.number} 1128 | { year empty$ not 1129 | { year extract.before.dash } 1130 | { "empty year in periodical " cite$ * warning$ } 1131 | if$ 1132 | volume empty$ not 1133 | { ", " * volume extract.before.dash * } 1134 | 'skip$ 1135 | if$ 1136 | number empty$ not 1137 | { "\penalty0 (" * number extract.before.dash * ")" * } 1138 | 'skip$ 1139 | if$ 1140 | year contains.dash 1141 | { "--" * 1142 | year extract.after.dash empty$ 1143 | volume extract.after.dash empty$ and 1144 | number extract.after.dash empty$ and not 1145 | { year extract.after.dash empty$ not 1146 | { year extract.after.dash * } 1147 | { year extract.before.dash * } 1148 | if$ 1149 | volume empty$ not 1150 | { ", " * volume extract.after.dash * } 1151 | 'skip$ 1152 | if$ 1153 | number empty$ not 1154 | { "\penalty0 (" * number extract.after.dash * ")" * } 1155 | 'skip$ 1156 | if$ 1157 | } 1158 | 'skip$ 1159 | if$ 1160 | } 1161 | 'skip$ 1162 | if$ 1163 | } 1164 | 1165 | FUNCTION {check.url} 1166 | { url empty$ not 1167 | { "\url{" url * "}" * 'entry.url := 1168 | #1 'entry.is.electronic := 1169 | } 1170 | { howpublished empty$ not 1171 | { howpublished #1 #5 substring$ "\url{" = 1172 | { howpublished 'entry.url := 1173 | #1 'entry.is.electronic := 1174 | } 1175 | 'skip$ 1176 | if$ 1177 | } 1178 | { note empty$ not 1179 | { note #1 #5 substring$ "\url{" = 1180 | { note 'entry.url := 1181 | #1 'entry.is.electronic := 1182 | } 1183 | 'skip$ 1184 | if$ 1185 | } 1186 | 'skip$ 1187 | if$ 1188 | } 1189 | if$ 1190 | } 1191 | if$ 1192 | } 1193 | 1194 | FUNCTION {format.url} 1195 | { entry.url empty$ not 1196 | { new.block entry.url } 1197 | { "" } 1198 | if$ 1199 | } 1200 | 1201 | FUNCTION {check.doi} 1202 | { doi empty$ not 1203 | { #1 'entry.is.electronic := } 1204 | 'skip$ 1205 | if$ 1206 | } 1207 | 1208 | FUNCTION {is.in.url} 1209 | { 's := 1210 | s empty$ 1211 | { #1 } 1212 | { entry.url empty$ 1213 | { #0 } 1214 | { s text.length$ 'len := 1215 | entry.url text.length$ 'charptr := 1216 | { entry.url charptr len substring$ s = not 1217 | charptr #0 > 1218 | and 1219 | } 1220 | { charptr #1 - 'charptr := } 1221 | while$ 1222 | charptr 1223 | } 1224 | if$ 1225 | } 1226 | if$ 1227 | } 1228 | 1229 | FUNCTION {format.doi} 1230 | { "" 1231 | doi empty$ not show.doi and 1232 | { "" 's := 1233 | doi 't := 1234 | #0 'numnames := 1235 | { t empty$ not} 1236 | { t #1 #1 substring$ 'tmp.str := 1237 | tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or 1238 | { t #2 #1 substring$ empty$ 1239 | { s tmp.str * 's := } 1240 | 'skip$ 1241 | if$ 1242 | s empty$ s is.in.url or 1243 | 'skip$ 1244 | { numnames #1 + 'numnames := 1245 | numnames #1 > 1246 | { ", " * } 1247 | { "DOI: " * } 1248 | if$ 1249 | "\doi{" s * "}" * * 1250 | } 1251 | if$ 1252 | "" 's := 1253 | } 1254 | { s tmp.str * 's := } 1255 | if$ 1256 | t #2 global.max$ substring$ 't := 1257 | } 1258 | while$ 1259 | 's := 1260 | s empty$ not 1261 | { new.block s } 1262 | { "" } 1263 | if$ 1264 | } 1265 | 'skip$ 1266 | if$ 1267 | } 1268 | 1269 | FUNCTION {check.electronic} 1270 | { "" 'entry.url := 1271 | #0 'entry.is.electronic := 1272 | 'check.doi 1273 | 'skip$ 1274 | if$ 1275 | 'check.url 1276 | 'skip$ 1277 | if$ 1278 | medium empty$ not 1279 | { medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or 1280 | { #1 'entry.is.electronic := } 1281 | 'skip$ 1282 | if$ 1283 | } 1284 | 'skip$ 1285 | if$ 1286 | } 1287 | 1288 | FUNCTION {format.note} 1289 | { note empty$ not show.note and 1290 | { note } 1291 | { "" } 1292 | if$ 1293 | } 1294 | 1295 | FUNCTION {empty.misc.check} 1296 | { author empty$ title empty$ 1297 | year empty$ 1298 | and and 1299 | key empty$ not and 1300 | { "all relevant fields are empty in " cite$ * warning$ } 1301 | 'skip$ 1302 | if$ 1303 | } 1304 | 1305 | FUNCTION {monograph} 1306 | { output.bibitem 1307 | author empty$ not 1308 | { format.authors } 1309 | { editor empty$ not 1310 | { format.editors } 1311 | { "empty author and editor in " cite$ * warning$ 1312 | "" 1313 | } 1314 | if$ 1315 | } 1316 | if$ 1317 | output 1318 | new.block 1319 | format.series.vol.num.title "title" output.check 1320 | "M" set.entry.mark 1321 | format.mark "" output.after 1322 | new.block 1323 | format.translators output 1324 | new.sentence 1325 | format.edition output 1326 | new.block 1327 | format.address.publisher output 1328 | format.year "year" output.check 1329 | format.pages bbl.colon output.after 1330 | format.urldate "" output.after 1331 | format.url output 1332 | format.doi output 1333 | new.block 1334 | format.note output 1335 | fin.entry 1336 | } 1337 | 1338 | FUNCTION {incollection} 1339 | { output.bibitem 1340 | format.authors output 1341 | author format.key output 1342 | new.block 1343 | format.title "title" output.check 1344 | "M" set.entry.mark 1345 | format.mark "" output.after 1346 | new.block 1347 | format.translators output 1348 | new.slash 1349 | format.editors output 1350 | new.block 1351 | format.series.vol.num.booktitle "booktitle" output.check 1352 | new.block 1353 | format.edition output 1354 | new.block 1355 | format.address.publisher output 1356 | format.year "year" output.check 1357 | format.pages bbl.colon output.after 1358 | format.urldate "" output.after 1359 | format.url output 1360 | format.doi output 1361 | new.block 1362 | format.note output 1363 | fin.entry 1364 | } 1365 | 1366 | FUNCTION {periodical} 1367 | { output.bibitem 1368 | format.authors output 1369 | author format.key output 1370 | new.block 1371 | format.title "title" output.check 1372 | "J" set.entry.mark 1373 | format.mark "" output.after 1374 | new.block 1375 | format.periodical.year.volume.number output 1376 | new.block 1377 | format.address.publisher output 1378 | format.date "year" output.check 1379 | format.urldate "" output.after 1380 | format.url output 1381 | format.doi output 1382 | new.block 1383 | format.note output 1384 | fin.entry 1385 | } 1386 | 1387 | FUNCTION {article} 1388 | { output.bibitem 1389 | format.authors output 1390 | author format.key output 1391 | new.block 1392 | format.title "title" output.check 1393 | "J" set.entry.mark 1394 | format.mark "" output.after 1395 | new.block 1396 | format.journal "journal" output.check 1397 | format.date "year" output.check 1398 | format.journal.volume output 1399 | format.journal.number "" output.after 1400 | format.journal.pages "" output.after 1401 | format.urldate "" output.after 1402 | format.url output 1403 | format.doi output 1404 | new.block 1405 | format.note output 1406 | fin.entry 1407 | } 1408 | 1409 | FUNCTION {patent} 1410 | { output.bibitem 1411 | format.authors output 1412 | author format.key output 1413 | new.block 1414 | format.title "title" output.check 1415 | "P" set.entry.mark 1416 | format.mark "" output.after 1417 | new.block 1418 | format.date "year" output.check 1419 | format.urldate "" output.after 1420 | format.url output 1421 | format.doi output 1422 | new.block 1423 | format.note output 1424 | fin.entry 1425 | } 1426 | 1427 | FUNCTION {electronic} 1428 | { #1 #1 check.electronic 1429 | #1 'entry.is.electronic := 1430 | output.bibitem 1431 | format.authors output 1432 | author format.key output 1433 | new.block 1434 | format.series.vol.num.title "title" output.check 1435 | "EB" set.entry.mark 1436 | format.mark "" output.after 1437 | new.block 1438 | format.address.publisher output 1439 | date empty$ 1440 | { format.date output } 1441 | 'skip$ 1442 | if$ 1443 | format.pages bbl.colon output.after 1444 | format.editdate "" output.after 1445 | format.urldate "" output.after 1446 | format.url output 1447 | format.doi output 1448 | new.block 1449 | format.note output 1450 | fin.entry 1451 | } 1452 | 1453 | FUNCTION {misc} 1454 | { journal empty$ not 1455 | 'article 1456 | { booktitle empty$ not 1457 | 'incollection 1458 | { publisher empty$ not 1459 | 'monograph 1460 | { entry.is.electronic 1461 | 'electronic 1462 | { "Z" set.entry.mark 1463 | monograph 1464 | } 1465 | if$ 1466 | } 1467 | if$ 1468 | } 1469 | if$ 1470 | } 1471 | if$ 1472 | empty.misc.check 1473 | } 1474 | 1475 | FUNCTION {archive} 1476 | { "A" set.entry.mark 1477 | misc 1478 | } 1479 | 1480 | FUNCTION {book} { monograph } 1481 | 1482 | FUNCTION {booklet} { book } 1483 | 1484 | FUNCTION {collection} 1485 | { "G" set.entry.mark 1486 | monograph 1487 | } 1488 | 1489 | FUNCTION {database} 1490 | { "DB" set.entry.mark 1491 | electronic 1492 | } 1493 | 1494 | FUNCTION {dataset} 1495 | { "DS" set.entry.mark 1496 | electronic 1497 | } 1498 | 1499 | FUNCTION {inbook} { book } 1500 | 1501 | FUNCTION {inproceedings} 1502 | { "C" set.entry.mark 1503 | incollection 1504 | } 1505 | 1506 | FUNCTION {conference} { inproceedings } 1507 | 1508 | FUNCTION {map} 1509 | { "CM" set.entry.mark 1510 | misc 1511 | } 1512 | 1513 | FUNCTION {manual} { monograph } 1514 | 1515 | FUNCTION {mastersthesis} 1516 | { "D" set.entry.mark 1517 | monograph 1518 | } 1519 | 1520 | FUNCTION {newspaper} 1521 | { "N" set.entry.mark 1522 | article 1523 | } 1524 | 1525 | FUNCTION {online} 1526 | { "EB" set.entry.mark 1527 | electronic 1528 | } 1529 | 1530 | FUNCTION {phdthesis} { mastersthesis } 1531 | 1532 | FUNCTION {proceedings} 1533 | { "C" set.entry.mark 1534 | monograph 1535 | } 1536 | 1537 | FUNCTION {software} 1538 | { "CP" set.entry.mark 1539 | electronic 1540 | } 1541 | 1542 | FUNCTION {standard} 1543 | { "S" set.entry.mark 1544 | misc 1545 | } 1546 | 1547 | FUNCTION {techreport} 1548 | { "R" set.entry.mark 1549 | misc 1550 | } 1551 | 1552 | FUNCTION {unpublished} 1553 | { "Z" set.entry.mark 1554 | misc 1555 | } 1556 | 1557 | FUNCTION {default.type} { misc } 1558 | 1559 | MACRO {jan} {"January"} 1560 | 1561 | MACRO {feb} {"February"} 1562 | 1563 | MACRO {mar} {"March"} 1564 | 1565 | MACRO {apr} {"April"} 1566 | 1567 | MACRO {may} {"May"} 1568 | 1569 | MACRO {jun} {"June"} 1570 | 1571 | MACRO {jul} {"July"} 1572 | 1573 | MACRO {aug} {"August"} 1574 | 1575 | MACRO {sep} {"September"} 1576 | 1577 | MACRO {oct} {"October"} 1578 | 1579 | MACRO {nov} {"November"} 1580 | 1581 | MACRO {dec} {"December"} 1582 | 1583 | MACRO {acmcs} {"ACM Computing Surveys"} 1584 | 1585 | MACRO {acta} {"Acta Informatica"} 1586 | 1587 | MACRO {cacm} {"Communications of the ACM"} 1588 | 1589 | MACRO {ibmjrd} {"IBM Journal of Research and Development"} 1590 | 1591 | MACRO {ibmsj} {"IBM Systems Journal"} 1592 | 1593 | MACRO {ieeese} {"IEEE Transactions on Software Engineering"} 1594 | 1595 | MACRO {ieeetc} {"IEEE Transactions on Computers"} 1596 | 1597 | MACRO {ieeetcad} 1598 | {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} 1599 | 1600 | MACRO {ipl} {"Information Processing Letters"} 1601 | 1602 | MACRO {jacm} {"Journal of the ACM"} 1603 | 1604 | MACRO {jcss} {"Journal of Computer and System Sciences"} 1605 | 1606 | MACRO {scp} {"Science of Computer Programming"} 1607 | 1608 | MACRO {sicomp} {"SIAM Journal on Computing"} 1609 | 1610 | MACRO {tocs} {"ACM Transactions on Computer Systems"} 1611 | 1612 | MACRO {tods} {"ACM Transactions on Database Systems"} 1613 | 1614 | MACRO {tog} {"ACM Transactions on Graphics"} 1615 | 1616 | MACRO {toms} {"ACM Transactions on Mathematical Software"} 1617 | 1618 | MACRO {toois} {"ACM Transactions on Office Information Systems"} 1619 | 1620 | MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} 1621 | 1622 | MACRO {tcs} {"Theoretical Computer Science"} 1623 | 1624 | FUNCTION {sortify} 1625 | { purify$ 1626 | "l" change.case$ 1627 | } 1628 | 1629 | FUNCTION {chop.word} 1630 | { 's := 1631 | 'len := 1632 | s #1 len substring$ = 1633 | { s len #1 + global.max$ substring$ } 1634 | 's 1635 | if$ 1636 | } 1637 | 1638 | FUNCTION {format.lab.names} 1639 | { 's := 1640 | s #1 "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 1641 | t get.str.lang 'name.lang := 1642 | name.lang lang.en = 1643 | { t #1 "{vv~}{ll}" format.name$} 1644 | { t #1 "{ll}{ff}" format.name$} 1645 | if$ 1646 | s num.names$ #1 > 1647 | { bbl.space * citation.et.al * } 1648 | 'skip$ 1649 | if$ 1650 | } 1651 | 1652 | FUNCTION {author.key.label} 1653 | { author empty$ 1654 | { key empty$ 1655 | { cite$ #1 #3 substring$ } 1656 | 'key 1657 | if$ 1658 | } 1659 | { author format.lab.names } 1660 | if$ 1661 | } 1662 | 1663 | FUNCTION {author.editor.key.label} 1664 | { author empty$ 1665 | { editor empty$ 1666 | { key empty$ 1667 | { cite$ #1 #3 substring$ } 1668 | 'key 1669 | if$ 1670 | } 1671 | { editor format.lab.names } 1672 | if$ 1673 | } 1674 | { author format.lab.names } 1675 | if$ 1676 | } 1677 | 1678 | FUNCTION {author.key.organization.label} 1679 | { author empty$ 1680 | { key empty$ 1681 | { organization empty$ 1682 | { cite$ #1 #3 substring$ } 1683 | { "The " #4 organization chop.word #3 text.prefix$ } 1684 | if$ 1685 | } 1686 | 'key 1687 | if$ 1688 | } 1689 | { author format.lab.names } 1690 | if$ 1691 | } 1692 | 1693 | FUNCTION {editor.key.organization.label} 1694 | { editor empty$ 1695 | { key empty$ 1696 | { organization empty$ 1697 | { cite$ #1 #3 substring$ } 1698 | { "The " #4 organization chop.word #3 text.prefix$ } 1699 | if$ 1700 | } 1701 | 'key 1702 | if$ 1703 | } 1704 | { editor format.lab.names } 1705 | if$ 1706 | } 1707 | 1708 | FUNCTION {calc.short.authors} 1709 | { type$ "book" = 1710 | type$ "inbook" = 1711 | or 1712 | 'author.editor.key.label 1713 | { type$ "collection" = 1714 | type$ "proceedings" = 1715 | or 1716 | { editor empty$ not 1717 | 'editor.key.organization.label 1718 | 'author.key.organization.label 1719 | if$ 1720 | } 1721 | 'author.key.label 1722 | if$ 1723 | } 1724 | if$ 1725 | 'short.list := 1726 | } 1727 | 1728 | FUNCTION {calc.label} 1729 | { calc.short.authors 1730 | short.list 1731 | "(" 1732 | * 1733 | format.year duplicate$ empty$ 1734 | short.list key field.or.null = or 1735 | { pop$ "" } 1736 | 'skip$ 1737 | if$ 1738 | * 1739 | 'label := 1740 | } 1741 | 1742 | INTEGERS { seq.num } 1743 | 1744 | FUNCTION {init.seq} 1745 | { #0 'seq.num :=} 1746 | 1747 | FUNCTION {int.to.fix} 1748 | { "000000000" swap$ int.to.str$ * 1749 | #-1 #10 substring$ 1750 | } 1751 | 1752 | FUNCTION {presort} 1753 | { set.entry.lang 1754 | set.entry.numbered 1755 | show.url show.doi check.electronic 1756 | calc.label 1757 | label sortify 1758 | " " 1759 | * 1760 | seq.num #1 + 'seq.num := 1761 | seq.num int.to.fix 1762 | 'sort.label := 1763 | sort.label * 1764 | #1 entry.max$ substring$ 1765 | 'sort.key$ := 1766 | } 1767 | 1768 | STRINGS { longest.label last.label next.extra } 1769 | 1770 | INTEGERS { longest.label.width last.extra.num number.label } 1771 | 1772 | FUNCTION {initialize.longest.label} 1773 | { "" 'longest.label := 1774 | #0 int.to.chr$ 'last.label := 1775 | "" 'next.extra := 1776 | #0 'longest.label.width := 1777 | #0 'last.extra.num := 1778 | #0 'number.label := 1779 | } 1780 | 1781 | FUNCTION {forward.pass} 1782 | { last.label label = 1783 | { last.extra.num #1 + 'last.extra.num := 1784 | last.extra.num int.to.chr$ 'extra.label := 1785 | } 1786 | { "a" chr.to.int$ 'last.extra.num := 1787 | "" 'extra.label := 1788 | label 'last.label := 1789 | } 1790 | if$ 1791 | number.label #1 + 'number.label := 1792 | } 1793 | 1794 | FUNCTION {reverse.pass} 1795 | { next.extra "b" = 1796 | { "a" 'extra.label := } 1797 | 'skip$ 1798 | if$ 1799 | extra.label 'next.extra := 1800 | extra.label 1801 | duplicate$ empty$ 1802 | 'skip$ 1803 | { "{\natexlab{" swap$ * "}}" * } 1804 | if$ 1805 | 'extra.label := 1806 | label extra.label * 'label := 1807 | } 1808 | 1809 | FUNCTION {bib.sort.order} 1810 | { sort.label 'sort.key$ := 1811 | } 1812 | 1813 | FUNCTION {begin.bib} 1814 | { preamble$ empty$ 1815 | 'skip$ 1816 | { preamble$ write$ newline$ } 1817 | if$ 1818 | "\begin{thebibliography}{" number.label int.to.str$ * "}" * 1819 | write$ newline$ 1820 | "\providecommand{\natexlab}[1]{#1}" 1821 | write$ newline$ 1822 | "\providecommand{\url}[1]{#1}" 1823 | write$ newline$ 1824 | "\expandafter\ifx\csname urlstyle\endcsname\relax\relax\else" 1825 | write$ newline$ 1826 | " \urlstyle{same}\fi" 1827 | write$ newline$ 1828 | show.doi 1829 | { "\providecommand{\href}[2]{\url{#2}}" 1830 | write$ newline$ 1831 | "\providecommand{\doi}[1]{\href{https://doi.org/#1}{#1}}" 1832 | write$ newline$ 1833 | } 1834 | 'skip$ 1835 | if$ 1836 | } 1837 | 1838 | FUNCTION {end.bib} 1839 | { newline$ 1840 | "\end{thebibliography}" write$ newline$ 1841 | } 1842 | 1843 | READ 1844 | 1845 | EXECUTE {init.state.consts} 1846 | 1847 | EXECUTE {load.config} 1848 | 1849 | EXECUTE {init.seq} 1850 | 1851 | ITERATE {presort} 1852 | 1853 | SORT 1854 | 1855 | EXECUTE {initialize.longest.label} 1856 | 1857 | ITERATE {forward.pass} 1858 | 1859 | REVERSE {reverse.pass} 1860 | 1861 | ITERATE {bib.sort.order} 1862 | 1863 | SORT 1864 | 1865 | EXECUTE {begin.bib} 1866 | 1867 | ITERATE {call.type$} 1868 | 1869 | EXECUTE {end.bib} 1870 | -------------------------------------------------------------------------------- /ouclogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ouc-ocean-group/oucthesis/1831436b9bca1ee99ed2a7bececee30e6355b71e/ouclogo.png -------------------------------------------------------------------------------- /oucthesis.cls: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `oucthesis.cls', 3 | %% 4 | %% The original source files were: 5 | %% 6 | %% Copyright 7 | %% ouc (C) 2015-2019 Created by Zeping Lee 8 | %% OUC version modified my Geo 9 | %% This file may be distributed and/or modified under the 10 | %% conditions of the LaTeX Project Public License, either version 1.3c 11 | %% of this license or (at your option) any later version. 12 | %% The latest version of this license is in 13 | %% https://www.latex-project.org/lppl.txt 14 | %% and version 1.3c or later is part of all distributions of LaTeX 15 | %% version 2005/12/01 or later. 16 | %% 17 | 18 | \NeedsTeXFormat{LaTeX2e}[1999/12/01] 19 | \ProvidesClass{oucthesis}[2019/12/18 v1.0.0 OUC Thesis Template] 20 | 21 | \RequirePackage{ifxetex} 22 | \RequireXeTeX 23 | 24 | \newif\ifouc@pdf 25 | \DeclareOption{print}{\ouc@pdffalse} 26 | \DeclareOption{pdf}{\ouc@pdftrue} 27 | 28 | \newif\ifouc@enmac 29 | \ouc@enmacfalse 30 | \DeclareOption{enmac}{\ouc@enmactrue} 31 | 32 | \newif\ifouc@count 33 | \ouc@countfalse 34 | \DeclareOption{count}{\ouc@counttrue} 35 | 36 | \PassOptionsToClass{openany}{ctexbook} 37 | \DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexbook}} 38 | \ExecuteOptions{print} 39 | \ProcessOptions\relax 40 | 41 | 42 | \PassOptionsToClass{scheme=chinese}{ctexbook} 43 | \PassOptionsToPackage{quiet}{xeCJK} 44 | \LoadClass[UTF8,a4paper,zihao=-4]{ctexbook}[2017/04/01] 45 | \PassOptionsToClass{scheme=chinese}{ctexbook} 46 | \@ifclasslater{ctexbook}{2017/04/01}{}{ 47 | \ClassError{oucthesis}{% 48 | This template requires TeX Live\MessageBreak 2017 or later version}{} 49 | } 50 | % =============================================== 51 | % Required Package 52 | \RequirePackage{amsmath} 53 | \RequirePackage{unicode-math} 54 | \RequirePackage[driver=xetex]{geometry} 55 | \RequirePackage{graphicx} 56 | \RequirePackage{fancyhdr} 57 | \RequirePackage{color} 58 | \RequirePackage{titletoc} 59 | \RequirePackage{caption} 60 | \RequirePackage[perpage]{footmisc} 61 | \RequirePackage{url} 62 | \RequirePackage{calc} 63 | \RequirePackage{dashrule} 64 | \RequirePackage{algorithm} 65 | \RequirePackage{algorithmicx} 66 | \RequirePackage{natbib} 67 | \RequirePackage{bashful} 68 | \RequirePackage{xeCJKfntef} 69 | \xeCJKsetup { underline/skip = false} 70 | \PassOptionsToPackage{sort&compress}{natbib} 71 | \ifouc@pdf 72 | \RequirePackage{hyperref} 73 | \else 74 | \fi 75 | 76 | 77 | % =============================================== 78 | % Changable parameters 79 | \newcommand\ouc@atendpackage{\csname ctex_at_end_package:nn\endcsname} 80 | \ouc@atendpackage{hyperref}{ 81 | \hypersetup{ 82 | bookmarksnumbered = true, 83 | bookmarksopen = true, 84 | bookmarksopenlevel = 1, 85 | linktoc = all, 86 | unicode = true, 87 | psdextra = true, 88 | } 89 | \ifouc@pdf 90 | \hypersetup{ 91 | colorlinks = true, 92 | allcolors = cyan, 93 | } 94 | \else 95 | \hypersetup{hidelinks} 96 | \fi 97 | } 98 | 99 | % =============================================== 100 | % Word Count 101 | \newcommand{\wordcount}[0]{% 102 | \immediate\write18{texcount -1 -sum main.tex > words.count }% 103 | \input{words.count}% 104 | } 105 | 106 | % =============================================== 107 | % Custom Command 108 | 109 | \renewenvironment{titlepage}{% 110 | \clearpage 111 | \thispagestyle{empty}% 112 | }{\clearpage} 113 | 114 | \newcommand\blankpage{% 115 | \null 116 | \thispagestyle{empty}% 117 | \addtocounter{page}{-1}% 118 | \newpage 119 | } 120 | 121 | \newcommand\zhspace[1][1]{\hspace{#1\ccwd}} 122 | 123 | % =============================================== 124 | % Fonts Setting 125 | 126 | \newcommand{\ouc@fontset}{\csname g__ctex_fontset_tl\endcsname} 127 | \ifouc@enmac 128 | \renewcommand{\ouc@fontset}{mac} 129 | \fi 130 | 131 | \ifthenelse{\equal{\ouc@fontset}{fandol}}{ 132 | \setmainfont[ 133 | Extension = .otf, 134 | UprightFont = *-regular, 135 | BoldFont = *-bold, 136 | ItalicFont = *-italic, 137 | BoldItalicFont = *-bolditalic, 138 | ]{texgyretermes} 139 | \setsansfont[ 140 | Extension = .otf, 141 | UprightFont = *-regular, 142 | BoldFont = *-bold, 143 | ItalicFont = *-italic, 144 | BoldItalicFont = *-bolditalic, 145 | ]{texgyreheros} 146 | \setmonofont[ 147 | Extension = .otf, 148 | UprightFont = *-regular, 149 | BoldFont = *-bold, 150 | ItalicFont = *-italic, 151 | BoldItalicFont = *-bolditalic, 152 | Scale = MatchLowercase, 153 | ]{texgyrecursor} 154 | \ClassWarningNoLine{oucthesis}{% 155 | You are using Fandol font family.\MessageBreak 156 | Some glyphs may be missing.\MessageBreak 157 | Please switch to a high-quality font set 158 | } 159 | }{ 160 | \setmainfont{Times New Roman} 161 | \setsansfont{Arial} 162 | \ifthenelse{\equal{\ouc@fontset}{mac}}{ 163 | \setmonofont[Scale=MatchLowercase]{Menlo} 164 | }{ 165 | \setmonofont[Scale=MatchLowercase]{Courier New} 166 | } 167 | } 168 | 169 | \ifthenelse{\equal{\ouc@fontset}{mac}}{ 170 | \setCJKmainfont[ 171 | UprightFont = * Light, 172 | BoldFont = * Bold, 173 | ItalicFont = Kaiti SC, 174 | BoldItalicFont = Kaiti SC Bold, 175 | ]{Songti SC} 176 | \setCJKsansfont[BoldFont=* Medium]{Heiti SC} 177 | \setCJKfamilyfont{zhsong}[ 178 | UprightFont = * Light, 179 | BoldFont = * Bold, 180 | ]{Songti SC} 181 | \setCJKfamilyfont{zhhei}[BoldFont=* Medium]{Heiti SC} 182 | \setCJKfamilyfont{zhkai}[BoldFont=* Bold]{Kaiti SC} 183 | \xeCJKsetwidth{‘’“”}{1em} 184 | }{ 185 | \xeCJKsetup{EmboldenFactor=2} 186 | \ifthenelse{\equal{\ouc@fontset}{windows}}{ 187 | \IfFileExists{C:/bootfont.bin}{ 188 | \setCJKmainfont[AutoFakeBold,ItalicFont=KaiTi_GB2312]{SimSun} 189 | \setCJKfamilyfont{zhkai}[AutoFakeBold]{KaiTi_GB2312} 190 | }{ 191 | \setCJKmainfont[AutoFakeBold,ItalicFont=KaiTi]{SimSun} 192 | \setCJKfamilyfont{zhkai}[AutoFakeBold]{KaiTi} 193 | } 194 | \setCJKsansfont[AutoFakeBold]{SimHei} 195 | \setCJKfamilyfont{zhsong}[AutoFakeBold]{SimSun} 196 | \setCJKfamilyfont{zhhei}[AutoFakeBold]{SimHei} 197 | }{ 198 | \ifthenelse{\equal{\ouc@fontset}{adobe}}{ 199 | \setCJKmainfont[ 200 | AutoFakeBold = true, 201 | ItalicFont = AdobeKaitiStd-Regular, 202 | ]{AdobeSongStd-Light} 203 | \setCJKsansfont[AutoFakeBold]{AdobeHeitiStd-Regular} 204 | \setCJKfamilyfont{zhsong}[AutoFakeBold]{AdobeSongStd-Light} 205 | \setCJKfamilyfont{zhhei}[AutoFakeBold]{AdobeHeitiStd-Regular} 206 | \setCJKfamilyfont{zhkai}[AutoFakeBold]{AdobeKaitiStd-Regular} 207 | }{} 208 | } 209 | } 210 | 211 | \newdimen\bp@ 212 | \bp@=1bp 213 | \renewcommand\normalsize{% 214 | \@setfontsize\normalsize{12\bp@}{23\bp@}% 215 | \abovedisplayskip 12\bp@ \@plus3\bp@ \@minus7\bp@ 216 | \abovedisplayshortskip \z@ \@plus3\bp@ 217 | \belowdisplayshortskip 6.5\bp@ \@plus3.5\bp@ \@minus3\bp@ 218 | \belowdisplayskip \abovedisplayskip 219 | \let\@listi\@listI 220 | } 221 | \normalsize 222 | \renewcommand\small{% 223 | \@setfontsize\small{10.5\bp@}{19.25\bp@}% 224 | \abovedisplayskip 10.5\bp@ \@plus3\bp@ \@minus6\bp@ 225 | \abovedisplayshortskip \z@ \@plus3\bp@ 226 | \belowdisplayshortskip 6.5\bp@ \@plus3.5\bp@ \@minus3\bp@ 227 | \belowdisplayskip \abovedisplayskip 228 | } 229 | \renewcommand\footnotesize{% 230 | \@setfontsize\footnotesize{9\bp@}{16.5\bp@}% 231 | \abovedisplayskip 9\bp@ \@plus2\bp@ \@minus5\bp@ 232 | \abovedisplayshortskip \z@ \@plus3\bp@ 233 | \belowdisplayshortskip 6\bp@ \@plus3\bp@ \@minus3\bp@ 234 | \belowdisplayskip \abovedisplayskip 235 | } 236 | \renewcommand\scriptsize{\@setfontsize\scriptsize{7.5\bp@}{13.75\bp@}} 237 | \renewcommand\tiny{\@setfontsize\tiny{6.5\bp@}{11.92\bp@}} 238 | \renewcommand\large{\@setfontsize\large{15\bp@}{27.5\bp@}} 239 | \renewcommand\Large{\@setfontsize\Large{18\bp@}{33\bp@}} 240 | \renewcommand\LARGE{\@setfontsize\LARGE{22\bp@}{40.33\bp@}} 241 | \renewcommand\huge{\@setfontsize\huge{24\bp@}{44\bp@}} 242 | \renewcommand\Huge{\@setfontsize\Huge{26\bp@}{47.67\bp@}} 243 | 244 | \linespread{1}\selectfont 245 | \newcommand\ouc@setchinese{% 246 | \xeCJKResetPunctClass 247 | } 248 | \newcommand\ouc@setenglish{% 249 | \xeCJKDeclareCharClass{HalfLeft}{"2018, "201C}% 250 | \xeCJKDeclareCharClass{HalfRight}{% 251 | "00B7, "2019, "201D, "2013, "2014, "2025, "2026, "2E3A% 252 | }% 253 | } 254 | \ouc@setchinese 255 | 256 | % =============================================== 257 | % Page Format 258 | 259 | \geometry{ 260 | paper = a4paper, 261 | vmargin = 2.54cm, 262 | hmargin = 3.17cm, 263 | headheight = 0.75cm, 264 | headsep = 0.29cm, 265 | footskip = 0.79cm, 266 | } 267 | \pagestyle{fancy} 268 | \let\sectionmark\@gobble 269 | \renewcommand\headrulewidth{0.5\p@} 270 | 271 | % =============================================== 272 | % Header Format 273 | \newcommand\ouc@wordcount{\wordcount} 274 | 275 | \newcommand\ouc@hf@font{\fontsize{9\bp@}{12\bp@}\selectfont} 276 | \newcommand\ouc@header{\@title} 277 | \fancypagestyle{title}{% 278 | \fancyhf{}% 279 | \fancyhead[C]{\ouc@hf@font\ouc@header}% 280 | \fancyfoot[C]{\ouc@hf@font\thepage}% 281 | \ifouc@count 282 | \fancyfoot[R]{\color{gray}\ouc@hf@font \ouc@wordcount}% 283 | \fi 284 | } 285 | \fancypagestyle{plain}{% 286 | \fancyhf{}% 287 | \renewcommand{\headrulewidth}{0pt} 288 | \fancyhead[C]{} 289 | \fancyfoot[C]{\ouc@hf@font\thepage}% 290 | } 291 | \pagestyle{title} 292 | 293 | % =============================================== 294 | % Pre Content Format 295 | \ctexset{ 296 | chapter = { 297 | name = {,}, 298 | format = \centering\sffamily\fontsize{16\bp@}{26.67\bp@}\selectfont, 299 | nameformat = {}, 300 | number = \thechapter, 301 | aftername = \hspace{\ccwd}, 302 | beforeskip = 24\bp@, 303 | afterskip = 18\bp@, 304 | fixskip = true, 305 | }, 306 | } 307 | 308 | % =============================================== 309 | % Define Information 310 | 311 | \newcommand*{\entitle}[1]{ 312 | \def\ouc@entitle{#1} 313 | } 314 | \newcommand*{\advisor}[1]{ 315 | \def\ouc@advisor{#1} 316 | } 317 | \newcommand*{\mythanks}[1]{ 318 | \def\ouc@mythanks{#1} 319 | } 320 | 321 | \newcommand*{\keywords}[1]{ 322 | \def\ouc@keywords{#1} 323 | } 324 | 325 | \newcommand*{\enkeywords}[1]{ 326 | \def\ouc@enkeywords{#1} 327 | } 328 | % =============================================== 329 | % Define Page Style 330 | % Ackonwlegment 331 | \newcommand\ouc@makeacknowledgment{ 332 | \ouc@setchinese 333 | \begin{titlepage}% 334 | \centering 335 | {\sffamily\fontsize{18\bp@}{20\bp@}\ouc@mythanks} 336 | \parbox[t][0.6cm][t]{\textwidth}{% 337 | \raggedleft\sffamily\fontsize{18\bp@}{20\bp@}\selectfont 338 | \vspace{1em} 339 | \hdashrule[0.5ex]{2.4cm}{1.5pt}{1.5mm 1pt}\@author\par}\par 340 | \end{titlepage} 341 | \ifouc@pdf 342 | \else 343 | \blankpage 344 | \fi 345 | } 346 | 347 | % Preface 348 | \newcommand\ouc@makepreface{ 349 | \ouc@setchinese 350 | \begin{titlepage}% 351 | \centering 352 | \vspace*{36\bp@} 353 | \sffamily\fontsize{18\bp@}{20\bp@}\@title 354 | 355 | \vspace{360\bp@} 356 | \parbox[t][][t]{\textwidth}{% 357 | \raggedleft\songti\normalsize\selectfont 358 | 学位论文完成日期:\uline{\makebox[40mm]{}}\par 359 | 指导教师签字:\uline{\makebox[40mm]{}}\par 360 | 答辩委员会成员签字:\uline{\makebox[40mm]{}}\par 361 | \uline{\makebox[40mm]{}}\par 362 | \uline{\makebox[40mm]{}}\par 363 | \uline{\makebox[40mm]{}}\par 364 | \uline{\makebox[40mm]{}}\par 365 | \uline{\makebox[40mm]{}}\par 366 | \uline{\makebox[40mm]{}}\par 367 | 368 | }\par 369 | \end{titlepage} 370 | \ifouc@pdf 371 | \else 372 | \blankpage 373 | \fi 374 | } 375 | 376 | % Copyright 377 | 378 | \newcommand\ouc@makecopyright{ 379 | \ouc@setchinese 380 | \begin{titlepage}% 381 | { 382 | \centering\bf\large 383 | \vspace*{24\bp@} 384 | 独\zhspace[1]创\zhspace[1]声\zhspace[1]明 \par 385 | } 386 | 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含未获 \CJKunderline{(注:如没有其他需要特别声明的,本栏可空)}或其他教育机构的学位或证书使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。 387 | \par 388 | \vspace{4em} 389 | \rightline{学位论文作者签名:\zhspace[5]签字日期:\zhspace[2]年\zhspace[1.5]月\zhspace[1.5]日\ } 390 | \par 391 | 392 | \noindent\hdashrule[0.5ex]{\textwidth}{0.5pt}{1.5mm 1pt} 393 | 394 | { 395 | \centering\bf\large 396 | 学位论文版权使用授权书 \par 397 | } 398 | 本学位论文作者完全了解学校有关保留、使用学位论文的规定,并同意以下事项:\par 399 | 1、学校有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。\par 400 | 2、学校可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。同时授权清华大学“中国学术期刊(光盘版)电子杂志社”用于出版和编入CNKI《中国知识资源总库》,授权中国科学技术信息研究所将本学位论文收录到《中国学位论文全文数据库》。(保密的学位论文在解密后适用本授权书) 401 | \par 402 | \vspace{4em} 403 | 学位论文作者签名:\zhspace[10]导师签字:\zhspace[8] \par 404 | \vspace{1em} 405 | \noindent 签字日期:\zhspace[2]年\zhspace[1.5]月\zhspace[1.5]日\zhspace[6]签字日期:\zhspace[2]年\zhspace[1.5]月\zhspace[1.5]日 \par 406 | 407 | \end{titlepage} 408 | \ifouc@pdf 409 | \else 410 | \blankpage 411 | \fi 412 | } 413 | 414 | % Abstract 415 | 416 | \NewDocumentCommand\ouc@chapter{o m}{% 417 | \IfValueTF{#1}{% 418 | \chaptermark{#1}% 419 | }{% 420 | \chaptermark{#2}% 421 | }% 422 | { 423 | \makeatletter\c@secnumdepth=-1\makeatother 424 | \chapter{#2} 425 | } 426 | } 427 | \newcommand\pagenumberingnoreset[1]{\gdef\thepage{\csname @#1\endcsname\c@page}} 428 | 429 | 430 | % Abstract 431 | \let\standardclearpage\clearpage 432 | \newenvironment{abstract}{% 433 | \clearpage 434 | \pagestyle{plain}% 435 | \pagenumberingnoreset{Roman} 436 | \ouc@setchinese 437 | \begin{center} 438 | \fontsize{16\bp@}{26.67\bp@}\sffamily\@title 439 | \par 440 | \vspace{1em} 441 | {摘\zhspace[1]要} 442 | \end{center} 443 | \let\clearpage\relax 444 | \let\clearpage\standardclearpage 445 | \vspace{1em} 446 | }{ 447 | \par\null\par\noindent\hangindent=4\ccwd\relax 448 | \sffamily\textbf{关键词:}\ouc@keywords 449 | \clearpage 450 | \pagestyle{title} 451 | \pagenumberingnoreset{arabic} 452 | } 453 | 454 | \newenvironment{enabstract}{% 455 | \clearpage 456 | \pagestyle{plain} 457 | \pagenumberingnoreset{Roman} 458 | \ouc@setenglish 459 | \begin{center} 460 | \fontsize{16\bp@}{26.67\bp@}\sffamily\ouc@entitle 461 | \par 462 | \vspace{1em} 463 | {Abstract} 464 | \end{center} 465 | \let\clearpage\relax 466 | \let\clearpage\standardclearpage 467 | \vspace{1em} 468 | }{ 469 | \par\null\par\noindent\hangindent=5.3em\relax 470 | \textbf{Key Words:} \ouc@enkeywords 471 | \clearpage 472 | \pagestyle{title} 473 | \pagenumberingnoreset{arabic} 474 | } 475 | 476 | % Toc 477 | \renewcommand{\contentsname}{\large 目\quad 录} 478 | \renewcommand\tableofcontents{% 479 | \pagestyle{empty} 480 | \chapter*{\contentsname}% 481 | \@starttoc{toc}% 482 | \clearpage 483 | \pagestyle{title} 484 | } 485 | 486 | \newcommand\ouc@leaders{\titlerule*[4\bp@]{\textperiodcentered}} 487 | \titlecontents{chapter} 488 | [\z@]{\fontsize{14\bp@}{25.67\bp@}\selectfont} 489 | {\contentspush{\thecontentslabel\unskip\hspace{\ccwd}}}{} 490 | { \ouc@leaders\contentspage} 491 | \titlecontents{section} 492 | [\ccwd]{\normalsize} 493 | {\contentspush{\thecontentslabel\hspace{\ccwd}}}{} 494 | { \ouc@leaders\contentspage} 495 | \titlecontents{subsection} 496 | [2\ccwd]{\normalsize} 497 | {\contentspush{\thecontentslabel\hspace{\ccwd}}}{} 498 | { \ouc@leaders\contentspage} 499 | 500 | 501 | \newcommand\makeprepage{% 502 | \ouc@makeacknowledgment 503 | \ouc@makepreface 504 | \ouc@makecopyright 505 | \setcounter{page}{1} 506 | } 507 | 508 | % =============================================== 509 | % Main Content Format 510 | 511 | \renewcommand\chapter{% 512 | \if@openright\cleardoublepage\else\clearpage\fi 513 | \global\@topnum\z@ 514 | \@afterindenttrue 515 | \secdef\@chapter\@schapter 516 | } 517 | \renewcommand\mainmatter{ 518 | \clearpage 519 | \pagestyle{title} 520 | \setcounter{page}{1} 521 | \ctexset{ 522 | chapter = { 523 | format = \sffamily\fontsize{16\bp@}{26.67\bp@}\selectfont, 524 | aftername = \zhspace[0.5], 525 | beforeskip = 1em, 526 | afterskip = 1.8em, 527 | fixskip = true, 528 | }, 529 | section = { 530 | format = \sffamily\fontsize{14\bp@}{25.67\bp@}\selectfont, 531 | aftername = \zhspace[0.5], 532 | afterskip = 1.2em, 533 | fixskip = true, 534 | }, 535 | subsection = { 536 | format = \fontsize{12\bp@}{22\bp@}\selectfont, 537 | aftername = \zhspace[0.5], 538 | afterskip = 1.2em, 539 | fixskip = true, 540 | indent = \z@, 541 | }, 542 | subsubsection = { 543 | format = \rmfamily\fontsize{12\bp@}{22\bp@}\selectfont, 544 | aftername = \zhspace[0.5], 545 | fixskip = true, 546 | indent = \ccwd, 547 | }, 548 | paragraph = { 549 | format = \rmfamily\fontsize{12\bp@}{22\bp@}\selectfont, 550 | aftername = {}, 551 | indent = \ccwd, 552 | }, 553 | } 554 | } 555 | 556 | % Caption Stype 557 | \renewcommand{\thetable}{\thechapter-\arabic{table}} 558 | \renewcommand{\thefigure}{\thechapter-\arabic{figure}} 559 | \counterwithin{algorithm}{chapter} 560 | \renewcommand{\thealgorithm}{\thechapter-\arabic{algorithm}} 561 | \floatname{algorithm}{算法} 562 | \DeclareCaptionLabelSeparator{space}{ } 563 | \captionsetup{ 564 | labelsep=space 565 | } 566 | 567 | \renewcommand{\theequation}{\arabic{chapter}-\arabic{equation}} 568 | \RequirePackage{mathtools} 569 | \newtagform{test}[]{式(}{)} 570 | \usetagform{test} 571 | 572 | % =============================================== 573 | % Tail Content Format 574 | \newcommand\makeafter{ 575 | \clearpage 576 | \ctexset{ 577 | chapter = { 578 | name = {,}, 579 | format = \centering\sffamily\fontsize{14\bp@}{25.67\bp@}\selectfont, 580 | nameformat = {}, 581 | number = \thechapter, 582 | aftername = \hspace{\ccwd}, 583 | beforeskip = 24\bp@, 584 | afterskip = 18\bp@, 585 | fixskip = true, 586 | }, 587 | section = { 588 | name = {,}, 589 | format = \centering\sffamily\normalsize\selectfont, 590 | nameformat = {}, 591 | number = \thechapter, 592 | aftername = \hspace{\ccwd}, 593 | beforeskip = 24\bp@, 594 | afterskip = 18\bp@, 595 | fixskip = true, 596 | }, 597 | } 598 | } 599 | 600 | \newcommand\bibstyle@super{\bibpunct{[}{]}{,}{s}{,}{\textsuperscript{,}}} 601 | \citestyle{super} 602 | \renewcommand\bibfont{\fontsize{10.5\bp@}{20\bp@}\selectfont} 603 | \setlength{\bibsep}{0\p@ \@plus.2\p@} 604 | \setlength{\bibhang}{2\ccwd} 605 | \renewcommand\@biblabel[1]{[#1]\hfill} 606 | 607 | \renewcommand\bibsection{% 608 | \makeafter 609 | \ouc@chapter{\bibname}% 610 | } 611 | 612 | \newenvironment{ackonwlegmentback}{% 613 | \clearpage 614 | \makeafter 615 | \ouc@setchinese 616 | \ouc@chapter{致\zhspace[1]谢} 617 | }{ 618 | \clearpage 619 | } 620 | 621 | \newenvironment{profile}{% 622 | \clearpage 623 | \makeafter 624 | \ouc@setchinese 625 | \ouc@chapter{个人简历、在学期间发表的学术论文与研究成果} 626 | }{ 627 | \clearpage 628 | } --------------------------------------------------------------------------------