forked from nuaatug/nuaathesis
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnuaathesis.dtx
2638 lines (2554 loc) · 95.1 KB
/
nuaathesis.dtx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% \iffalse meta-comment
% !TEX program = XeLaTeX
% !TEX encoding = UTF-8
%<*internal>
\iffalse
%</internal>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
\expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\askforoverwritefalse
\preamble
----------------------------------------------------------------
nuaathesis --- Thesis Template for Nanjing University of Aeronautics and Astronautics
Licensed under the Apache License, Version 2.0
See http://www.apache.org/licenses/LICENSE-2.0
----------------------------------------------------------------
\endpreamble
\postamble
Copyright (C) 2020 by nuaatug
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
This work consists of the file nuaathesis.dtx
and the derived files nuaathesis.ins,
nuaathesis.cls,
nuaathesis.cfg and
nuaathesis.pdf
\endpostamble
\usedir{tex/latex/nuaathesis}
\generate{
\file{nuaathesis.cls}{\from{\jobname.dtx}{cls}}
\file{nuaathesis.cfg}{\from{\jobname.dtx}{cfg}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/nuaathesis}
\generate{
\file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble
\usedir{doc/latex/nuaathesis}
\generate{
\file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}
}
\ifx\fmtname\nameofplainTeX
\expandafter\endbatchfile
\else
\expandafter\endgroup
\fi
%</internal>
%<*driver>
\ProvidesFile{nuaathesis.drv}[2021/05/16 v2.3 NUAA thesis template]
\documentclass{ltxdoc}
\usepackage{dtx-style}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
% \CheckSum{0}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
% \DoNotIndex{\newenvironment,\@bsphack,\@empty,\@esphack,\sfcode}
% \DoNotIndex{\addtocounter,\label,\let,\linewidth,\newcounter}
% \DoNotIndex{\noindent,\normalfont,\par,\parskip,\phantomsection}
% \DoNotIndex{\providecommand,\ProvidesPackage,\refstepcounter}
% \DoNotIndex{\RequirePackage,\setcounter,\setlength,\string,\strut}
% \DoNotIndex{\textbackslash,\texttt,\ttfamily,\usepackage}
% \DoNotIndex{\begin,\end,\begingroup,\endgroup,\par,\\}
% \DoNotIndex{\if,\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi}
% \DoNotIndex{\let,\def,\xdef,\edef,\newcommand,\renewcommand}
% \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect}
% \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize}
% \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny}
% \DoNotIndex{\normalfont,\bfseries,\slshape,\sffamily,\interlinepenalty}
% \DoNotIndex{\textbf,\textit,\textsf,\textsc}
% \DoNotIndex{\hfil,\par,\hskip,\vskip,\vspace,\quad}
% \DoNotIndex{\centering,\raggedright,\ref}
% \DoNotIndex{\c@secnumdepth,\@startsection,\@setfontsize}
% \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m@ne}
% \DoNotIndex{\@@par,\DeclareOperation,\RequirePackage,\LoadClass}
% \DoNotIndex{\AtBeginDocument,\AtEndDocument}
%
%\GetFileInfo{\jobname.drv}
%
%\title{
% \textsf{nuaathesis} --- 南京航空航天大学学位论文 \LaTeX{} 模板
%}
%\author{
% nuaatug\thanks{https://github.com/nuaatug}
%}
%\date{\fileversion{} Released \filedate}
%
%\maketitle
%
% \pagestyle{fancy}
% \begin{multicols}{2}[
% \setlength{\columnseprule}{.4pt}
% \setlength{\columnsep}{18pt}]
% \tableofcontents
% \end{multicols}
% \clearpage
%
% \changes{v2.3}{2021/05/16}{根据 2021 年本科模板更新封面。}
% \changes{v2.2}{2020/05/24}{同步学校的新本科模板。}
% \changes{v2.1}{2018/11/01}{初步实现英文、日文论文格式,基本去除对 \CTeX{} 的依赖。}
% \changes{v2.0}{2017/9/17}{仿照 \cquthesis{},使用 \textsc{DocStrip},使用根据校 Word 模板直接计算出的行间距等距离,添加硕/博士模板,重写大部分代码。}
% \changes{v1.0}{2017/6/22}{\nuaathesis{} 正式通过毕业设计审核,增加毕业设计/毕业论文选项,并调整页眉;针对双面打印选项调整页脚;细节调整。}
% \changes{v0.92}{2017/6/5}{增加 biblatex 对 natbib 支持,如citep可以直接在行中引用编号, citet可以引用作者 (这里貌似仍然是个 bug, 理论上应该是引用题目,还没仔细研究。); 添加subcaption和caption包,修复bicaption参数; 添加多列图片示例代码;多处细节调整。}
% \changes{v0.91a}{2017/5/12}{添加双语标题和标题中使用脚注用例;增加几个默认宏包,方便使用;部分细节修调整。}
% \changes{v0.91}{2017/3/15}{使用开源Fandol字体替代华文字体和思源雅黑字体。}
% \changes{v0.9a}{2017/3/14}{加入使脚注出现在页脚线下方的代码,加入模板更新记录。}
% \changes{v0.9}{2017/3/14}{跨版发布,代码重构,模板基本实现,开始由Git进行版本控制,进入微调阶段。}
% \changes{v0.3}{2013/6/4}{加入对团队报告的支持,加入几个宏包,加一些预定义符号。}
% \changes{v0.2}{2013/5/29}{详情未知。}
% \changes{v0.1}{2013/5/18}{详情未知。}
% \changes{v0.0}{2013/5/15}{模板发布。}
%
% \def\indexname{代码索引}
% \def\glossaryname{更新记录}
% \IndexPrologue{\clearpage\section{\indexname}}
% \GlossaryPrologue{\section{\glossaryname}}
%
% \section{欢迎}
%
% \nuaathesis{} 是南京航空航天大学毕业论文的 \LaTeX{} 模板,支持学士、硕士、博士论文的排版。
% 合理使用本模板可以减轻论文撰写过程中修改格式的工作量。
%
% 本模板按《南京航空航天大学本科生毕业设计(论文)撰写规范》(2008年修订版)和
% 《南京航空航天大学研究生学位论文撰写要求》(2011年6月修订版)编写,
% 力求合规、简洁、用户友好、易于维护。本模板的特色有:
% \begin{itemize}
% \item 支持本科(毕业设计、论文)、硕士、博士的毕业论文;
% \item 内置封面、承诺书、摘要、目录等论文部件;
% \item 兼容 Windows、Linux、macOS 等常见系统;
% \item 支持中、英、日三种论文语言。
% \end{itemize}
%
% 本文档会尽可能详细介绍模板的使用方法,如有不清楚的地方可以参考示例文档和源代码。
%
% \subsection{系统要求}
% 本模板用到的宏包较多,有些宏包需要比较新的版本,推荐使用最新的 \TeX~Live 发行版。
%
% 如果您使用系统(Debian、ArchLinux 等)软件包里的 \TeX~Live 的话,
% 请使用系统软件包管理器,安装 \TeX~Live 的以下 collection:
% \verb|langchinese, latexextra, science, pictures, fontsextra|。
%
% 如果您使用从 \TeX~Live 官网下载光盘镜像、或是在线安装的话,请使用 \verb|.ci| 目录(可能被隐藏)下的
% \verb|install.bat| (Windows) 或 \verb|install.sh| 来安装 \TeX~Live 宏包。
% 因为 Windows 的脚本需要 PowerShell,如果脚本无法运行的话,
% 请根据 \verb|.ci/texlive.pkgs| 中列出的宏包清单,手工逐个安装。
%
% 除了 \TeX~Live 发行版外,
% Windows 用户也可以使用 MiK\TeX 发行版,它会在编译文档时自动安装所需的依赖项
% (也可以参考 \TeX~Live 的宏包列表手动安装)。
%
% \subsection{获取模板}
% 您可以从 \url{https://github.com/nuaatug/nuaathesis} 获取本模板的源代码,
% 或者从 Release 里下载代码压缩包(强烈推荐后者)。
%
% 如果您正在用这份模板来撰写学位论文,建议您利用 GitHub 的 Watch 按钮,
% 订阅模板的讨论与更新信息。
%
% 表~\ref{tab:contents} 列出了 \nuaathesis{} 的主要文件及其功能:
% \begin{table}[H]
% \centering
% \caption{模板源代码内容}
% \label{tab:contents}
% \begin{tabular}{>{\ttfamily}l|p{8cm}} \toprule
% {\heiti 文件(夹)} & {\heiti 功能描述}\\ \midrule
% nuaathesis.dtx & 本模板和文档源代码 \\
% nuaathesis.bst & 参考文献样式 \\ \midrule
% build.sh/bat & 编译脚本 \\
% demo\_chs/ & 带完整目录结构的中文示例文档 \\
% demo\_*/ & 其他示例文档 \\
% logo/ & 论文封面、页眉所需用到的图片 \\ \bottomrule
% \end{tabular}
% \end{table}
%
% 本模板利用 \textsc{DocStrip} 将源代码与文档封装在 \verb|nuaathesis.dtx| 一个文件里,
% 这个文件无法直接在文档中使用,必须先经过编译,然后在文档中使用编译输出的 \verb|nuaathesis.cls|。
% 如果您获取的源代码中不带有编译结果,请运行 \verb|build.bat/sh| 来编译本模板。
%
% 编译完成后,请将表~\ref{tab:required} 列出的文件复制到论文的目录。
% \iffalse
% 表~\ref{tab:compiled} 列出了 \verb|nuaathesis.dtx| 编译后产生的文件与作用:
% \begin{table}[H]
% \centering
% \caption{\texttt{nuaathesis.dtx} 编译输出内容}
% \label{tab:compiled}
% \begin{tabular}{>{\ttfamily}l|p{8cm}} \toprule
% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule
% nuaathesis.cls & 主模板 \\
% nuaathesis.cfg & 修改主模板加载行为的配置文件(可选) \\ \midrule
% nuaathesis.pdf & 本文档 \\
% dtx-style.sty & 本文档的样式文件 \\ \bottomrule
% \end{tabular}
% \end{table}
% \fi
% \begin{table}[H]
% \centering
% \caption{\nuaathesis{} 论文所需文件}
% \label{tab:required}
% \begin{tabular}{>{\ttfamily}l|p{8cm}} \toprule
% {\heiti 文件(夹)} & {\heiti 功能描述}\\\midrule
% nuaathesis.cls & 主模板 \\
% nuaabib.bst & 参考文献样式 \\
% logo/ & 封面、页眉所需图片 \\ \midrule
% nuaathesis.cfg & 修改主模板加载行为的配置文件(可选) \\
% nuaathesis.pdf & 本文档(可选) \\ \bottomrule
% \end{tabular}
% \end{table}
%
% \note{由于本模板还处在开发阶段,可能无法保持向后兼容性,请将使用的模板版本复制到论文目录下,不推荐系统全局安装。}
%
% \subsection{快速上手}
% 为了方便演示代码的效果,请参考/修改附带的示例文档。
%
% 本模板没有使用依赖于特定 \LaTeX 引擎的特性,所以您可以使用任意 \CTeX 支持的 \LaTeX 引擎进行编译,
% 推荐使用 \XeLaTeX{} 作引擎,并使用 latexmk 来自动化编译流程。
% up\LaTeX、pdf\LaTeX、\LaTeX 理论上也能够编译中文文档,但不保证能编译出正确结果。
%
% 注:\option{lang=ja} 只支持 up\LaTeX 引擎。
%
% \section{使用说明}
% 本节介绍在使用本文档类写作时,可能会用到的、由本文档类提供的功能。
%
% \subsection{文档类选项}
% \DescribeOption{degree=}
% 选择论文的类型,必选,当前支持 \option{bachelor}、\option{master} 和 \option{doctor}。
%
% \DescribeOption{type=}
% 本科生指定文档是毕业论文 \option{paper} 或者是毕业设计 \option{design}。
%
% \DescribeOption{zhuanshuo}
% 专硕,只会影响封面中的两个字段,默认不启用。
% \sout{(因为想不出合适的英文翻译,所以就用拼音了)}
%
% \DescribeOption{blindtrail}
% \changes{v2.3}{2021/05/16}{添加盲审开关}
% 盲审,将会用 $\times\times\times$ 代替学校与个人信息。
%
% \DescribeOption{blankleft}
% 如果指定了 \option{openright} 并开启了本选项,左侧的空白页将变成没有页眉页脚的完全白纸。
%
% \DescribeOption{abstractopenright}
% 如果指定了 \option{openright} 并开启了本选项,每个摘要页也将从奇数页开始。
%
% \DescribeOption{lang=}
% 选择论文的主语言,将影响加载的底层文档类,当前支持 \option{cn}(默认)、\option{en} 和 \option{ja}。
%
% \DescribeOption{fontset=}
% 指定 \CTeX{} 使用的中文字体,这个参数将原样传递给 \CTeX,具体的用法请参阅 \CTeX{} 文档。
%
% \DescribeOption{AutoFakeBold}
% 也会传递给 \CTeX{},具体用法请参阅 xeCJK 或 fontspec 的手册。
%
% \warn{
% 某些 \LaTeX{} 环境在启用 AutoFakeBold 后,会导致 PDF 复制文本的结果是乱码,影响论文的查重。
% 启用后,请务必检查 PDF 导出 TXT 的结果,如果乱码,请尝试更新 \LaTeX{} 宏包,或者禁用本选项。
% }
%
% \DescribeOption{nobold}
% 禁止本模板使用粗体。在不启用 \option{AutoFakeBold} 的情况下,如果字体不自带粗体,会产生
% \texttt{LaTeX Font Warning}。此时可以通过本选项,来消除这些警告。
%
% \DescribeOption{*}
% 其他参数将传递给对应的底层文档类,常用的有 \option{openany}、\option{openright}、\option{oneside}、\option{twoside} 等。
%
% 在生成单面打印或电子阅读版的论文时,推荐使用 \option{openany}, \option{oneside};
%
% 在生成双面打印的论文时,推荐使用 \option{openright}, \option{blankleft}, \option{twoside}。
%
% \subsection{论文信息}
% 论文信息主要包含两部分:封面页(\cs{nuaaset})和摘要页(\env{abstract} 环境与 \cs{keywords})。
% 这三个宏将设置中文信息,同理还定义了带 \verb|En| 后缀、带 \verb|Ja| 后缀的 3 个宏,
% 分别设置英文和日文的论文信息。
%
% \subsubsection*{中文信息}
% \DescribeMacro{\nuaaset}
% 该宏将设置论文的中文信息,它能接受一个 kvoption 的参数,
% 无论论文语言是什么,该参数内的信息都默认按中文处理(可以用 \cs{jpn} 之类的宏来标注文字语言)。
% 它可以包含以下信息:
%
% \DescribeOption{title=}
% 论文的标题,如果需要手工换行,请使用 \cs{linebreak},并保证“\textbackslash”前没有空格;
%
% 注:该空格会影响本科的声明页、硕/博士页眉的论文标题,中、日文不能有空格,英文必须有空格。
%
% \DescribeOption{author=} 作者的姓名;
%
% \DescribeOption{college=} 学院;
%
% \DescribeOption{advisers=}
% 指导教师的名字,如果需要指定多位指导教师,请用英文逗号分割,
% 本科封面上将会把所有人的名字写在一行,用顿号分割;
% 硕士封面上将会每人的名字将独立占用一行。
%
% \DescribeOption{applydate=}
% 封面日期,如果不指定的话,将会使用当前系统日期。
%
% \textbf{本科生}还支持以下参数:
%
% \DescribeOption{major=} 专业名称;
%
% \DescribeOption{studentid=} 学号;
%
% \DescribeOption{classid=} 班号;
%
% \DescribeOption{industrialadvisers=} 企业导师;
%
% \textbf{硕/博士}还支持以下参数:
%
% \DescribeOption{libraryclassid=} 中图分类号,如果需要指定多个,请手动添加合适的分隔符,
% 模板目前不会替换里面出现的英文逗号;
%
% \DescribeOption{subjectclassid=} 学科分类号;
%
% \DescribeOption{thesisid=} 论文编号;
%
% \DescribeOption{majorsubject=} 学科、专业;
%
% \DescribeOption{researchfield=} 研究方向;
%
% \subsubsection*{英文信息}
% \DescribeMacro{\nuaasetEn}
% 该宏将设置论文的英文信息,它能接受一个 kvoption 的参数,
% \textbf{除了}标题外,其他参数只能由\textbf{硕/博士}使用设置,它可以包含以下信息:
%
% \DescribeOption{title=}
% 论文的标题,如果需要手工换行,请使用 \cs{linebreak},并保证“\textbackslash”前\textbf{有空格};
%
% \DescribeOption{advisers=}
% 指导教师,与中文不同,这里不会作任何处理。
%
% \DescribeOption{degreefull=}
% 英文底部学位全称。
%
% \DescribeOption{*}
% \option{college}、
% \option{majorsubject}、
% \option{author}、
% \option{applydate}、
% 这些参数与中文封面的含义完全一致。
%
% \subsubsection*{日文信息}
% \DescribeMacro{\nuaasetJa}
% 该宏将设置论文的日文信息,它能接受一个 kvoption 的参数,
% 无论论文语言是什么,该参数内的信息都默认按日文处理(可以用 \cs{zhcn} 之类的宏来标注文字语言)。
% 目前只能用来设置标题。
%
% \DescribeOption{title=}
% 论文的标题,如果需要手工换行,请使用 \cs{linebreak},并保证“\textbackslash”前没有空格;
%
% \subsubsection*{摘要页}
% \DescribeEnv{abstract}
% 环境,包括 \env{abstract}、\env{abstractEn} 和 \env{abstractJa},
% 用于定义不同语言摘要页的内容。
%
% \DescribeMacro{\keywords}
% 包括 \cs{keywords}、\cs{keywordsEn} 和 \cs{keywordsJa}。
% 设置摘要页上的关键词,用英文逗号分隔,输出时模板会使用合适的符号进行连接。
%
% \subsection{定理环境}
% 因为本模板提供了多种定理环境编号方式,并且编号格式没有固定的使用方式,
% 因此没有定义任何定理环境,所有环境都需要作者在导言中(使用以下3个宏)定义。
%
% \begin{macro}{\nuaatheoremg}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境,计数器不会重置。
% 环境的名字是 \marg{name},输出时标签是 \marg{label},引用时的标签为 \oarg{refname}。
% 如果 \oarg{refname} 为空,则默认为 \marg{label}。
% 宏的全名为 \verb|NUAA Theorem Global|。
% \end{macro}
%
% \begin{macro}{\nuaatheoremchap}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境,每个章节单独计数。
%
% 即:使用这个宏定义的定理环境,它们的编号有重复。
%
% 环境的名字是 \marg{name},输出时标签是 \marg{label},引用时的标签为 \oarg{refname}。
% 如果 \oarg{refname} 为空,则默认为 \marg{label}。
% 宏的全名为 \verb|NUAA Theorem CHAPter|。
% \end{macro}
%
% \begin{macro}{\nuaatheoremchapu}
% \oarg{refname}\marg{name}\marg{label}
% 定义一个定理环境,与其他同方法声明的环境变量共享一个计数器。
%
% 即:使用这个宏定义的定理环境,它们的编号不会有重复。
%
% 环境的名字是 \marg{name},输出时标签是 \marg{label},引用时的标签为 \oarg{refname}。
% 如果 \oarg{refname} 为空,则默认为 \marg{label}。
% 按照 \pkg{hyperref} 文档里的代码改写而成,
% 宏的全名为 \verb|NUAA Theorem CHAPter Unified|。
% \end{macro}
%
% \subsection{字体}
% 大部分场合下,模板会自动指定字体和大小。
% 但可能有地方仍然需要手工指定字体(比如续表的表头),请使用对应的 \texttt{nuaafont*} 开头的宏。
%
% 学校的字体规定在有些地方比较迷,按常理来说,字体可以分为衬线体与无衬线体,
% 在不同语言中可能有不同的别称,如:
%
% \begin{table}[H]
% \centering
% \begin{tabular}{cccc} \toprule
% 类型 & 英文 & 中文 & 日文 \\ \midrule
% 衬线 & \cs{rmfamily} \textrm{Roman, Serif} & \cs{songti} \songti 宋体 & \cs{mcfamily} \songti 明朝体 \\
% 无衬线 & \cs{sffamily} \textsf{Sans-serif} & \cs{heiti} \heiti 黑体 & \cs{gtfamily} \heiti ゴシック体 \\ \bottomrule
% \end{tabular}
% \caption{本模板依赖的6个主要字体宏}
% \end{table}
%
% 在学校要求中,大部分标题的中文是黑体(无衬线)的,但部分标题的英文却要求是 Times New Roman(衬线)。
% 当前模板只能根据英文字体,自动设置对应的中文/日文字体,因此在部分标题上,可能无法设置成符合学校规定的字体。
%
% 如果觉得 \CTeX 和/或对应的文档类的字体不够美观的话,可以按以下步骤修改字体,
% 需要注意的是以下步骤只适用于 \XeLaTeX 环境。
%
% 修改一个中文字体需要两条命令,可以参考 \verb|demo_chs/global.tex| 开头被 \cs{iffalse} 注释掉的那段代码,
% 它同时修改了宋体与黑体。
% \begin{latex}
% % 加载字体,字体名称可以参考 fc-list 的运行结果
% \setCJKfamilyfont{\CJKrmdefault}[BoldFont=Noto Serif CJK SC Bold]{Noto Serif CJK SC}
% % 重定义宋体
% \renewcommand\songti{\CJKfamily{\CJKrmdefault}}
% % 同理,加载黑体的字体(这里选择字重稍粗的 Medium 作普通字体)
% \setCJKfamilyfont{\CJKsfdefault}[BoldFont=Noto Sans CJK SC Bold]{Noto Sans CJK SC Medium}
% % 重定义黑体
% \renewcommand\heiti{\CJKfamily{\CJKsfdefault}}
% \end{latex}
%
% 除了英文、数学,以及上述 6 种字体外,本模板还用到了楷体 \cs{kaishu},
% 但只在硕士封面上用于学院名称和日期。
% 最后一种用到的“字体”是简启体,只用于硕士封面的校名,
% 由于版权、安装使用不便、所需字形固定等各种原因,简启体的校名将作为 PDF 格式的图片插入。
%
% \section{更新方法}
% 本节将介绍在保留论文代码基本不变的情况下,更新模板代码。
%
% 在更新原论文使用的模板之前,请务必先\textbf{完整备份}所有文件,
% 以防意外导致无法还原、也无法用任何模板版本编译的情况。
%
% 如果版本号变化没有在本节中出现的话,直接将新版的 \texttt{nuaathesis.cls} 替换旧模板即可
%(大概,如果版本号比较接近的话);
% 否则请务必按照本节中描述的步骤进行修改。
%
% \subsection{v2.1 更新至 v2.1b}
% \begin{enumerate}
% \item 用新版的 \texttt{nuaathesis.cls} 替换同名旧模板文件;
% \item 将 \texttt{nuaabib.bst} 解压到论文目录;
% \item 修改论文主文件,将 \cs{bibliographystyle}\texttt{\{nuaathesis\}} 改为 \cs{bibliographystyle}\texttt{\{nuaabib\}};
% \item 对于专硕同学,在论文主文件开头的文档类选项中,添加 \texttt{zhuanshuo} 以使用专硕封面。
% \end{enumerate}
%
% \subsection{v2.1b 更新至 v2.2}
% 本次更新适配了 2020 年新版的本科模板。
% \begin{enumerate}
% \item 复制或替换下列文件(夹):\texttt{nuaathesis.cls}、\texttt{nuaabib.bst} 和 \texttt{logo/};
% \item 修改 \texttt{bachelor.tex}:把开头的模板类选项里的 \texttt{openany,oneside} 修改为 \texttt{openany,twoside};
% 根据新模板样例,调整 \mac{appendix} 以后内容的顺序;
% \item 修改 \texttt{global.tex}:将 \mac{nuaaset} 中的 \texttt{classid} 修改为实际班级的名称(而不是编号),
% 添加或修改 \texttt{thesisid},删除 \texttt{footmisc} 宏包的导入;
% \item 修改 \texttt{manref.tex} 和 \texttt{acknowledge.tex} 的标题,将原来的 \mac{chapter}
% 修改成新模板样例中的 \mac{chapter*} 和 \mac{addcontentsline}(如果存在)。
% \end{enumerate}
%
% \section{外文特辑}
% 本节将介绍外国语论文时的注意事项。
%
% 为了避免外文内容中使用中文格式、字体,本模板选择加载原生的外文文档类,并尽量避免使用 \CTeX 的特性。
%
% 但由于学校的论文模板中没有提及外文的格式,知网上的本校外文(硕士)学位论文格式又是五花八门,
% 所以没能总结出值得信任的标准,请打算用外文写学位论文的准毕业生提前与指导老师确认格式是否有问题。
% 欢迎在 GitHub\footnote{\url{https://github.com/nuaatug/nuaathesis/issues/new}} 上指正格式问题,
% 笔者会在第一时间修正模板,使其符合规范的。
%
% \subsection{英文}
% 英文环境下(即文档参数\option{lang=en}),本模板将加载 \verb|book| 文档类。
% 基本与中文环境兼容,可以在正文中直接使用中文。
%
% \subsubsection*{已知问题}
% 部分英文格式没有确定下来,目前只参照中文的格式、姑且按笔者的直觉设置了一下,包括不限于:
% \begin{itemize}
% \item 各级标题的前后缀、字体、大小写
% \item 正文段落缩进
% \item 定理环境的字体(是否斜体、大小写)
% \item 摘要页顺序、等
% \end{itemize}
%
% \subsection{日文}
% 日文环境下(即文档参数\option{lang=ja}),本模板将加载 \verb|ujbook| 文档类,
% 因为使用了 \CTeX,所以本模板只能使用 \verb|uplatex+dvipdfmx| 进行编译。
%
% 由于当多的中/日汉字共用相同的编码,且在不同语言中有字形差别,因此必须根据文字语言选择正确的字体。
% 本模板会在加载完 \CTeX{} 后,将默认字体恢复成 mc 和 gt。
% 如果论文指定了其他字体的话,请重新定义 \cs{CJKrmdefault}、\cs{CJKsfdefault} 和 \cs{CJKttdefault}。
%
% 以后版本可能会考虑使用别的中文方案,比如 \pkg{pxbabel}
% \footnote{\href{https://qiita.com/zr_tex8r/items/5c14042078b20edbfb07\#\%E4\%B8\%AD\%E5\%9B\%BD\%E8\%AA\%9E\%E9\%9F\%93\%E5\%9B\%BD\%E8\%AA\%9E\%E3\%81\%AE\%E6\%89\%B1\%E3\%81\%84}{https://qiita.com/zr\_tex8r/items/5c14042078b20edbfb07\#中国語韓国語の扱い}}。
%
% \subsubsection*{日文论文+部分中文}
%
% 即指定了 \option{lang=ja} 的前提下,需要在文中使用中文。
% 由于这种情况下,本模板默认已经加载好了所需要的字体,可以直接使用 \cs{zhcn} 宏来标注中文内容,如:
% \begin{latex}
% \zhcn{汉字} 漢字
% \end{latex}
%
% 由于限定了使用 up\LaTeX{} 引擎,它的字体修改方法于 \XeLaTeX{} 完全不同。
% 推荐使用 \pkg{otf} 和 \pkg{pxchfon}。使用方法大致就是在 preamble 部分加上:
% \begin{latex}
% \usepackage[deluxe,uplatex]{otf}
% \usepackage[noto-otc]{pxchfon}
% \end{latex}
%
% \subsubsection*{中文论文+部分日文}
%
% 即指定了 \option{lang=cn} 的前提下,需要在文中使用日文。
% 建议先加载合适的日文字体,并使用 \cs{jpn} 来标注(设置)字体。
%
% 在 \XeLaTeX 环境下,加载日文字体的方法可以参考加载中文字体的步骤,
% 以下代码摘抄自 \verb|demo_chs/global.tex| 第2段被 \cs{iffalse} 注释掉的代码。
% \begin{latex}
% \setCJKfamilyfont{mc}[BoldFont=Noto Serif CJK JP Bold]{Noto Serif CJK JP}
% \newcommand\mcfamily{\CJKfamily{mc}}
% \setCJKfamilyfont{gt}[BoldFont=Noto Sans CJK JP Bold]{Noto Sans CJK JP}
% \newcommand\gtfamily{\CJKfamily{gt}}
% \end{latex}
%
% 这段代码定义了本模板依赖的 \cs{mcfamily} 和 \cs{gtfamily} 两个设置日文字体的宏,
% 定义完后,就可以在中文论文中使用 \cs{jpn} 来设置正确的字体了,如:
% \begin{latex}
% 汉字 \jpn{漢字} % 注意论文中(而非本文档)两个 “字” 的差别
% \end{latex}
%
% \subsubsection*{已知问题}
% 日文的封面、摘要页的格式是个谜,完成度很低,目前只是「適当に」设置了一下。
%
% 模板中没有提到的格式细节(如特殊页面、定理环境)也是按照笔者的直觉设置的,
% 很可能不符合评审老师的要求,因此在交稿前务必与指导老师确认格式是否正确。
%
% 还有,日文(特指 up\LaTeX)环境下,\pkg{ulem} 提供的 \cs{uline} 仍然无法自动换行,
% 如果可以的话,请使用其他宏包代替
% \footnote{\href{https://texwiki.texjp.org/?TeX\%E3\%81\%8C\%E8\%8B\%A6\%E6\%89\%8B\%E3\%81\%A8\%E3\%81\%99\%E3\%82\%8B\%E5\%87\%A6\%E7\%90\%86\#t65559ac}{https://texwiki.texjp.org/?TeXが苦手とする処理\#t65559ac}},
% 比如\pkg{jumoline}(不在 CTAN 上,需手工下载安装,然后用该宏包里的 \cs{Underline} 代替 \cs{uline}。
% 具体地说,在文档 preamble 部分加上以下代码。)
% \begin{latex}
% \usepackage{jumoline}
% \renewcommand\uline[1]{\Underline{#1}}
% \end{latex}
%
% 此外,在使用 \cs{em} 宏时会出错,导致无法使用 biber。
%
% \section{已知问题}
% \begin{itemize}
% \item 中文标点禁则无效:
% 如果前一行的行末是英文/宏,后面接着的中文标点正好需要换行时,
% 中文标点的禁则可能无法生效。原因可以参考这个 issue
% \footnote{\url{https://github.com/CTeX-org/ctex-kit/issues/364}}。
% 这是一个比较尴尬且麻烦的中文 \TeX{} 问题,本模板目前不考虑做任何处理。
% 如果使用 \XeLaTeX{} 引擎的话,可以在中文标点前加上 \cs{xeCJKnobreak} 来防止换行。
%
% \item 间距不一致:
% 由于 \LaTeX{} 的常用排版算法与 Word 有些差异,如果要像素级复现学校模板,
% 需要对已有的宏包的内部实现做进一步定制,难度很大也不利于维护。
%
% \item 参考文献
% \end{itemize}
%\StopEventually{
% \PrintChanges
% \PrintIndex
%}
%
% \section{致谢}
% 这个模板是站在巨人肩膀上的成果,感谢为本模板提供基本框架的 \cquthesis{},
% 感谢在 \href{https://tex.stackexchange.com/}{tex.se} 上解答问题的大神们,
% 感谢在 GitHub 上提供反馈的 @MonFig、@Phantato、@Yohoa 等人。
% 世界因你们而美好。
%
% \section{实现细节}
%
% \subsection{模板信息}
% \begin{macrocode}
%<cls>\NeedsTeXFormat{LaTeX2e}
%<cls>\ProvidesClass{nuaathesis}
%<cfg>\ProvidesFile{nuaathesis.cfg}
%<cls|cfg>[2021/05/16 v2.3 NUAA Thesis Template]
% \end{macrocode}
% \subsection{配置文件}
% \changes{v2.1}{2018/06/01}{修改了配置文件作用,不再存放常量,加载顺序改为开头,默认内容为空。}
% 配置文件的内容将于模板加载前期执行,一般内容为空(或者连文件都不存在),
% 主要用于存放必须在模板加载前执行的代码,例如修改本模板加载的宏包参数。
% \begin{macrocode}
%<cls>\InputIfFileExists{nuaathesis.cfg}{}{}
% \end{macrocode}
%
% 原本存放在配置文件里的字符串常量,已移动到模板主文件;
% 如果需要修改,请使用 \cs{renewcommand} 重定义对应的宏。
% (因为宏的名称里有 \verb|@| 符号,所以需要用到 \cs{makeatletter} 和 \cs{makeatother}。)
%
% 封面页上用到的字符串:
% \begin{macrocode}
%<*cls>
\AtEndOfClass{
\newcommand\nuaa@label@nuaa{南京航空航天大学}
\newcommand\nuaa@label@nuaajc{南京航空航天大学金城学院}
\newcommand\nuaa@label@worktype@paper{毕业论文}
\newcommand\nuaa@label@worktype@design{毕业设计}
\newcommand\nuaa@label@worktype@bachelor{本科毕业设计(论文)}
\newcommand\nuaa@label@worktype@master{硕士学位论文}
\newcommand\nuaa@label@worktype@doctor{博士学位论文}
\newcommand\nuaa@label@thesisnum{编号}
\newcommand\nuaa@label@title{题\quad 目}
\newcommand\nuaa@label@teamname{团队名称}
\newcommand\nuaa@label@author{学生姓名}
\newcommand\nuaa@label@studentid{学\hfill 号}
\newcommand\nuaa@label@college{学\hfill 院}
\newcommand\nuaa@label@department{系\hfill 部}
\newcommand\nuaa@label@major{专\hfill 业}
\newcommand\nuaa@label@classid{班\hfill 级}
\newcommand\nuaa@label@adviser{指\hfill 导\hfill 教\hfill 师}
\newcommand\nuaa@label@industrialadviser{企\hfill 业\hfill 导\hfill 师}
\newcommand\nuaa@label@researchername{研究生姓名}
\newcommand\nuaa@label@majorsubject{学科、专业}
\newcommand\nuaa@label@researchfield{研\hfill 究\hfill 方\hfill 向}
\newcommand\nuaa@label@professionaltype{专\hfill 业\hfill 类\hfill 别}
\newcommand\nuaa@label@professionalfield{专\hfill 业\hfill 领\hfill 域}
\newcommand\nuaa@label@graduateschool{研究生院}
\newcommand\nuaa@labelEn@nuaa{Nanjing University of Aeronautics and Astronautics}
\newcommand\nuaa@labelEn@graduateschool{The Graduate School}
% \end{macrocode}
% 摘要页用到的字符串:
% \begin{macrocode}
\newcommand\nuaa@label@abstract{摘\qquad 要}
\newcommand\nuaa@label@abstractshort{摘要}
\newcommand\nuaa@label@keywords{关键词:}
\newcommand\nuaa@label@keywordsep{,}
\newcommand\nuaa@label@abstract@toc{摘要}
\newcommand\nuaa@labelEn@abstract{Abstract}
\newcommand\nuaa@labelEn@ABSTRACT{ABSTRACT}
\newcommand\nuaa@labelEn@KeyWords{KEY WORDS: }
\newcommand\nuaa@labelEn@keywords{Keywords: }
\newcommand\nuaa@labelEn@keywordsep{, }
\newcommand\nuaa@labelJa@abstract{要 旨}
\newcommand\nuaa@labelJa@keywords{キーワード:}
\newcommand\nuaa@labelJa@keywordsep{、}
% \end{macrocode}
% 目录部分用到的字符串:
% \begin{macrocode}
\newcommand\nuaa@label@reportpaper{毕业设计(论文)报告纸}
% \end{macrocode}
% 语言相关
% \begin{macrocode}
\ifnuaa@lang@cn
\renewcommand\contentsname{目\qquad 录}
\newcommand\listfiguretablename{图表清单}
\def\equationautorefname{式}
\def\AMSautorefname{式}
\else\ifnuaa@lang@en
\newcommand\listfiguretablename{List of Figures and Tables}
\else\ifnuaa@lang@ja
\newcommand\listfiguretablename{図 表 目 次}
\renewcommand\bibname{参考文献}
\def\equationautorefname{式}
\def\AMSautorefname{式}
\fi\fi\fi
}
% \end{macrocode}
% \subsection{文档类的选项与参数}
% \subsubsection{定义与读取}
% 使用 \pkg{kvoptions} 来处理传给本文档类的参数。
% \begin{macrocode}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=nuaa,
prefix=nuaa@,
setkeys=\kvsetkeys
}
% \end{macrocode}
% 定义用户类型,目前支持本科、硕士、博士三类。
% \begin{macrocode}
\newif\ifnuaa@bachelor \nuaa@bachelorfalse
\newif\ifnuaa@master \nuaa@masterfalse
\newif\ifnuaa@doctor \nuaa@doctorfalse
\define@key{nuaa}{degree}{
\expandafter\csname nuaa@#1true\endcsname}
% \end{macrocode}
% 定义硕士类别(专硕)
% \begin{macrocode}
\DeclareBoolOption[false]{zhuanshuo}
% \end{macrocode}
% 定义盲审开关。
% \begin{macrocode}
\DeclareBoolOption[false]{blindtrail}
% \end{macrocode}
% 定义论文的主语言
% \begin{macrocode}
\newif\ifnuaa@lang@cn \nuaa@lang@cnfalse
\newif\ifnuaa@lang@en \nuaa@lang@enfalse
\newif\ifnuaa@lang@ja \nuaa@lang@jafalse
\define@key{nuaa}{lang}{
\expandafter\csname nuaa@lang@#1true\endcsname}
% \end{macrocode}
% 定义文档类型是毕业论文还是毕业设计。
% \begin{macrocode}
\newif\ifnuaa@worktype@paper \nuaa@worktype@paperfalse
\newif\ifnuaa@worktype@design \nuaa@worktype@designfalse
\define@key{nuaa}{type}{
\expandafter\csname nuaa@worktype@#1true\endcsname}
% \end{macrocode}
% 右开时空白的左页是否让页眉页脚空白
% \begin{macrocode}
\DeclareBoolOption[false]{blankleft}
% \end{macrocode}
% 摘要页也需要右开
% \begin{macrocode}
\DeclareBoolOption[false]{abstractopenright}
% \end{macrocode}
% 中文字体(传递给\CTeX)
% \begin{macrocode}
\DeclareStringOption{fontset}
% \end{macrocode}
% 是否在封面/摘要页上禁用粗体(推荐使用 fandol 之类字体时启用)
% \begin{macrocode}
\DeclareBoolOption[false]{nobold}
% \end{macrocode}
% 准备第一遍参数解析,主要获取上述定义的参数,暂时忽略其余的参数。
% 剩余的参数将于第二遍解析时,传递给对应的基文档类。
% \begin{macrocode}
\DeclareDefaultOption{}
% \end{macrocode}
% 开始第一遍参数解析
% \begin{macrocode}
\kvsetkeys{nuaa}{}
\ProcessKeyvalOptions*
% \end{macrocode}
% \subsubsection{合法性检查与常量定义}
% 必须指定用户类型
% \begin{macrocode}
\ifnuaa@bachelor\relax\else
\ifnuaa@master\relax\else
\ifnuaa@doctor\relax\else
\ClassError{nuaathesis}{
Thesis Degree must be specified: \MessageBreak
degree=[bachelor|master|doctor]}
\fi\fi\fi
% \end{macrocode}
% 本科生必须指定文档类型;硕士、博士默认为论文,且必须选择论文。
% \begin{macrocode}
\ifnuaa@bachelor
\else
\ifnuaa@worktype@design
\ClassError{nuaathesis}{You should submit paper instead of design}
\else
\nuaa@worktype@papertrue
\fi
\fi
% \end{macrocode}
% 默认论文的主语言是中文。
% \begin{macrocode}
\ifnuaa@lang@cn\relax\else
\ifnuaa@lang@en\relax\else
\ifnuaa@lang@ja\relax\else
\nuaa@lang@cntrue
\fi
\fi
\fi
% \end{macrocode}
% 根据学校信息,定义对应图标。
% \begin{macrocode}
\iffalse
\newcommand\nuaa@university{\secretize{\nuaa@label@nuaajc}}
\newcommand\nuaa@universityLogo{nuaa-jc.jpg}
\else
\newcommand\nuaa@university{\secretize{\nuaa@label@nuaa}}
\newcommand\nuaa@universityLogo{nuaa.pdf}
\fi
% \end{macrocode}
% 根据文档类型,设置文档的中文名称。
% \begin{macrocode}
\newcommand\nuaa@worktypecn{%
\ifnuaa@bachelor%
\nuaa@label@worktype@bachelor%
\else%
\ifnuaa@master%
\nuaa@label@worktype@master%
\else%
\nuaa@label@worktype@doctor%
\fi%
\fi%
}
% \end{macrocode}
% \subsubsection{文档信息收集}
% 首先为每种语言定义一个存访数据的 key-value
% \begin{macrocode}
\def\nuaaset{\kvsetkeys{nuaa@value}}
\def\nuaasetEn{\kvsetkeys{nuaa@valueEn}}
\def\nuaasetJa{\kvsetkeys{nuaa@valueJa}}
% \end{macrocode}
%
% \begin{macro}{\nuaa@define}
% 定义一个字段,同时定义设置该字段的全局宏。
% \begin{macrocode}
\def\nuaa@define #1{
\define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
\expandafter\gdef\csname #1\endcsname##1{
\expandafter\gdef\csname nuaa@#1\endcsname{##1}}
\csname #1\endcsname{}
}
\def\nuaa@define@sec #1{
\define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
\expandafter\gdef\csname #1\endcsname##1{
\expandafter\gdef\csname nuaa@#1\endcsname{\secretize{##1}}}
\csname #1\endcsname{}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\nuaa@define@list}
% \marg{field}\marg{sep}
% 定义一个字段,同时定义设置该字段的全局宏;
% 与前者不同的是,它在设置字段时,能将逗号分隔的值用 \marg{sep} 连接起来。
% \begin{macrocode}
\def\nuaa@define@list#1#2{
\define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
\expandafter\gdef\csname nuaa@#1\endcsname{}
\expandafter\gdef\csname nuaa@#1@pdf\endcsname{}
\expandafter\gdef\csname #1\endcsname##1{
\@for\reserved@a:=##1\do{
\expandafter\ifx\csname nuaa@#1\endcsname\@empty\else
\expandafter\g@addto@macro\csname nuaa@#1\endcsname{%
\ignorespaces #2}
\expandafter\g@addto@macro\csname nuaa@#1@pdf\endcsname{,}
\fi
\expandafter\expandafter\expandafter\g@addto@macro%
\expandafter\csname nuaa@#1\expandafter\endcsname\expandafter{\reserved@a}
}
\expandafter\gdef\csname nuaa@#1@pdf\endcsname{##1}
}
}
\def\nuaa@define@list@sec#1#2{
\define@key{nuaa}{#1}{\csname #1\endcsname{##1}}
\expandafter\gdef\csname nuaa@#1\endcsname{}
\expandafter\gdef\csname nuaa@#1@pdf\endcsname{}
\expandafter\gdef\csname #1\endcsname##1{
\ifnuaa@blindtrail
\expandafter\gdef\csname nuaa@#1\endcsname{\secretize{}}
\else
\@for\reserved@a:=##1\do{
\expandafter\ifx\csname nuaa@#1\endcsname\@empty\else
\expandafter\g@addto@macro\csname nuaa@#1\endcsname{%
\ignorespaces #2}
\expandafter\g@addto@macro\csname nuaa@#1@pdf\endcsname{,}
\fi
\expandafter\expandafter\expandafter\g@addto@macro%
\expandafter\csname nuaa@#1\expandafter\endcsname\expandafter{\reserved@a}
}
\expandafter\gdef\csname nuaa@#1@pdf\endcsname{##1}
\fi
}
}
% \end{macrocode}
% \end{macro}
%
% 文档的中文信息
% \changes{v2.1}{2018/06/01}{修正 typo: advisor->adviser}
% \changes{v2.3}{2021/05/16}{添加企业导师 industrialadvisers}
% \begin{macrocode}
\nuaa@define{value@title}
\nuaa@define@sec{value@author}
\nuaa@define@sec{value@college}
\nuaa@define{value@applydate}
\ifnuaa@bachelor
\nuaa@define@list@sec{value@advisers}{、}
\nuaa@define@list@sec{value@industrialadvisers}{、}
\else
\nuaa@define@list@sec{value@advisers}{\linebreak}
\nuaa@define@list@sec{value@industrialadvisers}{、}
\fi
\nuaa@define@sec{value@major}
\nuaa@define@sec{value@studentid}
\nuaa@define@sec{value@classid}
\nuaa@define{value@libraryclassid}
\nuaa@define{value@subjectclassid}
\nuaa@define{value@thesisid}
\nuaa@define{value@majorsubject}
\nuaa@define{value@researchfield}
% \end{macrocode}
%
% 文档的英文信息
% \begin{macrocode}
\nuaa@define{valueEn@title}
\ifnuaa@bachelor\relax
\else
\fi
\nuaa@define@sec{valueEn@college}
\nuaa@define{valueEn@majorsubject}
\nuaa@define@sec{valueEn@author}
\nuaa@define@sec{valueEn@advisers}
\nuaa@define{valueEn@degreefull}
\nuaa@define{valueEn@applydate}
% \end{macrocode}
%
% 文档的日文信息
% \begin{macrocode}
\nuaa@define{valueJa@title}
% \end{macrocode}
%
%
% 摘要页
% \begin{macrocode}
\RequirePackage{etoolbox}
\RequirePackage{environ}
\newcommand{\nuaa@@abstract}[1]{\long\gdef\nuaa@abstract{#1}}
\newenvironment{abstract}{\Collect@Body\nuaa@@abstract}{}
\newcommand{\nuaa@@abstractEn}[1]{\long\gdef\nuaa@abstractEn{#1}}
\newenvironment{abstractEn}{\Collect@Body\nuaa@@abstractEn}{}
\newcommand{\nuaa@@abstractJa}[1]{\long\gdef\nuaa@abstractJa{#1}}
\newenvironment{abstractJa}{\Collect@Body\nuaa@@abstractJa}{}
\nuaa@define@list{keywords}{\nuaa@label@keywordsep}
\nuaa@define@list{keywordsEn}{\nuaa@labelEn@keywordsep}
\nuaa@define@list{keywordsJa}{\nuaa@labelJa@keywordsep}
% \end{macrocode}
%
% 收集一些常用字段
% \begin{macrocode}
\ifnuaa@lang@cn
\newcommand\nuaa@title{\nuaa@value@title}
\else\ifnuaa@lang@en
\newcommand\nuaa@title{\nuaa@valueEn@title}
\else\ifnuaa@lang@ja
\newcommand\nuaa@title{\nuaa@valueJa@title}
\fi\fi\fi
% \end{macrocode}
% \subsection{主文档类}
% 本节将第二次解析参数、加载基文档类、设置全局的格式,如页面大小、字号、行间距等,并定义标题字体。
%
% 首先解释一下本节会出现的几个 Magic Number,以及它们是如何计算出来的。
%
% 根据要求,本科生论文字号为小四(12~pt),行间距为1.5~倍。
% 考虑到学校提供的 Word 模板启用了文档网络,跨度为 15.874016~pt,所以小四号字只占用一行,
% 行间距需修正为 $15.874 \times 1.5 = 23.811$~pt\footnote{\url{https://www.zhihu.com/question/26397264/answer/48165229}}。
% 再考虑到用 \verb|\zihao| 在选择字号时,\CTeX 会将 \verb|\f@baselineskip|
% 设置成 \verb|\f@size| 的 1.2 倍,
% 所以最终设置行间距为 $23.811 \div (12 \times 1.2) = 1.653543$。
%
% 同理,硕/博士论文字号为五号(10.5~pt),行间距为20~pt。
% 因为行间距是固定值,所以 Word 的文档网络不会影响行间距。
% 行间距最终设置为 $20 \div (10.5 \times 1.2) \approx 1.5873$。
%
% 注:Word 中的单位“磅(pt)” 是 $1/72$~inch,对应 \LaTeX 中的 $1$~bp。
%
% \begin{macrocode}
\RequirePackage{expl3}
\ExplSyntaxOn
\sys_if_engine_xetex:TF{
\PassOptionsToPackage{no-math}{fontspec}
}{}
\ExplSyntaxOff