OSDN Git Service

fbcfa45f37b87d89eda99d8068d655c4e4ae4022
[luatex-ja/luatexja.git] / src / addons / luatexja-preset.sty
1 % luatexja-preset.sty
2 \ProvidesPackage{luatexja-preset}[2013/10/26 Japanese font presets]
3 %% Sync with PXchfon 0.6a
4
5 \RequirePackage{expl3}
6 \RequirePackage{luatexja-fontspec}
7 \ExplSyntaxOn
8
9 %%%% message
10
11 \bool_new:N \l_ltjpreset_bold_bool % bold
12 \bool_set_false:N \l_ltjpreset_bold_bool
13 \DeclareOption{bold}  {\bool_set_true:N \l_ltjpreset_bold_bool}
14 \DeclareOption{nobold}{\bool_set_false:N \l_ltjpreset_bold_bool}
15
16 \bool_new:N \l_ltjpreset_expert_bool % expert
17 \bool_set_false:N \l_ltjpreset_expert_bool
18 \DeclareOption{expert}  {\bool_set_true:N \l_ltjpreset_expert_bool}
19 \DeclareOption{noexpert}{\bool_set_false:N \l_ltjpreset_expert_bool}
20
21 \int_new:N \l_ltjpreset_deluxe_int % expert
22 \int_set:Nn \l_ltjpreset_deluxe_int { 0 }
23 \DeclareOption{deluxe}{\int_set:Nn \l_ltjpreset_deluxe_int { 2 }}   % 6 fonts
24 \DeclareOption{nodeluxe}{\int_set:Nn \l_ltjpreset_deluxe_int { 0 }} % 2 fonts
25
26 % scale
27 \msg_new:nnn { luatexja-preset }{ scale }{
28   Japanese~fonts~will~be~scaled~by~\fp_use:N \g_ltj_fontspec_scale_fp.
29 }
30 \msg_warning:nn { luatexja-preset }{ scale }
31
32 % JFM
33 \cs_set:Npn \ltjpreset_use_jfm: {ujis}  % 使用する JFM
34 %%% \DeclareOption{min}{\cs_set:Npn  \ltjpreset_use_jfm: {min}} % min
35 %%% ↑jfm-min.lua が横組み・縦組み専用仮名に追いついていないので使用禁止
36 \DeclareOption{jis}{\cs_set:Npn  \ltjpreset_use_jfm: {jis}}     % jis
37 \DeclareOption{ujis}{\cs_set:Npn  \ltjpreset_use_jfm: {ujis}}   % ujis
38
39 % 漢字字形
40 \tl_new:N \l_ltjpreset_kanji_shape_tl
41 \DeclareOption{90jis}{  \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS1990 }} % 90jis
42 \DeclareOption{jis2004}{\tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS2004 }} % jis2004
43
44 % font preset
45 \bool_new:N \l_ltjpreset_office_bool  % MS Office の HG 系フォントを使っているか
46 \bool_new:N \l_ltjpreset_noembed_bool % 非埋込か
47 \clist_new:N \l_ltjpreset_font_list
48
49 \cs_new:Npn \ltjpreset_set_uni:nn #1#2 {
50   \ltjpreset_set_multi:n { #1, #1, #2, #2, #2, #2, #1 }
51 }
52 \cs_new:Npn \ltjpreset_set_multi:n #1 {
53   \clist_set:Nn \l_ltjpreset_font_list { #1 }
54   \bool_set_false:N \l_ltjpreset_office_bool
55   \bool_set_false:N \l_ltjpreset_noembed_bool
56 }
57 \cs_new:Npn \ltjpreset_set_office:nn #1 #2{
58   \ltjpreset_set_multi:n {
59     #1, HGMinchoE ,           % mc/m, mc/bx
60     HGGothicM , HGGothicE ,   % gt/m, gt/bx (multiweight))
61     #2 , HGSoeiKakugothicUB , % gt/m (uni), gt/eb
62     HGMaruGothicMPRO          % mg/m
63   }
64   \bool_set_true:N \l_ltjpreset_office_bool
65 }
66
67 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
68 %%% OBSOLETE
69 % kozuka
70 \DeclareOption{kozuka4}{
71   \ltjpreset_set_multi:n {
72     KozMinPro-Regular.otf , KozMinPro-Bold.otf, % mc/m, mc/bx
73     KozGoPro-Regular.otf  , KozGoPro-Bold.otf,  % gt/m, gt/bx (multiweight))
74     KozGoPro-Medium.otf   , KozGoPro-Heavy.otf, % gt/m (uni), gt/eb
75     KozGoPro-Heavy.otf                          % mg/m
76   }
77 }
78 \DeclareOption{kozuka6}{
79   \ltjpreset_set_multi:n {
80     KozMinProVI-Regular.otf , KozMinProVI-Bold.otf, % mc/m, mc/bx
81     KozGoProVI-Regular.otf  , KozGoProVI-Bold.otf,  % gt/m, gt/bx (multiweight))
82     KozGoProVI-Medium.otf   , KozGoProVI-Heavy.otf, % gt/m (uni), gt/eb
83     KozGoProVI-Heavy.otf                            % mg/m
84   }
85 }
86 \DeclareOption{kozuka6n}{
87   \ltjpreset_set_multi:n {
88     KozMinPr6N-Regular.otf , KozMinPr6N-Bold.otf, % mc/m, mc/bx
89     KozGoPr6N-Regular.otf  , KozGoPr6N-Bold.otf,  % gt/m, gt/bx (multiweight))
90     KozGoPr6N-Medium.otf   , KozGoPr6N-Heavy.otf, % gt/m (uni), gt/eb
91     KozGoPr6N-Heavy.otf                           % mg/m
92   }
93 }
94
95 % hiragino
96 \DeclareOption{hiragino}{
97   \ltjpreset_set_multi:n {
98     HiraMinPro-W3.otf      , HiraMinPro-W6.otf,   % mc/m, mc/bx
99     HiraKakuPro-W3.otf     , HiraKakuPro-W6.otf,  % gt/m, gt/bx (multiweight))
100     HiraKakuPro-W3.otf     , HiraKakuStd-W8.otf,  % gt/m (uni), gt/eb
101     HiraMaruPro-W4.otf                            % mg/m
102   }
103 }
104 \DeclareOption{hiraginon}{
105   \ltjpreset_set_multi:n {
106     HiraMinProN-W3.otf      , HiraMinProN-W6.otf,   % mc/m, mc/bx
107     HiraKakuProN-W3.otf     , HiraKakuProN-W6.otf,  % gt/m, gt/bx (multiweight))
108     HiraKakuProN-W3.otf     , HiraKakuStdN-W8.otf,  % gt/m (uni), gt/eb
109     HiraMaruProN-W4.otf                             % mg/m
110   }
111 }
112
113 % morisawa?
114 \DeclareOption{morisawa4}{
115   \ltjpreset_set_multi:n {
116     A-OTF-RyuminPro-Light.otf , A-OTF-FutoMinA101Pro-Bold.otf ,    % mc/m, mc/bx
117     A-OTF-GothicBBBPro-Medium.otf , A-OTF-FutoGoB101Pro-Bold.otf , % gt/m, gt/bx (multiweight))
118     A-OTF-GothicBBBPro-Medium.otf , A-OTF-MidashiGoPro-MB31.otf ,  % gt/m (uni), gt/eb
119     A-OTF-Jun101Pro-Light.otf % mg/m
120   }
121 }
122 \DeclareOption{morisawa6n}{
123   \ltjpreset_set_multi:n {
124     A-OTF-RyuminPr6N-Light.otf , A-OTF-FutoMinA101Pr6N-Bold.otf ,    % mc/m, mc/bx
125     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-FutoGoB101Pr6N-Bold.otf , % gt/m, gt/bx (multiweight))
126     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-MidashiGoPr6N-MB31.otf ,  % gt/m (uni), gt/eb
127     A-OTF-Jun101Pr6N-Light.otf                                       % mg/m
128   }
129 }
130
131 \DeclareOption{ipaex-dx}{\ltjpreset_set_office:nn { IPAExMincho } { IPAExGothic }}
132 \DeclareOption{ipa-dx}  {\ltjpreset_set_office:nn { IPAMincho } { IPAGothic }}
133 \DeclareOption{ms-dx}   {\ltjpreset_set_office:nn { MS-Mincho } { MS-Gothic }}
134 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
135
136
137
138 % 小塚 (Adobe)
139 \DeclareOption{kozuka-pro}{
140   \ltjpreset_set_multi:n {
141     KozMinPro-Regular.otf , KozMinPro-Bold.otf, % mc/m, mc/bx
142     KozGoPro-Regular.otf  , KozGoPro-Bold.otf,  % gt/m, gt/bx (multiweight))
143     KozGoPro-Medium.otf   , KozGoPro-Heavy.otf, % gt/m (uni), gt/eb
144     KozGoPro-Heavy.otf                          % mg/m
145   }
146 }
147 \DeclareOption{kozuka-pr6}{
148   \ltjpreset_set_multi:n {
149     KozMinProVI-Regular.otf , KozMinProVI-Bold.otf, % mc/m, mc/bx
150     KozGoProVI-Regular.otf  , KozGoProVI-Bold.otf,  % gt/m, gt/bx (multiweight))
151     KozGoProVI-Medium.otf   , KozGoProVI-Heavy.otf, % gt/m (uni), gt/eb
152     KozGoProVI-Heavy.otf                            % mg/m
153   }
154 }
155 \DeclareOption{kozuka-pr6n}{
156   \ltjpreset_set_multi:n {
157     KozMinPr6N-Regular.otf , KozMinPr6N-Bold.otf, % mc/m, mc/bx
158     KozGoPr6N-Regular.otf  , KozGoPr6N-Bold.otf,  % gt/m, gt/bx (multiweight))
159     KozGoPr6N-Medium.otf   , KozGoPr6N-Heavy.otf, % gt/m (uni), gt/eb
160     KozGoPr6N-Heavy.otf                           % mg/m
161   }
162 }
163
164 % ヒラギノ (OSX)
165 \DeclareOption{hiragino-pro}{
166   \ltjpreset_set_multi:n {
167     HiraMinPro-W3.otf      , HiraMinPro-W6.otf,   % mc/m, mc/bx
168     HiraKakuPro-W3.otf     , HiraKakuPro-W6.otf,  % gt/m, gt/bx (multiweight))
169     HiraKakuPro-W6.otf     , HiraKakuStd-W8.otf,  % gt/m (uni), gt/eb
170     HiraMaruPro-W4.otf                            % mg/m
171   }
172 }
173 \DeclareOption{hiragino-pron}{
174   \ltjpreset_set_multi:n {
175     HiraMinProN-W3.otf      , HiraMinProN-W6.otf,   % mc/m, mc/bx
176     HiraKakuProN-W3.otf     , HiraKakuProN-W6.otf,  % gt/m, gt/bx (multiweight))
177     HiraKakuProN-W6.otf     , HiraKakuStdN-W8.otf,  % gt/m (uni), gt/eb
178     HiraMaruProN-W4.otf                             % mg/m
179   }
180 }
181
182 % モリサワ
183 \DeclareOption{morisawa-pro}{
184   \ltjpreset_set_multi:n {
185     A-OTF-RyuminPro-Light.otf , A-OTF-FutoMinA101Pro-Bold.otf ,    % mc/m, mc/bx
186     A-OTF-GothicBBBPro-Medium.otf , A-OTF-FutoGoB101Pro-Bold.otf , % gt/m, gt/bx (multiweight))
187     A-OTF-GothicBBBPro-Medium.otf , A-OTF-MidashiGoPro-MB31.otf ,  % gt/m (uni), gt/eb
188     A-OTF-Jun101Pro-Light.otf % mg/m
189   }
190 }
191 \DeclareOption{morisawa-pr6n}{
192   \ltjpreset_set_multi:n {
193     A-OTF-RyuminPr6N-Light.otf , A-OTF-FutoMinA101Pr6N-Bold.otf ,    % mc/m, mc/bx
194     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-FutoGoB101Pr6N-Bold.otf , % gt/m, gt/bx (multiweight))
195     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-MidashiGoPr6N-MB31.otf ,  % gt/m (uni), gt/eb
196     A-OTF-Jun101Pr6N-Light.otf                                       % mg/m
197   }
198 }
199
200 % 游明朝/游ゴシック (Win8.1)
201 \DeclareOption{yu}{
202   \ltjpreset_set_multi:n {
203     yumin.ttf , yumindb.ttf ,     % mc/m, mc/bx
204     yugothic.ttf , yugothib.ttf , % gt/m, gt/bx (multiweight))
205     yugothic.ttf , yugothib.ttf , % gt/m (uni), gt/eb
206     yugothib.ttf                  % mg/m
207   }
208 }
209
210
211 % ipa, ipaex, ms
212 \DeclareOption{ipa}{
213   \ltjpreset_set_uni:nn { IPAMincho } { IPAGothic }
214 }
215 \DeclareOption{ipaex}{
216   \ltjpreset_set_uni:nn { IPAExMincho } { IPAExGothic }
217 }
218 \DeclareOption{ms}{
219   \ltjpreset_set_uni:nn { MS-Mincho } { MS-Gothic }
220 }
221
222 % {ipa,ipaex,ms}-dx % Office 付属フォントを利用
223 \DeclareOption{ipaex-hg}{
224   \ltjpreset_set_office:nn { IPAExMincho } { IPAExGothic }
225 }
226 \DeclareOption{ipa-hg}{
227   \ltjpreset_set_office:nn { IPAMincho } { IPAGothic }
228 }
229 \DeclareOption{ms-hg}{
230   \ltjpreset_set_office:nn { MS-Mincho } { MS-Gothic }
231 }
232
233
234 % 非埋込
235 \DeclareOption{noembed}{
236   \ltjpreset_set_uni:nn { Ryumin-Light } { GothicBBB-Medium }
237   \bool_set_true:N \l_ltjpreset_noembed_bool
238 }
239
240 \ExecuteOptions{noembed}
241 \ProcessOptions*
242
243 %% KozMinPr6N の場合はjp04 feature がないので,nlck にする
244 \clist_if_in:NnT \l_ltjpreset_font_list { KozMinPr6N-Regular.otf } {
245   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
246   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
247     \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=NLC }
248   }
249 }
250
251 %%%%%%%% main routine
252
253 %%%%  リストからの展開
254 % mc/m
255 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
256 \cs_set:Nx \ltjpreset_font_mc_m: { \tl_use:N \l_tmpa_tl }
257
258 % mc/bx
259 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
260 \cs_set:Nx \ltjpreset_font_mc_bx: { \tl_use:N \l_tmpa_tl }
261
262 % gt/m
263 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
264 \cs_set:Nx \ltjpreset_font_gt_m: { \tl_use:N \l_tmpa_tl }
265
266 % gt/bx
267 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
268 \cs_set:Nx \ltjpreset_font_gt_bx: { \tl_use:N \l_tmpa_tl }
269
270 % gt/m-uni
271 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
272 \cs_set:Nx \ltjpreset_font_gt_n_uni: { \tl_use:N \l_tmpa_tl }
273
274 % gt/eb
275 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
276 \cs_set:Nx \ltjpreset_font_gt_eb: { \tl_use:N \l_tmpa_tl }
277
278 % mg/m
279 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
280 \cs_set:Nx \ltjpreset_font_mg: { \tl_use:N \l_tmpa_tl }
281
282 %% HG 系フォント + JIS2004/90JIS のときはフォント名を置換
283 \bool_if:NT \l_ltjpreset_office_bool {
284   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
285   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl { 
286     \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme04.ttc }
287     \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge04.ttc }
288     \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu04.ttc }
289     \cs_set:Nx \ltjpreset_font_mg:    { hgrsmp04.ttf }
290     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
291     % HG ゴシックM のときはそうはいかないので 1 ウェイト時のゴシック体を使う
292   }
293   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
294   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl { 
295     \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme.ttc }
296     \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge.ttc }
297     \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu.ttc }
298     \cs_set:Nx \ltjpreset_font_mg:    { hgrsmp.ttf }
299   }
300 }
301
302 %%%% expert 用設定
303 \tl_new:N \l_ltjpreset_add_features_tl
304
305 \tl_set:Nx \l_ltjpreset_add_features_tl {
306   \tl_use:N \l_ltjpreset_kanji_shape_tl, 
307   JFM   = \ltjpreset_use_jfm:
308 }
309
310 \bool_if:NT \l_ltjpreset_expert_bool {
311   \cs_set:Npn \rubyfamily { \addfontfeatures { Style = Ruby} }
312   \tl_put_left:Nn \l_ltjpreset_add_features_tl { Style = HorizontalKana, }
313 }
314
315 %%%% (丸)ゴシック体の設定: bold option もここで
316 \int_compare:nTF { \l_ltjpreset_deluxe_int ==  2 } {
317 %%% mg
318  \newjfontfamily \mgfamily [
319       BoldFont = \ltjpreset_font_mg:,
320       \tl_use:N \l_ltjpreset_add_features_tl
321       \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
322       \tl_use:N \l_ltjpreset_add_features_tl 
323     ] { \ltjpreset_font_mg: }
324     \DeclareTextFontCommand{\textmg}{\mgfamily}
325 %%% gt/eb
326   \newjfontfamily \gtebfamily [
327       BoldFont = \ltjpreset_font_gt_eb:, 
328       \tl_use:N \l_ltjpreset_add_features_tl
329       \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
330       \tl_use:N \l_ltjpreset_add_features_tl 
331     ] { \ltjpreset_font_gt_eb: }
332   \DeclareTextFontCommand{\textgteb}{\gtebfamily}
333   \bool_if:NT \l_ltjpreset_bold_bool {
334     \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
335   }
336 }{
337   \bool_if:NTF \l_ltjpreset_bold_bool {
338     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
339   }{
340     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
341   }
342   \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
343   \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
344 }
345
346
347 %%%% 実際の fontspec の呼びだし
348
349 \defaultjfontfeatures{ Kerning=Off }
350
351 \setmainjfont [ 
352   BoldFont = \ltjpreset_font_mc_bx:
353   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
354   \tl_use:N \l_ltjpreset_add_features_tl 
355 ] { \ltjpreset_font_mc_m: }
356 \setsansjfont [ 
357   BoldFont = \ltjpreset_font_gt_bx: 
358   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
359   \tl_use:N \l_ltjpreset_add_features_tl 
360 ] { \ltjpreset_font_gt_m: }
361
362 \ExplSyntaxOff
363 \endinput