├── .gitignore ├── LICENSE ├── OfficialTemplate ├── 附件8:本科毕业设计(论文)正文模版.doc └── 附件8:本科毕业设计(论文)正文模版.pdf ├── README.md ├── README.zh-CN.md ├── Reference_format_setting_source.md ├── gbt7714-numerical.bst ├── main.pdf ├── main.tex ├── nwputhesis.cls ├── picture ├── nwpuheader.png ├── nwpulogo.png └── test.png ├── reference └── reference.bib ├── simhei.ttf └── simsun.ttc /.gitignore: -------------------------------------------------------------------------------- 1 | *.aux 2 | *.bbl 3 | *.blg 4 | *.fdb_latexmk 5 | *.fls 6 | *.log 7 | *.out 8 | *.toc 9 | *.xdv 10 | *.synctex.gz -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 lifunction 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /OfficialTemplate/附件8:本科毕业设计(论文)正文模版.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/OfficialTemplate/附件8:本科毕业设计(论文)正文模版.doc -------------------------------------------------------------------------------- /OfficialTemplate/附件8:本科毕业设计(论文)正文模版.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/OfficialTemplate/附件8:本科毕业设计(论文)正文模版.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NPU Undergraduate Thesis LaTeX Template (2025) ( 西北工业大学 2025 本科毕业设计 LaTeX 模板 (中文) ) 2 | 3 | ![TeX-Document](https://img.shields.io/badge/TeX-Document-3D6117.svg) 4 | ![Status](https://img.shields.io/badge/status-complete-brightgreen.svg) 5 | [![](https://img.shields.io/badge/Version-v0.8.0-{徽标颜色}.svg)]({linkUrl}) 6 | 7 | ------ 8 | [**English**](README.md) | [**中文简体**](README.zh-CN.md) 9 | 10 | This is a LaTeX template for undergraduate students at Northwestern Polytechnical University (NPU) who are writing their thesis in 2023, 2024, and [2025](https://github.com/lihanshu/NWPU-Thesis-Template/issues/6). The template is designed to help students quickly complete their thesis without being bothered by formatting issues. In the future, if the university's template for any year is revised, please compare and check the changes on your own. 11 | 12 | Presently, this template is available exclusively in Chinese. 13 | 14 | | TeXLive Environment | Status | 15 | | :------------------------------------------------------------------: | :----------------: | 16 | | ![TeXLive2024](https://img.shields.io/badge/TeXLive-2024-3D6117.svg) | :heavy_check_mark: | 17 | | ![TeXLive2023](https://img.shields.io/badge/TeXLive-2023-3D6117.svg) | :heavy_check_mark: | 18 | | ![TeXLive2022](https://img.shields.io/badge/TeXLive-2022-3D6117.svg) | :heavy_check_mark: | 19 | | ![TeXLive2021](https://img.shields.io/badge/TeXLive-2021-3D6117.svg) | :heavy_check_mark: | 20 | 21 | | IDE | Status | 22 | | :------------------------------------------------------------------------------------------: | :----------------: | 23 | | ![Overleaf](https://img.shields.io/badge/Overleaf-3D6117.svg) | :heavy_check_mark: | 24 | | ![VScode + LaTeX Workshop ](https://img.shields.io/badge/VScode-LaTeX%20Workshop-3D6117.svg) | :heavy_check_mark: | 25 | | ![TeXLive](https://img.shields.io/badge/TeXLive-3D6117.svg) | :heavy_check_mark: | 26 | 27 | ## Features 28 | 29 | - Based on the [official NPU thesis format](OfficialTemplate/附件8:本科毕业设计(论文)正文模版.doc). 30 | - Included pre-defined cover pages, acknowledgment, abstract, table of contents, and bibliography. 31 | - Used UTF-8 encoding and the xeCJK package for better Chinese language support. 32 | - Configured to conform to the requirements of [NPU's Undergraduate Thesis Guidelines (2024 edition)](https://jiaowu.nwpu.edu.cn/info/1164/12708.htm). 33 | - BibTex support 34 | - [Overleaf template website](https://www.overleaf.com/latex/templates/nwpu-thesis-template-2024/mbhxtpypgcqc) 35 | 36 | ## Usage 37 | 38 | - Obtain the template. 39 | 40 | There are three ways to obtain the template: accessing the latest [release version](https://github.com/lihanshu/NWPU_Thesis_Template/releases), cloning the repository, or downloading the ZIP file. 41 | 42 | - Supported Environments and Configuration Methods 43 | 44 | There are many ways to configure the supported environments: uploading the template to [Overleaf platform](https://cn.overleaf.com/), downloading [TeXLive](https://zhuanlan.zhihu.com/p/41855480) (version $\geqslant$ 2020) locally, or configuring the [VSCode + LaTeX](https://zhuanlan.zhihu.com/p/38178015) Workshop environment after downloading TeXLive. 45 | 46 | - Compile the document using **XeLaTeX**. 47 | 48 | ## Acknowledgments 49 | 50 | - This template was created by [Chao Zhang](https://github.com/lihanshu) and [YushunXiang](https://github.com/YushunXiang), students at Northwestern Polytechnical University. If you have any questions or comments about the template, please feel free to contact me via email (lihanshu29@gmail.com) if you have any issues or feedback. I will do my best to maintain this template until graduation. 51 | - Special thanks to Classmate Guan for their assistance with the PDF version(based Word) and [Classmate Wang](https://github.com/whzruc) for testing the template. 52 | - Contributions to this template are welcome! If you find a bug or have a suggestion for improvement, please open an issue or submit a pull request. 53 | 54 | ## Reference 55 | 56 | [Reference_format_setting_source.md](Reference_format_setting_source.md) was referred to for the setup method, and thanks to Professor Liu Haiyang's book "LaTeX Introduction" for inspiration. 57 | 58 | ## Disclaimer 59 | 60 | - This project is intended for learning and exchange and please note that it is not an official release. Similar maintained templates include [Undergraduate:LaTeX-NewTemplate-For-NPU-undergraduate-Thesis](https://github.com/jialinlvcn/LaTeX-NewTemplate-For-NPU-undergraduate-Thesis) and [Graduate: :NPU-Thesis-LaTeX-Template](https://github.com/WanshunSu/NPU-Thesis-LaTeX-Template) 61 | 62 | - The template currently only supports the years after 2023. If you need a template for a year prior to 2021, please refer to the [link](https://github.com/polossk/LaTeX-Template-For-NPU-Thesis). 63 | 64 | - For master's and doctoral thesis templates, please refer to [Yet-Another-LaTeX-Template-for-NPU-Thesis](https://github.com/NWPUMetaphysicsOffice/Yet-Another-LaTeX-Template-for-NPU-Thesis). 65 | 66 | This repository contains materials created by the contributors. We appreciate your respect for the authors' efforts and ask you to cite the source if you want to share them. If you like our work, please give us a :star:. 67 | 68 | ## License 69 | 70 | This project is licensed under the [MIT License](LICENSE). 71 | -------------------------------------------------------------------------------- /README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # 西北工业大学 2025 本科毕业设计 LaTeX 模板 (中文) 2 | 3 | ![TeX-Document](https://img.shields.io/badge/TeX-Document-3D6117.svg) 4 | ![Status](https://img.shields.io/badge/status-complete-brightgreen.svg) 5 | [![](https://img.shields.io/badge/Version-v0.8.0-{徽标颜色}.svg)]({linkUrl}) 6 | 7 | 该 LaTeX 模板适用于西北工业大学 2023至[2025](https://github.com/lihanshu/NWPU-Thesis-Template/issues/6) 年本科毕业设计,旨在帮助学生快速完成毕业论文,不受格式问题的困扰。之后若学校的年份相关模板有改动,请自行比对。请注意,目前仅提供中文版本。 8 | 9 | 10 | | TeXLive Environment | Status | 11 | | :------------------------------------------------------------------: | :----------------: | 12 | | ![TeXLive2024](https://img.shields.io/badge/TeXLive-2024-3D6117.svg) | :heavy_check_mark: | 13 | | ![TeXLive2023](https://img.shields.io/badge/TeXLive-2023-3D6117.svg) | :heavy_check_mark: | 14 | | ![TeXLive2022](https://img.shields.io/badge/TeXLive-2022-3D6117.svg) | :heavy_check_mark: | 15 | | ![TeXLive2021](https://img.shields.io/badge/TeXLive-2021-3D6117.svg) | :heavy_check_mark: | 16 | 17 | 18 | | IDE | Status | 19 | | :------------------------------------------------------------------------------------------: | :----------------: | 20 | | ![Overleaf](https://img.shields.io/badge/Overleaf-3D6117.svg) | :heavy_check_mark: | 21 | | ![VScode + LaTeX Workshop ](https://img.shields.io/badge/VScode-LaTeX%20Workshop-3D6117.svg) | :heavy_check_mark: | 22 | | ![TeXLive](https://img.shields.io/badge/TeXLive-3D6117.svg) | :heavy_check_mark: | 23 | 24 | ## 特性 25 | 26 | - 基于[官方模板](OfficialTemplate/附件8:本科毕业设计(论文)正文模版.doc)。 27 | - 包含预定义的封面、致谢、摘要、目录和参考文献。 28 | - 使用 UTF-8 编码和 xeCJK 宏包以更好地支持中文。 29 | - 完全符合[本科毕业设计指南(2024 版)](https://jiaowu.nwpu.edu.cn/info/1164/12708.htm)的要求。 30 | - 对 BibTex 引用方式的支持 31 | - [Overleaf 模板网页](https://www.overleaf.com/latex/templates/nwpu-thesis-template-2024/mbhxtpypgcqc) 32 | 33 | ## 使用方法 34 | 35 | - 获取模板。 36 | 37 | 可通过[最新发布版本](<(https://github.com/lihanshu/NWPU_Thesis_Template/releases)>)、克隆仓库或下载 ZIP 文件等方式获取。 38 | 39 | - 环境支持。 40 | 41 | 目前适配多种环境:上传到 Overleaf 在线平台,下载不低于 2020 版的[TeXLive](https://zhuanlan.zhihu.com/p/41855480)或者下载[TeXLive](https://zhuanlan.zhihu.com/p/41855480)后配置[VSCode + LaTeX Workshop](https://zhuanlan.zhihu.com/p/38178015)环境。 42 | 43 | - 编译方式。 44 | 45 | 请务必使用**XeLaTeX**方式。 46 | 47 | ## 联系方式和致谢 48 | 49 | - 该模板由[lihanshu](<(https://github.com/lihanshu)>)创建,[YushunXiang](https://github.com/YushunXiang)补充。如果您有任何反馈或建议,请及时通过邮件[联系](mailto:lihanshu29@gmail.com),我会尽力维护。 50 | 51 | - 感谢 G 同学在完成毕业论文后提供基于 Word 的 PDF 版本,感谢[W 同学](https://github.com/whzruc)等人对模板的环境测试。 52 | 53 | - 欢迎您对该模板的贡献。如果存在 bug 或有改进的建议,请在 issue 提出或提交合并请求。 54 | 55 | ## 参考 56 | 57 | [Reference_format_setting_source.md](Reference_format_setting_source.md) 给出了在制作模板初期的参考代码。此外刘海洋老师的《LaTeX 入门》对模板开发有启发作用。 58 | 59 | ## 声明 60 | 61 | - 本项目仅供学习交流使用,并非官方发布版本。与之类似且仍在维护的模板有:[本科:LaTeX-NewTemplate-For-NPU-undergraduate-Thesis](https://github.com/jialinlvcn/LaTeX-NewTemplate-For-NPU-undergraduate-Thesis) 和 [研究生:NPU-Thesis-LaTeX-Template](https://github.com/WanshunSu/NPU-Thesis-LaTeX-Template)。 62 | - 本模板当前仅支持 2023 年以及之后的毕业设计(论文)。如果您需要 2021 年之前的模板,请参考[链接](https://github.com/polossk/LaTeX-Template-For-NPU-Thesis)。 63 | - 研究生论文模板请参考[链接](https://github.com/NWPUMetaphysicsOffice/Yet-Another-LaTeX-Template-for-NPU-Thesis)。 64 | 65 | 本仓库分享的所有资料署名权由本仓库分享者所有,请尊重作者成果,如若转发请标明出处。如果您喜欢我们的工作,请不要吝惜您的:star:。 66 | 67 | ## 使用许可 68 | 69 | [MIT](LICENSE) © lihanshu 70 | -------------------------------------------------------------------------------- /Reference_format_setting_source.md: -------------------------------------------------------------------------------- 1 | % 行间距设置 2 | https://blog.csdn.net/weixinhum/article/details/104594454 3 | 4 | % 字体设置 5 | https://blog.csdn.net/cdqn10086/article/details/70198368 6 | 7 | % LaTeX 与 Word 度量单位间的对应关系 8 | https://pauldirac.gitee.io/2020/07/02/LaTeX-length-word-fontsize/ 9 | 10 | https://blog.csdn.net/weixin_39679367/article/details/115794548 11 | 12 | % 界面设置 13 | https://www.jianshu.com/p/0719795278eb 14 | 15 | % 硕士模板友情链接 16 | https://github.com/NWPUMetaphysicsOffice 17 | 18 | % 章节标题 19 | https://www.zhihu.com/question/59347224 20 | 21 | % 图表标题 22 | https://www.jianshu.com/p/0a1c45a02120 23 | 24 | https://fontsaga.com/latex-caption-font-size/ 25 | -------------------------------------------------------------------------------- /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: 2024/03/08 v2.1.6 12 | %% ------------------------------------------------------------------- 13 | %% Copyright (C) 2016--2024 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 | link.journal 43 | bold.journal.volume 44 | show.missing.address.publisher 45 | space.before.pages 46 | only.start.page 47 | wave.dash.in.pages 48 | show.urldate 49 | show.url 50 | show.doi 51 | show.preprint 52 | show.note 53 | show.english.translation 54 | end.with.period 55 | } 56 | 57 | STRINGS { 58 | component.part.label 59 | } 60 | 61 | FUNCTION {load.config} 62 | { 63 | #2 'citation.et.al.min := 64 | #1 'citation.et.al.use.first := 65 | #4 'bibliography.et.al.min := 66 | #3 'bibliography.et.al.use.first := 67 | #0 'uppercase.name := 68 | #0 'terms.in.macro := 69 | #0 'year.after.author := 70 | #1 'period.after.author := 71 | #0 'italic.book.title := 72 | #1 'sentence.case.title := 73 | #0 'link.title := 74 | #1 'title.in.journal := 75 | #0 'show.patent.country := 76 | #1 'show.mark := 77 | #0 'space.before.mark := 78 | #1 'show.medium.type := 79 | "slash" 'component.part.label := 80 | #0 'short.journal := 81 | #0 'italic.journal := 82 | #0 'link.journal := 83 | #0 'bold.journal.volume := 84 | #0 'show.missing.address.publisher := 85 | #1 'space.before.pages := 86 | #0 'only.start.page := 87 | #0 'wave.dash.in.pages := 88 | #1 'show.urldate := 89 | #1 'show.url := 90 | #1 'show.doi := 91 | #1 'show.preprint := 92 | #0 'show.note := 93 | #0 'show.english.translation := 94 | #1 'end.with.period := 95 | } 96 | 97 | ENTRY 98 | { address 99 | archivePrefix 100 | author 101 | booktitle 102 | date 103 | doi 104 | edition 105 | editor 106 | eprint 107 | eprinttype 108 | entrysubtype 109 | howpublished 110 | institution 111 | journal 112 | journaltitle 113 | key 114 | langid 115 | language 116 | location 117 | mark 118 | medium 119 | note 120 | number 121 | organization 122 | pages 123 | publisher 124 | school 125 | series 126 | shortjournal 127 | title 128 | translation 129 | translator 130 | url 131 | urldate 132 | volume 133 | year 134 | } 135 | { entry.lang entry.is.electronic is.pure.electronic entry.numbered } 136 | { label extra.label sort.label short.label short.list entry.mark entry.url } 137 | 138 | INTEGERS { output.state before.all mid.sentence after.sentence after.block after.slash } 139 | 140 | INTEGERS { lang.zh lang.ja lang.en lang.ru lang.other } 141 | 142 | INTEGERS { charptr len } 143 | 144 | FUNCTION {init.state.consts} 145 | { #0 'before.all := 146 | #1 'mid.sentence := 147 | #2 'after.sentence := 148 | #3 'after.block := 149 | #4 'after.slash := 150 | #3 'lang.zh := 151 | #4 'lang.ja := 152 | #1 'lang.en := 153 | #2 'lang.ru := 154 | #0 'lang.other := 155 | } 156 | 157 | FUNCTION {bbl.anonymous} 158 | { entry.lang lang.zh = 159 | { "佚名" } 160 | { "Anon" } 161 | if$ 162 | } 163 | 164 | FUNCTION {bbl.space} 165 | { entry.lang lang.zh = 166 | { "\ " } 167 | { " " } 168 | if$ 169 | } 170 | 171 | FUNCTION {bbl.and} 172 | { "" } 173 | 174 | FUNCTION {bbl.et.al} 175 | { entry.lang lang.zh = 176 | { "等" } 177 | { entry.lang lang.ja = 178 | { "他" } 179 | { entry.lang lang.ru = 180 | { "идр" } 181 | { "et~al." } 182 | if$ 183 | } 184 | if$ 185 | } 186 | if$ 187 | } 188 | 189 | FUNCTION {citation.and} 190 | { terms.in.macro 191 | { "{\biband}" } 192 | 'bbl.and 193 | if$ 194 | } 195 | 196 | FUNCTION {citation.et.al} 197 | { terms.in.macro 198 | { "{\bibetal}" } 199 | 'bbl.et.al 200 | if$ 201 | } 202 | 203 | FUNCTION {bbl.colon} { ": " } 204 | 205 | FUNCTION {bbl.pages.colon} 206 | { space.before.pages 207 | { ": " } 208 | { ":\allowbreak " } 209 | if$ 210 | } 211 | 212 | FUNCTION {bbl.wide.space} { "\quad " } 213 | 214 | FUNCTION {bbl.slash} { "//\allowbreak " } 215 | 216 | FUNCTION {bbl.sine.loco} 217 | { entry.lang lang.zh = 218 | { "[出版地不详]" } 219 | { "[S.l.]" } 220 | if$ 221 | } 222 | 223 | FUNCTION {bbl.sine.nomine} 224 | { entry.lang lang.zh = 225 | { "[出版者不详]" } 226 | { "[s.n.]" } 227 | if$ 228 | } 229 | 230 | FUNCTION {bbl.sine.loco.sine.nomine} 231 | { entry.lang lang.zh = 232 | { "[出版地不详: 出版者不详]" } 233 | { "[S.l.: s.n.]" } 234 | if$ 235 | } 236 | 237 | FUNCTION {not} 238 | { { #0 } 239 | { #1 } 240 | if$ 241 | } 242 | 243 | FUNCTION {and} 244 | { 'skip$ 245 | { pop$ #0 } 246 | if$ 247 | } 248 | 249 | FUNCTION {or} 250 | { { pop$ #1 } 251 | 'skip$ 252 | if$ 253 | } 254 | 255 | STRINGS { x y } 256 | 257 | FUNCTION {contains} 258 | { 'y := 259 | 'x := 260 | y text.length$ 'len := 261 | x text.length$ len - #1 + 'charptr := 262 | { charptr #0 > 263 | x charptr len substring$ y = not 264 | and 265 | } 266 | { charptr #1 - 'charptr := } 267 | while$ 268 | charptr #0 > 269 | } 270 | 271 | STRINGS { s t } 272 | 273 | FUNCTION {output.nonnull} 274 | { 's := 275 | output.state mid.sentence = 276 | { ", " * write$ } 277 | { output.state after.block = 278 | { add.period$ write$ 279 | newline$ 280 | "\newblock " write$ 281 | } 282 | { output.state before.all = 283 | 'write$ 284 | { output.state after.slash = 285 | { bbl.slash * write$ 286 | newline$ 287 | } 288 | { add.period$ " " * write$ } 289 | if$ 290 | } 291 | if$ 292 | } 293 | if$ 294 | mid.sentence 'output.state := 295 | } 296 | if$ 297 | s 298 | } 299 | 300 | FUNCTION {output} 301 | { duplicate$ empty$ 302 | 'pop$ 303 | 'output.nonnull 304 | if$ 305 | } 306 | 307 | FUNCTION {output.after} 308 | { 't := 309 | duplicate$ empty$ 310 | 'pop$ 311 | { 's := 312 | output.state mid.sentence = 313 | { t * write$ } 314 | { output.state after.block = 315 | { add.period$ write$ 316 | newline$ 317 | "\newblock " write$ 318 | } 319 | { output.state before.all = 320 | 'write$ 321 | { output.state after.slash = 322 | { bbl.slash * write$ } 323 | { add.period$ " " * write$ } 324 | if$ 325 | } 326 | if$ 327 | } 328 | if$ 329 | mid.sentence 'output.state := 330 | } 331 | if$ 332 | s 333 | } 334 | if$ 335 | } 336 | 337 | FUNCTION {output.check} 338 | { 't := 339 | duplicate$ empty$ 340 | { pop$ "empty " t * " in " * cite$ * warning$ } 341 | 'output.nonnull 342 | if$ 343 | } 344 | 345 | FUNCTION {fin.entry} 346 | { end.with.period 347 | 'add.period$ 348 | 'skip$ 349 | if$ 350 | write$ 351 | show.english.translation entry.lang lang.zh = and 352 | { ")" 353 | write$ 354 | } 355 | 'skip$ 356 | if$ 357 | newline$ 358 | } 359 | 360 | FUNCTION {new.block} 361 | { output.state before.all = 362 | 'skip$ 363 | { output.state after.slash = 364 | 'skip$ 365 | { after.block 'output.state := } 366 | if$ 367 | } 368 | if$ 369 | } 370 | 371 | FUNCTION {new.sentence} 372 | { output.state after.block = 373 | 'skip$ 374 | { output.state before.all = 375 | 'skip$ 376 | { output.state after.slash = 377 | 'skip$ 378 | { after.sentence 'output.state := } 379 | if$ 380 | } 381 | if$ 382 | } 383 | if$ 384 | } 385 | 386 | FUNCTION {new.slash} 387 | { output.state before.all = 388 | 'skip$ 389 | { component.part.label "slash" = 390 | { after.slash 'output.state := } 391 | { new.block 392 | component.part.label "in" = 393 | { entry.lang lang.en = 394 | { "In: " output 395 | write$ 396 | "" 397 | before.all 'output.state := 398 | } 399 | 'skip$ 400 | if$ 401 | } 402 | 'skip$ 403 | if$ 404 | } 405 | if$ 406 | } 407 | if$ 408 | } 409 | 410 | FUNCTION {new.block.checka} 411 | { empty$ 412 | 'skip$ 413 | 'new.block 414 | if$ 415 | } 416 | 417 | FUNCTION {new.block.checkb} 418 | { empty$ 419 | swap$ empty$ 420 | and 421 | 'skip$ 422 | 'new.block 423 | if$ 424 | } 425 | 426 | FUNCTION {new.sentence.checka} 427 | { empty$ 428 | 'skip$ 429 | 'new.sentence 430 | if$ 431 | } 432 | 433 | FUNCTION {new.sentence.checkb} 434 | { empty$ 435 | swap$ empty$ 436 | and 437 | 'skip$ 438 | 'new.sentence 439 | if$ 440 | } 441 | 442 | FUNCTION {field.or.null} 443 | { duplicate$ empty$ 444 | { pop$ "" } 445 | 'skip$ 446 | if$ 447 | } 448 | 449 | FUNCTION {emphasize} 450 | { duplicate$ empty$ 451 | { pop$ "" } 452 | { "\emph{" swap$ * "}" * } 453 | if$ 454 | } 455 | 456 | FUNCTION {format.btitle} 457 | { italic.book.title 458 | entry.lang lang.en = and 459 | 'emphasize 460 | 'skip$ 461 | if$ 462 | } 463 | 464 | INTEGERS { byte second.byte } 465 | 466 | INTEGERS { char.lang tmp.lang } 467 | 468 | STRINGS { tmp.str } 469 | 470 | FUNCTION {get.str.lang} 471 | { 'tmp.str := 472 | lang.other 'tmp.lang := 473 | #1 'charptr := 474 | tmp.str text.length$ #1 + 'len := 475 | { charptr len < } 476 | { tmp.str charptr #1 substring$ chr.to.int$ 'byte := 477 | byte #128 < 478 | { charptr #1 + 'charptr := 479 | byte #64 > byte #91 < and byte #96 > byte #123 < and or 480 | { lang.en 'char.lang := } 481 | { lang.other 'char.lang := } 482 | if$ 483 | } 484 | { tmp.str charptr #1 + #1 substring$ chr.to.int$ 'second.byte := 485 | byte #224 < 486 | { charptr #2 + 'charptr := 487 | byte #207 > byte #212 < and 488 | byte #212 = second.byte #176 < and or 489 | { lang.ru 'char.lang := } 490 | { lang.other 'char.lang := } 491 | if$ 492 | } 493 | { byte #240 < 494 | { charptr #3 + 'charptr := 495 | byte #227 > byte #234 < and 496 | { lang.zh 'char.lang := } 497 | { byte #227 = 498 | { second.byte #143 > 499 | { lang.zh 'char.lang := } 500 | { second.byte #128 > second.byte #132 < and 501 | { lang.ja 'char.lang := } 502 | { lang.other 'char.lang := } 503 | if$ 504 | } 505 | if$ 506 | } 507 | { byte #239 = 508 | second.byte #163 > second.byte #172 < and and 509 | { lang.zh 'char.lang := } 510 | { lang.other 'char.lang := } 511 | if$ 512 | } 513 | if$ 514 | } 515 | if$ 516 | } 517 | { charptr #4 + 'charptr := 518 | byte #240 = second.byte #159 > and 519 | { lang.zh 'char.lang := } 520 | { lang.other 'char.lang := } 521 | if$ 522 | } 523 | if$ 524 | } 525 | if$ 526 | } 527 | if$ 528 | char.lang tmp.lang > 529 | { char.lang 'tmp.lang := } 530 | 'skip$ 531 | if$ 532 | } 533 | while$ 534 | tmp.lang 535 | } 536 | 537 | FUNCTION {check.entry.lang} 538 | { author field.or.null 539 | title field.or.null * 540 | get.str.lang 541 | } 542 | 543 | STRINGS { entry.langid } 544 | 545 | FUNCTION {set.entry.lang} 546 | { "" 'entry.langid := 547 | language empty$ not 548 | { language 'entry.langid := } 549 | 'skip$ 550 | if$ 551 | langid empty$ not 552 | { langid 'entry.langid := } 553 | 'skip$ 554 | if$ 555 | entry.langid empty$ 556 | { check.entry.lang } 557 | { entry.langid "english" = entry.langid "american" = or entry.langid "british" = or 558 | { lang.en } 559 | { entry.langid "chinese" = 560 | { lang.zh } 561 | { entry.langid "japanese" = 562 | { lang.ja } 563 | { entry.langid "russian" = 564 | { lang.ru } 565 | { check.entry.lang } 566 | if$ 567 | } 568 | if$ 569 | } 570 | if$ 571 | } 572 | if$ 573 | } 574 | if$ 575 | 'entry.lang := 576 | } 577 | 578 | FUNCTION {set.entry.numbered} 579 | { type$ "patent" = 580 | type$ "standard" = or 581 | type$ "techreport" = or 582 | { #1 'entry.numbered := } 583 | { #0 'entry.numbered := } 584 | if$ 585 | } 586 | 587 | INTEGERS { nameptr namesleft numnames name.lang } 588 | 589 | FUNCTION {format.name} 590 | { "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 591 | t "others" = 592 | { bbl.et.al } 593 | { t get.str.lang 'name.lang := 594 | name.lang lang.en = 595 | { t #1 "{vv~}{ll}{ f{~}}" format.name$ 596 | uppercase.name 597 | { "u" change.case$ } 598 | 'skip$ 599 | if$ 600 | t #1 "{, jj}" format.name$ * 601 | } 602 | { t #1 "{ll}{ff}" format.name$ } 603 | if$ 604 | } 605 | if$ 606 | } 607 | 608 | FUNCTION {format.names} 609 | { 's := 610 | #1 'nameptr := 611 | s num.names$ 'numnames := 612 | "" 613 | numnames 'namesleft := 614 | { namesleft #0 > } 615 | { s nameptr format.name bbl.et.al = 616 | numnames bibliography.et.al.min #1 - > nameptr bibliography.et.al.use.first > and or 617 | { ", " * 618 | bbl.et.al * 619 | #1 'namesleft := 620 | } 621 | { nameptr #1 > 622 | { namesleft #1 = bbl.and "" = not and 623 | { bbl.and * } 624 | { ", " * } 625 | if$ 626 | } 627 | 'skip$ 628 | if$ 629 | s nameptr format.name * 630 | } 631 | if$ 632 | nameptr #1 + 'nameptr := 633 | namesleft #1 - 'namesleft := 634 | } 635 | while$ 636 | } 637 | 638 | FUNCTION {format.key} 639 | { empty$ 640 | { key field.or.null } 641 | { "" } 642 | if$ 643 | } 644 | 645 | FUNCTION {format.authors} 646 | { author empty$ not 647 | { author format.names } 648 | { "empty author in " cite$ * warning$ 649 | "" 650 | } 651 | if$ 652 | } 653 | 654 | FUNCTION {format.editors} 655 | { editor empty$ 656 | { "" } 657 | { editor format.names } 658 | if$ 659 | } 660 | 661 | FUNCTION {format.translators} 662 | { translator empty$ 663 | { "" } 664 | { translator format.names 665 | entry.lang lang.zh = 666 | { translator num.names$ #3 > 667 | { "译" * } 668 | { ", 译" * } 669 | if$ 670 | } 671 | 'skip$ 672 | if$ 673 | } 674 | if$ 675 | } 676 | 677 | FUNCTION {format.full.names} 678 | {'s := 679 | #1 'nameptr := 680 | s num.names$ 'numnames := 681 | numnames 'namesleft := 682 | { namesleft #0 > } 683 | { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 684 | t get.str.lang 'name.lang := 685 | name.lang lang.en = 686 | { t #1 "{vv~}{ll}" format.name$ 't := } 687 | { t #1 "{ll}{ff}" format.name$ 't := } 688 | if$ 689 | nameptr #1 > 690 | { 691 | namesleft #1 > 692 | { ", " * t * } 693 | { 694 | numnames #2 > 695 | { "," * } 696 | 'skip$ 697 | if$ 698 | t "others" = 699 | { " et~al." * } 700 | { " and " * t * } 701 | if$ 702 | } 703 | if$ 704 | } 705 | 't 706 | if$ 707 | nameptr #1 + 'nameptr := 708 | namesleft #1 - 'namesleft := 709 | } 710 | while$ 711 | } 712 | 713 | FUNCTION {author.editor.full} 714 | { author empty$ 715 | { editor empty$ 716 | { "" } 717 | { editor format.full.names } 718 | if$ 719 | } 720 | { author format.full.names } 721 | if$ 722 | } 723 | 724 | FUNCTION {author.full} 725 | { author empty$ 726 | { "" } 727 | { author format.full.names } 728 | if$ 729 | } 730 | 731 | FUNCTION {editor.full} 732 | { editor empty$ 733 | { "" } 734 | { editor format.full.names } 735 | if$ 736 | } 737 | 738 | FUNCTION {make.full.names} 739 | { type$ "book" = 740 | type$ "inbook" = booktitle empty$ not and 741 | or 742 | 'author.editor.full 743 | { type$ "collection" = 744 | type$ "proceedings" = 745 | or 746 | 'editor.full 747 | 'author.full 748 | if$ 749 | } 750 | if$ 751 | } 752 | 753 | FUNCTION {output.bibitem} 754 | { newline$ 755 | "\bibitem[" write$ 756 | label ")" * 757 | make.full.names duplicate$ short.list = 758 | { pop$ } 759 | { duplicate$ "]" contains 760 | { "{" swap$ * "}" * } 761 | 'skip$ 762 | if$ 763 | * 764 | } 765 | if$ 766 | "]{" * write$ 767 | cite$ write$ 768 | "}" write$ 769 | newline$ 770 | "" 771 | before.all 'output.state := 772 | } 773 | 774 | FUNCTION {change.sentence.case} 775 | { entry.lang lang.en = 776 | { "t" change.case$ } 777 | 'skip$ 778 | if$ 779 | } 780 | 781 | FUNCTION {add.link} 782 | { url empty$ not 783 | { "\href{" url * "}{" * swap$ * "}" * } 784 | { doi empty$ not 785 | { "\href{https://doi.org/" doi * "}{" * swap$ * "}" * } 786 | 'skip$ 787 | if$ 788 | } 789 | if$ 790 | } 791 | 792 | FUNCTION {format.title} 793 | { title empty$ 794 | { "" } 795 | { title 796 | sentence.case.title 797 | 'change.sentence.case 798 | 'skip$ 799 | if$ 800 | entry.numbered number empty$ not and 801 | { bbl.colon * 802 | type$ "patent" = show.patent.country and 803 | { address empty$ not 804 | { address * ", " * } 805 | { location empty$ not 806 | { location * ", " * } 807 | { entry.lang lang.zh = 808 | { "中国" * ", " * } 809 | 'skip$ 810 | if$ 811 | } 812 | if$ 813 | } 814 | if$ 815 | } 816 | 'skip$ 817 | if$ 818 | number * 819 | } 820 | 'skip$ 821 | if$ 822 | link.title 823 | 'add.link 824 | 'skip$ 825 | if$ 826 | } 827 | if$ 828 | } 829 | 830 | FUNCTION {tie.or.space.connect} 831 | { duplicate$ text.length$ #3 < 832 | { "~" } 833 | { " " } 834 | if$ 835 | swap$ * * 836 | } 837 | 838 | FUNCTION {either.or.check} 839 | { empty$ 840 | 'pop$ 841 | { "can't use both " swap$ * " fields in " * cite$ * warning$ } 842 | if$ 843 | } 844 | 845 | FUNCTION {is.digit} 846 | { duplicate$ empty$ 847 | { pop$ #0 } 848 | { chr.to.int$ 849 | duplicate$ "0" chr.to.int$ < 850 | { pop$ #0 } 851 | { "9" chr.to.int$ > 852 | { #0 } 853 | { #1 } 854 | if$ 855 | } 856 | if$ 857 | } 858 | if$ 859 | } 860 | 861 | FUNCTION {is.number} 862 | { 's := 863 | s empty$ 864 | { #0 } 865 | { s text.length$ 'charptr := 866 | { charptr #0 > 867 | s charptr #1 substring$ is.digit 868 | and 869 | } 870 | { charptr #1 - 'charptr := } 871 | while$ 872 | charptr not 873 | } 874 | if$ 875 | } 876 | 877 | FUNCTION {format.volume} 878 | { volume empty$ not 879 | { volume is.number 880 | { entry.lang lang.zh = 881 | { "第 " volume * " 卷" * } 882 | { "Vol." volume tie.or.space.connect } 883 | if$ 884 | } 885 | { volume } 886 | if$ 887 | } 888 | { "" } 889 | if$ 890 | } 891 | 892 | FUNCTION {format.number} 893 | { number empty$ not 894 | { number is.number 895 | { entry.lang lang.zh = 896 | { "第 " number * " 册" * } 897 | { "No." number tie.or.space.connect } 898 | if$ 899 | } 900 | { number } 901 | if$ 902 | } 903 | { "" } 904 | if$ 905 | } 906 | 907 | FUNCTION {format.volume.number} 908 | { volume empty$ not 909 | { format.volume } 910 | { format.number } 911 | if$ 912 | } 913 | 914 | FUNCTION {format.title.vol.num} 915 | { title 916 | sentence.case.title 917 | 'change.sentence.case 918 | 'skip$ 919 | if$ 920 | entry.numbered 921 | { number empty$ not 922 | { bbl.colon * number * } 923 | 'skip$ 924 | if$ 925 | } 926 | { format.volume.number 's := 927 | s empty$ not 928 | { bbl.colon * s * } 929 | 'skip$ 930 | if$ 931 | } 932 | if$ 933 | } 934 | 935 | FUNCTION {format.series.vol.num.title} 936 | { format.volume.number 's := 937 | series empty$ not 938 | { series 939 | sentence.case.title 940 | 'change.sentence.case 941 | 'skip$ 942 | if$ 943 | entry.numbered 944 | { bbl.wide.space * } 945 | { bbl.colon * 946 | s empty$ not 947 | { s * bbl.wide.space * } 948 | 'skip$ 949 | if$ 950 | } 951 | if$ 952 | title * 953 | sentence.case.title 954 | 'change.sentence.case 955 | 'skip$ 956 | if$ 957 | entry.numbered number empty$ not and 958 | { bbl.colon * number * } 959 | 'skip$ 960 | if$ 961 | } 962 | { format.title.vol.num } 963 | if$ 964 | format.btitle 965 | link.title 966 | 'add.link 967 | 'skip$ 968 | if$ 969 | } 970 | 971 | FUNCTION {format.booktitle.vol.num} 972 | { booktitle 973 | entry.numbered 974 | 'skip$ 975 | { format.volume.number 's := 976 | s empty$ not 977 | { bbl.colon * s * } 978 | 'skip$ 979 | if$ 980 | } 981 | if$ 982 | } 983 | 984 | FUNCTION {format.series.vol.num.booktitle} 985 | { format.volume.number 's := 986 | series empty$ not 987 | { series bbl.colon * 988 | entry.numbered not s empty$ not and 989 | { s * bbl.wide.space * } 990 | 'skip$ 991 | if$ 992 | booktitle * 993 | } 994 | { format.booktitle.vol.num } 995 | if$ 996 | format.btitle 997 | } 998 | 999 | FUNCTION {remove.period} 1000 | { 't := 1001 | "" 's := 1002 | { t empty$ not } 1003 | { t #1 #1 substring$ 'tmp.str := 1004 | tmp.str "." = not 1005 | { s tmp.str * 's := } 1006 | 'skip$ 1007 | if$ 1008 | t #2 global.max$ substring$ 't := 1009 | } 1010 | while$ 1011 | s 1012 | } 1013 | 1014 | FUNCTION {abbreviate} 1015 | { remove.period 1016 | 't := 1017 | t "l" change.case$ 's := 1018 | "" 1019 | s "physical review letters" = 1020 | { "Phys Rev Lett" } 1021 | 'skip$ 1022 | if$ 1023 | 's := 1024 | s empty$ 1025 | { t } 1026 | { pop$ s } 1027 | if$ 1028 | } 1029 | 1030 | FUNCTION {get.journal.title} 1031 | { short.journal 1032 | { shortjournal empty$ not 1033 | { shortjournal } 1034 | { journal empty$ not 1035 | { journal abbreviate } 1036 | { journaltitle empty$ not 1037 | { journaltitle abbreviate } 1038 | { "" } 1039 | if$ 1040 | } 1041 | if$ 1042 | } 1043 | if$ 1044 | } 1045 | { journal empty$ not 1046 | { journal } 1047 | { journaltitle empty$ not 1048 | { journaltitle } 1049 | { shortjournal empty$ not 1050 | { shortjournal } 1051 | { "" } 1052 | if$ 1053 | } 1054 | if$ 1055 | } 1056 | if$ 1057 | } 1058 | if$ 1059 | } 1060 | 1061 | FUNCTION {check.arxiv.preprint} 1062 | { #1 #5 substring$ purify$ "l" change.case$ "arxiv" = 1063 | { #1 } 1064 | { #0 } 1065 | if$ 1066 | } 1067 | 1068 | FUNCTION {format.journal} 1069 | { get.journal.title 1070 | duplicate$ empty$ not 1071 | { italic.journal entry.lang lang.en = and 1072 | 'emphasize 1073 | 'skip$ 1074 | if$ 1075 | link.journal 1076 | 'add.link 1077 | 'skip$ 1078 | if$ 1079 | } 1080 | 'skip$ 1081 | if$ 1082 | } 1083 | 1084 | FUNCTION {set.entry.mark} 1085 | { entry.mark empty$ not 1086 | 'pop$ 1087 | { mark empty$ not 1088 | { pop$ mark 'entry.mark := } 1089 | { 'entry.mark := } 1090 | if$ 1091 | } 1092 | if$ 1093 | } 1094 | 1095 | FUNCTION {format.mark} 1096 | { show.mark 1097 | { entry.mark 1098 | show.medium.type 1099 | { medium empty$ not 1100 | { "/" * medium * } 1101 | { entry.is.electronic 1102 | { "/OL" * } 1103 | 'skip$ 1104 | if$ 1105 | } 1106 | if$ 1107 | } 1108 | 'skip$ 1109 | if$ 1110 | 'entry.mark := 1111 | space.before.mark 1112 | { " " } 1113 | { "\allowbreak" } 1114 | if$ 1115 | "[" * entry.mark * "]" * 1116 | } 1117 | { "" } 1118 | if$ 1119 | } 1120 | 1121 | FUNCTION {num.to.ordinal} 1122 | { duplicate$ text.length$ 'charptr := 1123 | duplicate$ charptr #1 substring$ 's := 1124 | s "1" = 1125 | { "st" * } 1126 | { s "2" = 1127 | { "nd" * } 1128 | { s "3" = 1129 | { "rd" * } 1130 | { "th" * } 1131 | if$ 1132 | } 1133 | if$ 1134 | } 1135 | if$ 1136 | } 1137 | 1138 | FUNCTION {format.edition} 1139 | { edition empty$ 1140 | { "" } 1141 | { edition is.number 1142 | { edition "1" = not 1143 | { entry.lang lang.zh = 1144 | { edition " 版" * } 1145 | { edition num.to.ordinal " ed." * } 1146 | if$ 1147 | } 1148 | 'skip$ 1149 | if$ 1150 | } 1151 | { entry.lang lang.en = 1152 | { edition change.sentence.case 's := 1153 | s "Revised" = s "Revised edition" = or 1154 | { "Rev. ed." } 1155 | { s " ed." * } 1156 | if$ 1157 | } 1158 | { edition } 1159 | if$ 1160 | } 1161 | if$ 1162 | } 1163 | if$ 1164 | } 1165 | 1166 | FUNCTION {format.publisher} 1167 | { publisher empty$ not 1168 | { publisher } 1169 | { school empty$ not 1170 | { school } 1171 | { organization empty$ not 1172 | { organization } 1173 | { institution empty$ not 1174 | { institution } 1175 | { "" } 1176 | if$ 1177 | } 1178 | if$ 1179 | } 1180 | if$ 1181 | } 1182 | if$ 1183 | } 1184 | 1185 | FUNCTION {format.address.publisher} 1186 | { address empty$ not 1187 | { address } 1188 | { location empty$ not 1189 | { location } 1190 | { "" } 1191 | if$ 1192 | } 1193 | if$ 1194 | duplicate$ empty$ not 1195 | { format.publisher empty$ not 1196 | { bbl.colon * format.publisher * } 1197 | { entry.is.electronic not show.missing.address.publisher and 1198 | { bbl.colon * bbl.sine.nomine * } 1199 | 'skip$ 1200 | if$ 1201 | } 1202 | if$ 1203 | } 1204 | { pop$ 1205 | entry.is.electronic not show.missing.address.publisher and 1206 | { format.publisher empty$ not 1207 | { bbl.sine.loco bbl.colon * format.publisher * } 1208 | { bbl.sine.loco.sine.nomine } 1209 | if$ 1210 | } 1211 | { format.publisher empty$ not 1212 | { format.publisher } 1213 | { "" } 1214 | if$ 1215 | } 1216 | if$ 1217 | } 1218 | if$ 1219 | } 1220 | 1221 | FUNCTION {extract.before.dash} 1222 | { duplicate$ empty$ 1223 | { pop$ "" } 1224 | { 's := 1225 | #1 'charptr := 1226 | s text.length$ #1 + 'len := 1227 | { charptr len < 1228 | s charptr #1 substring$ "-" = not 1229 | and 1230 | } 1231 | { charptr #1 + 'charptr := } 1232 | while$ 1233 | s #1 charptr #1 - substring$ 1234 | } 1235 | if$ 1236 | } 1237 | 1238 | FUNCTION {extract.after.dash} 1239 | { duplicate$ empty$ 1240 | { pop$ "" } 1241 | { 's := 1242 | #1 'charptr := 1243 | s text.length$ #1 + 'len := 1244 | { charptr len < 1245 | s charptr #1 substring$ "-" = not 1246 | and 1247 | } 1248 | { charptr #1 + 'charptr := } 1249 | while$ 1250 | { charptr len < 1251 | s charptr #1 substring$ "-" = 1252 | and 1253 | } 1254 | { charptr #1 + 'charptr := } 1255 | while$ 1256 | s charptr global.max$ substring$ 1257 | } 1258 | if$ 1259 | } 1260 | 1261 | FUNCTION {extract.before.slash} 1262 | { duplicate$ empty$ 1263 | { pop$ "" } 1264 | { 's := 1265 | #1 'charptr := 1266 | s text.length$ #1 + 'len := 1267 | { charptr len < 1268 | s charptr #1 substring$ "/" = not 1269 | and 1270 | } 1271 | { charptr #1 + 'charptr := } 1272 | while$ 1273 | s #1 charptr #1 - substring$ 1274 | } 1275 | if$ 1276 | } 1277 | 1278 | FUNCTION {extract.after.slash} 1279 | { duplicate$ empty$ 1280 | { pop$ "" } 1281 | { 's := 1282 | #1 'charptr := 1283 | s text.length$ #1 + 'len := 1284 | { charptr len < 1285 | s charptr #1 substring$ "-" = not 1286 | and 1287 | s charptr #1 substring$ "/" = not 1288 | and 1289 | } 1290 | { charptr #1 + 'charptr := } 1291 | while$ 1292 | { charptr len < 1293 | s charptr #1 substring$ "-" = 1294 | s charptr #1 substring$ "/" = 1295 | or 1296 | and 1297 | } 1298 | { charptr #1 + 'charptr := } 1299 | while$ 1300 | s charptr global.max$ substring$ 1301 | } 1302 | if$ 1303 | } 1304 | 1305 | FUNCTION {format.year} 1306 | { year empty$ not 1307 | { year extract.before.slash extra.label * } 1308 | { date empty$ not 1309 | { date extract.before.dash extra.label * } 1310 | { entry.is.electronic not 1311 | { "empty year in " cite$ * warning$ } 1312 | 'skip$ 1313 | if$ 1314 | urldate empty$ not 1315 | { "[" urldate extract.before.dash * extra.label * "]" * } 1316 | { "" } 1317 | if$ 1318 | } 1319 | if$ 1320 | } 1321 | if$ 1322 | } 1323 | 1324 | FUNCTION {format.periodical.year} 1325 | { year empty$ not 1326 | { year extract.before.slash 1327 | "--" * 1328 | year extract.after.slash 1329 | duplicate$ empty$ 1330 | 'pop$ 1331 | { * } 1332 | if$ 1333 | } 1334 | { date empty$ not 1335 | { date extract.before.dash } 1336 | { "empty year in " cite$ * warning$ 1337 | urldate empty$ not 1338 | { "[" urldate extract.before.dash * "]" * } 1339 | { "" } 1340 | if$ 1341 | } 1342 | if$ 1343 | } 1344 | if$ 1345 | } 1346 | 1347 | FUNCTION {format.date} 1348 | { date empty$ not 1349 | { type$ "patent" = type$ "newspaper" = or 1350 | { date } 1351 | { entrysubtype empty$ not 1352 | { type$ "article" = entrysubtype "newspaper" = and 1353 | { date } 1354 | { format.year } 1355 | if$ 1356 | } 1357 | { format.year } 1358 | if$ 1359 | } 1360 | if$ 1361 | } 1362 | { year empty$ not 1363 | { format.year } 1364 | { "" } 1365 | if$ 1366 | } 1367 | if$ 1368 | } 1369 | 1370 | FUNCTION {format.editdate} 1371 | { date empty$ not 1372 | { "\allowbreak(" date * ")" * } 1373 | { "" } 1374 | if$ 1375 | } 1376 | 1377 | FUNCTION {format.urldate} 1378 | { show.urldate show.url and entry.url empty$ not and 1379 | is.pure.electronic or 1380 | urldate empty$ not and 1381 | { "\allowbreak[" urldate * "]" * } 1382 | { "" } 1383 | if$ 1384 | } 1385 | 1386 | FUNCTION {hyphenate} 1387 | { 't := 1388 | "" 1389 | { t empty$ not } 1390 | { t #1 #1 substring$ "-" = 1391 | { wave.dash.in.pages 1392 | { "~" * } 1393 | { "-" * } 1394 | if$ 1395 | { t #1 #1 substring$ "-" = } 1396 | { t #2 global.max$ substring$ 't := } 1397 | while$ 1398 | } 1399 | { t #1 #1 substring$ * 1400 | t #2 global.max$ substring$ 't := 1401 | } 1402 | if$ 1403 | } 1404 | while$ 1405 | } 1406 | 1407 | FUNCTION {format.pages} 1408 | { pages empty$ 1409 | { "" } 1410 | { pages hyphenate } 1411 | if$ 1412 | } 1413 | 1414 | FUNCTION {format.extracted.pages} 1415 | { pages empty$ 1416 | { "" } 1417 | { pages 1418 | only.start.page 1419 | 'extract.before.dash 1420 | 'hyphenate 1421 | if$ 1422 | } 1423 | if$ 1424 | } 1425 | 1426 | FUNCTION {format.journal.volume} 1427 | { volume empty$ not 1428 | { bold.journal.volume 1429 | { "\textbf{" volume * "}" * } 1430 | { volume } 1431 | if$ 1432 | } 1433 | { "" } 1434 | if$ 1435 | } 1436 | 1437 | FUNCTION {format.journal.number} 1438 | { number empty$ not 1439 | { "\allowbreak (" number * ")" * } 1440 | { "" } 1441 | if$ 1442 | } 1443 | 1444 | FUNCTION {format.journal.pages} 1445 | { pages empty$ 1446 | { "" } 1447 | { format.extracted.pages } 1448 | if$ 1449 | } 1450 | 1451 | FUNCTION {format.periodical.year.volume.number} 1452 | { year empty$ not 1453 | { year extract.before.slash } 1454 | { "empty year in periodical " cite$ * warning$ } 1455 | if$ 1456 | volume empty$ not 1457 | { ", " * volume extract.before.dash * } 1458 | 'skip$ 1459 | if$ 1460 | number empty$ not 1461 | { "\allowbreak (" * number extract.before.dash * ")" * } 1462 | 'skip$ 1463 | if$ 1464 | "--" * 1465 | year extract.after.slash empty$ 1466 | volume extract.after.dash empty$ and 1467 | number extract.after.dash empty$ and not 1468 | { year extract.after.slash empty$ not 1469 | { year extract.after.slash * } 1470 | { year extract.before.slash * } 1471 | if$ 1472 | volume empty$ not 1473 | { ", " * volume extract.after.dash * } 1474 | 'skip$ 1475 | if$ 1476 | number empty$ not 1477 | { "\allowbreak (" * number extract.after.dash * ")" * } 1478 | 'skip$ 1479 | if$ 1480 | } 1481 | 'skip$ 1482 | if$ 1483 | } 1484 | 1485 | FUNCTION {check.url} 1486 | { url empty$ not 1487 | { "\url{" url * "}" * 'entry.url := 1488 | #1 'entry.is.electronic := 1489 | } 1490 | { howpublished empty$ not 1491 | { howpublished #1 #5 substring$ "\url{" = 1492 | { howpublished 'entry.url := 1493 | #1 'entry.is.electronic := 1494 | } 1495 | 'skip$ 1496 | if$ 1497 | } 1498 | { note empty$ not 1499 | { note #1 #5 substring$ "\url{" = 1500 | { note 'entry.url := 1501 | #1 'entry.is.electronic := 1502 | } 1503 | 'skip$ 1504 | if$ 1505 | } 1506 | 'skip$ 1507 | if$ 1508 | } 1509 | if$ 1510 | } 1511 | if$ 1512 | } 1513 | 1514 | FUNCTION {output.url} 1515 | { show.url is.pure.electronic or 1516 | entry.url empty$ not and 1517 | { new.block 1518 | entry.url output 1519 | } 1520 | 'skip$ 1521 | if$ 1522 | } 1523 | 1524 | FUNCTION {check.doi} 1525 | { doi empty$ not 1526 | { #1 'entry.is.electronic := } 1527 | 'skip$ 1528 | if$ 1529 | } 1530 | 1531 | FUNCTION {is.in.url} 1532 | { 's := 1533 | s empty$ 1534 | { #1 } 1535 | { entry.url empty$ 1536 | { #0 } 1537 | { s text.length$ 'len := 1538 | entry.url text.length$ 'charptr := 1539 | { entry.url charptr len substring$ s = not 1540 | charptr #0 > 1541 | and 1542 | } 1543 | { charptr #1 - 'charptr := } 1544 | while$ 1545 | charptr 1546 | } 1547 | if$ 1548 | } 1549 | if$ 1550 | } 1551 | 1552 | FUNCTION {format.doi} 1553 | { "" 1554 | doi empty$ not 1555 | { "" 's := 1556 | doi 't := 1557 | #0 'numnames := 1558 | { t empty$ not} 1559 | { t #1 #1 substring$ 'tmp.str := 1560 | tmp.str "," = tmp.str " " = or t #2 #1 substring$ empty$ or 1561 | { t #2 #1 substring$ empty$ 1562 | { s tmp.str * 's := } 1563 | 'skip$ 1564 | if$ 1565 | s empty$ s is.in.url or 1566 | 'skip$ 1567 | { numnames #1 + 'numnames := 1568 | numnames #1 > 1569 | { ", " * } 1570 | { "DOI: " * } 1571 | if$ 1572 | "\doi{" s * "}" * * 1573 | } 1574 | if$ 1575 | "" 's := 1576 | } 1577 | { s tmp.str * 's := } 1578 | if$ 1579 | t #2 global.max$ substring$ 't := 1580 | } 1581 | while$ 1582 | } 1583 | 'skip$ 1584 | if$ 1585 | } 1586 | 1587 | FUNCTION {output.doi} 1588 | { doi empty$ not show.doi and 1589 | show.english.translation entry.lang lang.zh = and not and 1590 | { new.block 1591 | format.doi output 1592 | } 1593 | 'skip$ 1594 | if$ 1595 | } 1596 | 1597 | FUNCTION {check.electronic} 1598 | { "" 'entry.url := 1599 | #0 'entry.is.electronic := 1600 | 'check.doi 1601 | 'skip$ 1602 | if$ 1603 | 'check.url 1604 | 'skip$ 1605 | if$ 1606 | medium empty$ not 1607 | { medium "MT" = medium "DK" = or medium "CD" = or medium "OL" = or 1608 | { #1 'entry.is.electronic := } 1609 | 'skip$ 1610 | if$ 1611 | } 1612 | 'skip$ 1613 | if$ 1614 | } 1615 | 1616 | FUNCTION {format.eprint} 1617 | { archivePrefix empty$ not 1618 | { archivePrefix } 1619 | { eprinttype empty$ not 1620 | { archivePrefix } 1621 | { "" } 1622 | if$ 1623 | } 1624 | if$ 1625 | 's := 1626 | s empty$ not 1627 | { s ": \eprint{" * 1628 | url empty$ not 1629 | { url } 1630 | { "https://" s "l" change.case$ * ".org/abs/" * eprint * } 1631 | if$ 1632 | * "}{" * 1633 | eprint * "}" * 1634 | } 1635 | { eprint } 1636 | if$ 1637 | } 1638 | 1639 | FUNCTION {output.eprint} 1640 | { show.preprint eprint empty$ not and 1641 | { new.block 1642 | format.eprint output 1643 | } 1644 | 'skip$ 1645 | if$ 1646 | } 1647 | 1648 | FUNCTION {format.note} 1649 | { note empty$ not show.note and 1650 | { note } 1651 | { "" } 1652 | if$ 1653 | } 1654 | 1655 | FUNCTION {output.translation} 1656 | { show.english.translation entry.lang lang.zh = and 1657 | { translation empty$ not 1658 | { translation } 1659 | { "[English translation missing!]" } 1660 | if$ 1661 | " (in Chinese)" * output 1662 | write$ 1663 | format.doi duplicate$ empty$ not 1664 | { newline$ 1665 | write$ 1666 | } 1667 | 'pop$ 1668 | if$ 1669 | " \\" write$ 1670 | newline$ 1671 | "(" write$ 1672 | "" 1673 | before.all 'output.state := 1674 | } 1675 | 'skip$ 1676 | if$ 1677 | } 1678 | 1679 | FUNCTION {empty.misc.check} 1680 | { author empty$ title empty$ 1681 | year empty$ 1682 | and and 1683 | key empty$ not and 1684 | { "all relevant fields are empty in " cite$ * warning$ } 1685 | 'skip$ 1686 | if$ 1687 | } 1688 | 1689 | FUNCTION {monograph} 1690 | { output.bibitem 1691 | output.translation 1692 | author empty$ not 1693 | { format.authors } 1694 | { editor empty$ not 1695 | { format.editors } 1696 | { "empty author and editor in " cite$ * warning$ 1697 | "" 1698 | } 1699 | if$ 1700 | } 1701 | if$ 1702 | output 1703 | year.after.author 1704 | { period.after.author 1705 | 'new.sentence 1706 | 'skip$ 1707 | if$ 1708 | format.year "year" output.check 1709 | } 1710 | 'skip$ 1711 | if$ 1712 | new.block 1713 | format.series.vol.num.title "title" output.check 1714 | "M" set.entry.mark 1715 | format.mark "" output.after 1716 | new.block 1717 | format.translators output 1718 | new.sentence 1719 | format.edition output 1720 | new.block 1721 | format.address.publisher output 1722 | year.after.author not 1723 | { format.year "year" output.check } 1724 | 'skip$ 1725 | if$ 1726 | format.pages bbl.pages.colon output.after 1727 | format.urldate "" output.after 1728 | output.url 1729 | output.doi 1730 | new.block 1731 | format.note output 1732 | fin.entry 1733 | } 1734 | 1735 | FUNCTION {incollection} 1736 | { output.bibitem 1737 | output.translation 1738 | format.authors output 1739 | author format.key output 1740 | year.after.author 1741 | { period.after.author 1742 | 'new.sentence 1743 | 'skip$ 1744 | if$ 1745 | format.year "year" output.check 1746 | } 1747 | 'skip$ 1748 | if$ 1749 | new.block 1750 | format.title "title" output.check 1751 | "M" set.entry.mark 1752 | format.mark "" output.after 1753 | new.block 1754 | format.translators output 1755 | new.slash 1756 | format.editors output 1757 | new.block 1758 | format.series.vol.num.booktitle "booktitle" output.check 1759 | new.block 1760 | format.edition output 1761 | new.block 1762 | format.address.publisher output 1763 | year.after.author not 1764 | { format.year "year" output.check } 1765 | 'skip$ 1766 | if$ 1767 | format.extracted.pages bbl.pages.colon output.after 1768 | format.urldate "" output.after 1769 | output.url 1770 | output.doi 1771 | new.block 1772 | format.note output 1773 | fin.entry 1774 | } 1775 | 1776 | FUNCTION {periodical} 1777 | { output.bibitem 1778 | output.translation 1779 | format.authors output 1780 | author format.key output 1781 | year.after.author 1782 | { period.after.author 1783 | 'new.sentence 1784 | 'skip$ 1785 | if$ 1786 | format.year "year" output.check 1787 | } 1788 | 'skip$ 1789 | if$ 1790 | new.block 1791 | format.title "title" output.check 1792 | "J" set.entry.mark 1793 | format.mark "" output.after 1794 | new.block 1795 | format.periodical.year.volume.number output 1796 | new.block 1797 | format.address.publisher output 1798 | year.after.author not 1799 | { format.periodical.year "year" output.check } 1800 | 'skip$ 1801 | if$ 1802 | format.urldate "" output.after 1803 | output.url 1804 | output.doi 1805 | new.block 1806 | format.note output 1807 | fin.entry 1808 | } 1809 | 1810 | FUNCTION {journal.article} 1811 | { output.bibitem 1812 | output.translation 1813 | format.authors output 1814 | author format.key output 1815 | year.after.author 1816 | { period.after.author 1817 | 'new.sentence 1818 | 'skip$ 1819 | if$ 1820 | format.year "year" output.check 1821 | } 1822 | 'skip$ 1823 | if$ 1824 | new.block 1825 | title.in.journal 1826 | { format.title "title" output.check 1827 | entrysubtype empty$ not 1828 | { 1829 | entrysubtype "newspaper" = 1830 | { "N" set.entry.mark } 1831 | { "J" set.entry.mark } 1832 | if$ 1833 | } 1834 | { "J" set.entry.mark } 1835 | if$ 1836 | format.mark "" output.after 1837 | new.block 1838 | } 1839 | 'skip$ 1840 | if$ 1841 | format.journal "journal" output.check 1842 | year.after.author not 1843 | { format.date "year" output.check } 1844 | 'skip$ 1845 | if$ 1846 | format.journal.volume output 1847 | format.journal.number "" output.after 1848 | format.journal.pages bbl.pages.colon output.after 1849 | format.urldate "" output.after 1850 | output.url 1851 | output.doi 1852 | new.block 1853 | format.note output 1854 | fin.entry 1855 | } 1856 | 1857 | FUNCTION {patent} 1858 | { output.bibitem 1859 | output.translation 1860 | format.authors output 1861 | author format.key output 1862 | year.after.author 1863 | { period.after.author 1864 | 'new.sentence 1865 | 'skip$ 1866 | if$ 1867 | format.year "year" output.check 1868 | } 1869 | 'skip$ 1870 | if$ 1871 | new.block 1872 | format.title "title" output.check 1873 | "P" set.entry.mark 1874 | format.mark "" output.after 1875 | new.block 1876 | format.date "year" output.check 1877 | format.urldate "" output.after 1878 | output.url 1879 | output.doi 1880 | new.block 1881 | format.note output 1882 | fin.entry 1883 | } 1884 | 1885 | FUNCTION {electronic} 1886 | { #1 #1 check.electronic 1887 | #1 'entry.is.electronic := 1888 | #1 'is.pure.electronic := 1889 | output.bibitem 1890 | output.translation 1891 | format.authors output 1892 | author format.key output 1893 | year.after.author 1894 | { period.after.author 1895 | 'new.sentence 1896 | 'skip$ 1897 | if$ 1898 | format.year "year" output.check 1899 | } 1900 | 'skip$ 1901 | if$ 1902 | new.block 1903 | format.series.vol.num.title "title" output.check 1904 | "EB" set.entry.mark 1905 | format.mark "" output.after 1906 | new.block 1907 | format.address.publisher output 1908 | year.after.author not 1909 | { date empty$ 1910 | { format.date output } 1911 | 'skip$ 1912 | if$ 1913 | } 1914 | 'skip$ 1915 | if$ 1916 | format.pages bbl.pages.colon output.after 1917 | format.editdate "" output.after 1918 | format.urldate "" output.after 1919 | output.url 1920 | output.doi 1921 | new.block 1922 | format.note output 1923 | fin.entry 1924 | } 1925 | 1926 | FUNCTION {preprint} 1927 | { output.bibitem 1928 | output.translation 1929 | author empty$ not 1930 | { format.authors } 1931 | { editor empty$ not 1932 | { format.editors } 1933 | { "empty author and editor in " cite$ * warning$ 1934 | "" 1935 | } 1936 | if$ 1937 | } 1938 | if$ 1939 | output 1940 | year.after.author 1941 | { period.after.author 1942 | 'new.sentence 1943 | 'skip$ 1944 | if$ 1945 | format.year "year" output.check 1946 | } 1947 | 'skip$ 1948 | if$ 1949 | new.block 1950 | title.in.journal 1951 | { format.series.vol.num.title "title" output.check 1952 | "A" set.entry.mark 1953 | format.mark "" output.after 1954 | new.block 1955 | } 1956 | 'skip$ 1957 | if$ 1958 | format.translators output 1959 | new.sentence 1960 | format.edition output 1961 | new.block 1962 | year.after.author not 1963 | { date empty$ 1964 | { format.date output } 1965 | 'skip$ 1966 | if$ 1967 | } 1968 | 'skip$ 1969 | if$ 1970 | format.pages bbl.pages.colon output.after 1971 | format.editdate "" output.after 1972 | format.urldate "" output.after 1973 | output.eprint 1974 | output.url 1975 | show.preprint not eprint empty$ or 1976 | 'output.doi 1977 | 'skip$ 1978 | if$ 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} { 2044 | booktitle empty$ 2045 | 'book 2046 | 'incollection 2047 | if$ 2048 | } 2049 | 2050 | FUNCTION {inproceedings} 2051 | { "C" set.entry.mark 2052 | incollection 2053 | } 2054 | 2055 | FUNCTION {conference} { inproceedings } 2056 | 2057 | FUNCTION {legislation} { archive } 2058 | 2059 | FUNCTION {map} 2060 | { "CM" set.entry.mark 2061 | misc 2062 | } 2063 | 2064 | FUNCTION {manual} { monograph } 2065 | 2066 | FUNCTION {mastersthesis} 2067 | { "D" set.entry.mark 2068 | monograph 2069 | } 2070 | 2071 | FUNCTION {newspaper} 2072 | { "N" set.entry.mark 2073 | article 2074 | } 2075 | 2076 | FUNCTION {online} 2077 | { "EB" set.entry.mark 2078 | electronic 2079 | } 2080 | 2081 | FUNCTION {phdthesis} { mastersthesis } 2082 | 2083 | FUNCTION {proceedings} 2084 | { "C" set.entry.mark 2085 | monograph 2086 | } 2087 | 2088 | FUNCTION {software} 2089 | { "CP" set.entry.mark 2090 | electronic 2091 | } 2092 | 2093 | FUNCTION {standard} 2094 | { "S" set.entry.mark 2095 | misc 2096 | } 2097 | 2098 | FUNCTION {techreport} 2099 | { "R" set.entry.mark 2100 | misc 2101 | } 2102 | 2103 | FUNCTION {unpublished} { misc } 2104 | 2105 | FUNCTION {default.type} { misc } 2106 | 2107 | MACRO {jan} {"January"} 2108 | 2109 | MACRO {feb} {"February"} 2110 | 2111 | MACRO {mar} {"March"} 2112 | 2113 | MACRO {apr} {"April"} 2114 | 2115 | MACRO {may} {"May"} 2116 | 2117 | MACRO {jun} {"June"} 2118 | 2119 | MACRO {jul} {"July"} 2120 | 2121 | MACRO {aug} {"August"} 2122 | 2123 | MACRO {sep} {"September"} 2124 | 2125 | MACRO {oct} {"October"} 2126 | 2127 | MACRO {nov} {"November"} 2128 | 2129 | MACRO {dec} {"December"} 2130 | 2131 | MACRO {acmcs} {"ACM Computing Surveys"} 2132 | 2133 | MACRO {acta} {"Acta Informatica"} 2134 | 2135 | MACRO {cacm} {"Communications of the ACM"} 2136 | 2137 | MACRO {ibmjrd} {"IBM Journal of Research and Development"} 2138 | 2139 | MACRO {ibmsj} {"IBM Systems Journal"} 2140 | 2141 | MACRO {ieeese} {"IEEE Transactions on Software Engineering"} 2142 | 2143 | MACRO {ieeetc} {"IEEE Transactions on Computers"} 2144 | 2145 | MACRO {ieeetcad} 2146 | {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} 2147 | 2148 | MACRO {ipl} {"Information Processing Letters"} 2149 | 2150 | MACRO {jacm} {"Journal of the ACM"} 2151 | 2152 | MACRO {jcss} {"Journal of Computer and System Sciences"} 2153 | 2154 | MACRO {scp} {"Science of Computer Programming"} 2155 | 2156 | MACRO {sicomp} {"SIAM Journal on Computing"} 2157 | 2158 | MACRO {tocs} {"ACM Transactions on Computer Systems"} 2159 | 2160 | MACRO {tods} {"ACM Transactions on Database Systems"} 2161 | 2162 | MACRO {tog} {"ACM Transactions on Graphics"} 2163 | 2164 | MACRO {toms} {"ACM Transactions on Mathematical Software"} 2165 | 2166 | MACRO {toois} {"ACM Transactions on Office Information Systems"} 2167 | 2168 | MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} 2169 | 2170 | MACRO {tcs} {"Theoretical Computer Science"} 2171 | 2172 | FUNCTION {sortify} 2173 | { purify$ 2174 | "l" change.case$ 2175 | } 2176 | 2177 | FUNCTION {chop.word} 2178 | { 's := 2179 | 'len := 2180 | s #1 len substring$ = 2181 | { s len #1 + global.max$ substring$ } 2182 | 's 2183 | if$ 2184 | } 2185 | 2186 | FUNCTION {format.lab.name} 2187 | { "{vv~}{ll}{, jj}{, ff}" format.name$ 't := 2188 | t "others" = 2189 | { citation.et.al } 2190 | { t get.str.lang 'name.lang := 2191 | name.lang lang.zh = name.lang lang.ja = or 2192 | { t #1 "{ll}{ff}" format.name$ } 2193 | { t #1 "{vv~}{ll}" format.name$ } 2194 | if$ 2195 | } 2196 | if$ 2197 | } 2198 | 2199 | FUNCTION {format.lab.names} 2200 | { 's := 2201 | s #1 format.lab.name 'short.label := 2202 | #1 'nameptr := 2203 | s num.names$ 'numnames := 2204 | "" 2205 | numnames 'namesleft := 2206 | { namesleft #0 > } 2207 | { s nameptr format.lab.name citation.et.al = 2208 | numnames citation.et.al.min #1 - > nameptr citation.et.al.use.first > and or 2209 | { bbl.space * 2210 | citation.et.al * 2211 | #1 'namesleft := 2212 | } 2213 | { nameptr #1 > 2214 | { namesleft #1 = citation.and "" = not and 2215 | { citation.and * } 2216 | { ", " * } 2217 | if$ 2218 | } 2219 | 'skip$ 2220 | if$ 2221 | s nameptr format.lab.name * 2222 | } 2223 | if$ 2224 | nameptr #1 + 'nameptr := 2225 | namesleft #1 - 'namesleft := 2226 | } 2227 | while$ 2228 | } 2229 | 2230 | FUNCTION {author.key.label} 2231 | { author empty$ 2232 | { key empty$ 2233 | { cite$ #1 #3 substring$ } 2234 | 'key 2235 | if$ 2236 | } 2237 | { author format.lab.names } 2238 | if$ 2239 | } 2240 | 2241 | FUNCTION {author.editor.key.label} 2242 | { author empty$ 2243 | { editor empty$ 2244 | { key empty$ 2245 | { cite$ #1 #3 substring$ } 2246 | 'key 2247 | if$ 2248 | } 2249 | { editor format.lab.names } 2250 | if$ 2251 | } 2252 | { author format.lab.names } 2253 | if$ 2254 | } 2255 | 2256 | FUNCTION {author.key.organization.label} 2257 | { author 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 | { author format.lab.names } 2268 | if$ 2269 | } 2270 | 2271 | FUNCTION {editor.key.organization.label} 2272 | { editor empty$ 2273 | { key empty$ 2274 | { organization empty$ 2275 | { cite$ #1 #3 substring$ } 2276 | { "The " #4 organization chop.word #3 text.prefix$ } 2277 | if$ 2278 | } 2279 | 'key 2280 | if$ 2281 | } 2282 | { editor format.lab.names } 2283 | if$ 2284 | } 2285 | 2286 | FUNCTION {calc.short.authors} 2287 | { "" 'short.label := 2288 | type$ "book" = 2289 | type$ "inbook" = booktitle empty$ not and 2290 | or 2291 | 'author.editor.key.label 2292 | { type$ "collection" = 2293 | type$ "proceedings" = 2294 | or 2295 | { editor empty$ not 2296 | 'editor.key.organization.label 2297 | 'author.key.organization.label 2298 | if$ 2299 | } 2300 | 'author.key.label 2301 | if$ 2302 | } 2303 | if$ 2304 | 'short.list := 2305 | short.label empty$ 2306 | { short.list 'short.label := } 2307 | 'skip$ 2308 | if$ 2309 | } 2310 | 2311 | FUNCTION {calc.label} 2312 | { calc.short.authors 2313 | short.list "]" contains 2314 | { "{" short.list * "}" * } 2315 | { short.list } 2316 | if$ 2317 | "(" 2318 | * 2319 | format.year duplicate$ empty$ 2320 | short.list key field.or.null = or 2321 | { pop$ "" } 2322 | 'skip$ 2323 | if$ 2324 | duplicate$ "]" contains 2325 | { "{" swap$ * "}" * } 2326 | 'skip$ 2327 | if$ 2328 | * 2329 | 'label := 2330 | short.label 2331 | "(" 2332 | * 2333 | format.year duplicate$ empty$ 2334 | short.list key field.or.null = or 2335 | { pop$ "" } 2336 | 'skip$ 2337 | if$ 2338 | * 2339 | 'short.label := 2340 | } 2341 | 2342 | INTEGERS { seq.num } 2343 | 2344 | FUNCTION {init.seq} 2345 | { #0 'seq.num :=} 2346 | 2347 | FUNCTION {int.to.fix} 2348 | { "000000000" swap$ int.to.str$ * 2349 | #-1 #10 substring$ 2350 | } 2351 | 2352 | FUNCTION {presort} 2353 | { set.entry.lang 2354 | set.entry.numbered 2355 | show.url show.doi check.electronic 2356 | #0 'is.pure.electronic := 2357 | calc.label 2358 | label sortify 2359 | " " 2360 | * 2361 | seq.num #1 + 'seq.num := 2362 | seq.num int.to.fix 2363 | 'sort.label := 2364 | sort.label * 2365 | #1 entry.max$ substring$ 2366 | 'sort.key$ := 2367 | } 2368 | 2369 | STRINGS { longest.label last.label next.extra last.extra.label } 2370 | 2371 | INTEGERS { longest.label.width number.label } 2372 | 2373 | FUNCTION {initialize.longest.label} 2374 | { "" 'longest.label := 2375 | #0 int.to.chr$ 'last.label := 2376 | "" 'next.extra := 2377 | #0 'longest.label.width := 2378 | #0 'number.label := 2379 | "" 'last.extra.label := 2380 | } 2381 | 2382 | FUNCTION {forward.pass} 2383 | { 2384 | number.label #1 + 'number.label := 2385 | } 2386 | 2387 | FUNCTION {reverse.pass} 2388 | { 2389 | label extra.label * 'label := 2390 | } 2391 | 2392 | FUNCTION {bib.sort.order} 2393 | { sort.label 'sort.key$ := 2394 | } 2395 | 2396 | FUNCTION {begin.bib} 2397 | { preamble$ empty$ 2398 | 'skip$ 2399 | { preamble$ write$ newline$ } 2400 | if$ 2401 | "\begin{thebibliography}{" number.label int.to.str$ * "}" * 2402 | write$ newline$ 2403 | terms.in.macro 2404 | { "\providecommand{\biband}{和}" 2405 | write$ newline$ 2406 | "\providecommand{\bibetal}{等}" 2407 | write$ newline$ 2408 | } 2409 | 'skip$ 2410 | if$ 2411 | "\providecommand{\natexlab}[1]{#1}" 2412 | write$ newline$ 2413 | "\providecommand{\url}[1]{#1}" 2414 | write$ newline$ 2415 | "\expandafter\ifx\csname urlstyle\endcsname\relax\else" 2416 | write$ newline$ 2417 | " \urlstyle{same}\fi" 2418 | write$ newline$ 2419 | "\expandafter\ifx\csname href\endcsname\relax" 2420 | write$ newline$ 2421 | " \DeclareUrlCommand\doi{\urlstyle{rm}}" 2422 | write$ newline$ 2423 | " \def\eprint#1#2{#2}" 2424 | write$ newline$ 2425 | "\else" 2426 | write$ newline$ 2427 | " \def\doi#1{\href{https://doi.org/#1}{\nolinkurl{#1}}}" 2428 | write$ newline$ 2429 | " \let\eprint\href" 2430 | write$ newline$ 2431 | "\fi" 2432 | write$ newline$ 2433 | } 2434 | 2435 | FUNCTION {end.bib} 2436 | { newline$ 2437 | "\end{thebibliography}" write$ newline$ 2438 | } 2439 | 2440 | READ 2441 | 2442 | EXECUTE {init.state.consts} 2443 | 2444 | EXECUTE {load.config} 2445 | 2446 | EXECUTE {init.seq} 2447 | 2448 | ITERATE {presort} 2449 | 2450 | SORT 2451 | 2452 | EXECUTE {initialize.longest.label} 2453 | 2454 | ITERATE {forward.pass} 2455 | 2456 | REVERSE {reverse.pass} 2457 | 2458 | ITERATE {bib.sort.order} 2459 | 2460 | SORT 2461 | 2462 | EXECUTE {begin.bib} 2463 | 2464 | ITERATE {call.type$} 2465 | 2466 | EXECUTE {end.bib} 2467 | -------------------------------------------------------------------------------- /main.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/main.pdf -------------------------------------------------------------------------------- /main.tex: -------------------------------------------------------------------------------- 1 | % !TeX program = xelatex 2 | \documentclass{nwputhesis} 3 | \usepackage{gbt7714} 4 | \begin{document} 5 | 6 | % 生成封面, 使用\maketitle 7 | % 该封面不同学院要求可能不同,如有需要,请在cls文件中自行修改 8 | \maketitle 9 | 10 | \newpage 11 | % 中文摘要页 12 | \makeabstract 13 | 14 | 听觉虚拟又可称为可听化,是近年来随着声学仿真技术的发展而出现的新概 15 | 念,即通过对包含单个(或多个)声源的声场进行物理或数学建模,以达到模拟 16 | 空间听音效果的目的。若考虑双耳效应,则可称为双耳听觉虚拟(Binaural 17 | Modeling)。 18 | 19 | …… 20 | 21 | \myspace{1}% 空一行 22 | \noindent { \blackti 关键词:}听觉虚拟,HRTF,神经网络 23 | 24 | % 英文摘要页 25 | \makeEnabstract 26 | 27 | Virtual auditory technology is also called auralization. It is brought forward as a new concept with the development of acoustic simulation techniques in recent years and can be implemented by establishing the physical or mathematical models of a sound field to achieve sound effects simulation. If we consider the binaural effect, it can be called binaural virtual auditory. 28 | 29 | …… 30 | 31 | \myspace{1} 32 | \noindent \textbf{ KEY WORDS:}virtual auditory, HRTF, neural network 33 | 34 | % 目录 35 | \makecontent 36 | \iffalse 37 | \makefigcontent 38 | \maketabcontent 39 | \fi 40 | % 正文 41 | \maketext 42 | 43 | \section{绪论} 44 | \subsection{可听化技术概述} 45 | \subsubsection{可听化的概念} 46 | 47 | 可听化(Auralization)是近年来随着声学仿真技术的长足发展而出现的新概念\cite{Xu_2023_ICCV} \cite{li2021learning},它的具体含义是通过对一包含单个(或者多个)声源的声场进行物理或数学建模,以达到声音绘制(Audio rendering)或称声学仿真(Acoustical simulation)的目的。这样,人们可以获得该声场中任意位置的双耳听觉感受。换句话说,可听化技术在客观上主要是模拟特定声场(包括声源、声传播环境以及聆听者三要素)中声音传播的物理过程,从而使其中的聆听者作为一个主体能够获得对整个场景声学特性的主观感知 48 | \makespace 49 | \section{信号模型} 50 | \subsection{公式} 51 | \subsubsection{简单公式} 52 | \begin{equation} 53 | \int_a^b f(x)\mathrm{d}x=F(b)-F(a) 54 | \end{equation} 55 | 56 | \subsubsection{多行公式} 57 | 如公式(\ref{q1})所示。 58 | \begin{equation} 59 | \label{q1} 60 | \begin{aligned} 61 | dx & =v_{x}dt \\ 62 | dy & =v_{y}dt \\ 63 | x_{t+1} & =dx+x_{t} \\ 64 | y_{t+1} & =dx+y_{t} 65 | \end{aligned} 66 | \end{equation} 67 | 68 | \subsubsection{括号公式} 69 | 如公式(\ref{q1})所示。 70 | \begin{equation} 71 | \left\{ 72 | \begin{aligned} 73 | 100(t-kT_{2}) & , & t\in (kT_{2}, kT_{2}+0.2 ) \\ 74 | 20 & , & t\in (kT_{2}+0.2,kT_{2}+2.2) \\ 75 | -100t+240 & , & t\in( kT_{2}+2.2, kT_{2}+2.4) \\ 76 | 0 & , & t\in (kT_{2}+2.4,(k+1)T_{2}) 77 | \end{aligned} 78 | \right. 79 | \end{equation} 80 | 81 | \subsection{表格} 82 | \subsubsection{简单表格} 83 | 如表\ref{table1}所示。 84 | 85 | \begin{table}[H] 86 | \fontsize{10.5bp}{1.25} 87 | \caption{表格标题} 88 | % \setlength{\abovecaptionskip}{0.2cm} %调整标题与图距离 89 | % \setlength{\belowcaptionskip}{0.2cm} %调整标题与下文距离 90 | \centering\label{table1} 91 | % \vspace{-0.5em} 92 | \begin{tabular}{|c|c|c|c|} 93 | \hline % \toprule[1.5pt] 94 | 方法 & A算法 & B算法 & C算法 \\ \hline 95 | 误差/dB & 0.86 & 1.02 & 0.69 \\ \hline 96 | 计算时间/s & 25 & 25 & 27 \\ \hline 97 | \end{tabular} 98 | \end{table} 99 | 100 | \subsubsection{三线表} 101 | 三线表参考表\ref{table3} 102 | \begin{table}[H] 103 | \fontsize{10.5bp}{1.25} 104 | \caption{表格标题} 105 | % \setlength{\abovecaptionskip}{0.2cm} %调整标题与图距离 106 | % \setlength{\belowcaptionskip}{0.2cm} %调整标题与下文距离 107 | \centering\label{table3} 108 | % \vspace{-0.5em} 109 | \begin{tabular}{cccc} 110 | \toprule[1.5pt] 111 | 方法 & A算法 & B算法 & C算法 \\ 112 | \toprule[1.5pt] 113 | 误差/dB & 0.86 & 1.02 & 0.69 \\ 114 | 计算时间/s & 25 & 25 & 27 \\ 115 | \toprule[1.5pt] 116 | \end{tabular} 117 | \end{table} 118 | 119 | \subsubsection{精排表格} 120 | 较为复杂的表格参考表\ref{table2} 121 | \begin{table}[H] 122 | \caption{表格标题} 123 | % \setlength{\abovecaptionskip}{0.2cm} %调整标题与图距离 124 | % \setlength{\belowcaptionskip}{-0.2cm} %调整标题与下文距离 125 | \fontsize{10.5bp}{1.25} 126 | \centering\label{table2} 127 | % \vspace{-0.5em} 128 | \begin{tabular}{|c|c|c|c|} 129 | \hline % \toprule[1.5pt] 130 | \makecell*[c]{ Parameter Group \\ Condition Selection } &\makecell*[c]{ Basic Ways \\of Hatching } & \makecell*[c]{Calculated Average\\ Alapsed Time} & \makecell*[c]{Calculated Average\\ Alapsed Time} \\ 131 | \hline 132 | \makecell*[c]{ Parameter group (1) \\ \\Parameter group (2)\\} &\makecell*[c]{ Zigzag Hatch\\Contour Hatch\\Zigzag Hatch\\Contour Hatch}& \makecell*[c]{468.940\\374.923 \\885.792\\1947.77} & \makecell*[c]{Zigzag 1.888 \\ Contour 5.195 } \\ 133 | \hline 134 | \makecell*[c]{ Parameter group (1) \\ \\ Parameter group (2)\\} &\makecell*[c]{ Zigzag Hatch\\Contour Hatch\\Zigzag Hatch\\Contour Hatch}&\makecell*[c]{ 545.080\\356.847\\1068.275\\1692.098} & \makecell*[c]{Zigzag 1.960 \\ Contour 4.742 } \\ 135 | \hline 136 | \end{tabular} 137 | % \vspace{-1.5em} 138 | \end{table} 139 | 140 | \subsection{图片} 141 | \subsubsection{单个图片} 142 | 单图如图\ref{P1}所示。 143 | \begin{figure}[!ht] 144 | \centering 145 | %\vspace{-0.30cm} %设置与上面正文的距离` 146 | %\setlength{\abovecaptionskip}{0.0cm} %调整图片标题与图距离` 147 | %\setlength{\belowcaptionskip}{0.0cm} %调整图片标题与下文距离 148 | \includegraphics[width=4cm]{./picture/test.png} 149 | \caption{图片标题}\label{P1} 150 | \end{figure} 151 | \subsubsection{子图} 152 | 多子图如图\ref{P2}、\ref{P2.1}、\ref{P2.2}所示。 153 | \begin{figure}[h!] 154 | \centering 155 | \begin{subfigure}[b]{0.25\linewidth} 156 | \includegraphics[width=\linewidth]{picture/test.png} 157 | \caption{图片标题1}\label{P2.1} 158 | \end{subfigure} 159 | \begin{subfigure}[b]{0.25\linewidth} 160 | \includegraphics[width=\linewidth]{picture/test.png} 161 | \caption{图片标题2}\label{P2.2} 162 | \end{subfigure} 163 | \caption{总标题} 164 | \label{P2} 165 | \end{figure} 166 | \makespace 167 | \section{英文标题Test} 168 | \subsection{英文标题Test} 169 | \subsubsection{英文标题Test} 170 | % 参考文献 171 | \makespace 172 | \section*{参考文献} 173 | \begingroup % 去掉thebibliography环境自带的“参考文献”标题 174 | \renewcommand{\section}[2]{} 175 | \addcontentsline{toc}{section}{参考文献} 176 | % npu专用 177 | \bibliographystyle{gbt7714-numerical} 178 | \addtolength{\itemsep}{-0.6em} % 缩小参考文献间的垂直间距 179 | \begin{spacing}{1.0} %段落行距设置 180 | \bibliography{reference/reference} 181 | \end{spacing} 182 | % 参考文献位置 183 | 184 | 185 | % 致谢 186 | \makespace %另起一页空两行 187 | \section*{致谢} 188 | \begin{center} 189 | { \blackti \fontsize{16.0600pt}{1.25}致 \, 谢} 190 | \end{center} 191 | \addcontentsline{toc}{section}{致\texorpdfstring{ \, }{} 谢} 192 | \myspace{1} 193 | 致谢内容。 194 | 195 | % 毕业设计小结 196 | \section*{毕业设计小结} 197 | \makespace 198 | \begin{center} 199 | { \blackti \fontsize{16.0600pt}{1.25}毕业设计小结} 200 | \end{center} 201 | \addcontentsline{toc}{section}{毕业设计小结} 202 | \myspace{1} 203 | 小结内容。 204 | 205 | % 附录 206 | \makespace 207 | \section*{附录} 208 | \begin{center} 209 | { \blackti \fontsize{16.0600pt}{1.25}附 \, 录} 210 | \end{center} 211 | \addcontentsline{toc}{section}{附\texorpdfstring{ \, }{} 录} 212 | \myspace{1} 213 | 附录内容。 214 | \end{document} 215 | 216 | -------------------------------------------------------------------------------- /nwputhesis.cls: -------------------------------------------------------------------------------- 1 | \NeedsTeXFormat{LaTeX2e} 2 | \ProvidesClass{nwputhesis} 3 | [2024/4/18 v0.8.0 Standard LaTeX Template for NWPU thesis] 4 | % Loading Class 5 | \LoadClass[12pt,fontset=none]{ctexart} 6 | % Loading Package 7 | \RequirePackage{ifxetex} 8 | \RequireXeTeX 9 | \ifxetex\else 10 | \ClassError{nwputhesis}{You must use the `xelatex' driver\MessageBreak Please choose `xelatex'}{% 11 | Just choose `xelatex', no `pdflatex' or `latex' and so on.} 12 | \fi 13 | % 空格&空行 14 | \RequirePackage{color} 15 | \newcommand{\myspace}[1]{\par\vspace{#1\baselineskip}} 16 | \newcommand{\makespace}{ 17 | \newpage 18 | \textcolor{white}{11}\\ 19 | \textcolor{white}{11} 20 | } 21 | % 首行缩进 22 | \RequirePackage{indentfirst} 23 | \setlength{\parindent}{2em} 24 | \RequirePackage{enumitem} 25 | % 页眉设置 26 | \RequirePackage{fancyhdr} 27 | \setlength{\headheight}{27pt} 28 | \setlength{\headsep}{7pt} 29 | \renewcommand{\headrulewidth}{1pt} %线宽 30 | \chead{\includegraphics[scale=0.15]{./picture/nwpuheader.png}} 31 | \rhead{} 32 | \lhead{} 33 | \fancypagestyle{cover}{ 34 | \thispagestyle{empty} 35 | \fancyfoot{} % 页脚清空 36 | } 37 | \fancypagestyle{noncover}{ 38 | \fancyfoot[C]{\zihao{-5}\thepage} % 页脚清空 39 | } 40 | % 字体设置 41 | \RequirePackage{xeCJK} 42 | \setmainfont{Times New Roman} 43 | \setCJKmainfont{simsun.ttc}[AutoFakeSlant,AutoFakeBold] 44 | \newCJKfontfamily{\blackti}{simhei.ttf} 45 | \setCJKmonofont{simsun.ttc}[AutoFakeSlant,AutoFakeBold] 46 | % 行间距设置 47 | \RequirePackage{setspace} 48 | \linespread{1.3541667} 49 | \iffalse 50 | {\linespread{2.0} \selectfont% 两倍行距的文字 51 | } 52 | \fi 53 | % 页面设置 54 | \RequirePackage[a4paper]{geometry} 55 | \geometry{ 56 | left=31.8mm, 57 | right=31.8mm, 58 | top=25.4mm, 59 | bottom=25.4mm, 60 | } 61 | % 章节标题定制 62 | \RequirePackage{titlesec} 63 | \titleformat{\section}{\centering\fontsize{16.0600pt}{1.25}\blackti\selectfont}{第\chinese{section}章}{1em}{} 64 | \titleformat{\subsection}{\fontsize{14.0525pt}{1.25}\blackti\selectfont}{\thesubsection}{1em}{} 65 | \titleformat{\subsubsection}{\fontsize{12.0450pt}{1.25}\blackti\selectfont}{\thesubsubsection}{1em}{} 66 | %\renewcommand{\thesubsubsection}{\fontsize{12.0450pt}{1.25}\selectfont \arabic{section}.\arabic{subsection}.\arabic{subsubsection}} 67 | % 目录定制 68 | \RequirePackage{titletoc} 69 | \ctexset{ 70 | section = { 71 | name={第, 章},number={\chinese{section}} 72 | }, 73 | } 74 | \titlecontents{section}[0pt]{\vspace{2mm}\bf} 75 | {\thecontentslabel\hskip.5em}{}{~\titlerule*[0.6pc]{$\cdot$}~\contentspage} 76 | \titlecontents{subsection}[20pt]{} 77 | {\thecontentslabel\hskip.5em}{}{~\titlerule*[0.6pc]{$\cdot$}~\contentspage} 78 | \titlecontents{subsubsection}[30pt]{} 79 | {\thecontentslabel\hskip.5em}{}{~\titlerule*[0.6pc]{$\cdot$}~\contentspage} 80 | % 参考文献 81 | \newcommand{\upcite}[1]{\textsuperscript{\textsuperscript{\cite{#1}}}} 82 | % \RequirePackage{balance} % 参考文献对齐 83 | \makeatletter 84 | %\renewcommand\@biblabel[1]{lquad\quad[#1]} %参考文献标号右对齐 85 | \renewcommand\@biblabel[1]{[#1]\hfill}%参考文献标号左对齐 86 | \makeatother 87 | 88 | % 超链接 89 | \RequirePackage[bookmarksnumbered, bookmarksopen=true]{hyperref} 90 | \hypersetup{hidelinks} 91 | \hypersetup{pdfborder={0 0 0}} 92 | % 公式 93 | \RequirePackage{amsmath} 94 | \RequirePackage{amsfonts} 95 | \RequirePackage{amssymb} 96 | \RequirePackage{bm} 97 | %\numberwithin{equation}{section} 98 | %\renewcommand\theequation{\arabic{section}-\arabic{equation}} 99 | % 表格和图片 100 | \RequirePackage{array} 101 | \RequirePackage{float} 102 | \RequirePackage{tabularx} 103 | \RequirePackage{makecell} 104 | \RequirePackage{tablefootnote} % 表格脚注 105 | \RequirePackage{multirow} % 跨行 106 | \RequirePackage{booktabs} % 三线表 107 | \RequirePackage{longtable}% 跨页表格 108 | \RequirePackage{graphicx} 109 | % 表格和图片标题 110 | \RequirePackage{caption} 111 | \RequirePackage{subcaption} 112 | \RequirePackage{chngcntr} % 清零控制 113 | \counterwithin{equation}{section} 114 | \numberwithin{equation}{section} 115 | \renewcommand\theequation{\arabic{section}-\arabic{equation}} 116 | \counterwithin{figure}{section} 117 | \counterwithin{table}{section} 118 | \captionsetup{labelsep=space,justification=centering} 119 | \DeclareCaptionFont{wuhaohei}{\fontsize{10.5bp}{1.25}\blackti} 120 | \DeclareCaptionFont{wuhao}{\fontsize{10.5bp}{1.25}} 121 | \captionsetup[table]{font = {wuhaohei}} 122 | \captionsetup[figure]{font = {wuhao}} 123 | %\captionsetup[subfigure]{font = {wuhao}} 124 | \renewcommand{\thefigure}{\thesection{}-\arabic{figure}} 125 | \renewcommand {\thetable} {\thesection{}-\arabic{table}} 126 | % 算法伪代码 127 | \RequirePackage{algorithm,algorithmic} 128 | \makeatletter 129 | \newenvironment{breakablealgorithm} 130 | {% \begin{breakablealgorithm} 131 | \begin{center} 132 | \refstepcounter{algorithm}% New algorithm 133 | \hrule height.8pt depth0pt \kern2pt% \@fs@pre for \@fs@ruled 134 | \renewcommand{\caption}[2][\relax]{% Make a new \caption 135 | {\raggedright\textbf{\ALG@name~\thealgorithm} ##2\par}% 136 | \ifx\relax##1\relax % #1 is \relax 137 | \addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##2}% 138 | \else % #1 is not \relax 139 | \addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##1}% 140 | \fi 141 | \kern2pt\hrule\kern2pt 142 | } 143 | }{% \end{breakablealgorithm} 144 | \kern2pt\hrule\relax% \@fs@post for \@fs@ruled 145 | \end{center} 146 | } 147 | \makeatother 148 | 149 | % Cover 150 | \renewcommand{\maketitle}{\par 151 | \begingroup 152 | \newpage 153 | \global\@topnum\z@ % Prevents figures from going at top of page. 154 | \@maketitle 155 | \endgroup 156 | } 157 | \def\maketitle{ 158 | \pagestyle{cover} 159 | \begin{figure}[h!] 160 | \centering 161 | \vspace{2.30cm} %设置与上面正文的距离` 162 | %\setlength{\abovecaptionskip}{0.0cm} 163 | %\setlength{\belowcaptionskip}{0.0cm} 164 | \includegraphics[width=10cm]{picture/nwpulogo.png} 165 | \vspace{1.30cm} 166 | \end{figure} 167 | \begin{center} 168 | {\fontsize{42.1575pt}{1.25}\textbf{本科毕业设计(论文)}} 169 | \end{center} 170 | 171 | \begin{center} 172 | \vspace{3.5cm} 173 | \fontsize{20pt}{\baselineskip}\selectfont 174 | {\fontsize{16.0600pt}{1.25}\blackti 题目:\underline{ \textcolor{white}{111111}论文题目 \textcolor{white}{111111}}} 175 | \vspace{1.5cm} 176 | 177 | {\fontsize{14.0525pt}{1.25} 专业名称\underline{ \textcolor{white}{11111} 名\quad 称\textcolor{white}{111111}}} 178 | \vspace{1.5cm} 179 | 180 | {\fontsize{14.0525pt}{1.25} 学生姓名\underline{ \textcolor{white}{11111}姓\quad 名\textcolor{white}{111111}}} 181 | \vspace{1.5cm} 182 | 183 | {\fontsize{14.0525pt}{1.25} 指导教师\underline{ \textcolor{white}{11111}姓\quad 名\textcolor{white}{111111}}} 184 | \vspace{1.5cm} 185 | 186 | {\fontsize{14.0525pt}{1.25} 毕业时间\underline{ \textcolor{white}{1111}{\large 2023}年{\large 7}月\textcolor{white}{,,111}}} 187 | % {\fontsize{20pt}{1.25} 专业名称\underline{ \textcolor{white}{11111111} \textcolor{white}{11111111}}} 188 | \vspace{1.5cm} 189 | \end{center}} 190 | 191 | % abstract 192 | \newcommand{\makeabstract}{ 193 | \pagestyle{noncover} 194 | \setcounter{page}{1} 195 | \pagenumbering{Roman} 196 | \textcolor{white}{11}\\ 197 | \textcolor{white}{11} 198 | \begin{center} 199 | { \blackti \fontsize{16.0600pt}{1.25}摘 \, 要} 200 | \end{center} 201 | \textcolor{white}{11} 202 | } 203 | 204 | \newcommand{\makeEnabstract}{ 205 | \newpage 206 | \textcolor{white}{11}\\ 207 | \textcolor{white}{11} 208 | \begin{center} 209 | { \textbf{\fontsize{16.0600pt}{1.25}ABSTRACT}} 210 | \end{center} 211 | \textcolor{white}{11}} 212 | 213 | 214 | % content 215 | \newcommand{\makecontent}{ 216 | \newpage 217 | \textcolor{white}{11}\\ 218 | \textcolor{white}{11} 219 | \tableofcontents} 220 | 221 | % text 222 | \newcommand{\maketext}{ 223 | \newpage 224 | \setcounter{page}{1} 225 | \pagenumbering{arabic} 226 | \textcolor{white}{1}} 227 | 228 | % 表格和图片目录 229 | \renewcommand{\listfigurename}{图\quad 目\quad 录} 230 | \renewcommand{\listtablename}{表\quad 目\quad 录} 231 | \newcommand{\makefigcontent}{ \newpage 232 | \textcolor{white}{11} 233 | 234 | \textcolor{white}{11} 235 | \listoffigures} 236 | \newcommand{\maketabcontent}{ \newpage 237 | \textcolor{white}{11} 238 | 239 | \textcolor{white}{11} 240 | \listoftables} 241 | \titlecontents{figure}[20pt]{}{\figurename~\thecontentslabel\quad}{}{~\titlerule*[0.6pc]{$\cdot$}~\contentspage} 242 | \titlecontents{table}[20pt]{}{\tablename~\thecontentslabel\quad}{}{~\titlerule*[0.6pc]{$\cdot$}~\contentspage} -------------------------------------------------------------------------------- /picture/nwpuheader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/picture/nwpuheader.png -------------------------------------------------------------------------------- /picture/nwpulogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/picture/nwpulogo.png -------------------------------------------------------------------------------- /picture/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/picture/test.png -------------------------------------------------------------------------------- /reference/reference.bib: -------------------------------------------------------------------------------- 1 | @InProceedings{Xu_2023_ICCV, 2 | author = {Xu, Yue and Li, Yong-Lu and Huang, Zhemin and Liu, Michael Xu and Lu, Cewu and Tai, Yu-Wing and Tang, Chi-Keung}, 3 | title = {EgoPCA: A New Framework for Egocentric Hand-Object Interaction Understanding}, 4 | booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)}, 5 | month = {October}, 6 | year = {2023}, 7 | pages = {5273-5284} 8 | } 9 | 10 | @article{li2021learning, 11 | title={Learning Single/Multi-Attribute of Object with Symmetry and Group}, 12 | author={Li, Yong-Lu and Xu, Yue and Xu, Xinyu and Mao, Xiaohan and Lu, Cewu}, 13 | journal={TPAMI}, 14 | year={2021} 15 | } -------------------------------------------------------------------------------- /simhei.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/simhei.ttf -------------------------------------------------------------------------------- /simsun.ttc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lihanshu/NWPU-Thesis-Template/8a30c05814a968034ad8148269a02f42596ee3ef/simsun.ttc --------------------------------------------------------------------------------