1
+ # import " ../component/title.typ" : detailed-sign-field , per-line , approved-and-agreed-fields
2
+ # import " ../utils.typ" : sign-field , fetch-field
3
+
4
+ # let arguments (.. args , year : auto ) = {
5
+ let args = args . named ()
6
+ args . organization = fetch-field (
7
+ args . at (" organization" , default : none ),
8
+ default : (
9
+ full : " Московский авиационный институт" ,
10
+ short : " Национальный исследовательский университет" ),
11
+ (" *full" , " short" ),
12
+ hint : " организации"
13
+ )
14
+ args . approved-by = fetch-field (
15
+ args . at (" approved-by" , default : none ),
16
+ (" name*" , " position*" , " year" ),
17
+ default : (year : auto ),
18
+ hint : " согласования"
19
+ )
20
+ args . agreed-by = fetch-field (
21
+ args . at (" agreed-by" , default : none ),
22
+ (" name*" , " position*" , " year" ),
23
+ default : (year : auto ),
24
+ hint : " утверждения"
25
+ )
26
+ args . stage = fetch-field (args . at (
27
+ " stage" , default : none ),
28
+ (" type*" , " num" ),
29
+ hint : " этапа"
30
+ )
31
+ args . manager = fetch-field (
32
+ args . at (" manager" , default : none ),
33
+ (" position*" , " name*" ),
34
+ hint : " руководителя"
35
+ )
36
+
37
+ if args . approved-by . year == auto {
38
+ args . approved-by . year = year
39
+ }
40
+ if args . agreed-by . year == auto {
41
+ args . agreed-by . year = year
42
+ }
43
+ return args
44
+ }
45
+
46
+ # let template (
47
+ ministry : none ,
48
+ organization : (
49
+ full : " Московский авиационный институт" ,
50
+ short : " Национальный исследовательский университет"
51
+ ),
52
+ institute : (number : none , name : none ),
53
+ department : (number : none , name : none ),
54
+ udk : none ,
55
+ research-number : none ,
56
+ report-number : none ,
57
+ approved-by : (name : none , position : none , year : auto ),
58
+ agreed-by : (name : none , position : none , year : none ),
59
+ report-type : " Отчёт" ,
60
+ about : " О лабораторной работе" ,
61
+ part : none ,
62
+ bare-subject : false ,
63
+ research : none ,
64
+ subject : none ,
65
+ stage : none ,
66
+ manager : (position : none , name : none ),
67
+ performer : none ,
68
+ ) = {
69
+ grid (
70
+ columns : (0.2fr , 1fr ),
71
+ gutter : 5pt ,
72
+ inset : 0pt ,
73
+ grid . cell (align : top + center )[# image (" logo/mai.svg" , width : 100% )],
74
+ grid . cell (align : horizon )[
75
+ # per-line (
76
+ indent : none ,
77
+ ministry ,
78
+ (value : upper (text (size : 18pt )[# organization . full ]),
79
+ when-present : organization . full ),
80
+ (value : [# upper (organization . short )],
81
+ when-present : organization . short ),
82
+ )
83
+ ]
84
+ )
85
+
86
+ v (1fr )
87
+
88
+ per-line (
89
+ indent : v (2fr ),
90
+ force-indent : true ,
91
+ align : center ,
92
+ (value : [Институт №# institute . number – «# institute . name »],
93
+ when-present : (institute . number , institute . name )),
94
+ (value : [Кафедра # department . number – «# department . name »],
95
+ when-present : (department . number , department . name )),
96
+ )
97
+
98
+ per-line (
99
+ align : left ,
100
+ (value : [УДК: # udk ], when-present : udk ),
101
+ (value : [Рег. №: # research-number ], when-present : research-number ),
102
+ (value : [Рег. № ИКРБС: # report-number ], when-present : report-number ),
103
+ )
104
+
105
+ approved-and-agreed-fields (approved-by , agreed-by )
106
+
107
+ per-line (
108
+ align : center ,
109
+ indent : v (2fr ),
110
+ (value : upper (report-type ), when-present : report-type ),
111
+ (value : upper (about ), when-present : about ),
112
+ (value : research , when-present : research ),
113
+ (value : [по теме:], when-rule : not bare-subject ),
114
+ (value : upper (subject ), when-present : subject ),
115
+ (
116
+ value : [(# stage . type )],
117
+ when-rule : (stage . type != none and stage . num == none )),
118
+ (
119
+ value : [(# stage . type , этап # stage . num )],
120
+ when-present : (stage . type , stage . num )
121
+ ),
122
+ (value : [\ Книга # part ], when-present : part ),
123
+ )
124
+
125
+ if manager . name != none {
126
+ sign-field (manager . at (" name" ), [Принял:\ # manager . at (" position" )])
127
+ }
128
+
129
+ if performer != none {
130
+ sign-field (performer . at (" name" , default : none ), [Выполнил:\ # performer . at (" position" , default : none )], part : performer . at (" part" , default : none ))
131
+ }
132
+
133
+ v (0.5fr )
134
+ }
0 commit comments