summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/easybook/easybook.tex
blob: 20a5a1233af20d791ff4036f9dfc61d35facacb2 (plain)
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
\PassOptionsToPackage{svgnames}{xcolor}
\documentclass[load-preamble+]{cnltx-doc}

\usepackage[fontset = fandol]{ctex}
\usepackage
  {
    enumitem,newtxmath,indentfirst,tabularray,
    fancyvrb,geometry,hologo,pifont,changelog,calc
  }
\definecolorscheme{blue}
  {
    cs          => violet,
    option      => DarkGreen,
    cnltx       => DarkBlue,
    link        => DeepPink,
    module      => FireBrick,
    beginend    => FireBrick,
    meta        => black,
    versionnote => black
  }
\setcnltx
  {
    name            = easybook,
    color-scheme    = blue,
    title           = EASYBOOK使用手册,
    version         = v2024bc,
    date            = 2024/04/28,
    authors         = 瞿毅,
    info            = 简便地排版中文学位论文或书籍,
    email           = toquyi@163.com,
    url             = https://gitee.com/texno3/easybook,
    abstract        =
      {
        \easybook{} 是基于 \cls*{ctexbook} 书籍文档类创建的纯净学术模板,同时兼具 \cls*{book} 与 \cls*{article} 文档类的功能。结合中国许多高校学位论文的通用框架设计,提供多个命令和接口可以使用户简便地定制论文模板。它的基础宏包 \pkg*{easybase} 还可以搭配 \CTeX 和标准文档类使用。
      },
    arg-format      = \normalfont\small\itshape\xeCJKVerbAddon,
    abstract-format = \small,
    module-sep      = \,\raisebox{-1pt}{\ding{224}}\,,
    title-format    = \huge\sffamily
  }
\KOMAoptions{numbers = noenddot}
\setfootnoterule[0.5pt]{0.4\columnwidth}
\addtokomafont{headsepline}{\color{DarkBlue}}
\addtokomafont{footnoterule}{\color{DarkBlue}}
\addtokomafont{section}{\normalfont\sffamily}
\addtokomafont{subsection}{\normalfont\sffamily}
\addtokomafont{subsubsection}{\normalfont\sffamily}
\DeclareTOCStyleEntry[entryformat = \sffamily]{default}{section}
\DeclareFieldFormat[book]{title}{\textsf{#1}}
\geometry{margin = 1in,marginparwidth = 0.6in}
\SetEnumitemValue{label}{smallbullet}{\small\color{DarkBlue}\textbullet}
\setlist{nosep,topsep = \smallskipamount,labelsep = 0.5em}
\setlist[1]{labelindent = \parindent}
\setlist[itemize,1]{label = smallbullet,leftmargin = *}
\setcounter{tocdepth}{2}
\SetTblrInner[longtblr]{columns = c,hline{1,Z} = {1pt,DarkBlue}}
\SetTblrOuter[longtblr]{presep = \bigskipamount,postsep = \bigskipamount}
\DefTblrTemplate{caption-tag}{default}{表\thetable}
\DefTblrTemplate{caption-sep}{default}{\quad}
\DefTblrTemplate{remark-sep}{default}{\space}
\SetTblrStyle{caption-tag}{font = \bfseries}
\SetTblrStyle{remark}{font = \small\normalfont}

\ExplSyntaxOn\makeatletter
% * Do not add entries to the index
% + Canceling the \item command in the list environment
% - Leave the option value blank
\NewDocumentCommand{\kvsplit}{st+t-mm}
  {
    \IfBooleanF{#2}{\item}
    \code
      {
        \IfBooleanTF{#1}{\option*{#4}}{\option{#4}}
        \cnltx@isvalue
        \IfBooleanTF{#3}{#5}{\splitmarg{#5}}
      }
    \cnltx@checkdefault{\hfill\newline}
  }
% Traversal output parameters
\newcommand{\splitmeta}[2][\code{,}]
  {
    \clist_clear:N \l_tmpa_clist
    \clist_map_inline:nn {#2} { \clist_put_right:Nn \l_tmpa_clist { \meta{##1} } }
    \clist_use:Nn \l_tmpa_clist {#1}
  }
% Add delimiters to parameters
\newcommand{\newsplitarg}[4][\code{,}]
  {
    \newcommand{#2}[1]
      {\code{\textcolor{argument}{#3\textnormal{\splitmeta[#1]{##1}}#4}}}
  }
\newsplitarg{\splitoarg}{[}{]}
\newsplitarg{\splitdarg}{(}{)}
\newsplitarg{\splitmarg}{\{}{\}}
\newsplitarg[\code{|}]{\baroarg}{[}{]}
\newcommand{\harg}{\textcolor{argument}{\code{-}}}
\newcommand{\HoLogo@TeXLive}[1]{\hologo{TeX}\HOLOGO@space\HOLOGO@mbox{Live}}
\renewcommand{\cnltxpackagenameformat}[1]{\textcolor{cnltx}{\textsf{#1}}}
% Remove default braces of values
\RenewDocumentCommand{\key}{s}
  {
    \IfBooleanTF{#1}{\cnltx@key@aux*}{\cnltx@key@aux{}}
    \meta
  }
\RenewDocumentCommand{\keyis}{s}
  {
    \IfBooleanTF{#1}{\cnltx@key@aux*}{\cnltx@key@aux{}}
    \@firstofone
  }
% A tag that distinguishes the options for different paths
\NewDocumentCommand{\dtag}{sO{\ding{73}}}
  {
    \begingroup
    \reversemarginpar
    \marginnote{\hfill\llap{#2}}
    \endgroup
    \IfBooleanF{#1}{\cnltx@checkdefault{\hfill\newline}}
  }
\newnote{\newtag}[1][New]{\fbox{#1}}
\newnote{\newtagv}[2][New]{#1\\#2}
% Multi-row values alignment when there are many choices
\newcommand{\leftfillchoice}[2]
  {
    \hspace*{\widthof{\option*{#1}}+\widthof{\code{\cnltx@isvalue}}-1em}
    \code{\choices{#2}}
  }
% Use a separate module margin marker to prevent overlap
\newcommand{\smodule}[1]{\cnltx@module@text*{\normalsize #1}}
\newcommand{\noitemsep}{\setlength{\itemsep}{0ex}}
\renewcommand{\cnltx@package@abstract@width}{0.85\linewidth}
\renewcommand{\cnltx@write@lastname}{}
\renewcommand{\cmltx@list@setup}
  {
    \setlength{\leftmargin}{0em}
    \setlength{\labelwidth}{2em}
    \setlength{\itemindent}{-1em}
    \setlength{\labelsep}{0em}
    \setlength{\listparindent}{2em}
    \setlength{\topsep}{\smallskipamount}
    \setlength{\itemsep}{\smallskipamount}
    \setlength{\partopsep}{0ex}
    \setlength{\parsep}{0ex}
  }
\newcounter{ctexexam}
\define@key{FV}{labelref}{\def\ctexexamlabelref{\label{#1}}}
\let\ctexexamlabelref\empty
\fvset
  {
    formatcom       = \xeCJKVerbAddon,
    baselinestretch = 1.2,
    gobble          = 2,
    fontsize        = \small,
    rulecolor       = \color{DarkBlue},
    framerule       = 0.5pt,
    frame           = single,
    framesep        = 8pt
  }
\DefineVerbatimEnvironment{frameverb}{Verbatim}
  {
    listparameters =
      {
        \setlength{\topsep}{1.2\bigskipamount}
        \appto\FV@EndList{\nointerlineskip}
      }
  }
\DefineVerbatimEnvironment{ctexexam}{Verbatim}
  {
    label = \rule{0pt}{12pt}\textnormal{\bfseries 例~\arabic{ctexexam}},
    listparameters =
      {
        \setlength{\topsep}{1.2\bigskipamount}
        \appto\FV@EndList{\nointerlineskip}
        \refstepcounter{ctexexam}\ctexexamlabelref
      }
  }
\newcommand{\optpath}[1]{\item\code{\textcolor{SlateGray}{#1}}}
\makeatother\ExplSyntaxOff
\labelformat{section}{节#1}
\labelformat{subsection}{小节#1}
\labelformat{subsubsection}{小节#1}
\labelformat{ctexexam}{例#1}
\labelformat{table}{表#1}

\begin{document}
\section{准备开始}
您在使用 \easybook{} 文档类编写文档前可能需要具备以下的条件:
\begin{itemize}
  \item 使用 \hologo{XeLaTeX}(推荐)或 \hologo{LuaLaTeX} 两种编译方式之一。
  \item 由于文档类用到了一些 \LaTeX 和依赖宏包较新的功能,需要版本至少在\textbf{2021/11/15}以后的 \LaTeX 内核支持。建议您安装最新的 \TeX 发行版。
  \item 虽然手册对基本用法做了介绍,但这并不是入门教程,所涉及到宏包的用法与命令并未进行详细介绍,需要对它们有所了解。您应当具有一定的 \LaTeX 使用基础,可以在 \TeX 综合网站 \href{https://www.ctan.org/}{CTAN} 查看相关资源。
\end{itemize}

\subsection{前言}
对于排版外文文档已有诸如 \cls*{KOMA-Script} 和 \cls*{memoir} 等应用广泛的文档类,但这些文档类并不是为中文用户设计的,难免有些水土不符,且用户手册繁杂,对于普通用户来说学习成本高,难以快速上手。中文文档的解决方案 \pkg*{ctex} 宏集解决了中文输出和章节标题格式的设置问题,但在编写文档过程中往往需要更多基本的定制功能,例如目录、图表标题、页眉页脚、脚注和页面边距等,这往往需要额外加载不同功能的宏包。\easybook{} 文档类在 \cls*{ctexbook} 基础上载入了一些使用频率较高且基本稳定的宏包,对它们的功能进行整合并优化联动使用,模块化的改装提供统一的接口兼容 \pkg*{ctex} 文档类,可以满足学术类文档例如中国学位论文模板的基本需求。\easybook{} 提供了与 \CTeX 相同现代化风格的键值设置,支持不同类型的选项与层次化的选项设置。

\subsection{基本用法}
\label{subsec:basic usage}
以下一份简单的 \TeX 文档演示了 \easybook{} 的最基本用法,在导言区进行宏包载入与文档设置,一些详细的使用样例会不定期上传在 \href{https://www.latexstudio.net/}{\LaTeX 工作室} 的网站。
\begin{frameverb}
  \documentclass[文档类选项]{easybook}

  \ctexset{键值列表}
  \usepackage{宏包列表}

  \begin{document}
  \chapter{欢迎}
  \section{Welcome to easybook}
    Hello, \LaTeX
  \end{document}
\end{frameverb}

或者直接使用 \pkg*{easybase} 宏包,目前适用于 \cls*{ctexbook}、\cls*{ctexrep}、\cls*{ctexart} 以及标准文档类,包含了\ref{sec:interface options} 所示各个模块接口命令的功能。它的宏包选项共享文档类选项的一部分,支持的选项见\ref{sec:document class options}。当在\textbf{标准文档类}后载入时还可以使用 \pkg*{ctex} 宏包的选项,将会传递给 \pkg*{ctex} 宏包。
\begin{frameverb}
  \documentclass[文档类选项]{ctexbook}

  \usepackage[宏包选项]{easybase}
  \ctexset{键值列表}

  \usepackage{宏包列表}

  \begin{document}
  \chapter{欢迎}
  \section{Welcome to easybook}
    Hello, \LaTeX
  \end{document}
\end{frameverb}

\subsection{编译方式}
假设您的 \TeX 源文件名为 \code{easybook.tex},需要使用参考文献和索引功能,并使用 \hologo{XeLaTeX} 和 \hologo{BibTeX} 引擎编译文档,那么需要在命令行中执行:
\begin{frameverb}
  xelatex -shell-escape easybook
  bibtex easybook
  makeindex easybook
  xelatex -shell-escape easybook
  xelatex -shell-escape easybook
\end{frameverb}
当然也可以使用 \code{latexmk} 及一些软件自带的编译工具,这里就不做介绍。 \\
\ding{72} 需要注意正确\textbf{编译索引}要增加 \code{-shell-escape} 命令行选项。

\subsection{依赖宏包}
\ref{table:package list} 为 \pkg*{easybase} 直接调用的关键宏包清单,通常情况下它们是常用且稳定的。\colorbox{PaleTurquoise}{蓝色}背景的宏包表示修改了或依赖它们的内部命令。\colorbox{GreenYellow}{绿色}背景的宏包表示并未调用它们,但做了一些预配置,可在导言区手动载入以实现相关的功能。
\begin{longtblr}
  [caption = 依赖的宏包清单,label = table:package list]
  {
  cells = {cmd  = \pkg*},
  cell{1}{3,4}  = PaleTurquoise,
  cell{2}{5}    = PaleTurquoise,
  cell{3}{2,4}  = PaleTurquoise,
  cell{5}{1}    = GreenYellow,
  cell{1}{2}    = GreenYellow,
  cell{3}{1,4}  = GreenYellow
  }
  amsthm & bicaption & ctex & caption & chemformula \\
  enumitem & etoolbox & fancyhdr & geometry & hyperref \\
  imakeidx & listings & marginnote & mathtools & multicol \\
  pifont & pdfpages & siunitx & spbmark & thmtools \\
  tcolorbox & titletoc & tabularray & ulem &
\end{longtblr}

\section{文档类选项}
\label{sec:document class options}
文档类选项应当在使用 \easybook{} 文档类或 \pkg*{easybase} 宏包(部分支持)时指定,可见\ref{subsec:basic usage} 的例子。选项前带有 \ding{73} 符号表示只可用于文档类,否则文档类与宏包都适用。除了下面列举的选项以外,还支持标准和 \CTeX 文档类的选项。

\subsection{基本选项}
\begin{options}
  \opt{draft}
  开启草稿模式会加快编译速度,表现有显示页面边框、行溢出的地方显示黑色方块、图片变成占位方框、显示当前日期和关闭超链接渲染。不使用绘图宏包及依赖 \pkg*{tcolorbox} 宏包的盒子环境也会增快编译速度,详情见\ref{subsec:box}。
  \opt{newline}\dtag
  部分和章标题的样式为另起一行,符合一般英文书籍的习惯。
  \keychoice{scheme}{\fbox{chinese},plain}\dtag
  文档主题方案选项 \option{scheme} 扩展了 \CTeX 文档类中同名选项原有的作用范围,选项值 \code{plain} 可使各类标题变为英文形式。包括章节标题、图表标题和定理名等。
  \opt{enmode}\dtag
  同时开启 \option{newline} 和 \keyis{scheme}{plain} 选项以符合英文原生风格。
  \keychoice{paper}{\fbox{a4paper},b5paper,c5paper,letterpaper,\textcolor{SlateGray}{other paper}}
  文档页面尺寸选项将参数交给 \pkg*{geometry} 宏包处理,可使用它支持的所有标准纸张规格。
  \keyval{configs}{配置文件列表}\dtag\newtag[Chg]%
  载入用户配置的文件名列表,文件列表以花括号包裹并以英文逗号分隔。文件名应包含如 \code{tex}、\code{def} 或 \code{cfg} 等扩展名。若配置文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.cfg}。
  \keychoice{floatpage}{true,\fbox{false}}
  开启这个选项后浮动环境 \env{table} 和 \env{figure} 的比例参数会使用默认值。关闭它则尽可能避免出现浮动页,使图表环境与正文段落更加紧凑,减少多余的空白版面。
  \keychoice{theorem}{\fbox{true},false}
  是否提供定理功能支持。选项开启时定理模块生效,此时会载入 \pkg*{amsthm} 和 \pkg*{thmtools} 宏包。
\end{options}

\subsection{配置字体}
\begin{options}
  \keychoice{cjkfont}{adobe,fandol,founder,mac,macnew,macold,ubuntu,windows,none}\dtag
  中文字体采用 \CTeX 宏集包含的字库并与其一致,具体配置方案可以查看 \CTeX 使用手册。它与 \option*{fontset} 选项是等效的,如果没有指定 \option{cjkfont} 的值,将会自动检测操作系统并选择相应的字体。

  如果需要使用其它中文字体,可以在启用选项 \keyis{cjkfont}{none} 后,再使用 \pkg*{xeCJK} 宏包的相关命令设置字体以及声明字体族:
  \begin{ctexexam}
  \setCJKmainfont{SimSun}[BoldFont = SimHei,ItalicFont = KaiTi]
  \setCJKsansfont{SimHei}
  \setCJKmonofont{FangSong}
  \newCJKfontfamily[song]\songti{SimSun}
  \end{ctexexam}
  \keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,\fbox{auto}}\dtag
  预置的英文字体相关配置方案如\ref{table:english font} 所示。这些字体已经包含在了 \hologo{TeXLive} 发行版中,所以通常不需要再专门安装。如果您想使用其它英文字体,可以使用 \pkg*{fontspec} 宏包的相关命令进行设置。
  \begin{longtblr}
  [
  caption = 英文字体预设方案,
  label = table:english font,
  remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。,
  postsep = \bigskipamount-\itemsep
  ]{
  hline{2}  = {0.5pt,DarkBlue},
  row{1}    = {font = \sffamily},
  column{1} = {cmd = \code}
  }
  & 正文字体 & 无衬线字体 & 等宽字体 \\
  noto & Noto Serif & Noto Sans & Noto Sans Mono \\
  times & XITS & TG Heros & TG Cursor \\
  times* & Times New Roman & Arial & Courier New \\
  ebgaramond & EB Garamond & Libertinus Sans & LM Mono \\
  palatino & TG Pagella & Libertinus Sans & LM Mono \\
  libertine & Libertinus Serif & Libertinus Sans & LM Mono
  \end{longtblr}
  \keychoice{mathfont}{\fbox{times},noto,notosans,nc,ncf,stix2,charter,ebgaramond,libertine}\dtag
  \leftfillchoice{mathfont}{minion,garamondx,baskervaldx,baskerville,none} \\
  选择合适的数学字体,将会加载 \pkg*{newtxmath} 和 \pkg*{bm} 宏包。使用选项 \code{none} 时可以使用 \pkg*{unicode-math} 等其它数学字体宏包定义字体。
\end{options}

\subsection{\textsf{article} 模式}
\begin{options}
  \keychoice{class}{\fbox{book},article}
  使用 \easybook{} 文档类可以有两种模式,默认为 \cls*{book} 模式。选用 \code{article} 会变为 \code{oneside} 单面排版,同时使文档编号、结构等与标准 \cls*{article} 文档类的特性相似,可用于短篇幅的文章,不需要再使用 \cs*{chapter} 命令。此时\ref{subsec:directory command} 中目录命令的 \option{chapter} 选项会失效,将以 \code{section} 标题级别输出目录。如果使用 \cls*{ctexart} 配合 \pkg*{easybase} 宏包,则选项值 \code{book} 会失效。
  \opt{book}
  开启 \cls*{book} 书籍模式,与 \keyis*{class}{book} 等效。
  \opt{article}
  开启 \cls*{article} 文章模式,与 \keyis*{class}{article} 等效。
\end{options}

\section{接口选项}
\label{sec:interface options}
\begin{commands}
  \command*{ctexset}[\oarg{模块名}\marg{键值列表}]
  \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs*{ctexset},接口选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如\ref{table:module List} 所示。
  \begin{longtblr}
  [caption = 模块功能和名称清单,label = table:module List]
  {
  hline{3}  = {0.5pt,DarkBlue},
  row{1,3}  = {font = \sffamily},
  row{2,4}  = {cmd = \module*}
  }
  \hyperref[subsec:tools]{工具} & \hyperref[subsec:font]{部件字体} & \hyperref[subsec:spread]{行距} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{参考文献} \\
  tools & font & spread & ref & bib \\
  \hyperref[subsec:theorem]{定理} & \hyperref[subsec:page margins]{页面尺寸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:catalog]{目录} & \\
  thmt & geo & hdr & toc &
  \end{longtblr}

  \ref{exam:kv setting} 使用\ref{subsec:tools} 介绍的工具模块 \module*{tools} 举例三种键值列表设置方式:1. 各 \meta{模块名} 是统一接口 \cs*{ctexset} 的键路径。2. 不同模块还具有单独的接口命令 \cs*{eb}\meta{模块名}\code{\textcolor{cs}{set}}。3. \meta{模块名} 也可以使用  \cs*{ctexset} 命令的可选参数设置。路径名与所属下级选项之间可以 \code{/} 或 \code{=} 号分开,斜线 \code{/} 后不能有空格或者换行。
  \begin{ctexexam}[labelref = exam:kv setting]
  \ctexset
    {
      tools/color     = seaside,
      tools           =
        {
          fntnumwith  = page,
          uppercase   = first
        }
    }
  \ctexset[tools]{spcmd = \color{red}}
  \ebtoolsset{hyphen-figure = {-}}
  \end{ctexexam}

  \easybook{} 文档类有三种选项:布尔型 \choicekey*{key}{true,false},选项的值为真 \code{true} 或假 \code{false},如果不指定默认为真。键值型 \key*{key}{value} 需要为选项指定值,后面 \code{=} 号不能省略。选择型 \choicekey*{key}{one,\fbox{two},three} 根据提供的可选值进行设定。
\end{commands}

\subsection[工具]{工具\smodule{tools}}
\label{subsec:tools}
\begin{options}
  \keychoice{color}{\fbox{none},seaside,energy,cyberpunk}
  \easybook{} 预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。
  \begin{commands}
  \command{DeclareThemeColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
  声明新的颜色主题命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成主题颜色列表。其中 \meta{颜色1} 为标题标签,\meta{颜色2} 为列表编号、定理标签和公式编号括号,\meta{颜色3} 为代码抄录。类似地更改超链接颜色见\ref{subsec:hyperlinks}。
  \begin{ctexexam}
  \DeclareThemeColor{fancy,2acb25,60aacc,ebc01c}
  \ctexset{tools/color = fancy}
  \end{ctexexam}
  \end{commands}
  \keyval{color-every}{HTML颜色代码}
  统一设置主题的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。
  \keyval{multoc}{整数}\Default{2}
  设置目录的排版栏数,与\ref{subsec:directory command} 中目录命令的同名选项有相同效果。
  \keychoice{withpart}{true,\fbox{false}}
  使章标题跟随部分计数器编号,仅在导言区有效。当开启新的部分标题时章编号从1开始。
  \keychoice{fntnumwith}{part,\fbox{chapter},page}
  设置脚注跟随编号的计数器,仅在导言区有效。默认跟随章计数器,即开启新的章标题时脚注编号从1开始。
  \keychoice{uppercase}{\fbox{all},first,none,none*}
  使用 \cs{rightmark} 和 \cs{leftmark} 等标题标记命令获取标题内容用于页眉页脚时其中英文的大小写类型。\code{all} 为标题标记中的英文字母全部大写。\code{first} 为标记以英文起始时仅第一个字母大写。\code{none} 不改变标记中英文字母的大小写形式,变体 \code{none*} 则强制标记的字母均为小写形式。
  \kvsplit{tagform}{左括号,右括号}\Default{\Marg{(,)}}\newtag[Chg]%
  设置行间公式标签的括号及格式,以英文逗号分隔,分别代表左右括号。\meta{左括号} 的末尾可以是带有一个参数的命令,用于接受公式编号。将标签括号设置为方括号,并给编号使用无衬线字体:
  \begin{ctexexam}
  \newcommand{\bracketsf}[1]{[\textsf{#1}}
  \ebtoolsset{tagform = {\bracketsf,]}}
  \end{ctexexam}
  \kvsplit-{figurepath}{\marg{路径名1}\marg{路径名2}$\cdots$\marg{路径名n}}
  设置插入图片的文件夹路径名。可以有多个路径名,每个路径包含在花括号内分隔,只有一个路径时需要包含在两层括号内。
\end{options}

\subsubsection{连字符}
\begin{options}
  \keyval{hyphen-figure}{图片连字符}\Default{\Marg{.}}
  设置图片题注编号的连字符。
  \keyval{hyphen-table}{表格连字符}\Default{\Marg{.}}
  设置表格题注编号的连字符。
  \keyval{hyphen-listing}{代码连字符}\Default{\Marg{.}}
  设置代码题注编号的连字符。
  \keyval{hyphen-equation}{公式连字符}\Default{\Marg{.}}
  设置公式题注编号的连字符。
  \keyval{hyphen-every}{连字符}\Default{\Marg{.}}
  统一设置上述所有编号的连字符。
\end{options}

\subsubsection{上下标全局设置}
\label{subsubsec:super-sub-script}
\begin{options}
  \keyval{spvmove}{刚性长度}\Default{0pt}
  上标命令 \cs{super} 对应的上标垂直偏移量。
  \keyval{sphmove}{刚性长度}\Default{0pt}
  上标命令 \cs{super} 对应的上标水平偏移量。
  \keyval{sbvmove}{刚性长度}\Default{0pt}
  下标命令 \cs{sub} 对应的下标垂直偏移量。
  \keyval{sbhmove}{刚性长度}\Default{0pt}
  下标命令 \cs{sub} 对应的下标水平偏移量。
  \opt{nohmove}
  同时取消上标和下标的 \meta{水平偏移},与 \keyis{sphmove}{0pt} 和 \keyis{sbhmove}{0pt} 等效。
  \opt{novmove}
  同时取消上标和下标的 \meta{垂直偏移},与 \keyis{spvmove}{0pt} 和 \keyis{sbvmove}{0pt} 等效。
  \keyval{spcmd}{格式命令}
  上标命令 \cs{super} 对应的上标的格式命令。
  \keyval{sbcmd}{格式命令}
  下标命令 \cs{sub} 对应的下标的格式命令。
  \keyval{spbhmove}{刚性长度}\Default{0pt}
  上下标命令 \cs{supersub} 对应的上下标共同水平偏移量。
  \kvsplit{spbcmd}{上标格式,下标格式}
  上下标命令 \cs{supersub} 对应的上下标格式命令。以英文逗号分隔为前后两个部分分别设置上下标格式,也可以只有前部分,表示上标的格式。
  \kvsplit{vsep}{上标偏移,下标偏移}\Default{0.6ex}
  上下标命令 \cs{supersub} 对应的上下标额外垂直距离。前部分为上标的偏移量,后部分为下标的偏移量。如果只有前部分则上下标各自垂直移动当前值的一半。
  \keychoice{halign}{\fbox{l},c,r}
  上下标命令 \cs{supersub} 对应的上下标水平对齐方式,有左 \code{l}、居中 \code{c} 和右 \code{r} 三种对齐方式。
\end{options}

\subsection[超链接]{超链接\smodule{ref}}
\label{subsec:hyperlinks}
模块 \module*{ref} 将超链接选项交给 \pkg*{hyperref} 宏包处理。除了一些超链接颜色的选项失效,其它由宏包全局和接口命令 \cs*{hypersetup} 支持的多数选项可用。
\begin{options}
  \keychoice{linktype}{\fbox{edge},colors,none}
  超链接类型。\code{edge} 使超链接形式为边框,\code{colors} 使超链接字体为彩色,\code{none} 关闭超链接边框与颜色,此时 \option{linkcolor} 选项无效。
  \keychoice{linkcolor}{fresh,cutepink,\fbox{navyblue},crimson}
  当超链接类型为 \code{colors} 时文本的颜色样式。预置了四种超链接颜色风格,默认为海军蓝 \code{navyblue}。
  \begin{commands}
  \command{DeclareLinkColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
  声明新的超链接颜色样式命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成超链接颜色列表。其中 \meta{颜色1} 为普通链接,\meta{颜色2} 为网址,\meta{颜色3} 为参考文献引用。
  \end{commands}
  \keyval{linkcolor-every}{HTML颜色代码}
  统一设置超链接的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。
  \keychoice{linktoc}{none,section,page,\fbox{all}}
  将目录中的超链接取消、置于标题上、置于页码上或置于标题和页码上。
\end{options}

\subsection[行距]{行距\smodule{spread}}
\label{subsec:spread}
行距因子用于设置各种行距倍数,\meta{数值} 是不带有长度单位的浮点数。各类行距既可以在导言区全局设置,也可以在正文中设置对后面生效。
\begin{options}
  \keyval{line}{数值}
  正文行距因子。行距因子初始值为 \code{1.354}(相当于 \textsf{Word} 的1.25倍行距),如果设置了文类或 \pkg*{ctex} 宏包的全局行距选项 \option*{linespread} 则初始值设为它的值。
  \keyval{table}{数值}\Default{1.354}
  表格内容行距因子,对传统表格 \env{tabular} 和 \env{tabularx} 等环境生效。\pkg*{tabularray} 宏包的 \env{tblr} 环境自带 \option*{stretch} 和 \option*{rowsep} 等行间距选项,这里不做调整。
  \keyval{math}{数值}\Default{1.2}
  数学环境的行距因子,包含了 \pkg*{amsmath} 和 \pkg*{mathtools} 宏包提供的公式环境。
  \keyval{caption-figure}{数值}\Default{1.2}
  图片题注的行距因子。
  \keyval{caption-table}{数值}\Default{1.2}
  表格题注的行距因子。
  \keyval{caption-listing}{数值}\Default{1.2}
  代码题注的行距因子。
  \keyval{caption-every}{数值}\Default{1.2}
  同时设置图片、表格和代码题注的行距因子。
  \keyval{footnote}{数值}\Default{1.2}
  脚注内容整体的行距因子。可以使用 \module*{hdr} 模块 \option{fnpara-format} 选项的代码单独覆盖每个脚注的行距,从而使脚注间和内容文本自身的行距不同。
  \begin{ctexexam}
  \ebspreadset{footnote = 1.3}
  \ebhdrset{fnpara-format = \linespread{1.2}\selectfont}
  \end{ctexexam}
  \keyval{every}{数值}
  统一设置上述所有的行距因子。
  \keyval{abovedisplayskip}{弹性长度}\Default{0.5ex plus .1ex minus .1ex}\newtag%
  行间公式与上面正文间的额外距离。
  \keyval{belowdisplayskip}{弹性长度}\Default{0.5ex plus .1ex minus .1ex}\newtag%
  行间公式与下面正文间的额外距离。
\end{options}

\subsection[部件字体]{部件字体\smodule{font}}
\label{subsec:font}
\begin{options}
  \keyval{caption-table}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
  设置表格题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
  \keyval{caption-figure}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
  设置图片题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
  \keyval{caption-listing}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
  设置代码题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
  \keyval{caption-every}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
  同时设置图片、表格和代码题注的字体命令。
  \keyval{footnote}{字体命令}
  设置脚注标记与内容的字体,包括字体族、字体系列和字体形状命令。
  \keyval{marginpar}{字体命令}\Default{\cs*{footnotesize}}
  设置边注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
\end{options}

\begin{commands}
  \command{ebaddtofont}[\marg{字体类型}\marg{字体命令}]
  用于在上述各种字体原有的格式上附加代码。其中 \meta{字体命令} 也可以包括行距命令且相对于 \module*{spread} 模块具有优先性,不同题注的 \meta{字体类型} 则为相应选项的后缀名。
  \begin{ctexexam}
  \ebaddtofont{every}{\linespread{1.5}\selectfont}
  \ebaddtofont{footnote}{\sffamily}
  \end{ctexexam}
\end{commands}

\subsection[参考文献]{参考文献\smodule{bib}}
\label{subsec:reference}
\begin{options}
  \keychoice{backend}{\fbox{bibtex},biblatex}
  参考文献处理后端。默认用传统的 \hologo{BibTeX} 处理参考文献\footnote{使用 \hologo{BibTeX} 引擎时加载 \pkg*{natbib} 宏包,使用 \hologo{biber} 时将加载 \pkg*{biblatex} 宏包。}。
  \keychoice{bibstyle}{\fbox{numerical},authoryear,\textcolor{SlateGray}{other sty}}
  参考文献格式使用中国参考文献推荐标准GB/T 7714-2015,对应顺序编码制和著者—出版年制两种风格。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \code{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg*{biblatex} 宏包支持的参考文献风格名称。
  \keyval{citestyle}{标注风格}
  标注参考文献的风格。后端为 \hologo{BibTeX} 时可使用 \option{super}(数字上标标注,默认)或 \option{numbers}(数字标注)等 \pkg*{natbib} 宏包带有的标注风格,后端为 \hologo{biber} 时可使用 \pkg*{biblatex} 宏包支持的标注风格。
  \keyval{datafile}{数据库列表}
  参考文献数据库的文件名列表,文件列表以花括号包裹并以英文逗号分隔。使用 \hologo{biber} 处理时文件名要带 \code{bib} 扩展名,若参考文献文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.bib}。不设置参考文献数据库名时 \module*{bib} 模块中的选项会失效,即不自动载入 \pkg*{natbib} 或 \pkg*{biblatex} 宏包,此时需要手动载入相关宏包配置参考文献。
\end{options}

\begin{commands}
  \command{printbibliography}[\oarg{键值列表}]
  两种方式\textbf{均使用}此命令打印参考文献,不同处理后端此命令的 \meta{键值列表} 不同。使用 \hologo{BibTeX} 处理时选项与\ref{subsec:directory command} 目录命令的选项相同,使用 \hologo{biber} 处理时常用的选项如下:
\end{commands}

\begin{options}
  \keychoice*{heading}{bibliography,subbibliography,\fbox{bibintoc},subbibintoc}
  参考文献通常有一个章标题或者节标题,该选项选择由 \cs{defbibheading} 定义的标题名。
  \keyval{title}{参考文献标题名}
  如果标题定义支持的话,该选项覆盖由 \option*{heading} 选项提供的缺省标题名。
  \keyval{prenote}{参考文献前注}
  该选项选择由 \cs{defbibnote} 所定义的前注,缺省状态下不打印任何前注。
  \keyval{section}{整数}\Default{0}
  只打印在指定文节中引用的条目。该参考文献节从1开始编号,所有在 \env*{refsection} 环境外给出的引用标记为第零节。
  \keyval{type}{条目类型}
  指定条目的打印类型。
  \keyval{filter}{过滤器名}
  使用由 \cs{defbibfilter} 定义的 \option*{filter} 来过滤条目。

  可能在一些情况下您希望更加灵活地设置参考文献或有更多需求,下面举一个在导言区手动配置 \pkg*{biblatex} 宏包并使一个条目输出双语对照格式文献的例子:
  \begin{ctexexam}
  \usepackage[style = gb7714-2015]{biblatex}
  \addbibresource{reference.bib}
  \defbibheading{bibliography}[参考文献] % 定义参考文献标题
    {\chapter*{#1}\markboth{#1}{#1}}
  \defbibentryset{Zhang2022}{张三2022,ZhangSan2022}
  \cite{Zhang2022} % 在正文中引用
  \end{ctexexam}
\end{options}

\subsection[定理]{定理\smodule{thmt}}
\label{subsec:theorem}
定理模块 \module*{thmt} 由 \pkg*{thmtools} 宏包提供支持,主要提供了定理环境和样式声明两个命令。定理环境声明命令 \cs{declaretheorem} 使用的定理样式由样式声明命令 \cs{declaretheoremstyle} 提供,文档类预置了一个定理样式 \code{default},但未定义任何定理环境。
\begin{commands}
  \command{declaretheorem}[\oarg{键值列表1}\marg{环境名}\oarg{键值列表2}]
  定理环境声明命令。可选参数的 \meta{键值列表1} 与 \meta{键值列表2} 等效,其中常用的选项如下:
  \begin{options}
  \keyval{name}{定理名}
  定理环境的标题名称,默认为英文首字母大写的环境名。
  \keychoice{numbered}{no,yes,unless unique}
  定理可以被编号、不被编号或者只有在文档中多次出现时才被编号。
  \keychoice{within}{chapter,section,empty,\textcolor{SlateGray}{counter}}
  定理编号跟随的计数器。当计数器值递增时定理编号会从零开始,通常这是一个章节计数器。
  \keyval{numberlike}{计数器}
  定理将使用此 \meta{计数器} 进行编号,通常这是另一个定理环境的名称。
  \keyval{qed}{证毕符号}
  证毕符号。位于定理段落末尾行的版心右边,可以设置成 \cs{qedsymbol} 默认是空心方块。
  \keyval{style}{定理样式}
  选项的值为使用 \cs{declaretheoremstyle} 命令新定义的定理样式。

  使用 \cs{declaretheorem} 命令以\ref{exam:new theorem sty} 中的定理样式 \code{fancy} 新建一个定理环境猜想,然后用一个基于 \pkg*{tcolorbox} 宏包的预置彩色盒子 \env{easyboxi} 增加背景:
  \begin{ctexexam}[labelref = exam:new theorem env]
  \declaretheorem[style = fancy,name = 猜想]{caixiang}
  \addtotcbstyle{tc-easyboxi}{colback = GreenYellow}
  \tcolorboxenvironment{caixiang}{tc-easyboxi}
  \end{ctexexam}
  \end{options}
  \command{declaretheoremstyle}[\oarg{键值列表1}\marg{定理样式}\oarg{键值列表2}]
  定理样式声明命令,键值列表支持自身以及定理声明命令 \cs{declaretheorem} 的所有选项。可选参数的 \meta{键值列表1} 与 \meta{键值列表2} 等效,其中支持的选项如下:
  \begin{options}
  \keyval{headfont}{字体命令}
  定理标题部分的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
  \keyval{notefont}{字体命令}
  定理题注部分的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
  \keyval{bodyfont}{字体命令}
  定理内容部分的字体,包括字体族、字体系列、字体尺寸和字体形状命令。
  \keyval{headpunct}{代码}
  紧随定理标题末尾的标记代码,位于定理第一段内容的间距 \option{postheadspace} 之前,可以是字符或插入换行符 \cs*{newline} 等命令。
  \keyval{headindent}{刚性长度}
  定理标题的缩进。默认无缩进,可用 \cs*{parindent} 命令设置为段落缩进。
  \keyval{postheadspace}{刚性长度}
  定理标题后与定理第一段内容的间距。
  \keyval{spaceabove}{弹性长度}
  定理环境前的间距,使用 \pkg*{tcolorbox} 的盒子环境包装后被覆盖。
  \keyval{spacebelow}{弹性长度}
  定理环境后的间距,使用 \pkg*{tcolorbox} 的盒子环境包装后被覆盖。
  \kvsplit-{notebraces}{\marg{左括号}\marg{右括号}}
  设置定理题注两边的括号,两个必选参数分别代表左括号和右括号。
  \keyval{headformat}{标题排列}
  定理标题各组成元素的位置排列和格式。定理标题由定理名、编号和题注组成,\meta{标题排列} 中命令 \cs*{NAME}、\cs*{NUMBER} 和 \cs*{NOTE} 分别代表定理名、编号和题注。
  \end{options}
  \command{theoremstyle}[\marg{定理样式}]
  设置其后由 \cs{declaretheorem} 命令声明的定理环境的样式。

  下面定义一个名为 \code{fancy} 的定理样式用于 \cs{declaretheorem} 的 \option*{style} 选项:
  \begin{ctexexam}[labelref = exam:new theorem sty]
  \declaretheoremstyle{fancy}[
    within      = chapter,
    spaceabove  = 6pt,
    spacebelow  = 6pt,
    headfont    = \normalfont\bfseries,
    notefont    = \sffamily,
    notebraces  = {[}{]},
    bodyfont    = \itshape
    ]
  \end{ctexexam}
\end{commands}

\begin{commands}\noitemsep
  \command{listoftheorems}[\sarg\oarg{键值列表}]\default{}
  \item\key{listoftheorems}{定理目录标题名}
  \command{settheoremtocline}[\sarg\marg{环境名}\marg{标题定义}]\newtagv{2024bb}%
  对 \pkg*{thmtools} 宏包的定理环境目录命令 \cs{listoftheorems} 进行了适配调整,\ref{subsec:directory command} 和\ref{subsec:catalog} 中的选项机制均可用,但标题定义选项 \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令单独设置。在 \meta{标题定义} 中有三个命令 \cs{thmtname}、\cs{thmtenvname} 和 \cs{thmtnote} 分别代表定理名、定理环境名和题注用于排版目录条目。
\end{commands}

\begin{commands}
  \optpath{thmt/}\key{loeskip}{弹性长度}\Default{10pt}
  定理目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
  \command{thmtifnote}[\marg{存在题注代码}\marg{不存在题注代码}]
  如果标题没题注即定理环境不用可选参数,则标题不加入定理目录,这是默认且合理的行为。若需要将无题注的标题加入目录可将 \meta{环境名} 加入目录风格的 \option{show} 选项或使用 \cs*{settheoremtocline}\code{*} 命令。是否存在题注需要在 \meta{标题定义} 中使用 \cs{thmtifnote} 命令判定,从而输出不同的内容。
  \command{thmtifname}[\marg{存在编号代码}\marg{不存在编号代码}]
  在 \meta{标题定义} 中测试当前定理是否有编号从而输出不同的内容,定理风格选项 \keyis{numbered}{no} 设置当前定理环境没有编号。
  \begin{ctexexam}
  \contentsuse{caixiang}{loe}
  \RegisterTocName{caixiang}
  \setlisttheoremstyle{ignoreall,show = caixiang}
  \settheoremtocline{caixiang}
    {%
      \listnumberline{caixiang}
      \thmtname\thmtifnote{[\thmtnote]}{}
    }
  \end{ctexexam}
\end{commands}

\subsection[页面尺寸]{页面尺寸\smodule{geo}}
\label{subsec:page margins}
模块 \module*{geo} 会将选项(除了前两个为附加)交给页面尺寸宏包 \pkg*{geometry} 处理,并且支持它的键值列表,预置的页面尺寸与 \textsf{Word} 的默认值接近。下面列举几种代表性选项,其它选项可查阅宏包帮助文档。当在此设置纸张规格时,会覆盖文类选项 \option{paper} 的设置。
\begin{options}\noitemsep
  \keyval{headruleskip}{页眉线间距}\Default*{0pt}
  \keyval{footruleskip}{页脚线间距}\Default*{3.5pt}
  \kvsplit{hdivide}{左边距,版心文本宽度,右边距}\default{}
  \kvsplit{hmargin}{左边距,右边距}\default{}
  \keyval{textheight}{版心文本高度}\default{}
  \keychoice{nofoot}{true,\fbox{false}}\default{}
  \begin{ctexexam}
  \ebgeoset
    {
      headruleskip  = 3pt,
      vscale        = 0.9,
      hdivide       = {2cm,15cm,*},
      vcentering
    }
  \end{ctexexam}
\end{options}

\subsection[页眉页脚]{页眉页脚\smodule{hdr}}
\label{subsec:header and footer}
模块 \module*{hdr} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chap-mark} 和 \option{sec-mark},在 \cls*{article} 模式时使用 \option{sec-mark} 和 \option{subsec-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。
\begin{options}
  \keyval{chap-mark}{标题标记}
  \code{chapter} 级别标题标记的内容,包含了标签选项 \option{chap-label} 和章标题 \code{\#1}。
  \keyval{sec-mark}{标题标记}
  \code{section} 级别标题标记的内容,包含了标签选项 \option{sec-label} 和节标题 \code{\#1}。
  \keyval{subsec-mark}{标题标记}
  \code{subsection} 级别标题标记的内容,包含了标签选项 \option{subsec-label} 和小节标题 \code{\#1}。
  \kvsplit-{chap-label}{\oarg{编号输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{1em}}
  \code{chapter} 级别标题标记的标签(标题有编号时)。比标题标记选项更常用,可选参数是对应章编号计数器值的输出命令,必选参数是编号与标题之间的距离命令:
  \begin{ctexexam}
  \ebhdrset
    {
      chap-label  = [\thechapter]{\hspace{1em}},
      sec-mark    = \CTEXifname{\CTEXthesection——}{}#1
    }
  \end{ctexexam}
  \kvsplit-{sec-label}{\oarg{编号输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{0.5em}}
  \code{section} 级别标题标记的标签,用法与 \option{chap-label} 类似。
  \kvsplit-{subsec-label}{\oarg{编号输出命令}\marg{距离命令}}\Default{\cs*{hspace}\Marg{0.5em}}
  \code{subsection} 级别标题标记的标签,用法与 \option{chap-label} 类似。
  \keyval{headrule}{横线命令}
  绘制页眉横线的选项,可以使用 \cs*{hrule} 或下述 \cs{markrule} 等画线命令来绘制横线。
  \keyval{footrule}{横线命令}
  绘制页脚横线的选项,可以使用 \cs*{hrule} 或下述 \cs{markrule} 等画线命令来绘制横线。
  \keyval{footnoterule}{横线命令}
  绘制脚注横线的选项,可以使用 \cs*{hrule} 或下述 \cs{markrule} 等画线命令来绘制横线。
  \keyval{headrulewd}{刚性长度}\Default{0.5pt}
  页眉横线默认的粗细,使用 \option{headrule} 选项绘制横线后失效。
  \keyval{footnoterulewd}{刚性长度}\Default{0.5pt}
  脚注横线默认的粗细,使用 \option{footnoterule} 选项绘制横线后失效。
\end{options}

\begin{commands}\noitemsep
  \command{fancyhead}[\marg{风格名}\oarg{基础风格}\marg{风格定义}]
  定义名为 \meta{风格名} 的页面风格。\meta{风格定义} 中可包含设置页眉页脚不同位置格式的命令,如果为空则等于 \code{fancy} 风格。如果存在 \meta{基础风格},则在它的基础上进行定义。
  \begin{ctexexam}
  \fancypagestyle{plain}
    {
      \fancyhf{}
      \fancyfoot[C]{\textbf{--~\thepage~--}}
      \ebhdrset{headrule = {}}
    }
  \end{ctexexam}
  \command{fancyhead}[\oarg{位置}\marg{内容}]\default{}
  \command{fancyfoot}[\oarg{位置}\marg{内容}]
  为了确保页面显示正确,使用 \cs{fancyhead} 和 \cs{fancyfoot} 等命令设置页眉页脚时需要在页边距的命令之后。默认设置的是一个名为 \code{fancy} 的页面风格。\pkg*{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中 \code{E} 和 \code{O} 代表偶数和奇数,\code{L}、\code{C} 和 \code{R} 代表左、中和右部分。单面打印时,含有偶数位置的命令无效。
\end{commands}

\begin{commands}\noitemsep
  \command{markboth}[\marg{左页标题标记}\marg{右页标题标记}]\default{}
  \command{markright}[\marg{右页标题标记}]\default{}
  \command{markdouble}[\marg{双页标题标记}]
  这三个命令用于手动设置当前页标题标记,特殊情况下可以使用它们定义与标题不同的页眉页脚标记。上述标记命令内容的选项便是基于这三个命令。其中 \cs{markdouble} 根据是否是双面打印设置相应标记。如果是单面打印,则 \meta{左页标题标记} 无效。
\end{commands}

\begin{commands}
  \command{markrule}[\oarg{长度}\darg{颜色名}\marg{线宽}\baroarg{上间距,下间距}]
  实线命令 \cs{markrule} 既可在 \meta{横线命令} 中用于绘制页眉页脚横线,也可以在正文中使用。\meta{长度} 默认为版心的宽度,上下间距为横线与上下方部件的间距,带有长度单位,上下间距之间用符号 \code{|} 分开,若只有一部分则表示 \meta{上间距}。下面举一个设置页眉内容的例子:
  \begin{ctexexam}
  \ebhdrset{headrule = \markrule(DarkOrchid){0.5pt}[2pt|2pt]}
  \fancyhead[ER]{\leftmark}
  \fancyhead[OL]{\rightmark}
  \fancyhead[EL,OR]{\textbf{\thepage}}
  \end{ctexexam}
\end{commands}

\subsection[脚注]{脚注\smodule{hdr}}
模块 \module*{hdr} 还可以灵活调整脚注编号和内容的格式。格式主要包括脚注标记的编号类型、字体、附加符号和对齐方式等,以及脚注内容的首行缩进、行距和字体等。基本思想是提供常规和自定义标记(\code{fncustom})两种脚注,常规脚注的标记分为正文(\code{fnmark})和内容(\code{fntext})标记两种,且两者编号类型分离,自定义脚注的标记与其共享格式。目前脚注模块基本兼容 \pkg*{footmisc} 宏包。
\begin{options}
  \keychoice{footnotetype}{plain,\fbox{hang},flush,bottom}
  脚注的类型。悬挂缩进 \code{hang} 是默认值,\code{plain} 是原始的类型,\code{flush} 使脚注内容标记位于脚注首行边缘外侧并右对齐。当存在浮动环境排版时,脚注可能位于页面中间,\code{bottom} 使脚注始终位于页面底端。其中 \code{bottom} 是复合选项,可以与前三种类型重复或复合使用:
  \begin{ctexexam}
  \ebhdrset{footnotetype = plain,footnotetype = bottom}
  \ebhdrset{footnotetype = {hang,bottom}}
  \end{ctexexam}
  \keyval{fnfirstindent}{刚性长度}\Default{1em}
  每个脚注首段的首行缩进(悬挂缩进 \code{hang} 为整段缩进),等于长度 \cs{fnfirstindent} 的值。
  \keyval{fnafterindent}{刚性长度}\Default{2em}
  每个脚注第二段及之后段落的首行缩进,等于长度 \cs{fnafterindent} 的值。
  \keyval{fnparskip}{弹性长度}\Default{0ex plus .1ex}
  不同脚注自身的段落间距,脚注内容文本分段时生效,等于长度 \cs{fnparskip} 的值。
  \keyval{footnotesep}{刚性长度}\newtag%
  不同脚注之间的距离,默认情况下它自适应 \module*{spread} 模块脚注行距选项 \option{footnote} 的值。
  \keychoice{fntext-pos}{normal,\fbox{super}}
  设置脚注内容标记的位置,正常文本或是上标形式。
  \keychoice{fnmark-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\textcolor{SlateGray}{short num}}
  脚注正文标记编号的类型。默认为原生样式 \code{plain},还可以改为 \code{pifont} 的各个版本,从左往右依次为普通版、阴文衬线版、阳文无衬线版和阴文无衬线版,缺点是它们的编号仅包括1-10。

  短编号的参数与列表环境类似,有 \code{1}、\code{A}、\code{a}、\code{I} 和 \code{i},除此之外还增加了中文数字 \code{c} 和符号 \code{s} 格式。原生样式 \code{plain} 等同于单独使用数字 \code{1} 参数。这个选项可以用在正文中改变其后脚注编号类型。
  \begin{commands}
  \command{footref}[\marg{脚注标签名}]
  在当前位置对自动编号的脚注进行引用,与被引用的正文标记共享一个编号与格式。
  \end{commands}
  \begin{ctexexam}
  \ebhdrset{fnmark-num = 1} % 等于编号类型plain
  \ebhdrset{fnmark-num = (a)}
  \end{ctexexam}
  \begin{commands}\noitemsep
  \command{SetFntSymbsList}[\marg{符号表名}\marg{符号数量}\marg{符号列表}]\default{}
  \command{UseFntSymbsList}[\marg{符号表名}]\newtag[Chg]%
  这两个命令用于在脚注短编号标记为 \code{s} 自定义符号型时设置符号列表。\cs{SetFntSymbsList} 命令用于定义名为 \meta{符号表名} 的符号列表,\cs{UseFntSymbsList} 命令用于启用已定义的符号列表。默认的脚注符号列表是空的,注意使用符号型标记的脚注时计数器 \code{footnote} 的值仍然递增,以及定义新列表时 \meta{符号列表} 的写法和命令顺序:
  \begin{ctexexam}
  \SetFntSymbsList{fancy}{2}{{1}{*}{2}{\P}}
  \UseFntSymbsList{fancy}
  \ebhdrset{fnmark-num = s}
  \end{ctexexam}
  \end{commands}
  \keychoice{fntext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\textcolor{SlateGray}{short num}}
  脚注内容标记编号的类型。用法与 \option{fnmark-num} 一样,所以脚注内容与正文标记编号类型\textbf{可以不同}。
  \keychoice{fnmarktext-num}{\fbox{plain},pifont,pifont*,pisans,pisans*,\textcolor{SlateGray}{short num}}
  同时设定脚注正文标记编号 \option{fnmark-num} 与脚注内容标记编号 \option{fntext-num} 的类型。目前脚注编号类型选项对于迷你页环境 \env*{minipage} 无效,其中的脚注保持默认英文字母的编号类型。
  \keychoice{fnmark-vmove}{\textcolor{SlateGray}{fixed length},match}\Default{0pt}
  脚注正文标记的垂直偏移。可以设为刚性长度,或用 \code{match} 匹配 \option{spvmove} 全局的值。
  \keychoice{fnmark-hmove}{\textcolor{SlateGray}{fixed length},match}\Default{0pt}
  脚注正文标记的水平偏移。可以设为刚性长度,或用 \code{match} 匹配 \option{sphmove} 全局的值。
  \keychoice{fntext-vmove}{\textcolor{SlateGray}{fixed length},match}\Default{0pt}
  脚注内容标记的垂直偏移。可以设为刚性长度,或用 \code{match} 匹配 \option{spvmove} 全局的值。
  \keychoice{fnmarktext-format}{\textcolor{SlateGray}{format code},match}
  默认脚注标记的格式,选项 \code{match} 可以匹配 \option{spcmd} 全局的值。一般配合 \keyis{fnmarktext-num}{plain} 原生编号形式使用,例如用 \pkg*{circledtext} 宏包的带圈字符命令 \cs{circledtext} 给脚注标记添加圆圈:
  \begin{ctexexam}
  \usepackage{circledtext}
  \circledtextset{resize = real,width = 0.5em}
  \ebhdrset
    {
      fntext-pos        = normal,
      fnmarktext-format = \circledtext
    }
  \end{ctexexam}
  \begin{commands}
  \command{defupfntmark}[\marg{脚注正文标记格式}]
  定义脚注正文标记的格式,与正文标记编号命令 \cs{theupfootnote} 配合使用。
  \command{defdownfntmark}[\marg{脚注内容标记格式}]
  定义脚注内容标记的格式,与内容标记编号命令 \cs{thedownfootnote} 配合使用。
  \command{deffntpara}[\marg{脚注段落文本格式}]\newtag%
  定义脚注段落文本的格式的命令。脚注段落文本由脚注内容标记和文本两部分组成,段落格式定义中参数 \code{\#1} 代表内容文本。
  \command{notminipage}[\marg{普通页内容}\marg{迷你页内容}]
  用于在定义脚注标记的命令中判断当前脚注是否处于迷你页而输出不同的内容。
  \command{theupfootnote}
  保存正文标记编号类型选项 \option{fnmark-num} 指定的正文标记。
  \command{thedownfootnote}
  保存内容标记编号类型选项 \option{fntext-num} 指定的内容标记。
  \end{commands}
  \begin{ctexexam}
  \defupfntmark{\super[vmove = 2pt]{\theupfootnote}}
  \defdownfntmark{\notminipage{\textcolor{blue}{\thedownfootnote}}{}}
  \deffntpara{\makebox[2em][r]{\thefootnote}#1}
  \end{ctexexam}
  \keychoice{fncustom-format}{\textcolor{SlateGray}{format code},match}
  单独设定自定义脚注标记的格式,选项 \code{match} 可以匹配 \option{spcmd} 全局的值。自定义脚注内容和正文标记的命令与用法可以见下方和\ref{exam:custom footnote markers} 的介绍。
  \begin{commands}\noitemsep
  \command{Footnote}[\oarg{内容标记}\marg{正文标记}\marg{脚注文本}]\default{}
  \command{Footnotetext}[\marg{内容标记}\marg{脚注文本}]\default{}
  \command{Footnotemark}[\marg{正文标记}]
  这些是自定义标记且不影响正常编号的脚注命令,用法与它们对应首字母小写的命令类似。\meta{内容标记} 默认与 \meta{正文标记} 一致,这也是最常见的情况,也可以定义为不同符号或格式。如果当前标记为空,那么将会使用上一个脚注标记。
  \begin{ctexexam}[labelref = exam:custom footnote markers]
  \Footnote{*}{这是可以自定义标记的脚注。}
  \end{ctexexam}
  \end{commands}
  \keychoice{fnboth-format}{\textcolor{SlateGray}{format code},match}
  同时设定默认脚注标记 \option{fnmarktext-format} 和自定义脚注标记 \option{fncustom-format} 的格式。两种脚注标记匹配上标格式 \option{spcmd} 的值是独立的,使用 \code{match} 则可以同时匹配。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注标记。
  \keyval{fnpara-format}{格式代码}
  脚注内容文本的格式。会覆盖 \module*{font} 模块脚注字体选项 \option{footnote} 相同类型的命令,最后一个格式命令可以带有一个参数接受脚注内容文本。
  \kvsplit{fntext-code}{前代码,后代码}
  可以用 \meta{前代码} 与 \meta{后代码} 额外增加脚注内容标记前后的代码。也可以只有前部分,\meta{前代码} 中最后一个格式命令可以带有一个参数接受脚注内容标记。由于脚注标记处于水平模式,可以配合盒子命令设置脚注内容标记的对齐方式,或在标记与脚注首行间插入一点距离。
  \begin{ctexexam}
  \ebhdrset
    {
      footnotetype  = hang,
      fntext-code   = {\hspace{1em}\llap,\enskip}
    }
  \end{ctexexam}
\end{options}

\subsection[目录]{目录\smodule{toc}}
\label{subsec:catalog}
模块 \module*{toc} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}、\module*{chapter}、\module*{section}、\module*{subsection}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径,而使用 \module*{float} 路径可以统一设置图片、表格和代码目录的样式。选项前带有 \ding{73} 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{toc} 键路径下。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。
\begin{options}
  \keyval{tocformat}{条目格式}\dtag
  目录中各类型条目的格式。可以设置条目字体和加入垂直间距等,垂直间距最好使用防止垂直间距重合的 \cs*{addvspace} 命令。如果是段落型目录,格式代码仅在段落中当前级别条目前执行一次。
  \keyval{tocformat+}{条目格式}\dtag
  与选项 \option{tocformat} 用法一样,只是在已有的格式命令后附加代码。
  \keyval{tocformat*}{条目格式}\dtag
  没有编号/名字标题的附加格式代码。目录中判断标题是否有编号/名字的依据为:如果在 \option{tocline} 选项中使用了 \cs{numberline} 命令输出标签,则判定为有编号/名字。格式最后的命令可带有一个参数,用于接受标题内容。
  \keyval{tocindent}{刚性长度}\dtag
  目录条目左边的缩进距离,通常标题级别越低缩进越大。如果是段落型目录,仅在当前条目级别为段落中最高时有效。
  \keyval{tocrule}{引导线命令}\dtag
  目录条目的引导线和页码。引导线可以使用基于 \cs*{xleaders} 命令的 \cs{tocrule} 绘制(同时输出页码),如果是一般不需要引导线的段落型目录,可以使用 \cs{thecontentspage} 命令输出页码。
  \begin{commands}
  \command{tocrule}[\sarg\harg\oarg{引导点间距}\darg{放大因子}\marg{引导点}\oarg{页码格式}]
  生成目录引导线的命令,需要在引导线选项 \option{tocrule} 中使用。带有星号的命令与 \keyis{dotalign}{false} 效果相同。命令带 \harg{} 号参数不输出目录页码,此时无格式的页码被保存在 \cs{thecontentspage} 命令中,可以配合盒子命令设置不同的页码左右间距和对齐方式。\meta{放大因子} 为 \meta{引导点} 的放大倍数。\meta{页码格式} 中最后一个命令可以带有一个参数用于接受页码。
  \end{commands}
  \keyval{toclabel}{标题标签定义}\dtag\newtagv{2024as}%
  目录中各类型条目标题标签的定义,可与 \option{tocline} 选项联用设置标题。其中参数 \code{\#1} 代表标签的编号 \cs{thecontentslabel},参数 \code{\#2} 代表 \meta{条目名}。定义最后的命令可带有一个参数,用于接受标题内容,一些特殊情况例如需要将标题内容放在标签后,可以通过定义命令实现:
  \begin{ctexexam}
  \newcommand{\seqentry}[2]{#2-#1} % #2为标题内容
  \ctexset{chapter/toclabel = \seqentry{#1}}
  \end{ctexexam}
  \keyval{tocafter}{距离命令}\dtag\Default{\cs*{hspace}\Marg{1em}}
  目录条目标签与标题间的代码,默认为插入 \code{1em} 横向距离。
  \keyval{tocbelow}{距离命令}\dtag
  在目录条目下方执行的代码,可以插入垂直距离等命令。
  \keyval{tocline}{标题定义}\dtag[\textcolor{red}{\ding{73}}]
  这个选项在章节标题基础上扩展了浮动环境的题注标题在目录文件中的定义。章节和题注标题选项中参数 \code{\#1} 代表标题编号 \cs*{the}\meta{计数器} 对应的计数器名称,参数 \code{\#2} 则代表相应标题内容。
  \begin{ctexexam}
  \ctexset
    {
      chapter           =
        {
          tocformat     = \addvspace{8pt}\large,
          tocindent     = 1.5em,
          tocrule       = \tocrule[0.6pc](1.1){.}[\zihao{5}],
          tocline       = \CTEXnumberline{#1}#2
        },
      section/toclabel  = \contentspush{#1\hspace{0.5em}},
      section/tocrule   = \tocrule-{}\makebox[1cm]{\rlap{\thecontentspage}}
    }
  \end{ctexexam}
\end{options}

\begin{commands}
  \command{RegisterTocName}[\sarg\marg{条目名}]\newtagv[Changed]{2024as}%
  给条目类型名称为 \meta{条目名} 的标题注册用于设置目录样式的选项,即选项前有符号 \ding{73} 表示需要注册后使用。前面提到的条目类型均已注册,新类型的条目注册后默认格式与图表条目相同。这个命令可以重复使用,会重置目录条目为默认格式。带有星号参数的命令使注册目录的条目形成一个段落,此时多出下面三个选项可用:
  \begin{options}
  \keyval{tocbegin}{开始代码}\dtag\newtagv{2024as}%
  当前级别目录条目第一个标题前的代码,仅在存在更高级别的条目时有效。
  \keyval{tocsep}{中间代码}\dtag\Default{\Marg{.—}}\newtagv{2024as}%
  当前级别目录条目每个标题之间的代码。
  \keyval{tocend}{结束代码}\dtag\Default{\Marg{.}}\newtagv{2024as}%
  当前级别目录条目最后一个标题后的代码。
  \end{options}
  \command{contentsuse}[\marg{条目名}\marg{扩展名}]
  激活条目类型名称为 \meta{条目名} 的目录定制功能,它使用的目录文件后缀为 \meta{扩展名}。需要在激活条目后再使用命令 \cs{RegisterTocName} 注册选项。
  \command{DeclareFloatList}[\marg{条目名}\marg{扩展名}]
  声明一种条目类型的目录命令 \cs*{listof}\meta{条目名}\code{\textcolor{cs}{s}},并且支持\ref{subsec:directory command} 中图表目录命令的机制。使用这个命令要确保将条目加入目录的机制已经存在,例如搭配 \pkg*{newfloat} 宏包创建新的浮动环境。选项前有红色符号 \textcolor{red}{\ding{73}}(仍包含黑色符号选项的性质)表示在声明后可用。下面举一个声明算法环境和对应题注目录的例子:
  \begin{ctexexam}
  \usepackage{newfloat}
  \DeclareFloatingEnvironment[
    fileext   = loa,
    listname  = 算法清单,
    name      = 算法
    ]{algorithm}
  \DeclareFloatList{algorithm}{loa}
  \listofalgorithms[multoc] % 在正文中输出双栏算法目录
  \end{ctexexam}
  \command{AllotCaptionExt}[\marg{条目名}\marg{扩展名}]
  给条目类型名称为 \meta{条目名} 的标题分配目录文件 \meta{扩展名},注意 \meta{扩展名} 需要被定义在 \cs*{ext@}\meta{条目名} 命令中才有效(\pkg*{caption} 宏包的默认定义形式)。可以使不同的 \meta{条目名} 共享一个目录:
  \begin{ctexexam}
  \AllotCaptionExt{table}{lof}
  \newcommand{\listoffiguretables}{\listoffigures} % 同时输出图表目录的命令
  \end{ctexexam}
  \command{SetTocStyle}[\marg{条目名}\marg{风格名}\marg{键值列表}]
  定义条目类型名称为 \meta{风格名} 的目录风格。使用 \cs*{ctexset} 命令设置目录样式时,除了条目标题定义选项 \option{tocline},其它选项只有在目录输出命令前设置才有效,定义完目录风格后用 \cs{UseTocStyle} 命令可以在正文中任意位置生效。如果是没有 \ding{73} 符号的选项,\meta{条目名} 设置为 \module*{toc}。
  \command{UseTocStyle}[\marg{条目名}\marg{风格名}\marg{扩展名}]
  使用对应条目类型名称为 \meta{风格名} 的目录风格,随后标题在目录中的格式会改变。本命令导言区和正文区均可使用,第三个必选参数还需要指定条目标题加入目录文件的 \meta{扩展名}。
  \begin{ctexexam}
  \SetTocStyle{chapter}{fancy}{tocformat = \color{red}\zihao{3}}
  \UseTocStyle{chapter}{fancy}{toc}
  \end{ctexexam}
  \command{listnumberline}[\marg{计数器名}]
  在图表等浮动环境的题注目录中插入条目标签,默认标签的名字可以由格式命令 \cs{labelformat} 设置。其中 \meta{计数器名} 一般与 \meta{条目名} 相同,可以用参数 \code{\#1} 指定或用对应计数器名称显式指定。
  \begin{ctexexam}
  \ctexset
    {
      lstlisting/tocline  = \listnumberline{#1}#2,
      figure/tocline      = \protect\numberline{图\thefigure\hspace{1em}}#2
    }
  \end{ctexexam}
  \command{contentsmargin}[\oarg{修正距离}\marg{右边距}]
  设置目录中引导线到版心右边的距离,用于条目页码的精细调整。当设计条目页码对齐方式或数字较大时,可以设置适当的 \meta{右边距}。\meta{修正距离} 是在过长而换行的标题右侧 \meta{右边距} 基础上附加的距离。此命令可在导言区全局使用或在 \option{tocformat} 选项给特定条目类型单独使用。
\end{commands}

\begin{options}
  \keychoice{hang}{\fbox{true},false}
  悬挂缩进选项 \option{hang} 使目录条目为悬挂缩进形式。缩进距离为条目标签及其与标题内容间距的长度和。通常情况下会统一设置条目标题是否悬挂缩进,因此这个选项被设计为对所有类型条目生效。
  \keyval{lolskip}{弹性长度}\Default{10pt}
  代码目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。
  \keyval{between}{代码钩子}\dtag[\textcolor{red}{\ding{73}}]
  目录标题与条目内容间的钩子(作用于标题下方间距之后),如果是 \cls*{book} 模式则默认插入 \code{-10pt} 垂直距离抵消首行目录的额外垂直间距,这是由于图表和 由 \pkg*{newfloat} 宏包所创建环境的目录默认每使用一次章标题在题注目录中插入 \code{10pt} 距离。除了条目名的键路径外,此选项也可用于 \module*{toc} 路径中,表示章节标题目录标题代码钩子,如果是 \cls*{book} 模式则默认插入 \code{-1pc} 垂直距离。
  \keyval{bibetween}{代码钩子}
  与选项 \option{between} 类似,是英文章节标题目录(如果启用)标题代码钩子。
  \keychoice{dotalign}{\fbox{true},false}
  引导线选项 \option{dotalign} 可以使目录引导线右端对齐并与页码保持一定间距,否则会与页码相连。
  \keyval{pagenumwd}{刚性长度}\Default{1.55em}
  目录条目页码的宽度。开启 \option{dotalign} 选项时宽度越大引导线与页码的距离就越大。
  \keyval{tocafter-every}{距离命令}\Default{\cs*{hspace}\Marg{1em}}
  统一设置所有类型条目编号与标题间的代码(仅支持上述预注册的条目)。
  \keyval{tocindent-every}{刚性长度}
  统一设置所有类型条目的左边缩进(仅支持上述预注册的条目)。
  \keyval{tocrule-every}{引导线命令}
  统一设置所有类型的目录引导线样式(仅支持上述预注册的条目)。
\end{options}

\section{环境和命令}

\subsection{文区命令}
\begin{commands}
  \command{frontmatter}[\sarg\oarg{编号格式}]\Default{Roman}
  前言区命令。使部分和章标题不编号,带有星号的变体命令不使用 \cs{cleardoublepage} 命令。页码 \meta{编号格式} 可设置为 \code{arabic}、\code{Alph}、\code{alph}、\code{Roman}、\code{roman} 和 \code{chinese} 形式。
  \command{mainmatter}[\sarg]
  主文区命令。章标题正常编号且页码为从1开始计数的阿拉伯数字,带有星号的变体命令不使用 \cs{cleardoublepage} 清双页命令。
  \command{backmatter}
  后记区命令。页码格式与编号保持不变,章标题不编号。
  \command{cleardoublepage}[\oarg{页面风格}]\Default{empty}
  清双页命令可以确保下一页文本总在奇数页开始,在奇数页使用它会产生空白偶数页。文区命令 \cs{frontmatter} 和 \cs{mainmatter} 会用到清双页命令,在启用文类选项 \option*{openright} 时标题命令 \cs*{part} 和 \cs*{chapter} 也会默认用到清双页命令。
  \command{blankpagestyle}[\marg{页面风格}]
  多出空白页的 \meta{页面风格} 用空白页面风格命令 \cs{blankpagestyle} 全局指定,或使用清双页命令的可选参数局部指定。空白页默认的风格为 \code{empty},即空的页眉页脚。
  \end{commands}

\subsection{目录命令}
\label{subsec:directory command}
\easybook{} 改进了标准文档类中定制性较低的章节标题和图表标题目录命令。现在目录命令带有可选参数用于设置标题格式和栏数等,并且与标准文档类不同的是目录命令可在正文中\textbf{重复}使用。更多目录命令的创建和样式设置可参考\ref{subsec:catalog}。
\begin{commands}
  \command{tableofcontents}[\sarg\oarg{键值列表}\darg{代码钩子}]
  章节标题目录命令,支持中英文双语标题目录输出。带有星号参数不输出目录条目上方的标题。\meta{代码钩子} 是当输出方案 \keyis{plan}{both} 时中文与英文目录之间执行的代码,可以插入设置目录样式和换页等命令。
  \begin{options}
  \keychoice{plan}{\fbox{cn},bi,both}\newtag[Exp]%
  章节标题目录的输出方案。\code{cn} 只输出中文目录,\code{bi} 只输出英文目录。\code{both} 同时连续输出中文和英文目录,需要与双语目录标题命令 \cs{bichapter} 等或双语标题选项 \option{title} 配合使用。
  \keyval{bicontentsname}{英文目录标题}\Default{Contents}
  英文目录的标题,为通用接口命令 \cs*{ctexset} 的选项。
  \end{options}
  \command{listoffigures}[\sarg\oarg{键值列表}]
  输出图片目录命令。带有星号参数的命令不输出目录标题。
  \command{listoftables}[\sarg\oarg{键值列表}]
  输出表格目录命令。带有星号参数的命令不输出目录标题。
  \command{listoflstlistings}[\sarg\oarg{键值列表}]
  输出代码目录命令。带有星号参数的命令不输出目录标题。

  如果需要部分而不是全文的目录或其它类型的目录,可以查看 \pkg*{titletoc} 宏包的相关示例。如果需要双语图表目录,可以查看 \pkg*{bicaption} 宏包的相关示例。上面目录命令的可选参数改进了原本单一的功能,也提供了配置命令 \cs{SetTocOuter} 在目录命令外设置选项默认值。
  \begin{commands}
  \command{SetTocOuter}[\marg{键值列表}]\newtag%
  统一设置上述所有目录可选参数的默认值\footnote{由于目录命令通常只在文中使用一次,因此不设计为可以分别指定不同目录的参数。},其中 \meta{键值列表} 的选项如下:
  \end{commands}
  \begin{options}
  \keyval{level}{标题命令}
  设定输出目录标题的命令。如果使用 \option{title} 选项设置了双语标题则需要配合双语标题命令。
  \begin{ctexexam}
  \tableofcontents[level = \chapter*]
  \listoffigures[level = \bichapter,title = {图片索引,List of Figures}]
  \end{ctexexam}
  \opt{chapter}
  设置目录标题级别为 \code{chapter},与 \keyis{level}{\cs{bichapter}*} 等效。
  \opt{section}
  设置目录标题级别为 \code{section},与 \keyis{level}{\cs{bisection}*} 等效。
  \opt{none}
  不输出目录标题,与带星号参数的目录命令等效。
  \keyval{multoc}{整数}\Default{2}
  设置目录的排版栏数。\meta{整数} 代表目录栏数,不指定栏数的值则默认为双栏。
  \kvsplit{title}{中文目录标题,英文目录标题}
  用于更改目录的双语标题。标题之间用一个英文逗号分开,对主目录来说前部分为中文目录标题,后部分为英文目录标题,对图表和代码目录来说后部分则是加入英文目录的条目。也可以只有一部分,表示中文目录的标题。
  \keychoice{bilist}{mix,\fbox{new}}
  确定章节标题目录中双语标题条目的输出排列方式。选项 \code{mix} 使每个英文标题条目在中文目录中跟随对应的中文标题输出,\code{new} 则在新建的英文目录中输出英文标题。这是个全局选项,在所有目录的可选参数中使用均可生效,但推荐在章节标题目录中使用。
  \begin{commands}
  \command{ebifbitoc}[\marg{英文目录代码}\marg{中文目录代码}]\newtag%
  启用混合双语目录条目即 \keyis{bilist}{mix} 时,在设置目录样式时可以配合 \cs{ebifbitoc} 命令判断当前条目是否为英文,从而输出不同的代码。
  \begin{ctexexam}
  \SetTocStyle{section}{fancy}
    {
      tocformat = \ebifbitoc{\color{red}}{\small},
      tocindent = \ebifbitoc{1em}{2em}
    }
  \UseTocStyle{section}{fancy}{toc}
  \tableofcontents[bilist = mix]
  \end{ctexexam}
  \end{commands}
  \keyval{format}{目录标题格式}
  设置目录标题的格式,在标题级别为 \code{chapter} 或者 \cls*{article} 模式且标题级别为 \code{section} 时有效。
  \keyval{aftername}{标签后代码}
  目录标题的标签与内容之间插入的代码,生效情形同上。
  \keyval{aftertitle}{标题后代码}
  目录标题内容之后插入的代码,生效情形同上。
  \keyval{break}{格式命令}
  控制章节标题与之前正文的分隔关系。一般用于设置是否在标题之前分页或者设置行间罚点,生效情形同上。
  \keyval{pagestyle}{页面风格}\Default{empty}
  目录标题所在页的页面格式,仅当目录以 \code{chapter} 级别输出时有效。除了上述选项还支持 \CTeX 键值列表路径 \module*{chapter} 或 \module*{section} 所有的章节标题样式选项。
  \end{options}
\end{commands}

\subsection{双语章节标题和新建标题}
双语目录标题命令目前设置了常用的三个级别,它们将中文标题正常输出,并使中英文标题加入双语目录。类似于标准文档类,这三个标题命令分别具有独立的计数器\footnote{默认情况下与普通标题命令共享使用计数器。},并对应 \cs*{the}\meta{计数器} 的值,可以用于 \option{number} 选项更改英文目录中标题的编号格式。这个功能是为国内一些高校的学位论文模板的要求设计,在一般情况和英文模式下\textbf{不需要使用}。
\begin{commands}
  \command{bichapter}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
  \code{chapter} 章级别的双语目录标题命令,具有独立的 \code{bichapter} 计数器。
  \command{bisection}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
  \code{section} 节级别的双语目录标题命令,具有独立的 \code{bisection} 计数器。
  \command{bisubsection}[\sarg\oarg{目录中文标题}\marg{中文标题}\marg{目录英文标题}]
  \code{subsection} 小节级别的双语目录标题命令,具有独立的 \code{bisubsection} 计数器。

  它们的星号变体命令使文中标题不编号,但是仍然加入双语目录,若英文标题参数空置那么仅加入中文目录而不加入英文目录,这一特点与 \cs*{chapter}\sarg{} 等命令的行为不太一样,在一些情况下会用到。可选参数是目录中的中文条目,默认与中文标题一致,正文标题过长时可用它设置在目录中显示的标题。默认情况下双语目录条目的格式是一致的,共享使用 \module*{toc} 模块的设置。提供了两个选项 \option{biname} 和 \option{binumber} 修改英文目录章标题条目的名字及编号:
  \begin{options}
  \optpath{chapter/}\kvsplit+{biname}{英文目录前名字,英文目录后名字}\Default{Chapter\cs*{space}}
  更改英文目录 \code{chapter} 级别的标题条目编号前后名字,类似于 \CTeX 的 \option*{name} 选项。
  \optpath{chapter/}\key{binumber}{英文目录编号输出命令}\Default{\cs*{arabic}\Marg{chapter}}
  更改英文目录 \code{chapter} 级别的标题条目编号输出格式,类似于 \CTeX 的 \option*{number} 选项。下面两种设置英文目录中章标题编号的方式等效:
  \end{options}
  \begin{ctexexam}
  \ctexset{chapter/binumber = \arabic{chapter}}
  \BeforeAddtoBitoc{\ctexset{chapter/nmuber = \arabic{chapter}}}
  \end{ctexexam}
\end{commands}

\begin{commands}
  \command{appendix}[\splitoarg{前名字,后名字}\darg{编号输出命令}]
  附录起始命令,其后的章节标题变为附录形式。\meta{前名字} 为英文目录中附录标题的前名字,同理 \meta{后名字} 为英文目录中附录标题的后名字。前后名字之间用一个半角逗号分开,也可以只有一部分,表示英文目录中附录标题前名字。\meta{编号输出命令} 为附录标题计数器在英文目录中的编号命令。注意这两个参数仅对 \code{bichapter} 级别的标题生效。
  \command{BeforeAddtoBitoc}[\sarg\marg{英文标题加入目录前的代码}]
  作用于局部范围的英文目录标题条目钩子,代码在标题加入目录前执行,可以插入条目标题定义命令临时改变英文目录中条目的格式,带有星号参数的命令会重置之前的代码。这个命令设置英文目录条目的标题格式具有最高优先级,放置在导言区或 \cs{bichapter} 等双语标题命令前生效。举一个在英文目录节标题条目编号前添加 \code{Section} 字符串的例子:
  \begin{ctexexam}
  \BeforeAddtoBitoc{\ctexset{section/name = Section\space}}
  \bisection{中文标题}{English title}
  \end{ctexexam}
\end{commands}

\begin{commands}
  \command{NewTitleCommand}[\oarg{基础标题}\marg{条目名}\marg{章节层次}]\newtagv{2024aw}%
  创建一个命令名为 \meta{条目名} 新章节标题,并且支持 \CTeX 中的标题样式选项机制。指定可选参数后标题格式除了编号/名字会与 \meta{基础标题} 相同,否则默认为空。同时创建一个名为 \meta{条目名} 的计数器和标记命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{mark}}。同时还需指定标题的 \meta{章节层次},例如标准文档类中 \code{chapter} 级别为 \code{0}。
  \command{NewTitleEntryCommand}[\oarg{扩展名}\marg{条目名}]\newtagv{2024aw}%
  创建一个命令 \code{\textbackslash}\meta{条目名}\code{\textcolor{cs}{entry}}\marg{标题},仅将 \meta{标题} 加入文件扩展名为 \meta{扩展名} 的目录中,而不在正文中输出标题,默认扩展名为 \code{toc}。
  \begin{ctexexam}
  \NewTitleCommand[chapter]{lchapter}{0}
  \NewTitleEntryCommand{lchapter}
  \contentsuse{lchapter}{toc}
  \RegisterTocName{lchapter}
  \ctexset
    {
      lchapter/runin  = true,
      lchapter/number = \thelchapter
    }
  \lchapter{正常标题}
  \lchapterentry{加入目录的标题}
  \end{ctexexam}
\end{commands}

\subsection[上标和下标]{上标和下标\smodule{tools}}
上标和下标的功能来自 \pkg*{spbmark} 宏包,下面有三个命令可以用于输出上标和下标。可以使用键值列表的形式对上下标格式进行局部或全局设置,下面命令中两个可选参数的键值列表是等效的。全局设置的详情见\ref{subsubsec:super-sub-script},更多命令和详细用法见 \pkg*{spbmark} 宏包说明文档。
\begin{commands}
  \command{super}[\sarg\oarg{键值列表1}\marg{内容}\oarg{键值列表2}]
  输出上标的命令,可用于文本和数学模式,在数学模式中可代替 \code{\^{}} 符号和 \cs*{sp} 命令。
  \command{sub}[\sarg\oarg{键值列表1}\marg{内容}\oarg{键值列表2}]
  输出下标的命令,可用于文本和数学模式,在数学模式中可代替 \code{\_{}} 符号和 \cs*{sb} 命令。
  \command{supersub}[\sarg\oarg{键值列表1}\marg{上标内容}\marg{下标内容}\oarg{键值列表2}]
  同时输出上标和下标的命令,与简短命令 \cs{spb} 等效。
  \command{spbifmath}[\marg{数学模式代码}\marg{文本模式代码}]
  根据上下标处于数学还是文本模式分别设置不同的值,应当在格式命令或偏移距离选项中使用。

  上下标命令键值列表中共同的选项如下所示。当下面除 \option{mode} 以外的选项用于 \module*{style} 模块全局设置时,它们将根据前面最近一个命令的类型设定相应值。
  \begin{options}
  \keyval{vmove}{刚性长度}\Default{0pt}
  上标或下标的垂直偏移。如果是上下标命令使用则代表上标和上标间的额外垂直距离 \option{vsep}。
  \keyval{hmove}{刚性长度}\Default{0pt}
  上标或下标的水平偏移。如果是上下标命令使用则代表上标和上标的共同偏移。
  \keyval{cmd}{格式命令}
  上标或下标的格式命令选项。最后一个命令可以带有一个参数,这个参数用于接受上标或下标。
  \keyval{height}{刚性长度}
  段落中当前行上标或下标的基线与前一行的间距。
  \keyval{depth}{刚性长度}
  段落中当前行上标或下标的基线与下一行的间距。
  \keychoice{mode}{text,math,\fbox{match}}
  上标或下标的输出格式。可以为文本 \code{text} 或数学 \code{math} 模式。当使用选项 \code{match} 时可以根据当前段落所处的模式自动匹配。
  \end{options}
\end{commands}

\subsection{公式}
\begin{environments}\noitemsep
  \environment{equation}\default{}
  \environment{multline}\default{}
  \environment{gather}\default{}
  \environment{align}
  \pkg*{amsmath} 宏包提供了一系列行间数学环境,它们可以排布各种对齐或不对齐的公式组。\env{multline} 环境用于一行无法放下的长公式,\env{gather} 环境用于每行居中的公式组,\env{align} 环境用于多列对齐的公式组。还有例如 \pkg*{mathtools} 等对数学功能进行扩展的宏包,提供了更全面的数学命令与环境。
\end{environments}

\subsection{表格}
\begin{environments}\noitemsep
  \environment{tabular}[\marg{列格式}]\default{}
  \environment{tblr}[\marg{键值列表}]
  \pkg*{tabularray} 是一个强大且全面的表格宏包,不依赖其它表格宏包所以同时使用不会产生冲突。不仅提供了各种传统表格宏包的功能,还实现了用键值列表方式简便地设置表格样式。具体用法可见宏包的说明文档,下面演示一个 \env{tblr} 表格的用法:
  \begin{ctexexam}
  \begin{tblr}
    {
      colspec     = {X[2,l]XX[LimeGreen]X},
      rowspec     = {Q[t]Q[m]Q[b,Magenta]Q[t]Q[m]Q[b]},
      hline{1,6}  = {1pt,solid},
      hline{3-5}  = {LightBlue,dashed},
      vline{1,5}  = {3-4}{dotted},
      rows        = {1cm,abovesep = 2pt},
      column{1}   = {font = \sffamily,mode = math}
    }
    Alpha   & Beta  & Gamma   & Delta \\
    Epsilon & Zeta  & Eta     & Theta \\
    Iota    & Kappa & \SetCell[r = 2]{h,c,Cyan}Lambda & Mu \\
    Nu      & Xi    & Omicron & Pi \\
    Rho     & Sigma & Tau     & Upsilon
  \end{tblr}
  \end{ctexexam}
\end{environments}

\subsection{列表}
\begin{commands}
  \command{setlist}[\sarg\splitoarg{列表类型,级别}\marg{键值列表}]
  列表宏包 \pkg*{enumitem} 为系统预置的三个列表环境提供了灵活的标签以及间距控制,这是设置列表环境的通用接口命令。带有星号参数的命令在原有格式上补充。\meta{列表类型} 是排序列表 \code{enumerate}、常规列表 \code{itemize} 和主题列表 \code{description} 三个基本类型,也可以是 \cs{newlist} 新建的定理环境,若不指定则设置所有列表类型的格式。若不指定 \meta{级别} 则设置所有列表级别的格式。
  \command{newlist}[\marg{列表名}\marg{列表类型}\marg{最大级别}]
  克隆基本的 \meta{列表类型} 在其基础上新建一个名为 \meta{列表名} 的列表环境。不要将 \meta{最大级别} 设置过大以避免创建过多的计数器和相关宏。
  \begin{ctexexam}
  \setlist{} % 清除所有列表共享的格式
  \setlist[1]{labelindent = \parindent}
  \setlist[itemize,1]{label = $\triangleleft$}
  \setlist[enumerate]{labelsep = *,leftmargin = 1.5pc}
  \newlist{steps}{enumerate}{2}
  \setlist[steps,1,2]{label = (\alph*)}
  \end{ctexexam}
\end{commands}

\begin{environments}\noitemsep
  \environment{enumerate}[\oarg{键值列表}]\default{}
  \environment{itemize}[\oarg{键值列表}]\default{}
  \environment{description}[\oarg{键值列表}]
  已为三种列表各自预置了三个级别。同种列表或不同种列表间的不同级别可相互嵌套,可以使用短编号的形式,带有星号的环境为行内列表。默认列表标签与标准文档类一致,下面举几个更改列表标签以及其它格式的例子:
  \begin{ctexexam}
  \setlist*{wide = 0em} % 取消所有列表的左边距
  \begin{enumerate}[label = (\arabic*),leftmargin = 1cm,resume]
  \begin{enumerate*}[(1)] % 短编号形式
  \begin{itemize}[label = \textbullet,labelsep = *]
  \begin{description}[font = \sffamily\bfseries,style = nextline]
  \end{ctexexam}
\end{environments}

\subsection{悬挂缩进}
\begin{commands}
  \command{hangpara}[\marg{缩进长度}\marg{缩进开始行数}]
  悬挂缩进命令 \cs{hangpara} 使其后的一个段落保持悬挂缩进。参数与 \env{hangparas} 环境相同,不过只有一个段落。\meta{缩进长度} 可以是带单位的数值或由文本长度测定命令 \cs{widthof} 提供。
  \command{hangfrom}[\sarg\oarg{缩进长度}\marg{悬挂内容}\oarg{缩进开始行数}]\newtag%
  指定首行的 \meta{悬挂内容},其后一个段落保持悬挂缩进。\meta{缩进长度} 默认为 \meta{悬挂内容} 文本长度 \cs{hangwd} 的值,支持数学表达式。\meta{缩进开始行数} 默认为 \code{1}。如果是带有星号参数的命令,则首行不输出 \meta{悬挂内容},以等于 \meta{缩进长度} 长度的空白代替。
  \begin{ctexexam}
  \hangfrom[\hangwd + 1em]{悬挂标签\hspace{0.5em}}[1]
  \hangfrom*[3em]{}
  \end{ctexexam}
\end{commands}

\begin{environments}
  \environment{hangparas}[\marg{缩进长度}\marg{缩进开始行数}]
  悬挂缩进环境 \env{hangparas} 有两个必选参数,使其中的段落均保持悬挂缩进。每个段落的缩进将以 \meta{缩进长度} 从 \meta{缩进开始行数} 开始。
\end{environments}

\subsection{代码}
\begin{commands}
  \command{lstdefinestyle}[\marg{代码风格}\marg{键值列表}]
  代码抄录宏包 \pkg*{listings} 的代码风格定义命令,提供大量选项对代码样式进行高度定制。可以根据需要的代码语言和样式定义多种风格,默认使用的 \meta{代码风格} 为 \code{lst-latex}。
  \command{lstinline}[\oarg{键值列表}\marg{行内代码}]
  行内代码抄录命令。较原生的 \cs*{verb} 命令有较大改进,具有代码语言和样式支持。
\end{commands}

\begin{environments}
  \environment{lstlisting}[\oarg{键值列表}]
  行间代码抄录环境。支持多种语言库,默认使用 \code{LaTeX} 代码语言,可使用 \meta{键值列表} 局部修改代码样式。另外还提供了 \cs{lstnewenvironment} 命令包装自定义名称的代码环境。
  \begin{ctexexam}
  \lstdefinestyle{lst-pascal}
    {
      language        = Pascal,
      numbers         = left,
      firstnumber     = last,
      frame           = shadowbox,
      backgroundcolor = \color{MistyRose},
      rulesepcolor    = \color{DarkGray}
    }
  \lstnewenvironment{mypascal}[1][]{\lstset{style = lst-pascal,#1}}{}
  \end{ctexexam}
\end{environments}

\begin{options}\noitemsep
  \keyval{lstlistlistingname}{代码目录标题名}\default{}
  \keyval{lstlistingname}{代码题注标题名}
  代码目录名与代码环境题注名选项 \option{lstlistlistingname} 和 \option{lstlistingname} 用法与 \CTeX 使用手册标题汉化一节类似,可以看作对这节的扩展。
\end{options}

\subsection{盒子}
\label{subsec:box}
文档类预置了两个行间盒子环境和两个行内盒子命令,需要在导言区\textbf{手动载入} \pkg*{tcolorbox} 宏包提供支持。它们 \meta{配置选项} 的键值列表可见宏包文档的Option Keys一节,可以进行边距、字体及背景颜色等各种个性化设置。如果 \meta{配置选项} 较长且希望在原有基础上改为全局固定的样式,可以使用 \cs{addtotcbstyle} 命令设置,第一个参数为 \code{tc-}\meta{环境或命令名}。
\begin{commands}
  \command{deftcbstyle}[\marg{盒子风格}\marg{键值列表}]
  新建或重置一个名称为 \meta{盒子风格} 的 \pkg*{tcolorbox} 宏包盒子风格,可以与 \cs{addtotcbstyle} 命令联用。
  \command{addtotcbstyle}[\marg{盒子风格}\marg{键值列表}]
  修改已存在的 \pkg*{tcolorbox} 宏包盒子风格。这个命令可以调整以下即将介绍的预置盒子风格,对于预置盒子来说参数 \meta{盒子风格} 即为它们对应的环境或命令名。
  \begin{ctexexam}
  \deftcbstyle{fancy} % 新建一个盒子风格fancy
    {
      colback = Snow,colframe = LimeGreen,coltext = Coral,
      fontupper = \bfseries,arc = 6pt,
      boxrule = 5pt,boxsep = 5pt,
      borderline = {2pt}{2pt}{white}
    }
  \newtcolorbox{mytcbox}[1][]{enhanced,fancy,title = #1}
  \begin{tcolorbox}[fancy,enhanced]
    盒子内容
  \end{tcolorbox}
  \begin{mytcbox}[盒子标题]
    盒子内容
  \end{mytcbox}
  \end{ctexexam}
\end{commands}

\begin{environments}
  \environment{easyboxi}[\sarg\oarg{颜色名}\darg{段落标题}\oarg{配置选项}]
  行间环境 \env{easyboxi} 创建一个带有三个可选参数的扁平盒子。使用星号参数时给盒子添加边框,\meta{颜色名} 选项设置背景颜色,\meta{段落标题} 选项可以设置标题,默认标题为空。
  \begin{ctexexam}
  \addtotcbstyle{tc-easyboxi}{arc = 6pt}
  \begin{easyboxi}*[DarkCyan](段落标题)
    上半盒子内容
    \tcblower % 盒子上下部分分界线
    下半盒子内容
  \end{easyboxi}
  \end{ctexexam}
  \environment{easyboxii}[\sarg\oarg{颜色名}\darg{段落标题}\oarg{配置选项}]
  环境 \env{easyboxii} 用法与 \env{easyboxi} 类似,同样带有三个可选参数。盒子的左边带有一条粗竖线,背景颜色为竖线颜色的浅色。\meta{颜色名} 选项可以设置竖线的颜色。使用星号参数则盒子无背景颜色。
\end{environments}

\begin{commands}
  \command{eboxi}[\oarg{颜色名}\marg{内容}\oarg{配置选项}]
  行内盒子命令 \cs{eboxi} 具有模糊边缘类似高亮的效果。
  \command{eboxii}[\oarg{颜色名}\marg{内容}\oarg{配置选项}]
  行内盒子命令 \cs{eboxii} 则有直角边缘和四周框线,效果类似带背景色的 \cs*{fbox} 盒子。
\end{commands}

\section{扩展功能}

\subsection{物理量}
使用 \pkg*{siunitx} 宏包提供国际单位制的物理量支持。\pkg*{siunitx} 宏包旨在为 \LaTeX 用户提供一种统一的方法,以便正确、轻松地排版数字和单位。\pkg*{siunitx} 的设计理念是默认遵循约定的规则,但允许通过选项设置进行更改。
\begin{commands}
  \command{num}[\oarg{键值列表}\marg{数字}]
  \cs{num} 命令可以输出以科学计数法表示的数值。
  \command{unit}[\oarg{键值列表}\marg{单位}]
  单位格式化命令 \cs{unit} 包含文字元素(例如字母或数字)时,使用 \Marg{.} 和 \code{\~{}} 放置在单元乘积中间,并使用 \code{\_{}} 和 \code{\^{}} 正确放置指定的下标和上标。格式化方法可在数学和文本模式下使用。
  \command{qty}[\oarg{键值列表}\marg{数字}\oarg{前缀}\marg{单位}]
  命令 \cs{qty} 可用来输出带有单位的量。
  \command{qtyrange}[\oarg{键值列表}\marg{起始数字}\marg{结束数字}\marg{单位}]
  命令 \cs{qtyrange} 可以输出带有范围和单位的量。
  \begin{ctexexam}
  \numproduct{-21x3e5}
  \unit{mL~min^{-1}}
  \qty{5}{\mole}
  \qtyrange[unit-color = green]{1.5}{4}{kg}
  \end{ctexexam}
\end{commands}

\subsection{化学式}
除了以普通公式的方式,化学式的输出还可用 \pkg*{chemformula} 宏包实现。\pkg*{chemformula} 的工作原理与 \pkg*{mhchem} 非常相似,但对化合物、化学计量数和箭头的输入方式更为严格。同时 \pkg*{chemformula} 提供了多种自定义输出的可能性。
\begin{commands}
  \command{ch}[\oarg{键值列表}\marg{化学式}]
  无机化学式使用 \cs{ch} 命令书写。化合物表达式中的原子数不需要加下标符号,化学计量数与表达式间隔一个空格。
  \begin{ctexexam}
  \ch{[Cu(NH3)4]^2+}
  \ch{Cu2S + 2 O2 - 2 e^- == 2 Cu^2+ + SO4^2-}
  \end{ctexexam}
\end{commands}

\subsection{计数器}
\begin{commands}\noitemsep
  \command{newcounter}[\marg{计数器}\oarg{父计数器}]\default{}
  \command{setcounter}[\marg{计数器}\marg{整数}]\default{}
  \command{stepcounter}[\marg{计数器}]
  常用的计数器设置命令。命令 \cs{newcounter} 创建一个初始值为0的新计数器。命令 \cs{setcounter} 将计数器的值设定为指定值。命令 \cs{stepcounter} 使计数器的值递增1。
  \command{counterwithin}[\sarg\oarg{格式}\marg{计数器}\oarg{连字符}\marg{父计数器}]\newtag[Chg]%
  对计数器进行绑定的命令。将 \meta{计数器} 绑定于 \meta{父计数器},即 \meta{父计数器} 的值递增时 \meta{计数器} 的值会归零。输出格式 \cs*{the}\meta{计数器} 被定义为 \cs*{the}\meta{父计数器}\meta{连字符}\meta{格式}\marg{计数器}。\meta{格式} 一般为更改计数器编号形式的命令,默认为 \cs*{arabic}。带有星号参数的命令仅进行绑定不更改输出格式。
  \command{counterwithout}[\sarg\oarg{格式}\marg{计数器}\marg{父计数器}]
  对计数器关系进行解绑的命令。将 \meta{计数器} 解绑于 \meta{父计数器},同时输出格式被改为 \meta{格式}\marg{计数器}。带有星号参数的命令仅进行解绑不更改输出格式。
  \begin{ctexexam}
  \counterwithin[\Roman]{child}[-]{parent}
  \counterwithout*{child}{parent}
  \end{ctexexam}
\end{commands}

\subsection{标签引用}
\begin{commands}
  \command{labelformat}[\marg{计数器}\marg{标签引用格式}]
  标签格式命令 \cs{labelformat} 可以设置标签引用格式。\meta{标签引用格式} 中 \code{\#1} 代表 \cs*{the}\meta{计数器},可以设置引用序号的前缀和后缀。也可以使用 \pkg*{cleveref} 宏包提供更强大的标签功能。
  \command{AtEndPreamble}[\marg{钩子代码}]
  导言区末尾的钩子命令。为了保证兼容性 \pkg*{hyperref} 宏包被设计在导言区末尾载入,一些情况下需要钩子命令在 \pkg*{hyperref} 宏包后方执行 \meta{钩子代码},例如载入 \pkg*{cleveref} 宏包。
  \begin{ctexexam}
  \labelformat{chapter}{第#1章}
  \labelformat{chapter}{第\thechapter 章}
  \AtEndPreamble{\usepackage{cleveref}}
  \end{ctexexam}
\end{commands}

\subsection{图表题注}
\pkg*{caption} 宏包提供了多种方法来定制浮动环境(例如 \env{figure} 和 \env{table})中的标题,并可与许多其它宏包配合使用。功能包括旋转题注、侧向题注和连续题注等。
\begin{commands}
  \command{captionsetup}[\oarg{条目名}\marg{键值列表}]
  这是 \pkg*{caption} 宏包的接口命令,\meta{键值列表} 提供多个选项更改图表题注的格式。题注主要由三部分组成:标题标签即图表名与题注编号的组合,标题文本本身通常是内容的简短描述,以及将文本与标签分开的题注分隔符。可以在导言区设置整体格式,也可以在正文使用局部更改格式。
\end{commands}

\begin{commands}\noitemsep
  \command{caption}[\sarg\oarg{目录标题}\marg{标题}]\default{}
  \command{captionof}[\sarg\marg{条目名}\oarg{目录标题}\marg{标题}]\default{}
  \command{bicaption}[\sarg\oarg{目录中文标题}\marg{中文标题}\oarg{目录英文标题}\marg{英文标题}]
  题注命令 \cs{caption} 用于在图表上下方插入题注,需要在浮动环境 \env*{figure} 和 \env*{table} 中使用。在浮动环境外可以使用 \cs{captionof} 命令,第一个参数指定条目名。可以搭配 \pkg*{newfloat} 宏包创建更多类型的浮动环境并设置相应题注。\cs{bicaption} 命令可以实现中英文双语题注,需要在导言区载入 \pkg*{bicaption} 宏包,具体用法见说明文档。
\end{commands}

\subsection{索引}
\begin{commands}
  \command{indexsetup}[\marg{键值列表}]
  \pkg*{imakeidx} 宏包增强了索引的功能,可使用户在制作和排版文档的同时制作一个或多个索引。这是 \pkg*{imakeidx} 宏包的接口命令,用于设置索引表的整体格式。
  \command{index}[\oarg{索引名}\marg{标签}]
  索引标签命令的可选参数可以用不同的 \meta{索引名} 给多个索引表设置标签。
  \command{makeindex}[\oarg{键值列表}]
  用于导言区开启索引收集的命令。这个命令可以重复使用收集多个索引表,以不同的 \meta{索引名} 作为区分,如果仅打印一个索引表没必要重复使用。
  \command{printindex}[\sarg\oarg{键值列表}]
  打印不同索引表的命令。这个命令被重新定义,\meta{键值列表} 中的选项与\ref{subsec:directory command} 其它目录命令相同,但是接口命令 \cs{indexsetup} 的部分选项失效。
  \begin{options}
  \keyval{name}{索引名}
  指定输出名为 \meta{索引名} 的索引表,如果只使用一个索引表则默认为项目文件名不需要指定。
  \end{options}
\end{commands}

\subsection{边注}
\begin{commands}
  \command{marginnote}[\oarg{左文本}\marg{右文本}\oarg{垂直偏移}]
  边注命令用于在两侧页边空白添加标注。如果只给定了 \meta{右文本},那么边注在奇偶数页文字相同。如果同时给定了 \meta{左文本},则偶数页使用 \meta{左文本} 的文字。
  \command{reversemarginpar}
  边注位置设置命令,用于将边注排版到与默认边空位置相反的边空中。
\end{commands}

\subsection{公式符号对照}
\begin{environments}
  \environment{eqcomp}[\oarg{键值列表1}\darg{键值列表2}]
  一些公式之后可以使用基于列表环境的 \env{eqcomp} 进行符号对照。对照列表的 \meta{键值列表2} 与 \pkg*{enumitem} 的选项相同,一般较少用到,可以用于设置垂直间距等。
  \begin{ctexexam}
  \seteqcomp{intro = 上式中}
  \begin{eqcomp}[width = 1.5em]
    \symb{Ab}[$\to$] 符号说明
    \symb{C}[---] 符号说明
  \end{eqcomp}
  \end{ctexexam}
\end{environments}

\begin{commands}
  \command{symb}[\sarg\marg{符号}\oarg{引导符}]
  符号条目命令 \cs{symb} 类似 \cs*{item},需要在环境内使用,带有星号的命令可在文本段落单独使用。
  \command{seteqcomplist}[\marg{键值列表2}]
  对照列表条目格式的 \meta{键值列表2} 可以使用 \cs{seteqcomplist} 全局设置。
  \command{seteqcomp}[\marg{键值列表1}]
  对照环境的 \meta{键值列表1} 可以使用 \cs{seteqcomp} 全局设置,它的选项如下:
  \begin{options}
  \keyval{width}{符号宽度}\Default{10pt}
  设置适当的符号宽度可以防止文字重叠和边界溢出等问题。
  \keyval{delim}{引导符}\Default{——}
  全局的符号对照引导符。\cs{symb} 命令局部 \meta{引导符} 的对齐方式是基于这个符号的宽度。
  \keyval{space}{符号间隙}\Default{0.25em}
  符号间隙为引导符两侧与符号和说明文字间的距离。
  \keychoice{item-align}{l,c,\fbox{r}}
  符号的对齐方式,分为左 \code{l}、中 \code{c} 和右 \code{r} 三种对齐方式。
  \keychoice{delim-align}{l,\fbox{c},r}
  引导符的对齐方式,分为左 \code{l}、中 \code{c} 和右 \code{r} 三种对齐方式。
  \keyval{enumitem}{键值列表2}
  可以使用选项 \option{enumitem} 或命令 \cs{seteqcomplist} 调整对照列表的水平和垂直间距。
  \keyval{intro}{首行文字}
  符号对照的说明文字。应当为简短的几个字,只显示在第一行,其后为悬挂缩进的对照列表。
  \keyval{font}{符号字体}
  符号的字体。数学和文本符号模式应采用不同的字体命令,最后一个命令可以接受一个参数,这个参数为符号。
  \keychoice{mode}{\fbox{math},text}
  符号字体模式,可以为数学字体或者文本字体。
  \end{options}
\end{commands}

\subsection{插入文档}
\begin{commands}
  \command{includepdf}[\oarg{键值列表}\marg{文档名}]
  该命令由文档宏包 \pkg*{pdfpages} 提供。可以将其它 \code{pdf} 文档插入当前文档,比如插入其它软件制作的封面。可选参数可以指定插入页数、逻辑页和横向页面等,详情查看宏包文档。
\end{commands}

\subsection{下划线}
\begin{commands}\noitemsep
  \command{uline}[\marg{下划直线}]\default{}
  \command{uuline}[\marg{下划双直线}]\default{}
  \command{uwave}[\marg{下划波浪线}]
  \pkg*{ulem} 宏包提供了多种下划线命令,可以重新定义 \cs{ULthickness} 命令控制下划线的粗细。下划线的深度由 \cs{ULdepth} 控制,默认值 \cs*{maxdimen} 是一个允许深度根据当前字体变化的特殊标志,当然也可以使用 \cs*{setlength} 设定为指定深度。
\end{commands}

\appendix
\setlist[1]{}
\begin{changelog}[title = 更新日志]
  \shortversion{v = 1.45,date = 2022/01/08,changes = 经过前期各模块的功能调整和错误修复,稳定版本正式发布。}
  \begin{version}[v = 1.46,date = 2022/01/12]
  \added
  \item 增加定义脚注正文和内容标记格式的命令 \cs{defupfntmark} 和 \cs{defdownfntmark}。
  \item 新增章节标题目录中双语标题条目的输出排列方式选项 \option{bilist}。
  \end{version}
  \begin{version}[v = 1.55,date = 2022/01/28]
  \added
  \item 新增文类选项 \option{theorem} 用于提供定理功能支持。
  \deprecated
  \item 由于命令存在一些无法解决的问题弃用定理环境定义命令 \cs*{deftheorem}。
  \item 文档类移除预置的定理环境,改为由用户自行定义环境。
  \item 考虑到功能性和实用性不强弃用摘要环境 \env*{outline} 和习题环境 \env*{exercise}。
  \end{version}
  \begin{version}[v = 1.62,date = 2022/02/16]
  \added
  \item 增加目录条目下方执行的代码选项 \option{tocbelow}。
  \changed
  \item 目录改用标题级别选项 \option{level} 设定标题命令,不输出标题则使用星号参数。
  \end{version}
  \begin{version}[v = 1.636,date = 2022/03/03]
  \added
  \item \cs{tableofcontents} 命令增加输出方案选项 \option{plan},不再使用 \parg{} 参数输出英文目录。
  \item 增加英文主文档目录钩子选项 \option{bibetween}。
  \end{version}
  \shortversion{v = 1.638,date = 2022/03/04,changes = 增加目录条目样式选项注册命令 \cs{RegisterTocName}。}
  \shortversion{v = 1.644,date = 2022/03/10,changes = 增加浮动环境目录声明命令 \cs{DeclareFloatList} 配合 \pkg*{caption} 宏包。}
  \shortversion{v = 1.682,date = 2022/05/01,changes = 将迷你页判断命令 \cs{notminipage} 改为被保护命令兼容 \pkg*{circledtext} 宏包。}
  \begin{version}[v = 2024ap,date = 2024/03/15]
  \fixed
  \item 修复图表等浮动环境题注目录中条目标签编号的计数器值显示错误问题。
  \item 修复附录命令 \cs{appendix} 的可选参数设置英文目录中条目名字和编号失效的问题。
  \item 修复 \pkg*{biblatex} 宏包对脚注打补丁失效的问题。
  \added
  \item 新增目录风格定义命令 \cs{SetTocStyle} 和使用命令 \cs{UseTocStyle}。
  \item 新增目录配置命令 \cs{SetTocOuter} 和双语目录判断命令 \cs{ebifbitoc}。
  \item 新增脚注段落文本格式定义命令 \cs{deffntpara} 和脚注间距离选项 \option{footnotesep}。
  \item 新增悬挂缩进命令 \cs{hangfrom}。
  \item 新增行间公式与正文上下间距选项 \option{abovedisplayskip} 和 \option{belowdisplayskip}。
  \item 新增目录文件扩展名分配命令 \cs{AllotCaptionExt}。
  \end{version}
  \shortversion{v = 2024aq,date = 2022/03/31,changes = 修复命令 \cs{ebifbitoc} 用于条目缩进选项 \option{tocindent} 失效的问题。}
  \begin{version}[v = 2024as,date = 2024/04/19]
  \changed
  \item 目录条目样式注册命令 \cs{RegisterTocName} 增加星号参数,支持设置段落型目录。
  \added
  \item 新增目录条目标题标签定义的选项 \option{toclabel}。
  \item 新增段落型目录条目附加代码的选项 \option{tocbegin}、\option{tocsep} 和 \option{tocend}。
  \end{version}
  \shortversion{v = 2024aw,date = 2022/04/22,changes = 新增新建章节标题命令 \cs{NewTitleCommand} 和 \cs{NewTitleEntryCommand}。}
  \shortversion{v = 2024bb,date = 2022/04/26,changes = 增加对 \pkg*{thmtools} 宏包定理环境目录 \cs{listoftheorems} 的支持。}
\end{changelog}
\nocite{*}

\end{document}