-
Notifications
You must be signed in to change notification settings - Fork 5
/
latex123.cls
303 lines (253 loc) · 7.82 KB
/
latex123.cls
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
% --------------------------------------------------
% 01 類別宣告(Class Declaration)
% --------------------------------------------------
% 告知編譯器當前的 LaTeX 版本
% Must indicate what's the release of LaTeX we are using.
\NeedsTeXFormat{LaTeX2e}
% 定義類別名稱與敘述
% Define the name and description of class.
\ProvidesClass{latex123}[2020/12/01 v2.0 LaTeX123]
% --------------------------------------------------
% 02 基礎設定(Basic Settings)
% --------------------------------------------------
% [引入套件]
% Include required packages for basic settings.
\RequirePackage{kvdefinekeys, kvsetkeys, kvoptions}
\RequirePackage{iftex}
\RequirePackage{ifthen}
% [定義變數]
% Define essential variables.
% 變數: 路徑
% Variables: Path
\newcommand{\cls@path@font}{./fonts/english/}
\newcommand{\cls@path@cjkfont}{./fonts/chinese/}
% --------------------------------------------------
% 03 選項設定(Options Settings)
% --------------------------------------------------
% 繼承類別選項(將未定義的傳給基礎文檔)
% Option Declaration (pass tundefined options to father class)
\DeclareDefaultOption{
\PassOptionsToClass{\CurrentOption}{report}
}
% 處理選項並載入基礎文檔
% Terminates the options processing and loads the basic class.
\LoadClass[a4paper, 12pt]{report}
% --------------------------------------------------
% 04 載入套件 (Include Packages)
% --------------------------------------------------
% [載入套件]
\RequirePackage[BoldFont,SlantFont]{xeCJK}
\RequirePackage{fontspec}
\RequirePackage[dvipsnames]{xcolor}
\RequirePackage[sf]{titlesec}
\RequirePackage{titletoc}
\RequirePackage{fancyhdr}
\RequirePackage{graphicx}
\RequirePackage{tikz}
% [定義顏色]
\definecolor{steelblue}{rgb}{0.275, 0.510, 0.710}
\definecolor{lightpink}{rgb}{0.991, 0.711, 0.754}
\definecolor{darkblue}{rgb}{0.000, 0.000, 0.500}
\definecolor{darkgreen}{rgb}{0.000, 0.390, 0.000}
\definecolor{mygray}{gray}{0.92}
\definecolor{heavygray}{gray}{0.50}
\definecolor{lightgray}{gray}{0.80}
% --------------------------------------------------
% 05 自訂命令(Custom Commands)
% --------------------------------------------------
% [添加路徑]
\newcommand\appendgraphicspath[1]{
\g@addto@macro\Ginput@path{#1}
}
% [標題格式]
% Header Format
\newcommand{\myheader}[1]{
\textcolor{darkblue}{#1}
}
% [生成封面]
% Generate the cover page
%
\newcommand{\makecover}{
\begin{titlepage}
% 標題資訊
\vfill
\begin{flushright}
\textcolor{steelblue}{
\fontsize{36}{20pt}\selectfont
\hwyk 大家來學 \textbf{{\LaTeX}}
}
\end{flushright}
% 版本資訊
\textcolor{lightpink}{\rule{\textwidth}{.256ex}}
\begin{flushleft}
Version 1.0 \\
\today
\end{flushleft}
% 封面圖片
\vfill
\hspace*{3em}\includegraphics[scale=.75]{cover}
\vfill
% 作者資訊
\begin{flushright}
By Edward G.J.\ Lee 李果正 \\
Email : \href{mailto:[email protected]}{\ttfamily [email protected]} \\
本教學文件之製作,部份接受下列計劃補助: \\
行政院研考會委辦 「政府機關資料文件交換之電子檔案格式應用研究」
\end{flushright}
\end{titlepage}
}
% [生成目錄]
% Generate table of contents page.
%
\renewcommand{\contentsname}{目錄}
\newcommand{\maketableofcontents}{
% 目錄部份頁碼以羅馬數字計數
% \cleardoublepage
% \phantomsection
\pagenumbering{roman}
\setcounter{page}{1}
\tableofcontents
\newpage
}
% [正文開始]
% \mainmatter
%
\newcommand{\mainmatter}{
% 正文部分頁碼以阿拉伯數字計數
\cleardoublepage
\pagenumbering{arabic}
\setcounter{page}{1}
% 調整段落間距離,置於 preamble 區會影響目錄行距,
% 因此置於正文區
\parskip=1.618ex
}
% --------------------------------------------------
% 06 套件設定 (Package Settings)
% --------------------------------------------------
% [圖表目錄]
\graphicspath{{./figures/}}
% [字體設定]
% - \setmainfont{} 襯線字體
% - \setsansfont{} 非襯字體
% - \setmonofont{} 等寬字體
% - \setCJKmainfont{} 中文襯線字體
% - \setCJKsansfont{} 中文非襯字體
% - \setCJKmonofont{} 中文等寬字體
%
% \setmainfont{Times New Roman}[
% Path = \latex123@path@font ,
% Extension = .ttf ,
% BoldFont = *-Bold ,
% ItalicFont = *-Italic ,
% BoldItalicFont = *-BoldItalic, ]
% 設定主要字體
\setCJKmainfont{HanWangMingMedium}[
Path = \cls@path@cjkfont ,
Extension = .ttf ,
BoldFont = HanWangMingHeavy , ]
% 王漢宗中明體 \hwmm
\newCJKfontfamily{\hwmm}[
Path = \cls@path@cjkfont ,
Extension = .ttf , ]{HanWangMingMedium}
% 王漢宗特明體 \hwmh
\newCJKfontfamily{\hwmh}[
Path = \cls@path@cjkfont ,
Extension = .ttf , ]{HanWangMingHeavy}
% 王漢宗顏楷體 \hwyk
\newCJKfontfamily{\hwyk}[
Path = \cls@path@cjkfont ,
Extension = .ttf , ]{HanWangYanKai}
% [頁眉格式]
% 左章右節,每一頁皆相同。不使用 twoside 選項,則每一頁皆視為右頁。
\fancyhead[R]{\textsl{\footnotesize\textcolor{heavygray}\rightmark}}
\fancyhead[L]{\textsl{\footnotesize\textcolor{heavygray}\leftmark}}
% [標題格式]
% \titleformat{command}[shape]{format}{label}{sep}{before}[after]
% - command: 代表欲重新定義之標題階層,包含 \part, \chapter, \section, \paragraph
% - shape: 設定段落形狀,可選參數有 hang, block, display
% - format: 定義標題外觀,如:位置、字體大小粗細…
% - label: 定義標籤前綴標號
% - sep: 定義標號與標題內容間隔距離
% - before: 標題內容前增加文字
% - after: 標題內容後增加文字
\titlespacing{\chapter}{0pt}{0pt}{7ex}
% chapter
\titleformat
{\chapter}[display]
{\normalfont\LARGE\sffamily\hwyk}
{\filleft\LARGE \myheader{第\ \thechapter\ 章}}
{1ex}
{\titlerule\vspace{.5ex}\filright\LARGE\myheader}
[\vspace{.5ex} \titlerule]
% section
\titleformat
{\section}[hang]
{\Large\sf\hwyk}
{\myheader\thesection}
{1em}
{\myheader}
% subsection
\titleformat
{\subsection}[hang]
{\large\sffamily\hwyk}
{\myheader\thesubsection}
{1em}
{\myheader}
% subsubsection
\titleformat
{\subsubsection}[hang]
{\normalsize\sffamily\hwyk}
{\myheader\thesubsubsection}
{1em}
{\myheader}
% [目錄格式]
%
\titlecontents
{chapter}[2em]
{\large\sf\hwyk\addvspace{-0.1em}}
{\contentslabel{2em}}
{}
{\titlerule*[0.8pc]{.}\contentspage}
\titlecontents
{section}[4em]
{\small\addvspace{-0.2em}}
{\contentslabel{3em}}
{}
{\titlerule*[0.8pc]{.}\contentspage}
\titlecontents
{subsection}[6em]
{\small\addvspace{-0.2em}}
{\contentslabel{3em}}
{}
{\titlerule*[0.8pc]{.}\contentspage}
% --------------------------------------------------
% 07 其他設定 (Others)
% --------------------------------------------------
% [背景顏色]
\special{ pdf: bgcolor [ 1.00 0.98 0.95 ] }
% [調整字距]
\renewcommand{\CJKglue}{\hskip -0.3pt plus 0.08\baselineskip}
% [調整行距]
\linespread{1.382}
% [表格行距]
\renewcommand{\arraystretch}{1.2}
% [段落縮排]
\parindent=0pt % 設置為 0 表示不縮排
%% 縮小 quote 為正常行距,並使用較小字體
\renewenvironment{quote}{
\list{}{\topsep 0ex\parsep 0ex\setlength\leftmargin{1.5em}%
\rightmargin\leftmargin}\item\relax\linespread{1.0}\small
}%
{\endlist}
% [腳注行距]
% 由於把行距加大,要把腳注的行距縮成預設值,此設定採自
% 吳聰敏教授的《cwTeX 排版系統》修訂二版一書,頁 143
\let\oldfootnote\footnote
\renewcommand\footnote[1]{\oldfootnote{\renewcommand\baselinestretch{1.0}%
\large\footnotesize\ignorespaces#1}}
\addtolength{\footnotesep}{3pt}
% [版面調整]
\addtolength{\textwidth}{1in}
\addtolength{\oddsidemargin}{-.5in}
\addtolength{\textheight}{1in}
\addtolength{\topmargin}{-.5in}