|
27 | 27 | %% |
28 | 28 | \RequirePackage{expl3,l3keys2e} |
29 | 29 | \ProvidesExplClass{bitreport} |
30 | | -{2022-09-29}{3.0.3}{BIT Thesis Templates} |
31 | | - |
32 | | - |
| 30 | +{2022-09-30}{3.0.4}{BIT Thesis Templates} |
33 | 31 | \int_new:N \g__bithesis_report_type_int |
34 | | - |
35 | 32 | \clist_const:Nn \c__bithesis_report_type_clist |
36 | 33 | { common, undergraduate_proposal} |
37 | | - |
38 | 34 | \seq_new:N \l__bithesis_right_seq |
39 | 35 | \seq_new:N \l__bithesis_left_seq |
40 | | - |
41 | 36 | \PassOptionsToPackage{AutoFakeBold,AutoFakeSlant}{xeCJK} |
42 | | - |
43 | 37 | \keys_define:nn { bitreport } |
44 | 38 | { |
45 | 39 | option .meta:nn = {bitreport / option } {#1}, |
46 | 40 | cover .meta:nn = { bitreport / cover } {#1}, |
47 | 41 | info .meta:nn = { bitreport / info } {#1}, |
48 | 42 | misc .meta:nn = { bitreport / misc } {#1} |
49 | 43 | } |
50 | | - |
51 | 44 | \keys_define:nn { bitreport / option } |
52 | 45 | { |
53 | 46 | type .choice:, |
|
60 | 53 | type .initial:n = common, |
61 | 54 | ctex .tl_set:N = \l__bithesis_options_to_ctex_tl, |
62 | 55 | } |
63 | | - |
64 | | -\DeclareOption*{ |
65 | | - \PassOptionsToClass{\l__bithesis_options_to_ctex_tl}{ctexart} |
66 | | -} |
67 | | -\ProcessOptions\relax |
68 | | -\LoadClass[zihao=-4]{ctexart} |
69 | | - |
70 | | -\RequirePackage[a4paper,left=3cm,right=2.4cm,top=2.6cm,bottom=2.38cm,includeheadfoot]{geometry} |
71 | | -\RequirePackage{fancyhdr} |
72 | | -\RequirePackage{setspace} |
73 | | -\RequirePackage{caption} |
74 | | -\RequirePackage{booktabs} |
75 | | -\RequirePackage{pdfpages} |
76 | | - |
77 | 56 | \keys_define:nn { bitreport / cover } |
78 | 57 | { |
79 | 58 | imagePath .tl_set:N = \l_bit_coverimagepath_tl, |
|
93 | 72 | underlineOffset .dim_set:N = \l__bithesis_cover_underline_offset_dim, |
94 | 73 | underlineOffset .initial:n = { -10pt }, |
95 | 74 | } |
96 | | - |
97 | 75 | \keys_define:nn { bitreport / info } |
98 | 76 | { |
99 | 77 | title .tl_set:N = \l__bithesis_value_title_tl, |
|
105 | 83 | externalSupervisor .tl_set:N = \l__bithesis_value_external_supervisor_tl, |
106 | 84 | studentId .tl_set:N = \l__bithesis_value_student_id_tl, |
107 | 85 | } |
108 | | - |
109 | 86 | \keys_define:nn { bitreport / misc } |
110 | 87 | { |
111 | 88 | reviewTable .tl_set:N = \l_bit_reviewtable_tl, |
112 | 89 | } |
113 | | - |
| 90 | +\DeclareOption*{ |
| 91 | + \PassOptionsToClass{\l__bithesis_options_to_ctex_tl}{ctexart} |
| 92 | +} |
| 93 | +\ProcessOptions\relax |
| 94 | +\LoadClass[zihao=-4]{ctexart} |
| 95 | +\RequirePackage[a4paper,left=3cm,right=2.4cm,top=2.6cm,bottom=2.38cm,includeheadfoot]{geometry} |
| 96 | +\RequirePackage{fancyhdr} |
| 97 | +\RequirePackage{setspace} |
| 98 | +\RequirePackage{caption} |
| 99 | +\RequirePackage{booktabs} |
| 100 | +\RequirePackage{pdfpages} |
114 | 101 | \ProcessKeysOptions { bitreport / option } |
115 | | - |
116 | 102 | \cs_generate_variant:Nn \tl_if_empty:nTF {x} |
117 | 103 | \cs_generate_variant:Nn \seq_set_split:Nnn {Nnx} |
118 | | - |
119 | 104 | \cs_new:Npn \__bithesis_dunderline:nnn #1#2#3 { |
120 | 105 | {\setbox0=\hbox{#3}\ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}} |
121 | 106 | } |
122 | | - |
123 | 107 | \cs_new:Npn \__bithesis_render_cover_entry:nn #1#2 { |
124 | 108 | \makebox[\l__bithesis_cover_label_max_width_dim][\l__bithesis_cover_label_align_tl]{ |
125 | 109 | \tl_if_blank:VTF #1 {} {#1\l__bithesis_cover_dilimiter_tl} |
|
129 | 113 | \makebox[\l__bithesis_cover_value_max_width_dim][\l__bithesis_cover_value_align_tl]{#2} |
130 | 114 | }\par |
131 | 115 | } |
132 | | - |
133 | 116 | \cs_new:Npn \__bithesis_get_text_width:Nn #1#2 |
134 | 117 | { |
135 | 118 | \hbox_set:Nn \l_tmpa_box {#2} |
136 | 119 | \dim_set:Nn #1 { \box_wd:N \l_tmpa_box } |
137 | 120 | } |
138 | 121 | \cs_generate_variant:Nn \__bithesis_get_text_width:Nn { NV } |
139 | | - |
140 | 122 | \cs_new:Npn \__bithesis_get_max_text_width:NN #1#2 |
141 | 123 | { |
142 | 124 | \group_begin: |
|
150 | 132 | } |
151 | 133 | \group_end: |
152 | 134 | } |
153 | | - |
154 | 135 | \cs_new:Npn \__bithesis_parse_entry #1 #2 { |
155 | 136 | \seq_set_split:Nnx \l__bithesis_tmp_right_seq {//} {#2} |
156 | 137 | \seq_clear:N \l__bithesis_tmp_left_seq |
|
160 | 141 | \seq_put_left:Nn \l__bithesis_tmp_left_seq {#1} |
161 | 142 | \seq_pop_right:NN \l__bithesis_tmp_left_seq \g__bithesis_trashcan_tl |
162 | 143 | } |
163 | | - |
164 | 144 | \cs_new:Npn \__bithesis_render_cover_entry:n #1 { |
| 145 | + % 左边是标签,右边是值。 |
| 146 | + % 形如: |
| 147 | + % { {label_1} {value_1}, {label_2} {value 2} } |
| 148 | + % 首先转换成 seq 类型。 |
165 | 149 | \seq_set_from_clist:NN \l__bithesis_input_seq #1 |
166 | | - % parse newline // |
167 | 150 | \seq_map_inline:Nn \l__bithesis_input_seq { |
| 151 | + % 然后对于每一对 label 和 value,首先查找 |
| 152 | + % value 中是否含有 // 字符,如果有,则将其分割成多个 |
| 153 | + % label - value 对。 |
| 154 | + % 比如 {label_1} {value // 1} 会被转换成 |
| 155 | + % { {label_1} {value}, {} {1} } |
168 | 156 | \__bithesis_parse_entry ##1 |
| 157 | + % 然后将这些 label - value 对添加到 \l__bithesis_right_seq |
| 158 | + % 或者 \l__bithesis_left_sql 中。 |
| 159 | + % left 就是 label,right 就是 value。 |
169 | 160 | \seq_concat:NNN \l__bithesis_right_seq \l__bithesis_right_seq \l__bithesis_tmp_right_seq |
170 | 161 | \seq_concat:NNN \l__bithesis_left_seq \l__bithesis_left_seq \l__bithesis_tmp_left_seq |
171 | 162 | } |
172 | 163 |
|
| 164 | + % 如果用户选择自动计算最大宽度,则计算最大宽度。 |
173 | 165 | \bool_if:NT \l__bithesis_cover_auto_width_bool { |
174 | 166 | \__bithesis_get_max_text_width:NN \l__bithesis_cover_label_max_width_dim \l__bithesis_left_seq |
175 | 167 | \__bithesis_get_max_text_width:NN \l__bithesis_cover_value_max_width_dim \l__bithesis_right_seq |
176 | 168 | } |
177 | 169 |
|
| 170 | + % 最后,根据宽度渲染 label 和 value 对。 |
178 | 171 | \group_begin: |
179 | 172 | \bool_until_do:nn { \seq_if_empty_p:N \l__bithesis_left_seq } |
180 | 173 | { |
|
186 | 179 | } |
187 | 180 | \group_end: |
188 | 181 | } |
189 | | - |
190 | 182 | \DeclareDocumentCommand \BITSetup { m } |
191 | 183 | { \keys_set:nn { bitreport } { #1 }} |
192 | 184 | \DeclareDocumentCommand \MakeCover {} |
|
196 | 188 | {1} { |
197 | 189 | \begin{titlepage} |
198 | 190 | \centering |
| 191 | + |
199 | 192 | \vspace{23mm} |
| 193 | + |
200 | 194 | \tl_if_empty:NF \l_bit_coverimagepath_tl { |
201 | 195 | \includegraphics[width=.5\textwidth]{\l_bit_coverimagepath_tl}\\ |
202 | 196 | } |
| 197 | + |
203 | 198 | \vspace{10mm} |
| 199 | + |
204 | 200 | \heiti\fontsize{24pt}{24pt}\selectfont{\l__bithesis_value_title_tl}\\ |
| 201 | + |
205 | 202 | \vspace{67mm} |
206 | | - \begin{spacing}{2.2} |
207 | | - \songti\zihao{3} |
208 | | - \clist_set:Nn \l__bithesis_input_clist { |
209 | | - {\textbf{学\qquad 院:}} {\l__bithesis_value_school_tl}, |
210 | | - {\textbf{专\qquad 业:}} {\l__bithesis_value_major_tl}, |
211 | | - {\textbf{班\qquad 级:}} {\l__bithesis_value_class_tl}, |
212 | | - {\textbf{学\qquad 号:}} {\l__bithesis_value_student_id_tl}, |
213 | | - {\textbf{姓\qquad 名:}} {\l__bithesis_value_author_tl}, |
214 | | - {\textbf{任课教师:}} {\l__bithesis_value_supervisor_tl}, |
215 | | - } |
216 | 203 |
|
217 | | - \__bithesis_render_cover_entry:n \l__bithesis_input_clist |
| 204 | + \begin{spacing}{2.2} |
| 205 | + \songti\zihao{3} |
| 206 | + |
| 207 | + \clist_set:Nn \l__bithesis_input_clist { |
| 208 | + {\textbf{学\qquad 院:}} {\l__bithesis_value_school_tl}, |
| 209 | + {\textbf{专\qquad 业:}} {\l__bithesis_value_major_tl}, |
| 210 | + {\textbf{班\qquad 级:}} {\l__bithesis_value_class_tl}, |
| 211 | + {\textbf{学\qquad 号:}} {\l__bithesis_value_student_id_tl}, |
| 212 | + {\textbf{姓\qquad 名:}} {\l__bithesis_value_author_tl}, |
| 213 | + {\textbf{任课教师:}} {\l__bithesis_value_supervisor_tl}, |
| 214 | + } |
| 215 | + |
| 216 | + \__bithesis_render_cover_entry:n \l__bithesis_input_clist |
| 217 | + |
| 218 | + \end{spacing} |
218 | 219 |
|
219 | | - \end{spacing} |
220 | 220 | \vspace*{\fill} |
| 221 | + |
221 | 222 | \centering |
| 223 | + |
222 | 224 | \songti\fontsize{12pt}{12pt}\selectfont{ |
223 | 225 | \tl_if_empty:NTF \l__bithesis_cover_date_tl { |
224 | 226 | \today |
|
234 | 236 | \topskip=0pt |
235 | 237 | \vspace*{-16mm} |
236 | 238 | \centering |
237 | | - \hspace{-6mm}\songti\fontsize{22pt}{22pt}\selectfont{北京理工大学}\par |
| 239 | + \hspace{-6mm} |
| 240 | + \songti\fontsize{22pt}{22pt} |
| 241 | + \selectfont{北京理工大学}\par |
238 | 242 |
|
239 | 243 | \vspace{13mm} |
240 | 244 |
|
241 | | - \hspace{-6mm}\heiti\fontsize{24pt}{24pt}\selectfont{本科生毕业设计(论文)开题报告}\par |
| 245 | + \hspace{-6mm} |
| 246 | + \heiti\fontsize{24pt}{24pt} |
| 247 | + \selectfont{本科生毕业设计(论文)开题报告}\par |
242 | 248 |
|
243 | 249 | \vspace{53mm} |
244 | 250 |
|
|
251 | 257 | {\textbf{姓\qquad 名:}} {\l__bithesis_value_author_tl}, |
252 | 258 | {\textbf{指导教师:}} {\l__bithesis_value_supervisor_tl}, |
253 | 259 | {\textbf{校外指导教师:}} {\l__bithesis_value_external_supervisor_tl}, |
254 | | - } |
| 260 | + } |
255 | 261 |
|
256 | 262 | \__bithesis_render_cover_entry:n \l__bithesis_input_clist |
257 | 263 |
|
|
261 | 267 |
|
262 | 268 | \centering |
263 | 269 | \hspace{-6mm}\songti\fontsize{12pt}{12pt}\selectfont{\today} |
| 270 | + |
264 | 271 | \end{titlepage} |
265 | 272 | } |
266 | 273 | } |
267 | 274 | \group_end: |
268 | 275 | } |
269 | | - |
270 | 276 | \DeclareDocumentCommand \MakeReviewTable {} |
271 | 277 | { |
272 | 278 | \group_begin: |
|
275 | 281 | \end{titlepage} |
276 | 282 | \group_end: |
277 | 283 | } |
278 | | - |
279 | 284 | \DeclareCaptionFont{kaiticaption}{\kaishu \normalsize} |
280 | | - |
281 | 285 | \renewcommand{\thefigure}{\thesection-\arabic{figure}} |
282 | 286 | \captionsetup[figure]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption} |
283 | | - |
284 | 287 | \renewcommand{\thetable}{\thesection-\arabic{table}} |
285 | 288 | \captionsetup[table]{font=small,labelsep=space,skip=10bp,labelfont=bf,font=kaiticaption} |
286 | | - |
287 | 289 | \ctexset{today=big} |
288 | | - |
289 | 290 | \setromanfont{Times~New~Roman} |
290 | | - |
291 | | -%% 将中文楷体设置为 SIMKAI.TTF(如果需要) |
292 | | - |
293 | 291 | \setcounter{tocdepth}{3} |
294 | 292 | \setcounter{secnumdepth}{3} |
295 | | - |
296 | | -%% |
297 | 293 | \ctexset{section={ |
298 | | - format={\raggedright \bfseries \songti \zihao{-3}}, |
| 294 | + format={ |
| 295 | + \raggedright \bfseries \songti \zihao{-3} |
| 296 | + }, |
299 | 297 | beforeskip = 24bp plus 1ex minus .2ex, |
300 | 298 | afterskip = 24bp plus .2ex, |
301 | 299 | fixskip = true, |
302 | 300 | name = {,.\quad} |
303 | 301 | } |
304 | 302 | } |
305 | 303 | \ctexset{subsection={ |
306 | | - format = {\bfseries \songti \raggedright \zihao{4}}, |
| 304 | + format = { |
| 305 | + \bfseries \songti \raggedright \zihao{4} |
| 306 | + }, |
307 | 307 | beforeskip = 24bp plus 1ex minus .2ex, |
308 | 308 | afterskip = 24bp plus .2ex, |
309 | 309 | fixskip = true, |
310 | 310 | } |
311 | 311 | } |
312 | 312 | \fancyhf{} |
313 | 313 | \int_case:nn {\g__bithesis_report_type_int} { |
314 | | - {1} {\fancyhead[R]{\fontsize{10.5pt}{10.5pt}\selectfont{\l__bithesis_value_title_tl}}} |
315 | | - {2} {\fancyhead[R]{\fontsize{10.5pt}{10.5pt}\selectfont{北京理工大学本科生毕业设计(论文)开题报告}}} |
| 314 | + {1} { |
| 315 | + \fancyhead[R]{ |
| 316 | + \fontsize{10.5pt}{10.5pt} |
| 317 | + \selectfont{\l__bithesis_value_title_tl} |
| 318 | + } |
| 319 | + } |
| 320 | + {2} { |
| 321 | + \fancyhead[R]{ |
| 322 | + \fontsize{10.5pt}{10.5pt} |
| 323 | + \selectfont{北京理工大学本科生毕业设计(论文)开题报告} |
| 324 | + } |
| 325 | + } |
316 | 326 | } |
317 | 327 | \fancyfoot[R]{\fontsize{9pt}{9pt}\selectfont{\thepage}} |
318 | 328 | \renewcommand{\headrulewidth}{1pt} |
319 | 329 | \renewcommand{\footrulewidth}{0pt} |
320 | | - |
321 | 330 | \pagestyle{fancy} |
322 | 331 | \setcounter{page}{1} |
323 | | - |
324 | 332 | \cs_set:Npn \baselinestretch {1.53} |
325 | | - |
326 | 333 | \endinput |
327 | 334 | %% |
328 | 335 | %% End of file `bitreport.cls'. |
0 commit comments