-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbuctthesis.dtx
2619 lines (2615 loc) · 98.7 KB
/
buctthesis.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) 2019-2022 by Miracle0565
% Copyright (C) 2022-2023 by The-CCSN
%
% https://github.com/the-ccsn/BUCTthesis
% -------------------------------------------------------
%
% This file may be distributed and/or modified under
% the conditions of the LaTeX Project Public License,
% either version 1.3c 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.3c or later is part of all distributions
% of LaTeX version 1999/12/01 or later.
%
% \fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \iffalse
%<*driver>
\ProvidesFile{buctthesis.dtx}[2023/05/20 v2.0 BUCT Thesis Template]
\documentclass{ltxdoc}
\usepackage{manual}
\begin{document}
\DocInput{\jobname.dtx}
\PrintIndex
\PrintChanges
\end{document}
%</driver>
% \fi
%
% \DoNotIndex{\newcommand,\newenvironment,\renewcommand,\renewenvironment}
% \DoNotIndex{\providecommand,\NewDocumentCommand}
% \DoNotIndex{\begin,\end,\begingroup,\endgroup}
% \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize}
% \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny,\zihao}
% \DoNotIndex{\addtocounter,\label,\let,\linewidth,\newcounter}
% \DoNotIndex{\noindent,\normalfont,\par,\parskip,\phantomsection}
% \DoNotIndex{\providecommand,\ProvidesPackage,\refstepcounter}
% \DoNotIndex{\setcounter,\setlength,\string,\strut}
% \DoNotIndex{\textbackslash,\texttt,\ttfamily,\usepackage}
% \DoNotIndex{\par,\\}
% \DoNotIndex{\if,\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi}
% \DoNotIndex{\let,\def,\xdef,\edef,\newcommand,\renewcommand}
% \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect}
% \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{buctthesis.dtx}
%
% \title{\textsf{BUCTthesis}:北京化工大学学位论文模板}
% \author{长城学生网络 \\ \texttt{https://github.com/the-ccsn}}
% \date{\fileversion (\filedate)}
%
% \newgeometry{hcentering}
% \maketitle
% \tableofcontents\restoregeometry\clearpage
%
% \section{欢迎!}
% BUCTthesis是北京化工大学本科与硕士、博士研究生毕业论文的 \LaTeX\ 写作模板,版本号~\fileversion。
% 本文是模板的使用指南,旨在帮助北化毕业生掌握此模板的使用方法,从而写出符合北化
% \href{https://jiaowuchu.buct.edu.cn/2018/1009/c515a22046/page.htm}{《本科生毕业设计(论文)撰写规范》}(以下称《本科生规范》)
% 和 \href{https://xxgk.buct.edu.cn/2017/1107/c2835a39437/page.htm}{《北京化工大学研究生学位论文撰写规范(修订)》}(以下称《研究生规范》)
% 要求的毕业论文。
%
% \subsection{模板内容}
% 本模板为中文论文模板,暂不支持英语专业的论文写作。以下是完整论文的书序,其中划线部分为模板未完成的部分。
% \begin{description}
% \item[本科] 开题报告 \footnote{目前处于实验性质,参见根目录下的 \file{buct-proposal} 文件夹。}、\CJKsout{中期进展情况检查表} \footnote{由学校提供 Word,可转换为 PDF 文件插入。}、论文封面、诚信声明、任务书、摘要、目录、前言、正文、结论、参考文献、符号说明、致谢和附录;
% \item[研究生] 论文封面、版权页(独创性声明和授权书)、\CJKsout{学位论文数据集} \footnotemark[2]、中英文摘要、中英文目录、符号和缩略词说明、正文、参考文献、附录、致谢、作者攻读学位期间发表的学术论文及科研成果目录、作者和导师简介和\CJKsout{答辩委员会决议} \footnote{使用扫描件插入。}。
% \end{description}
%
% \subsection{免责声明}
% 请您注意,至本文档编译时,北京化工大学教务处仅提供《本科生规范》和《研究生规范》而未对本模板做任何测试或授权。
% 模板作者自当尽力,但限于软件等各种因素,由本模板生成的文档可能仍与要求有所出入,
% 故不保证审查老师对格式不提意见。在开始使用之前,您需要同意:
% 任何由于使用本模板而引起的论文格式审查问题均与本模板作者无关。
%
% \subsection{开源说明}
% 本模板开源于 \href{https://github.com/the-ccsn/BUCTthesis}{GitHub},代码部分遵循
% \href{https://www.latex-project.org/lppl.txt}{\LaTeX\ Project Public License 1.3c} 及以上协议。
% 模板文件夹中有关学校校徽和校名的插图,其版权归北京化工大学所有。
%
% 由于模板建设尚在起步阶段,欢迎任何有兴趣的同学加入模板的开发工作。
%
% \subsection{关于本文}
% 本文档将对使用这份模板作一简单介绍。在第~\ref{sec:start}~节将概述使用模板前的准备,以及介绍编译方法;
% 在第~\ref{sec:usage}~节将介绍本模板中新定义及实用的命令与环境;
% 最后在第~\ref{sec:implementation}~节将简述模板文档类代码,面向对 BUCTthesis 开发感兴趣的用户。
%
% 本文档中的宏包、命令等内容以不同字体或形式展现,以作区分:
% 无衬线字体表示宏包、文档类等存在于计算机上的文件,
% 如 \file{buctthesis.cls} 文件、\pkg{amsmath}宏包、\cls{ctexbook} 文档类;
% 等宽字体表示命令与环境,如 \cs{buctsetup} 命令、\env{abstract} 环境。
% 对于命令中的参数将置于尖括号(尖括号无需输入)中,如 \cs{include}\marg{file};
% 对于命令行指令,将置于\ {\color{violet!65}\rule[.25ex]{1em}{1ex}} 颜色框内,且需要逐行输入;
% 而对于 \LaTeX\ 代码,将置于\ {\color{cyan}\rule[.25ex]{1em}{1ex}} 颜色框内,
% 需要保存为特定文件后进行编译。
%
% \section{开始使用}\label{sec:start}
% \subsection{准备工作}
% 开始之前,您需要选择一个合适的 \TeX\ 发行版,以及需要一些必要的 \TeX\ 技能。
% \begin{enumerate}
% \item \TeX\ 发行版:
% \begin{description}
% \item[本地编译] 建议完整安装 \TeX\ Live 2022 或更新版本。模板\emph{不支持} \CTeX\ 套装。安装 \TeX 发行版的详细步骤可参考\href{https://github.com/OsbertWang/install-latex-guide-zh-cn}{《一份简短的关于 \LaTeX 安装的介绍》}。此外,该文档简要地介绍了几款常见的文本编辑器,可根据喜好自行选择。
% \item[在线编译] 推荐 \href{https://www.overleaf.com/}{Overleaf},它提供了 Ubuntu 系统下的 \TeX\ Live,目前为 2022 版。免费版本足以应对模板的正常编译,至于完整的文档历史和协作编辑等功能则需付费订阅。
% \end{description}
% \item \TeX\ 技能:本文档不是一份 \LaTeX\ 零基础教程,使用本模板需要对 \LaTeX\ 和参考文献管理工具 \BibTeX 有一定的熟练度。若您是新手,我们建议您先阅读一些入门文档,如\href{http://mirror.ctan.org/info/lshort/chinese/lshort-zh-cn.pdf}{《一份不太简短的 \LaTeXe 介绍》}。
% \end{enumerate}
%
% \subsection{模板组成}
% 在表 \ref{tab:mainfile} 中罗列了本模板所包含的主要文件。
% \begin{table}[ht]
% \centering
% \caption{模板的组成}\label{tab:mainfile}
% \begin{tabular}{ll}
% \toprule
% 文件(夹)名 & 简述\\
% \midrule
% \file{buctthesis.ins} & \textsc{DocStrip} 驱动文件\\
% \file{buctthesis.dtx} & \textsc{DocStrip} 源文件\\\cmidrule(lr){1-2}
% \file{chapter/} & 论文各部分的源文件路径\\
% \file{code/} & 源代码的路径\\
% \file{cover/} & 论文封面的路径\\
% \file{figure/} & 插图的路径\\\cmidrule(lr){1-2}
% \file{main.tex} & 主文件\\
% \file{main.pdf} & 示例文档\\
% \file{buctthesis.cls} & 模板的文档类文件\\
% \file{thesisbib.bib} & \BibTeX{}参考文献数据库\\
% \file{mycfg.sty} & 自定义配置文件\\
% \file{README.md} & 项目自述文件\\
% \file{\bfseries buctthesis.pdf} & 写作指南,即本文\\
% \bottomrule
% \end{tabular}
% \end{table}
%
% \begin{enumerate}
% \item 主文件 \file{main.tex}:定义论文相关信息,并对分散于 \file{chapter/} 文件夹下的各部分内容进行“整合”。这里的“各部分内容”包括诚信声明或版权页、摘要、正文等。
% \item 文档类文件 \file{buctthesis.cls}:格式控制。可由 \file{buctthesis.ins} 和 \file{buctthesis.dtx} 生成:
% \begin{shell}
% xelatex buctthesis.ins
% \end{shell}
% \item \file{buctthesis.pdf}:写作指南,即本文。可由 \file{buctthesis.dtx} 生成:
% \begin{shell}
% xelatex buctthesis.ins
% xelatex buctthesis.dtx
% makeindex -s gind.ist -o buctthesis.ind buctthesis.idx
% xelatex buctthesis.dtx
% xelatex buctthesis.dtx
% \end{shell}
% \end{enumerate}
%
% \subsection{编译论文}
% 模板基于 \cls{ctexbook} 文档类构建,但\emph{仅} 支持 \XeTeX\ 引擎。
% 目前参考文献生成基于 \BibTeX,因此完整的编译流程如下:
% (输入以下命令时可略去文件扩展名)
% \begin{shell}
% xelatex main.tex
% bibtex main.tex
% xelatex main.tex
% xelatex main.tex
% \end{shell}
%
% 或者使用更方便的 latexmk 工具:不加参数则默认对 \file{main.tex} 进行编译。
% 相比上一种,使用 latexmk 更加自动化,能持续编译直到解决所有的交叉引用:
% \begin{shell}
% latexmk
% \end{shell}
%
% 示例文件会随模板一同发布。建议在写作开始前对示例文件执行一次全编译,以检查编程环境是否合适。
%
% \subsection{提问}
% 对于模板的任何问题或新功能需求请提交至 \href{https://github.com/the-ccsn/BUCTthesis/issues}{GitHub Issues}。
% 以下步骤可能对排除与精简问题有所帮助:
% \begin{enumerate}
% \item 将 \file{buctthesis.cls} 和 \file{main.tex} 文件复制到一空白文件夹;
% \item 简化 \file{main.tex} 中能复现问题的代码至如下所示:
% \begin{latex}
% \documentclass[ type = bachelor ]{buctthesis} % 请注意指定文档类型
% \begin{document}
% sOmetHInG GoEs wRoNg.
% \end{document}
% \end{latex}
% \item 如果有必要的话可以将 \file{.log} 文件通过 \href{https://pastebin.com/}{Pastebin} 一并提交。
% \end{enumerate}
%
% \section{使用说明}\label{sec:usage}
% 本节将简单介绍模板中的命令和环境。除了以下介绍,推荐对照示例文件及源代码看一看。
%
% \subsection{论文选项}\label{subsec:options}
% \subsubsection{文档类选项}
% 主文件 \file{main.tex} 以
% \begin{latex}
% \documentclass [
% type = doctor, % bachelor | master | doctor
% fontset = windows, % fandol | windows | ...
% submit,
% openany, % openany | openright(default)
% ]{buctthesis}
% \end{latex}
% 命令载入文档类,从而控制全文格式。
%
% 以下逐一简述各个选项:
%
% \DescribeOpt{type}
% \emph{必须指定一种类型}:本科 \opt{bachelor},硕士 \opt{master},以及博士 \opt{doctor}。
% 如:
% \begin{latex}
% % 博士论文
% \documentclass[type = doctor]{buctthesis}
% % 或:
% % 本科论文
% \documentclass[type = bachelor]{buctthesis}
% \end{latex}
%
% \DescribeOpt{fontset}
% 该选项会传递至 \pkg{ctex} 宏集,从而指定全文的字体。模板的设置如表~\ref{tab:fontset}~所示。
%
% 其中选项 \opt{fandol} 或使用 \opt{\meta{others}} 选项 \footnote{参见\pkg{ctex}宏集第 4.3 小节。}是为了一些不方便安装字体的系统或平台(如 Overleaf)所采取的\emph{临时解决方案}。
% 这些字体与中易系列字体有少许差别,且偶尔有缺字现象。
% 因此,强烈建议在最后提交论文前,在合适的环境下使用 \opt{fontset = windows} 进行编译。
%
% \begin{table}[ht]
% \centering
% \caption{模板的字体配置}\label{tab:fontset}
% \begin{tabular}{llll}
% \toprule
% \opt{fontset =} & \opt{windows} & \opt{fandol} & \opt{\meta{others}}\\
% \midrule
% 中文 & 中易字库 (宋、黑开启伪粗体) & Fandol 字库 & / \\
% 西文 & Times New Roman & Times New Roman & Times New Roman \\
% \bottomrule
% \end{tabular}
% \end{table}
%
% \emph{此外,论文封面使用的字体比较特殊,因此需要做另外设置。参见~\ref{subsec:cover}~中对封面相关字体的说明。}
%
% \DescribeOpt{submit}
% 是否为提交版本。如果启用则会将文章超链接和代码块的文字颜色全部设置为黑色,适合论文最终提交与付梓。
% 需要提醒的是,它不能转换插图的颜色。
%
% \DescribeOpt{openright}
% \DescribeOpt{openany}
% 对于书籍而言,一般章标题都只出现在右边的页面(奇数页),之前不足的页面用空白补足。
% 这也是打开模板 \opt{openright} 选项的结果:将会在适当处插入一完全空白页。
% 而 \opt{openany} 则允许在任意页开启新的一章。
%
% 其它选项:多余的选项将传递给 \pkg{ctexbook} 文档类,如 \opt{draft} 将关闭插图和部分宏包的渲染,从而加快编译速度。
%
% \subsubsection{论文信息}\label{subsec:buctsetup}
% \DescribeMacro{\buctsetup}
% \DescribeOpt{ChineseTitle}
% \DescribeOpt{ChineseTitleLineA}
% \DescribeOpt{ChineseTitleLineB}
% \DescribeOpt{EnglishTitle}
% \DescribeOpt{author}
% \DescribeOpt{class}
% \DescribeOpt{studentid}
% \DescribeOpt{school}
% \DescribeOpt{major}
% \DescribeOpt{supervisor}
% \DescribeOpt{msupervisor}
% \DescribeOpt{ChineseKeywords}
% \DescribeOpt{EnglishKeywords}
% \begin{syntax}{buctsetup}
% \marg{键值列表}
% \end{syntax}
%
% 接下来需要定义论文相关信息,使用 \cs{buctsetup} 命令以 \meta{key}$=$\meta{value}
% 的形式进行定义,包括论文的中英文标题、作者个人信息等。
% \begin{latex}
% \buctsetup{
% % 论文的中文标题
% ChineseTitle = {基于 \LaTeX\ 的北京化工大学本硕博毕业论文写作模板},
% % 封面上的标题。总字数不要超过 36 个汉字长度。
% % 本科:可以一行或分两行写,如无第二行将 ChineseTitleLineB 留空或注释掉;
% % 硕博:封面的标题有两行,每一行控制在 18 个汉字长度以内。
% % 封面标题首行
% ChineseTitleLineA = {基于 \LaTeX\ 的北京化工大学本硕博},
% % 封面标题次行
% ChineseTitleLineB = {毕业论文写作模板},
% % 论文的英文标题,一般需要大写
% EnglishTitle = {BUCTthesis: A \LaTeX\ WRITING TEMPLATE FOR BUCT},
% % 作者的中文姓名
% author = {张三},
% % 班级(仅本科)
% class = {某某1024},
% % 学号
% studentid = {2018020999},
% % 学院(仅本科)
% school = {材料科学与工程学院},
% % 专业名称
% major = {高分子材料与工程},
% % 导师的姓名与职称
% supervisor = {李四教授},
% % 专业负责人姓名(仅本科)
% msupervisor = {王五},
% % 中文、英文关键词,各关键词间以西文逗号“,”分隔
% ChineseKeywords = {论文,\LaTeX{},模板},
% EnglishKeywords = {thesis,\LaTeX{},template},
% % 日期,请注意务必使用形如“YYYY-MM-DD”的格式
% date = {2021-12-23},
% }
% \end{latex}
%
% \emph{无论是文档类选项还是 \cs{buctsetup} 命令,各选项之间不要留有空行,并以西文逗号“,”分隔。}
%
% 此外,\cs{buctsetup}\marg{键值列表} 与下列命令等价:
% \begin{latex}
% % 于导言区
% \ChineseTitle{基于 \LaTeX\ 的北京化工大学本硕博毕业论文写作模板}
% \EnglishTitle{BUCTthesis: A \LaTeX\ WRITING TEMPLATE FOR BUCT}
% % ...(下同)
% \end{latex}
%
% \subsection{封面}\label{subsec:cover}
% \DescribeMacro{\makecover}
% \begin{syntax}{makecover}
% \oarg{文件路径}
% \end{syntax}
%
% \emph{注意:从2.0版本起,模板将封面集成至论文中而不再单独使用一个文档类文件。}
%
% BUCTthesis 对学校印刷的纸质封面进行了仿制,
% 直接使用而不带任何参数的 \cs{makecover} 会根据所选 \opt{type} 生成对应的封面,封面上的各项信息从前述的 \cs{buctsetup} 处定义。
% 需要注意的是,这里的“仿制”仅是实现封面的效果,学校印制的封面需要手写内容,故不能在纸本上替代学校统一印制的封面;
% 若无特殊说明,可以在提交电子版时使用此封面。但,仍请以教务处最新通告为准。
%
% 此外,学校封面使用的方正系列字体未预装于一些操作系统上,
% 可访问\href{https://www.foundertype.com}{方正字库官网}下载和安装,具体步骤从略。
%
% 封面所使用的中文字体清单如下:
% \begin{enumerate}
% \item SimSun,中易宋体
% \item SimHei,中易黑体
% \item KaiTi,中易楷体
% \item STXingkai,华文行楷
% \item FZXiaoBiaoSong-B05S,方正小标宋简体
% \item FZDaBiaoSong-B06S,方正大标宋简体(仅硕博封面需要)
% \end{enumerate}
%
% 当且仅当存在上述字体文件时模板才会输出电子版的封面。
% 当然,考虑到有时需要插入扫描页,所以该命令可跟一个可选参数,如:
% \begin{latex}
% \makecover[figure/mycover.pdf]
% \end{latex}
% 即可插入位于 \file{figure/mycover.pdf} 的图片来代替。
%
% \subsection{前置部分}\label{subsec:frontmatter}
%
% 在封面之后、“目录”之前的几个部分,包括“诚信声明”\footnote{根据《现代汉语词典》对“申明”与“声明”二词的释义,%
% 《本科生规范》中的“诚信申明”应作“诚信声明”;模板以后者作为标题。}(仅本科)、
% 版权页(仅硕博)、“任务书”(仅本科)、“摘要”和“Abstract”,
% 分别对应于 \file{chapter/frontmatter.tex} 中的不同命令或环境。
%
% \subsubsection{诚信声明与版权页}
% \DescribeMacro{\makedeclare}
% \begin{syntax}{makedeclare}
% \oarg{文件路径}
% \end{syntax}
%
% 直接使用而不带任何参数的 \cs{makedeclare} 会根据所选 \opt{type} 生成对应内容。
%
% 和 \cs{makecover} 一样,该命令也可跟一个可选参数来插入扫描页,如:
% \begin{latex}
% \makedeclare[figure/declare.png]
% \end{latex}
% 即可插入位于 \file{figure/declare.png} 的图片来代替。
%
% \subsubsection{摘要和关键词}\label{subsubsec:abstract}
% \DescribeEnv{cabstract}
% \DescribeEnv{eabstract}
% 中、英文摘要分别使用 \env{cabstract} 和 \env{eabstract} 环境。
% \begin{latex}
% \begin{cabstract}
% 中文摘要。
% \end{cabstract}
% \begin{eabstract}
% Abstract in English.
% \end{eabstract}
% \end{latex}
%
% 关键词会根据在 \cs{buctsetup} 中的定义自动生成,参见~\ref{subsec:buctsetup}。
%
% \subsubsection{任务书}\label{subsubsec:taskbook}
% \DescribeEnv{taskbook}
% \DescribeMacro{\taskinfo}
% \DescribeMacro{\taskinfo*}
% \DescribeEnv{bibenumerate}
% 该环境仅适用于本科论文中。
%
% “本科生毕业设计(论文)任务书”部分使用 \env{taskbook} 环境。
% 此环境后可跟一个 \texttt{*}(注意不是 \env{taskbook*}),
% 它会使得生成的任务书页不带任何页眉和页脚,以适合某些特殊情况下使用。
% \begin{latex}
% \begin{taskbook}
% ……“任务书”内容(带页眉页脚)
% \end{taskbook}
% % 或者:
% \begin{taskbook}*
% ……“任务书”内容(不带页眉页脚)
% \end{taskbook}
% \end{latex}
%
% \cs{buctsetup} 中定义的信息会作用于“任务书”的开头部分,该部分以 \cs{taskinfo} 命令来插入。
% 这个命令同样有一个带星号的版本即 \cs{taskinfo*},
% 二者的区别在于后者比前者少了一次换行,是《本科生规范》中示例的实现,但不适合文字较多时使用。
%
% 除此之外,可以选择使用 \env{bibenumerate} 环境来排版有序文献列表,
% 序号已经设置为带方括号的数字。
%
% \emph{以上各部分在源文件中含有部分代码,稍作改动即可。}
%
% \subsubsection{目录}\label{subsubsec:content}
% \DescribeMacro{\tableofcontents}
% \DescribeMacro{\tableofcontentsEN}
% \DescribeMacro{\listofdesignfigures}
% 三个命令分别生成中文目录、英文目录(仅硕博)、设计图纸目录(仅本科部分专业)。
% \begin{latex}
% \tableofcontents
% \tableofcontentsEN
% \listofdesignfigures
% \end{latex}
%
% 三者是互相独立的。
% 为生成英文目录,需要在正文中以 \cs{echapter} 等命令指定各级标题的对应英文,参见~\ref{subsubsec:bitoc};
% 为生成设计图纸目录,需要在正文中以 \env{dfigure} 环境指定插图为“设计图纸”并计数编号,参见~\ref{subsubsec:dfigure}。
%
% \subsubsection{符号说明表}\label{subsubsec:deno}
% \DescribeEnv{denotation}
% 符号说明表的源文件位于 \file{chapter/denotation.tex},
% 使用 \env{denotation} 环境。
% 《本科生规范》和《研究生规范》中都未详细规定符号说明表的格式,
% 模板设计了一个无框线、可跨页的长表格,直接在环境里填入内容即可。
% 环境接受一个可选参数 \meta{width} ,代表“说明”一列的宽度,用于在必要时调整。
% \begin{latex}
% \begin{denotation}[12cm] % 设置第二列的列宽为 12 cm,默认 10 cm
% 符号1 & 说明1 \\
% 符号2 & 说明2 \\
% \end{denotation}
% \end{latex}
%
% \emph{注意:“符号说明表”在本科论文中置于“参考文献”之后,与研究生论文有所差异。}
%
% \subsubsection{前言}\label{subsubsec:foreword}
% 该环境仅适用于本科论文中。
%
% 该部分的源代码位于 \file{chapter/foreword.tex},
% 使用 \env{foreword} 环境,在相应位置输入文本即可。注意不能在此环境中使用
% \cs{section}等与“章”计数器有关的命令,结论、翻译、致谢部分同理。
%
% \subsection{正文部分}\label{subsec:mainmatter}
%
% \subsubsection{纲举目张}
% \DescribeMacro{\include}
% \DescribeMacro{\input}
% \begin{syntax}{include}
% \marg{文件}
% \end{syntax}
% \qquad
% \begin{syntax}{input}
% \marg{文件}
% \end{syntax}
%
% 正文部分各个章节的源文件存放于 \file{chapter/} 文件夹,
% 只要在 \file{main.tex} 正文部分以上述命令插入各章节即可成文。
% 插入 \meta{文件} 可以不带扩展名,默认为 \file{.tex}。
%
% 使用 \cs{include} 命令会在读入文件前另起一页,而 \cs{input}
% 纯粹插入文件里的内容。
% 当随着写作章节增多,每次编译时间也会越来越长。
% 此时可以选择性地注释部分章节,从而快速编译查错。
%
% \subsubsection{双语目录}\label{subsubsec:bitoc}
% \DescribeMacro{\echapter}
% \DescribeMacro{\esection}
% \DescribeMacro{\esubsection}
% \DescribeMacro{\esubsubsection}
% \begin{syntax}{echapter}
% \marg{英文目录标题}
% \end{syntax}
%
% 这些命令仅适用于硕博论文中,支持章、节、小节和小小节标题,且语法相同。
%
% 硕博论文要求中英双语目录,且英语目录要与中文对应。
% 我们只需在正文章节标题命令后加上对应标签即可。
% 如:
% \begin{latex}
% \chapter{绪论}\echapter{Introduciton}
% \section{基本概念}\esection{Basic Conceptions}
% \section{本章小结}\esection{Chapter Summary}
% \chapter{实验}\echapter{The Experiments}
% \end{latex}
%
% 可能写两遍 chapter 或 section 显得过于繁琐,我们也有更简单的 \cs{bichapter} 与 \cs{bisection} 等命令。以 \cs{bichapter} 为例,语法格式为:
%
% \DescribeMacro{\bichapter}
% \DescribeMacro{\bisection}
% \DescribeMacro{\bisubsection}
% \DescribeMacro{\bisubsubsection}
% \begin{syntax}{bichapter}
% \oarg{中文目录标题}\marg{中文正文标题}\marg{英文目录标题}
% \end{syntax}
%
% 可见与 \cs{chapter} 相比,它多了一个必选参数用于接受 \meta{英文目录的标题}。
% 于是,上面这个例子可以这样简化:
% \begin{latex}
% \bichapter{绪论}{Intorduciton}
% \bisection{基本概念}{Basic Conceptions}
% \bisection{本章小结}{Chapter Summary}
% \bichapter{实验}{The Experiments}
% \end{latex}
%
% 但这也有少许弊端:一些编辑器会检测代码中诸如 \cs{section} 等章节结构命令,
% 以此在编辑窗口中显示论文的结构树;但是,如果使用了 \cs{bisection} 等命令之后,
% 就可能无法正常显示了。
%
% \DescribeMacro{\tableofcontentsEN}
% 然后,使用 \cs{tableofcontentsEN} 生成英文目录项。
% 类似中文目录,英文目录需要经过两次编译才能正确生成。
%
% \subsubsection{双语图表注}\label{subsubsec:bicaption}
% \DescribeMacro{\bicaption}
% \begin{syntax}{bicaption}
% \marg{中文长图表注}\marg{英文长图表注}
% \end{syntax}
%
% 该命令仅适用于硕博论文中。
%
% 具体的用法很简单:在 \env{figure} 环境中使用 \cs{bicaption} 代替 \cs{caption},如:
% \begin{latex}
% \begin{figure}
% \centering
% \includegraphics[<options>]{My-Fig}
% \bicaption{中文标题}{English Title}
% \label{fig:my-fig}
% \end{figure}
% \end{latex}
%
% \subsubsection{设计图纸}\label{subsubsec:dfigure}
% 这些命令和环境仅适用于本科论文中。
%
% 关于一般的插图请看示例文件,这里介绍关于“设计图纸”及编目的方法。
%
% 由于《本科生规范》未对所谓“设计图纸”详细说明,因此模板设计了两种编目方式:
% 一是加入主目录,另一种是单独生成目录。
%
% \DescribeEnv{dfigure}
% 设计图纸的计数器是独立于一般插图的。
% 因此,无论编目方式如何,
% 都需要使用 \env{dfigure} 而非 \env{figure} 环境,来为一张插图指定为“设计图纸”。
%
% \DescribeMacro{\dcaption}
% 如果需要编入主目录,需要使用 \cs{dcaption} 代替 \cs{caption},如:
% \begin{latex}
% \begin{dfigure}
% \centering
% \includegraphics[<options>]{My-Fig}
% \dcaption{设计图纸示例}
% \end{dfigure}
% \end{latex}
% 也就是说,\cs{dcaption} 命令用于添加编号与标题的同时将它编入主目录。
%
% \DescribeMacro{\listofdesignfigures}
% 而独立目录也很简单:只需要 \env{dfigure} 指定为“设计图纸”,
% 并在主目录(\cs{tableofcontents})后跟一个 \cs{listofdesignfigures} 即可。参见~\ref{subsubsec:content}。
%
% \subsubsection{结论}
% \DescribeEnv{conclusion}
% 该环境仅适用于本科论文中。
%
% 结论部分的源文件位于 \file{chapter/conclusion.tex}。该环境与前言相似,没有章的编号。
% 但如果希望把“结论”编入章节,如“第五章\hspace{\ccwd}结论”,
% 那么就不必使用 \env{conclusion} 环境,像其他章节一样使用 \cs{chapter} 就可以了。
% \begin{latex}
% \begin{conclusion}
% 本文的结论有什么?
% \end{conclusion}
% \end{latex}
%
% \subsubsection{参考文献}\label{subsubsec:bib}
% \DescribeMacro{\cite}
% \DescribeMacro{\inlinecite}
% \DescribeMacro{\nocite}
% \begin{syntax}{cite}
% \marg{CiteKey}
% \end{syntax}
% \qquad
% \begin{syntax}{inlinecite}
% \marg{CiteKey}
% \end{syntax}
%
% 模板使用 \BibTeX 来实现参考文献的引用。
% 一般情况下,使用 \cs{cite} 实现上标、方括号按“顺序编码制”引用参考文献;
% 而 \cs{inlinecite} 可实现行间引用,适合某些特殊情况使用;
% 此外,\cs{nocite}\marg{CiteKey} 则指明不在正文中引用但仍需要列出的参考文献,一般不使用。
% 在同一处引用多个文献时,应将各篇文献的引用标签一同写在参数里,
% 并以西文逗号“,”分隔每个 \meta{CiteKey},如:
% \begin{latex}
% ……多喝热水。\cite{bib1, bib2}
% \end{latex}
%
% 至于参考文献列表,主文件中以下列命令来生成符合格式要求的参考文献章节:
% \begin{latex}
% \bibliographystyle{gbt7714-numerical}
% \bibliography{thesisbib.bib}
% \end{latex}
%
% 为罗列各条参考文献,
% 需要在 \file{thesisbib.bib} 文件中增删需引用的文献数据。
% 在文章中相应位置引用文献后,需执行一次全编译以确保正确显示。
%
% \emph{注意:至少需要引用一篇文献,否则执行完全编译可能会引起编译错误。}
%
%
% \subsection{后置部分}\label{subsec:backmatter}
% \subsubsection{翻译}
% \DescribeEnv{translation}
% 该环境仅适用于本科论文中。
%
% 文献翻译的源文件位于 \file{chapter/translation.tex},
% 使用 \env{translation} 环境,原文和翻译都要有。
%
% \emph{注意:部分学院要求该部分作为单独的一份文件,此时可直接删除该文件并删除主文件的插入代码。}
% \begin{latex}
% \begin{translation}
% English.
%
% 汉语。
% \end{translation}
% \end{latex}
%
% \subsubsection{附录}\label{subsubsec:app}
% \DescribeMacro{\appendix}
% \cs{appendix} 命令作为附录部分的开始。
% 与正文类似,只需往 \file{chapter/app1.tex} 等加入内容即可。
% \begin{latex}
% \appendix
% \chapter{...}
% ...
% \end{latex}
%
% \subsubsection{致谢}
% \DescribeEnv{acknowledgement}
% 致谢部分的源文件位于 \file{chapter/acknowledgement.tex},
% 使用 \env{acknowledgement} 环境,
% 往里面写入感谢的话就可以啦。
% \begin{latex}
% \begin{acknowledgement}
% 谢谢你!
% \end{acknowledgement}
% \end{latex}
%
% \emph{注意:“致谢”在本科论文中置于“附录”之前,与研究生论文有所差异。}
%
% \subsubsection{成果与简介}
% \DescribeEnv{achievements}
% \DescribeEnv{resume}
% 这些环境仅适用于研究生论文中。
%
% 该部分包括“作者攻读学位期间发表的学术论文及科研成果目录”与“作者和导师简介”,
% 源文件位于 \file{chapter/resume.tex}。示例文档中已有现成例子,推荐直接修改。
%
% \DescribeEnv{bibenumerate}
% 其中可以使用 \env{bibenumerate} 环境来生成带有方括号的列表,适合罗列文献。
%
% \begin{latex}
% \begin{achievements}
% \section*{发表及已接受的论文:}
% \section*{成果及专利:}
% \end{achievements}
% \begin{resume}
% \section*{作者简介:}
% \section*{导师简介:}
% \end{resume}
% \end{latex}
%
%
%
% \StopEventually{\PrintChanges\PrintIndex}
%
% \clearpage
% \section{实现细节}\label{sec:implementation}
% \subsection{文档类信息与选项}
% \begin{macrocode}
%<*class>
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesClass{buctthesis}[2023/05/20 v2.0 BUCT Thesis Template]
% \end{macrocode}
%
% 装载 \pkg{ifxetex} 宏包,并通过 \cs{RequireXeTeX} 命令检查编译命令。
% 若未使用 \XeTeX\ 或 \XeLaTeX\ 将强制中止编译并发出警告。
% \begin{macrocode}
\RequirePackage{ifxetex}
\RequireXeTeX
% \end{macrocode}
%
% 定义选项和族。
% \begin{macrocode}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family = buct,
prefix = buct@,
setkeys = \kvsetkeys,
}
% \end{macrocode}
%
% 定义载入文档类时的选项:
%
% 模板类型:本科、硕士、博士;
% \begin{macrocode}
\newif\ifbuct@bachelor\buct@bachelorfalse
\newif\ifbuct@master\buct@masterfalse
\newif\ifbuct@doctor\buct@doctorfalse
\define@key{buct}{type}{\expandafter\csname buct@#1true\endcsname}
% \end{macrocode}
%
% 是否为最终提交版本,默认否;
% \begin{macrocode}
\DeclareBoolOption[false]{submit}
% \end{macrocode}
%
% 每章从任意页或奇数页开始,默认 openright,即每章只从奇数页开始;
% \begin{macrocode}
\DeclareBoolOption[false]{openany}
\DeclareComplementaryOption{openright}{openany}
% \end{macrocode}
%
% 是否开启模板调试器,默认否。
% \begin{macrocode}
\DeclareBoolOption[false]{debugger}
% \end{macrocode}
%
% 将文档类多余的选项传递给 \pkg{ctexbook} 文档类,并加载相应选项的文档类。
% \begin{macrocode}
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{ctexbook}}
\ProcessKeyvalOptions*
% \end{macrocode}
%
% 由于 \cls{ctexbook} 将会调用 \pkg{xeCJK} 宏包来配置字体,这里使用 \opt{quiet}
% 选项关闭因自定义字体(后述)而产生的警告。
% 最后根据用户选项,加载相应选项的 \cls{ctexbook} 文档类。
% \begin{macrocode}
\PassOptionsToPackage{quiet}{xeCJK}
\ifbuct@openany\LoadClass[zihao=-4,UTF8,oneside]{ctexbook}
\else\LoadClass[zihao=-4,UTF8,openright]{ctexbook}\fi
% \end{macrocode}
%
% 必须指定本、硕、博中的一种类型。
% \begin{macrocode}
\ifbuct@bachelor\relax\else
\ifbuct@master\relax\else
\ifbuct@doctor\relax\else
\ClassError{buctthesis}{%
Specified thesis type is obligatory: \MessageBreak%
type = [ bachelor | master | doctor ]%
}{}
\fi\fi\fi
% \end{macrocode}
%
% \begin{macro}{\buct@def@key}
% 定义用于定义论文相关信息的内部命令。例如:
% \begin{latex}
% \buct@def@key{ChineseTitle}
% \end{latex}
% 相当于:
% \begin{latex}
% \newcommand{\ChineseTitle}[1]{\newcommand{\buct@ChineseTitle}{#1}}
% \define@key{buct}{ChineseTitle}{\ChineseTitle{#1}}
% \end{latex}
%
% 这个命令我们让它能接受两个参数,其中第一个必选参数为选项的键名称,后一个可选参数则是选项的默认值。
% \begin{macrocode}
\NewDocumentCommand{\buct@def@key}{ m o }{
\@namedef{#1}##1{\@namedef{buct@#1}{##1}}
\define@key{buct}{#1}[#2]{\@nameuse{#1}{##1}}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\buctsetup}
% 定义 \cs{buctsetup} 命令作为接口,方便在主文件中设置。
% \begin{macrocode}
\newcommand{\buctsetup}[1]{\kvsetkeys{buct}{#1}}
\buct@def@key{ChineseTitle}
\buct@def@key{EnglishTitle}
\buct@def@key{ChineseTitleLineA}
\buct@def@key{ChineseTitleLineB}
\buct@def@key{ChineseTitle}
\buct@def@key{author}
\buct@def@key{studentid}
\buct@def@key{supervisor}
\buct@def@key{major}
\buct@def@key{date}[\the\year-\two@digits{\month}-\two@digits{\day}]
\ifbuct@bachelor
\buct@def@key{school}
\buct@def@key{class}
\buct@def@key{msupervisor}
\fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\buct@def@sep@key}
% 对于 \opt{ChineseKeywords} 等键接受的是以西文逗号“,”分隔的值,上面的定义就不合适了。
% 所以要对值做分隔。相比 \cs{buct@def@key} 这里的后一个参数为必选项,即为在论文中的分隔符。
% 此处的宏展开可参考\href{https://www.zhihu.com/question/26916597}{这篇讨论}。
% \begin{macrocode}
\newcommand{\buct@def@sep@key}[2]{%
\@namedef{#1}##1{%
\@namedef{buct@#1}{}%
\@for\reserved@a:=##1\do{
\expandafter\ifx\csname buct@#1\endcsname\@empty\else
\expandafter\g@addto@macro\csname buct@#1\endcsname{#2}\fi
\expandafter\expandafter\expandafter\g@addto@macro%
\expandafter\csname buct@#1\expandafter\endcsname%
\expandafter{\reserved@a}
}
}
\define@key{buct}{#1}{\@nameuse{#1}{##1}}%
}
\buct@def@sep@key{ChineseKeywords}{\buct@ChineseKeywords@sep}
\buct@def@sep@key{EnglishKeywords}{\buct@EnglishKeywords@sep}
% \end{macrocode}
% \end{macro}
% \subsection{载入宏包}
%
% 用于调整纸张与页面,这两个宏包提供了方便的命令来设置页面边距和页眉页脚。
% \begin{macrocode}
\RequirePackage{geometry,fancyhdr}
% \end{macrocode}
%
% 自定义目录格式。
% \begin{macrocode}
\RequirePackage{titletoc}
% \end{macrocode}
%
% \AmS{}系列宏包,包括:
% \begin{enumerate}
% \item \pkg{amsmath},提供了各种数学方面的增强型命令,以改进包含数学公式的文档结构;
% \item \pkg{amsthm},提供了定理类环境样式规范;
% \item \pkg{amssymb},提供各种数学符号。
% \end{enumerate}
% 除此之外,载入 \pkg{unicode-math} 宏包以配置数学字体。
% \begin{macrocode}
\RequirePackage{amsmath,amsthm,amssymb,unicode-math}
% \end{macrocode}
%
% 这两个宏包最重要的用途是排版本科的第五级标题。前者用于提供带圈序号,而后者提供了方便的格式控制。
% \begin{macrocode}
\RequirePackage{pifont,enumitem}
% \end{macrocode}
%
% 一个适合排版含数值和单位的物理量的宏包,它也能提供在表格中按小数点竖直对齐的方法。
% \begin{macrocode}
\RequirePackage{siunitx}
% \end{macrocode}
%
% 关于化学式排版的宏包有很多,但这里载入 \pkg{mhchem}。
% 它容易上手,偏向于无机和分析化学(方程)式的排版。
% 至于有机化学的结构式等,使用图片插入可能是一个更好的选择;若时间充裕可学习如 \pkg{chemfig} 等宏包。
% \begin{macrocode}
\RequirePackage[version = 4]{mhchem}
% \end{macrocode}
%
% 浮动体系列宏包,控制表格、插图等浮动体及标签格式。
% \begin{macrocode}
\RequirePackage{float}
\RequirePackage{longtable,threeparttable,tabularx,multirow,booktabs}
\RequirePackage{graphicx}
\RequirePackage[labelformat = simple]{subcaption}
\RequirePackage[format=hang]{caption}
\RequirePackage{bicaption}
% \end{macrocode}
%
% 一个用于绘图的宏包,模板里用于绘制脚注外的圆圈。
% \begin{macrocode}
\RequirePackage{tikz}
% \end{macrocode}
%
% 绘制封面的一些宏包。\pkg{calc} 能够方便地计算文本长度;
% \pkg{textpos} 配合 \pkg{tikz},这样就能在页面的任何地方作画了。
% 另外, 在 ctex 宏集 2.5 版本之后需要手动载入\pkg{xeCJKfntef} 。
% \begin{macrocode}
\RequirePackage{calc}
\RequirePackage[absolute,overlay]{textpos}
\RequirePackage{xeCJKfntef}
% \end{macrocode}
%
% 代码块环境。
% \begin{macrocode}
\RequirePackage{listings}
% \end{macrocode}
%
% 该宏包提供了符合要求的“参考文献”章节中文献的编排格式。
% 这里的选项会传递至 \pkg{natbib},从而在正文中能实现数字、上标、方括号的引用模式。
% \begin{macrocode}
\RequirePackage[sort&compress]{gbt7714}
% \end{macrocode}
%
% 为了方便查看,模板将以彩色标明超链接和代码块中的关键字。
% \begin{macrocode}
\RequirePackage{xcolor}
% \end{macrocode}
%
% 用于插入PDF文件的宏包。可以插入封面、声明页(因为二者需要签字)等扫描或不方便排版的PDF文件。
% \begin{macrocode}
\RequirePackage{pdfpages}
% \end{macrocode}
%
% \pkg{footmisc} 宏包的选项将脚注的位置固定在页面底端,且跨页重置计数。
% \begin{macrocode}
\RequirePackage[bottom,perpage]{footmisc}
% \end{macrocode}
%
% 命令补丁,用于便捷地修改一些复杂命令,而无需重新定义之。
% \begin{macrocode}
\RequirePackage{xpatch}
% \end{macrocode}
%
% 判断语句。
% \begin{macrocode}
\RequirePackage{xifthen}
% \end{macrocode}
%
% 在页面画上标尺、边框线,和标注行号。仅当开启调试时。
% \begin{macrocode}
\ifbuct@debugger
\RequirePackage[color=blue,type=upperleft,showframe,hshift=2.7cm,vshift=3.5cm]{fgruler}
\RequirePackage[pagewise]{lineno}
\fi
% \end{macrocode}
%
% 实现交叉引用与超链接。
% \begin{macrocode}
\RequirePackage{hyperref}
% \end{macrocode}
%
% \subsection{字体配置}
% \begin{macro}{\buct@fontsetval}
% 首先来设置中文的字体。在 \pkg{ctex} 宏集中的 \cs{g\_\_ctex\_fontset\_tl} 存储着选项 \opt{fontset} 的值。
% 模板尽可能避免使用 \LaTeX 3 语法,所以先用一个 \cs{buct@fontsetval} 来保存它。
% \begin{macrocode}
\newcommand\buct@fontsetval{\csname g__ctex_fontset_tl\endcsname}
% \end{macrocode}
% \end{macro}
%
% 根据\cs{buct@fontsetval} 的值,分别设置不同的字体。
%
% 在 Windows 系统下,需要对中易宋体、中易黑体开启“伪粗”和“伪斜”,并设置相关系数。
% \begin{macrocode}
\ifthenelse{\equal{\buct@fontsetval}{windows}}{
\xeCJKsetup{EmboldenFactor=2.2,SlantFactor=0.2}
\setCJKmainfont{SimSun}[AutoFakeBold,AutoFakeSlant]
\setCJKsansfont{SimHei}[AutoFakeBold]
}
% \end{macrocode}
% 而在非 Windows 系统下,则由 \pkg{ctex} 宏集自动检测环境并保留其默认设置,
% 同时警告所使用的字体与《规范》(即默认设置)存在不同。
% \begin{macrocode}
{
\ClassWarning{buctthesis}{%
The fonts differ to the default.\MessageBreak%
Use fontset = windows to correct.%
}
}
% \end{macrocode}
%
% \begin{macro}{\bfsong}
% 因设置中易宋体开启“伪粗体”,使用 \cs{bfseries} 将产生加粗的效果,
% 这与一般的 \LaTeX\ 常识是相悖的。
% 因此模板提供了更明确的命令 \cs{bfsong}。
% \begin{macrocode}
\newcommand{\bfsong}{\bfseries}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\bfhei}
%
% 对于黑体同理。
% 此外要注意:模板将 \opt{fontset = windows} 预设的无衬线字体(微软雅黑)改为了中易黑体。
% \begin{macrocode}
\newcommand{\bfhei}{\sffamily\bfseries}
% \end{macrocode}
% \end{macro}
%
% 其次,对于西文,全部统一设置为 Times New Roman,以尽可能避免格式审查问题。
% \begin{macrocode}
\setmainfont{Times New Roman}
\setsansfont{Times New Roman}
\setmonofont{Times New Roman}