Skip to content

Commit 03e05f9

Browse files
feat(GT): 适应2025年三月末新研究生模板
## 升级指南 1. 用新的`bithesis.cls`替换旧的`bithesis.cls`。 2. 将新的`misc/icon_{academic,professional}.jpg`复制到旧的`misc/`。 3. 参考新的`main.tex`重新填写`\BITSetup{ info = {…} }`: - 增加学号`studentId`(用于封皮)、研究生类型`degreeType`(学术型`academic`、专业型`professional`)。 - 若是专业型研究生,增加行业合作导师`industrialMentor{,En}`。 - 若是工程硕博士专项,增加`工程硕博士专项 = true`。 ## 开发说明 ### 已知的未改内容 关于封皮,Word模板原来是两页竖A4,现在是一页横A3;LaTeX 没改,还是两页竖 A4。 这个好像是给打印店做制作黄色封皮用的,一般同学用不到,就先没改。 ### 接口变化 - `\BITSetup`增加`info/degreeType`,设置学术型(academic)或专业型(professional) - 封皮 - 封面:`\MakeCover`增加学号、学院,并更新样式 - 书脊:`\MakePaperBack`增加学术型/专业型图标 - 中英文题名页 - major、degree 的标签改为申请学位、一级学科(学术型)或申请类别、学位领域(专业型) - `\BITSetup`增加`info/industrialMentor{,En}`,设置专业型的行业合作导师 - 右上角的框从“特别类型”改为“学生类型”,同时`\BITSetup`增加`info/工程硕博士专项`选项 - 文档及注释 - 关键词之后加了一句 - 最后增加了《博士学位论文答辩表》的注释 - 利用 FAQ 简化一些注释 Resolves #603 ### 内部的特别修改 - 新定义`\c_@@_auto_tl`,在`\BITSetup`在`\keys_set:`之后增加`\@@_resolve_auto_values:`。这样最终作者直接设置的值,可以与`\BITSetup`的结果不同,从而实现灵活默认值 auto。 - 增加了`info/工程硕博士专项`这个非 ASCII 选项。因为这个词的英文翻译容易与“工学硕博士”混淆。
1 parent e7ed4f8 commit 03e05f9

File tree

5 files changed

+174
-52
lines changed

5 files changed

+174
-52
lines changed

bithesis-doc.tex

+30-7
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ \subsubsection{封面选项} \label{sec:cover}
721721
showSpecialTypeBox = (*(false)|true*)
722722
\end{bitsyntax}
723723

724-
展示「特殊类型」(研究生模板)的那个信息框。
724+
展示「学生类型」(研究生模板)的那个信息框。
725725
因为美观原因默认关闭,和研究生院确认过这个信息框重要程度比较低。
726726
\end{function}
727727

@@ -848,6 +848,15 @@ \subsubsection{论文基本信息}
848848
指导教师。
849849
\end{function}
850850

851+
\begin{function}{info/industrialMentor,info/industrialMentorEn}
852+
\begin{bitsyntax}[emph={[1]industrialMentor,industrialMentorEn}]
853+
industrialMentor = (*\marg{字符串}*)
854+
industrialMentorEn = (*\marg{字符串}*)
855+
\end{bitsyntax}
856+
857+
专业型研究生的行业合作导师。
858+
\end{function}
859+
851860
\begin{function}{info/externalSupervisor}
852861
\begin{bitsyntax}[emph={[1]externalSupervisor}]
853862
externalSupervisor = (*\marg{字符串}*)
@@ -941,12 +950,24 @@ \subsubsection{论文基本信息}
941950
密级。
942951
\end{function}
943952

953+
\begin{function}[added=2025-03-31]{info/工程硕博士专项}
954+
\begin{bitsyntax}[emph={[1]工程硕博士专项}]
955+
工程硕博士专项 = (*<(false)|true>*)
956+
\end{bitsyntax}
957+
958+
学生类型:工程硕博士专项。
959+
960+
不勾选时默认不显示整个内容,可通过 \hyperref[doc/function//cover/showSpecialTypeBox]{|cover/showSpecialTypeBox| 选项}设置。
961+
\end{function}
962+
944963
\begin{function}[added=2024-03-22]{info/crossResearch}
945964
\begin{bitsyntax}[emph={[1]crossResearch}]
946965
crossResearch = (*<(false)|true>*)
947966
\end{bitsyntax}
948967

949-
特殊类型:交叉研究方向。(不勾选时不显示整个内容)
968+
学生类型:交叉研究方向。
969+
970+
不勾选时默认不显示整个内容,可通过 \hyperref[doc/function//cover/showSpecialTypeBox]{|cover/showSpecialTypeBox| 选项}设置。
950971

951972
\textit{此选项一般不需要用户自行修改。}
952973
\end{function}
@@ -956,7 +977,9 @@ \subsubsection{论文基本信息}
956977
internationalStudentUGP = (*<(false)|true>*)
957978
\end{bitsyntax}
958979

959-
特殊类型:政府项目留学生。
980+
学生类型:政府项目留学生。
981+
982+
不勾选时默认不显示整个内容,可通过 \hyperref[doc/function//cover/showSpecialTypeBox]{|cover/showSpecialTypeBox| 选项}设置。
960983

961984
\textit{此选项一般不需要用户自行修改。}
962985
\end{function}
@@ -1518,8 +1541,8 @@ \subsubsection{常量名称覆盖}
15181541
\begin{variable}[added=2023-06-11, updated=2024-07-09]{const/info/degree,const/info/major}
15191542
\begin{bitsyntax}[emph={[1]degree,major}]
15201543
info = {
1521-
degree = (*(申请学位级别)|\marg{字符串}*),
1522-
major = (*专业 | 学科专业 | Degree | \marg{字符串}*),
1544+
degree = (*申请学位 | 申请类别 |\marg{字符串}*),
1545+
major = (*专业 | 学科专业 | 一级学科 | 学位领域 | Degree | \marg{字符串}*),
15231546
},
15241547
\end{bitsyntax}
15251548

@@ -1542,7 +1565,7 @@ \section{正文编写}
15421565

15431566
\subsection{封面及基本信息}
15441567

1545-
\begin{function}{\MakeCover}
1568+
\begin{function}[updated=2025-03-31]{\MakeCover}
15461569

15471570
\textit{封面内容会根据模板选项(具体参见节
15481571
\ref{sec:template-options})中\meta{type=xxx}的值而变化。}
@@ -1578,7 +1601,7 @@ \subsection{封面及基本信息}
15781601
否则,将使用第二个参数替换内容。
15791602
\end{function}
15801603

1581-
\begin{function}{\MakePaperBack}
1604+
\begin{function}[updated=2025-03-31]{\MakePaperBack}
15821605

15831606
绘制书脊。
15841607
\end{function}

bithesis.dtx

+99-23
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,8 @@
345345
{classification} {中图分类号:},
346346
{classified_level} {密级},
347347
{type} {种类},
348-
{special_type} {特别类型},
348+
{special_type} {学生类型},
349+
{engineering_special_plan} {工程硕博士专项},
349350
{cross_research} {交叉研究方向},
350351
{international_student_ugp} {政府项目留学生},
351352
}
@@ -453,14 +454,16 @@
453454
% \begin{macrocode}
454455
\clist_map_inline:nn
455456
{
457+
% TODO: 自动实现汉字均排
456458
{author} {作\quad\quad\quad 名} {Candidate~Name},
457459
{school} {学\quad\quad\quad 称} {School~or~Department},
458460
{supervisor} {指\quad\quad\quad 师} {Faculty~Mentor},
461+
{industrial_mentor} {行\smallgap: 业\smallgap: 合\smallgap: 作\smallgap: 导\smallgap: 师} {Industry~Collaboration~Mentor},
459462
{chairman} {答辩委员会主席} {Chair,~Thesis~Committee},
460-
{degree}
461-
{申\quad\quad\quad 位}
462-
{Degree~Applied},
463-
{major} {\quad \hspace{0.8ex} / \hspace{0.8ex} 类\quad } {Major},
463+
% degree、major 的中文与 degreeType 有关,此处以 academic 为准,其余情况通过 \c_@@_auto_tl 处理
464+
% 英文倒是无关。
465+
{degree} {申\quad\quad\quad 位} {Degree~Applied},
466+
{major} {\quad \quad\quad } {Major},
464467
{institute}
465468
{学\smallgap: 位\smallgap: 授\smallgap: 予\smallgap: 单\smallgap: 位}
466469
{Degree~by},
@@ -545,6 +548,13 @@
545548
%
546549
% \subsubsection{l3keys 接口键值对定义}
547550
%
551+
% 定义 |\c_@@_auto_tl|
552+
% 选项设为它时,表示智能默认值,稍后由 |\@@_resolve_auto_values:| 根据其它信息自动填充。
553+
% 参考 https://typst.app/docs/reference/foundations/auto/ 的设计。
554+
% \begin{macrocode}
555+
\tl_const:Nn \c_@@_auto_tl { BIThesis-auto-magic }
556+
% \end{macrocode}
557+
%
548558
% 定义 |bithesis| 键值对类。
549559
% \begin{macrocode}
550560
\keys_define:nn { bithesis }
@@ -669,7 +679,15 @@
669679
% UDC 分类号,研究生学位论文使用
670680
UDC .tl_set:N = \l_@@_value_udc_tl,
671681
UDC .initial:n = {540(示例)},
682+
% 学术型/专业型,研究生学位论文使用
683+
degreeType .choice:,
684+
degreeType .choices:nn = {professional, academic} {
685+
\tl_set:Nn \l_@@_value_degree_type_tl {#1}
686+
},
687+
degreeType .initial:n = academic,
672688
chairman .tl_set:N = \l_@@_value_chairman_tl,
689+
industrialMentor .tl_set:N = \l_@@_value_industrial_mentor_tl,
690+
industrialMentorEn .tl_set:N = \l_@@_value_industrial_mentor_en_tl,
673691
degree .tl_set:N = \l_@@_value_degree_tl,
674692
degreeEn .tl_set:N = \l_@@_value_degree_en_tl,
675693
institute .tl_set:N = \l_@@_value_institute_tl,
@@ -686,10 +704,13 @@
686704
defenseDateEn .initial:n = {June,~2019~(example)},
687705
% 因为默认不显示,所以不需要设置初始值。
688706
classifiedLevel .tl_set:N = \l_@@_value_classified_level_tl,
689-
% 特别类型-交叉研究方向
707+
% 学生类型-工程硕博士专项
708+
工程硕博士专项 .bool_set:N = \l_@@_value_engineering_special_plan_bool,
709+
工程硕博士专项 .initial:n = {false},
710+
% 学生类型-交叉研究方向
690711
crossResearch .bool_set:N = \l_@@_value_cross_research_bool,
691712
crossResearch .initial:n = {false},
692-
% 特别类型-政府项目留学生
713+
% 学生类型-政府项目留学生
693714
internationalStudentUGP .bool_set:N = \l_@@_value_international_student_ugp_bool,
694715
internationalStudentUGP .initial:n = {false},
695716
}
@@ -791,17 +812,9 @@
791812
\keys_define:nn { bithesis / const / info }
792813
{
793814
degree .tl_set:N = \g_@@_const_info_degree_tl,
794-
degree .initial:n = {
795-
\c_@@_graduate_label_degree_tl
796-
},
815+
degree .initial:n = {\c_@@_auto_tl},
797816
major .tl_set:N = \g_@@_const_info_major_tl,
798-
major .initial:n = {
799-
\@@_if_graduate:TF {
800-
\c_@@_graduate_label_major_tl
801-
} {
802-
\@@_get_const:N {major}
803-
}
804-
},
817+
major .initial:n = {\c_@@_auto_tl},
805818
}
806819
\keys_define:nn { bithesis / const / heading }
807820
{
@@ -927,7 +940,33 @@
927940
}
928941
% \end{macrocode}
929942
%
930-
% \subsubsection{处理模板选项}
943+
% \subsubsection{l3keys 键值对预处理}
944+
%
945+
% 计算 auto 并替换为标准的值
946+
% \begin{macrocode}
947+
\cs_new:Npn \@@_resolve_auto_values: {
948+
\tl_if_eq:NnT \g_@@_const_info_degree_tl {\c_@@_auto_tl} {
949+
\tl_if_eq:NnTF \l_@@_value_degree_type_tl {academic} {
950+
\keys_set:nn {bithesis} {const/info/degree = \c_@@_graduate_label_degree_tl}
951+
} {
952+
\keys_set:nn {bithesis} {const/info/degree = 申\quad\quad\quad 别}
953+
}
954+
}
955+
\tl_if_eq:NnT \g_@@_const_info_major_tl {\c_@@_auto_tl} {
956+
\@@_if_graduate:TF {
957+
\tl_if_eq:NnTF \l_@@_value_degree_type_tl {academic} {
958+
\keys_set:nn {bithesis} {const/info/major = \c_@@_graduate_label_major_tl}
959+
} {
960+
\keys_set:nn {bithesis} {const/info/major = 学\quad\quad\quad 域}
961+
}
962+
} {
963+
\keys_set:nn {bithesis} {const/info/major = \@@_get_const:N {major}}
964+
}
965+
}
966+
}
967+
% \end{macrocode}
968+
%
969+
% \subsubsection{应用模板选项}
931970
%
932971
% 英文模板需要开启 ctexbook 宏包的英文选项。
933972
% \begin{macrocode}
@@ -2030,8 +2069,17 @@
20302069
\vspace*{65mm}
20312070
{\heiti\zihao{-2} \l_@@_value_title_tl}
20322071
\vskip 60mm
2033-
% 黑体 小三
2034-
{\heiti \zihao{-3} \@@_secret_info:nn{\l_@@_value_author_tl}{\g_@@_const_substitute_symbol_tl~\g_@@_const_substitute_symbol_tl~\g_@@_const_substitute_symbol_tl}}
2072+
{
2073+
% 渲染信息。
2074+
\clist_set:Nn \l_@@_input_clist {
2075+
{姓名:} {\@@_secret_info:nn{\l_@@_value_author_tl}{\g_@@_const_substitute_symbol_tl\g_@@_const_substitute_symbol_tl\g_@@_const_substitute_symbol_tl}},
2076+
{学号:} {\@@_secret_info:N \l_@@_value_student_id_tl},
2077+
{学院:} {\l_@@_value_school_tl},
2078+
}
2079+
\linespread{2.0}\selectfont
2080+
% 黑体 小三
2081+
\heiti \zihao{-3} \@@_render_cover_entry:n \l_@@_input_clist
2082+
}
20352083
\vskip 10mm
20362084
% 黑体 小三
20372085
{\heiti \zihao{-3} \l_@@_cover_date_tl}
@@ -2043,6 +2091,12 @@
20432091
% \begin{macro}{\make_paper_back:}
20442092
% 制作书脊。
20452093
% \begin{macrocode}
2094+
% TODO: 使用统一方式警告
2095+
\msg_new:nnn { bithesis } { paper-back/missing-degree-type-icon-file }
2096+
{
2097+
Failed~to~find~the~file~for~degree~type~in~the~paper~back:~#1.\\
2098+
Please~download~from~https://github.com/BITNP/BIThesis/blob/main/templates/graduate-thesis/ #1.
2099+
}
20462100
\cs_new:Npn \make_paper_back: {
20472101
\cleardoublepage
20482102
\currentpdfbookmark{书脊}{frontmatter:paperback}
@@ -2052,6 +2106,17 @@
20522106
\linespread{1.1}\selectfont
20532107
\begin{minipage}[c][19.7cm]{2em}
20542108
\centering
2109+
{
2110+
\tl_new:N \l_@@_icon_path_tl
2111+
\tl_set:Nx \l_@@_icon_path_tl { misc/icon_ \l_@@_value_degree_type_tl .jpg }
2112+
\file_if_exist:nTF {\l_@@_icon_path_tl} {
2113+
\includegraphics[width=1.5em]{\l_@@_icon_path_tl}
2114+
} {
2115+
\msg_warning:nnV {bithesis} {paper-back/missing-degree-type-icon-file} {\l_@@_icon_path_tl}
2116+
}
2117+
}
2118+
\vspace{1em plus 1fill}
2119+
\par
20552120
{
20562121
\heiti\zihao{3}
20572122
\tl_if_blank:VTF \l_@@_value_vertical_title_tl
@@ -2085,9 +2150,9 @@
20852150

20862151
\hfill
20872152

2088-
% 以下内容是「特别类型」的内容,
2153+
% 以下内容是「学生类型」的内容,
20892154
% 在没有勾选的时候隐藏。
2090-
\bool_if:nT {\l_@@_cover_show_special_type_box_bool || \l_@@_value_international_student_ugp_bool || \l_@@_value_cross_research_bool} {
2155+
\bool_if:nT {\l_@@_cover_show_special_type_box_bool || \l_@@_value_international_student_ugp_bool || \l_@@_value_cross_research_bool || \l_@@_value_engineering_special_plan_bool} {
20912156
\begin{minipage}[t]{0.48\textwidth}
20922157
\vspace{-12pt}
20932158
\begin{flushright}
@@ -2097,6 +2162,12 @@
20972162
\heiti \zihao{-4}
20982163
\scalebox{1.1}\BigStar{}\hspace{4pt} \c_@@_label_special_type_tl\\
20992164

2165+
{
2166+
\zihao{4}
2167+
\bool_if:NTF \l_@@_value_engineering_special_plan_bool {\boxcheck:} {\boxempty:}
2168+
}
2169+
\hspace{1pt}\c_@@_label_engineering_special_plan_tl\\
2170+
21002171
{
21012172
\zihao{4}
21022173
\bool_if:NTF \l_@@_value_cross_research_bool {\boxcheck:} {\boxempty:}
@@ -2151,6 +2222,7 @@
21512222
{\c_@@_graduate_label_author_tl} {\@@_secret_info:nn{\l_@@_value_author_tl}{\g_@@_const_substitute_symbol_tl\g_@@_const_substitute_symbol_tl\g_@@_const_substitute_symbol_tl}},
21522223
{\c_@@_graduate_label_school_tl} {\l_@@_value_school_tl},
21532224
{\c_@@_graduate_label_supervisor_tl} {\@@_secret_info:N{\l_@@_value_supervisor_tl}},
2225+
{\c_@@_graduate_label_industrial_mentor_tl} {\@@_secret_info:N{\l_@@_value_industrial_mentor_tl}},
21542226
{\c_@@_graduate_label_chairman_tl} {\@@_secret_info:N{\l_@@_value_chairman_tl}},
21552227
{\g_@@_const_info_degree_tl} {\l_@@_value_degree_tl},
21562228
{\g_@@_const_info_major_tl} {\l_@@_value_major_tl},
@@ -2209,6 +2281,7 @@
22092281
{\c_@@_graduate_label_author_en_tl} {\@@_secret_info:N{\l_@@_value_author_en_tl}},
22102282
{\c_@@_graduate_label_school_en_tl} {\l_@@_value_school_en_tl},
22112283
{\c_@@_graduate_label_supervisor_en_tl} {\@@_secret_info:N{\l_@@_value_supervisor_en_tl}},
2284+
{\c_@@_graduate_label_industrial_mentor_en_tl} {\@@_secret_info:N{\l_@@_value_industrial_mentor_en_tl}},
22122285
{\c_@@_graduate_label_chairman_en_tl} {\@@_secret_info:N{\l_@@_value_chairman_en_tl}},
22132286
{\c_@@_graduate_label_degree_en_tl} {\l_@@_value_degree_en_tl},
22142287
{\c_@@_graduate_label_major_en_tl} {\l_@@_value_major_en_tl},
@@ -2317,7 +2390,10 @@
23172390
% 提供用户配置的接口。
23182391
% \begin{macrocode}
23192392
\DeclareDocumentCommand \BITSetup { m }
2320-
{ \keys_set:nn { bithesis } { #1 }}
2393+
{
2394+
\keys_set:nn { bithesis } { #1 }
2395+
\@@_resolve_auto_values:
2396+
}
23212397
% \end{macrocode}
23222398
% \end{macro}
23232399
%

0 commit comments

Comments
 (0)