forked from shuosc/SHU-Bachelor-Thesis-OSC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
shuthesis.dtx
2333 lines (2322 loc) · 71.2 KB
/
shuthesis.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
%
% Copyright (C) 2017 by Lele Liu <[email protected]>
%
% This file is the thesis template of Shanghai University (shuthesis),
% which is originally derived from ThuThesis.
%
% This file may be distributed and/or modified under the conditions
% of the LaTeX Project Public License, either version 1.3a of this
% license or (at your option) any later version.
% The latest version of this license is in:
%
% http://www.latex-project.org/lppl.txt
%
% and version 1.3a or later is part of all distributions of LaTeX
% version 2004/10/01 or later.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{shuthesis.dtx}[2023/05/05 2.1 Shanghai University Bachelor 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.dtx}
%
% \def\indexname{索引}
% \def\glossaryname{版本历史}
% \IndexPrologue{\section{\indexname}}
% \GlossaryPrologue{\section{\glossaryname}}
%
% \title{\bfseries\color{medpurple}\shuthesis: 上海大学学位论文模板}
% \author{{ 刘乐乐}\\[5pt]\texttt{[email protected]}}
% \date{v\fileversion\ (\filedate)}
% \maketitle\thispagestyle{empty}
%
% \vskip2cm
% \def\abstractname{\large 说\quad 明}
% \begin{abstract}
% \noindent
% \begin{enumerate}
% \item 本模板旨在建立一个简单易用的上海大学学位论文模板, 包括硕士学位论文、博士学位论文.
% \item 本模板为作者根据上海大学研究生院发布的学位论文的 Word 模板编写而成.
% \item 上海大学研究生院只提供了论文的 Word 模板, 并未提供官方的 \LaTeX\ 模板. \shuthesis\
% 为 Word 模板的 \LaTeX\ 实现, 不保证格式审查老师不提意见. 任何由于使用本模板而引起的论文
% 格式审查问题均与本模板作者无关.
% \item 上海大学研究生院对学位论文的格式细节并未做具体的要求, 因此, \shuthesis\ 对部分
% 细节做了设置, 使排版出来的论文尽可能的美观. 使用本模板前, 请认真阅读 \file{shuthesis.pdf}
% 文件.
% \item 本模板是以清华大学学位论文模板 (ThuThesis) 为基础制作的衍生版, 在此对 ThuThesis
% 模板的维护者表示感谢!
% \item 本模板的发布遵守 \LaTeX\ Project Public License, 使用前请认真阅读协议内容.
% \end{enumerate}
% \end{abstract}
%
%
% \clearpage
% \pagestyle{fancy}
% \begin{multicols}{2}[
% \setlength{\columnseprule}{.4pt}
% \setlength{\columnsep}{18pt}]
% \tableofcontents
% \end{multicols}
% \clearpage
%
%
% \section{模板介绍}
% \shuthesis\ (\textbf{S}hanghai \textbf{U}niversity \LaTeX\ Thesis Template)
% 是为了帮助上海大学毕业生撰写学位论文而编写的 \LaTeX\ 论文模板. 模板的开发分为两
% 个阶段: 版本 v1.x 是由水寿松制作完成的, 基于 CJK 宏包开发和使用 GBK 编码, 可在
% \url{http://blog.lehu.shu.edu.cn/shuishousong/A209370.html} 下载. 当前版本
% 是 v2.0, 由 ahhylau 制作完成, 基于 XeCJK 宏包开发, 文件使用 UTF-8 编码.
% \shuthesis\ v2.0 使用文学化编程 (Literate Programming), 利用 \texttt{doc/DocStrip}
% 将代码和说明文档混合编写, 便于以后的升级和维护. 另外, 作者重新制作了上海大学
% logo 的高清矢量图, 看起来更加美观.
%
% 目前 \shuthesis\ 模板的代码托管在 \href{https://github.com/ahhylau/shuthesis}{GitHub}
% 上, 如有修改建议或者其他要求欢迎在 GitHub 上提交 issue, 作者会尽快回复. 非常期待有其他上
% 大的 \TeX\ 使用者加入到模板的开发与维护当中来, 不断完善模板.
%
% \note[注意:]{模板的作用在于减少论文写作过程中格式调整的时间. 前提是遵守模
% 板的用法, 否则即便用了 \shuthesis\ 也难以保证输出的论文符合学校规范.}
%
%
% \section{安装}
% \label{sec:installation}
%
% \subsection{模板的组成}
% 本文档将尽量完整的介绍模板的使用方法, 如有不清楚之处可以参考示例文档. 下表列出了 \shuthesis\
% 的主要文件及其功能介绍:
%
% \begin{longtable}{l|p{8cm}}
% \toprule
% {\heiti 文件 (夹)} & {\heiti 功能描述}\\\midrule
% \endfirsthead
% \midrule
% {\heiti 文件 (夹)} & {\heiti 功能描述}\\\midrule
% \endhead
% \endfoot
% \endlastfoot
% shuthesis.ins & \textsc{DocStrip} 驱动文件 (开发用) \\
% shuthesis.dtx & \textsc{DocStrip} 源文件 (开发用) \\\midrule
% shuthesis.cls & 模板类文件\\
% shuthesis.cfg & 模板配置文件\\
% shuthesis.bst & 参考文献样式文件\\\midrule
% main.tex & 示例文档主文件\\
% reference/ & 示例文档参考文献目录\\
% data/ & 示例文档章节具体内容\\
% figures/ & 示例文档图片路径\\
% shuthesis.sty & 为示例文档加载其它宏包\\\midrule
% \textbf{shuthesis.pdf} & 用户手册 (本文档) \\
% clean.bat & 清理编译过程中生成的缓存文件\\
% make-doc.bat & 一键生成用户手册 shuthesis.pdf\\\midrule
% FZLanTing.ttf & 方正兰亭中黑字体 (\XeLaTeX\ 编译使用)\\
% FZXBsong.ttf & 方正小标宋字体 (\XeLaTeX\ 编译使用)\\
% HanYikaishu.ttf & 汉仪中楷字体 (\XeLaTeX\ 编译使用)\\\bottomrule
% \end{longtable}
%
% 几点说明:
% \begin{itemize}
% \item \file{shuthesis.cls} 和 \file{shuthesis.cfg} 可由 \file{shuthesis.ins}
% 和 \file{shuthesis.dtx} 生成 (见 \ref{sec:generate-cls} 节), 但为了降低新手用户
% 的使用难度, 故将 \file{shuthesis.cls} 和 \file{shuthesis.cfg} 文件一起发布.
% \item 使用前阅读文档: \file{shuthesis.pdf}.
% \end{itemize}
%
% \subsection{生成模板说明文件}
% \label{sec:generate-cls}
% 模板解压缩后生成文件夹 \file{shuthesis-vX.Y}\footnote{\texttt{vX.Y} 为版本号.},
% 其中包括: 模板源文件 (\file{shuthesis.ins} 和 \file{shuthesis.dtx}), 参考文献样式
% \file{shuthesis.bst}, 示例文档 (\file{main.tex}, \file{shuthesis.sty}\footnote{可
% 能用到的包以及一些命令定义都放在这里, 以免 \file{shuthesis.cls} 过分臃肿.},
% \file{data/}, \file{figures/} 和 \file{reference/}) 等. 在使用之前需要先生成模板说
% 明文件 (\file{shuthesis.pdf}) 和配置文件 (\file{shuthesis.cfg}).
%
% \begin{shell}
% $ cd shuthesis-vX.Y
% # 生成 shuthesis.cls 和 shuthesis.cfg
% $ latex shuthesis.ins
%
% # 下面的命令用来生成用户手册, 可以不执行.
% $ xelatex shuthesis.dtx
% $ makeindex -s gind.ist -o shuthesis.ind shuthesis.idx
% $ makeindex -s gglo.ist -o shuthesis.gls shuthesis.glo
% $ xelatex shuthesis.dtx
% $ xelatex shuthesis.dtx % 生成说明文档 shuthesis.pdf
% \end{shell}
%
% \subsection{编译环境}
% \label{sec:generate-thesis}
% 本模板在 Windows 10 和 \TeX Live 2016 下开发, 支持多种平台. 由于历史原因, 目前国内使
% 用 C\TeX 套装的人还是很多. 然而, C\TeX 套装自从 2012 年后就不再更新了, 许多宏包已经很
% 老旧了. 因此本模板不再支持在 C\TeX 套装下使用\footnote{C\TeX\ v2.9.2 及之前的版本均无
% 法使用.}. 随着 \XeTeX 的发展在 \TeX 中使用中文已经非常方便了. 本模板基于 XeCJK 宏包开
% 发, 全部文件均使用 UTF-8 编码. 作者推荐使用 \TeX Live 进行编译.
%
% \note[注意:]{若用户编译不成功, 请将宏包更新至最新.}
%
% 本模板使用 \texttt{ctex} 宏包进行中文字体的配置 (详见第 \ref{sec:chinese-fonts} 节),
% 因此在不同操作系统下的兼容性有保证. 以下将介绍几种常见的生成论文的方法, 用户可根据自己的
% 情况选择. 最简便的方法是使用 \LaTeX 编辑器 (推荐 TeXstudio) 直接编译, 支持使用 \XeLaTeX\
% (推荐)和 PDF\LaTeX 方式编译. 下面介绍在命令行下使用本模板生成论文的方法.
%
% \subsubsection{\XeLaTeX}
% \label{sec:xelatex}
% 首先来看推荐的 \XeLaTeX 方式 (\texttt{\#} 开头的行为注释):
% \begin{shell}
% # 1. 发现里面的引用关系, 文件后缀 .tex 可以省略.
% $ xelatex main
%
% # 2. 编译参考文件源文件, 生成 bbl 文件.
% $ bibtex main
%
% # 3. 下面解决引用.
% $ xelatex main
% $ xelatex main # 此时生成完整的 pdf 文件
% \end{shell}
%
% \subsubsection{PDF\LaTeX}
% \label{sec:pdflatex}
% 如果使用 PDF\LaTeX, 按照第~\ref{sec:xelatex} 节的顺序执行即可, 只需要将命令中
% \texttt{xelatex} 替换为 \texttt{pdflatex} 即可.
%
% 需要注意的是 PDF\LaTeX\ 不能处理常见的 EPS 图形, 需要先用 \texttt{epstopdf} 将
% 其转化成 PDF. 不过 PDF\LaTeX\ 增加了对 png, jpg 等格式的支持, 比较方便. \TeX Live\
% 自从 2010 版本起自动调用 \texttt{epstopdf} 将 EPS 图形转化为 PDF.
%
% \subsubsection{latexmk}
% \label{sec:latexmk}
% \texttt{latexmk} 命令支持全自动生成 \LaTeX\ 编写的文档, 并且支持使用不同的
% 工具链来进行生成, 它会自动运行多次工具直到交叉引用都被解决. 下面给出了一个用
% \texttt{latexmk} 调用 \XeLaTeX\ 生成最终文档的示例:
% \begin{shell}
% # 只需要使用下面这一句就可以了.
% $ latexmk -xelatex main
% \end{shell}
%
%
% \section{使用说明}
% \label{sec:usage}
%
% \subsection{示例文件}
% \label{sec:userguide}
% 模板核心文件有三个: \file{shuthesis.cls}, \file{shuthesis.cfg} 和 \file{shuthesis.bst},
% 但是如果没有示例文档用户会发现很难下手. 所以推荐新用户从模板自带的示例文档入手, 里面包括了
% 论文写作用到的所有命令及其使用方法, 只需要用自己的内容进行相应替换就可以. 对于不清楚的命
% 令可以查阅本手册. 下面的例子描述了模板中章节的组织形式, 来自于示例文档, 具体内容可以参考
% 模板附带的 \file{main.tex} 和 \file{data/}.
%
% \lstinputlisting[style=lstStyleLaTeX]{main.tex}
%
% \subsection{论文选项}
% \label{sec:option}
%
% \DescribeOption{type}
% 选择论文类型, 当前支持: \option{master}, \option{doctor}, 为必选项.
% \begin{latex}
% % 博士论文
% \documentclass[type=doctor]{shuthesis}
%
% % 硕士论文
% \documentclass[type=master]{shuthesis}
% \end{latex}
%
% \DescribeOption{secret}
% 涉秘论文开关 (默认: 关闭). 第 \ref{sec:setup-secret} 节两个配置 (或命令)
% \cs{secretlevel}\marg{级别} 和 \cs{secretyear}\marg{年数} 分别用来指定保
% 密级别和时限.
% \begin{latex}
% \documentclass[secret]{shuthesis} % 打开保密
% \shusetup{
% secretlevel={公开},
% secretyear={10}
% }
% % 或者
% \secretlevel{保密}
% \secretyear{10}
% \end{latex}
%
% \DescribeOption{pifootnote}
% 是否使用 \pkg{pifont} 的带圈字符标记脚注编号, 默认关闭. 一页的脚注建议控制
% 在 9 个以内, 否则大于 10 的数字带圈的效果不太好. 建议使用时打开此选项, 脚注
% 编号很漂亮, 开启方法如下:
% \begin{latex}
% \documentclass[pifootnote]{shuthesis}
% \end{latex}
%
% \DescribeOption{openany}
% \DescribeOption{openright}
% 正规出版物的章节出现在奇数页, 也就是右手边的页面, 这就是 \option{openright}.
% 在这种情况下, 如果前一章的最后一页也是奇数, 那么模板会自动生成一个纯粹的空
% 白页, 很多人不是很习惯这种方式, 而且学校的格式似乎更倾向于页面连续, 那就是
% 通常所说的 \option{openany}. \shuthesis\ 的默认选项是 \option{openright}.
% 如果需要使用 \option{openany}, 可按如下方式开启:
% \begin{latex}
% \documentclass[openany]{shuthesis}
% \end{latex}
%
% \DescribeOption{arialtitle}
% 章节标题中英文是否用 \option{Arial} 字体 (默认打开).
%
% \DescribeOption{nocolor}
% 文字超链接不使用彩色 (默认关闭). 在向图书馆提交最终版本时请打开 \option{nocolor}
% 选项, 因为图书馆要求电子版论文中不允许出现除黑色以外的颜色. 开启方法如下:
% \begin{latex}
% \documentclass[nocolor]{shuthesis}
% \end{latex}
%
% \subsection{中文字体}
% \label{sec:chinese-fonts}
%
% \subsubsection{字体配置}
% \label{sec:font-config}
% 正确配置中文字体是使用模板的第一步. 模板调用 \texttt{ctex} 宏包, 提供如下字体使用方式:
% \begin{itemize}
% \item 基于传统 \pkg{CJK} 包, PDF\LaTeX\ 编译.
% \item 基于 \pkg{xeCJK} 包, 使用 \XeLaTeX\ 编译 (推荐方法).
% \end{itemize}
%
% 模板默认使用 \texttt{ctex} 的字体配置. 关于中文字体安装、配置的所有问题不在本模板讨论
% 范围.
%
% \subsubsection{字体命令}
% \label{sec:fontcmds}
% \myentry{字体和字号}
% \DescribeMacro{\chuhao}
% \DescribeMacro{\xiaochu}
% \DescribeMacro{\yihao}
% \DescribeMacro{\xiaoyi}
% \DescribeMacro{...}
% 切换宋体 \cs{songti}、仿宋 \cs{fangsong}、黑体 \cs{heiti}、
% 楷体 \cs{kaishu} 四种基本字体. 定义字体大小, 分别为:
%
% \begin{center}
% \begin{tabular}{llllll}
% \toprule
% \cs{chuhao} & \cs{xiaochu} & \cs{yihao} & \cs{xiaoyi} & \cs{erhao} & \cs{xiaoer}\\
% \cs{sanhao} & \cs{xiaosan} & \cs{sihao} & \cs{banxiaosi} & \cs{xiaosi} & \cs{dawu}\\
% \cs{wuhao} & \cs{xiaowu} & \cs{liuhao} & \cs{xiaoliu} & \cs{qihao} & \cs{bahao}\\
% \bottomrule
% \end{tabular}
% \end{center}
%
% 使用方法为: \cs{command}\oarg{num}, 其中 command 为字号命令, num 为行距. 比
% 如 \cs{xiaosi}[1.5] 表示选择小四字体, 行距 1.5 倍, 这样更为灵活. 当然, 也可以
% 使用 \texttt{ctex} 宏包定义的 \cs{zihao}\marg{num} 来切换字号, 具体用法参看其文档.
%
% \subsection{封面信息}
% \label{sec:titlepage}
% 封面信息提供两种配置方法: 一是通过统一设置命令 \cs{shusetup} 通过
% \emph{key=value} 形式完成; 二是每个信息利用命令独立设置, 其中命令
% 的名字跟 \emph{key} 相同. 两种方式可以交叉使用, 并按顺序执行 (即后
% 来的设置会覆盖前面的). 以 \texttt{c} 开头的命令跟中文相关, \texttt{e}
% 开头则为对应的英文.
%
% \DescribeMacro{\shusetup}
% \cs{shusetup} 用法与常见 \emph{key=value} 命令相同, 如下:
% \begin{latex}
% \shusetup{
% key1 = {value1},
% key2 = {value2},
% }
% % 可以多次调用
% \shusetup{
% key3 = {value3},
% key1 = {value4}, % 覆盖 value1
% }
% \end{latex}
%
% \note[注意:]{~\cs{shusetup} 使用 \pkg{kvoptions} 机制, 所以配置项之间不能有空行,
% 否则会报错.}
%
% \subsubsection{密级}
% \label{sec:setup-secret}
% \DescribeMacro{\secretlevel}
% \DescribeMacro{\secretyear}
% 定义秘密级别和年限, 需要打开论文的 \option{secret} 选项.
% \begin{latex}
% \shusetup{
% secretyear={10},
% secretlevel={内部},
% }
% % 以下命令方式与上面的等价:
% \secretyear{10}
% \secretlevel{内部}
% \end{latex}
%
% \subsubsection{学号和中图分类号}
% \label{sec:setup-id}
% \DescribeMacro{\id}
% \DescribeMacro{\catalognumber}
% 学号和中图分类号.
% \begin{latex}
% \shusetup{
% id={学号},
% catalognumber={中图分类号},
% }
% % 等价:
% \id{学号}
% \catalognumber{中图分类号}
% \end{latex}
%
% \subsubsection{作者姓名}
% \DescribeMacro{\cauthor}
% \DescribeMacro{\eauthor}
% 作者姓名.
% \begin{latex}
% \shusetup{
% cauthor={中文姓名},
% eauthor={Name in English}
% }
% % 等价:
% \cauthor{中文姓名}
% \eauthor{Name in English}
% \end{latex}
%
% \subsubsection{导师}
% \DescribeMacro{\csupervisor}
% \DescribeMacro{\esupervisor}
% 导师姓名.
% \begin{latex}
% \shusetup{
% csupervisor={导师},
% esupervisor={Supervisor}
% }
% % 等价:
% \csupervisor{导师}
% \esupervisor{Supervisor}
% \end{latex}
%
% \subsubsection{论文标题}
% \DescribeMacro{\ctitle}
% \DescribeMacro{\etitle}
% 中英文标题. 题目内部可以使用换行 ``|\\|".
% \begin{latex}
% \shusetup{
% ctitle={论文中文题目},
% etitle={Thesis English Title}
% }
% % 等价:
% \ctitle{论文中文题目}
% \etitle{Thesis English Title}
% \end{latex}
%
% \subsubsection{申请学位名称}
% \label{sec:degree}
% \shuthesis\ 会根据用户的选择 \texttt{type=master} 或 \texttt{type=doctor} 进行自动设置.
%
% \subsubsection{院系名称}
% \DescribeMacro{\cdepartment}
% \DescribeMacro{\edepartment}
% 院系名称.
% \begin{latex}
% \shusetup{
% cdepartment={院系名称},
% edepartment={Deparment}
% }
% % 等价:
% \cdepartment{院系名称}
% \edepartment{Department}
% \end{latex}
%
% \subsubsection{专业名称}
% \DescribeMacro{\cmajor}
% \DescribeMacro{\emajor}
% 专业名称.
% \begin{latex}
% \shusetup{
% cmajor={专业名称},
% emajor={Major in English}
% }
% % 等价:
% \cmajor{专业名称}
% \emajor{Major in English}
% \end{latex}
%
% \subsubsection{学科分类名称}
% \DescribeMacro{\cdisciplines}
% \DescribeMacro{\edisciplines}
% 学科分类名称, 即理学、工学、文学.
% \begin{latex}
% \shusetup{
% cdisciplines={学科分类名称},
% edisciplines={Subject in English}
% }
% % 等价:
% \cdisciplines{学科分类名称}
% \edisciplines{Subject in English}
% \end{latex}
%
% \subsubsection{论文完成日期}
% \DescribeMacro{\cdate}
% \DescribeMacro{\edate}
% 默认为当前时间, 也可以自己指定.
% \begin{latex}
% \shusetup{
% cdate={中文日期},
% edate={English Date}
% }
% % 等价:
% \cdate{中文日期}
% \edate{English Date}
% \end{latex}
%
% \subsubsection{摘要}
% \myentry{摘要正文}
% \DescribeEnv{cabstract}
% \DescribeEnv{eabstract}
% 摘要正文只能用环境命令的形式, 不支持 \cs{shusetup}.
%
% \begin{latex}
% \begin{cabstract}
% 摘要请写在这里.
% \end{cabstract}
%
% \begin{eabstract}
% Here comes the abstract in English.
% \end{eabstract}
% \end{latex}
%
% \myentry{关键词}
% \DescribeMacro{\ckeywords}
% \DescribeMacro{\ekeywords}
% 关键词用英文逗号分割写入相应的命令中, 模板会解析各关键词并生成符合不同论文
% 格式要求的关键词格式.
% \begin{latex}
% \shusetup{
% ckeywords={关键词 1, 关键词 2},
% ekeywords={keyword 1, keyword 2}
% }
% % 等价:
% \ckeywords{关键词 1, 关键词 2}
% \ekeywords{keyword 1, keyword 2}
% \end{latex}
%
% \myentry{生成封面}
% \DescribeMacro{\makefirstpage}
% \DescribeMacro{\makecover}
% 命令 \cs{makefirstpage} 用以生成带有学校 logo 的封面. 如果不需要此页可以
% 将 \cs{makefirstpage} 注释掉. 命令 \cs{makecover} 用以生成答辩委员会签名
% 页、原创性声明和授权说明页、中文标题页、英文标题页以及摘要等.
%
% \subsubsection{符号对照表}
% \DescribeEnv{denotation}
% 主要符号表环境, 跟 \env{description} 类似, 使用方法参见示例文件. 带一个可
% 选参数, 用来指定符号列的宽度 (默认为 2.5cm).
% \begin{latex}
% \begin{denotation}
% \item[E] 能量
% \item[m] 质量
% \item[c] 光速
% \end{denotation}
% \end{latex}
%
% 如果默认符号列的宽度不满意, 可以通过参数来调整:
% \begin{latex}
% \begin{denotation}[1.5cm] % 设置为 1.5cm
% \item[E] 能量
% \item[m] 质量
% \item[c] 光速
% \end{denotation}
% \end{latex}
%
% \subsection{目录和索引表}
% 目录、插图、表格等索引命令分别如下, 将其插入到期望的位置即可 (带星号的命令表
% 示对应的索引表不会出现在目录中):
%
% \DescribeMacro{\tableofcontents}
% \DescribeMacro{\listoffigures}
% \DescribeMacro{\listoffigures*}
% \DescribeMacro{\listoftables}
% \DescribeMacro{\listoftables*}
% \begin{longtable}{ll}
% \toprule
% {\heiti 用途} & {\heiti 命令} \\\midrule
% 目录 & \cs{tableofcontents} \\\midrule
% 插图索引 & \cs{listoffigures} \\
% & \cs{listoffigures*} \\\midrule
% 表格索引 & \cs{listoftables} \\
% & \cs{listoftables*} \\\bottomrule
% \end{longtable}
%
% \LaTeX\ 默认支持插图和表格索引, 是通过 \cs{caption} 命令完成的, 因此它们必须出
% 现在浮动环境中, 否则不被计数.
%
% 如果不想让某个表格或者图片出现在索引里面, 那么请使用命令 \cs{caption*}, 这个
% 命令不会给表格编号, 也就是出来的只有标题文字而没有``表~xx'',``图~xx'', 否则
% 索引里面序号不连续就显得不伦不类, 这也是 \LaTeX\ 里星号命令默认的规则.
%
%
% \subsection{封底部分}
% \subsubsection{致谢}
% \DescribeEnv{acknowledgement}
% 把致谢做成一个环境更好一些, 直接往里面写感谢的话就可以了.
% \begin{latex}
% \begin{acknowledgement}
% 这里填写致谢内容...
% \end{acknowledgement}
% \end{latex}
%
%
% \subsubsection{附录}
% \DescribeEnv{appendix}
% 所有的附录都插到这里来.
% \begin{latex}
% \begin{appendix}
% \input{data/appendix}
% \end{appendix}
% \end{latex}
%
% \subsubsection{作者在攻读学位期间发表的论文}
%
% \DescribeEnv{publications}
% 用 \env{enumerate} 环境进行罗列发表的论文.
%
% \subsection{自定义}
% \label{sec:othercmd}
%
% \subsubsection{数学环境}
% \label{sec:math}
% \shuthesis\ 定义了常用的数学环境:
%
% \begin{center}
% \begin{tabular}{*{7}{l}}\toprule
% axiom & theorem & definition & proposition & lemma & conjecture &\\
% 公理 & 定理 & 定义 & 命题 & 引理 & 猜想 &\\\midrule
% proof & corollary & example & exercise & assumption & remark & problem \\
% 证明 & 推论 & 例子& 练习 & 假设 & 注释 & 问题\\\bottomrule
% \end{tabular}
% \end{center}
% 比如:
% \begin{latex}
% \begin{theorem}
% 一元五次方程没有一般代数解.
% \end{theorem}
% \end{latex}
% 产生 (自动编号):
% \medskip
%
% \noindent\framebox[\linewidth][l]{{\heiti 定理~1.1~~} % {一元五次方程没有一般代数解.}}
%
% \subsubsection{引用方式}
%
% \DescribeMacro{\cite}
% \shuthesis\ 推荐使用 \BibTeX 来生成参考文献, 即将参考文献写进一个 \texttt{.bib} 文件里, 通过
% \texttt{shuthesis.bst} 生成符合要求的参考文献. 如:
% \begin{latex}
% @book{algebra2000,
% title = {代数学引论},
% author = {聂灵沼 and 丁石孙},
% publisher = {高等教育出版社},
% year = {2000},
% }
% \end{latex}
% \note[注意:]{如果不使用 \texttt{shuthesis.bst} 制作参考文献, 请删除 \file{main.tex}
% 中以 \cs{bibliography} 开头的两行, 以避免可能的编译错误.}
%
% \subsubsection{列表环境}
% \DescribeEnv{itemize}
% \DescribeEnv{enumerate}
% \DescribeEnv{description}
% 为了适合中文习惯, 模板将这三个常用的列表环境用 \pkg{enumitem} 进行了纵向间距压
% 缩. 一方面清除了多余空间, 另一方面用户可以自己指定列表环境的样式 (如标签符号,
% 缩进等). 细节请参看 \pkg{enumitem} 文档, 此处不再赘述.
%
%
% \subsection{其它}
% 模板的配置文件 \file{shuthesis.cfg} 中定义了很多固定词汇, 一般无须修改. 如果有特殊需求,
% 推荐在导言区使用 \cs{renewcommand}.
%
%
%
%
%
% \StopEventually{\PrintChanges\PrintIndex}
% \clearpage
%
% \section{实现细节}
%
% \subsection{基本信息}
% \begin{macrocode}
%<cls>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<cls>\ProvidesClass{shuthesis}
%<cfg>\ProvidesFile{shuthesis.cfg}
%<cls|cfg>[2023/05/05 v2.1 Shanghai University Bachelor Thesis Template]
% \end{macrocode}
%
% \subsection{定义选项}
% \label{sec:defoption}
% \begin{macrocode}
%<*cls>
\hyphenation{Shu-Thesis}
\def\shuthesis{\textsc{ShuThesis}}
\def\shubachelorthesis{\textsc{ShuBachelorThesis}}
\def\shubachelorthesisOSC{\textsc{ShuBachelorThesisOSC}}
\def\version{2.1}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=shu,
prefix=shu@,
setkeys=\kvsetkeys}
% \end{macrocode}
%
% 用 \pkg{kvoptions} 的 key=value 方式来设置论文类型.
% \begin{macrocode}
\newif\ifshu@master
\newif\ifshu@doctor
\define@key{shu}{type}{%
\shu@masterfalse
\shu@doctorfalse
\expandafter\csname shu@#1true\endcsname}
\def\shu@deprecated@type@option{%
\kvsetkeys{shu}{type=\CurrentOption} % for compatability.
\ClassError{shuthesis}{Option '\CurrentOption' is deprecated, \MessageBreak
please use 'type=\CurrentOption' instead}{}}
\DeclareVoidOption{master}{\shu@deprecated@type@option}
\DeclareVoidOption{doctor}{\shu@deprecated@type@option}
% \end{macrocode}
%
% 论文是否保密.
% \begin{macrocode}
\DeclareBoolOption{secret}
% \end{macrocode}
%
% 章节标题中的英文是否用 Arial 字体 (默认打开).
% \begin{macrocode}
\DeclareBoolOption{arialtitle}
% \end{macrocode}
%
% \option{raggedbottom} 选项 (默认打开).
%
% \begin{macrocode}
\DeclareBoolOption{raggedbottom}
% \end{macrocode}
%
% 在脚注标记中使用 \pkg{pifont} 的带圈数字 (默认关闭).
% \begin{macrocode}
\DeclareBoolOption{pifootnote}
% \end{macrocode}
%
% 超链接是否使用彩色 (默认使用蓝色).
% \begin{macrocode}
\DeclareBoolOption{nocolor}
% \end{macrocode}
%
% 将选项传递给 \pkg{ctexbook}.
% \begin{macrocode}
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{ctexbook}}
% \end{macrocode}
%
% 打开默认选项.
% \begin{macrocode}
\kvsetkeys{shu}{raggedbottom,arialtitle}
% \end{macrocode}
%
% 解析用户传递过来的选项, 并加载 \pkg{ctexbook}.
% \begin{macrocode}
\ProcessKeyvalOptions*
% \end{macrocode}
%
% \changes{v2.0}{2017/05/05}{从 v2.0 开始将使用 UTF-8 编码, 同时支持 PDF\LaTeX\
% 和 \XeLaTeX\ 方式编译.}
% \changes{v2.0}{2017/05/05}{使用 \pkg{ctex} 宏包默认中文字体配置, 支持不同引擎.}
%
% 使用 \pkg{ctexbook} 类, 优于调用 \pkg{ctex} 宏包.
% \begin{macrocode}
\LoadClass[a4paper,UTF8,zihao=-4,scheme=plain]{ctexbook}
% \end{macrocode}
%
% 使用 \XeTeX\ 引擎时, \pkg{fontspec} 宏包会被 \pkg{xeCJK} 自动调用. 传递
% 给 \pkg{fontspec} 宏包 \option{no-math} 选项, 避免部分数学符号字体自动调
% 整为 CMR. 其他引擎下没有这个问题, 这一行会被无视.
% \begin{macrocode}
\PassOptionsToPackage{no-math}{fontspec}
% \end{macrocode}
%
% 将 \texttt{AutoFakeBold} 选项传递给 \pkg{xeCJK} 以实现字体加粗的效果 (主要用
% 在封面上的字体). 事实上, 这种加粗是伪加粗, 编译出来的效果并不好看. 所以 \shuthesis\
% 并没有用 \texttt{AutoFakeBold} 选项.
% \begin{macrocode}
%\PassOptionsToPackage{AutoFakeBold}{xeCJK}
% \end{macrocode}
%
% 而是使用方正小标宋、方正兰亭黑和汉仪中楷字体作为宋体、黑体和楷书的加粗形式, 更加美观.
% \changes{v2.0}{2017/05/05}{使用方正小标宋和方正兰亭黑字体.}
% \begin{macrocode}
\RequirePackage{ifxetex}
%\ifxetex
%\setCJKfamilyfont{LanTingHei}{FZLanTing.ttf}
%\newcommand{\LanTingHei}{\CJKfamily{LanTingHei}}
%\setCJKfamilyfont{XBSong}{FZXBsong.ttf}
%\newcommand{\XBSong}{\CJKfamily{XBSong}}
%\setCJKfamilyfont{HanYikai}{HanYikaishu.ttf}
%\newcommand{\HanYikai}{\CJKfamily{HanYikai}}
%\else\fi
% \end{macrocode}
%
% 用户至少要提供一个选项, 指定论文类型.
% \begin{macrocode}
\ifshu@master\relax\else
\ifshu@doctor\relax\else
\ClassError{shuthesis}%
{Please specify thesis type in option: \MessageBreak
type=[master|doctor]}{}
\fi
\fi
% \end{macrocode}
%
%
% \subsection{装载宏包}
% \label{sec:loadpackage}
%
% 引用的宏包和相应的定义.
% \begin{macrocode}
\RequirePackage{etoolbox}
\RequirePackage{xparse}
% \end{macrocode}
%
% \AmSTeX\ 宏包, 用来排出更加漂亮的公式.
% \begin{macrocode}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{amsfonts}
% \end{macrocode}
%
% 不同于 \cs{mathcal} 和 \cs{mathfrak} 之类的英文花体字体.
% \begin{macrocode}
\RequirePackage{mathrsfs}
% \end{macrocode}
%
% 处理数学公式中的黑斜体的宏包.
% \begin{macrocode}
\RequirePackage{bm}
% \end{macrocode}
%
% 处理正文中的加粗.
% \begin{macrocode}
\RequirePackage[T1]{fontenc}
% \end{macrocode}
%
% \pkg{mathtools} 宏包是 \AmSTeX\ 宏包的补充, 它提供了许多有用的命令, 比如 \texttt{dcases}
% 等环境, 详见 \pkg{mathtools} 的宏包说明文档. 另外, \pkg{ntheorem} 宏包会影响 \pkg{mathtools},
% 因此需要在 \pkg{ntheorem} 之前调用 \pkg{mathtools} 宏包.
% \begin{macrocode}
\RequirePackage{mathtools}
% \end{macrocode}
%
% \pkg{newtx} 设置 Times New Roman, Helvetica.
%
% \begin{macrocode}
%\RequirePackage[defaultsups]{newtxtext}
% \RequirePackage{newtxmath}
% \end{macrocode}
%
% \pkg{newtx} 的 Mono 字体虽然很好看, 但在论文中不常见. 学校虽未要求 Mono 字
% 体, 还是选择常见的 Courier 字体. 由于比较新的实现 \TeX\ Gyre Cursor 会修
% 改 \cs{bfdefault}, 导致中文加粗出问题, 所以选用标准 \pkg{courier}.
% \begin{macrocode}
\RequirePackage{courier}
% \end{macrocode}
%
% 图形支持宏包.
% \begin{macrocode}
\RequirePackage{graphicx}
\RequirePackage[labelformat=simple]{subcaption}
% \end{macrocode}
%
% 提供更加灵活的列表定制.
% \begin{macrocode}
\RequirePackage[shortlabels]{enumitem}
\RequirePackage{environ}
% \end{macrocode}
%
% 禁止 \LaTeX 自动调整多余的页面底部空白, 并保持脚注仍然在底部.
% 脚注按页编号.
% \begin{macrocode}
\ifshu@raggedbottom
\RequirePackage[bottom,perpage,hang]{footmisc}
\raggedbottom
\else
\RequirePackage[perpage,hang]{footmisc}
\fi
% \end{macrocode}
%
% \begin{macrocode}
\ifshu@pifootnote
\RequirePackage{pifont}
\fi
% \end{macrocode}
%
% 利用 \pkg{CJKfntef} 实现汉字的下划线和盒子内两段对齐, 并可以避免
% \cs{makebox}\oarg{width}\oarg{s} 可能产生的 underful boxes.
% \begin{macrocode}
\RequirePackage{CJKfntef}
% \end{macrocode}
%
% 定理类环境宏包, 其中 \pkg{amsmath} 选项用来兼容 \AmSTeX\ 的宏包
% \begin{macrocode}
\RequirePackage[amsmath,thmmarks,hyperref]{ntheorem}
% \end{macrocode}
%
% 表格控制
% \begin{macrocode}
\RequirePackage{array}
\RequirePackage{longtable}
\RequirePackage{makecell}
\RequirePackage{tabu}
% \end{macrocode}
%
% 使用三线表: \cs{toprule}, \cs{midrule}, \cs{bottomrule}.
% \begin{macrocode}
\RequirePackage{booktabs}
% \end{macrocode}
%
% 定制灵活的文字下划线格式.
% \begin{macrocode}
\RequirePackage{ulem}
% \end{macrocode}
%
% 参考文献引用宏包.
% \begin{macrocode}
\RequirePackage[numbers,sort&compress]{natbib}
% \end{macrocode}
%
% 删除默认模板 (\file{book.cls}) 在章之间引入的垂直间隔. 要放在 \pkg{hyperref}
% 之前.
% \begin{macrocode}
\patchcmd{\@chapter}{\addtocontents{lof}{\protect\addvspace{10\p@}}}{}{}{} % lof
\patchcmd{\@chapter}{\addtocontents{lot}{\protect\addvspace{10\p@}}}{}{}{} % lot
% \end{macrocode}
%
% 生成有书签的 pdf 及其开关, 请结合 gbk2uni 避免书签乱码.
% \begin{macrocode}
\RequirePackage{hyperref}
\ifxetex
\hypersetup{%
CJKbookmarks=true}
\else
\hypersetup{%
unicode=true,
CJKbookmarks=false}
\fi
\hypersetup{%
linktoc=all,
bookmarksnumbered=true,
bookmarksopen=true,
bookmarksopenlevel=2,
breaklinks=true,
colorlinks=true,
plainpages=false}
\ifshu@nocolor
\hypersetup{%
citecolor=black,
linkcolor=black,
urlcolor=black}
\else
\hypersetup{%
citecolor=blue,
linkcolor=blue,
urlcolor=blue}
\fi
% \end{macrocode}
%
% dvips 模式下网址断字有问题, 请手工加载 \pkg{breakurl} 宏包解决之.
%
% 设置 url 样式, 与上下文一致
% \begin{macrocode}
\urlstyle{same}
% \end{macrocode}
%
%
% \subsection{页面设置}
% \label{sec:layout}
% 本来这部分应该是最容易设置的, 但根据格式规定出来的结果跟学校的 WORD 样例相差很
% 大, 所以只能微调.
%
% \begin{macrocode}
\RequirePackage{geometry}
\geometry{
a4paper,
ignoreall,
nomarginpar}
\geometry{
left=28mm,
right=28mm,
headheight=8mm,
headsep=7mm,
top=30mm,
bottom=26mm,
footskip=7mm}